#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.CrossActAllRecharge # # @todo:¿ç·þÈ«Ãñ³äÖµ # @author hxp # @date 2022-10-11 # @version 1.0 # # ÏêϸÃèÊö: ¿ç·þÈ«Ãñ³äÖµ # #------------------------------------------------------------------------------- #"""Version = 2022-10-11 19:00""" #------------------------------------------------------------------------------- import ChConfig import ShareDefine import PlayerControl import NetPackCommon import CrossRealmPlayer import ChPyNetSendPack import ItemControler import IPY_GameWorld import GameWorld def OnPlayerLogin(curPlayer): isReset = __CheckPlayerCrossActAllRecharge(curPlayer) if not isReset: actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if actInfo.get(ShareDefine.ActKey_State): Sync_CrossActAllRechargePlayerInfo(curPlayer) if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB): SendGameServerActRechargeRMB(curPlayer, actInfo) return def RefreshCrossActAllRechargeInfo(): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if curPlayer.GetID() == 0: continue __CheckPlayerCrossActAllRecharge(curPlayer) return def __CheckPlayerCrossActAllRecharge(curPlayer): playerID = curPlayer.GetPlayerID() actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeID) # Íæ¼ÒÉíÉϵĻID # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("¿ç·þÈ«Ãñ³äÖµ»î¶¯ID²»±ä£¬²»´¦Àí£¡cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID) return GameWorld.DebugLog("¿ç·þÈ«Ãñ³äÖµ»î¶¯ÖØÖÃ! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID) if not state: CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_AllRecharge) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeID, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, 0) Sync_CrossActAllRechargePlayerInfo(curPlayer) return True def GetCrossActAllRechargeAward(curPlayer, awardIndex): ## Áì½± actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) state = actInfo.get(ShareDefine.ActKey_State, 0) if not state: GameWorld.DebugLog("·Ç»î¶¯ÖÐ") return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {}) if not ipyDataDict: return zoneID = ipyDataDict.get("ZoneID", 0) if not zoneID: return awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward) if awardRecord & pow(2, awardIndex): GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¸Ã½±Àø! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID()) return sendMsg = str(["AllRechargeAward", [cfgID, zoneID, awardIndex]]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg)) return def GameServer_CrossActAllRecharge(curPlayer, msgList): msgType = msgList[0] if msgType == "AllRechargeAward": awardIndex, awardItemList = msgList[1:] awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward) if awardRecord & pow(2, awardIndex): GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¸Ã½±Àø! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID()) return if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList): return updAwardRecord = awardRecord | pow(2, awardIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, updAwardRecord) GameWorld.Log("ÁìȡȫÃñ³äÖµ½±Àø: awardIndex=%s" % (awardIndex), curPlayer.GetPlayerID()) Sync_CrossActAllRechargePlayerInfo(curPlayer) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["CrossActAllRecharge", False, {}]) return def AddCTGRMB(curPlayer, addRMB): ## Ôö¼Ó»î¶¯ÒÑÀۼƳäÖµRMB actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("¿ç·þÈ«Ãñ³äÖµ·Ç»î¶¯ÖÐ! playerServerID=%s" % GameWorld.GetPlayerServerID(curPlayer), curPlayer.GetPlayerID()) return totalRMB = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) + addRMB, ChConfig.Def_UpperLimit_DWord) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, totalRMB) GameWorld.DebugLog("¿ç·þÈ«Ãñ³äÖµ»î¶¯Ôö¼ÓÍæ¼ÒÀۼƳäÖµRMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID()) Sync_CrossActAllRechargePlayerInfo(curPlayer) SendGameServerActRechargeRMB(curPlayer, actInfo) return def SendGameServerActRechargeRMB(curPlayer, actInfo): cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {}) if not ipyDataDict: return zoneID = ipyDataDict.get("ZoneID", 0) if not zoneID: return totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) sendMsg = str(["AllRechargeRMB", [cfgID, zoneID, totalRMB]]) GameWorld.Log("SendGameServerActRechargeRMB: %s" % sendMsg, curPlayer.GetPlayerID()) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg)) return def Sync_CrossActAllRechargePlayerInfo(curPlayer): ## ֪ͨ»î¶¯Íæ¼ÒÊý¾ÝÐÅÏ¢ clientPack = ChPyNetSendPack.tagMCCrossActAllRechargePlayerInfo() clientPack.CTGRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) clientPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward) NetPackCommon.SendFakePack(curPlayer, clientPack) return