#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerMergePK
|
#
|
# @todo:¿ç·þPKÆ¥Åä
|
# @author hxp
|
# @date 2015-10-22
|
# @version 1.2
|
#
|
# @change: "2015-11-05 18:00" hxp Ôö¼Ó»Ö¸´Á¬Ê¤; Ôö¼ÓÿÈÕ»ý·Ö½±Àø£»Ôö¼Ó¹ºÂò´ÎÊýÉÏÏÞ
|
# @change: "2016-12-20 17:30" hxp ÓÀºã°æ¿ç·þÐÞ¸Ä
|
# ÏêϸÃèÊö: ¿ç·þPKÆ¥Åä
|
#
|
#---------------------------------------------------------------------
|
"""Version = 2016-12-20 17:30"""
|
#---------------------------------------------------------------------
|
|
import ChConfig
|
import GameWorld
|
import ItemCommon
|
import ShareDefine
|
import IPY_GameWorld
|
import ChPyNetSendPack
|
import NetPackCommon
|
import PlayerControl
|
import ReadChConfig
|
import ChPlayer
|
|
## ¿ç·þPK»î¶¯ID±ä¸ü
|
def OnMergePKActionChange(key, value):
|
# ¿ç·þ·þÎñÆ÷²»´¦Àí
|
if GameWorld.IsMergeServer():
|
return
|
|
#Def_Notify_WorldKey_MergePKDayID
|
gameWorld = GameWorld.GetGameWorld()
|
mapKeyValue = gameWorld.GetGameWorldDictByKey(key)
|
if mapKeyValue == value:
|
#GameWorld.Log(" ÓëµØÍ¼µ±Ç°ÖµÏàͬ£¬²»´¦Àí£¡")
|
return
|
|
GameWorld.Log("¿ç·þPK»î¶¯Öµ±ä¸ükey=%s,value=%s,mapKeyValue=%s" % (key, value, mapKeyValue))
|
|
for i in range(0, GameWorld.GetPlayerManager().GetPlayerCount()):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(i)
|
|
if curPlayer == None or not curPlayer.GetPlayerID():
|
continue
|
|
#¼ì²éÖØÖÃÍæ¼ÒÐÅÏ¢
|
__CheckResetPlayerMergePKData(curPlayer, key, value)
|
return
|
|
## Çå³ýÍæ¼ÒÐÅÏ¢
|
# @param curPlayer: Íæ¼Ò
|
# @param key: ÌØ»Ý»î¶¯key£¬Ä¬ÈÏÈ«²¿¼ì²é£¬Ò»°ãµÇ¼ʱȫ²¿¼ì²é
|
# @return: None
|
def __CheckResetPlayerMergePKData(curPlayer, key, value, isSync=True):
|
playerID = curPlayer.GetPlayerID()
|
|
# Íæ¼ÒÉíÉÏÊý¾ÝµÄ»î¶¯id
|
playerActionIDKey = ChConfig.Def_PDict_MergePK_ID % key
|
playerActionID = __GetMergePKPDictValue(curPlayer, playerActionIDKey)
|
if playerActionID == value:
|
GameWorld.DebugLog("¿ç·þPK»î¶¯IDÏàͬ£¬²»´¦Àíkey=%s,actionID=%s" % (key, value), playerID)
|
return
|
GameWorld.Log("¿ç·þPK»î¶¯ID²»Í¬£¬Êý¾ÝÖØÖÃkey=%s,actionID=%s,playerActionID=%s"
|
% (key, value, playerActionID), playerID)
|
__SetMergePKPDictValue(curPlayer, playerActionIDKey, value)
|
|
# ÈÕÖØÖÃ
|
if key == ShareDefine.Def_Notify_WorldKey_MergePKDayID:
|
__SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_Cnt, 0)
|
__SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_BuyCnt, 0)
|
if isSync:
|
Sync_MergePKCnt(curPlayer)
|
|
# Èü¼¾ÖØÖÃ
|
elif key == ShareDefine.Def_Notify_WorldKey_MergePKSeasonID:
|
pass
|
|
return
|
|
## OnLogin´¦Àí
|
# @param curPlayer
|
# @return None
|
def MergePKOnLogin(curPlayer):
|
if GameWorld.IsMergeServer():
|
return
|
gameWorld = GameWorld.GetGameWorld()
|
for idKey in [ShareDefine.Def_Notify_WorldKey_MergePKDayID, ShareDefine.Def_Notify_WorldKey_MergePKSeasonID]:
|
__CheckResetPlayerMergePKData(curPlayer, idKey, gameWorld.GetGameWorldDictByKey(idKey), False)
|
|
Sync_MergePKCnt(curPlayer)
|
Sync_MergePKAwardRecord(curPlayer)
|
return
|
|
#// C1 09 ¿ç·þPKÆ¥Åä #tagCMMergePKMatch
|
#
|
#struct tagCMMergePKMatch
|
#{
|
# tagHead Head;
|
# BYTE Type; // 0-È¡ÏûÆ¥Åä; 1-½øÐÐÆ¥Åä
|
#};
|
## ¿ç·þPKÆ¥Åä
|
# @param None
|
# @return None
|
def OnRequestMergePK(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
accID = curPlayer.GetAccID()
|
playerID = curPlayer.GetPlayerID()
|
requestType = clientData.Type
|
|
mergePKState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MergePKState)
|
|
if mergePKState != ChConfig.Def_Action_Open:
|
GameWorld.Log("OnRequestMergePK ¿ç·þ»î¶¯Î´¿ªÆô£¬²»¿É½øÐÐÆ¥Å䣡", playerID)
|
PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_21675")
|
return
|
|
if GameWorld.IsMergeServer():
|
return
|
|
GameWorld.Log("ÊÕµ½¿ç·þPKÆ¥Åä: type=%s,accID=%s" % (requestType, accID), playerID)
|
|
# ½øÐÐÆ¥Åä
|
if requestType == 1:
|
|
pkCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_Cnt)
|
buyCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_BuyCnt)
|
unUsedBuyCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_UnUsedBuyCnt)
|
freeCnt, maxBuyCnt, moneyType, buyCostFormat = ReadChConfig.GetEvalChConfig("MergePK_BuyCost")
|
|
# ³¬³öÃâ·Ñ´ÎÊý ÇÒ ÎÞ¿ÉÓõÄÒѹºÂò´ÎÊý ÔòÐ蹺Âò´ÎÊý
|
if pkCnt >= freeCnt and unUsedBuyCnt <= 0:
|
|
if buyCnt >= maxBuyCnt:
|
GameWorld.Log(" ÒÑ´ïµ½×î´ó¿É¹ºÂòPK´ÎÊý£¬²»¿ÉÔÙÂò£¡:buyCnt=%s,maxBuyCnt=%s,pkCnt=%s,unUsedBuyCnt=%s"
|
% (buyCnt, maxBuyCnt, pkCnt, unUsedBuyCnt), playerID)
|
return
|
|
buyCost = eval(buyCostFormat)
|
infoDict = {"pkCnt":pkCnt, "freeCnt":freeCnt, "buyCnt":buyCnt, "buyCost":buyCost}
|
if not PlayerControl.PayMoney(curPlayer, moneyType, buyCost, ChConfig.Def_Cost_BuyMergePKCnt, infoDict):
|
return
|
|
# Ôö¼Ó¹ºÂò´ÎÊý ¼° δʹÓõĹºÂò´ÎÊý
|
__SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_BuyCnt, buyCnt + 1)
|
__SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_UnUsedBuyCnt, unUsedBuyCnt + 1)
|
Sync_MergePKCnt(curPlayer)
|
|
GameWorld.Log(" ¹ºÂòPK´ÎÊýÏûºÄ: pkCnt=%s,freeCnt=%s,buyCnt=%s,moneyType=%s,buyCost=%s"
|
% (pkCnt, freeCnt, buyCnt, moneyType, buyCost), playerID)
|
|
dataMsg = {"accID":accID, # ¿ç·þ×Ó·þID
|
"playerID":playerID, # Íæ¼ÒID
|
"playerName":curPlayer.GetPlayerName(), # Íæ¼ÒÃû
|
"fightPower":curPlayer.GetFightPower(), # Õ½¶·Á¦
|
}
|
GameWorld.SendMergerChildToCenterStringData(ChConfig.Def_RequestMergePKMatch, dataMsg)
|
ChPlayer.SendRegisterState(curPlayer, ShareDefine.Def_MergeRegisterState_Request)
|
GameWorld.Log(" ·¢ËÍÇëÇóÆ¥Åäµ½¿ç·þ·þÎñÆ÷ dataMsg=%s" % str(dataMsg), playerID)
|
|
# È¡ÏûÆ¥Åä
|
else:
|
sendMsg = "Client Cancel!"
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, 'MergePKCancel', sendMsg, len(sendMsg))
|
GameWorld.Log(" ·¢ËÍÈ¡ÏûÆ¥Åäµ½GameServer sendMsg=%s" % str(sendMsg), playerID)
|
|
return
|
|
#// C1 10 ¿ç·þPK»Ö¸´Á¬Ê¤´ÎÊý #tagCMRecoverMergePKWin
|
#
|
#struct tagCMRecoverMergePKWin
|
#{
|
# tagHead Head;
|
#};
|
def OnRequestRecoverMergePKWin(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if GameWorld.IsMergeServer():
|
return
|
|
if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_RecoverMergePKWin, tick):
|
GameWorld.DebugLog("TYPE_Player_Tick_RecoverMergePKWin ÇëÇóCDÖУ¡")
|
return
|
|
dataMsg = {"accID":curPlayer.GetAccID(),
|
"playerID":curPlayer.GetPlayerID(),
|
"type":1, # 1-ÇëÇó¿Û·Ñ£»2-¿Û·Ñ³É¹¦ºóÈ·Èϻָ´
|
}
|
GameWorld.SendMergerChildToCenterStringData(ChConfig.Def_RecoverMergePKWin, dataMsg)
|
return
|
|
## ѯÎÊ¿ç·þ·þÎñÆ÷¾ßÌå·ÑÓúó½øÐп۷Ñ
|
def DoRecoverMergePKWinCost(curPlayer, moneyType, costMoney, cWin, maxCWin):
|
|
infoDict = {"cWin":cWin, "maxCWin":maxCWin}
|
if not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_RecoverMergePKWin, infoDict):
|
return
|
|
dataMsg = {"accID":curPlayer.GetAccID(), # ¿ç·þ×Ó·þID
|
"playerID":curPlayer.GetPlayerID(),
|
"type":2, # 1-ÇëÇó¿Û·Ñ£»2-¿Û·Ñ³É¹¦ºóÈ·Èϻָ´
|
}
|
GameWorld.SendMergerChildToCenterStringData(ChConfig.Def_RecoverMergePKWin, dataMsg, curPlayer.GetPlayerID())
|
return
|
|
|
def __GetMergePKPDictValue(curPlayer, key, defaultVlaue=0):
|
return curPlayer.NomalDictGetProperty(key, defaultVlaue, ChConfig.Def_PDictType_MergePK)
|
|
def __SetMergePKPDictValue(curPlayer, key, value):
|
value = min(value, ChConfig.Def_UpperLimit_DWord)
|
return PlayerControl.NomalDictSetProperty(curPlayer, key, value, ChConfig.Def_PDictType_MergePK)
|
|
## Ôö¼Ó¿ç·þPK´ÎÊý
|
def AddMergePKCnt(curPlayer, isSync=True, addCnt=1):
|
# GameWorld.Log("Ôö¼Ó¿ç·þPKÆ¥Åä´ÎÊý addCnt=%s" % addCnt, curPlayer.GetPlayerID())
|
# pkCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_Cnt)
|
# __SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_Cnt, pkCnt + addCnt)
|
# freeCnt = ReadChConfig.GetEvalChConfig("MergePK_BuyCost")[0]
|
#
|
# # Èç¹ûÒѾPK´ÎÊý³¬¹ýÃâ·Ñ´ÎÊý£¬Ôò±¾´ÎÏûºÄÊÓΪÐè¿Û³ýδʹÓõĹºÂò´ÎÊý
|
# if pkCnt >= freeCnt:
|
# unUsedBuyCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_UnUsedBuyCnt)
|
# __SetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_UnUsedBuyCnt, max(0, unUsedBuyCnt - addCnt))
|
# GameWorld.Log(" ÒÑ´ïµ½Ãâ·ÑPK´ÎÊý£¬±¾´ÎÐè¿Û³ýÒѹºÂòµÄPK´ÎÊý pkCnt=%s,unUsedBuyCnt=%s"
|
# % (pkCnt, unUsedBuyCnt), curPlayer.GetPlayerID())
|
#
|
# if isSync:
|
# Sync_MergePKCnt(curPlayer)
|
return
|
|
def OnQueryMergePKAward(curPlayer, awardType, awardIndex, tick):
|
''' ÇëÇóÁìÈ¡¿ç·þPKÏà¹Ø½±Àø '''
|
playerID = curPlayer.GetPlayerID()
|
GameWorld.Log("ÁìÈ¡¿ç·þPK½±Àø awardType=%s, awardIndex=%s" % (awardType, awardIndex), playerID)
|
|
if awardType not in ShareDefine.Def_MergePKAwardTypeList:
|
GameWorld.ErrLog(" ·Ç·¨¿ç·þPK½±ÀøÀàÐÍ!awardType=%s" % awardType, playerID)
|
return
|
|
packSpaceNum = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
|
if packSpaceNum <= 0:
|
GameWorld.DebugLog(" ±³°üÒÑÎ޿ռ䣡")
|
return
|
|
if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_MergePKAward, tick):
|
GameWorld.DebugLog(" Áì½±ÇëÇóCDÖУ¡")
|
return
|
|
# Ê×´ÎʤÀû´ÎÊý½±ÀøÐèÒª¶îÍâÅжϵØÍ¼´æ´¢µÄÁ콱״̬
|
if awardType == ShareDefine.Def_MergePKAward_FirstWinCnt:
|
firstWinCntReward = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_FirstWinCntReward)
|
if firstWinCntReward&pow(2,awardIndex):
|
GameWorld.DebugLog(" ÒÑÁìÈ¡¹ý¸Ã½±Àø£¡firstWinCntReward=%s" % firstWinCntReward)
|
return
|
|
msgListStr = str([awardType, awardIndex, packSpaceNum])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'MergePKAward',
|
msgListStr, len(msgListStr))
|
# ¸ø½±ÀøÔÚ GY_Query_MergePKAward Öд¦Àí
|
return
|
|
## ͬ²½¿ç·þPK´ÎÊýÏà¹Ø
|
def Sync_MergePKAwardRecord(curPlayer):
|
awardRecordPack = ChPyNetSendPack.tagMCMergePKAwardRecord()
|
awardRecordPack.Clear()
|
awardRecordPack.FirstWinAwardRecord = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_FirstWinCntReward)
|
NetPackCommon.SendFakePack(curPlayer, awardRecordPack)
|
return
|
|
## ͬ²½¿ç·þPK´ÎÊýÏà¹Ø
|
def Sync_MergePKCnt(curPlayer):
|
# mergePKCntPack = ChPyNetSendPack.tagMCMergePKCnt()
|
# mergePKCntPack.Clear()
|
# mergePKCntPack.DayPKCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_Cnt)
|
# mergePKCntPack.DayBuyCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_BuyCnt)
|
# mergePKCntPack.UnUsedBuyCnt = __GetMergePKPDictValue(curPlayer, ChConfig.Def_PDict_MergePK_UnUsedBuyCnt)
|
# NetPackCommon.SendFakePack(curPlayer, mergePKCntPack)
|
return
|
|