#!/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)