#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
##@package PlayerReincarnation
|
# Íæ¼ÒתÉúÂß¼
|
#
|
# @author hch
|
# @date 2010-4-28
|
# @version 2.9
|
#
|
# @change: "2010-10-08 15:00" panwei °Î³ý·þÎñÆ÷°æ±¾¿ØÖÆ´úÂë
|
# @change: "2013-04-11 18:00" wdb ³á°òʹÓõȼ¶ÓëÇ¿»¯µÈ¼¶Ïà¹Ø
|
# @change: "2013-04-15 11:00" wdb ½«ComparePlayerLV_UseItem¸üÃûΪCheckItemUseLV£¬·ÅÈëItemControler
|
# @change: "2015-01-28 19:30" hxp תÉúÐÞ¸Ä
|
# @change: "2015-01-29 01:00" hxp תÉúͬ²½ËùÓÐÅÅÐаñ(¸üÐÂÖ°ÒµÐÅÏ¢)
|
# @change: "2015-01-29 11:00" hxp Ôö¼Óתְ¹ã²¥£»¶Ò»»ÁéÁ¦ÌáÐÑ
|
# @change: "2015-01-30 03:30" hxp ÀϺÅÂú¼¶ÉèÖõ±Ç°¾ÑéΪ0; Âú¼¶µô¼¶Ö÷¶¯´¥·¢Ò»´ÎÉý½×¼ì²â
|
# @change: "2015-02-04 18:00" hxp ½µ¼¶Ë¢ÐÂÊÀ½çµÈ¼¶¼Ó³É
|
# @change: "2015-02-26 12:00" hxp Èýת¿ªÆô´óʦ
|
# @change: "2015-04-15 21:00" hxp һת¿ªÆô×Ë̬
|
# @change: "2015-05-11 14:00" hxp ¶Ò»»ÁéÁ¦Ê§°ÜÔö¼ÓÁ÷Ïò
|
# @change: "2015-07-29 15:20" xdh ´óʦ¸Ä³ÉµÈ¼¶¿ªÆô
|
# @change: "2015-08-04 15:00" ljd ¶þת½û¿ªÃ·À¼
|
# @change: "2015-08-24 14:40" zqx Ôö¼ÓתÉú³É¾Í
|
# @change: "2015-12-10 12:00" hxp תÉúÂß¼ÐÞ¸Ä(ÓÀºãÁìÖ÷)
|
# @change: "2016-05-26 16:20" xdh Ôö¼ÓתÉú×î´ó¿ª·ÅµÈ¼¶ÅäÖÃ
|
# @change: "2017-01-13 14:00" xdh Ôö¼ÓתÉú½±ÀøÁìÈ¡
|
# @change: "2017-03-26 17:30" hxp תÉúÔùË͵ȼ¶¿ª³öÅäÖÃ
|
#---------------------------------------------------------------------
|
#"""Version = 2017-03-26 17:30"""
|
#---------------------------------------------------------------------
|
import ReadChConfig
|
import ChConfig
|
import PlayerControl
|
import GameWorld
|
import IPY_GameWorld
|
import PlayerBillboard
|
import DataRecordPack
|
import ChPyNetSendPack
|
import NetPackCommon
|
import ShareDefine
|
import ItemCommon
|
import PlayerWorldAverageLv
|
import PlayerSuccess
|
import ItemControler
|
import ChPlayer
|
#---------------------------------------------------------------------
|
|
(
|
Def_ExReiki_DayFreeCnt, # ÿÈÕÃâ·Ñ´ÎÊý
|
Def_ExReiki_CostMoney, # ÏûºÄ½ð±ÒÊý
|
Def_ExReiki_SuccRate, # ¶Ò»»³É¹¦ÂÊ
|
Def_ExReiki_Format, # »ñµÃÁéÁ¦¹«Ê½
|
) = range(4)
|
|
|
## תÉúOnDay
|
# @param curPlayer:
|
# @return: None
|
def ReincarOnDay(curPlayer):
|
return
|
|
## תÉúOnLogin
|
# @param curPlayer:
|
# @return: None
|
def ReincarOnLogin(curPlayer):
|
SyncReincarnationAwardRecord(curPlayer)
|
return
|
|
## »ñÈ¡Íæ¼ÒתÉúÏà¹Ø×ÖµäÖµ
|
# @param curPlayer:
|
# @return: None
|
def __GetPlayerReincDictValue(curPlayer, key, defaultValue=0):
|
return curPlayer.NomalDictGetProperty(key, defaultValue, ChConfig.Def_PDictType_Reincarnation)
|
|
|
## ÉèÖÃÍæ¼ÒתÉúÏà¹Ø×ÖµäÖµ
|
# @param curPlayer:
|
# @return: None
|
def __SetPlayerReincDictValue(curPlayer, key, value):
|
PlayerControl.NomalDictSetProperty(curPlayer, key, value, ChConfig.Def_PDictType_Reincarnation)
|
return
|
|
## ¼ÆËãתְ¸½¼ÓÊôÐÔ
|
# @param curPlayer Íæ¼Ò
|
# @param allAttrList ÊôÐÔÁбí
|
# @return None
|
def CalcReincarnationAttr(curPlayer, allAttrList):
|
curReinCnt = curPlayer.GetReincarnationLv() # µ±Ç°×ªÉú´ÎÊý
|
|
if curReinCnt <= 0:
|
return
|
|
Reincarnation_AttrDict = ReadChConfig.GetEvalChConfig("Reincarnation_Attr")
|
|
attrNameList = [ChConfig.AttrName_BothAtk, # Ë«¹¥
|
ChConfig.AttrName_Def, # ·ÀÓù
|
ChConfig.AttrName_Hit, # ÃüÖÐ
|
ChConfig.AttrName_DefRate, # ÉÁ±Ü
|
ChConfig.AttrName_MaxHP, # ×î´óѪÁ¿
|
]
|
|
for reinCnt, attrList in Reincarnation_AttrDict.items():
|
|
if reinCnt > curReinCnt:
|
continue
|
|
# ¼ÆËã×ÔÉíÊôÐÔ
|
for index, value in enumerate(attrList):
|
attrName = attrNameList[index]
|
PlayerControl.CalcAttrDict_Type(attrName, value, allAttrList)
|
|
return
|
|
|
## תÉúÂß¼Èë¿Ú
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoPlayerReincarnation(curPlayer):
|
curReinCnt = curPlayer.GetReincarnationLv() # µ±Ç°×ªÉú´ÎÊý
|
Reincarnation_Condition = ReadChConfig.GetEvalChConfig("Reincarnation_Condition")
|
nextReinCnt = curReinCnt + 1
|
playerID = curPlayer.GetPlayerID()
|
|
GameWorld.Log("Íæ¼ÒתÉú£ºÒÑת´ÎÊý(%s)" % (curReinCnt), playerID)
|
ReincarnationMaxLV = ReadChConfig.GetEvalChConfig("ReincarnationMaxLV")
|
if nextReinCnt > ReincarnationMaxLV: #´óÓÚ¿ª·ÅתÉúµÈ¼¶
|
PlayerControl.NotifyCode(curPlayer, 'GeRen_liubo_32161')
|
return
|
|
if nextReinCnt not in Reincarnation_Condition:
|
GameWorld.ErrLog("²»´æÔÚ¸ÃתÉú´ÎÊý¶ÔÓ¦Ìõ¼þÐÅÏ¢£¡´ÎÊý=%s" % (nextReinCnt), playerID)
|
return
|
|
needLV, nMoney, nZhenQi, nDHPassCnt, nChasmPassCnt, nItemList, prizeLVCnt = Reincarnation_Condition[nextReinCnt]
|
curLV = curPlayer.GetLV()
|
if not __DoProcessReinCondition(curPlayer, needLV, nMoney, nZhenQi, nDHPassCnt, nChasmPassCnt, nItemList, nextReinCnt):
|
return
|
|
# Èç¹ûתÉúµÄʱºò¸ÕºÃÊÇתÉúËùÐèµÈ¼¶£¬ÔòĬÈÏËÍÒ»¼¶¾Ñé
|
giveExp = 0
|
if curLV == needLV:
|
for i in range(prizeLVCnt):
|
prizeLV = curLV + i
|
prizeLVUPExp = PlayerControl.GetTotalExpByPlayerLv(prizeLV)
|
giveExp += prizeLVUPExp
|
GameWorld.Log(" תÉúÔùË͵ȼ¶, prizeLV=%s,prizeLVUPExp=%s,giveExp=%s" % (prizeLV, prizeLVUPExp, giveExp), playerID)
|
GameWorld.Log(" תÉúÀÛ¼ÆÔùËÍ×ܾÑé, prizeLVCnt=%s,giveExp=%s" % (prizeLVCnt, giveExp), playerID)
|
|
curPlayer.SetReincarnationLv(nextReinCnt)
|
#Éý¼¶Ç°¼Ç¼תÉúʱ¼ä
|
tick = GameWorld.GetGameWorld().GetTick()
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_LastReinTick, tick)
|
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.PlayerLvUp()
|
playerControl.AddExp(giveExp)
|
|
DataRecordPack.DR_PlayerLVExChange(curPlayer, curReinCnt, curLV, "Reincarnation")
|
|
#תְ³É¹¦µÄ»°¸üÐÂËùÓÐÅÅÐаñ£¬Ö°ÒµÏÔʾÐÅÏ¢ÐèÒª±ä¸ü
|
PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer)
|
|
#תְ³É¹¦¹ã²¥
|
PlayerControl.WorldNotify(0, "GeRen_hgg_543685", [curPlayer.GetPlayerName(), nextReinCnt])
|
|
|
return
|
|
def __DoProcessReinCondition(curPlayer, needLV, nMoney, nZhenQi, nDHPassCnt, nChasmPassCnt, nItemList, nextReinCnt):
|
playerID = curPlayer.GetPlayerID()
|
curLV = curPlayer.GetLV()
|
GameWorld.Log("´¦ÀíתÉúÌõ¼þ curLV=%s,needLV=%s,nMoney=%s,nZhenQi=%s,nDHPassCnt=%s,nItemList=%s"
|
% (curLV, needLV, nMoney, nZhenQi, nDHPassCnt, str(nItemList)), playerID)
|
|
if curLV < needLV:
|
PlayerControl.NotifyCode(curPlayer, 'GeRen_mx_327925')
|
GameWorld.Log(" µÈ¼¶²»×㣬ÎÞ·¨×ªÉú£¡needLV=%s,curLV=%s" % (needLV, curLV), playerID)
|
return False
|
|
if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, nMoney):
|
GameWorld.Log(" ½ð±Ò²»×㣬ÎÞ·¨×ªÉú£¡nMoney=%s" % (nMoney), playerID)
|
return False
|
|
if PlayerControl.GetZhenQi(curPlayer) < nZhenQi:
|
PlayerControl.NotifyCode(curPlayer, 'GeRen_pan_367906')
|
GameWorld.Log(" ÕæÆø²»×㣬ÎÞ·¨×ªÉú£¡nZhenQi=%s" % (nZhenQi), playerID)
|
return False
|
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
allIndexList = []
|
for itemID, needCnt in nItemList:
|
enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, needCnt)
|
if not enough:
|
PlayerControl.NotifyCode(curPlayer, 'Horse_lhs_31379', [itemID])
|
GameWorld.Log(" ËùÐèתÉúÎïÆ·²»×㣬ÎÞ·¨×ªÉú£¡itemID=%s,needCnt=%s" % (itemID, needCnt), playerID)
|
return False
|
allIndexList.append([indexList, needCnt])
|
|
## Ìõ¼þÅжÏͨ¹ý£¬¿ªÊ¼¿Û³ý
|
# ¿Û½ð±Ò
|
infoDict = {ChConfig.Def_Cost_Reason_SonKey:nextReinCnt}
|
if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, nMoney, ChConfig.Def_Cost_Reincarnation, infoDict):
|
GameWorld.ErrLog("Reincarnation pay Err: silver-Money:%s)" % nMoney, playerID)
|
return False
|
|
# ¿ÛÕæÆø
|
PlayerControl.PlayerLostZhenQi(curPlayer, nZhenQi, "Reincarnation", {"ReinCount":nextReinCnt})
|
|
# ¿ÛÎïÆ·
|
for indexList, delCnt in allIndexList:
|
ItemCommon.ReduceItem(curPlayer, itemPack, indexList, delCnt, False, "Reincarnation")
|
|
return True
|
|
|
## ÁìȡתÉú½±Àø
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param awardType: Áì½±ÀàÐÍ
|
# @param tick: ʱ¼ä´Á
|
# @return
|
def GetReincarnationAward(curPlayer, dataEx):
|
curReinCnt = curPlayer.GetReincarnationLv() # µ±Ç°×ªÉú´ÎÊý
|
if dataEx > curReinCnt:
|
GameWorld.DebugLog('GetReincarnationAward Íæ¼ÒתÉúµÈ¼¶%s, ²»¿ÉÁìÈ¡%sתµÄ½±Àø' % (curReinCnt, dataEx))
|
return
|
|
reincarnationAwardDict = ReadChConfig.GetEvalChConfig("Reincarnation_Award")
|
if dataEx not in reincarnationAwardDict:
|
GameWorld.DebugLog('Reincarnation_Award.txt ²»´æÔÚ¸ÃתÉúµÈ¼¶½±Àø dataEx=%s' % dataEx)
|
return
|
reinLVList = reincarnationAwardDict.keys()
|
reinLVList.sort()
|
awardIndex = reinLVList.index(dataEx)
|
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Reinc_AwardRecord, 0)
|
if awardRecord & pow(2, awardIndex):
|
GameWorld.DebugLog("תÉú½±ÀøÒѾÁìÈ¡¹ý! ²»ÄÜÖØ¸´ÁìÈ¡£¡", curPlayer.GetPlayerID())
|
return
|
|
prizeItemInfo = reincarnationAwardDict[dataEx]
|
# ¼ì²é±³°ü
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
|
if len(prizeItemInfo) > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
|
updRecord = awardRecord | pow(2, awardIndex)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Reinc_AwardRecord, updRecord)
|
|
SyncReincarnationAwardRecord(curPlayer)
|
|
# ¸ø½±Àø
|
for awardItem in prizeItemInfo:
|
# ×Öµä½á¹¹Ðè񻂿·ÖÖ°Òµ
|
if isinstance(awardItem, dict):
|
if curPlayer.GetJob() not in awardItem:
|
GameWorld.ErrLog(" Reincarnation_Award.txt Ö°Òµ(%s)δÅäÖý±Àø!dataEx=%s" % (curPlayer.GetJob(), dataEx))
|
continue
|
awardItem = awardItem[curPlayer.GetJob()]
|
|
if len(awardItem) != 4:
|
GameWorld.ErrLog(" Reincarnation_Award.txt ½±ÀøÅäÖøñʽ´íÎó!len(%s) != 4, dataEx=%s" % (awardItem, dataEx))
|
continue
|
itemID, itemCount, isBind, isAppoint = awardItem
|
if isAppoint:
|
ItemControler.GivePlayerAppointItem(curPlayer, itemID, isBind, True, True)
|
else:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)
|
|
|
GameWorld.Log('ÁìȡתÉú½±Àø³É¹¦£¬dataEx=%s' % dataEx)
|
return
|
|
## ͬ²½×ªÉú½±ÀøÁì½±¼Ç¼
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @return
|
def SyncReincarnationAwardRecord(curPlayer):
|
record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Reinc_AwardRecord, 0)
|
#ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ShareDefine.Def_RewardType_Reincarnation, record)
|
return
|
|
|
#// A5 46 ¶Ò»»ÁéÁ¦ #tagCMExchangeReiki
|
#
|
#struct tagCMExchangeReiki
|
#{
|
# tagHead Head;
|
# BYTE ExType; //¶Ò»»ÀàÐÍ0-½µ¼¶¶Ò»»; 1-×êʯ¹ºÂò
|
# BYTE ExData; //¶Ò»»À©Õ¹Êý¾Ý(×êʯ¹ºÂò¿É·¢Ë͹ºÂòµÄÏûºÄË÷Òý)
|
#};
|
## ¶Ò»»ÁéÁ¦
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @param tick: ʱ¼ä´Á
|
# @return: None
|
def OnExchangeReiki(index, clientData, tick):
|
return
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# ExType = clientData.ExType
|
# ExData = clientData.ExData
|
#
|
# # ½µ¼¶¶Ò»»
|
# if ExType == 0:
|
# __DoExchangeReikiByDownLVEx(curPlayer)
|
# # ×êʯ¹ºÂò
|
# elif ExType == 1:
|
# __DoExchangeReikiByGold(curPlayer, ExData)
|
# return
|
|
### ×êʯ¶Ò»»ÁéÁ¦
|
## @param curPlayer: Íæ¼ÒË÷Òý
|
## @param index: ¶Ò»»Ë÷Òý
|
## @return: None
|
#def __DoExchangeReikiByGold(curPlayer, index):
|
# playerID = curPlayer.GetPlayerID()
|
# ExchangeReikiByGoldList = ReadChConfig.GetEvalChConfig("ExchangeReikiByGold")
|
#
|
# if index < 0 or index >= len(ExchangeReikiByGoldList):
|
# GameWorld.ErrLog("×êʯ¶Ò»»×ªÉúÁéÁ¦ÅäÖôíÎó: ûÓиÃË÷ÒýÐÅÏ¢£¡ index=%s" % (index), playerID)
|
# return
|
#
|
# needGold, addReiki = ExchangeReikiByGoldList[index]
|
# if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold):
|
# # Ôª±¦²»×ãʱ·µ»Ø
|
# GameWorld.DebugLog("×êʯ¶Ò»»ÁéÁ¦£¬×êʯ²»×ã needGold=%s" % needGold, playerID)
|
# return
|
#
|
# # Ö§¸¶Ôª±¦
|
# if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold,
|
# costType = ShareDefine.Def_GoldCostType_ExchangeReiki):
|
# return
|
#
|
# curReiki = __GetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_Reiki)
|
# updReiki = curReiki + addReiki
|
# __SetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_Reiki, updReiki)
|
# PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_960792", [addReiki])
|
# GameWorld.Log("×êʯ¶Ò»»×ªÉúÁéÁ¦: index=%s,curReiki=%s,addReiki=%s,updReiki=%s"
|
# % (index, curReiki, addReiki, updReiki), playerID)
|
# Sync_PlayerReikiInfo(curPlayer)
|
# return
|
|
|
### ½µ¼¶¶Ò»»ÁéÁ¦
|
## @param curPlayer: Íæ¼ÒË÷Òý
|
## @return: None
|
#def __DoExchangeReikiByDownLVEx(curPlayer):
|
# curLVEx = curPlayer.GetLVEx()
|
# curReincarLV = curPlayer.GetReincarnationLv()
|
#
|
# Reincarnation_Condition = ReadChConfig.GetEvalChConfig("Reincarnation_Condition")
|
# nextReincarLV = curReincarLV + 1
|
# playerID = curPlayer.GetPlayerID()
|
#
|
# # Èç¹ûÓÐÏÂһת£¬Ôò×îµÍ²»Äܽµµ½×ªÉúËùÐèµÈ¼¶
|
# if nextReincarLV in Reincarnation_Condition:
|
# needLV = Reincarnation_Condition[nextReincarLV][0]
|
# if curLVEx <= needLV:
|
# GameWorld.ErrLog("×îµÍ²»Äܽµµ½Ï´ÎתÉúËùÐèµÈ¼¶: curReincarLV=%s,curLVEx=%s,nextReincarLV=%s,needLV=%s"
|
# % (curReincarLV, curLVEx, nextReincarLV, needLV), playerID)
|
# return
|
#
|
# ExchangeReikiByLVExDict = ReadChConfig.GetEvalChConfig("ExchangeReikiByLVEx")
|
#
|
# if curReincarLV not in ExchangeReikiByLVExDict:
|
# return
|
#
|
# ExchangeReikiByLVEx = ExchangeReikiByLVExDict[curReincarLV]
|
#
|
# dayFreeCnt = ExchangeReikiByLVEx[Def_ExReiki_DayFreeCnt]
|
# costMoney = ExchangeReikiByLVEx[Def_ExReiki_CostMoney]
|
# succRate = ExchangeReikiByLVEx[Def_ExReiki_SuccRate]
|
# getReikiFormat = ExchangeReikiByLVEx[Def_ExReiki_Format]
|
#
|
# # ÅжϴÎÊý
|
# exCnt = __GetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_ChangeReikiCnt)
|
# addCnt = __GetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_ChangeReikiAddCnt)
|
# maxCnt = dayFreeCnt + addCnt
|
# if exCnt >= maxCnt:
|
# GameWorld.Log("½µ¼¶¶Ò»»ÁéÁ¦£º¶Ò»»´ÎÊýÒÑÂú£¡exCnt=%s,dayFreeCnt=%s,addCnt=%s,maxCnt=%s"
|
# % (exCnt, dayFreeCnt, addCnt, maxCnt), playerID)
|
# return
|
#
|
# # ÅжϽð±Ò
|
# if costMoney > 0 and not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costMoney):
|
# return
|
#
|
# maxExp = PlayerControl.GetTotalExpByPlayerLv(curLVEx)
|
# isFull = False
|
# # Âú¼¶µÄ
|
# if maxExp <= 0:
|
# # ¾ÑéÉÏÏÞ¸ÄΪ¿É³¬¹ý20Òں󣬸ò¿·ÖÂß¼ÔÝʱ²»´¦Àí£¬Ö»×öreturn£¬ Ö®ºóÓõ½¸Ã¹¦ÄÜÔÙÓÅ»¯
|
# return
|
# curExp = curPlayer.GetTotalExp()
|
# curExp = min(curExp, ChConfig.Def_UpperLimit_DWord)
|
# maxExp = ChConfig.Def_UpperLimit_DWord
|
# isFull = True
|
# else:
|
# curExp = PlayerControl.GetPlayerTotalExp(curPlayer)
|
#
|
# curExpPer = curExp * 1.0 / maxExp
|
#
|
# updLVEx = curLVEx - 1
|
# if updLVEx <= 0:
|
# return
|
#
|
# updMaxExp = PlayerControl.GetTotalExpByPlayerLv(updLVEx)
|
# if not updMaxExp:
|
# return
|
#
|
# # ¿ÛÇ®£¬Ôö¼Ó¶Ò»»´ÎÊý
|
# if costMoney > 0:
|
# PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costMoney)
|
#
|
# __SetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_ChangeReikiCnt, exCnt + 1)
|
#
|
# addDataDict = {"succRate":succRate}
|
# # ¸ÅÂʶһ»
|
# if GameWorld.CanHappen(succRate):
|
# addReiki = eval(getReikiFormat)
|
# curReiki = __GetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_Reiki)
|
# updReiki = curReiki + addReiki
|
# addDataDict["isSuccess"] = 1
|
# addDataDict.update({"curReiki":curReiki, "addReiki":addReiki, "updReiki":updReiki})
|
# __SetPlayerReincDictValue(curPlayer, ChConfig.Def_PDict_Reinc_Reiki, updReiki)
|
#
|
# PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_960792", [addReiki])
|
# updExp = int(updMaxExp * curExpPer) # ½µ¼¶ºóµÄ¾Ñé
|
# curPlayer.SetLVEx(updLVEx)
|
# PlayerControl.SetPlayerTotalExp(curPlayer, updExp)
|
#
|
# addDataDict.update({"curExp":curExp, "maxExp":maxExp, "updExp":updExp, "updMaxExp":updMaxExp})
|
# GameWorld.DebugLog("½µ¼¶¶Ò»»ÁéÁ¦£ºaddDataDict=%s" % str(addDataDict), playerID)
|
#
|
# if isFull:
|
# PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
|
#
|
# #¸üÐÂÊÀ½çµÈ¼¶
|
# PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
|
# else:
|
# addDataDict["isSuccess"] = 0
|
# PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_161234")
|
#
|
# # תÉúµÈ¼¶±ä¸üÁ÷Ïò
|
# DataRecordPack.DR_PlayerLVExChange(curPlayer, curReincarLV, curLVEx, "ExchangeReiki", addDataDict)
|
# Sync_PlayerReikiInfo(curPlayer)
|
# return
|
|
|
#// A5 47 Íæ¼ÒתÉú #tagCMReincarnation
|
#
|
#struct tagCMReincarnation
|
#{
|
# tagHead Head;
|
#};
|
## ¶Ò»»ÁéÁ¦
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @param tick: ʱ¼ä´Á
|
# @return: None
|
def OnReincarnation(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
DoPlayerReincarnation(curPlayer)
|
return
|
|
##------------------------------------------------------------------------------
|