| | |
| | | return
|
| | |
|
| | | def CalcEquipGS(curItem):
|
| | | ##计算装备评分
|
| | | '''计算装备评分
|
| | | 评分组成:装备基础 + 传奇属性 + 绝版属性
|
| | | '''
|
| | | if not CheckNoteEquipGS(curItem):
|
| | | #GameWorld.DebugLog("不设置装备评分")
|
| | | return 0
|
| | |
| | | break
|
| | | attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
|
| | |
|
| | | gsParamIpyData = None
|
| | | classLV = GetItemClassLV(curItem)
|
| | | color = curItem.GetItemColor()
|
| | | itemQuality = curItem.GetItemQuality()
|
| | | gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, itemQuality)
|
| | | # 传奇属性
|
| | | legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
|
| | | legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
|
| | | if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
|
| | | classLV = GetItemClassLV(curItem)
|
| | | color = curItem.GetItemColor()
|
| | | itemQuality = curItem.GetItemQuality()
|
| | | gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, itemQuality)
|
| | | for i in xrange(legendAttrIDCnt):
|
| | | attrID = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
|
| | | attrValue = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
|
| | | attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
|
| | |
|
| | | MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0)
|
| | | MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0)
|
| | | 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 = attrDict.get(ShareDefine.Def_Effect_ArmorDefAddPer, 0)
|
| | | IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
|
| | | IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
|
| | |
|
| | | AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
|
| | | DamagePer = attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
|
| | |
| | | SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
|
| | | SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
|
| | | SpeedPer = 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())
|
| | |
|
| | | # 攻速不默认乘,仅作为参数提供策划使用
|
| | | AtkSpeed = attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
|
| | |
| | | OnlyFinalHurt = attrDict.get(ShareDefine.Def_Effect_OnlyFinalHurt, 0)
|
| | | PVPAtkBackHP = attrDict.get(ShareDefine.Def_Effect_PVPAtkBackHP, 0)
|
| | |
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
|
| | | if GetIsDogzEquip(curItem):
|
| | | # 神兽装备用不同公式
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
|
| | | else:
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
|
| | | return value
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | return hasEnough, itemIndexList, findItemIsBind, needCnt
|
| | |
|
| | |
|
| | | def GetPackItemBindStateIndexInfo(curPlayer, itemID):
|
| | | def GetPackItemBindStateIndexInfo(curPlayer, itemID, needCount=0):
|
| | | ''' 获取背包消耗道具绑定及未绑定索引情况
|
| | | @param needCount: 所需个数, 默认绑定优先,当找到已经足够的个数后不再遍历,减少无用遍历
|
| | | @return: 可消耗物品列表[[绑定物品索引], [不绑定物品索引]], 绑定个数, 未绑定个数
|
| | | '''
|
| | | consumeItemIndexList = [[], []] # 可消耗物品列表[[绑定物品索引], [不绑定物品索引]]
|
| | |
| | | if curItem.GetIsBind():
|
| | | consumeItemIndexList[0].append(i)
|
| | | bindCnt += itemCount
|
| | | if needCount > 0 and bindCnt >= needCount:
|
| | | break
|
| | | else:
|
| | | consumeItemIndexList[1].append(i)
|
| | | unBindCnt += itemCount
|
| | |
| | |
|
| | | def GetShopItemPrice(itemID, priceType):
|
| | | ''' 获取商城物品对应价格 '''
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
|
| | | # 系统固定商店类型: 仙玉(2-常用道具,3-成长变强),绑玉(4-绑玉商城)
|
| | | priceTypeShopTypeDict = {IPY_GameWorld.TYPE_Price_Gold_Money:[2, 3],
|
| | | IPY_GameWorld.TYPE_Price_Gold_Paper:[4],
|
| | | }
|
| | | ipyData = None
|
| | | if priceType in priceTypeShopTypeDict:
|
| | | for shopType in priceTypeShopTypeDict[priceType]:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ShopType":shopType, "ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
|
| | | if ipyData:
|
| | | break
|
| | | else:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
|
| | | if not ipyData:
|
| | | return 0
|
| | | return ipyData.GetMoneyNum()
|
| | |
| | | def DoLogicSwitchItemEx(curPlayer, srcBackpack, desBackPack, srcIndex, destIndex):
|
| | |
|
| | | #---物品检查---
|
| | | srcItem = curPlayer.GetItemManager().GetPack(srcBackpack).GetAt(srcIndex)
|
| | | srcPack = curPlayer.GetItemManager().GetPack(srcBackpack)
|
| | | if srcIndex < 0 or srcIndex >= srcPack.GetCount():
|
| | | return
|
| | | srcItem = srcPack.GetAt(srcIndex)
|
| | | if not CheckItemCanUse(srcItem):
|
| | | return
|
| | |
|
| | | destItem = curPlayer.GetItemManager().GetPack(desBackPack).GetAt(destIndex)
|
| | | destPack = curPlayer.GetItemManager().GetPack(desBackPack)
|
| | | if destIndex < 0 or destIndex >= destPack.GetCount():
|
| | | return
|
| | | destItem = destPack.GetAt(destIndex)
|
| | | #目标格子只验证锁定, 可以允许空位
|
| | | if destItem == None or destItem.GetIsLocked():
|
| | | return
|
| | |
| | | def GetIsEquip(curItem):
|
| | | return curItem.GetType() in ChConfig.Def_EquipItemType
|
| | |
|
| | | def GetIsDogzEquip(curItem):
|
| | | ## 返回是否神兽装备
|
| | | return curItem.GetType() in ChConfig.Def_DogzEquiipType
|
| | |
|
| | | ## 返回是否武器
|
| | | # @param curItem 当前物品
|
| | | # @return None
|