#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- ##@package ChEquip # ×°±¸Âß¼­´¦Àí # # @author alee # @date 2017-07-29 00:30 # @version 1.0 # # ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ #------------------------------------------------------------------------------ #"""Version = 2017-07-29 00:30""" #------------------------------------------------------------------------------ import IPY_GameWorld import GameWorld import ItemControler import SkillShell import PlayerControl import ChConfig import ChItem import ItemCommon import FBLogic import OperControlManager import Operate_EquipWash import Operate_EquipPlus import ShareDefine import ChPyNetSendPack import NetPackCommon import EventShell import IpyGameDataPY import PlayerWing import Operate_EquipStone import OpenServerCampaign import PassiveBuffEffMng import time import json import FormulaControl import PyGameData #--------------------------------------------------------------------- ##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×° # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµ, ÊÇ·ñͨ¹ý¼ì²é # @remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×° def CheckPlayerCanEquipItem(curPlayer): if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEquip_State: #InsteadEquip ¶Ô²»Æð,µ±Ç°×´Ì¬ÎÞ·¨¸ü»»×°±¸ #InsteadEquipÌæ»»ÎªGeRen_chenxin_436832 PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_436832") return False return True ## Ö´ÐÐÍæ¼Ò»»×°Âß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ÎïÆ·ÊµÀý # @param equipPackIndex ×°±¸±³°üË÷Òý # @param tick µ±Ç°Ê±¼ä # @return ²¼¶ûÖµ # @remarks Ö´ÐÐÍæ¼Ò»»×°Âß¼­ def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick): if equipPackIndex < 0: return False playerItemControl = ItemControler.PlayerItemControler(curPlayer) #---ÑéÖ¤ÊÇ·ñ¿ÉÒÔ»»Õâ¼þ×°±¸--- if not ItemCommon.CheckItemCanUse(curItem): return False if not ItemCommon.CheckItemCanUseByExpireTime(curItem): # ¹ýÆÚ GameWorld.DebugLog("×°±¸ÒѹýÆÚ!") return False changeItemEquipPlace = curItem.GetEquipPlace() if changeItemEquipPlace not in ShareDefine.RoleEquipType: return False if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex: #¼ì²é×°±¸Î»ÖúÍÌî±íÊÇ·ñÒ»Ö return False #--ÉèÖô©ÉÏÎïÆ·ÐǼ¶-- #=========================================================================== # if changeItemEquipPlace in ShareDefine.RoleEquipType: # equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace) # if equipPartStar != curItem.GetItemStarLV(): # curItem.SetItemStarLV(equipPartStar) #=========================================================================== #GameWorld.DebugLog("´©ÉϵÄ×°±¸ÉèÖÃÐǼ¶: index=%s,star=%s" % (changeItemEquipPlace, equipPartStar)) #---¿ªÊ¼»»×°Âß¼­--- #¼Ç¼»»×°ÎïÆ·ÐÅÏ¢ itemClassLV = ItemCommon.GetItemClassLV(curItem) changeItemID = curItem.GetItemTypeID() changeItemStarLV = 0 #curItem.GetItemStarLV() changeItemStoneCnt = 0 #curItem.GetUseStoneCount() changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount() changeItemUseData = curItem.GetUserData() suiteID = curItem.GetSuiteID() endureReduceType = curItem.GetEndureReduceType() #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse) #Ö´Ðл»×°¶¯×÷ equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex) if equipPlace == -1: return False equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = equipPack.GetAt(equipPackIndex) if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0: curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time())) #---»»×°³É¹¦--- if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex: #֪ͨ¿Í»§¶Ë½»»»ÎïÆ· curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData) if itemClassLV == GetEquipFacadeClassLV(curPlayer): #´©µ±Ç°Íâ¹Û½×µÄÌ××° ChangeEquipfacadeByClassLV(curPlayer, itemClassLV) if not endureReduceType: EventShell.EventRespons_EquipByPlace(curPlayer, itemClassLV, equipPlace) #¼Ç¼³È×°¡¢ºì×° #=========================================================================== # if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]: # classLV = ItemCommon.GetItemClassLV(curItem) # EventReport.WriteEvent_orange_equip(curPlayer, changeItemEquipPlace, classLV, itemQuality) #=========================================================================== #ÌØÊâ×°±¸, ²»ÐèҪˢÊôÐÔ if changeItemEquipPlace in ChConfig.EquipItemNoRefreshState: return True curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip) #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ if changeItemEquipPlace in ChConfig.EquipPlace_LingQi: RefreshPlayerLingQiEquipAttr(curPlayer) elif itemClassLV: RefreshPlayerEquipAttribute(curPlayer, itemClassLV) #Ë¢ÐÂËùÓÐÊôÐÔ playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() #×°±¸µÄ±»¶¯´¥·¢À༼ÄÜ PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer) return True ## Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä # @param self ÀàʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä def RefreshPlayerEquipAttribute(curPlayer, classLV=0): GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classLV=%s!!!" % classLV, curPlayer.GetPlayerID()) classlvList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classLV == 0 else [classLV] for rclasslv in classlvList: __CalcEquips_Effect(curPlayer, rclasslv) #if isRefreshEquipBuff: # __RefreshPlayerAllEquipBuff(curPlayer) if classLV: playerID = curPlayer.GetPlayerID() if playerID not in PyGameData.g_equipChangeClassLVInfo: PyGameData.g_equipChangeClassLVInfo[playerID] = [] classLVList = PyGameData.g_equipChangeClassLVInfo[playerID] if classLV not in classLVList: classLVList.append(classLV) #GameWorld.DebugLog("Ìí¼Ó×°±¸»º´æ±ä¸ü½×: classLV=%s, %s" % (classLV, classLVList), playerID) return def OnPlayerEquipLoginLogic(curPlayer): ''' Íæ¼ÒµÇ¼ͳһ´¦Àí×°±¸£¬Ö»±éÀúÒ»´Î×°±¸±³°ü£¬Í¨ÖªÐÅÏ¢¡¢¸üÐÂÒ»´ÎÊý¾Ý£¬·ÀÖ¹×ܵȼ¶Í³¼ÆÒì³£ ×°±¸Æ·ÖʳÈ×°¼°ÒÔÉÏÊýÁ¿¡¢×°±¸×ÜÐÇÊý¡¢Ç¿»¯×ܵȼ¶¡¢½ø»¯×ܵȼ¶¡¢Ï´Á·×ܵȼ¶¡¢±¦Ê¯×ܵȼ¶ ''' #NotifyEquipPartPlusLV(curPlayer) #NotifyEquipPartStar(curPlayer) #Operate_EquipWash.OnEquipWashLogin(curPlayer) #×°±¸Î»±¦Ê¯ÏâǶ֪ͨ #Operate_EquipStone.OnLogin(curPlayer) # if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow): # GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow, 1) # ChangeEquipfacadeByLingGen(curPlayer) ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo() # A3 B1 ×°±¸²¿Î»ÐÇÊýÐÅÏ¢ #tagMCEquipPartStarInfo ePartPlusLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() # A3 B3 ×°±¸²¿Î»Ç¿»¯ÐÅÏ¢ #tagMCEquipPartPlusInfo ePartXLPack = ChPyNetSendPack.tagMCEquipPartXLAttrInfo() # A3 BB ×°±¸Î»Ï´Á·ÊôÐÔÐÅÏ¢ #tagMCEquipPartXLAttrInfo ePartStonePack = ChPyNetSendPack.tagMCStoneInfo() # A3 BC ֪ͨװ±¸Î»¿×λ±¦Ê¯ID #tagMCStoneInfo orangeEquipCount = 0 totalStar = 0 totalPlusLV = 0 totalEvolveLV = 0 totalWashLV = 0 totalStoneLV = 0 holeIndexList = Operate_EquipStone.GetAllEquipPlaceHoleIndex() gameData = GameWorld.GetGameData() packType = IPY_GameWorld.rptEquip equipPack = curPlayer.GetItemManager().GetPack(packType) for index in xrange(equipPack.GetCount()): ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index}, isLogNone=False) if not ipyData: continue # Ö»¼ÆËãÓн׵ľ³½ç×°±¸ if not ipyData.GetClassLV(): continue curEquip = equipPack.GetAt(index) if not curEquip.IsEmpty(): if curEquip.GetItemColor() >= ShareDefine.Def_Item_Color_Orange: orangeEquipCount += 1 # ÐǼ¶ starLV = GetEquipPartStar(curPlayer, index) totalStar += starLV # Ç¿»¯µÈ¼¶ plusProficiency = GetEquipPartProficiency(curPlayer, packType, index) plusLV = GetEquipPartPlusLV(curPlayer, packType, index) totalPlusLV += plusLV # ½ø»¯µÈ¼¶ evolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, index) totalEvolveLV += evolveLV # Ï´Á·µÈ¼¶ washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index) totalWashLV += washLV # ±¦Ê¯µÈ¼¶ stoneIDList, stoneIsBindList = [], [] for holeIndex in holeIndexList: stoneID, stoneIsBind = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, index, holeIndex) stoneIDList.append(stoneID) stoneIsBindList.append(stoneIsBind) if stoneID == 0: continue curStone = gameData.GetItemByTypeID(stoneID) stoneLV = 0 if not curStone else curStone.GetEffectByIndex(0).GetEffectValue(1) totalStoneLV += stoneLV # ÐǼ¶ÐÅÏ¢°ü if starLV: ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar() ePartStarLV.Clear() ePartStarLV.EquipPackIndex = index ePartStarLV.Star = starLV ePartStarLVPack.InfoList.append(ePartStarLV) # Ç¿»¯¡¢½ø»¯ÐÅÏ¢°ü if plusLV or plusProficiency or evolveLV: ePartPlusLV = ChPyNetSendPack.tagMCEquipPartPlusLV() ePartPlusLV.Clear() ePartPlusLV.PackType = packType ePartPlusLV.EquipIndex = index ePartPlusLV.EquipPartStarLV = plusLV ePartPlusLV.Proficiency = plusProficiency ePartPlusLV.EvolveLV = evolveLV ePartPlusLVPack.InfoList.append(ePartPlusLV) # Ï´Á·ÐÅÏ¢°ü hasXLValue = False xlAttrList = [] for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1): washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue() washValue.XLAttrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (index, attrNum)) washValue.XLAttrChange = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (index, attrNum)) xlAttrList.append(washValue) if washValue.XLAttrValue or washValue.XLAttrChange: hasXLValue = True if hasXLValue or washLV: ePartXLAttr = ChPyNetSendPack.tagMCEquipPartXLAttr() ePartXLAttr.EquipPlace = index ePartXLAttr.XLAttrLV = washLV ePartXLAttr.XLAttrList = xlAttrList ePartXLAttr.XLAttrCnt = len(ePartXLAttr.XLAttrList) ePartXLPack.InfoList.append(ePartXLAttr) # ±¦Ê¯ÐÅÏ¢°ü stoneCount = len(stoneIDList) if stoneIDList.count(0) != stoneCount: stoneMsg = ChPyNetSendPack.tagMCStoneMsg() stoneMsg.EquipPlace = index stoneMsg.MaxStoneCount = stoneCount stoneMsg.StoneInfo = stoneIDList stoneMsg.StoneBind = stoneIsBindList ePartStonePack.InfoList.append(stoneMsg) # ֪ͨ·â°ü£¬ÓÐֵʱ²Å֪ͨ if ePartStarLVPack.InfoList: ePartStarLVPack.Count = len(ePartStarLVPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack) if ePartPlusLVPack.InfoList: ePartPlusLVPack.Count = len(ePartPlusLVPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartPlusLVPack) if ePartXLPack.InfoList: ePartXLPack.Count = len(ePartXLPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartXLPack) if ePartStonePack.InfoList: ePartStonePack.EquipCount = len(ePartStonePack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartStonePack) Operate_EquipPlus.SyncEquipMasterPlusLVInfo(curPlayer) # ¸üÐÂͳ¼Æ»ã×ÜÖµ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, orangeEquipCount) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, totalStar) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, totalPlusLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, totalEvolveLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, totalWashLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalStoneLV, totalStoneLV) GameWorld.DebugLog("µÇ¼¸üÐÂ×°±¸Ïà¹ØÖµ»ã×Ü: orangeEquipCount=%s,totalStar=%s,totalPlusLV=%s,totalEvolveLV=%s,totalWashLV=%s,totalStoneLV=%s" % (orangeEquipCount, totalStar, totalPlusLV, totalEvolveLV, totalWashLV, totalStoneLV)) Sync_EquipPartSuiteActivateInfo(curPlayer) for equipPlace in ChConfig.EquipPlace_LingQi: Sync_LingQiTrainData(curPlayer, equipPlace) return ## Ë¢ÐÂËùÓÐ×°±¸¶ÔÈËÎïÊôÐԵĸıä # @param self ÀàʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä #=============================================================================== # def __RefreshPlayerAllEquipBuff(curPlayer): # #³õʼ»¯ÈËÎï×°±¸buff # curPlayer.GetEquipBuff().Clear() # # packType = IPY_GameWorld.rptEquip # # equipPackList = [IPY_GameWorld.rptEquip, IPY_GameWorld.rptHorseEquip] # # #stoneLVCntList = [] # #=========================================================================== # orangeQualityCnt = 0 #³Èɫװ±¸ÊýÁ¿(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿) # for packIndex in equipPackList: # equipPack = curPlayer.GetItemManager().GetPack(packIndex) # # for equipIndex in range(0, equipPack.GetCount()): # # #±¸ÓÃ×°±¸À¸²»´¦Àí # if packIndex == IPY_GameWorld.rptEquip and equipIndex not in ShareDefine.RoleEquipType: # continue # # curEquip = equipPack.GetAt(equipIndex) # # if curEquip.IsEmpty(): # continue # # if not ItemCommon.CheckItemCanUseByExpireTime(curEquip): # # ¹ýÆÚ # continue # # #×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£© # CalcCurEquip_SkillBuff(curPlayer, curEquip) # # # # # ºóÃæµÄΪ½Çɫװ±¸×¨Óô¦Àí # #=================================================================== # # if packIndex != IPY_GameWorld.rptEquip: # # continue # # # # if isSuite or curEquip.GetItemTypeID() in ReadChConfig.GetEvalChConfig("AddSuiteNumEquitList"): # # suiteEquipCnt += 1 # #=================================================================== # # #Ì××°¼Óbuff ¸ù¾Ý×°±¸ÏÖÓеÄÌ××°µÄ¸öÊý×Öµä # #=============================================================================== # # #È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø # # OnOrangeQualityCntChange(curPlayer, orangeQualityCnt) # # # # # ÖØÖü¤»îÌáʾÀàÐÍΪNone # # curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_None) # #=============================================================================== # # # ×°±¸ÄÚ²ãbuff # allAttrListEquip = [{} for i in range(4)] # ²»°üº¬³á°ò¼°×°±¸ÉÏÏâǶµÄ±¦Ê¯ # SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer, allAttrListEquip) # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff, allAttrListEquip) # # # ×°±¸Íâ²ãbuffÊôÐÔ£¬´ËbuffËãÕ½Á¦ # allAttrListEquptBuffs = [{} for i in range(4)] # SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer, # allAttrListEquptBuffs, [], ChConfig.CalcBuffLevel_1) # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff1, allAttrListEquptBuffs) # # return #=============================================================================== #=============================================================================== # #//07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem # //½Çɫװ±¸ÀàÐÍ # int GetRoleEquipType(); # //ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý # int GetItemIndex(); #=============================================================================== ## ÈËÎï×°±¸ÎïÆ· # @param index ±³°üË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem def PlayerEquipItem(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick) return ## ÈËÎï×°±¸ÎïÆ· # @param index ±³°üË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem def __Func_PlayerEquipItem(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CEquipItem() #ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý packItemIndex = sendPack.GetItemIndex() #½Çɫװ±¸²¿Î» equipPackIndex = sendPack.GetRoleEquipType() #¼ì²éÍæ¼Ò״̬ÊÇ·ñ¿ÉÒÔ»»×° if not CheckPlayerCanEquipItem(curPlayer): return #¼ì²é»»×°¼ä¸ô #=========================================================================== # if tick - curPlayer.GetLastChangeEquipTick() <= ChConfig.Def_MinChangeEquipTime: # #GameWorld.Log("¸ü»»×°±¸Ê±¼ä¹ý¶Ì! %d"%(tick - curPlayer.GetLastChangeEquipTick())) # return # # curPlayer.SetLastChangeEquipTick(tick) #=========================================================================== #---»ñÈ¡·â°üÐèҪװ±¸µÄÎïÆ·--- rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = rolePack.GetAt(packItemIndex) #---Ö´ÐÐÍæ¼Ò»»×°Âß¼­--- if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick): return #»»×°Ê§°Ü֪ͨ¿Í»§¶ËÐÅÏ¢ curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0) return #--------------------------------------------------------------------- ## Ò»¼ü»»×°£¨·â°ü£© # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OneKeyChangeEquip(index, tick): return ## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PlayerUnEquip(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick) return #--------------------------------------------------------------------- ## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __Func_PlayerUnEquip(index, tick): sendPack = IPY_GameWorld.IPY_CUnEquipItem() curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not CheckPlayerCanEquipItem(curPlayer): return equipPackIndex = sendPack.GetEquipIndex() #Èç¹ûжϵÄÊÇÂíÆ¥£¬ÐèÒªÅж¨Èç¹ûÂíÆ¥×°±¸±³°üÓÐÎïÆ·£¬²»È÷ÅÏ #=========================================================================== # if equipIndex == IPY_GameWorld.rptHorse : # itemEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptHorseEquip) # # if not ItemControler.GetPackIsEmpty(itemEquipPack): # PlayerControl.NotifyCode(curPlayer, "7E355D97-520A-4A8C-8BC993AAEAF6071F") # return #=========================================================================== playerItemControl = ItemControler.PlayerItemControler(curPlayer) result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex()) if not result: #жÏÂ×°±¸Ê§°Ü return equipID = result[0] equipPlace = result[1] itemClassLV = result[2] ##ÌØÊâ×°±¸ , ²»ÐèÒª³åË¢ÊôÐÔ if equipPlace in ChConfig.EquipItemNoRefreshState: return #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ if equipPlace in ChConfig.EquipPlace_LingQi: RefreshPlayerLingQiEquipAttr(curPlayer) elif itemClassLV: RefreshPlayerEquipAttribute(curPlayer, itemClassLV) #Ë¢ÐÂËùÓÐÊôÐÔ playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() #×°±¸µÄ±»¶¯´¥·¢À༼ÄÜ PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer) return #// A3 18 ÁéÆ÷Í»ÆÆ #tagCMLingQiEquipBreak # #struct tagCMLingQiEquipBreak #{ # tagHead Head; # DWORD ItemID; //Í»ÆÆµÄÎïÆ·ID #}; def OnLingQiEquipBreak(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) breakItemID = clientData.ItemID ipyData = IpyGameDataPY.GetIpyGameData('LingQiAttr', breakItemID) if not ipyData: return nextItemID = ipyData.GetNextItemID() #Í»ÆÆºóµÄÎïÆ·ID if not IpyGameDataPY.GetIpyGameData('LingQiAttr', nextItemID): return breakItemData = GameWorld.GetGameData().GetItemByTypeID(breakItemID) nextItemData = GameWorld.GetGameData().GetItemByTypeID(nextItemID) if not breakItemData or not nextItemData: return equipIndex = ItemCommon.GetEquipPackIndex(breakItemData) if equipIndex != ItemCommon.GetEquipPackIndex(nextItemData): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ºÍÍ»ÆÆºóµÄÎïÆ·²»ÊÇͬ¸ö×°±¸Î»£¡breakItemID=%s,nextItemID=%s" % (breakItemID, nextItemID)) return equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = equipPack.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s" % (breakItemID)) return if curEquip.GetEndureReduceType(): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ÊÇʱЧÎïÆ·£¡breakItemID=%s" % (breakItemID)) return if curEquip.GetItemTypeID() != breakItemID: GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s" % (breakItemID)) return costItemDict = ipyData.GetUpCostItem() itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemDict, itemPack) if lackItemDict: GameWorld.DebugLog("Í»ÆÆÏûºÄÎïÆ·²»×㣡breakItemID=%s,costItemDict=%s,lackItemDict=%s" % (breakItemID, costItemDict, lackItemDict)) return #¿ÛÏûºÄ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, 'LingQiEquipBreak') ItemCommon.DelItem(curPlayer, curEquip, 1, False, ChConfig.ItemDel_LingQiEquipBreak, {}, True) #¸øÍ»ÆÆºóÁéÆ÷ if not ItemControler.PutItemInTempSwap(curPlayer, nextItemID): GameWorld.Log("ÁéÆ÷Í»ÆÆºóID(%s)·ÅÈëÁÙʱ½»»»±³°üʧ°Ü!" % (nextItemID), curPlayer.GetID()) return ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptTempSwap, IPY_GameWorld.rptEquip, 0, equipIndex) changeItemStarLV = 0 #curItem.GetItemStarLV() changeItemStoneCnt = 0 #curItem.GetUseStoneCount() changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount() changeItemUseData = '' curPlayer.ChangeEquip(nextItemID, equipIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData) #Ë¢ÊôÐÔ RefreshPlayerLingQiEquipAttr(curPlayer) playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() #֪ͨ½á¹û resultPack = ChPyNetSendPack.tagMCLingQiEquipBreakResult() resultPack.Clear() resultPack.MakeItemID = nextItemID NetPackCommon.SendFakePack(curPlayer, resultPack) PlayerControl.WorldNotify(0, 'SpiritOrgan', [curPlayer.GetName(), breakItemID, nextItemID]) return #// A3 27 ÁéÆ÷ÅàÑø #tagCMLingQiTrain # #struct tagCMLingQiTrain #{ # tagHead Head; # BYTE EquipPlace; //ÁéÆ÷×°±¸Î» # BYTE TrainType; //ÅàÑøÀàÐÍ£º 1-»ù´¡ÅàÑø£¬2-ÌØÊâÅàÑø£¬3-°Ù·Ö±ÈÅàÑø # WORD UseItemCnt; //ÏûºÄ²ÄÁϸöÊý #}; def OnLingQiTrain(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) equipPlace = clientData.EquipPlace # ÁéÆ÷×°±¸Î» trainType = clientData.TrainType # ÅàÑøÀàÐÍ costItemCount = clientData.UseItemCnt # ÏûºÄ²ÄÁϸöÊý trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType)) GameWorld.DebugLog("ÁéÆ÷ÅàÑø: equipPlace=%s,trainType=%s,trainLV=%s,costItemCount=%s,curEatItemCount=%s" % (equipPlace, trainType, trainLV, costItemCount, curEatItemCount)) if equipPlace not in ChConfig.EquipPlace_LingQi: return if trainType <= 0 or trainType > GetLingQiTrainTypes(equipPlace): return if trainLV <= 0: GameWorld.DebugLog(" ÅàÑøÎ´¼¤»î trainType=%s" % trainType) return trainIpyData = IpyGameDataPY.GetIpyGameData("LingQiTrain", equipPlace, trainType, trainLV) if not trainIpyData: return needRealmLV = trainIpyData.GetNeedRealmLV() curRealmLV = PlayerControl.GetTrainRealmLVReal(curPlayer, 3) if curRealmLV < needRealmLV: GameWorld.DebugLog(" ¾³½ç²»×㣬ÎÞ·¨ÅàÑø£¡ curRealmLV(%s) < needRealmLV(%s)" % (curRealmLV, needRealmLV)) return needEatCountTotal = trainIpyData.GetEatCntTotal() if not needEatCountTotal: GameWorld.DebugLog(" ¸ÃÅàÑøÒÑÂú¼¶£¡") return costItemIDList = IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), []) costItemID = costItemIDList[trainType - 1] if not costItemID or not costItemCount: return costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount) lackCnt = costItemCount - bindCnt - unBindCnt if lackCnt > 0: GameWorld.DebugLog(" ÏûºÄµÀ¾ß²»×㣬ÎÞ·¨ÅàÑø!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt)) return delCnt = costItemCount # ¿Û³ýÏûºÄ if delCnt: ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "LingQiTrain") updClassLV = trainLV updEatItemCount = curEatItemCount + costItemCount GameWorld.DebugLog(" updEatItemCount=%s,needEatCountTotal=%s" % (updEatItemCount, needEatCountTotal)) if updEatItemCount >= needEatCountTotal: updClassLV += 1 updEatItemCount -= needEatCountTotal GameWorld.DebugLog(" ½ø½×: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount)) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), updClassLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType), updEatItemCount) # Éý½× if updClassLV > trainLV: pass Sync_LingQiTrainData(curPlayer, equipPlace) # Ë¢ÊôÐÔ RefreshPlayerLingQiEquipAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return def GetLingQiTrainTypes(equipPlace): return len(IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), [])) def Sync_LingQiTrainData(curPlayer, equipPlace): clientPack = ChPyNetSendPack.tagMCLingQiTrainInfo() clientPack.EquipPlace = equipPlace clientPack.TrainLVList = [] clientPack.TrainItemCountList = [] for trainType in xrange(1, GetLingQiTrainTypes(equipPlace) + 1): trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) if trainLV == 0: trainLV = 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), trainLV) clientPack.TrainLVList.append(trainLV) clientPack.TrainItemCountList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType))) clientPack.TrainTypes = len(clientPack.TrainLVList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def RefreshPlayerLingQiEquipAttr(curPlayer): ''' Ë¢ÐÂÍæ¼ÒÁéÆ÷×°±¸ÊôÐÔ ''' classLV = 0 # ÁéÆ÷½×ĬÈÏΪ0 allAttrList = [{} for _ in range(4)] lingQiAttrList = [{} for _ in range(4)] equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) equipScoreTotal = 0 lv = curPlayer.GetLV() lqAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {}) for equipPlace in ChConfig.EquipPlace_LingQi: ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace) if not ipyData: continue equipIndex = ipyData.GetGridIndex() curEquip = equipPack.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): continue if not ItemCommon.CheckItemCanUseByExpireTime(curEquip): # ¹ýÆÚ continue equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip) itemID = curEquip.GetItemTypeID() #»ù´¡ÊôÐÔЧ¹û for effIndex in xrange(curEquip.GetEffectCount()): curEff = curEquip.GetEffectByIndex(effIndex) effID = curEff.GetEffectID() if effID == 0: break PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), lingQiAttrList) #ÁéÆ÷ÊôÐÔ lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID) if lingQiIpyData: lingQiAttrIDList = lingQiIpyData.GetLingQiAttrID() lingQiAttrValueList = lingQiIpyData.GetLingQiAttrValue() for lqIndex, lqAttrID in enumerate(lingQiAttrIDList): if str(lqAttrID) in lqAttrFormatDict: attrFormat = lqAttrFormatDict[str(lqAttrID)] maxOOPValue = lingQiAttrValueList[lqIndex] lqAttrValue = eval(FormulaControl.GetCompileFormula("LingQiAttrFormat_%s" % lqAttrID, attrFormat)) else: lqAttrValue = lingQiAttrValueList[lqIndex] PlayerControl.CalcAttrDict_Type(lqAttrID, lqAttrValue, lingQiAttrList) #ÁéÆ÷¸÷²¿Î»ÆäËûÊôÐÔ #if equipPlace == ShareDefine.retWing: # PlayerWing.CalcWingAttrEx(curPlayer, curEquip, allAttrList) # ÐÂÅàÑøÊôÐÔ guardTrainAttrList = [{} for _ in range(4)] wingTrainAttrList = [{} for _ in range(4)] peerlessWeaponTrainAttrList = [{} for _ in range(4)] peerlessWeapon2TrainAttrList = [{} for _ in range(4)] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetLingQiTrainCount()): trainIpyData = ipyDataMgr.GetLingQiTrainByIndex(index) equipPlace = trainIpyData.GetEquipPlace() trainType = trainIpyData.GetTrainType() dataTrainLV = trainIpyData.GetTrainLV() if equipPlace == ShareDefine.retGuard1: lingQiTrainAttrList = guardTrainAttrList elif equipPlace == ShareDefine.retWing: lingQiTrainAttrList = wingTrainAttrList elif equipPlace == ShareDefine.retPeerlessWeapon: lingQiTrainAttrList = peerlessWeaponTrainAttrList elif equipPlace == ShareDefine.retPeerlessWeapon2: lingQiTrainAttrList = peerlessWeapon2TrainAttrList else: continue trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) if dataTrainLV > trainLV: continue elif dataTrainLV == trainLV: trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType)) else: trainItemCount = trainIpyData.GetEatCntTotal() # µÈ½×¶îÍâÊôÐÔ lvAttrTypeList = trainIpyData.GetLVAttrTypeList() lvAttrValueList = trainIpyData.GetLVAttrValueList() for i, attrID in enumerate(lvAttrTypeList): attrValue = lvAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, lingQiTrainAttrList) # ÅàÑøµ¤Ôö¼ÓÊôÐÔ eatCntEverytime = trainIpyData.GetEatCntEverytime() if trainItemCount and eatCntEverytime: eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList() eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList() attrMultiple = trainItemCount / eatCntEverytime for i, attrID in enumerate(eatItemAttrTypeList): attrValue = eatItemAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, lingQiTrainAttrList) #GameWorld.DebugLog("ÊØ»¤ÅàÑøÊôÐÔ: %s" % guardTrainAttrList) #GameWorld.DebugLog("³á°òÅàÑøÊôÐÔ: %s" % wingTrainAttrList) #GameWorld.DebugLog("ÃðÊÀÅàÑøÊôÐÔ: %s" % peerlessWeaponTrainAttrList) #GameWorld.DebugLog("ÊÉ»êÅàÑøÊôÐÔ: %s" % peerlessWeapon2TrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GuardTarin, guardTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_WingTarin, wingTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain, peerlessWeaponTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train, peerlessWeapon2TrainAttrList) lqFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2)) PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_LingQi, lqFightPowerEx) #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ1: %s" % allAttrList) #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ2: %s" % lingQiAttrList) #GameWorld.DebugLog("ÁéÆ÷ÆÀ·ÖÕ½Á¦: equipScoreTotal=%s, %s" % (equipScoreTotal, lqFightPowerEx)) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList) return def __CalcEquips_Effect(curPlayer, classLV): ''' ¾³½ç×°±¸ÏµÍ³ÊôÐÔ 1. ×°±¸Ä£¿é£¬Ã¿¸ö¾³½ç½×¶ÀÁ¢£¬Ã¿¸ö¾³½çÕ½Á¦¶ÀÁ¢Ä£¿é¼ÆËã 1.1 ×°±¸±¾ÉíÊôÐÔ: ²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ »ù´¡ÊôÐÔ: ÎïÆ·±íÖеÄÅäÖà ´«ÆæÊôÐÔ: 2.×°±¸Î»ÐǼ¶Ä£¿é 2.1 ×°±¸Î»ÉýÐÇÊôÐÔ£º²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ ÉýÐÇ»ù´¡ÊôÐÔ£¬ÊôÐÔÊôÓÚ×°±¸»ù´¡ ÉýÐǵȼ¶ÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡ ÐǼ¶Ì××°ÊôÐÔ£¬Ïê¼ûÌ××°ÊôÐÔ 2.2 ×°±¸Î»Ì××°ÊôÐÔ£º²»ÄÜÓÐÓ°ÏìÆäËû¾³½ç×°±¸µÄÊôÐÔ ÓÉ×°±¸Î»ÊÇ·ñÌ××°¼°ÐǼ¶Êý¾ö¶¨Ì××°ÊôÐÔ 3.×°±¸Î»Ç¿»¯Ä£¿é£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»Ç¿»¯ÊôÐÔ×ܺÍÕ½Á¦ Ç¿»¯µÈ¼¶ÊôÐÔ ½ø»¯µÈ¼¶ÊôÐÔ£¬Ó°Ïì±¾²¿Î»±¾¾³½ç×°±¸»ù´¡ 4.×°±¸Î»±¦Ê¯ÊôÐÔ£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»±¦Ê¯ÊôÐÔ×ܺÍÕ½Á¦ ±¦Ê¯µÈ¼¶ÊôÐÔ ±¦Ê¯¾õÐÑÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡ 5.×°±¸Î»Ï´Á·ÊôÐÔ£ºÕ½Á¦ÎªËùÓо³½ç×°±¸Î»Ï´Á·ÊôÐÔ×ܺÍÕ½Á¦ Ï´Á·µÈ¼¶ÊôÐÔ Ï´Á·Ì××°ÊôÐÔ£¬»áÓ°Ïì±¾½××°±¸»ù´¡ ''' if classLV < 1: GameWorld.ErrLog("Ë¢¾³½ç×°±¸ÊôÐÔ½×´íÎó!µ±Ç°²»Ö§³Ö¸Ã½×Ä£¿é: classLV=%s" % classLV) return #GameWorld.DebugLog("----- Ë¢¾³½ç×°±¸Õ½Á¦: classLV=%s" % (classLV)) allEquipBaseAttrDict = {} # ËùÓÐ×°±¸»ù´¡ÊôÐÔ {attrID:value, ...} baseEquipBaseAttrDict = {} # »ù´¡×°±¸»ù´¡ÊôÐÔ{attrID:value, ...} equipBaseAttrDict = {} # ×°±¸»ù´¡ÊôÐÔ {×°±¸Î»:{attrID:value, ...}, ...} equipColorDict = {} # ×°±¸Æ·ÖÊÐÅÏ¢ {×°±¸Î»:itemColor, ...} allAttrListEquip = [{} for _ in range(4)] # ×°±¸ÊôÐÔ equip_addEquipBaseAttrPerList = [{}, {}, {}] # ×°±¸¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»] baseAttrDictStar, totalStarLV = {}, 0 allAttrListStar = [{} for _ in range(4)] # ÉýÐÇÊôÐÔ star_addEquipBaseAttrPerList = [{}, {}, {}] # ÉýÐǹ¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»] baseAttrDictPlus, totalPlusLV = {}, 0 allAttrListPlus = [{} for _ in range(4)] # Ç¿»¯ÊôÐÔ plus_addEquipBaseAttrPerList = [{}, {}, {}] # Ç¿»¯¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»] baseAttrDictStone, totalStoneLV = {}, 0 allAttrListStone = [{} for _ in range(4)] # ±¦Ê¯ÊôÐÔ #stone_addEquipBaseAttrPerList = [{}, {}, {}] # ±¦Ê¯¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»] baseAttrDictWash, totalWashLV = {}, 0 allAttrListWash = [{} for _ in range(4)] # Ï´Á·ÊôÐÔ #wash_addEquipBaseAttrPerList = [{}, {}, {}] # Ï´Á·¹¦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³ÉÐÅÏ¢ [ËùÓв¿Î», »ù´¡²¿Î», Ö¸¶¨²¿Î»] packType = IPY_GameWorld.rptEquip playerEquip = curPlayer.GetItemManager().GetPack(packType) equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []) #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #×î´óÌ××°ÀàÐÍ #equipPlaceList = [] # Óд©´÷×°±¸µÄ×°±¸Î»Áбí suitCntDict = {} #Ì××°ÊýÁ¿×Öµä #legendAttrDict = {} #ËùÓд«ÆæÊôÐÔ equipScoreTotal = 0 #Ϊ½â¾ö×°±¸ÆÀ·Ö¡¢Õ½Á¦²»Ò»ÖµÄÇé¿ö£¬×°±¸Õ½Á¦¸ÄΪÓÉÆÀ·Ö×÷Ϊ²ÎÊý¼ÆËãÕ½Á¦ basePlusLVMin = None # »ù´¡×°±¸×îСǿ»¯µÈ¼¶£¬¼ÆËã´óʦǿ»¯ÊôÐÔÓà # 1. Ñ­»·±éÀú±¾½××°±¸ for equipPlace in equipPartStarIndexList: ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace) if not ipyData: continue equipIndex = ipyData.GetGridIndex() curEquip = playerEquip.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): continue #if not ItemCommon.CheckItemCanUseByExpireTime(curEquip): # # ¹ýÆÚ£¬Ôݲ»Åжϣ¬ÒÔºó¾³½ç×°±¸ÓÐʱЧװ±¸ÔÙ¿ªÆô # continue #equipPlaceList.append(equipIndex) equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip) itemColor = curEquip.GetItemColor() equipColorDict[equipPlace] = itemColor baseAttrDict = {} # ×°±¸Î»»ù´¡ÊôÐÔ: ÎïÆ·±í + ÐǼ¶»ù´¡ isBaseEquip = equipPlace in ChConfig.EquipPlace_Base #GameWorld.DebugLog("×°±¸Î» %s: itemID=%s,isBaseEquip=%s,equipScoreTotal=%s" % (equipPlace, curEquip.GetItemTypeID(), isBaseEquip, equipScoreTotal)) #»ù´¡ÊôÐÔЧ¹û for i in xrange(curEquip.GetEffectCount()): curEffect = curEquip.GetEffectByIndex(i) if not curEffect: break effectID = curEffect.GetEffectID() if effectID == 0: #×îºóÒ»¸ö break effectValue = curEffect.GetEffectValue(0) if not effectValue: continue PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip) baseAttrDict[effectID] = baseAttrDict.get(effectID, 0) + effectValue allEquipBaseAttrDict[effectID] = allEquipBaseAttrDict.get(effectID, 0) + effectValue if isBaseEquip: baseEquipBaseAttrDict[effectID] = baseEquipBaseAttrDict.get(effectID, 0) + effectValue #GameWorld.DebugLog(" ÎïÆ·±íÊôÐÔ: ID=%s +%s" % (effectID, effectValue)) #ÐÇÊýÊôÐÔ equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) # ÉúЧµÄÐÇÊý if equipPartStar: totalStarLV += equipPartStar #GameWorld.DebugLog(" ÐǼ¶ÊôÐÔ: classLV=%s, equipPlace=%s, equipPartStar=%s" % (classLV, equipPlace, equipPartStar)) ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classLV, equipPlace, equipPartStar) starBaseAttrDict = {} if not ipyData else ipyData.GetBaseAttrInfo() # ÐǼ¶»ù´¡ for starBaseAttrID, starBaseAttrValue in starBaseAttrDict.items(): PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListStar) baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue baseAttrDictStar[starBaseAttrID] = baseAttrDictStar.get(starBaseAttrID, 0) + starBaseAttrValue allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue if isBaseEquip: baseEquipBaseAttrDict[starBaseAttrID] = baseEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue #GameWorld.DebugLog(" ÐǼ¶»ù´¡ÊôÐÔ: ID=%s +%s" % (starBaseAttrID, starBaseAttrValue)) starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # ÐǼ¶¸½¼Ó for starAttrID, starAttrValue in starAttrDict.items(): PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar) #GameWorld.DebugLog(" ÐǼ¶¸½¼ÓÊôÐÔ: ID=%s +%s" % (starAttrID, starAttrValue)) __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList) equipBaseAttrDict[equipPlace] = baseAttrDict #Ì××°¼ÆÊý suiteID = curEquip.GetSuiteID() if suiteID: if suiteID not in suitCntDict: suitCntDict[suiteID] = [] suitCntDict[suiteID].append(equipPartStar) #´«ÆæÊôÐÔ legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip) for i, legendAttrID in enumerate(legAttrIDList): legendAttrValue = legAttrValueList[i] PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip) #GameWorld.DebugLog(" ´«ÆæÊôÐÔ: ID=%s +%s" % (legendAttrID, legendAttrValue)) __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList) #ÎïÆ·Ç¿»¯ÊôÐÔ plusLV = __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrListPlus, plus_addEquipBaseAttrPerList) totalPlusLV += plusLV if isBaseEquip: basePlusLVMin = plusLV if basePlusLVMin == None else min(basePlusLVMin, plusLV) #¼ÆËã×°±¸±¦Ê¯¼Ó³É gemLVList = CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrListStone) totalStoneLV += (sum(gemLVList) if gemLVList else 0) #Ï´Á·ÊôÐÔ washLV = Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrListWash) totalWashLV += washLV # GameWorld.DebugLog(" ×°±¸Ñ­»·ÊôÐÔ: %s" % (allAttrListEquip)) # GameWorld.DebugLog(" ÉýÐÇÑ­»·ÊôÐÔ: %s" % (allAttrListStar)) # GameWorld.DebugLog(" Ç¿»¯Ñ­»·ÊôÐÔ: %s" % (allAttrListPlus)) # GameWorld.DebugLog(" ±¦Ê¯Ñ­»·ÊôÐÔ: %s" % (allAttrListStone)) # GameWorld.DebugLog(" Ï´Á·Ñ­»·ÊôÐÔ: %s" % (allAttrListWash)) # GameWorld.DebugLog(" -----" ) # 2. ¼ÆËã±éÀúºóµÄ¸½¼ÓÊôÐÔ #Ì××°ÊôÐÔ£¬ÔݹéΪÐǼ¶Ì××°ÊôÐÔ CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListStar) #´óʦ __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList) # GameWorld.DebugLog(" ÉýÐÇÊôÐÔÌ××°: %s" % (allAttrListEquip)) # 3. ¼ÆËã¶Ô×°±¸»ù´¡µÄ¸½¼Ó¼Ó³É # GameWorld.DebugLog(" -----" ) # GameWorld.DebugLog(" ËùÓÐ×°±¸»ù´¡ÊôÐÔ: %s" % (allEquipBaseAttrDict)) # GameWorld.DebugLog(" »ù´¡×°±¸»ù´¡ÊôÐÔ: %s" % (baseEquipBaseAttrDict)) # GameWorld.DebugLog(" µ¥¼þ×°±¸»ù´¡ÊôÐÔ: %s" % (equipBaseAttrDict)) # GameWorld.DebugLog(" -----" ) #¼ÆË㹦Äܵã¶Ô×°±¸»ù´¡µÄ¼Ó³É insideAttrDictEquip, insideAttrDictStar, insideAttrDictPlus, insideAttrDictStone, insideAttrDictWash = {}, {}, {}, {}, {} __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, insideAttrDictEquip, "Equip") __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, star_addEquipBaseAttrPerList, insideAttrDictStar, "Star") __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, insideAttrDictPlus, "Plus") #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone") #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash") #¼ÆËã×°±¸»ù´¡ÊôÐÔ¸½¼ÓÕ½Á¦ (Ŀǰ×é³É: ÆÀ·ÖÕ½Á¦ + ...) equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2)) # 4. ÀÛ¼ÓËùÓн××°±¸Î»ÊôÐÔ playerID = curPlayer.GetPlayerID() if playerID not in PyGameData.g_playerEquipPartAttrDict: PyGameData.g_playerEquipPartAttrDict[playerID] = {} equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID] equipPartAttrDict[classLV] = [equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, equipColorDict, baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV, baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV, baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV, baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV, ] # GameWorld.DebugLog(" ----- ÀÛ¼ÓËùÓн××°±¸Î»Ñø³ÉÊôÐÔ") # GameWorld.DebugLog(" ±¾½××°±¸Õ½Á¦: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx)) # GameWorld.DebugLog(" ±¾½××°±¸ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListEquip, insideAttrDictEquip)) # GameWorld.DebugLog(" ±¾½×ÉýÐÇÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListStar, insideAttrDictStar)) # GameWorld.DebugLog(" ±¾½×Ç¿»¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListPlus, insideAttrDictPlus)) # GameWorld.DebugLog(" ±¾½×±¦Ê¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListStone, insideAttrDictStone)) # GameWorld.DebugLog(" ±¾½×Ï´Á·ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allAttrListWash, insideAttrDictWash)) allClassEquipFightPowerEx = 0 allClassAttrListEquip, allClassInsideAttrDictEquip, classEquipColorDict = [{} for _ in range(4)], {}, {} allClassAttrListStar, allClassInsideAttrDictStar, classBaseAttrDictStar, classStarLVDict = [{} for _ in range(4)], {}, {}, {} allClassAttrListPlus, allClassInsideAttrDictPlus, classBaseAttrDictPlus, classPlusLVDict = [{} for _ in range(4)], {}, {}, {} allClassAttrListStone, allClassInsideAttrDictStone, classBaseAttrDictStone, classStoneLVDict = [{} for _ in range(4)], {}, {}, {} allClassAttrListWash, allClassInsideAttrDictWash, classBaseAttrDictWash, classWashLVDict = [{} for _ in range(4)], {}, {}, {} for classLV, attrList in equipPartAttrDict.items(): equipFightPowerEx, \ allAttrListEquip, insideAttrDictEquip, equipColorDict, \ baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV, \ baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV, \ baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV, \ baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV = attrList #GameWorld.DebugLog(" classLV=%s, %s" % (classLV, attrList)) allClassEquipFightPowerEx += equipFightPowerEx for i in xrange(4): PlayerControl.AddAttrDictValue(allClassAttrListEquip[i], allAttrListEquip[i]) PlayerControl.AddAttrDictValue(allClassAttrListStar[i], allAttrListStar[i]) PlayerControl.AddAttrDictValue(allClassAttrListPlus[i], allAttrListPlus[i]) PlayerControl.AddAttrDictValue(allClassAttrListStone[i], allAttrListStone[i]) PlayerControl.AddAttrDictValue(allClassAttrListWash[i], allAttrListWash[i]) PlayerControl.AddAttrDictValue(allClassInsideAttrDictEquip, insideAttrDictEquip) PlayerControl.AddAttrDictValue(allClassInsideAttrDictStar, insideAttrDictStar) PlayerControl.AddAttrDictValue(allClassInsideAttrDictPlus, insideAttrDictPlus) PlayerControl.AddAttrDictValue(allClassInsideAttrDictStone, insideAttrDictStone) PlayerControl.AddAttrDictValue(allClassInsideAttrDictWash, insideAttrDictWash) classEquipColorDict[classLV] = equipColorDict classBaseAttrDictStar[classLV] = baseAttrDictStar classBaseAttrDictPlus[classLV] = baseAttrDictPlus classBaseAttrDictStone[classLV] = baseAttrDictStone classBaseAttrDictWash[classLV] = baseAttrDictWash classStarLVDict[classLV] = totalStarLV classPlusLVDict[classLV] = totalPlusLV classStoneLVDict[classLV] = totalStoneLV classWashLVDict[classLV] = totalWashLV customAttrDictEquip = {"classEquipColorDict":classEquipColorDict} customAttrDictStar = {"classBaseAttrDictStar":classBaseAttrDictStar, "classStarLVDict":classStarLVDict} customAttrDictPlus = {"classBaseAttrDictPlus":classBaseAttrDictPlus, "classPlusLVDict":classPlusLVDict} customAttrDictStone = {"classBaseAttrDictStone":classBaseAttrDictStone, "classStoneLVDict":classStoneLVDict} customAttrDictWash = {"classBaseAttrDictWash":classBaseAttrDictWash, "classWashLVDict":classWashLVDict} # GameWorld.DebugLog(" ËùÓн××°±¸Õ½Á¦: %s" % (allClassEquipFightPowerEx)) # GameWorld.DebugLog(" ËùÓн××°±¸ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListEquip, allClassInsideAttrDictEquip)) # GameWorld.DebugLog(" ËùÓн×ÉýÐÇÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListStar, allClassInsideAttrDictStar)) # GameWorld.DebugLog(" ËùÓн×Ç¿»¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListPlus, allClassInsideAttrDictPlus)) # GameWorld.DebugLog(" ËùÓнױ¦Ê¯ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListStone, allClassInsideAttrDictStone)) # GameWorld.DebugLog(" ËùÓн×Ï´Á·ÊôÐÔ: %s, ÄÚ²¿¼Ó³É=%s" % (allClassAttrListWash, allClassInsideAttrDictWash)) PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip, customAttrDict=customAttrDictEquip) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar, customAttrDict=customAttrDictStar) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus, customAttrDict=customAttrDictPlus) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone, customAttrDict=customAttrDictStone) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash, customAttrDict=customAttrDictWash) return def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList): ## ¼ÆËãÆäËû¹¦ÄÜÊôÐÔ¶Ô×°±¸»ù´¡ÊôÐÔµÄ¼Ó³É if attrID not in ChConfig.EquipBassAttrAddInfoSet: return effPlace, calcAttrList = ChConfig.EquipBassAttrAddInfoSet[attrID] #GameWorld.DebugLog(" ×°±¸»ù´¡¼Ó³ÉÐÅÏ¢: ID=%s,effPlace=%s,calcAttrList=%s" % (attrID, effPlace, calcAttrList)) # ËùÓв¿Î» if effPlace == -1: allPlaceAddPerDict = addPerInfoList[0] for calcAttrIndex in calcAttrList: allPlaceAddPerDict[calcAttrIndex] = allPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue #GameWorld.DebugLog(" µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList)) return # »ù´¡²¿Î» if effPlace == -2: basePlaceAddPerDict = addPerInfoList[1] for calcAttrIndex in calcAttrList: basePlaceAddPerDict[calcAttrIndex] = basePlaceAddPerDict.get(calcAttrIndex, 0) + attrValue #GameWorld.DebugLog(" µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList)) return # Ö¸¶¨²¿Î» elif effPlace > 0 and equipPlace == effPlace: assignPlaceAddPerDict = addPerInfoList[2] if equipPlace not in assignPlaceAddPerDict: assignPlaceAddPerDict[equipPlace] = {} curPlaceAddPerDict = assignPlaceAddPerDict[equipPlace] for calcAttrIndex in calcAttrList: curPlaceAddPerDict[calcAttrIndex] = curPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue #GameWorld.DebugLog(" µ±Ç°¼Ó³ÉÐÅÏ¢=%s" % (addPerInfoList)) return return def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""): ## ¼ÆËãÆäËû¹¦ÄÜÊôÐÔ¶Ô×°±¸»ù´¡ÊôÐԼӳɵÄÊôÐÔ¾ßÌåÖµ allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList #GameWorld.DebugLog(" ¼ÆË㹦Äܵã¶Ô×°±¸»ù´¡ÊôÐÔ¼Ó³É: %s" % sign) #GameWorld.DebugLog(" È«²¿×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (allEquipBaseAttrDict, allPlaceAddPerDict)) for attrID, addPer in allPlaceAddPerDict.items(): if attrID not in allEquipBaseAttrDict: continue baseValue = allEquipBaseAttrDict[attrID] addValue = int(baseValue * addPer / 10000.0) PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict) #GameWorld.DebugLog(" ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer)) #GameWorld.DebugLog(" »ù´¡×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict)) for attrID, addPer in basePlaceAddPerDict.items(): if attrID not in baseEquipBaseAttrDict: continue baseValue = baseEquipBaseAttrDict[attrID] addValue = int(baseValue * addPer / 10000.0) PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict) #GameWorld.DebugLog(" ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer)) #GameWorld.DebugLog(" Ö¸¶¨×°±¸ÊôÐÔ: %s, ¼Ó³É%s" % (equipBaseAttrDict, assignPlaceAddPerDict)) for equipPlace, addPerDict in assignPlaceAddPerDict.items(): if equipPlace not in equipBaseAttrDict: continue baseAttrDict = equipBaseAttrDict[equipPlace] for attrID, addPer in addPerDict.items(): if attrID not in baseAttrDict: continue baseValue = baseAttrDict[attrID] addValue = int(baseValue * addPer / 10000.0) PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict) #GameWorld.DebugLog(" ¼Ó³É: ID=%s +%s %s" % (attrID, addValue, addPer)) return def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}): ## ¼ÆËã´«ÆæÊôÐÔ legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip) if not legAttrIDList: #GameWorld.DebugLog("ûÓд«ÆæÊôÐÔ£¡") return #GameWorld.DebugLog("´«ÆæÊôÐÔ: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legAttrIDList, legAttrValueList)) for i, legendAttrID in enumerate(legAttrIDList): legendAttrValue = legAttrValueList[i] #GameWorld.DebugLog("¼Ó´«ÆæÊôÐÔ: %s +%s" % (legendAttrID, legendAttrValue)) PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip) #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value return def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrList, plus_addEquipBaseAttrPerList): ## ¼ÆËã×°±¸Ç¿»¯ºóµÄÊôÐÔ equipPartPlusLV = GetEquipPartPlusLV(curPlayer, packType, equipIndex) equipPartPlusEvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, equipIndex) if not equipPartPlusLV: return equipPartPlusLV plusType = GetEquipPlusType(curEquip) if plusType is None: return equipPartPlusLV #GameWorld.DebugLog(" Ç¿»¯ÊôÐÔ: plusType=%s,equipPartPlusLV=%s,equipPartPlusEvolveLV=%s" % (plusType, equipPartPlusLV, equipPartPlusEvolveLV)) ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartPlusLV) if not ipyData: return equipPartPlusLV attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue() for i, attrID in enumerate(attrTypeList): #GameWorld.DebugLog(" Ç¿»¯»ù´¡ÊôÐÔ: ID=%s +%s" % (attrID, attrValueList[i])) PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList) baseAttrDictPlus[attrID] = baseAttrDictPlus.get(attrID, 0) + attrValueList[i] if not equipPartPlusEvolveLV: return equipPartPlusLV #½ø»¯ÊôÐÔ equipPlace = curEquip.GetEquipPlace() ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV) if not ipyData: return equipPartPlusLV for attrID, attrValue in ipyData.GetAttr().items(): #GameWorld.DebugLog(" Ç¿»¯½ø½×ÊôÐÔ: ID=%s +%s" % (attrID, attrValue)) PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, plus_addEquipBaseAttrPerList) return equipPartPlusLV def __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList): ## ¼ÆËã×°±¸´óʦǿ»¯ÊôÐÔ ipyDataList = IpyGameDataPY.GetIpyGameDataList("ItemPlusMaster", classLV) if not ipyDataList: return actMasterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) # ÒѼ¤»îµÄ×î´ó´óʦµÈ¼¶ for ipyData in ipyDataList: needMasterPlusLV = ipyData.GetMasterPlusLV() if basePlusLVMin < needMasterPlusLV: #GameWorld.DebugLog(" δ´ïµ½´óʦǿ»¯µÈ¼¶! classLV=%s,basePlusLVMin=%s < needMasterPlusLV=%s" % (classLV, basePlusLVMin, needMasterPlusLV)) continue if actMasterPlusLV < needMasterPlusLV: #GameWorld.DebugLog(" δ¼¤»î´óʦǿ»¯µÈ¼¶! classLV=%s,actMasterPlusLV=%s < needMasterPlusLV=%s" % (classLV, actMasterPlusLV, needMasterPlusLV)) continue attrIDList = ipyData.GetMasterPlusAttrIDList() attrValueList = ipyData.GetMasterPlusAttrValueList() for i, attrID in enumerate(attrIDList): attrValue = attrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPlus) __CalcFuncAddEquipAttrPer(None, attrID, attrValue, plus_addEquipBaseAttrPerList) #GameWorld.DebugLog(" Ç¿»¯´óʦÊôÐÔ! needMasterPlusLV=%s, attrID=%s + %s" % (needMasterPlusLV, attrID, attrValue)) return ## ×°±¸Ì××°ÊôÐÔ¼ÆËã # @param curPlayer µ±Ç°Íæ¼Ò # @return None def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit): if not suitCntDict: return #GameWorld.DebugLog(' suitCntDict=%s'%suitCntDict) learnSkillInfo = {} suiteSkillTypeIDList = [] skillManager = curPlayer.GetSkillManager() for suiteID, starList in suitCntDict.items(): ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID) if not ipyDataList: continue for ipyData in ipyDataList: suiteCnt = ipyData.GetSuiteCnt() needStar = ipyData.GetStar() skillID = ipyData.GetSkillID() activateIndex = ipyData.GetActivateIndex() isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex) skillData = None if not skillID else GameWorld.GetGameData().GetSkillBySkillID(skillID) skillTypeID = 0 if not skillData else skillData.GetSkillTypeID() skillLV = 0 if not skillData else skillData.GetSkillLV() #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s,skillID=%s,skillTypeID=%s,skillLV=%s" % (suiteID, suiteCnt, needStar, isActivate, skillID, skillTypeID, skillLV)) if skillTypeID and skillTypeID not in suiteSkillTypeIDList: suiteSkillTypeIDList.append(skillTypeID) if isActivate and [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt: #GameWorld.DebugLog(" Ì××°: suiteID=%s,suiteCnt=%s,needStar=%s" % (suiteID, suiteCnt, needStar)) for attrID, attrValue in ipyData.GetAttrInfo().items(): PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit) #GameWorld.DebugLog(" ÊôÐÔ: ID=%s +%s" % (attrID, attrValue)) #¼¼ÄÜ if skillTypeID and skillLV and skillLV > learnSkillInfo.get(skillTypeID, 0): learnSkillInfo[skillTypeID] = skillLV #GameWorld.DebugLog("suiteSkillTypeIDList:%s" % suiteSkillTypeIDList) #GameWorld.DebugLog("learnSkillInfo:%s" % learnSkillInfo) skillChange = False playerCtl = PlayerControl.PlayerControl(curPlayer) for skillTypeID in suiteSkillTypeIDList: if skillTypeID in learnSkillInfo: #ÐèҪѧϰµÄ²»´¦Àí continue curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) if not curSkill: continue skillChange = True skillID = curSkill.GetSkillID() GameWorld.DebugLog(" ɾ³ýÌ××°¼¼ÄÜ: skillID=%s" % skillID) skillManager.DeleteSkillBySkillID(skillID) playerCtl.RefreshSkillFightPowerByDel(skillID) for skillTypeID, skillLV in learnSkillInfo.items(): skillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, skillLV) if not skillData: continue skillID = skillData.GetSkillID() curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) if curSkill: if skillLV == curSkill.GetSkillLV(): continue delSkillID = curSkill.GetSkillID() GameWorld.DebugLog(" ɾ³ýÌ××°¼¼Äܵȼ¶: skillTypeID=%s,skillLV=%s,skillID=%s,delSkillID=%s" % (skillTypeID, skillLV, skillID, delSkillID)) skillManager.DeleteSkillBySkillID(delSkillID) playerCtl.RefreshSkillFightPowerByDel(delSkillID) GameWorld.DebugLog(" ¼¤»îÌ××°¼¼Äܵȼ¶: skillTypeID=%s,skillLV=%s,skillID=%s" % (skillTypeID, skillLV, skillID)) skillManager.LVUPSkillByID(skillID) playerCtl.RefreshSkillFightPowerEx(skillID, 0) skillChange = True if skillChange: # ÖØË¢±»¶¯¼¼ÄÜ PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) return #// A5 C6 ×°±¸²¿Î»ÐǼ¶Ì××°¼¤»î #tagCMEquipPartSuiteActivate # #struct tagCMEquipPartSuiteActivate #{ # tagHead Head; # BYTE ClassLV; // ËùÊô×°±¸½× # WORD SuiteID; // Ì××°ID # BYTE SuiteCount; // ¼þÊý # BYTE Star; // ÐÇÊý #}; def OnEquipPartSuiteActivate(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) classLV = clientData.ClassLV suiteID = clientData.SuiteID suiteCount = clientData.SuiteCount star = clientData.Star ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID) if not ipyDataList: return actIpyData = None for ipyData in ipyDataList: needCount = ipyData.GetSuiteCnt() needStar = ipyData.GetStar() if suiteCount == needCount and star == needStar: actIpyData = ipyData break if not actIpyData: return activateIndex = actIpyData.GetActivateIndex() # ÕâÀï¾Í²»ÅжÏÊÇ·ñÂú×ã¼þÊý¡¢ÐÇÊýÌõ¼þÁË£¬ËãÊôÐÔµÄʱºò±¾ÉíÒ²ÊÇÌõ¼þÖ®Ò»£¬ÊÇ·ñ¼¤»îÖ»ÊǸ½¼ÓÌõ¼þ£¬ÕâÀïÖ»´¦Àí¼¤»î״̬±ä¸ü£¬ÄÜ·ñ¼¤»îǰ¶ËÅжϼ´¿É isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex) if isActivate: return GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex, 1) Sync_EquipPartSuiteActivateInfo(curPlayer) #¹ã²¥ notifyMark = actIpyData.GetIsNotify() if notifyMark: PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [curPlayer.GetPlayerName(), suiteID, suiteCount, star]) RefreshPlayerEquipAttribute(curPlayer, classLV) #Ë¢ÐÂËùÓÐÊôÐÔ playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() return def Sync_EquipPartSuiteActivateInfo(curPlayer): ## ͬ²½×°±¸Î»ÐǼ¶Ì××°¼¤»î״̬ÐÅÏ¢ #keyCount = 10 ipyDataMgr = IpyGameDataPY.IPY_Data() dataCount = ipyDataMgr.GetEquipSuitAttrCount() if not dataCount: return lastIpyData = ipyDataMgr.GetEquipSuitAttrByIndex(dataCount - 1) if not lastIpyData: return keyCount = 1 + lastIpyData.GetActivateIndex() / 31 activateStateList = [] for i in xrange(keyCount): activateStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteActivate % i)) if activateStateList.count(0) == keyCount: return activateInfo = ChPyNetSendPack.tagMCEquipPartSuiteActivateInfo() activateInfo.SuiteActivateStateInfo = activateStateList activateInfo.Count = len(activateInfo.SuiteActivateStateInfo) NetPackCommon.SendFakePack(curPlayer, activateInfo) return ##È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿) def OnOrangeQualityCntChange(curPlayer, orangeQualityCnt): notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify) if notifyType == ChConfig.Def_AttrActivatyNotify_Equip: EventShell.EventRespons_OrangeQualityCnt(curPlayer, orangeQualityCnt) return ## 1Ëã×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£© # @param curPlayer µ±Ç°Íæ¼Ò # @param curEquip µ±Ç°×°±¸ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def CalcCurEquip_SkillBuff(curPlayer, curEquip): SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip) return ## ¼ÆËã×°±¸ÏâǶ±¦Ê¯¸½¼ÓЧ¹û->»ù±¾ÊôÐÔ (±¦Ê¯) # @param curPlayer µ±Ç°Íæ¼Ò # @param curEquip µ±Ç°×°±¸ # @param allAttrList ÊôÐÔÐÅÏ¢ # @return ÎÞ·µ»ØÖµ def CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrList): gameData = GameWorld.GetGameData() effIndexList = [1, 2, 3, 4] # µÚÒ»¸öЧ¹ûÖµÊÇÀàÐ͵ȼ¶Ð§¹ûÖµ£¬·ÇÊôÐÔЧ¹ûÖµ gemLVList = [] for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex(): curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0] if curGemID == 0: continue curGem = gameData.GetItemByTypeID(curGemID) if not curGem: GameWorld.ErrLog('equip stone id:%s not in item table' % (curGemID)) continue for effIndex in effIndexList: curGemEffect = curGem.GetEffectByIndex(effIndex) effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0) if effectID and effectValue: PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList) baseAttrDictStone[effectID] = baseAttrDictStone.get(effectID, 0) + effectValue gemEffect = curGem.GetEffectByIndex(0) gemLV = gemEffect.GetEffectValue(1) gemLVList.append(gemLV) return gemLVList #--------------------------------------------------------------------- ## ×°±¸Ìí¼ÓBuff # @param curPlayer µ±Ç°Íæ¼Ò # @param addSkillID ¼¼ÄÜID # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def EquipAddBuff(curPlayer, addSkillID, value=0): value = min(value, ChConfig.Def_UpperLimit_DWord) curBuff = curPlayer.GetEquipBuff().AddBuff(addSkillID, 0, False) curBuff.SetOwnerID(curPlayer.GetID()) curBuff.SetOwnerType(curPlayer.GetGameObjType()) if value > 0: curBuff.SetValue(value) return #--------------------------------------------------------------------- #=============================================================================== # #//03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide # //×°±¸ÏÔʾ¿ª¹Ø # int GetEquipShowSwitch(); Áé³èÍâ¹ÛË÷Òý*10000000+×øÆïÍâ¹ÛË÷Òý*1000000+Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° #=============================================================================== ##ÇëÇó×°±¸ÏÔÒþ. £¨ÉèÖÃÏÔʾÄÄÌ××°±¸Íâ¹Û£© # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide def RequestEquipShowHide(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #---¼ì²éˢмä¸ô-- interval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_RequestEquipShowHide] if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide) < interval: #ûÓе½Ë¢Ð¼ä¸ô£¬54Íâ¹Ò£¬²»¸øÌáʾ # GameWorld.ErrLog('ÇëÇó×°±¸ÏÔÒþ, ûÓе½Ë¢Ð¼ä¸ô') return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick) sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide() classLV = sendPack.GetEquipShowSwitch() oldClassLV = GetEquipFacadeClassLV(curPlayer) if oldClassLV == classLV: return if not ChangeEquipfacadeByClassLV(curPlayer, classLV): return #֪ͨÍâ¹Û×°±¸ updFaceEquipIndex = 0 equipIndexList = [] for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]: ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace) if not ipyData: continue gridIndex = ipyData.GetGridIndex() updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex equipIndexList.append(gridIndex) PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex) equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) for equipPackIndex in equipIndexList: curEquip = equipPack.GetAt(equipPackIndex) if not ItemCommon.CheckItemCanUse(curEquip): continue changeItemID = curEquip.GetItemTypeID() changeItemStarLV = 0 #curItem.GetItemStarLV() changeItemStoneCnt = 0 #curItem.GetUseStoneCount() changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount() changeItemUseData = curEquip.GetUserData() curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData) return def ChangeEquipfacadeByClassLV(curPlayer, classLV): ##±ä¸üµÚXÌ××°±¸Íâ¹Û Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() realSuit=1 equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) for place in ChConfig.EquipPlace_Base: ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place) if not ipyData: realSuit = 0 break gridIndex = ipyData.GetGridIndex() curEquip = equipPack.GetAt(gridIndex) if not ItemCommon.CheckItemCanUse(curEquip): realSuit = 0 break if not curEquip.GetSuiteID(): realSuit = 0 break updEquipShowSwitch = oldEquipShowSwitch /1000*1000+ classLV*10+realSuit if oldEquipShowSwitch == updEquipShowSwitch: return curPlayer.SetEquipShowSwitch(updEquipShowSwitch) ChangeEquipEffectByPlusMaster(curPlayer, classLV) return True #!!! ÌØÐ§¸ù¾ÝÁé¸ùÆ·¼¶±ä»¯¸Ä³É¸ù¾ÝÇ¿»¯´óʦ±ä»¯ def ChangeEquipfacadeByLingGen(curPlayer): # ## Áé¸ùÆ·¼¶±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾ Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° # pointValueInfo = [[ShareDefine.Def_Effect_Metal,PlayerControl.GetMetalQualityLV(curPlayer)], # [ShareDefine.Def_Effect_Wood,PlayerControl.GetWoodQualityLV(curPlayer)], # [ShareDefine.Def_Effect_Water,PlayerControl.GetWaterQualityLV(curPlayer)], # [ShareDefine.Def_Effect_Fire,PlayerControl.GetFireQualityLV(curPlayer)], # [ShareDefine.Def_Effect_Earth,PlayerControl.GetEarthQualityLV(curPlayer)], # ] # g_skillElementCntDict = {} #Áé¸ù¶ÔӦʹÓÃר¾«¼¼ÄÜÊýÁ¿ # skillManager = curPlayer.GetSkillManager() # gameData = GameWorld.GetGameData() # for i in xrange(skillManager.GetSkillCount()): # curSkill = skillManager.GetSkillByIndex(i) # skillID = curSkill.GetSkillTypeID() # curSelectSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID) # if not curSelectSkillID: # continue # elementSkillData = gameData.GetSkillBySkillID(curSelectSkillID) # if not elementSkillData: # continue # skillElementType = SkillShell.GetSkillElementType(elementSkillData) # g_skillElementCntDict[skillElementType] = g_skillElementCntDict.get(skillElementType, 0) + 1 # # showPointID, showQualityLV = 0, 0 # for pointID, qualityLV in pointValueInfo: # if qualityLV > showQualityLV: # showQualityLV = qualityLV # showPointID = pointID # elif showQualityLV and qualityLV == showQualityLV: # #±ÈË­µÄר¾«¼¼ÄÜÊýÁ¿¶à # if g_skillElementCntDict.get(pointID, 0) > g_skillElementCntDict.get(showPointID, 0): # showQualityLV = qualityLV # showPointID = pointID # effectID = 0 # if showPointID: # ipyData = IpyGameDataPY.GetIpyGameData('LingGenEffect', showPointID, showQualityLV) # if not ipyData: # return # effectID = ipyData.GetID() # oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() # updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * effectID # GameWorld.DebugLog('Áé¸ùÆ·¼¶±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾg_skillElementCntDict=%s,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'% # (g_skillElementCntDict, oldEquipShowSwitch, updEquipShowSwitch)) # if oldEquipShowSwitch != updEquipShowSwitch: # curPlayer.SetEquipShowSwitch(updEquipShowSwitch) return def ChangeEquipEffectByPlusMaster(curPlayer, classLV): # Ç¿»¯´óÊ¦ÌØÐ§ if (classLV != GetEquipFacadeClassLV(curPlayer)): return masterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) ## Ç¿»¯´óʦӰÏì½ÇÉ«Íâ¹ÛÏÔʾ Ç¿»¯´óʦµÈ¼¶ * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * masterPlusLV GameWorld.DebugLog('Ç¿»¯´óʦӰ±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾ,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'% (oldEquipShowSwitch, updEquipShowSwitch)) if oldEquipShowSwitch != updEquipShowSwitch: curPlayer.SetEquipShowSwitch(updEquipShowSwitch) return def ChangeEquipfacadeByHorsePetSkin(curPlayer, skinType, skinIndex): ##Æï³è¾õÐÑÍâ¹Û±ä¸ü Áé³èÍâ¹ÛË÷Òý*10000000+×øÆïÍâ¹ÛË÷Òý*1000000+Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() if skinType == 1: updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 7, skinIndex) else: updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 8, skinIndex) if oldEquipShowSwitch == updEquipShowSwitch: return curPlayer.SetEquipShowSwitch(updEquipShowSwitch) return def GetPlayerMaxEquipClassLV(curPlayer): ## »ñÈ¡Íæ¼Òµ±Ç°½âËøµÄ×°±¸½× key = "RealmEquipClassLVMap" RealmEquipClassLVMap = IpyGameDataPY.GetConfigEx(key) if not RealmEquipClassLVMap: RealmEquipClassLVMap = {} infoDict = {} ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetEquipControlCount()): ipyData = ipyDataMgr.GetEquipControlByIndex(index) infoDict[ipyData.GetNeedRealmLV()] = ipyData.GetClassLV() needReamlLVList = infoDict.keys() needReamlLVList.sort() # ÉýÐòÅÅ for i, realmLV in enumerate(needReamlLVList): classLV = infoDict[realmLV] if i == len(needReamlLVList) - 1: RealmEquipClassLVMap[realmLV] = classLV if i == 0: continue else: preRealmLV = needReamlLVList[i - 1] preClassLV = infoDict[preRealmLV] for pRealmLV in range(preRealmLV, realmLV): RealmEquipClassLVMap[pRealmLV] = preClassLV GameWorld.DebugLog("¼ÓÔØ¾³½ç¶ÔÓ¦¿ª·Å×î´ó×°±¸½×ÉèÖÃ: %s" % RealmEquipClassLVMap) IpyGameDataPY.SetConfigEx(key, RealmEquipClassLVMap) playerRealmLV = curPlayer.GetOfficialRank() if playerRealmLV in RealmEquipClassLVMap: return RealmEquipClassLVMap[playerRealmLV] maxRealmLV = max(RealmEquipClassLVMap) if playerRealmLV >= maxRealmLV: return RealmEquipClassLVMap[maxRealmLV] return 0 #»ñÈ¡µ±Ç°Êǵڼ¸Ì××°±¸Íâ¹Û def GetEquipFacadeClassLV(curPlayer):return curPlayer.GetEquipShowSwitch()%1000/10 ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÊìÁ·¶È def GetEquipPartProficiency(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯ÊìÁ·¶È def SetEquipPartProficiency(curPlayer, packType, index, value): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value) return ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯µÈ¼¶ def GetEquipPartPlusLV(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯µÈ¼¶ def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, setPlusLV): befPlusLV = GetEquipPartPlusLV(curPlayer, packType, index) if befPlusLV == setPlusLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), setPlusLV) #=========================================================================== # if curEquip and not curEquip.IsEmpty(): # curEquip.SetItemStarLV(starLV) #=========================================================================== # ͬ²½¸üÐÂÇ¿»¯×ܵȼ¶ befTotalPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV) updTotalPlusLV = max(0, befTotalPlusLV + setPlusLV - befPlusLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, updTotalPlusLV) GameWorld.DebugLog("ÉèÖÃÇ¿»¯µÈ¼¶: index=%s,befPlusLV=%s,setPlusLV=%s,befTotalPlusLV=%s,updTotalPlusLV=%s" % (index, befPlusLV, setPlusLV, befTotalPlusLV, updTotalPlusLV)) return ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶ def GetEquipPartPlusEvolveLV(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶ def SetEquipPartPlusEvolveLV(curPlayer, packType, index, setEvolveLV): befEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)) if befEvolveLV == setEvolveLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), setEvolveLV) # ͬ²½¸üнø»¯×ܵȼ¶ befTotalPlusEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV) updTotalPlusEvolveLV = max(0, befTotalPlusEvolveLV + setEvolveLV - befEvolveLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, updTotalPlusEvolveLV) GameWorld.DebugLog("ÉèÖýø»¯µÈ¼¶: index=%s,befEvolveLV=%s,setEvolveLV=%s,befTotalPlusEvolveLV=%s,updTotalPlusEvolveLV=%s" % (index, befEvolveLV, setEvolveLV, befTotalPlusEvolveLV, updTotalPlusEvolveLV)) return ## ֪ͨ¹«¹²²¿Î»Ç¿»¯µÈ¼¶ def NotifyEquipPartPlusLV(curPlayer, packType=IPY_GameWorld.rptEquip, index=None): ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() ePartStarLVPack.Clear() ePartStarLVPack.InfoList = [] syncIndexList = [] if index == None: equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []): for classlv in xrange(1, equipMaxClasslv+1): ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace) if not ipyData: continue syncIndexList.append(ipyData.GetGridIndex()) else: syncIndexList = [index] for i in syncIndexList: ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV() ePartStarLV.Clear() ePartStarLV.PackType = packType ePartStarLV.EquipIndex = i ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, packType, i) ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, packType, i) ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, i) ePartStarLVPack.InfoList.append(ePartStarLV) ePartStarLVPack.Count = len(ePartStarLVPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack) return ## È«ÉíÇ¿»¯µÈ¼¶ def GetTotalPlusLV(curPlayer, isActive=True): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV) ## È«Éí½ø»¯µÈ¼¶ def GetTotalPlusEvolveLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV) ## È«Éí³È×°¼°ÒÔÉÏ×°±¸Êý def GetEquipOrangeCount(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount) # »ñȡװ±¸µÄÇ¿»¯ÀàÐÍ def GetEquipPlusType(curEquip): equipPlace = curEquip.GetEquipPlace() plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1) if not plusTypeDict: GameWorld.ErrLog("ûÓÐÇ¿»¯ÀàÐÍÓ³Éä±í") return return plusTypeDict.get(equipPlace) # »ñÈ¡ÂúÌ××°»¯µÄ×îµÍ½×Êý£¬Èç5¼þÌ×£¬4¼þ5¼¶£¬1¼þ3¼¶£¬Ôò·µ»Ø3 def GetEquipSuitsLVByType(curPlayer, suitType, groupType): return 0 # suiteLV = 999 # equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType') # if groupType not in equipSuitTypeDict: # return 0 # maxCnt = len(equipSuitTypeDict[groupType]) # cnt = 0 # for equipPlace in equipSuitTypeDict[groupType]: # curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType) # if curSuiteLV > 0: # cnt += 1 # suiteLV = min(curSuiteLV, suiteLV) # # if cnt != maxCnt: # return 0 # return 0 if suiteLV == 999 else suiteLV def SetEquipPartStar(curPlayer, index, setStarLV): #ÉèÖù«¹²²¿Î»ÐÇÊý befStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % index) if befStarLV == setStarLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % index, setStarLV) # ͬ²½¸üÐÂÐǼ¶×ܵȼ¶ befTotalStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar) updTotalStarLV = max(0, befTotalStarLV + setStarLV - befStarLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, updTotalStarLV) # ¿ª·þ»î¶¯Êý¾Ý OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StarLV, updTotalStarLV) GameWorld.DebugLog("ÉèÖò¿Î»ÐǼ¶: index=%s,befStarLV=%s,setStarLV=%s,befTotalStarLV=%s,updTotalStarLV=%s" % (index, befStarLV, setStarLV, befTotalStarLV, updTotalStarLV)) return def GetEquipPartStar(curPlayer, equipPackindex): #»ñÈ¡¹«¹²²¿Î»ÐÇÊý return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex) ## »ñÈ¡¹«¹²²¿Î»ÉúЧµÄÐÇÊý, Òò×°±¸µÄ×î¸ß¿Éµ½ÐÇÊýÓ°Ï죬ÓÃÓÚË㵱ǰװ±¸ÊôÐÔʹÓ㬠²»Ó°ÏìÈ«ÉíÐǼ¶ def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip): maxStarLV = ItemCommon.GetItemMaxStar(curEquip) return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV) def GetTotalEquipStars(curPlayer): ##»ñÈ¡²¿Î»×ÜÐÇÊý return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar) ## ֪ͨ¹«¹²²¿Î»ÐÇÊý def NotifyEquipPartStar(curPlayer, index=None): ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo() ePartStarLVPack.Clear() ePartStarLVPack.InfoList = [] syncIndexList = [] if index == None: equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []): for classlv in xrange(1, equipMaxClasslv+1): ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace) if not ipyData: continue syncIndexList.append(ipyData.GetGridIndex()) else: syncIndexList = [index] for index in syncIndexList: ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar() ePartStarLV.Clear() ePartStarLV.EquipPackIndex = index ePartStarLV.Star = GetEquipPartStar(curPlayer, index) ePartStarLVPack.InfoList.append(ePartStarLV) ePartStarLVPack.Count = len(ePartStarLVPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack) return