#!/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
|
|