| #!/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 PlayerActLogin  | 
| 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  | 
|     ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index})  | 
|     if not ipyData:  | 
|         return  | 
|     equipPlace = ipyData.GetEquipPlace()  | 
|     indexList = ChConfig.Pack_EquipPart_CanPlusStar[packType]  | 
|     if equipPlace 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  | 
|       | 
|     maxPlusLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)  | 
|     curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)  | 
|     if curPartPlusLV >= maxPlusLV:  | 
|         GameWorld.Log("OnEquipMayaPlus:curPartPlusLV(%s) >= maxPlusLV(%s)" % (curPartPlusLV, maxPlusLV), playerID)  | 
|         return  | 
|   | 
|     # Ç¿»¯´¦Àí  | 
|     result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)  | 
|       | 
|     updPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)  | 
|     #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartPlusLV, updPartStarLV), playerID)  | 
|     if result == ChConfig.Def_ComposeState_None:  | 
|         return  | 
|       | 
|     #===========================================================================  | 
|     # curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipMayaPlus, result)  | 
|       | 
|     # Ã¿Èջ  | 
|     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)  | 
|     PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)  | 
|     #===========================================================================  | 
|       | 
|   | 
|     # Ç¿»¯±ä¸üʱ´¦Àí  | 
|     if curPartPlusLV != updPartPlusLV:  | 
|         DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))  | 
|         # Ôö¼ÓÇ¿»¯³É¾Í  | 
|         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)  | 
|         EventShell.EventRespons_EquipPlus(curPlayer, ipyData.GetClassLV(), updPartPlusLV)  | 
|     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  | 
|       | 
|     curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)  | 
|     ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)  | 
|     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:  | 
|         #Éý¼¶  | 
|         curPartPlusLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)  | 
|         curExp = curExp - totalExp  | 
|           | 
|     ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)  | 
|     ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)  | 
|     # Ö§¸¶½ð±Ò  | 
|     PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)  | 
|   | 
|     DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartPlusLV)  | 
|     return ChConfig.Def_ComposeState_Sucess  | 
|   | 
|   | 
|   | 
| ## ÂêÑżÓÇ¿µÈ¼¶¸Ä±ä  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param packType: ±³°üÀàÐÍ  | 
| #  @param curEquip: µ±Ç°×°±¸  | 
| #  @param succeedRate: ³É¹¦ÂÊ  | 
| #  @param failStarLV: Ê§°ÜʱµÄÇ¿»¯Êý  | 
| #  @return   | 
| def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):  | 
|     curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)  | 
|     updPlusLV = curPlusLV + 1  | 
|     ChEquip.SetEquipPartPlusLV(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, classLV):  | 
|     #ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ  | 
|     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Plus)  | 
|     ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV)  | 
|       | 
|     #Ë¢ÐÂËùÓÐÊôÐÔ  | 
|     playControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playControl.RefreshPlayerAttrState()  | 
|     return  | 
|   | 
| #// A3 16 ×°±¸Ç¿»¯½ø»¯ #tagCMEquipPlusEvolve  | 
| #struct    tagCMEquipPlusEvolve  | 
| #{  | 
| #    tagHead        Head;  | 
| #    WORD        ItemIndex;        //×°±¸ÔÚ±³°üÖÐË÷Òý  | 
| #};  | 
| def OnEquipPlusEvolve(playerIndex, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)  | 
|       | 
|     equipPackindex = clientData.ItemIndex  | 
|       | 
|     packType = IPY_GameWorld.rptEquip  | 
|     curPack = curPlayer.GetItemManager().GetPack(packType)  | 
|     curEquip = curPack.GetAt(equipPackindex)  | 
|     if not ItemCommon.CheckItemCanUse(curEquip):  | 
|         return  | 
|     curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex)  | 
|     maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curEquip)  | 
|     if curEvolveLV >= maxEvolveLV:  | 
|         GameWorld.DebugLog('×°±¸Ç¿»¯½ø»¯, ÒÑ´ï×î´ó½ø»¯µÈ¼¶equipPackindex=%s, maxEvolveLV=%s'%(equipPackindex, maxEvolveLV))  | 
|         return  | 
|     nextEvolveLV = curEvolveLV + 1  | 
|     equipPlace = curEquip.GetEquipPlace()  | 
|     ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, nextEvolveLV)  | 
|     if not ipyData:  | 
|         return  | 
|     costItemDict = ipyData.GetCostItem()  | 
|     delItemDict = {}  | 
|     itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  | 
|     for itemID, itemCnt in costItemDict.items():  | 
|         hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, itemCnt)  | 
|         if not hasEnough:  | 
|             GameWorld.DebugLog('×°±¸Ç¿»¯½ø»¯ ²ÄÁϲ»×ãitemID= %s,itemCnt=%s'%(itemID, itemCnt))  | 
|             return  | 
|         delItemDict[tuple(indexList)] = itemCnt  | 
|     for itemIndexList, delCnt in delItemDict.items():  | 
|         ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipPlusEvolve)  | 
|       | 
|     ChEquip.SetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex, nextEvolveLV)  | 
|     DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))  | 
|     ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, equipPackindex)  | 
|     return  |