#!/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 ItemCommon
|
import GameFuncComm
|
import PlayerControl
|
import ChPyNetSendPack
|
import NetPackCommon
|
import IPY_GameWorld
|
import IpyGameDataPY
|
import ShareDefine
|
import GameWorld
|
import ChConfig
|
import PlayerSuccess
|
import ChEquip
|
import PlayerBillboard
|
import PlayerTongTianLing
|
import PassiveBuffEffMng
|
import PlayerGubao
|
import EventShell
|
import DataRecordPack
|
import SkillCommon
|
import PlayerTask
|
import FBCommon
|
|
import time
|
#------------------------------------------------------------------------------
|
|
# ¶É½ÙÌõ¼þ¼Ç¼λ¶¨Òå
|
(
|
RealmLVUpAward_LV, # µÈ¼¶
|
RealmLVUpAward_PassMap, # ¹ý¹Ø¹Ø¿¨
|
RealmLVUpAward_TreeLV, # ÏÉÊ÷µÈ¼¶
|
RealmLVUpAward_CutTreeCnt, # ¿³Ê÷´ÎÊý
|
) = range(4)
|
|
def DoOfficialOpen(curPlayer):
|
#¹¦ÄÜ¿ªÆô
|
# curRealmLV = curPlayer.GetOfficialRank()
|
# if not curRealmLV:
|
# DoRealmLVUpLogic(curPlayer)
|
return True
|
|
|
def OnLogin(curPlayer):
|
SyncRealmFBState(curPlayer)
|
UpdateRealmExp(curPlayer, False)
|
NotifyRealmExpInfo(curPlayer)
|
return
|
|
|
def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV)
|
|
|
#// A5 24 ¿ªÆô¶É½Ù #tagCMOpenRealmFB
|
#
|
#struct tagCMOpenRealmFB
|
#{
|
# tagHead Head;
|
#};
|
def OpenRealmFB(index, clientData, tick):
|
return
|
|
def GetXXZLAward(curPlayer, taskID):
|
## ÁìÈ¡ÐÞÏÉ֮·½±Àø
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward)
|
if awardState&pow(2, taskID):
|
GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¾³½çÐÞÏÉ֮·¸Ã½±Àø, taskID=%s" % taskID, curPlayer.GetPlayerID())
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("RealmXXZL", taskID)
|
if not ipyData:
|
return
|
taskType = ipyData.GetTaskType()
|
needValue = ipyData.GetNeedValue()
|
curValue= 0
|
|
#1. µÃµ½ XXX·¨±¦£¬ ËùÐèֵΪ·¨±¦ID
|
if taskType == 1:
|
magicWeaponID = needValue
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID) >= 1:
|
curValue = needValue
|
|
#2. ͨ¹ØÌìÐÇËþX²ã
|
elif taskType == 2:
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
|
|
#3. »÷ɱÊÀ½çBOSSXÖ»
|
elif taskType == 3:
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntTotal % ShareDefine.Def_Boss_Func_World)
|
|
#4. »îÔ¾ÐÞÁ¶X´Î
|
elif taskType == 4:
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityCountTotal)
|
|
#5. »÷ɱ¸öÈËBOSS£ºxxx£¬ËùÐè֮Ϊ¸öÈËboss±í¶ÔÓ¦Ïß·id
|
elif taskType == 5:
|
mapID = ChConfig.Def_FBMapID_PersonalBoss
|
lineID = needValue
|
if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID]):
|
curValue = needValue
|
|
#6. ͨ¹Ø×ÚÃÅÊÔÁ¶x´Î
|
elif taskType == 6:
|
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntTotal % ChConfig.Def_FBMapID_MunekadoTrial)
|
|
#7. »ñµÃXµãÁé¸ùµã
|
elif taskType == 7:
|
curValue = PlayerControl.GetTotalLingGenPoint(curPlayer)
|
|
if curValue < needValue:
|
GameWorld.DebugLog("¾³½çÐÞÏÉ֮·µ±Ç°ÈÎÎñËùÐèÖµ²»Âú×㣬ÎÞ·¨Áì½±, taskID=%s,taskType=%s,curValue=%s < %s"
|
% (taskID, taskType, curValue, needValue), curPlayer.GetPlayerID())
|
return
|
|
awardItemList = ipyData.GetAwardItemList()
|
if not ItemCommon.GiveAwardItem(curPlayer, awardItemList, "RealmXXZL"):
|
return
|
|
updAwardState = awardState|pow(2, taskID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmXXZLAward, updAwardState)
|
GameWorld.DebugLog("ÁìÈ¡¾³½çÐÞÏÉ֮·½±Àø, awardID=%s,updAwardState=%s" % (taskID, updAwardState), curPlayer.GetPlayerID())
|
SyncRealmFBState(curPlayer)
|
return
|
|
def SyncRealmFBState(curPlayer):
|
#֪ͨ¿Í»§¶Ë¶É½Ù¸±±¾ÊÇ·ñ¿ªÆô
|
#if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):
|
# return
|
sendPack = ChPyNetSendPack.tagMCSyncRealmInfo()
|
sendPack.IsPass = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen)
|
sendPack.XXZLAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward)
|
sendPack.RealmLVUpAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState)
|
sendPack.RealmLVUpCutTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt)
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|
|
## ¼ÆËã¾ôλÊôÐÔ
|
# @param curPlayer Íæ¼Ò
|
# @param allAttrList ÊôÐÔÁбí
|
# @return None
|
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
|
|
|
## ÖØË¢ËùÓÐÊôÐÔ
|
# @param curPlayer
|
# @param isForceRefresh:Ç¿ÖÆË¢ÐÂÅÅÐаñ
|
# @return Ö¸¶¨Êý¾Ý
|
def RefreshOfficialAttr(curPlayer):
|
CalcOfficialRankAttr(curPlayer)
|
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
return
|
|
def AddRealmLVUpCutTreeCnt(curPlayer, addCnt):
|
curRealmLV = curPlayer.GetOfficialRank()
|
realmIpyData = GetRealmIpyData(curRealmLV)
|
if not realmIpyData:
|
return
|
NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt()
|
if not NeedCutTreeCnt:
|
return
|
curTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt)
|
if curTreeCnt >= NeedCutTreeCnt:
|
return
|
updCutTreeCnt = min(curTreeCnt + addCnt, NeedCutTreeCnt)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpCutTreeCnt, updCutTreeCnt)
|
SyncRealmFBState(curPlayer)
|
return
|
|
def GetRealmLVUpTaskAward(curPlayer, awardIndex):
|
## ÁìÈ¡¾³½ç¶É½ÙÈÎÎñÌõ¼þ½±Àø
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState)
|
if awardState&pow(2, awardIndex):
|
GameWorld.DebugLog("¾³½ç¶É½ÙÌõ¼þÁì½±£¬ÒÑÁìÈ¡¹ý! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
|
return
|
|
curRealmLV = curPlayer.GetOfficialRank()
|
realmIpyData = GetRealmIpyData(curRealmLV)
|
if not realmIpyData:
|
return
|
|
awardItemInfo = None
|
if awardIndex == RealmLVUpAward_LV:
|
playerLV = curPlayer.GetLV()
|
NeedLV = realmIpyData.GetNeedLV()
|
if playerLV < NeedLV:
|
GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬µÈ¼¶²»×ã! curRealmLV=%s,playerLV=%s < %s' % (curRealmLV, playerLV, NeedLV))
|
return
|
awardItemInfo = realmIpyData.GetLVAwardItem()
|
|
elif awardIndex == RealmLVUpAward_PassMap:
|
NeedPassMap = realmIpyData.GetNeedPassMap()
|
if not NeedPassMap or len(NeedPassMap) != 2:
|
return
|
mapID, lineID = NeedPassMap
|
if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
|
GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬¸±±¾Î´¹ý¹Ø! curRealmLV=%s,mapID=%s,lineID=%s' % (curRealmLV, mapID, lineID))
|
return
|
awardItemInfo = realmIpyData.GetPassMapAwardItem()
|
|
elif awardIndex == RealmLVUpAward_TreeLV:
|
NeedTreeLV = realmIpyData.GetNeedTreeLV()
|
if not NeedTreeLV:
|
return
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
if treeLV < NeedTreeLV:
|
GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬ÏÉÊ÷µÈ¼¶²»×ã! curRealmLV=%s,treeLV=%s < %s' % (curRealmLV, treeLV, NeedTreeLV))
|
return
|
awardItemInfo = realmIpyData.GetTreeLVAwardItem()
|
|
elif awardIndex == RealmLVUpAward_CutTreeCnt:
|
NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt()
|
if not NeedCutTreeCnt:
|
return
|
cutTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt)
|
if cutTreeCnt < NeedCutTreeCnt:
|
GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬¿³Ê÷´ÎÊý²»×ã! curRealmLV=%s,cutTreeCnt=%s < %s' % (curRealmLV, cutTreeCnt, NeedCutTreeCnt))
|
return
|
awardItemInfo = realmIpyData.GetCutTreeAwardItem()
|
|
else:
|
return
|
|
if not awardItemInfo or len(awardItemInfo) != 2:
|
return
|
itemID, itemCount = awardItemInfo
|
if not ItemCommon.GiveAwardItem(curPlayer, [[itemID, itemCount, 0]]):
|
return
|
|
updAwardState = awardState|pow(2, awardIndex)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpAwardState, updAwardState)
|
GameWorld.DebugLog("¾³½ç¶É½ÙÌõ¼þÁì½±OK! curRealmLV=%s,awardIndex=%s,updAwardState=%s" % (curRealmLV, awardIndex, updAwardState), curPlayer.GetPlayerID())
|
SyncRealmFBState(curPlayer)
|
return
|
|
#// 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 realmIpyData.GetBossID():
|
canLvUp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) == 1
|
if not canLvUp:
|
GameWorld.DebugLog(' ¸±±¾Î´¹ý¹Ø£¬²»ÄÜÉý¼¶¾³½ç')
|
return
|
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState)
|
#µÈ¼¶ÅÐ¶Ï - ±ØÒªÌõ¼þ
|
playerLV = curPlayer.GetLV()
|
if not awardState&pow(2, RealmLVUpAward_LV):
|
GameWorld.DebugLog('µÈ¼¶Ìõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV))
|
return
|
totalExpNeed = PlayerControl.GetTotalExpByPlayerLv(playerLV)
|
totalExp = PlayerControl.GetPlayerTotalExp(curPlayer)
|
if totalExp < totalExpNeed:
|
GameWorld.DebugLog('µÈ¼¶Ìõ¼þ¾ÑéδÂú£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s,playerLV=%s,totalExp=%s < %s' % (curRealmLV, playerLV, totalExp, totalExpNeed))
|
return
|
|
#¸±±¾¹ý¹ØÅжÏ
|
NeedPassMap = realmIpyData.GetNeedPassMap()
|
if NeedPassMap:
|
if not awardState&pow(2, RealmLVUpAward_PassMap):
|
GameWorld.DebugLog('¹ý¹ØÌõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV))
|
return
|
|
#ÏÉÊ÷µÈ¼¶ÅжÏ
|
NeedTreeLV = realmIpyData.GetNeedTreeLV()
|
if NeedTreeLV:
|
if not awardState&pow(2, RealmLVUpAward_TreeLV):
|
GameWorld.DebugLog('ÏÉÊ÷µÈ¼¶Ìõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV))
|
return
|
|
#¿³Ê÷´ÎÊýÅжÏ
|
NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt()
|
if NeedCutTreeCnt:
|
if not awardState&pow(2, RealmLVUpAward_CutTreeCnt):
|
GameWorld.DebugLog('¿³Ê÷´ÎÊýÌõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV))
|
return
|
|
DoRealmLVUpLogic(curPlayer)
|
return
|
|
# ÌáÉý1¼¶¾³½ç¼Óµã
|
def __DoRealmLVUpAddPoint(curPlayer):
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
|
# 먦Æôǰ²»¿É¼Óµã£¬ÒòΪDoAddPointOpen»áÒ»´ÎÐÔ²¹Æë£¬±ÜÃâÒâÍâÇé¿ö¶à¼ÓÁ˵ãÊý
|
return
|
|
curFreePoint = curPlayer.GetFreePoint()
|
addPoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
|
if addPoint != 0:
|
setFreePoint = curFreePoint + addPoint
|
DataRecordPack.DR_Freepoint(curPlayer, "RealmLVUp", addPoint)
|
curPlayer.SetFreePoint(setFreePoint)
|
|
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)
|
# ÌáÉý1¼¶¾³½ç¼Óµã
|
__DoRealmLVUpAddPoint(curPlayer)
|
PlayerGubao.DoGubaoAddFreePoint(curPlayer)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpAwardState, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpCutTreeCnt, 0)
|
|
PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
|
|
if needSys:
|
addBuffID = nextRealmIpyData.GetBuffID()
|
if addBuffID:
|
PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv, IpyGameDataPY.GetFuncCfg('RadioExpRealm')])
|
msgStr = str(addBuffID)
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'RealmUpAddBuff', msgStr, len(msgStr))
|
else:
|
PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv])
|
|
if SkillCommon.GivePlayerSkillByJobSkill(curPlayer, nextRealmIpyData.GetLearnSkillIDInfo()):
|
PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
|
|
addFreePoint = nextRealmIpyData.GetAddFreePoint()
|
if addFreePoint:
|
updFreePoint = curPlayer.GetFreePoint() + addFreePoint
|
curPlayer.SetFreePoint(updFreePoint)
|
GameWorld.DebugLog(" addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint))
|
|
RefreshOfficialAttr(curPlayer)
|
GameFuncComm.DoFuncOpenLogic(curPlayer)
|
SyncRealmFBState(curPlayer)
|
#¸üÐÂÐÞΪËÙÂÊ
|
UpdateRealmExp(curPlayer, False, True)
|
NotifyRealmExpInfo(curPlayer)
|
#¾³½çÌáÉý³É¾Í
|
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)
|
EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv)
|
PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV)
|
#Á÷Ïò
|
DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)
|
return True
|
|
|
def DologicDujieFBPass(curPlayer, realmLV, star):
|
#¶É½Ùͨ¹ýºó´¦Àí
|
realmIpyData = GetRealmIpyData(realmLV)
|
if not realmIpyData:
|
return
|
#DoRealmLVUpLogic(curPlayer)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1)
|
SyncRealmFBState(curPlayer)
|
|
return
|
|
|
#// A5 21 ¾³½çÐÞΪ³ØÌáÈ¡ #tagCMTakeOutRealmExp
|
#
|
#struct tagCMTakeOutRealmExp
|
#{
|
# tagHead Head;
|
#};
|
def OnTakeOutRealmExp(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetID()
|
curTotalRealmExp = UpdateRealmExp(curPlayer, False)
|
if curTotalRealmExp <= 0:
|
GameWorld.DebugLog('¾³½çÐÞΪ³ØÌáÈ¡ ûÓоÑé¿ÉÌáÈ¡', playerID)
|
return
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.AddExp(curTotalRealmExp)
|
PlayerControl.NotifyCode(curPlayer, 'TakeOutRealmExp', [curTotalRealmExp])
|
#
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, int(time.time()))
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, 0)
|
|
NotifyRealmExpInfo(curPlayer)
|
return
|
|
|
def UpdateRealmExp(curPlayer, isNotify=True, isRealmLVUP=False):
|
##¸üо³½çÐÞΪ³Ø
|
curRealmLV = curPlayer.GetOfficialRank()
|
ipyData = GetRealmIpyData(curRealmLV)
|
if not ipyData:
|
return 0
|
if not ipyData.GetExpRate():
|
return 0
|
curTime = int(time.time())
|
beginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime)
|
if not beginTime:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime)
|
return 0
|
if isRealmLVUP:
|
ipyData = GetRealmIpyData(curRealmLV-1)
|
|
curRealmExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp)
|
curRealmExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint)
|
curTotalExp = curRealmExpPoint * ChConfig.Def_PerPointValue + curRealmExp
|
if curTotalExp >= ipyData.GetExpLimit():
|
return curTotalExp
|
|
passSeconds = curTime - beginTime
|
if passSeconds <= 0:
|
return curTotalExp
|
perRealmExpTime = IpyGameDataPY.GetFuncCfg('RealmExpTime')
|
curExpRate = ipyData.GetExpRate()
|
#buffÔö¼ÓµÄ¶îÍâ¾Ñé
|
buffRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
|
buffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate)
|
|
buffTime = min(buffRemainTime, passSeconds)
|
|
addExp = buffTime /perRealmExpTime*(curExpRate*(ShareDefine.Def_MaxRateValue + buffAddRate)/ShareDefine.Def_MaxRateValue) + (passSeconds-buffTime)/perRealmExpTime*curExpRate
|
#addExp = passSeconds / perRealmExpTime * curExpRate
|
if addExp <= 0:
|
return curTotalExp
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, buffRemainTime - buffTime)
|
|
updTotalExp = min(curTotalExp + addExp, ipyData.GetExpLimit())
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, updTotalExp % ChConfig.Def_PerPointValue)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, updTotalExp / ChConfig.Def_PerPointValue)
|
#֪ͨ
|
if isNotify:
|
NotifyRealmExpInfo(curPlayer)
|
return updTotalExp
|
|
def AddRealmExpBuffTime(curPlayer, addTime, addRate):
|
##Ôö¼Ó»áÁ鵤BUFFʱ¼ä
|
UpdateRealmExp(curPlayer, False)
|
|
remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, remainTime + addTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffAddRate, addRate)
|
NotifyRealmExpInfo(curPlayer)
|
return
|
|
def NotifyRealmExpInfo(curPlayer):
|
##֪ͨÐÞΪ³ØÐÅÏ¢
|
sendPack = ChPyNetSendPack.tagMCRealmExpInfo()
|
sendPack.BeginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime)
|
sendPack.BuffTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime)
|
sendPack.BuffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate)
|
sendPack.CurExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp)
|
sendPack.CurExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint)
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|