#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Event.EventSrc.Operate_EquipWash # # @todo:×°±¸Ï´Á· # @author hxp # @date 2017-08-09 # @version 1.0 # # ÏêϸÃèÊö: ×°±¸Ï´Á· # #------------------------------------------------------------------------------- #"""Version = 2017-08-09 15:00""" #------------------------------------------------------------------------------- import GameWorld import IpyGameDataPY import NetPackCommon import ChPyNetSendPack import PlayerControl import PlayerSuccess import IPY_GameWorld import PlayerTongTianLing import PlayerActGarbageSorting import DataRecordPack import PlayerActLogin import PlayerActTask import ShareDefine import ItemCommon import ChConfig import ChEquip import random Def_EquipWashMaxType = 2 # ×°±¸Ï´Á·×î´ó¹é×éÀàÐÍ Def_EquipWashMaxAttrCount = 3 # ×°±¸Ï´Á·×î´óÏ´Á·ÊôÐÔÌõÊý g_allIndexList = [] #¿ÉÏ´Á¶µÄ²¿Î»»º´æ #def OnEquipWashLogin(curPlayer): # Sycn_EquipWashInfo(curPlayer, isLogin=True) # return def GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace): # @return: 0-먦·Å; >=1-¸Ã×°±¸Î»×î´ó¿ÉÏ´Á·µÈ¼¶ washType = GetEquipWashType(equipPlace) if not washType: return 0 equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = equipPack.GetAt(equipPackindex) if not curEquip or curEquip.IsEmpty(): GameWorld.DebugLog("¸Ã×°±¸Î»Ã»ÓÐ×°±¸,ÎÞ·¨Ï´Á·£¡equipPackindex=%s" % (equipPackindex)) return 0 equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip) ipyData = IpyGameDataPY.InterpolationSearch('ItemWashMax', 'Star', equipStar, {'Type':washType}) if not ipyData: return 0 return ipyData.GetLevelMax() def GetEquipWashType(equipPlace): ## »ñȡװ±¸Î»¶ÔÓ¦µÄÏ´Á·ÀàÐÍ return IpyGameDataPY.GetFuncEvalCfg('EquipWashGroup', 1, {}).get(equipPlace) def GetEquipWashData(washType, washLV): return IpyGameDataPY.GetIpyGameData("EquipWash", washType, washLV) def GetAllEquipWashPlace(): # »ñÈ¡ËùÓпÉÏ´Á·µÄ×°±¸Î» global g_allIndexList if not g_allIndexList: maxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') for equipPlace in IpyGameDataPY.GetFuncEvalCfg('EquipWashGroup', 1, {}): for classLV in xrange(1, maxClasslv+1): ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace) if not ipyData: continue g_allIndexList.append(ipyData.GetGridIndex()) return g_allIndexList #// A3 25 ×°±¸Ï´Á¶ #tagCMEquipXLAttrChange # #struct tagCMEquipXLAttrChange #{ # tagHead Head; # BYTE EquipPlace; // ×°±¸Î» # BYTE CheckUseGoldAttr; // ¹´Ñ¡Ê¹ÓÃ×êʯϴÁ·ÊôÐÔ±àºÅÐÅÏ¢; °´ÊôÐÔ±àºÅλ¶þ½øÖÆ´ú±íÊÇ·ñ¹´Ñ¡ # Èç¹´Ñ¡ÊôÐÔ1´ú±í0λ, Ôò·¢1, ¹´Ñ¡ÊôÐÔ1¡¢2Ôò·¢3£¬,¹´Ñ¡ÊôÐÔ1¡¢2¡¢3Ôò·¢7 #}; def OnEquipWashAttr(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() equipPackindex = clientData.EquipPlace checkUseGoldAttr = clientData.CheckUseGoldAttr ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackindex}) if not ipyData: return equipPlace = ipyData.GetEquipPlace() classLV = ipyData.GetClassLV() funcPlusMinClassInfo = IpyGameDataPY.GetFuncEvalCfg("EquipPlusByFuncID", 1, {}) funcID = ShareDefine.GameFuncID_EquipWash if str(funcID) in funcPlusMinClassInfo: funcMinClassLV = funcPlusMinClassInfo[str(funcID)] if classLV < funcMinClassLV: GameWorld.Log("¸Ã×°±¸½×ÎÞ·¨Ï´Á·! classLV=%s < funcMinClassLV=%s" % (classLV, funcMinClassLV), playerID) return washType = GetEquipWashType(equipPlace) if washType is None: GameWorld.Log("¸Ã×°±¸Î»ÎÞ·¨Ï´Á·! equipPlace=%s" % (equipPlace), playerID) return maxWashLV = GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace) washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPackindex) GameWorld.DebugLog("×°±¸Ï´Á·: classLV=%s,equipPlace=%s,checkUseGoldAttr=%s,washType=%s,washLV=%s,maxWashLV=%s" % (classLV, equipPlace, checkUseGoldAttr, washType, washLV, maxWashLV), playerID) if maxWashLV < washLV: return washData = GetEquipWashData(washType, washLV) if not washData: GameWorld.ErrLog("ÕÒ²»µ½¸Ã×°±¸Ï´Á·Êý¾Ý: washType=%s,washLV=%s" % (washType, washLV)) return maxValueAttrNumList = [] # ÒÑ´ïµ½µ±Ç°µÈ¼¶×î´óÖµµÄÊôÐÔ±àºÅÁбí for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): maxValue = getattr(washData, "GetAttrMax%s" % attrNum)() washValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) washValueTemp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (equipPackindex, attrNum)) if washValueTemp != 0: GameWorld.Log("»¹ÓÐδѡÔñÊÇ·ñ±£´æµÄÏ´Á·ÊôÐÔ£¬²»¿ÉÏ´Á·£¡equipPackindex=%s,attrNum=%s,washValueTemp=%s" % (equipPackindex, attrNum, washValueTemp), playerID) return if washValue >= maxValue: maxValueAttrNumList.append(attrNum) if washLV >= maxWashLV and len(maxValueAttrNumList) == Def_EquipWashMaxAttrCount: GameWorld.DebugLog("ËùÓÐÏ´Á·ÊôÐÔÒѾ­´ïµ½×î´óÏ´Á·µÈ¼¶Öµ£¬ÎÞ·¨Ï´Á·£¡maxWashLV=%s" % maxWashLV, playerID) return if len(maxValueAttrNumList) == Def_EquipWashMaxAttrCount: GameWorld.DebugLog("ËùÓÐÏ´Á·ÊôÐÔÒѾ­´ïµ½±¾µÈ¼¶×î´óÖµ£¬ÇëÏÈÉý¼¶ºóÔÙÏ´Á·£¡maxWashLV=%s" % maxWashLV, playerID) return costItemID = washData.GetCostItemID() costItemCount = washData.GetCostItemCount() costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID) if bindCnt + unBindCnt < costItemCount: GameWorld.DebugLog("×°±¸Ï´Á·ËùÐèÏûºÄµÀ¾ß²»×㣬ÎÞ·¨Ï´Á·!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s" % (costItemID, costItemCount, bindCnt, unBindCnt), playerID) return goldWashCostItemCountList = washData.GetGoldWashCostList() # Ï´Á·±ØÔöÌõÊýÏûºÄ±ØÔöµÀ¾ß¸öÊý if not goldWashCostItemCountList or len(goldWashCostItemCountList) != Def_EquipWashMaxAttrCount: return randAttrDict = {} # Ëæ»ú±ä¸üÖµ×Öµä {ÊôÐÔ±àºÅ:Ëæ»úÖµ, ...} useGoldAttrNumList = [] # ʹÓÃ×êʯϴÁ·µÄÊôÐÔ±àºÅÁбí negativeValueCnt = 0 # ¸ºÖµÊý, É趨º¬0°É£¬¼´·ÇÕýÊý fixMaxValueDict = {} # È«·þÐÞÕýÖµ×î´óÖµ×Öµä {ÊôÐÔ±àºÅ:×î´óÖµ, ...} for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): if attrNum in maxValueAttrNumList: continue washValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) if checkUseGoldAttr & pow(2, attrNum - 1): useGoldAttrNumList.append(attrNum) randValueMin = getattr(washData, "GetAttrCostGoldMin%s" % attrNum)() randValueMax = getattr(washData, "GetAttrCostGoldMax%s" % attrNum)() else: randValueMin, randValueMax = 0, 0 randDict = getattr(washData, "GetAttrRandDict%s" % attrNum)() for randKey, randRange in randDict.items(): if randKey[0] <= washValue <= randKey[1]: randValueMin, randValueMax = randRange break if not randValueMin and not randValueMax: GameWorld.ErrLog("ÕÒ²»µ½¸Ã×°±¸Î»µ±Ç°Ï´Á·Öµ·¶Î§Ëæ»úÖµ!equipPackindex=%s,washType=%s,washLV=%s,attrNum=%s,washValue=%s,randDict=%s" % (equipPackindex, washType, washLV, attrNum, washValue, randDict)) return GameWorld.DebugLog("Ëæ»ú·¶Î§ÊôÐÔ%s, washValue=%s, %s~%s" % (attrNum, washValue, randValueMin, randValueMax)) randValue = random.randint(randValueMin, randValueMax) for _ in xrange(50): if randValue != 0: break randValue = random.randint(randValueMin, randValueMax) #GameWorld.DebugLog("Ëæ»úÖµ0£¬ÖØÐÂËæ»ú!") if randValue == 0: randValue = 1 #GameWorld.DebugLog("Ëæ»úÖµ»¹ÊÇ0£¬Ç¿ÖÆÉèÖÃΪ1!") randAttrDict[attrNum] = randValue if randValue <= 0: negativeValueCnt += 1 fixMaxValueDict[attrNum] = randValueMax checkUseGoldCnt = len(useGoldAttrNumList) needGold = 0 needMustID = IpyGameDataPY.GetFuncCfg("EquipWashMustID", 1) needMustIDCount = 0 if checkUseGoldCnt <= 0 else goldWashCostItemCountList[checkUseGoldCnt - 1] delMustIDCount = needMustIDCount mustItemIndexList, mustBindCnt, mustUnBindCnt = [], 0, 0 if needMustIDCount: mustItemIndexList, mustBindCnt, mustUnBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, needMustID, needMustIDCount) mustItemLackCount = max(0, needMustIDCount - (mustBindCnt + mustUnBindCnt)) if mustItemLackCount > 0: needGold = ItemCommon.GetAutoBuyItemNeedGold({needMustID:mustItemLackCount}) if needGold <= 0: GameWorld.ErrLog("×Ô¶¯¹ºÂò±ØÔöµÀ¾ßËùÐèÏÉÓñÒì³££¡needMustID=%s,mustItemLackCount=%s,needGold=%s" % (needMustID, mustItemLackCount, needGold), playerID) return delMustIDCount = needMustIDCount - mustItemLackCount if needGold and not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold): GameWorld.DebugLog("ÏÉÓñ²»×㣬ÎÞ·¨Ï´Á·£¡checkUseGoldCnt=%s,needGold=%s" % (checkUseGoldCnt, needGold), playerID) return preWashData = None # ÉÏһϴÁ·µÈ¼¶Êý¾Ý if washLV > 0: preWashData = GetEquipWashData(washType, washLV - 1) if not preWashData: GameWorld.ErrLog("ÕÒ²»µ½ÉÏÒ»¼¶Ï´Á·Êý¾Ý£¬ÎÞ·¨Ï´Á·!preWashLV=%s" % (washLV - 1)) return # ¿Û³ýÏûºÄ ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, "EquipWash") if delMustIDCount: ItemCommon.DelCostItemByBind(curPlayer, mustItemIndexList, mustBindCnt, mustUnBindCnt, delMustIDCount, "EquipWash") if needGold: infoDict = {'classLV':classLV, "EquipPlace":equipPlace, "WashType":washType, "WashLV":washLV, "CheckUseGoldCnt":checkUseGoldCnt} PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_EquipWash, infoDict) GameWorld.DebugLog("Ëæ»úÏ´Á·: randAttrDict=%s,fixMaxValueDict=%s" % (randAttrDict, fixMaxValueDict), playerID) # È«¸ºÐÞÕý if negativeValueCnt == Def_EquipWashMaxAttrCount: minPer = 1 minPerAttrNum = 1 for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): washValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) preMaxValue = 0 if not preWashData else getattr(preWashData, "GetAttrMax%s" % attrNum)() curMaxValue = getattr(washData, "GetAttrMax%s" % attrNum)() curPer = (washValue - preMaxValue) / float(curMaxValue - preMaxValue) GameWorld.DebugLog("È«¸ºÐÞÕý±ÈÀý: attrNum=%s,curPer=%s" % (attrNum, curPer)) if curPer < minPer: minPer = curPer minPerAttrNum = attrNum # µ±Ç°Ï´Á·±ÈÀýÖµ×îµÍµÄÐÞÕýΪÕýÊý fixValue = random.randint(1, fixMaxValueDict[minPerAttrNum]) randAttrDict[minPerAttrNum] = fixValue GameWorld.DebugLog("È«¸ºÏ´Á·ÐÞÕý: minPerAttrNum=%s,minPer=%s,fixValue=%s,randAttrDict=%s" % (minPerAttrNum, minPer, fixValue, randAttrDict), playerID) # ×îÖÕÏ´Á·ÖµÈ·ÈÏ isRefreshAttr = False for attrNum, randValue in randAttrDict.items(): washValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) tempValue = washValue + randValue preMaxValue = 0 if not preWashData else getattr(preWashData, "GetAttrMax%s" % attrNum)() maxValue = getattr(washData, "GetAttrMax%s" % attrNum)() GameWorld.DebugLog("×îÖÕÏ´Á·ÖµÈ·ÈÏ: attrNum=%s,washValue=%s,randValue=%s,tempValue=%s,preMaxValue=%s,maxValue=%s" % (attrNum, washValue, randValue, tempValue, preMaxValue, maxValue), playerID) # ÏÂÏÞֵΪÉÏÒ»´ÎµÄÉÏÏÞÖµ if tempValue < preMaxValue: tempValue = preMaxValue GameWorld.DebugLog(" ÏÂÏÞÖµÐÞÕý: tempValue=%s" % tempValue, playerID) # ×îºóÒ»¼¶µÄ»°¿É²»³¬¹ý×î´óÖµ£¬²»ÊÇ×îºóÒ»¼¶¿ÉÒç³ö if washLV == maxWashLV and tempValue > maxValue: tempValue = maxValue GameWorld.DebugLog(" ÉÏÏÞÖµÐÞÕý: maxValue=%s,tempValue=%s" % (maxValue, tempValue), playerID) # ʹÓÃ×êʯϴÁ·µÄÖ±½Ó¸üУ¬²»ÓÃÈ·ÈÏ if attrNum in useGoldAttrNumList: isRefreshAttr = True PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum), tempValue) dataDict = {'classLV':classLV, 'equipPlace':equipPlace,'attrNum':attrNum,'oldValue':washValue,'newValue':tempValue} DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipWash, dataDict) GameWorld.DebugLog(" ¹´Ñ¡Ï´Á·£¬Ö±½Ó¸üÐÂÊýÖµ: %s" % tempValue, playerID) else: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (equipPackindex, attrNum), tempValue) #ÆÁ±Î×Ô¶¯Éý¼¶ # if isRefreshAttr and washLV < maxWashLV: # CheckEquipWashLVUp(curPlayer, equipPlace, washLV, washData) Sycn_EquipWashInfo(curPlayer, equipPackindex) if isRefreshAttr: RefreshEquipWashAttr(curPlayer, classLV) PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipWash, 1) PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_EquipWash) PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Wash, 1) PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipWash) return #// A3 26 ×°±¸Ï´Á¶½á¹ûÈ·ÈÏ #tagCMEquipXLAttrChangeOK # #struct tagCMEquipXLAttrChangeOK #{ # tagHead Head; # BYTE EquipPlace; // ×°±¸Î» # BYTE IsSave; // ÊÇ·ñ±£´æ 0-·ñ; 1-ÊÇ; 2-ÊÖ¶¯Éý¼¶ #}; def OnEquipWashAttrChangeOK(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() equipPackindex = clientData.EquipPlace isSave = clientData.IsSave ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackindex}) if not ipyData: return curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = curPack.GetAt(equipPackindex) if not curEquip or curEquip.IsEmpty(): GameWorld.DebugLog("OnEquipWashAttrChangeOK() equip is empty") return equipPlace = ipyData.GetEquipPlace() classLV = ipyData.GetClassLV() washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipPackindex) maxWashLV = GetEquipWashMaxLV(curPlayer, equipPackindex, equipPlace) GameWorld.DebugLog("È·ÈÏÏ´Á·½á¹û: classLV=%s, equipPlace=%s,isSave=%s,washLV=%s,maxWashLV=%s" % (classLV, equipPlace, isSave, washLV, maxWashLV), playerID) washType = GetEquipWashType(equipPlace) if washType is None: return if maxWashLV < 0: return washData = GetEquipWashData(washType, washLV) if not washData: return # ÊÖ¶¯Éý¼¶ if isSave == 2: if washLV >= maxWashLV: GameWorld.DebugLog("ÒÑ´ïµ½×î´óÏ´Á·µÈ¼¶£¬²»¿ÉÉý¼¶£¡", playerID) return if CheckEquipWashLVUp(curPlayer, curEquip, equipPackindex, washLV, washData): RefreshEquipWashAttr(curPlayer, classLV) Sycn_EquipWashInfo(curPlayer, equipPackindex) EquipWashSuccess(curPlayer, classLV) else: GameWorld.DebugLog("Éý¼¶Ê§°Ü£¬ÓÐÊôÐÔδ´ïµ½×î´óÖµ£¬ÎÞ·¨Éý¼¶!", playerID) return for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): tempValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (equipPackindex, attrNum)) if not tempValue: continue PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValueTemp % (equipPackindex, attrNum), 0) if isSave == 1: oldValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum), tempValue) dataDict = {'classLV':classLV, 'equipPlace':equipPlace,'attrNum':attrNum,'oldValue':oldValue,'newValue':tempValue} DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipWash, dataDict) GameWorld.DebugLog("±£´æÏ´Á·Êý¾Ý: classLV=%s, equipPlace=%s,attrNum=%s,tempValue=%s" % (classLV, equipPlace, attrNum, tempValue), playerID) if isSave == 1: RefreshEquipWashAttr(curPlayer, classLV) #ÆÁ±Î×Ô¶¯Éý¼¶ # if washLV < maxWashLV: # CheckEquipWashLVUp(curPlayer, equipPlace, washLV, washData) Sycn_EquipWashInfo(curPlayer, equipPackindex) return def CheckEquipWashLVUp(curPlayer, curEquip, equipPackindex, washLV, washData): # ¼ì²éÏ´Á·ÀàÐÍÉý¼¶ for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): tempValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipPackindex, attrNum)) # Ö»ÒªÓÐδ´ïµ½±¾¼¶×î´óÖµµÄ£¬Ôò²»ÄÜÉý¼¶ if tempValue < getattr(washData, "GetAttrMax%s" % attrNum)(): return washLV += 1 SetEquipWashLV(curPlayer, equipPackindex, washLV) # Ï´Á·¹ã²¥ itemID = curEquip.GetItemTypeID() userData = curEquip.GetUserData() guid = ItemCommon.CacheNotifyEquipDetailInfo(curPlayer, curEquip) msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, washLV] PlayerControl.WorldNotify(0, "WashCongratulation", msgParamList) return True def SetEquipWashLV(curPlayer, index, setWashLV): befWashLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index) if befWashLV == setWashLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipWashLV % (index), setWashLV) # ͬ²½¸üÐÂÏ´Á·×ܵȼ¶ befTotalWashLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipWashLV) updTotalWashLV = max(0, befTotalWashLV + setWashLV - befWashLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, updTotalWashLV) GameWorld.DebugLog("ÉèÖÃÏ´Á·µÈ¼¶: index=%s,befWashLV=%s,setWashLV=%s,befTotalWashLV=%s,updTotalWashLV=%s" % (index, befWashLV, setWashLV, befTotalWashLV, updTotalWashLV)) return ## È«ÉíÏ´Á·×ܵȼ¶ def GetTotalEquipWashLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipWashLV) def Sycn_EquipWashInfo(curPlayer, equipPackindex=-1, isLogin=False): hasValue = False pack = ChPyNetSendPack.tagMCEquipPartXLAttrInfo() pack.Clear() pack.InfoList = [] if equipPackindex == -1: syncPlaceList = GetAllEquipWashPlace() else: syncPlaceList = [equipPackindex] for place in syncPlaceList: equipPart = ChPyNetSendPack.tagMCEquipPartXLAttr() equipPart.EquipPlace = place equipPart.XLAttrLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) equipPart.XLAttrList = [] for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue() washValue.XLAttrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (place, attrNum)) washValue.XLAttrChange = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (place, attrNum)) equipPart.XLAttrList.append(washValue) if washValue.XLAttrValue or washValue.XLAttrChange: hasValue = True equipPart.XLAttrCnt = len(equipPart.XLAttrList) pack.InfoList.append(equipPart) pack.Count = len(pack.InfoList) # µÇ¼ͬ²½Ê±Èç¹ûûÓÐÏ´Á·ÊôÐÔÔò²»Í¬²½ if isLogin and not hasValue: return NetPackCommon.SendFakePack(curPlayer, pack) return def RefreshEquipWashAttr(curPlayer, classLV): ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV) #Ë¢ÐÂËùÓÐÊôÐÔ playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() return def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrList): ## ×°±¸Î»Ï´Á·ÊôÐÔ washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipIndex) maxWashLV = GetEquipWashMaxLV(curPlayer, equipIndex, equipPlace) washLV = min(washLV, maxWashLV) washType = GetEquipWashType(equipPlace) if washType is None: return 0 washData = GetEquipWashData(washType, washLV) if not washData: return 0 #GameWorld.DebugLog("×°±¸Î»ÊôÐÔ: equipPlace=%s,washLV=%s" % (equipPlace, washLV)) for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): attrID = getattr(washData, "GetAttrType%s" % attrNum)() maxValue = getattr(washData, "GetAttrMax%s" % attrNum)() attrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (equipIndex, attrNum)) attrValue = min(attrValue, maxValue) #GameWorld.DebugLog(" attrNum=%s,attrID=%s, attrValue=%s" % (attrNum, attrID, attrValue)) if attrValue: PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) baseAttrDictWash[attrID] = baseAttrDictWash.get(attrID, 0) + attrValue return washLV def EquipWashSuccess(curPlayer, classLV): ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True) if not ipyDataList: return totalWashLV = GetTotalEquipWashLV(curPlayer) classWashLV = 0 washLVCountDict = {} for ipyData in ipyDataList: index = ipyData.GetGridIndex() washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index) if not washLV: continue conditionKey = (classLV, washLV) washLVCountDict[conditionKey] = washLVCountDict.get(conditionKey, 0) + 1 classWashLV += washLV #GameWorld.DebugLog("Ï´Á·³É¾ÍÊý¾Ý: classLV=%s,washLVCountDict=%s,classWashLV=%s,totalWashLV=%s" % (classLV, washLVCountDict, classWashLV, totalWashLV)) PlayerSuccess.UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_EquipWash, washLVCountDict) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_EquipWashTotal, totalWashLV) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_EquipWashClass, classWashLV, [classLV]) return