#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package UseItem.Item_AddLV
|
#
|
# @todo:Ö±½ÓÉý¼¶µÀ¾ß
|
# @author hxp
|
# @date 2014-12-11
|
# @version 1.0
|
#
|
#
|
# ÏêϸÃèÊö: Ö±½ÓÉý¼¶µÀ¾ß
|
#
|
#---------------------------------------------------------------------
|
#"""Version = 2017-03-20 14:20"""
|
#---------------------------------------------------------------------
|
|
#µ¼Èë
|
import ChConfig
|
import GameWorld
|
import ItemCommon
|
import PlayerControl
|
import IpyGameDataPY
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
##ʹÓÃÎïÆ·,´¥·¢ÎïÆ·¸½¼Ó¼¼ÄÜ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curRoleItem ÎïÆ·ÊµÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÊÇ·ñʹÓÃÎïÆ·³É¹¦
|
# @remarks XX¼¶Ç°ÉýÒ»¼¶£¬XX¼¶ºó¼ÓXX¼¶1¼¶¾Ñ飨AÖµËùÌáÉýµÄµÈ¼¶£¬BֵΪµÈ¼¶ÏÞÖÆ£¬µ±B=0Ϊ²»ÏÞÖÆµÈ¼¶£©
|
def BatchUseItem(curPlayer, curRoleItem, tick, useCnt, exData):
|
itemTypeID = curRoleItem.GetItemTypeID()
|
curEff = curRoleItem.GetEffectByIndex(0)
|
curEffID = curEff.GetEffectID()
|
|
if curEffID != ChConfig.Def_Effect_ItemAddLV:
|
GameWorld.ErrLog('²ß»®Ìî±í´íÎó£¬ÎïÆ· = %s,¸øµÈ¼¶Ð§¹û´íÎó = %s' % (itemTypeID, curEffID))
|
return False
|
|
giveLV = 1 # ÌáÉýµÈ¼¶ ĬÈÏ1¼¶
|
isKeepExp = curEff.GetEffectValue(0) # ÊÇ·ñ±£Áôµ±Ç°µÈ¼¶ÏÖÓоÑé
|
lvLimit = curEff.GetEffectValue(1) # СÓڴ˵ȼ¶ÔòÖ±½ÓÌáÉý¹Ì¶¨µÈ¼¶£¬·ñÔò¸øÓëÒ»¶¨¾Ñé Èô´ËֵΪ0ÔòÎÞÂÛ¶àÉÙ¼¶£¬¶¼Ö±½ÓÉý¼¶
|
|
if giveLV <= 0:
|
GameWorld.ErrLog('²ß»®Ìî±í´íÎó£¬ÎïÆ· = %s,µÈ¼¶ÅäÖôíÎó = %s, effLV=%s' % (itemTypeID, curEffID, giveLV))
|
return False
|
|
#¼Ç¼ÓÃ
|
beforeTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer) # µ±Ç°ÓµÓеľÑé
|
beforeLV = curPlayer.GetLV()
|
|
realCnt = 0
|
addTotalExp = 0
|
for _ in xrange(useCnt):
|
curLV = curPlayer.GetLV()
|
isOnlyLVUp = lvLimit==0 or curLV < lvLimit #ÊÇ·ñÖ±½ÓÌáÉý¹Ì¶¨µÈ¼¶
|
|
maxLV = PlayerControl.GetPlayerMaxLV(curPlayer)
|
if isOnlyLVUp and curLV >= maxLV:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_607994")
|
GameWorld.Log('Éý¼¶¹ûʵÎÞ·¨Ê¹Óã¬ÒÑ´ïµ½µ±Ç°×î´óµÈ¼¶ curLV=%s,maxLV=%s'
|
% (curLV, maxLV), curPlayer.GetPlayerID())
|
break
|
|
addExp = DoAddLVEx(curPlayer, giveLV, isKeepExp, isOnlyLVUp, lvLimit)
|
if not addExp:
|
break
|
|
realCnt += 1
|
addTotalExp += addExp
|
|
if not realCnt:
|
return False
|
|
#ÎïÆ·¼õÉÙ
|
saveDataDict = {"BeforeLV":beforeLV, "AfterLV":curPlayer.GetLV(), "BeforeTotalExp":beforeTotalExp,
|
"IsKeepExp":isKeepExp, "AfterTotalExp":PlayerControl.GetPlayerTotalExp(curPlayer),
|
"AddExp":addTotalExp}
|
|
GameWorld.DebugLog("ʹÓÃÉý¼¶µ¤½á¹û£ºsaveDataDict=%s" % str(saveDataDict))
|
ItemCommon.DelItem(curPlayer, curRoleItem, realCnt, True, ChConfig.ItemDel_AddLV, saveDataDict)
|
return True, realCnt
|
|
def UseItem(curPlayer, curRoleItem, tick):
|
return BatchUseItem(curPlayer, curRoleItem, tick, 1, 0)
|
|
##δÂú¼¶Ê±Ôö¼ÓתÉúµÈ¼¶
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param giveLV Ôö¼ÓµÈ¼¶
|
# @param isKeepExp ÊÇ·ñ±£Áôµ±Ç°¾Ñé
|
# @param isOnlyLVUp ÊÇ·ñÖ±½ÓÌáÉý¹Ì¶¨µÈ¼¶
|
# @param formulaIndex ¸øÓë¾ÑéµÄ¹«Ê½Ë÷Òý
|
# @return ʹÓýá¹û×ÖµäÐÅÏ¢
|
def DoAddLVEx(curPlayer, giveLV, isKeepExp, isOnlyLVUp, lvLimit):
|
|
curLV = curPlayer.GetLV()
|
lvUpNeedExp = PlayerControl.GetTotalExpByPlayerLv(curLV)
|
beforeTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer) # µ±Ç°ÓµÓеľÑé
|
if isOnlyLVUp:
|
# Âú¼¶
|
if lvUpNeedExp <= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_607994")
|
return 0
|
|
giveExp = 0
|
for lv in range(curLV, curLV + giveLV):
|
curLVNeedExp = PlayerControl.GetTotalExpByPlayerLv(lv)
|
|
if curLVNeedExp > 0:
|
giveExp += curLVNeedExp
|
|
# Èç¹û²»±£Áô¾Ñ飬Ôò¿Û³ýµ±Ç°ÓµÓеľÑé
|
if not isKeepExp:
|
giveExp -= beforeTotalExp
|
else:
|
giveExp = PlayerControl.GetTotalExpByPlayerLv(lvLimit)
|
|
|
GameWorld.DebugLog("Item_AddLV isOnlyLVUp=%s, lvLimit=%s, curLV=%s,giveLV=%s,isKeepExp=%s,beforeTotalExp=%s,giveExp=%s"
|
% (isOnlyLVUp, lvLimit, curLV, giveLV, isKeepExp, beforeTotalExp, giveExp))
|
if giveExp <= 0:
|
return 0
|
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
return playerControl.AddExp(giveExp)
|
|