| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #---------------------------------------------------------------------  | 
| #  | 
| #---------------------------------------------------------------------  | 
| ##@package Item_AddExp  | 
| # @todo: ÎïÆ·¸ø¾Ñé  | 
| #  | 
| # @author: panwei  | 
| # @date 2010-07-28  | 
| # @version 1.0  | 
| #  | 
| #------------------------------------------------------------------------------   | 
| """Version = 2015-12-11 18:30"""  | 
| #---------------------------------------------------------------------  | 
| #µ¼Èë  | 
| import GameWorld  | 
| import ChConfig  | 
| import PlayerControl  | 
| import ItemCommon  | 
|   | 
| import math  | 
| #---------------------------------------------------------------------  | 
| #È«¾Ö±äÁ¿  | 
| #---------------------------------------------------------------------  | 
|   | 
| #---------------------------------------------------------------------  | 
| ##ÅúÁ¿Ê¹ÓÃÎïÆ·  | 
| # @param curPlayer: Íæ¼ÒʵÀý  | 
| # @param curRoleItem: ÎïÆ·ÊµÀý  | 
| # @param tick: Ê±¼ä´Á  | 
| # @param useCnt: Ê¹ÓøöÊý  | 
| # @return:   | 
| def BatchUseItem(curPlayer, curRoleItem, tick, useCnt, exData):  | 
|     itemTypeID = curRoleItem.GetItemTypeID()  | 
|     curLV = curPlayer.GetLV()  | 
|       | 
|     GameWorld.DebugLog("Item_AddExp.BatchUseItem itemID=%s,useCnt=%s" % (itemTypeID, useCnt))  | 
|       | 
|     giveExp = 0  | 
|     curEff = curRoleItem.GetEffectByIndex(0)  | 
|     curEffID = curEff.GetEffectID()  | 
|     # °´¹Ì¶¨¾Ñ鏸¾Ñé  | 
|     if curEffID == ChConfig.Def_Effect_ItemAddExp:  | 
|         giveExp = curEff.GetEffectValue(0)  | 
|           | 
|     elif curEffID == ChConfig.Def_Effect_ItemAddExpByLV:  | 
|         expPer = curEff.GetEffectValue(0)#ËùÌáÉý¾ÑéµÄЧÂÊÖµ  | 
|         confLV = curEff.GetEffectValue(1) #µÈ¼¶ÏÞÖÆµ±=0Ϊ²»ÏÞÖÆµÈ¼¶  | 
|         reLV = min(confLV, curLV) if confLV else curLV  | 
|           | 
|         lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)  | 
|         if not lvIpyData:  | 
|             return  | 
|         giveExp = int(lvIpyData.GetReExp() * expPer)  | 
|       | 
|           | 
|     if giveExp <= 0:  | 
|         GameWorld.ErrLog('²ß»®Ìî±í´íÎó£¬ÎïÆ· = %s,¸ø¾ÑéÒì³£giveExp=%s!'%(itemTypeID, giveExp))  | 
|         return False  | 
|   | 
|     beforeLV = curPlayer.GetLV()  | 
|     beforeTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer)  | 
|       | 
|     playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|   | 
|     addExpTotal = useCnt * giveExp  | 
|     actualAddExp = playerControl.AddExp(addExpTotal)  | 
|     GameWorld.DebugLog("    beforeTotalExp=%s,addExpTotal=%s(%s*%s),actualAddExp=%s"   | 
|                        % (beforeTotalExp, addExpTotal, giveExp, useCnt, actualAddExp))  | 
|       | 
|     #¸øÍæ¼Ò¾Ñé  | 
|     if actualAddExp <= 0:  | 
|         return False  | 
|       | 
|     actualUseCnt = int(math.ceil(actualAddExp / float(giveExp)))  | 
|   | 
|     afterLV = curPlayer.GetLV()  | 
|     afterTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer)  | 
|       | 
|     #ÎïÆ·¼õÉÙ  | 
|     saveDataDict = {"BeforeLV":beforeLV, "BeforeTotalExp":beforeTotalExp,  | 
|                     "AfterLV":afterLV, "AfterTotalExp":afterTotalExp,   | 
|                     "AddExp":actualAddExp}  | 
|       | 
|     GameWorld.DebugLog("Item_AddExp saveDataDict=%s" % saveDataDict, curPlayer.GetPlayerID())  | 
|     ItemCommon.DelItem(curPlayer, curRoleItem, actualUseCnt, True, ChConfig.ItemDel_AddExp, saveDataDict)  | 
|     PlayerControl.NotifyCode(curPlayer, 'UseElixirHint', [itemTypeID, actualAddExp])  | 
|       | 
|     return True, actualUseCnt  | 
|   | 
| ##ʹÓÃÎïÆ·,´¥·¢ÎïÆ·¸½¼Ó¼¼ÄÜ  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param curRoleItem ÎïÆ·ÊµÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÊÇ·ñʹÓÃÎïÆ·³É¹¦  | 
| # @remarks giveExp = reExp * curEff.GetEffectValue(0) + curEff.GetEffectValue(1)  | 
| def UseItem(curPlayer, curRoleItem, tick):  | 
|     return BatchUseItem(curPlayer, curRoleItem, tick, 1, 0)  |