#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerActHorsePetTrain
|
#
|
# @todo:Æï³èÑø³É»î¶¯
|
# @author hxp
|
# @date 2024-08-14
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: Æï³èÑø³É»î¶¯
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-08-14 16:30"""
|
#-------------------------------------------------------------------------------
|
|
import PyGameData
|
import ShareDefine
|
import PlayerControl
|
import IpyGameDataPY
|
import CrossRealmPlayer
|
import FunctionNPCCommon
|
import PlayerBillboard
|
import ChPyNetSendPack
|
import PlayerZhanling
|
import NetPackCommon
|
import PlayerActTask
|
import GameWorld
|
import ChConfig
|
|
def OnMixFirstLogin(curPlayer):
|
|
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
|
actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
if not actInfo.get(ShareDefine.ActKey_State):
|
continue
|
score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
|
if not score:
|
continue
|
GameWorld.Log("Æï³èÑø³ÉºÏ·þÊ×µÇͬ²½»ý·Ö°ñµ¥: actNum=%s,score=%s" % (actNum, score), curPlayer.GetPlayerID())
|
PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_HorsePetTrainScore, score, autoSort=True)
|
break
|
|
return
|
|
def OnPlayerLogin(curPlayer):
|
|
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
|
actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
isReset = __CheckPlayerHorsePetTrainAction(curPlayer, actNum)
|
if not isReset:
|
# »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢
|
if actInfo.get(ShareDefine.ActKey_State):
|
Sync_HorsePetTrainActionInfo(curPlayer, actNum)
|
Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
|
|
if not __CheckPlayerCrossActHorsePetTrain(curPlayer):
|
Sync_CrossActHorsePetTrainActionInfo(curPlayer)
|
|
return
|
|
def RefreshHorsePetTrainActionInfo(actNum):
|
## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢
|
playerManager = GameWorld.GetPlayerManager()
|
for index in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
continue
|
__CheckPlayerHorsePetTrainAction(curPlayer, actNum)
|
return
|
|
def __CheckPlayerHorsePetTrainAction(curPlayer, actNum):
|
## ¼ì²éÍæ¼Ò»î¶¯Êý¾ÝÐÅÏ¢
|
|
playerID = curPlayer.GetPlayerID()
|
actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
|
actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
state = actInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
|
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainID % actNum) # Íæ¼ÒÉíÉϵĻID
|
|
# »î¶¯ID ÏàͬµÄ»°²»´¦Àí
|
if actID == playerActID:
|
GameWorld.DebugLog("Æï³èÑø³É»î¶¯ID²»±ä£¬²»´¦Àí£¡actNum=%s,actID=%s" % (actNum, actID), playerID)
|
return
|
|
GameWorld.DebugLog("Æï³èÑø³É»î¶¯ÖØÖÃ! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s"
|
% (actNum, actID, playerActID, state, cfgID), playerID)
|
score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
|
PlayerZhanling.ResetZhanling(curPlayer, PlayerZhanling.ZhanlingType_HorsePetTrain, score)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainID % actNum, actID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainScore % actNum, 0)
|
|
if state:
|
cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
|
if ipyData and ipyData.GetActShopType():
|
FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, [ipyData.GetActShopType()])
|
Sync_HorsePetTrainActionInfo(curPlayer, actNum)
|
Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
|
return True
|
|
def RefreshCrossActHorsePetTrainInfo():
|
## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢
|
playerManager = GameWorld.GetPlayerManager()
|
for index in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
continue
|
__CheckPlayerCrossActHorsePetTrain(curPlayer)
|
|
return
|
|
def __CheckPlayerCrossActHorsePetTrain(curPlayer):
|
|
playerID = curPlayer.GetPlayerID()
|
|
actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
|
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_HorsePetTrainID) # Íæ¼ÒÉíÉϵĻ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)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_HorsePetTrainID, actID)
|
|
if not state:
|
CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
|
|
Sync_CrossActHorsePetTrainActionInfo(curPlayer)
|
return True
|
|
def OnHorsePetTrainCost(curPlayer, costItemDict):
|
|
playerID = curPlayer.GetPlayerID()
|
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
|
actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
if not actInfo.get(ShareDefine.ActKey_State):
|
continue
|
|
cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
|
if not ipyData:
|
continue
|
|
if ipyData.GetIsRelationCrossAct():
|
crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
|
if crossActInfo.get(ShareDefine.ActKey_State, 0):
|
if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
|
GameWorld.Log("¿ç·þÆï³èÑø³É·Ç²ÎÓë»î¶¯ÖÐ: actNum=%s" % actNum, playerID)
|
continue
|
else:
|
if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
|
GameWorld.Log("Æï³èÑø³É·Ç²ÎÓë»î¶¯ÖÐ: actNum=%s" % actNum, playerID)
|
continue
|
|
addActScore = 0
|
itemScoreDict = IpyGameDataPY.GetFuncEvalCfg("HorsePetTrainAct", 1, {})
|
for itemID, costCount in costItemDict.items():
|
if str(itemID) not in itemScoreDict:
|
continue
|
itemScore = costCount * itemScoreDict[str(itemID)]
|
addActScore += itemScore
|
GameWorld.DebugLog("Æï³èÑø³É»î¶¯ÏûºÄÎïÆ·»ý·Öͳ¼Æ: actNum=%s,itemID=%s,costCount=%s,itemScore=%s, %s"
|
% (actNum, itemID, costCount, itemScore, addActScore))
|
|
if addActScore <= 0:
|
continue
|
|
AddPlayerScore(curPlayer, actNum, addActScore, ipyData.GetIsRelationCrossAct())
|
|
return
|
|
def AddPlayerScore(curPlayer, actNum, addScore, isRelationCrossAct):
|
if addScore <= 0:
|
return 0
|
score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
|
updScore = score + addScore
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainScore % actNum, updScore)
|
GameWorld.DebugLog("Æï³èÑø³É»î¶¯Ôö¼Ó»ý·Ö: actNum=%s,addScore=%s,updScore=%s" % (actNum, addScore, updScore))
|
Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
|
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_HorsePetTrainScore, addScore, "ActHorsePetTrain")
|
PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_HorsePetActScore, addScore)
|
PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_HorsePetTrainScore, updScore, autoSort=True)
|
SendToGameServer_HorsePetTrain(curPlayer, "AddHorsePetTrainScore", [addScore, updScore, isRelationCrossAct])
|
return updScore
|
|
def SendToGameServer_HorsePetTrain(curPlayer, msgType, dataMsg=""):
|
playerID = curPlayer.GetPlayerID()
|
msgList = str([msgType, dataMsg])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "ActHorsePetTrain", msgList, len(msgList))
|
GameWorld.Log("Æï³èÑø³É»î¶¯·¢ËÍGameServer: %s, %s" % (msgType, dataMsg), playerID)
|
return
|
|
def GetActHorsePetTrainScore(curPlayer):
|
## »ñÈ¡»î¶¯ÖÐÑø³É»ý·Ö
|
actScore = 0
|
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
|
actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
if not actInfo.get(ShareDefine.ActKey_State):
|
continue
|
score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
|
actScore = max(score, actScore)
|
return actScore
|
|
def Sync_HorsePetTrainActionInfo(curPlayer, actNum):
|
## ֪ͨ»î¶¯ÐÅÏ¢
|
|
actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
|
if not actInfo.get(ShareDefine.ActKey_State):
|
return
|
|
cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
|
if not ipyData:
|
return
|
|
personalTempID = ipyData.GetPersonalTemplateID()
|
personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", personalTempID) if personalTempID else []
|
|
startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
|
clientPack = ChPyNetSendPack.tagMCActHorsePetTrainInfo()
|
clientPack.ActNum = actNum
|
clientPack.StartDate = startDateStr
|
clientPack.EndtDate = endDateStr
|
clientPack.JoinStartTime = ipyData.GetJoinStartTime()
|
clientPack.JoinEndTime = ipyData.GetJoinEndTime()
|
clientPack.LimitLV = ipyData.GetLVLimit()
|
clientPack.ShopType = ipyData.GetActShopType()
|
|
clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
|
clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|
def Sync_HorsePetTrainPlayerInfo(curPlayer, actNum):
|
|
actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
|
if not actInfo.get(ShareDefine.ActKey_State):
|
return
|
|
clientPack = ChPyNetSendPack.tagMCActHorsePetTrainPlayerInfo()
|
clientPack.ActNum = actNum
|
clientPack.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|
def Sync_CrossActHorsePetTrainActionInfo(curPlayer):
|
## ֪ͨ»î¶¯ÐÅÏ¢
|
actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
|
if not actInfo:
|
return
|
|
if not actInfo.get(ShareDefine.ActKey_State):
|
return
|
|
ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
if not ipyDataDict:
|
return
|
|
personalTempID = ipyDataDict.get("PersonalTemplateID", 0)
|
personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", personalTempID) if personalTempID else []
|
|
clientPack = ChPyNetSendPack.tagMCCrossActHorsePetTrainInfo()
|
clientPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
|
clientPack.ServerInfoLen = len(clientPack.ServerIDRangeInfo)
|
clientPack.GroupValue1 = ipyDataDict.get("ZoneID", 0)
|
clientPack.StartDate = ipyDataDict.get("StartDate", "")
|
clientPack.EndtDate = ipyDataDict.get("EndDate", "")
|
clientPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
|
clientPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
|
|
clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
|
clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
|
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|
def __GetTempRankBillPackList(ipyDataList):
|
packBillList = []
|
if not ipyDataList:
|
return packBillList
|
for tempIpyData in ipyDataList:
|
rankInfo = ChPyNetSendPack.tagMCActHorsePetTrainBillard()
|
rankInfo.Rank = tempIpyData.GetRank()
|
|
rankInfo.AwardItemList = []
|
awardItemList = tempIpyData.GetAwardItemList()
|
for itemID, itemCount, isAuctionItem in awardItemList:
|
item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
|
item.Clear()
|
item.ItemID = itemID
|
item.ItemCount = itemCount
|
item.IsBind = isAuctionItem
|
rankInfo.AwardItemList.append(item)
|
rankInfo.Count = len(rankInfo.AwardItemList)
|
|
# rankInfo.MemAwardItemList = []
|
# memAwardItemList = tempIpyData.GetMemAwardItemList()
|
# for itemID, itemCount, isAuctionItem in memAwardItemList:
|
# item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
|
# item.Clear()
|
# item.ItemID = itemID
|
# item.ItemCount = itemCount
|
# item.IsBind = isAuctionItem
|
# rankInfo.MemAwardItemList.append(item)
|
# rankInfo.MemCount = len(rankInfo.MemAwardItemList)
|
|
rankInfo.NeedScore = tempIpyData.GetNeedScore()
|
rankInfo.AwardItemExList = []
|
scoreAwardEx = tempIpyData.GetScoreAwardEx()
|
scoreExList = scoreAwardEx.keys()
|
scoreExList.sort()
|
for scoreEx in scoreExList:
|
itemExList = scoreAwardEx[scoreEx]
|
awardEx = ChPyNetSendPack.tagMCActHorsePetTrainAwardEx()
|
awardEx.NeedScore = scoreEx
|
awardEx.AwardItemList = []
|
for itemID, itemCount, isAuctionItem in itemExList:
|
item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
|
item.Clear()
|
item.ItemID = itemID
|
item.ItemCount = itemCount
|
item.IsBind = isAuctionItem
|
awardEx.AwardItemList.append(item)
|
awardEx.Count = len(awardEx.AwardItemList)
|
|
rankInfo.AwardItemExList.append(awardEx)
|
rankInfo.CountEx = len(rankInfo.AwardItemExList)
|
|
packBillList.append(rankInfo)
|
return packBillList
|