#!/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: itemID = curEquip.GetItemTypeID() userData = curEquip.GetUserData() guid = ItemCommon.CacheNotifyEquipDetailInfo(curPlayer, curEquip) msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, updPlusLV] PlayerControl.WorldNotify(0, "StrengthenCongratulation", msgParamList) # ³É¾Í #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusLV, 1, [updPlusLV]) # ¿ª·þ»î¶¯Êý¾Ý 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) EventShell.EventRespons_EquipPlusEvolve(curPlayer, nextEvolveLV) return