#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerPrestigeSys
|
#
|
# @todo:¾ôλϵͳ/ÉÙÄê¾³½ç
|
# @author hxp
|
# @date 2017-7-21
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¾ôλϵͳ/ÉÙÄê¾³½ç
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2017-10-10 14:30"""
|
#-------------------------------------------------------------------------------
|
|
import ItemControler
|
import FBCommon
|
import GameFuncComm
|
import PlayerControl
|
import ChPyNetSendPack
|
import NetPackCommon
|
import IpyGameDataPY
|
import ShareDefine
|
import GameWorld
|
import ChConfig
|
import PlayerSuccess
|
import PlayerBillboard
|
import PlayerTongTianLing
|
import PlayerGubao
|
|
#------------------------------------------------------------------------------
|
|
# ¶É½ÙÈÎÎñÀàÐÍ
|
RealmTaskTypeList = (
|
RealmTaskType_LV, # µÈ¼¶ 1
|
RealmTaskType_PassMap, # ¹ý¹Ø¹Ø¿¨ 2
|
RealmTaskType_UseXiantao, # ÏûºÄÕ½´¸ 3
|
) = range(1, 1 + 3)
|
|
# ÐèÒª¼Ç¼ÈÎÎñÖµµÄÈÎÎñÀàÐÍÁбí
|
NeedTaskValueTypeList = [RealmTaskType_UseXiantao]
|
|
def DoOfficialOpen(curPlayer):
|
#¹¦ÄÜ¿ªÆô
|
# curRealmLV = curPlayer.GetOfficialRank()
|
# if not curRealmLV:
|
# DoRealmLVUpLogic(curPlayer)
|
return True
|
|
|
def OnLogin(curPlayer):
|
SyncRealmInfo(curPlayer, isAll=True)
|
if not curPlayer.GetOfficialRank():
|
curPlayer.SetOfficialRank(1)
|
return
|
|
def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV)
|
|
def SyncRealmInfo(curPlayer, taskIDList=None, isAll=False):
|
sendPack = ChPyNetSendPack.tagMCSyncRealmInfo()
|
sendPack.TaskAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
sendPack.TaskValueList = []
|
if isAll and taskIDList == None:
|
taskIDList = []
|
curRealmLV = curPlayer.GetOfficialRank()
|
taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", curRealmLV)
|
if taskIpyDataList:
|
for taskIpyData in taskIpyDataList:
|
if taskIpyData.GetTaskType() in NeedTaskValueTypeList:
|
taskIDList.append(taskIpyData.GetTaskID())
|
if taskIDList:
|
for taskID in taskIDList:
|
task = ChPyNetSendPack.tagMCSyncRealmTask()
|
task.TaskID = taskID
|
task.TaskValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
sendPack.TaskValueList.append(task)
|
sendPack.TaskValueCount = len(sendPack.TaskValueList)
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|
def CalcOfficialRankAttr(curPlayer):
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
|
return
|
|
curRealmLV = curPlayer.GetOfficialRank()
|
realmIpyData = GetRealmIpyData(curRealmLV)
|
if not realmIpyData:
|
return
|
|
addAttrIDList, addAttrValueList = realmIpyData.GetAddAttrType(), realmIpyData.GetAddAttrNum()
|
|
allAttrList = [{} for i in range(4)]
|
for i, attrID in enumerate(addAttrIDList):
|
PlayerControl.CalcAttrDict_Type(attrID, addAttrValueList[i], allAttrList)
|
|
# ±£´æ¼ÆËãÖµ
|
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Prestige, allAttrList)
|
return
|
|
def RefreshOfficialAttr(curPlayer):
|
CalcOfficialRankAttr(curPlayer)
|
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
return
|
|
def AddRealmTaskValue(curPlayer, taskType, addValue):
|
## Ôö¼Ó¾³½çÈÎÎñÖµ
|
if taskType not in NeedTaskValueTypeList:
|
return
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
|
return
|
realmLV = curPlayer.GetOfficialRank()
|
taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
if not taskIpyDataList:
|
return
|
syncTaskIDList = []
|
for taskIpyData in taskIpyDataList:
|
if taskType != taskIpyData.GetTaskType():
|
continue
|
taskID = taskIpyData.GetTaskID()
|
needValue = GetRealmTaskNeedValue(taskIpyData.GetNeedValueList(), 0)
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
if curValue >= needValue:
|
continue
|
syncTaskIDList.append(taskID)
|
updValue = min(curValue + addValue, needValue)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, updValue)
|
GameWorld.DebugLog("¸üо³½çÈÎÎñÖµ: realmLV=%s,taskType=%s,taskID=%s,updValue=%s,curValue=%s,addValue=%s"
|
% (realmLV, taskType, taskID, updValue, curValue, addValue), curPlayer.GetPlayerID())
|
if syncTaskIDList:
|
SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
|
return
|
|
def GetRealmTaskNeedValue(needValueList, index): return needValueList[index] if len(needValueList) > index else 0
|
|
def GetRealmLVUpTaskAward(curPlayer, taskID):
|
## ÁìÈ¡¾³½ç¶É½ÙÈÎÎñÌõ¼þ½±Àø
|
playerID = curPlayer.GetPlayerID()
|
realmLV = curPlayer.GetOfficialRank()
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
if awardState&pow(2, taskID):
|
GameWorld.DebugLog("¾³½çÈÎÎñÁì½±£¬ÒÑÁìÈ¡¹ý! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID)
|
return
|
|
taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
if not taskIpyDataList:
|
return
|
|
taskIpyData = None
|
for tIpyData in taskIpyDataList:
|
if taskID != tIpyData.GetTaskID():
|
continue
|
taskIpyData = tIpyData
|
break
|
if not taskIpyData:
|
GameWorld.DebugLog("ûÓиþ³½çÈÎÎñ! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID)
|
return
|
taskType = taskIpyData.GetTaskType()
|
needValueList = taskIpyData.GetNeedValueList()
|
needValueA = GetRealmTaskNeedValue(needValueList, 0)
|
awardItemList = taskIpyData.GetAwardItemList()
|
|
# Íæ¼ÒµÈ¼¶
|
if taskType == RealmTaskType_LV:
|
playerLV = curPlayer.GetLV()
|
if playerLV < needValueA:
|
GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬µÈ¼¶²»×ã! realmLV=%s,taskID=%s,taskType=%s,playerLV=%s < %s'
|
% (realmLV, taskID, taskType, playerLV, needValueA), playerID)
|
return
|
|
# ¹ý¹Ø¸±±¾
|
elif taskType == RealmTaskType_PassMap:
|
mapID = needValueA
|
lineID = GetRealmTaskNeedValue(needValueList, 1)
|
if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
|
GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬Î´¹ý¹Ø! realmLV=%s,taskID=%s,taskType=%s,mapID=%s,lineID=%s'
|
% (realmLV, taskID, taskType, mapID, lineID), playerID)
|
return
|
|
# ¸ù¾Ý¼Ç¼ÈÎÎñ½ø¶ÈÖµ
|
elif taskType in NeedTaskValueTypeList:
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID)
|
if curValue < needValueA:
|
GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬Ìõ¼þ²»×ã! realmLV=%s,taskID=%s,taskType=%s,curValue=%s < %s'
|
% (realmLV, taskID, taskType, curValue, needValueA), playerID)
|
return
|
|
else:
|
return
|
|
ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["RealmTask", False, {}])
|
|
updAwardState = awardState|pow(2, taskID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, updAwardState)
|
GameWorld.DebugLog("¾³½ç¶É½ÙÁì½±OK! realmLV=%s,taskID=%s,updAwardState=%s" % (realmLV, taskID, updAwardState), playerID)
|
SyncRealmInfo(curPlayer)
|
return
|
|
def CheckRealmTaskFinishAll(curPlayer):
|
## ¼ì²é¾³½çÈÎÎñÊÇ·ñÒÑÈ«²¿Íê³É
|
realmLV = curPlayer.GetOfficialRank()
|
taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV)
|
if not taskIpyDataList:
|
GameWorld.DebugLog("ûÓо³½çÈÎÎñËãδÍê³É! realmLV=%s" % (realmLV), curPlayer.GetPlayerID())
|
return
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState)
|
for taskIpyData in taskIpyDataList:
|
taskID = taskIpyData.GetTaskID()
|
if not awardState&pow(2, taskID):
|
GameWorld.DebugLog("¾³½çÈÎÎñδÍê³ÉÁì½±! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID())
|
return
|
return True
|
|
#// A5 23 ÌáÉý¾³½çµÈ¼¶ # tagCMRealmLVUp
|
#
|
#struct tagCMRealmLVUp
|
#{
|
# tagHead Head;
|
#};
|
def DoRealmLVUp(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
curRealmLV = curPlayer.GetOfficialRank()
|
realmIpyData = GetRealmIpyData(curRealmLV)
|
if not realmIpyData:
|
GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV)
|
return
|
|
if not CheckRealmTaskFinishAll(curPlayer):
|
return
|
|
DoRealmLVUpLogic(curPlayer)
|
return
|
|
def DoRealmLVUpLogic(curPlayer, needSys=True):
|
curRealmLV = curPlayer.GetOfficialRank()
|
nextRealmLv = curRealmLV + 1
|
GameWorld.DebugLog(' Éý¼¶¾³½çnextRealmLv=%s' % nextRealmLv)
|
nextRealmIpyData = GetRealmIpyData(nextRealmLv)
|
if not nextRealmIpyData:
|
return
|
|
curPlayer.SetOfficialRank(nextRealmLv)
|
PlayerGubao.DoGubaoAddFreePoint(curPlayer)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, 0)
|
syncTaskIDList = []
|
taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", nextRealmLv)
|
if taskIpyDataList:
|
for taskIpyData in taskIpyDataList:
|
taskID = taskIpyData.GetTaskID()
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID):
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, 0)
|
syncTaskIDList.append(taskID)
|
|
PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
|
|
if needSys:
|
PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv])
|
|
RefreshOfficialAttr(curPlayer)
|
GameFuncComm.DoFuncOpenLogic(curPlayer)
|
SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
|
#¾³½çÌáÉý³É¾Í
|
PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)
|
PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
|
#¸üÐÂÅÅÐаñ
|
PlayerBillboard.UpdateRealmBillboard(curPlayer)
|
# ¼Ç¼¿ª·þ»î¶¯
|
#OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv)
|
return True
|