ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -479,9 +479,9 @@
    else:
        attrProportion = placeIpyData.GetBaseAttrProportion()
        attrInfoList = [
                        [ShareDefine.Def_Effect_Atk, colorIpyData.GetAtkStep()],
                        [ShareDefine.Def_Effect_Def, colorIpyData.GetDefStep()],
                        [ShareDefine.Def_Effect_MaxHP, colorIpyData.GetHPStep()],
                        [ChConfig.AttrID_Atk, colorIpyData.GetAtkStep()],
                        [ChConfig.AttrID_Def, colorIpyData.GetDefStep()],
                        [ChConfig.AttrID_MaxHP, colorIpyData.GetHPStep()],
                        ]
        baseAttrIDList, baseAttrValueList = [], []
        for attrID, attrStep in attrInfoList:
@@ -550,182 +550,8 @@
    curItem.SetUserData(UserData, len(UserData))
    return
def UpdateItemUserData(curItem, updateDict={}, delKeyList=[], isUpdateGS=False):
    ''' 更新物品UserData数据
    @param curItem: IPY_SingleItem 或  IPY_RoleItem
    @param updateDict: 需要更新的数据 {key:value, key:valueList, ...}
    @param delKeyList: 需要删除的数据 key列表[key, ...]
    @param isUpdateGS: 是否更新评分
    @note: UserData格式举例 {'17':['65','7','52'],'50':['0'],'19':['420','380','50'],'50':['1552728662']}
    '''
    isRoleItem = False
    if not hasattr(curItem, "SetUserData"):
        item = curItem.GetItem()
        isRoleItem = True
    else:
        item = curItem
    userData = item.GetUserData()
    if not userData:
        userDataDict = {}
    else:
        userDataDict = eval(userData)
    for delKey in delKeyList:
        userDataDict.pop(str(delKey), None)
    for key, value in updateDict.items():
        if type(value) == int:
            valueList = ['%s' % value]
        elif type(value) == list:
            valueList = ['%s' % v for v in value]
        else:
            continue
        userDataDict['%s' % key] = valueList
    SetItemUserData(item, userDataDict)
    if isUpdateGS:
        MakeEquipGS(curItem)
    elif isRoleItem:
        curItem.SetCount(curItem.GetCount()) # 为了触发物品同步
    return
def MakeEquipGS(curItem):
    if not CheckNoteEquipGS(curItem):
        #GameWorld.DebugLog("不设置装备评分")
        return
    value = CalcEquipGS(curItem)
    #GameWorld.DebugLog("设置装备评分: ItemID=%s,attrDict=%s,value=%s" % (curItem.GetItemTypeID(), attrDict, value))
    SetEquipGearScore(curItem, value)
    return
def CalcEquipGS(curItem):
    '''计算装备评分
        评分组成:装备基础 + 传奇属性
    '''
    if not CheckNoteEquipGS(curItem):
        #GameWorld.DebugLog("不设置装备评分")
        return 0
    attrDict = {}
    #基础属性效果
    for i in xrange(curItem.GetEffectCount()):
        curEffect = curItem.GetEffectByIndex(i)
        if not curEffect:
            break
        effectID = curEffect.GetEffectID()
        if effectID == 0:
            break
        attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
    gsValueEx = 0
    skillGSDict = IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)
    itemSkillIDList = GetItemSkillIDList(curItem)
    for addSkillID in itemSkillIDList:
        gsValueEx += skillGSDict.get(str(addSkillID), 0)
    itemID = curItem.GetItemTypeID()
    classLV = GetItemClassLV(curItem)
    color = curItem.GetItemColor()
    itemQuality = curItem.GetItemQuality()
    isSuit = 1 if curItem.GetSuiteID() > 0 else 0
    gsParamIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipGSParam", classLV, color, isSuit, itemQuality)
    # 传奇属性
    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curItem)
    for i, legendAttrID in enumerate(legAttrIDList):
        legendAttrValue = legAttrValueList[i]
        attrDict[legendAttrID] = attrDict.get(legendAttrID, 0) + legendAttrValue
    lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
    if lingQiIpyData:
        gsValueEx += lingQiIpyData.GetLingQiAttrScore()
    Atk = attrDict.get(ShareDefine.Def_Effect_Atk, 0)
    MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
    MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
    MaxHP = attrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
    Def = attrDict.get(ShareDefine.Def_Effect_Def, 0)
    ArmorDefPer = 0
    IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
    IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
    FabaoHurt = attrDict.get(ShareDefine.Def_Effect_FabaoHurt, 0)
    AtkBackHP = attrDict.get(ShareDefine.Def_Effect_AtkBackHP, 0)
    FinalHurt = attrDict.get(ShareDefine.Def_Effect_FinalHurt, 0)
    FinalHurtReduce = attrDict.get(ShareDefine.Def_Effect_FinalHurtReduce, 0)
    BaseEquipMaxHPAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipMaxHPAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipMaxHPAddPerC())
    BaseEquipAtkAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipAtkAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipAtkAddPerC())
    AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
    DamagePer = 0#attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
    SuperHitRate = attrDict.get(ShareDefine.Def_Effect_SuperHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateC())
    SuperHit = attrDict.get(ShareDefine.Def_Effect_SuperHit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitC())
    SuperHitPer = attrDict.get(ShareDefine.Def_Effect_SuperHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitPerC())
    DamReducePer = 0#attrDict.get(ShareDefine.Def_Effect_DamReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamReducePerC())
    MaxHPPer = attrDict.get(ShareDefine.Def_Effect_MaxHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMaxHPPerC())
    DefPer = 0#attrDict.get(ShareDefine.Def_Effect_DefPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDefPerC())
    LuckyHitRate = attrDict.get(ShareDefine.Def_Effect_LuckyHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateC())
    LuckyHitRateReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateReduceC())
    LuckyHitPer = attrDict.get(ShareDefine.Def_Effect_LuckyHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitPerC())
    LuckyHit = attrDict.get(ShareDefine.Def_Effect_LuckyHit, 0)
    LuckyHitReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitReduce, 0)
    LuckPer = attrDict.get(ShareDefine.Def_Effect_LuckPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckPerC())
    PetDamPer = attrDict.get(ShareDefine.Def_Effect_PetDamPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPetDamPerC())
    PerLVAtk = attrDict.get(ShareDefine.Def_Effect_PerLVAtk, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVAtkC())
    MissRate = 0#attrDict.get(ShareDefine.Def_Effect_MissRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissRateC())
    HitRate = 0#attrDict.get(ShareDefine.Def_Effect_HitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitRateC())
    DamBackPer = 0#attrDict.get(ShareDefine.Def_Effect_DamBackPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamBackPerC())
    PerLVMaxHP = attrDict.get(ShareDefine.Def_Effect_PerLVMaxHP, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVMaxHPC())
    DropEquipPer = attrDict.get(ShareDefine.Def_Effect_DropEquipPer, 0)# * (1 if not gsParamIpyData else gsParamIpyData.GetDropEquipPerC())
    DropMoneyPer = attrDict.get(ShareDefine.Def_Effect_DropMoneyPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropMoneyPerC())
    IgnoreDefRateReduce = 0#attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
    DamChanceDef = 0#attrDict.get(ShareDefine.Def_Effect_DamChanceDef, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamChanceDefC())
    SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
    SuperHitRateReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateReduceC())
    SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
    SpeedPer = 0#attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
    SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
    Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
    Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
    SkillAddPerA = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
    SkillAddPerB = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
    SkillAddPerC = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
    SkillAddPerD = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
    SkillAddPerE = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
    SkillAddPerF = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
    SkillAddPerG = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
    SkillReducePerA = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
    SkillReducePerB = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
    SkillReducePerC = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
    SkillReducePerD = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
    SkillReducePerE = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
    SkillReducePerF = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
    SkillReducePerG = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
    ReduceSkillCDPer = attrDict.get(ShareDefine.Def_Effect_ReduceSkillCDPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetReduceSkillCDPerC())
    FaintDefRate = attrDict.get(ShareDefine.Def_Effect_FaintDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFaintDefRateC())
    IgnoreDefRate = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateC())
    IgnoreDefRateReduce = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
    ProDefPer = attrDict.get(ShareDefine.Def_Effect_ProDefHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetProDefPerC())
    FinalHurtPerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtPerC())
    FinalHurtReducePerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtReducePerC())
    # 攻速不默认乘,仅作为参数提供策划使用
    AtkSpeed = 0#attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
    AtkSpeedC = 1#1 if not gsParamIpyData else gsParamIpyData.GetAtkSpeedC()
    OnlyFinalHurt = attrDict.get(ShareDefine.Def_Effect_OnlyFinalHurt, 0)
    PVPAtkBackHP = attrDict.get(ShareDefine.Def_Effect_PVPAtkBackHP, 0)
    if GetIsDogzEquip(curItem):
        # 神兽装备用不同公式
        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
    else:
        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
    value += gsValueEx
    return value
#---------------------------------------------------------------------
## 通过效果ID,检查是否为指定物品 
@@ -1293,13 +1119,7 @@
    return True
def CheckNoteEquipGS(curItem):
    if not CheckItemCanUse(curItem):
        return False
    if curItem.GetType() not in IpyGameDataPY.GetFuncEvalCfg("EquipGSTypeForSort", 1):
        return False
    return True
    return False
#---------------------------------------------------------------------
## 通过背包查找指定效果ID的指定数量物品