#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerLuckyCloudBuy
|
#
|
# @todo:ÐÒÔËÔÆ¹º
|
# @author hxp
|
# @date 2021-10-21
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ÐÒÔËÔÆ¹º
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2021-10-21 17:00"""
|
#-------------------------------------------------------------------------------
|
|
import ChConfig
|
import PyGameData
|
import ShareDefine
|
import PlayerControl
|
import IpyGameDataPY
|
import CrossRealmPlayer
|
import ChPyNetSendPack
|
import IPY_GameWorld
|
import NetPackCommon
|
import ItemControler
|
import ItemCommon
|
import GameWorld
|
|
def OnPlayerLogin(curPlayer):
|
|
if GameWorld.IsCrossServer():
|
return
|
|
if not CrossRealmPlayer.IsCrossServerOpen():
|
return
|
|
__CheckLuckyCloudBuyID(curPlayer)
|
Sync_LuckyCloudBuyPlayerInfo(curPlayer)
|
return
|
|
def OnLuckyCloudBuyChange():
|
|
if GameWorld.IsCrossServer():
|
return
|
|
if not CrossRealmPlayer.IsCrossServerOpen():
|
return
|
|
playerManager = GameWorld.GetPlayerManager()
|
for index in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if curPlayer.GetID() == 0:
|
continue
|
__CheckLuckyCloudBuyID(curPlayer)
|
Sync_LuckyCloudBuyPlayerInfo(curPlayer) # ¸Ã¹¦ÄÜÊÕµ½¾Íͬ²½£¬²»ÂÛÓÐûÓÐÖØÖã¬ÒòΪ¿ÉÄÜÓÉ¿ç·þ¹Ø±Õ±äΪ¿ªÆôʱµÄÊý¾Ýͬ²½
|
|
return
|
|
def __CheckLuckyCloudBuyID(curPlayer):
|
|
roundID = PyGameData.g_luckyCloudBuyInfo.get("idTime", 0)
|
playerRoundID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID) # Íæ¼ÒÉíÉϵĻID
|
if playerRoundID == roundID:
|
GameWorld.DebugLog("ÐÒÔËÔÆ¹º½±ÀøÆÚIDÏàͬ£¬²»ÖØÖÃ! playerRoundID=%s,roundID=%s" % (playerRoundID, roundID), curPlayer.GetPlayerID())
|
return
|
GameWorld.DebugLog("ÐÒÔËÔÆ¹º½±ÀøÆÚID±ä¸ü£¬ÖØÖÃ! playerRoundID=%s,roundID=%s" % (playerRoundID, roundID), curPlayer.GetPlayerID())
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_RoundID, roundID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, 0)
|
return True
|
|
#// C1 10 ÐÒÔËÔÆ¹º¹ºÂò #tagCMLuckyCloudBuy
|
#
|
#struct tagCMLuckyCloudBuy
|
#{
|
# tagHead Head;
|
# BYTE BuyCount; // ¹ºÂò´ÎÊý
|
#};
|
def OnLuckyCloudBuy(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
accID = curPlayer.GetAccID()
|
playerID = curPlayer.GetPlayerID()
|
buyCount = clientData.BuyCount
|
|
if GameWorld.IsCrossServer():
|
return
|
|
if not CrossRealmPlayer.IsCrossServerOpen():
|
PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
|
return
|
|
unLimitHour, unLimitMinute = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 3)
|
crossServerDateTime = GameWorld.ChangeStrToDatetime(GameWorld.GetCrossServerTimeStr())
|
unLimitDateTime = GameWorld.ChangeStrToDatetime("%d-%d-%d %d:%d:00" \
|
% (crossServerDateTime.year, crossServerDateTime.month, crossServerDateTime.day, unLimitHour, unLimitMinute))
|
|
if crossServerDateTime >= unLimitDateTime:
|
GameWorld.DebugLog("µ±Ç°¿ç·þ·þÎñÆ÷ʱ¼ä²»ÏÞÖÆÐÒÔËÔÆ¹º¹ºÂò´ÎÊýÁË! crossServerDateTime=%s,unLimitHour=%s,unLimitMinute=%s"
|
% (crossServerDateTime, unLimitHour, unLimitMinute))
|
else:
|
hadBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
|
vipLV = curPlayer.GetVIPLv()
|
gmLVLimitBuyCountList = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 2)
|
maxBuyCount = gmLVLimitBuyCountList[vipLV] if len(gmLVLimitBuyCountList) > vipLV else gmLVLimitBuyCountList[-1]
|
if hadBuyCount + buyCount > maxBuyCount:
|
GameWorld.DebugLog("ÐÒÔËÔÆ¹º¹ºÂò´ÎÊýÏÞÖÆ! hadBuyCount=%s,buyCount=%s,vipLV=%s,maxBuyCount=%s,crossServerDateTime=%s"
|
% (hadBuyCount, buyCount, vipLV, maxBuyCount, crossServerDateTime))
|
return
|
|
buyCountCostMoneyDict = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 1, {})
|
if str(buyCount) not in buyCountCostMoneyDict:
|
return
|
costMoneyType, costMoneyValue = buyCountCostMoneyDict[str(buyCount)]
|
if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue):
|
return
|
|
needSpace = min(buyCount, 10)
|
emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
if needSpace > emptySpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_202580")
|
return
|
|
if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_LuckyCloudBuy, tick):
|
PlayerControl.NotifyCode(curPlayer, "RequestLater")
|
return
|
|
GameWorld.Log("ÐÒÔËÔÆ¹º¹ºÂò: buyCount=%s" % (buyCount), playerID)
|
|
dataMsg = {"accID":accID,
|
"playerID":playerID,
|
"playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
|
"buyCount":buyCount,
|
"roundID":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID),
|
}
|
GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_LuckyCloudBuy, dataMsg)
|
return
|
|
def GameServer_LuckyCloudBuy(curPlayer, msgData):
|
msgType = msgData[0]
|
if msgType == "LuckyCloudBuyNum":
|
CrossServerMsg_LuckyCloudBuyNum(curPlayer, msgData)
|
|
return
|
|
def CrossServerMsg_LuckyCloudBuyNum(curPlayer, msgData):
|
|
playerID = curPlayer.GetPlayerID()
|
_, roundID, buyCount, awardItemList = msgData
|
|
# ÏûºÄÇ®¼°½±Àø±ØÐëÖ´ÐУ¬Ôö¼Ó´ÎÊýÐèͬһ¸öÂÖ´ÎID
|
playerRoundID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID)
|
hadBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
|
GameWorld.Log("µØÍ¼Íæ¼ÒÊÕµ½ÐÒÔËÔÆ¹º¹ºÂò½áËãÐÅÏ¢! playerRoundID=%s,hadBuyCount=%s, roundID=%s,buyCount=%s"
|
% (playerRoundID, hadBuyCount, roundID, buyCount), playerID)
|
|
buyCountCostMoneyDict = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 1, {})
|
if str(buyCount) not in buyCountCostMoneyDict:
|
return
|
costMoneyType, costMoneyValue = buyCountCostMoneyDict[str(buyCount)]
|
|
if not PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "LuckyCloudBuy"):
|
return
|
|
if roundID == playerRoundID:
|
updBuyCount = hadBuyCount + buyCount
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, updBuyCount)
|
GameWorld.Log(" ¸üÐÂÐÒÔËÔÆ¹º¹ºÂò´ÎÊý: updBuyCount=%s" % (updBuyCount), playerID)
|
|
GameWorld.Log(" ½áËãÐÒÔËÔÆ¹º¹ºÂò½±Àø: awardItemList=%s" % str(awardItemList), playerID)
|
ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["LuckyCloudBuy", False, {}])
|
|
Sync_LuckyCloudBuyPlayerInfo(curPlayer)
|
return
|
|
def Sync_LuckyCloudBuyPlayerInfo(curPlayer):
|
clientPack = ChPyNetSendPack.tagMCLuckyCloudBuyPlayerInfo()
|
clientPack.BuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|