| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Event.EventSrc.Operate_EquipPlus  | 
| #  | 
| # @todo:²¿Î»ÐǼ¶¹«¹²Ä£Ê½Ç¿»¯  | 
| # @author hxp  | 
| # @date 2015-12-15  | 
| # @version 1.2  | 
| #  | 
| # ÏêϸÃèÊö: ²¿Î»ÐǼ¶¹«¹²Ä£Ê½Ç¿»¯  | 
| #  | 
| # @change: "2016-06-30 21:30" hxp Ç¿»¯´ïÈË¿ª·þ»î¶¯  | 
| # @change: "2016-10-08 18:00" hxp ×Ô¶¯¹ºÂòÎïÆ·¼Û¸ñͳһȡÉ̳ÇÎïÆ·¼Û¸ñ  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2016-10-08 18:00"""  | 
| #---------------------------------------------------------------------  | 
| import ItemCommon  | 
| import ShareDefine  | 
| import PlayerControl  | 
| import IPY_GameWorld  | 
| import OpenServerCampaign  | 
| import DataRecordPack  | 
| import PlayerActivity  | 
| import PlayerSuccess  | 
| import IpyGameDataPY  | 
| import GameWorld  | 
| import ChConfig  | 
| import ChEquip  | 
| import EventShell  | 
| #-------------------------------------------------------------------------------------------  | 
|   | 
| #===============================================================================  | 
| # //A3 01 ×°±¸Ç¿»¯ #tagEquipPlus  | 
| # struct    tagEquipPlus  | 
| # {  | 
| #    tagHead        Head;  | 
| #    BYTE        PackType;        //±³°üÀàÐÍ:rptItem, rptEquip, rptPetEquip1~5  | 
| #    WORD        ItemIndex;        //ÎïÆ·ÔÚ±³°üÖÐË÷Òý  | 
| # };  | 
| #===============================================================================  | 
| ## ×°±¸Ç¿»¯  | 
| #  @param playerIndex: Íæ¼Ò  | 
| #  @param clientData: ·â°ü  | 
| #  @param tick: µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| def OnEquipMayaPlus(playerIndex, clientData, tick):      | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     packType = clientData.PackType  | 
|     index = clientData.ItemIndex  | 
|       | 
|     # ÅжϠ1.×°±¸  2.×î¸ßÇ¿»¯µÈ¼¶£¬ 3.ÍÇ®Êý  | 
|     if packType not in ChConfig.Pack_EquipPart_CanPlusStar:  | 
|         GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)  | 
|         return  | 
|       | 
|     indexList = ChConfig.Pack_EquipPart_CanPlusStar[packType]  | 
|     if index not in indexList:  | 
|         GameWorld.Log("    index not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)  | 
|         return  | 
|       | 
|     # Ôݲ»ÅжϿªÆôµÈ¼¶Óɿͻ§¶Ë´¦Àí     | 
|     # µ±Ç°×°±¸µÈ¼¶ÊÇ·ñµ½´ï×î¸ßµÈ¼¶  | 
|     curPack = curPlayer.GetItemManager().GetPack(packType)  | 
|     curEquip = curPack.GetAt(index)  | 
|     if not curEquip or curEquip.IsEmpty():  | 
|         GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")  | 
|         return  | 
|       | 
|     maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)  | 
|     curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)  | 
|     if curPartStarLV >= maxStarLV:  | 
|         GameWorld.Log("OnEquipMayaPlus:curPartStarLV(%s) >= maxStarLV(%s)" % (curPartStarLV, maxStarLV), playerID)  | 
|         return  | 
|   | 
|     # Ç¿»¯´¦Àí  | 
|     result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)  | 
|       | 
|     updPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)  | 
|     #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartStarLV, updPartStarLV), playerID)  | 
|     if result == ChConfig.Def_ComposeState_None:  | 
|         return  | 
|       | 
|     #===========================================================================  | 
|     # curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipMayaPlus, result)  | 
|       | 
|     # Ã¿Èջ  | 
|     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)  | 
|     #===========================================================================  | 
|       | 
|   | 
|     # ÐǼ¶±ä¸üʱ´¦Àí  | 
|     if curPartStarLV != updPartStarLV:  | 
|         DoLogic_OnEquipPartStarLVChange(curPlayer, packType)  | 
|         # Ôö¼ÓÇ¿»¯³É¾Í  | 
|         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)  | 
|         EventShell.EventRespons_EquipPlus(curPlayer)  | 
|     return  | 
|   | 
|        | 
|   | 
| ## ¿ªÊ¼×°±¸Ç¿»¯  | 
| #  @param index Îª×°±¸Î»  | 
| #  @return   | 
| def DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index):  | 
|     result = ChConfig.Def_ComposeState_None  | 
|   | 
|     findType = ChEquip.GetEquipPlusType(curEquip)  | 
|     if findType == -1:  | 
|         return result  | 
|       | 
|     curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)  | 
|     ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartStarLV)  | 
|     if not ipyData:  | 
|         return  | 
|     costSilver = ipyData.GetCostCount()  | 
|   | 
|     if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver):  | 
|         # ½ð±Ò²»×㣬·µ»Ø  | 
|         return result  | 
|   | 
|     totalExp = ipyData.GetTotalExp()  | 
|     curExp = ChEquip.GetEquipPartProficiency(curPlayer, packType, index) + ipyData.GetAddExp()  | 
|   | 
|     if curExp >= totalExp:  | 
|         #Éý¼¶  | 
|         curPartStarLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)  | 
|         curExp = curExp - totalExp  | 
|           | 
|     ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)  | 
|     ChEquip.NotifyEquipPartStarLV(curPlayer, packType, index)  | 
|     # Ö§¸¶½ð±Ò  | 
|     PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)  | 
|   | 
|     DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartStarLV)  | 
|     return ChConfig.Def_ComposeState_Sucess  | 
|   | 
|   | 
|   | 
| ## ÂêÑżÓÇ¿µÈ¼¶¸Ä±ä  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param packType: ±³°üÀàÐÍ  | 
| #  @param curEquip: µ±Ç°×°±¸  | 
| #  @param succeedRate: ³É¹¦ÂÊ  | 
| #  @param failStarLV: Ê§°ÜʱµÄÐǼ¶Êý  | 
| #  @return   | 
| def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):  | 
|     curPlusLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)  | 
|     updPlusLV = curPlusLV + 1  | 
|     ChEquip.SetEquipPartStarLV(curPlayer, packType, index, curEquip, updPlusLV)  | 
|       | 
|     broadCastLVList = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelBroadCast", 1)  | 
|     #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))  | 
|     if updPlusLV in broadCastLVList:  | 
|         msgParamList = [curPlayer.GetPlayerName()] + ItemCommon.GetNotifySuperItemInfo(curPlayer, curEquip, index) + [updPlusLV]  | 
|         PlayerControl.WorldNotify(0, "StrengthenCongratulation", msgParamList)  | 
|           | 
|     # ³É¾Í  | 
|     #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusLV, 1, [updPlusLV])  | 
|       | 
|       | 
|                       | 
|     #ÈÎÎñ´¥·¢  | 
|     #EventShell.EventRespons_OnEquipPartStarUp(curPlayer, setLV)  | 
|     # ¿ª·þ»î¶¯Êý¾Ý  | 
|     OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PlusLV, ChEquip.GetTotalPlusLV(curPlayer))  | 
|     return updPlusLV  | 
|   | 
|   | 
| def DoLogic_OnEquipPartStarLVChange(curPlayer, packType):  | 
|     #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ  | 
|     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Plus)  | 
|     ChEquip.RefreshPlayerEquipAttribute(curPlayer)  | 
|       | 
|     #Ë¢ÐÂËùÓÐÊôÐÔ  | 
|     playControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playControl.RefreshPlayerAttrState()  | 
|     return  | 
|   | 
|   | 
| ## È«Éí12²¿Î»Ç¿»¯µÈ¼¶×îµÍµÄÒ»¼þÇ¿»¯µÈ¼¶  | 
| #def GetMinPlusLV(curPlayer):  | 
| #    packType = IPY_GameWorld.rptEquip  | 
| #    minPlusLV = GetMaxEquipPartStarLV()  | 
| #    equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])  | 
| #    for i in equipPartIndexList:  | 
| #        partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)  | 
| #        if partStarLV < minPlusLV:  | 
| #            minPlusLV = partStarLV  | 
| #    return minPlusLV  |