| | |
| | | import SkillCommon
|
| | | import PyGameData
|
| | | import ChConfig
|
| | | import ChEquip
|
| | |
|
| | | import random
|
| | |
|
| | |
| | | ## 获取诛仙装备位是否解锁
|
| | | # @param equipPlaceIndex: 注意传入的参数是装备位索引
|
| | | equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex)
|
| | | placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
|
| | | if str(equipPlace) not in placeUnlockDict:
|
| | | placeUnlockDict = IpyGameDataPY.GetConfigEx("EquipZhuXianUnlock") # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
|
| | | if not placeUnlockDict:
|
| | | placeUnlockDict = {}
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetZhuXianTowerCount()):
|
| | | ipyData = ipyDataMgr.GetZhuXianTowerByIndex(index)
|
| | | unlockEquipPlace = ipyData.GetUnLockEquipPlace()
|
| | | if not unlockEquipPlace:
|
| | | continue
|
| | | towerID = ipyData.GetID()
|
| | | placeUnlockDict[unlockEquipPlace] = towerID
|
| | | IpyGameDataPY.SetConfigEx("EquipZhuXianUnlock", placeUnlockDict)
|
| | | GameWorld.DebugLog("加载诛仙塔解锁装备位: placeUnlockDict=%s" % placeUnlockDict)
|
| | | if equipPlace not in placeUnlockDict:
|
| | | return True
|
| | | needTowerLV = placeUnlockDict[str(equipPlace)]
|
| | | needTowerLV = placeUnlockDict[equipPlace]
|
| | | curTowerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV) # 已过关的诛仙塔层数
|
| | | return curTowerLV >= needTowerLV
|
| | |
|
| | |
| | |
|
| | | zhuXianItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
|
| | | curEquip = zhuXianItemPack.GetAt(itemIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | if not ItemCommon.CheckItemCanUse(curEquip) or ItemControler.GetIsAuctionItem(curEquip):
|
| | | GameWorld.DebugLog("物品为空或不可用: itemIndex=%s" % itemIndex, playerID)
|
| | | return
|
| | | if not ItemCommon.GetIsZhuXianEquip(curEquip):
|
| | |
| | | destEquip = zhuXianEquipPack.GetAt(reqEquipPlaceIndex)
|
| | | desItemID, desUserData = [0, ''] if destEquip.IsEmpty() else [destEquip.GetItemTypeID(), destEquip.GetUserData()]
|
| | | srcItemID, srcUserData = curEquip.GetItemTypeID(), curEquip.GetUserData()
|
| | | if not ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptZhuXianEquip):
|
| | | if not ItemCommon.DoLogicSwitchItem(curPlayer, destEquip, curEquip, ShareDefine.rptZhuXianEquip):
|
| | | return
|
| | | dataDict = {'dotype':'EquipZhuXianItem', 'desItemID':desItemID, 'desUserData':desUserData, 'srcItemID':srcItemID, 'srcUserData':srcUserData}
|
| | | DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
|
| | |
| | |
|
| | |
|
| | | def RefreshZhuXianAttr(curPlayer):
|
| | | CalcZhuXianAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | #CalcZhuXianAttr(curPlayer)
|
| | | #PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | return
|
| | |
|
| | |
|
| | | def CalcZhuXianAttr(curPlayer):
|
| | | return
|
| | | ## 刷新诛仙属性
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
|
| | |
| | |
|
| | | allAttrList = [{} for _ in range(4)]
|
| | | allAttrListZXSuit = [{} for _ in range(4)]
|
| | | allAttrListZXStone = [{} for _ in range(4)]
|
| | | equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
|
| | | equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...}
|
| | | equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...}
|
| | | |
| | | equipPlaceStoneLVDict = {} #装备位对应宝石等级 {装备位:[宝石等级,..], ...}
|
| | | attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {}) # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...}
|
| | | addAttrIDList = range(ShareDefine.Def_Effect_SkillAddPer1, ShareDefine.Def_Effect_SkillAddPer7 + 1)
|
| | | reduceAttrIDList = range(ShareDefine.Def_Effect_SkillReducePer1, ShareDefine.Def_Effect_SkillReducePer7 + 1)
|
| | |
| | | zxSkillPlusAttrDict[legendAttrID] = zxSkillPlusAttrDict.get(legendAttrID, 0) + legendAttrValue
|
| | | else:
|
| | | PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrList)
|
| | | |
| | | #宝石属性
|
| | | gemlvList = ChEquip.CalcEquipStone_Effect(curPlayer, equipPlace, allAttrListZXStone)
|
| | | equipPlaceStoneLVDict[equipPlace] = gemlvList
|
| | | |
| | | |
| | | # GameWorld.DebugLog("诛仙装备属性: allAttrList=%s" % (allAttrList))
|
| | | # GameWorld.DebugLog(" zxSkillPlusAttrDict=%s" % (zxSkillPlusAttrDict))
|
| | | # GameWorld.DebugLog(" equipPlaceClassLVDict=%s" % (equipPlaceClassLVDict))
|
| | |
| | | ShareDefine.Def_Effect_ZXRuyiAttrPer:ShareDefine.zxetRuyi,
|
| | | ShareDefine.Def_Effect_ZXPendantAttrPer:ShareDefine.zxetPendant,
|
| | | ShareDefine.Def_Effect_ZXRingAttrPer:ShareDefine.zxetRing,
|
| | | ShareDefine.Def_Effect_ZXWeaponAttrPer:ShareDefine.zxetWeapon1,
|
| | | ShareDefine.Def_Effect_LXWeaponAttrPer:ShareDefine.zxetWeapon2,
|
| | | ShareDefine.Def_Effect_XXWeaponAttrPer:ShareDefine.zxetWeapon3,
|
| | | ShareDefine.Def_Effect_JXWeaponAttrPer:ShareDefine.zxetWeapon4,
|
| | | }
|
| | | suitPlaceGroupDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 2, {})
|
| | | for suitType, placeGroupList in suitPlaceGroupDict.items():
|
| | |
| | | PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXSuit)
|
| | | else:
|
| | | PlayerControl.CalcAttrDict_Type(suitEffID, suitEffValue, allAttrListZXSuit)
|
| | | |
| | | #宝石共鸣属性
|
| | | #GameWorld.DebugLog('equipPlaceStoneLVDict=%s'%equipPlaceStoneLVDict)
|
| | | needStoneCnt = IpyGameDataPY.GetFuncCfg('GemResonance')
|
| | | for suitType, placeGroupList in suitPlaceGroupDict.items():
|
| | | suitType = int(suitType)
|
| | | groupStoneLVList = []
|
| | | for place in placeGroupList:
|
| | | groupStoneLVList += equipPlaceStoneLVDict.get(place, [])
|
| | | |
| | | if len(groupStoneLVList) < needStoneCnt:
|
| | | continue
|
| | | groupStoneLVList.sort(reverse=True)
|
| | | shareStoneLV = min(groupStoneLVList[:needStoneCnt])
|
| | | GameWorld.DebugLog(" 激活诛仙宝石共鸣: suitType=%s, shareStoneLV=%s" % (suitType, shareStoneLV))
|
| | | stoneAttrIpyData = IpyGameDataPY.GetIpyGameData("ZhuXianStoneAttr", suitType, shareStoneLV)
|
| | | if not stoneAttrIpyData:
|
| | | continue
|
| | | attrIDList = stoneAttrIpyData.GetAttrIDList()
|
| | | attrValueList = stoneAttrIpyData.GetAttrValueList()
|
| | | if len(attrIDList) != len(attrValueList):
|
| | | continue
|
| | | for i, effID in enumerate(attrIDList):
|
| | | effValue = attrValueList[i]
|
| | | if effID in suitAttrIDPlusPlaceDict:
|
| | | plusPlace = suitAttrIDPlusPlaceDict[effID]
|
| | | if plusPlace not in equipPlaceBaseAttrDict:
|
| | | continue
|
| | | plusEffDict = equipPlaceBaseAttrDict[plusPlace]
|
| | | #GameWorld.DebugLog(" plusPlace=%s,plusEffDict=%s" % (plusPlace, plusEffDict))
|
| | | for plusEffID, plusEffValue in plusEffDict.items():
|
| | | addValue = int(plusEffValue * (10000 + effValue) / 10000.0)
|
| | | #GameWorld.DebugLog(" plusEffID=%s,plusEffValue=%s,addValue=%s" % (plusEffID, plusEffValue, addValue))
|
| | | PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXStone)
|
| | | else:
|
| | | PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListZXStone)
|
| | | |
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
|
| | |
|
| | | #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
|
| | | equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
| | | GameWorld.DebugLog("诛仙装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
|
| | | #curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | PlayerControl.SendMailByKey("DefaultLackSpace", [curPlayer.GetPlayerID()], prizeItemList)
|
| | | else:
|
| | | for giveItemID, itemCnt in giveItemDict.items():
|
| | | ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, True, [IPY_GameWorld.rptItem], True)
|
| | | ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | |
|
| | | #通知结果
|
| | | packData = ChPyNetSendPack.tagMCZhuXianDecomposeResult()
|