9762 【BT8】【后端】藏宝阁(古宝特殊效果属性支持)
# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipEnchant.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
| | |
| | | DWORD SkinValidTime; //æææ¶é¿ç§
|
| | | };
|
| | |
|
| | | //åéªè¡¨
|
| | |
|
| | | struct tagHorse
|
| | | {
|
| | | DWORD _HorseID; //åéªID
|
| | | DWORD HorseSkinID; //å¤è§ç©åID
|
| | | BYTE Quality; //åéªåè´¨
|
| | | };
|
| | |
|
| | | //å¤å®è¡¨
|
| | |
|
| | | struct tagGubao
|
| | |
| | | WORD _GubaoID; //å¤å®ID
|
| | | BYTE _GubaoStar; //å¤å®æçº§
|
| | | list StarUPNeedItemInfo; //åææéç©å [[ç©åID,个æ°], ...]
|
| | | list StarAttrTypeList; //æçº§å±æ§ç±»åå表
|
| | | list StarAttrValueList; //æçº§å±æ§å¼å表
|
| | | list StarEffIDList; //æçº§ç¹æ®ææIDå表
|
| | | };
|
| | |
|
| | | //å¤å®ç¹æ®ææè¡¨
|
| | |
|
| | | struct tagGubaoEffAttr
|
| | | {
|
| | | DWORD _GubaoEffID; //å¤å®ç¹æ®ææID
|
| | | BYTE GubaoEffType; //ææç±»å
|
| | | DWORD EffCond; //æ¡ä»¶
|
| | | BYTE IsPer; //æ¯å¦ç¾åæ¯æå
|
| | | list EffFuncAttrIDList; //æåæå®åè½å±æ§IDå表
|
| | | DWORD EffAttrID; //ç´æ¥å¢å 屿§ç±»å
|
| | | DWORD EffAttrValue; //æå屿§å¼
|
| | | };
|
| | |
|
| | | //å¤å®åè´¨å级表
|
| | |
| | | [config]
|
| | |
|
| | | ; é¡¹ç®æ ¹è·¯å¾
|
| | | CodeProjectPath = E:\Git\SnxxServerCode\ServerPython
|
| | | CodeProjectPath = E:\SnxxServerCode\ServerPython
|
| | |
|
| | |
| | | playControl.RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | | def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrList):
|
| | | def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrList):
|
| | | ## è£
å¤ä½æ´ç»å±æ§
|
| | | washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipIndex)
|
| | | maxWashLV = GetEquipWashMaxLV(curPlayer, equipIndex, equipPlace)
|
| | |
| | | #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
|
| | |
|
| | | def EquipWashSuccess(curPlayer, classLV):
|
| | |
| | | ("DWORD", "SkinValidTime", 0),
|
| | | ),
|
| | |
|
| | | "Horse":(
|
| | | ("DWORD", "HorseID", 1),
|
| | | ("DWORD", "HorseSkinID", 0),
|
| | | ("BYTE", "Quality", 0),
|
| | | ),
|
| | |
|
| | | "Gubao":(
|
| | | ("WORD", "GubaoID", 1),
|
| | | ("BYTE", "GubaoQuality", 0),
|
| | |
| | | ("WORD", "GubaoID", 1),
|
| | | ("BYTE", "GubaoStar", 1),
|
| | | ("list", "StarUPNeedItemInfo", 0),
|
| | | ("list", "StarAttrTypeList", 0),
|
| | | ("list", "StarAttrValueList", 0),
|
| | | ("list", "StarEffIDList", 0),
|
| | | ),
|
| | |
|
| | | "GubaoEffAttr":(
|
| | | ("DWORD", "GubaoEffID", 1),
|
| | | ("BYTE", "GubaoEffType", 0),
|
| | | ("DWORD", "EffCond", 0),
|
| | | ("BYTE", "IsPer", 0),
|
| | | ("list", "EffFuncAttrIDList", 0),
|
| | | ("DWORD", "EffAttrID", 0),
|
| | | ("DWORD", "EffAttrValue", 0),
|
| | | ),
|
| | |
|
| | | "GubaoLV":(
|
| | |
| | | def GetHorseID(self): return self.HorseID # 对åºåéªID
|
| | | def GetSkinValidTime(self): return self.SkinValidTime # æææ¶é¿ç§ |
| | | |
| | | # åéªè¡¨ |
| | | class IPY_Horse(): |
| | | |
| | | def __init__(self): |
| | | self.HorseID = 0
|
| | | self.HorseSkinID = 0
|
| | | self.Quality = 0 |
| | | return |
| | | |
| | | def GetHorseID(self): return self.HorseID # åéªID
|
| | | def GetHorseSkinID(self): return self.HorseSkinID # å¤è§ç©åID
|
| | | def GetQuality(self): return self.Quality # åéªåè´¨ |
| | | |
| | | # å¤å®è¡¨ |
| | | class IPY_Gubao(): |
| | | |
| | |
| | | self.GubaoID = 0
|
| | | self.GubaoStar = 0
|
| | | self.StarUPNeedItemInfo = []
|
| | | self.StarAttrTypeList = []
|
| | | self.StarAttrValueList = [] |
| | | self.StarEffIDList = [] |
| | | return |
| | | |
| | | def GetGubaoID(self): return self.GubaoID # å¤å®ID
|
| | | def GetGubaoStar(self): return self.GubaoStar # å¤å®æçº§
|
| | | def GetStarUPNeedItemInfo(self): return self.StarUPNeedItemInfo # åææéç©å [[ç©åID,个æ°], ...]
|
| | | def GetStarAttrTypeList(self): return self.StarAttrTypeList # æçº§å±æ§ç±»åå表
|
| | | def GetStarAttrValueList(self): return self.StarAttrValueList # æçº§å±æ§å¼å表 |
| | | def GetStarEffIDList(self): return self.StarEffIDList # æçº§ç¹æ®ææIDå表 |
| | | |
| | | # å¤å®ç¹æ®ææè¡¨ |
| | | class IPY_GubaoEffAttr(): |
| | | |
| | | def __init__(self): |
| | | self.GubaoEffID = 0
|
| | | self.GubaoEffType = 0
|
| | | self.EffCond = 0
|
| | | self.IsPer = 0
|
| | | self.EffFuncAttrIDList = []
|
| | | self.EffAttrID = 0
|
| | | self.EffAttrValue = 0 |
| | | return |
| | | |
| | | def GetGubaoEffID(self): return self.GubaoEffID # å¤å®ç¹æ®ææID
|
| | | def GetGubaoEffType(self): return self.GubaoEffType # ææç±»å
|
| | | def GetEffCond(self): return self.EffCond # æ¡ä»¶
|
| | | def GetIsPer(self): return self.IsPer # æ¯å¦ç¾åæ¯æå
|
| | | def GetEffFuncAttrIDList(self): return self.EffFuncAttrIDList # æåæå®åè½å±æ§IDå表
|
| | | def GetEffAttrID(self): return self.EffAttrID # ç´æ¥å¢å 屿§ç±»å
|
| | | def GetEffAttrValue(self): return self.EffAttrValue # æå屿§å¼ |
| | | |
| | | # å¤å®åè´¨å级表 |
| | | class IPY_GubaoLV(): |
| | |
| | | self.ipyHorseTrainLen = len(self.ipyHorseTrainCache)
|
| | | self.ipyHorseSkinPlusCache = self.__LoadFileData("HorseSkinPlus", IPY_HorseSkinPlus)
|
| | | self.ipyHorseSkinPlusLen = len(self.ipyHorseSkinPlusCache)
|
| | | self.ipyHorseCache = self.__LoadFileData("Horse", IPY_Horse)
|
| | | self.ipyHorseLen = len(self.ipyHorseCache)
|
| | | self.ipyGubaoCache = self.__LoadFileData("Gubao", IPY_Gubao)
|
| | | self.ipyGubaoLen = len(self.ipyGubaoCache)
|
| | | self.ipyGubaoStarCache = self.__LoadFileData("GubaoStar", IPY_GubaoStar)
|
| | | self.ipyGubaoStarLen = len(self.ipyGubaoStarCache)
|
| | | self.ipyGubaoEffAttrCache = self.__LoadFileData("GubaoEffAttr", IPY_GubaoEffAttr)
|
| | | self.ipyGubaoEffAttrLen = len(self.ipyGubaoEffAttrCache)
|
| | | self.ipyGubaoLVCache = self.__LoadFileData("GubaoLV", IPY_GubaoLV)
|
| | | self.ipyGubaoLVLen = len(self.ipyGubaoLVCache)
|
| | | self.ipyShentongCache = self.__LoadFileData("Shentong", IPY_Shentong)
|
| | |
| | | def GetHorseTrainByIndex(self, index): return self.ipyHorseTrainCache[index]
|
| | | def GetHorseSkinPlusCount(self): return self.ipyHorseSkinPlusLen
|
| | | def GetHorseSkinPlusByIndex(self, index): return self.ipyHorseSkinPlusCache[index]
|
| | | def GetHorseCount(self): return self.ipyHorseLen
|
| | | def GetHorseByIndex(self, index): return self.ipyHorseCache[index]
|
| | | def GetGubaoCount(self): return self.ipyGubaoLen
|
| | | def GetGubaoByIndex(self, index): return self.ipyGubaoCache[index]
|
| | | def GetGubaoStarCount(self): return self.ipyGubaoStarLen
|
| | | def GetGubaoStarByIndex(self, index): return self.ipyGubaoStarCache[index]
|
| | | def GetGubaoEffAttrCount(self): return self.ipyGubaoEffAttrLen
|
| | | def GetGubaoEffAttrByIndex(self, index): return self.ipyGubaoEffAttrCache[index]
|
| | | def GetGubaoLVCount(self): return self.ipyGubaoLVLen
|
| | | def GetGubaoLVByIndex(self, index): return self.ipyGubaoLVCache[index]
|
| | | def GetShentongCount(self): return self.ipyShentongLen
|
| | |
| | | import ChPyNetSendPack |
| | | import NetPackCommon |
| | | import IPY_GameWorld |
| | | import PlayerHorse
|
| | | import PlayerDogz
|
| | | import PlayerPet
|
| | | import ChConfig |
| | | |
| | | def GetGubaoLVInfo(curPlayer, gubaoID): |
| | |
| | | return |
| | | |
| | | def RefreshGubaoAttr(curPlayer): |
| | | CalcGubaoAttr(curPlayer) |
| | | #CalcGubaoAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | return |
| | | |
| | |
| | | |
| | | starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) |
| | | if starIpyData: |
| | | starAttrTypeList = starIpyData.GetStarAttrTypeList() |
| | | starAttrValueList = starIpyData.GetStarAttrValueList() |
| | | for i, attrID in enumerate(starAttrTypeList): |
| | | attrValue = starAttrValueList[i] |
| | | starEffIDList = starIpyData.GetStarEffIDList()
|
| | | effAttrInfo = {}
|
| | | #GameWorld.DebugLog("GubaoStar屿§: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
|
| | | for effID in starEffIDList:
|
| | | __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
|
| | | #GameWorld.DebugLog(" effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
|
| | | for attrID, attrValue in effAttrInfo.items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) |
| | | |
| | | # ä¿å计ç®å¼ |
| | | #GameWorld.DebugLog("å¤å®å±æ§: %s" % allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList) |
| | | return |
| | | |
| | | def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
|
| | | ''' 计ç®å¤å®ç¹æ®ææIDå¯¹åºæå屿§
|
| | | '''
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
|
| | | if not ipyData:
|
| | | return
|
| | | effType = ipyData.GetGubaoEffType()
|
| | | effCond = ipyData.GetEffCond()
|
| | | attrID = ipyData.GetEffAttrID()
|
| | | effAttrValue = ipyData.GetEffAttrValue()
|
| | | if effAttrValue <= 0:
|
| | | return
|
| | | #ææç±»å ç±»åè¯´æ æ¡ä»¶
|
| | | # 10 xåè´¨çµå® æ»å»å±æ§æåx% xåè´¨
|
| | | if effType == 10:
|
| | | customAttrDictPet = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet)[2]
|
| | | petQualityAttrInfo = customAttrDictPet.get("petQualityAttrInfo", {})
|
| | | quality = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,petQualityAttrInfo=%s" % (effID, effType, quality, petQualityAttrInfo))
|
| | | if quality not in petQualityAttrInfo:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, petQualityAttrInfo[quality], effAttrValue)
|
| | | |
| | | # 11 çµå® æ»ç级æ¯x级+xx屿§ x级
|
| | | elif effType == 11:
|
| | | totalPetLV = PlayerPet.GetTotalPetLV(curPlayer)
|
| | | addAttrValue = int(totalPetLV / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetLV, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | # 12 çµå® æ¯æ¿æ´»xåª+xx屿§ xåª
|
| | | elif effType == 12:
|
| | | totalPetCount = PlayerPet.GetTotalPetCount(curPlayer)
|
| | | addAttrValue = int(totalPetCount / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetCount, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | # 13 xåè´¨åéªå¹»å屿§æåx% xåè´¨
|
| | | elif effType == 13:
|
| | | customAttrDictSkin = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin)[2]
|
| | | horseSkinQualityAttrInfo = customAttrDictSkin.get("horseSkinQualityAttrInfo", {})
|
| | | quality = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,horseSkinQualityAttrInfo=%s" % (effID, effType, quality, horseSkinQualityAttrInfo))
|
| | | if quality not in horseSkinQualityAttrInfo:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, horseSkinQualityAttrInfo[quality], effAttrValue)
|
| | | |
| | | # 14 åéªå¹»åæ¿æ´»xåª+xx屿§ xåª
|
| | | elif effType == 14:
|
| | | horseSkinActCount = PlayerHorse.GetHorseSkinActCount(curPlayer)
|
| | | addAttrValue = int(horseSkinActCount / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,horseSkinActCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, horseSkinActCount, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | # 15 æ¯å¹å
»åéªx次+xx屿§ x次
|
| | | elif effType == 15:
|
| | | pass
|
| | | |
| | | #16 xé¶è£
å¤å¼ºå屿§æåx% xé¶
|
| | | elif effType == 16:
|
| | | customAttrDictPlus = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus)[2]
|
| | | classBaseAttrDictPlus = customAttrDictPlus.get("classBaseAttrDictPlus", {})
|
| | | classLV = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictPlus=%s" % (effID, effType, classLV, classBaseAttrDictPlus))
|
| | | if classLV not in classBaseAttrDictPlus:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictPlus[classLV], effAttrValue)
|
| | | |
| | | #17 xé¶è£
å¤å®ç³å±æ§æåx% xé¶
|
| | | elif effType == 17:
|
| | | customAttrDictStone = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone)[2]
|
| | | classBaseAttrDictStone = customAttrDictStone.get("classBaseAttrDictStone", {})
|
| | | classLV = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStone=%s" % (effID, effType, classLV, classBaseAttrDictStone))
|
| | | if classLV not in classBaseAttrDictStone:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStone[classLV], effAttrValue)
|
| | | |
| | | #18 xé¶è£
å¤åæå±æ§æåx% xé¶
|
| | | elif effType == 18:
|
| | | customAttrDictStar = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star)[2]
|
| | | classBaseAttrDictStar = customAttrDictStar.get("classBaseAttrDictStar", {})
|
| | | classLV = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStar=%s" % (effID, effType, classLV, classBaseAttrDictStar))
|
| | | if classLV not in classBaseAttrDictStar:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStar[classLV], effAttrValue)
|
| | | |
| | | #19 xé¶è£
夿´ç¼å±æ§æåx% xé¶
|
| | | elif effType == 19:
|
| | | customAttrDictWash = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash)[2]
|
| | | classBaseAttrDictWash = customAttrDictWash.get("classBaseAttrDictWash", {})
|
| | | classLV = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictWash=%s" % (effID, effType, classLV, classBaseAttrDictWash))
|
| | | if classLV not in classBaseAttrDictWash:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictWash[classLV], effAttrValue)
|
| | | |
| | | #20 xé¶è£
å¤éé屿§æåx% xé¶
|
| | | elif effType == 20:
|
| | | customAttrDictEnchant = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Enchant)[2]
|
| | | classBaseAttrDictEnchant = customAttrDictEnchant.get("classBaseAttrDictEnchant", {})
|
| | | classLV = effCond
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictEnchant=%s" % (effID, effType, classLV, classBaseAttrDictEnchant))
|
| | | if classLV not in classBaseAttrDictEnchant:
|
| | | return
|
| | | __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictEnchant[classLV], effAttrValue)
|
| | | |
| | | #21 åºæç¥å
½è£
å¤å¼ºåæ¯x级+xx屿§ x级
|
| | | elif effType == 21:
|
| | | fightDogzTotalPlusLv = PlayerDogz.GetFightDogzTotalPlusLv(curPlayer)
|
| | | addAttrValue = int(fightDogzTotalPlusLv / effCond * effAttrValue)
|
| | | #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,fightDogzTotalPlusLv=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, fightDogzTotalPlusLv, attrID, addAttrValue))
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | |
| | | return
|
| | |
|
| | | def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
|
| | | if not funcAttrInfo or effAttrValue <= 0:
|
| | | return
|
| | | isPer = ipyData.GetIsPer()
|
| | | effAttrIDList = ipyData.GetEffFuncAttrIDList() # æåæå®åè½å±æ§IDå表
|
| | | for attrID, attrValue in funcAttrInfo.items():
|
| | | if effAttrIDList and attrID not in effAttrIDList:
|
| | | continue
|
| | | if isPer:
|
| | | addAttrValue = int(attrValue * effAttrValue / 100.0)
|
| | | else:
|
| | | addAttrValue = effAttrValue
|
| | | if attrID > 0 and addAttrValue > 0:
|
| | | effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
| | | return
|
| | |
|
| | | def Sync_GubaoInfo(curPlayer, gubaoIDList=None): |
| | | if gubaoIDList == None: |
| | | syncIDList = [] |
| | |
| | | allAttrListSkin = [{} for _ in range(4)]
|
| | | allAttrListTrain = [{} for _ in range(4)]
|
| | |
|
| | | customAttrDictSkin = {}
|
| | | |
| | | horseSpeed = 0 # åéªåè½å¢å çé度å¼ï¼éªä¹æ¶ææææ
|
| | | horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
|
| | | # çé¶å¹å
»å±æ§
|
| | |
| | |
|
| | | # å¹»å屿§
|
| | | initFPAdd = 0 #åå§æå
|
| | | horseSkinQualityAttrInfo = {}
|
| | | for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
|
| | | skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
|
| | | if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
|
| | |
| | | if skinIpyData:
|
| | | for attrID, attrValue in skinIpyData.GetAttrInfo().items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
|
| | | |
| | | hIpyData = IpyGameDataPY.GetIpyGameData("Horse", horseID)
|
| | | if hIpyData:
|
| | | quality = hIpyData.GetQuality()
|
| | | if quality not in horseSkinQualityAttrInfo:
|
| | | horseSkinQualityAttrInfo[quality] = {}
|
| | | qualityAttrDict = horseSkinQualityAttrInfo[quality]
|
| | | for i, attrID in enumerate(attrTypeList):
|
| | | attrValue = attrValueList[i]
|
| | | qualityAttrDict[attrID] = qualityAttrDict.get(attrID, 0) + attrValue
|
| | | customAttrDictSkin["horseSkinQualityAttrInfo"] = horseSkinQualityAttrInfo
|
| | |
|
| | | # æ°å¹å
»å±æ§
|
| | | for index in xrange(ipyDataMgr.GetHorseTrainCount()):
|
| | |
| | | # ä¿å计ç®å¼
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin, customAttrDict=customAttrDictSkin)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain)
|
| | | return
|
| | |
|
| | | def GetHorseSkinActCount(curPlayer):
|
| | | horseSkinActCount = 0
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
|
| | | skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
|
| | | if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
|
| | | continue
|
| | | horseSkinActCount += 1
|
| | | return horseSkinActCount
|
| | |
|
| | | #// A5 27 åéªæå #tagCMHorseUp
|
| | | #
|
| | | #struct tagCMHorseUp
|
| | |
| | | totalPetLV += classLV
|
| | | return totalPetLV
|
| | |
|
| | | def GetTotalPetCount(curPlayer):
|
| | | totalPetCount = 0
|
| | | petPackIndex = ShareDefine.rptPet
|
| | | petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
|
| | | for i in range(petPack.GetCount()):
|
| | | petItem = petPack.GetAt(i)
|
| | | if petItem.IsEmpty():
|
| | | continue |
| | | petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | petIpyData = GetPetIpydata(petItemNPCID)
|
| | | if not petIpyData:
|
| | | continue
|
| | | totalPetCount += 1
|
| | | return totalPetCount
|
| | |
|
| | | def IsPetMaxLV(curPlayer, petNPCID):
|
| | | petItem = GetPetDataItemByNPCID(curPlayer, petNPCID)
|
| | | if not petItem:
|
| | |
| | | skillAttrList = [{} for _ in range(4)]
|
| | | allAttrListPetSkin = [{} for _ in range(4)]
|
| | | allAttrListTrain = [{} for _ in range(4)]
|
| | | totalMinAtk, totalMaxAtk = GetPetAtkValue(curPlayer)
|
| | | customAttrDictPet = {}
|
| | | totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
|
| | | customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
|
| | | PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMinAtk, totalMinAtk, allAttrListPet)
|
| | | PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet)
|
| | | totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # æ»ç¾å°å¤©æ°
|
| | |
| | |
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetTarin, allAttrListTrain)
|
| | |
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet, customAttrDict=customAttrDictPet)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSoul, allAttrListPetSoul)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSign, allAttrListPetSign)
|
| | |
|
| | |
| | |
|
| | | ## è·åçµå
½åºææ¶çæ»å»å
|
| | | def GetPetAtkValue(curPlayer):
|
| | | qualityAttrInfo = {}
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
|
| | | #GameWorld.DebugLog(' å® ç©åè½æªå¼å¯')
|
| | | return 0, 0
|
| | | return 0, 0, qualityAttrInfo
|
| | |
|
| | | classAddAtk = 0
|
| | | petPackIndex = ShareDefine.rptPet
|
| | |
| | | petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
| | | classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
|
| | | classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
|
| | | classAddAtk += (classIpyData.GetAtkAdd() if classIpyData else 0)
|
| | | atkAdd = classIpyData.GetAtkAdd() if classIpyData else 0
|
| | | classAddAtk += atkAdd
|
| | | |
| | | petIpyData = GetPetIpydata(petItemNPCID)
|
| | | if petIpyData:
|
| | | quality = petIpyData.GetQuality()
|
| | | if quality not in qualityAttrInfo:
|
| | | qualityAttrInfo[quality] = {}
|
| | | qualityAttrDict = qualityAttrInfo[quality]
|
| | | qualityAttrDict[ShareDefine.Def_Effect_PetAtk] = qualityAttrDict.get(ShareDefine.Def_Effect_PetAtk, 0) + atkAdd
|
| | | |
| | | totalMinAtk = classAddAtk
|
| | | totalMaxAtk = classAddAtk
|
| | | return totalMinAtk, totalMaxAtk
|
| | | return totalMinAtk, totalMaxAtk, qualityAttrInfo
|
| | |
|
| | | def OnPlayerPetLogin(curPlayer):
|
| | | ## ç»å½å¤ç
|