#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerGubao # # @todo:¹Å±¦ÏµÍ³ # @author hxp # @date 2023-01-05 # @version 1.0 # # ÏêϸÃèÊö: ¹Å±¦ÏµÍ³ # #------------------------------------------------------------------------------- #"""Version = 2023-01-05 15:30""" #------------------------------------------------------------------------------- import GameWorld import ItemCommon import PlayerControl import IpyGameDataPY import ChPyNetSendPack import NetPackCommon import IPY_GameWorld import ChConfig def GetGubaoLVInfo(curPlayer, gubaoID): lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID) lv = lvInfo / 100 star = lvInfo % 100 return lv, star def SetGubaoLVInfo(curPlayer, gubaoID, lv, star): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoLVInfo % gubaoID, lv * 100 + star) return def OnPlayerLogin(curPlayer): Sync_GubaoInfo(curPlayer) return #// B2 16 ¹Å±¦¼¤»î #tagCMGubaoActivate # #struct tagCMGubaoActivate #{ # tagHead Head; # WORD GubaoID; #}; def OnGubaoActivate(index, curPackData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() gubaoID = curPackData.GubaoID ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID) if not ipyData: return needItemID = ipyData.GetUnlockItemID() needItemCnt = ipyData.GetUnlockItemCnt() if not needItemID or not needItemCnt: return lv, star = GetGubaoLVInfo(curPlayer, gubaoID) if lv or star: GameWorld.DebugLog("¹Å±¦ÒѾ­¼¤»î¹ý£¡ gubaoID=%s" % gubaoID, playerID) return itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt) if not hasEnough: GameWorld.DebugLog("¼¤»î¹Å±¦µÀ¾ß²»×ã! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID) return ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao") lv, star = 1, 1 SetGubaoLVInfo(curPlayer, gubaoID, lv, star) GameWorld.Log("¹Å±¦¼¤»î³É¹¦£¡ gubaoID=%s" % gubaoID, playerID) RefreshGubaoAttr(curPlayer) Sync_GubaoInfo(curPlayer, [gubaoID]) return #// B2 17 ¹Å±¦ÉýÐÇ #tagCMGubaoStarUp # #struct tagCMGubaoStarUp #{ # tagHead Head; # WORD GubaoID; #}; def OnGubaoStarUp(index, curPackData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() gubaoID = curPackData.GubaoID lv, star = GetGubaoLVInfo(curPlayer, gubaoID) if not star: GameWorld.DebugLog("¹Å±¦Î´¼¤»î£¬ÎÞ·¨ÉýÐÇ£¡ gubaoID=%s" % gubaoID, playerID) return if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoStar", gubaoID, star + 1): GameWorld.DebugLog("¹Å±¦ÒÑÂúÐÇ£¡ gubaoID=%s,star=%s" % (gubaoID, star), playerID) return ipyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) if not ipyData: return needItemList = ipyData.GetStarUPNeedItemInfo() if not needItemList: return itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) if lackItemDict: GameWorld.DebugLog("¹Å±¦ÉýÐÇËùÐèÎïÆ·²»×㣡 star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID) return #¿ÛÏûºÄ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao") updStar = star + 1 SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar) GameWorld.Log("¹Å±¦ÉýÐÇ: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID) RefreshGubaoAttr(curPlayer) Sync_GubaoInfo(curPlayer, [gubaoID]) return #// B2 18 ¹Å±¦Éý¼¶ #tagCMGubaoLVUp # #struct tagCMGubaoLVUp #{ # tagHead Head; # WORD GubaoID; #}; def OnGubaoLVUp(index, curPackData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() gubaoID = curPackData.GubaoID lv, star = GetGubaoLVInfo(curPlayer, gubaoID) if not star: GameWorld.DebugLog("¹Å±¦Î´¼¤»î£¬ÎÞ·¨Éý¼¶£¡ gubaoID=%s" % gubaoID, playerID) return ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID) if not ipyData: return quality = ipyData.GetGubaoQuality() if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoLV", quality, lv + 1): GameWorld.DebugLog("¹Å±¦ÒÑÂú¼¶£¡ gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv), playerID) return lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv) if not lvIpyData: return needItemList = lvIpyData.GetLVUPNeedItemInfo() if not needItemList: return itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) if lackItemDict: GameWorld.DebugLog("¹Å±¦Éý¼¶ËùÐèÎïÆ·²»×㣡 quality=%s,lv=%s,needItemList=%s,lackItemDict=%s" % (quality, lv, needItemList, lackItemDict), playerID) return #¿ÛÏûºÄ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao") updLV = lv + 1 SetGubaoLVInfo(curPlayer, gubaoID, updLV, star) GameWorld.Log("¹Å±¦Éý¼¶: gubaoID=%s,quality=%s,updLV=%s" % (gubaoID, quality, updLV), playerID) RefreshGubaoAttr(curPlayer) Sync_GubaoInfo(curPlayer, [gubaoID]) return def RefreshGubaoAttr(curPlayer): CalcGubaoAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return def CalcGubaoAttr(curPlayer): allAttrList = [{} for _ in range(4)] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetGubaoCount()): ipyData = ipyDataMgr.GetGubaoByIndex(index) gubaoID = ipyData.GetGubaoID() lv, star = GetGubaoLVInfo(curPlayer, gubaoID) if not star: continue quality = ipyData.GetGubaoQuality() lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv) if lvIpyData: lvAttrTypeList = lvIpyData.GetLVAttrTypeList() lvAttrValueList = lvIpyData.GetLVAttrValueList() for i, attrID in enumerate(lvAttrTypeList): attrValue = lvAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star) if starIpyData: starAttrTypeList = starIpyData.GetStarAttrTypeList() starAttrValueList = starIpyData.GetStarAttrValueList() for i, attrID in enumerate(starAttrTypeList): attrValue = starAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) # ±£´æ¼ÆËãÖµ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList) return def Sync_GubaoInfo(curPlayer, gubaoIDList=None): if gubaoIDList == None: syncIDList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetGubaoCount()): ipyData = ipyDataMgr.GetGubaoByIndex(index) syncIDList.append(ipyData.GetGubaoID()) else: syncIDList = gubaoIDList gubaoInfoList = [] for gubaoID in syncIDList: lv, star = GetGubaoLVInfo(curPlayer, gubaoID) if not lv and not star and gubaoIDList == None: # ûÓÐÖ¸¶¨Ê±Ö»Í¬²½¼¤»îµÄ continue gubao = ChPyNetSendPack.tagMCGubao() gubao.GubaoID = gubaoID gubao.GubaoLV = lv gubao.GubaoStar = star gubaoInfoList.append(gubao) if not gubaoInfoList: return clientPack = ChPyNetSendPack.tagMCGubaoInfo() clientPack.GubaoInfoList = gubaoInfoList clientPack.Count = len(clientPack.GubaoInfoList) NetPackCommon.SendFakePack(curPlayer, clientPack) return