#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package ChItem # @todo: ÎïÆ·Âß¼­´¦Àí # # @author panwei # @date 2010-4-21 # @version 2.9 # # ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ # @change: "2015-07-03 16:00" zqx È¥³ýGMÏÞÖÆ # @change: "2015-07-14 21:00" xdh ÁÄÌìÐÅÏ¢Ô­¸½¼ÓÖµ¸ÄΪExtras # @change: "2015-09-18 19:30" hxp ÕóÓªÎïÆ·Ê°È¡±£»¤ÅÐ¶Ï # @change: "2015-09-21 20:30" hxp ¹¦Ñ«ÎïÆ·Ê¹ÓÃ; ¼ñ¹¦Ñ«ÎïÆ·ÌØÊâÂß¼­ # @change: "2015-11-06 16:30" hxp Ôö¼ÓpyÀ®°È£¬Ö§³Ö¿ç·þ # @change: "2015-12-15 17:00" hxp ÊÇ·ñ×°±¸ÅжϷ½Ê½ÐÞ¸Ä # @change: "2016-01-26 15:00" hxp PY±íÖ§³ÖÖØ¶Á # @change: "2016-05-20 11:00" hxp µ¥È˸±±¾Ò»¼üʰȡ½ö¿Éʰȡ½ðÇ® # @change: "2016-06-04 10:00" xdh ÐÞ¸´Ã¿ÈÕʹÓÃÎïÆ·¸öÊýÎïÆ·idÈ¡²»µ½ÎÊÌâ # @change: "2016-07-20 14:30" hxp Ïû·ÑµãÁ÷ÏòÕûÀí # @change: "2016-10-17 16:00" hxp Ôö¼ÓÓÀ¾Ã¹ó×弤»î¿¨ # @change: "2016-11-22 21:00" hxp µôÂäÎïÆ·ÌØÊâ¹éÊôIDÖ§³Ö # @change: "2017-02-16 18:00" hxp Ö§³ÖÐéÄ⸱±¾Ê°È¡µôÂäÎïÆ· # @change: "2017-03-10 16:00" hxp Ôö¼Ó³á°òÖ±½ÓÉý½×µÀ¾ßÎïÆ·Ê¹Óà # @change: "2017-03-22 21:00" hxp ¶þάÂëºì°ü # @change: "2017-03-24 20:00" hxp Ôö¼ÓÿÈÕʹÓôÎÊýÏÞÖÆÎïÆ·´ÎÊý֪ͨ¿Í»§¶Ë£»Ôö¼ÓÅжÏÎïÆ·Ê¹Óõȼ¶ # @change: "2017-05-09 15:30" hxp Ôö¼Ó¿ª³ö¶à¸öÎïÆ·µÄÏä×Ó£¬ Ö§³Ö¹ýÂËûÓнâËøµÄ·ûÓ¡; Ôö¼Ó¿ªÏä×Ó»ñµÃÎïÆ·Í¨Öª #------------------------------------------------------------------------------ #"""Version = 2017-05-09 15:30""" #------------------------------------------------------------------------------ import IPY_GameWorld import GameWorld import ItemControler import UseItem import ItemCommon import ChConfig import EventShell import PlayerControl import FBLogic import ReadChConfig import OperControlManager import ShareDefine import PlayerAttrFruit import DataRecordPack import ChPyNetSendPack import NetPackCommon import IpyGameDataPY import PlayerSuccess import PyGameData import NPCCommon import FBCommon import GameObj import random import json import time #--------------------------------------------------------------------- #µ¼Èë GameWorld.ImportAll("Script\\Item\\" , "UseItem") GameWorld.ImportAll("Script\\Item\\" , "") #--------------------------------------------------------------------- ## ÖØÐ¶ÁÈ¡ËùÓÐÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def ReloadItem(tick): scriptPath = ChConfig.GetAppPath() + "Script\\Item\\UseItem" GameWorld.ReloadScript(scriptPath, "UseItem") scriptPath = ChConfig.GetAppPath() + "Script\\Item" GameWorld.ReloadScript(scriptPath, "") return #--------------------------------------------------------------------- #=============================================================================== # ÎïÆ·ÀàÐÍ------ # 1£ºÒ©Æ· 2£º²ÄÁÏ 3£ºÔÓÎï 4£º¸ß¼¶ÔÓÎï 5£ºÈÎÎñÎïÆ· # 6£ºÈÎÎñ¾íÖá 7£º³èÎïµ° 8£º±¦Ê¯ 9£ºÆäËü 10:¼¼ÄÜÊé # 11:Í·²¿×°±¸ 12£ºÒ·þ 13£ºÐ¬×Ó 14£º»¤Íó 15£º½£×ÚÎäÆ÷ # 16£º½äÖ¸ 17£ºÏîÁ´ 18£º·¢ÐÍ 19£ºÁ³ÐÍ 20£ºÆäËûÎäÆ÷ # 25£ºÆø×ÚÎäÆ÷ 35£ºÄ§×ÚÎäÆ÷ 36£º×øÆï 37£ºÂíÆ¥ËÇÁÏ 41£ºµöÓã½±ÀøÎïÆ· # 45£ºË«±¶¾­ÑéÎïÆ· 46£º³èÎïµÀ¾ß 50£º¿É¼Ó¹¤²ÄÁÏ 51£º¿ª¹â²ÄÁÏ #=============================================================================== ## ³õʼ»¯ÎïÆ·ÖØÕûÓÅÏȼ¶ # @param curPack ǰ±³°ü # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. #=============================================================================== # def __InitPackResetPrior(curPack): # curPack.ClearAddResetPrior() # for value in ReadChConfig.GetEvalChConfig("ItemResetPrior"): # curPack.Init_AddResetPrior(value) #=============================================================================== #--------------------------------------------------------------------- ## ³õʼ»¯ÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def InitItem(tick): GameWorld.GetPsycoFunc(__Func_InitItem)(tick) return ## ³õʼ»¯ÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. #=============================================================================== def __Func_InitItem(tick): #³õʼ»¯ÎïÆ·µôÂä±£»¤ MapItemProtectTime = IpyGameDataPY.GetFuncCfg("MapItemProtectTime") GameWorld.GetMapItemManager().SetProtectTime(MapItemProtectTime) #=============================================================================================== # # for i in range(0, GameWorld.GetPlayerManager().GetPlayerCount()): # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(i) # itemManager = curPlayer.GetItemManager() # # #³õʼ»¯±³°ü # curPack = itemManager.GetPack(IPY_GameWorld.rptItem) # __InitPackResetPrior(curPack) # #=============================================================================================== return #=============================================================================== #--------------------------------------------------------------------- ## ³õʼ»¯±³°ü # @param curPlayer µ±Ç°Íæ¼Ò # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. #=============================================================================== # def InitPlayerLoginItem(curPlayer, tick): # itemManager = curPlayer.GetItemManager() # #³õʼ»¯±³°ü # curPack = itemManager.GetPack(IPY_GameWorld.rptItem) # __InitPackResetPrior(curPack) #=============================================================================== #--------------------------------------------------------------------- ## Ö´ÐÐʰȡÂß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param mapItemID µØÍ¼ÎïÆ·ID # @param tick µ±Ç°Ê±¼ä # @return None or True # @remarks º¯ÊýÏêϸ˵Ã÷. def __DoPickup(curPlayer, mapItemID, tick, isGuard): playerID = curPlayer.GetPlayerID() mapItemManager = GameWorld.GetMapItemManager() mapItem = mapItemManager.GetItemByID(mapItemID) if mapItem == None or mapItem.IsEmpty(): GameWorld.Log("µ±Ç°ÎïÆ·²»´æÔÚ»òÒѾ­±»»ØÊÕ,Íæ¼Òʰȡʧ°Ü,mapItemID=%s" % mapItemID, playerID) return dropItemNPCID = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_NPCID) #ïÚ³µÖÐ,ÎÞ·¨Ê°È¡ if not isGuard and curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck: PlayerControl.NotifyCode(curPlayer, "Old_hgg_21675") GameWorld.Log("ʹÓý»Í¨¹¤¾ßʱ,ÎÞ·¨Ê°È¡ÎïÆ·!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID) return if GameObj.GetHP(curPlayer) == 0: #Íæ¼ÒÒѾ­ËÀÍö GameWorld.Log("Íæ¼ÒÒÑËÀÍö,ÎÞ·¨Ê°È¡ÎïÆ·!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID) return posX, posY, itemPosX, itemPosY = curPlayer.GetPosX(), curPlayer.GetPosY(), mapItem.GetPosX(), mapItem.GetPosY() pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY) # ÊØ»¤Ê°È¡²»Ñé֤ʰȡ·¶Î§ if not isGuard and pickDist > curPlayer.GetPickupDist(): #¾àÀë¹ýÔ¶, ²»ÄܼñÆð PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889") GameWorld.Log("µ±Ç°¾àÀë¹ýÔ¶, mapItemID=%s,dropItemNPCID=%s,Íæ¼Ò(%d,%d)-ÎïÆ·(%d,%d),pickDist=%s > playerPickupDist=%s" % (mapItemID, dropItemNPCID, posX, posY, itemPosX, itemPosY, pickDist, curPlayer.GetPickupDist()), playerID) return #ʰȡÅÐ¶Ï if not __CheckPickUpItemTime(curPlayer, mapItem, tick, mapItemID, dropItemNPCID): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_913598") return #°ÑµØÍ¼ÎïÆ··Åµ½±³°üÖÐ itemControl = ItemControler.PlayerItemControler(curPlayer) #ÌáʾÐÅÏ¢ ownerType = mapItem.GetOwnerType() ownerID = mapItem.GetOwnerID() singItem = mapItem.GetItem() mapItemType = singItem.GetType() # ÎïÆ·ÀàÐÍ mapItemTypeID = singItem.GetItemTypeID() mapItemCount = singItem.GetCount() singItemGUID = singItem.GetGUID() curEffID = singItem.GetEffectByIndex(0).GetEffectID() playerTeam = curPlayer.GetTeam() #isTeamNotify = (ownerType == ChConfig.Def_NPCHurtTypeTeam and playerTeam != None) isTeamNotify = False # ʰȡ½ðÇ® if mapItemType == ChConfig.Def_ItemType_Money: if not PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, mapItemCount, ChConfig.Def_GiveMoney_Pickup, {}, not isTeamNotify): return # Ìáʾ»ñµÃ½ðÇ®ÊýÁ¿ if isTeamNotify: PlayerControl.TeamNotify(playerTeam.GetTeamID(), "GeRen_lhs_295695", [curPlayer.GetName(), mapItemCount]) # ¸±±¾Ê°È¡½ðÇ® FBLogic.OnFBPickUpItem(curPlayer, singItem, tick) singItem.Clear() #=============================================================================================== # # (¿ç·þµôÂ书ѫÎïÆ·, ²»¸øÊµ¼ÊÎïÆ·£¬×ª»¯Îª¹¦Ñ«Öµ) # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsCrossServer(): # #======================================================================= # # # ²»ÐèÒª¶ÓÎéÌáʾ # # if not isTeamNotify: # # PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [mapItemTypeID, mapItemCount]) # # # ¶ÓÎéÖУ¬ÎïÆ·±»Ê°È¡Ìáʾ # # else: # # PickupItemSysNotify(curPlayer, isTeamNotify, [mapItemTypeID], False) # #======================================================================= # # # ¸±±¾Ê°È¡½ðÇ® # FBLogic.OnFBPickUpItem(curPlayer, singItem, tick) # singItem.Clear() #=============================================================================================== # ʰȡÎïÆ· else: #======================================================================= # isEquip = ItemCommon.CheckItemIsEquip(singItem) # itemMsgList = [mapItemTypeID] # # if isTeamNotify and isEquip: # # ¶ÓÎéʰȡװ±¸Ê±£¬Ïȱ£´æÎïÆ·µÄxmlÊôÐÔ£¬ÓÃÓÚÌáʾµÄxmlÏÔʾ # itemMsgList = ItemCommon.GetItemXMLMsg(singItem) #======================================================================= curItemCount = singItem.GetCount() curItemID = singItem.GetItemTypeID() curItemIsAuctionItem = ItemControler.GetIsAuctionItem(singItem) isPutInTemp = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PickupItemPutInTemp) packIndex = ShareDefine.rptTempItem if isPutInTemp else IPY_GameWorld.rptItem packIndex = ChConfig.GetItemPackType(singItem, packIndex) # ÊÇ·ñ¿É·ÅÈë if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsAuctionItem): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex]) GameWorld.Log("ʰȡÎïÆ·ÎÞ·¨·ÅÈë±³°ü£¡mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s" % (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID()) return # ¸±±¾Ê°È¡ÎïÆ· FBLogic.OnFBPickUpItem(curPlayer, singItem, tick) equipInfo = [singItem.GetEquipPlace(), ItemCommon.GetItemClassLV(singItem), singItem.GetItemColor(), singItem.GetSuiteID(), singItem.GetUserData()] if not itemControl.PutInItem(packIndex, singItem, event=[ChConfig.ItemGive_Pickup, False, {"NPCID":dropItemNPCID}]): #ÎïÆ·²»ÄÜ·ÅÈë #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex]) GameWorld.ErrLog("ʰȡÎïÆ··ÅÈë±³°üʧ°Ü£¡mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s" % (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID()) return if dropItemNPCID: mapID = GameWorld.GetGameWorld().GetMapID() lineID = 0 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull else PlayerControl.GetFBFuncLineID(curPlayer) #ºÏ²¢µØÍ¼µÄ£¬Ê¹ÓÃǰ¶ËlineID£¬¼´ FBID if mapID in [ChConfig.Def_FBMapID_BossHome]: lineID = curPlayer.GetClientLineID() NPCCommon.SendGameServerGoodItemRecord(curPlayer, mapID, lineID, dropItemNPCID, curItemID, equipInfo) # ²»ÐèÒª¶ÓÎéÌáʾ #======================================================================= # if not isTeamNotify: # PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [mapItemTypeID, mapItemCount]) # else: # # ¶ÓÎéÖУ¬ÎïÆ·±»Ê°È¡Ìáʾ # PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip) #======================================================================= #ÏìӦʼþ EventShell.EventRespons_OnGet(curPlayer, mapItemTypeID) #³É¾Í PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PickUpItem, curItemCount, [curItemID]) #ÎïÆ·ÒѾ­±»¼ñÆð, °ÑÎïÆ·Ö¸ÕëÖÃΪ¿Õ mapItem.SetDropItem(None) #֪ͨ¿Í»§¶Ë, ÈËÎï¼ñÆð¸ÃÎïÆ·, ÒÔ¼°»ØÊÕÎïÆ·µÄÂß¼­ curPlayer.PickupItem(mapItem) return True ## ÎïÆ·±»Ê°È¡Ìáʾ # @param curPlayer Íæ¼Ò # @param isTeamNotify ÊÇ·ñ¶ÓÎéÌáʾ # @param itemMsgList ÐÅÏ¢²ÎÊý # @param isEquip ÎïÆ·ÊÇ·ñ×°±¸ # @return None def PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip): curTeam = curPlayer.GetTeam() msgList = [curPlayer.GetName()] # ×°±¸´øxmlÊôÐÔ£¬ÆÕͨÎïÆ·Ôò²»ÐèÒª msgList.extend(itemMsgList) sysInfo = "GeRen_lhs_772321" if isEquip else "GeRen_lhs_85890" PlayerControl.TeamNotify(curTeam.GetTeamID(), sysInfo, msgList) return #--------------------------------------------------------------------- #// A3 12 ÊØ»¤Ê°È¡ÎïÆ· #tagCMGuardPickupItem # #struct tagCMGuardPickupItem #{ # tagHead Head; # WORD ItemCount; # WORD MapItemID[ItemCount]; //size = ItemCount #}; def OnGuardPickupItem(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) mapItemIDList = clientData.MapItemID __DoPickupItem(curPlayer, mapItemIDList, tick, True) return ## Íæ¼ÒʰȡÎïÆ·(·â°ü²ÎÊý) # @param index µ±Ç°Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PlayerPickUpItem(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #Íæ¼Ò¼ñÆðÎïÆ· pickPack = IPY_GameWorld.IPY_PickUpItem() mapItemID = pickPack.GetMapItemID() __DoPickupItem(curPlayer, [mapItemID], tick, False) return def __DoPickupItem(curPlayer, mapItemIDList, tick, isGuard): # @param isGuard: ÊÇ·ñÊØ»¤Ê°È¡ if isGuard and GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: mapID = curPlayer.GetMapID() fbIpyData = FBCommon.GetFBIpyData(mapID) if fbIpyData and not fbIpyData.GetGuardPick(): GameWorld.Log("¸ÃµØÍ¼ÊØ»¤ÎÞ·¨Ê°È¡ÎïÆ·! mapID=%s" % mapID, curPlayer.GetPlayerID()) return # #µ¥È˸±±¾Ò»¼üʰȡ # if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtSingle: # SingleFBTPickUP(curPlayer, mapItemID, tick) # return if not mapItemIDList: GameWorld.ErrLog("ûÓÐÖ¸¶¨ÒªÊ°È¡µÄµØÍ¼ÎïÆ·ID!", curPlayer.GetPlayerID()) return succMapItemIDList = [] # ³É¹¦Ê°È¡µÄµØÍ¼ÎïÆ· for mapItemID in mapItemIDList: if __DoPickup(curPlayer, mapItemID, tick, isGuard): succMapItemIDList.append(mapItemID) if succMapItemIDList: GameWorld.Log("³É¹¦Ê°È¡µØÍ¼ÎïÆ·, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID()) # ÊØ»¤Ê°È¡µÄ£¬¸½¼Óͬ²½ÊØ»¤Ê°È¡½á¹û if isGuard and succMapItemIDList: guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc() guradPickupSucc.MapItemID = succMapItemIDList guradPickupSucc.ItemCount = len(guradPickupSucc.MapItemID) NetPackCommon.SendFakePack(curPlayer, guradPickupSucc) # Íæ¼Òʰȡ½á¹ûĿǰ¿Í»§¶ËÔÝʱÎÞÓ㬲»Í¨Öª # if not __DoPickup(curPlayer, mapItemID, tick): # curPlayer.Notify_PickupItemResult(mapItemID, 0) # else: # curPlayer.Notify_PickupItemResult(mapItemID, 1) return ###µ¥È˸±±¾Ò»¼üʰȡ ## @param curPlayer mapItemID ## @return None #def SingleFBTPickUP(curPlayer, mapItemID, tick): # mapItemManager = GameWorld.GetMapItemManager() # curMapItem = mapItemManager.GetItemByID(mapItemID) # if curMapItem == None or curMapItem.IsEmpty(): # return # # posX = curPlayer.GetPosX() # posY = curPlayer.GetPosY() # itemPosX = curMapItem.GetPosX() # itemPosY = curMapItem.GetPosY() # # pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY) # # if pickDist > curPlayer.GetPickupDist(): # #¾àÀë¹ýÔ¶, ²»ÄܼñÆð # PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889") # return # # mapItemIDList = [curMapItem.GetID()] # #ʰȡµ±Ç°¸ñ×ÓÖÜΧµÄÎïÆ· # mapItemManager = GameWorld.GetMapItemManager() # for index in range(mapItemManager.GetMapItemCount()): # mapItem = mapItemManager.GetMapItemByIndex(index) # if not mapItem or mapItem.IsEmpty(): # continue # # mapItemObjID = mapItem.GetID() # if mapItemObjID in mapItemIDList: # continue # # curItem = mapItem.GetItem() # # Ö»Ò»¼üʰȡ½ðÇ® # if curItem.GetType() != ChConfig.Def_ItemType_Money: # continue # # pickDist = GameWorld.GetDist(posX, posY, mapItem.GetPosX(), mapItem.GetPosY()) # # if pickDist > curPlayer.GetPickupDist(): # continue # # mapItemIDList.append(mapItemObjID) # # for mapItemID in mapItemIDList: # if not __DoPickup(curPlayer, mapItemID, tick): # curPlayer.Notify_PickupItemResult(mapItemID, 0) # else: # curPlayer.Notify_PickupItemResult(mapItemID, 1) # # return #--------------------------------------------------------------------- ## Íæ¼ÒʹÓÃÎïÆ· ->×ÔÉíЧ¹û(·â°ü²ÎÊý) # @param index µ±Ç°Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PlayerUseItemSelf(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerUseItemSelf)(index, tick) return #--------------------------------------------------------------------- ## Íæ¼ÒʹÓÃÎïÆ· ->×ÔÉíЧ¹û(·â°ü²ÎÊý) # @param index µ±Ç°Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __Func_PlayerUseItemSelf(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #·â°ü²ÎÊý packUseItem = IPY_GameWorld.IPY_CUseItem() #ʹÓÃÎïÆ· __DoLogic_PlayerUseItemSelf(curPlayer, packUseItem.GetItemIndex(), tick) return #--------------------------------------------------------------------- ## ʹÓÃÎïÆ·£¬¸ø×Ô¼º # @param curPlayer µ±Ç°Íæ¼Ò # @param useItemIndex ʹÓõÄÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __DoLogic_PlayerUseItemSelf(curPlayer, useItemIndex, tick, useCnt=1, exData=0): #ʹÓÃÎïÆ·ÐÐΪ״̬, ÅжϿͻ§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction( curPlayer, ChConfig.Def_Obj_ActState_ClientAct, IPY_GameWorld.oalUseItem ): return False #------------------·â°ü²ÎÊý »ñµÃ Íæ¼ÒÎïÆ· backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = backPack.GetAt(useItemIndex) #¼ì²éÊÇ·ñ¿ÉÒÔʹÓÃÎïÆ· if not CheckPlayerUseItemSelf(curPlayer, curItem, tick): return False # -1(²»ÏÞÖÆ); >=0(»¹¿ÉʹÓôÎÊý) todayCanUseCnt = __GetTodayCanUseCnt(curPlayer, curItem) if todayCanUseCnt == 0: return False if todayCanUseCnt > 0: useCnt = min(todayCanUseCnt, useCnt) useCnt = min(useCnt, curItem.GetCount()) # ×î´óʹÓÃÊý²»Äܳ¬¹ýÎïÆ·µ±Ç°ÊýÁ¿ #------------------¼Ç¼ÎïÆ·Ïà¹ØÊôÐÔ //±ØÐëÏȼǼ, ÒòΪDoUseItemLogicÖ´Ðкó, ÎïÆ·ÒѾ­Ïûʧ curItemTypeID = curItem.GetItemTypeID() curItemCDType = curItem.GetCDType() #Ö´ÐÐʹÓÃÎïÆ·Âß¼­ useResult = DoUseItemLogic(curPlayer, curItem, tick, useCnt, exData) isOK, successCnt = __AnalysisUseItemResult(useResult) GameWorld.DebugLog("__DoLogic_PlayerUseItemSelf itemID=%s,result=%s,isOK=%s,successCnt=%s" % (curItemTypeID, useResult, isOK, successCnt)) if not isOK: return False #------------ʹÓÃÎïÆ·³É¹¦, Ö´ÐÐÏà¹Ø²Ù×÷ PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseItem, successCnt, [curItemTypeID]) curPlayer.Sync_UseItem(curItemTypeID, useItemIndex) curPlayer.SetItemCD(curItemCDType, tick) #ʹÓÃÎïÆ·µÄÌØÊâÌáʾ ItemCommon.UseItemSpecialNotify(curPlayer, curItemTypeID) #Ôö¼Ó½ñÈÕʹÓôÎÊý if todayCanUseCnt > 0: __AddItemUseCntToday(curPlayer, curItemTypeID, successCnt) return True ## ʹÓÃÎïÆ··µ»ØÖµ´¦Àí£¬ ת»¯Îª¹Ì¶¨¸ñʽ·µ»Ø # @param useResult ²»¶¨ÀàÐÍ·µ»ØÖµ # @return ÊÇ·ñʹÓóɹ¦, ³É¹¦Ê¹ÓøöÊý # @remarks ÓÅ»¯ÅúÁ¿Ê¹ÓÃÎïÆ·Ê±ÎªÁ˼æÈÝоɰ汾×öµÄÁÙʱ´¦Àí def __AnalysisUseItemResult(useResult): # Ö§³ÖNone, bool·µ»ØÖµ, tuple·µ»ØÖµ # ͳһת»¯Îª isOK, ³É¹¦Ê¹ÓôÎÊý isOK = False successCnt = 0 if isinstance(useResult, tuple): isOK, successCnt = useResult elif isinstance(useResult, bool): isOK = useResult if isOK: successCnt = 1 return isOK, successCnt ## ¼ì²éÊÇ·ñ¿ÉÒÔʹÓÃÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return ²¼¶ûÖµ # @remarks def CheckPlayerUseItemSelf(curPlayer, curItem, tick): #----------------------¼ì²é·Ç·¨ÎïÆ·ÊôÐÔ if not ItemCommon.CheckItemCanUse(curItem): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055") return False #----------------------¼ì²éÍæ¼ÒÊôÐÔ if not CheckUseItemSelf_Player(curPlayer): return False #----------------------¼ì²éÕý³£ÎïÆ·ÊôÐÔ if not UseItemSelf_Item(curPlayer, curItem, tick): return False if not ItemCommon.CheckItemCanUseByExpireTime(curItem): # ¹ýÆÚ PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045") return False return True ## »ñÈ¡ÎïÆ·½ñÈÕ»¹¿ÉʹÓôÎÊý # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @return -1(²»ÏÞÖÆ); >=0(»¹¿ÉʹÓôÎÊý) def __GetTodayCanUseCnt(curPlayer, curItem): maxCnt = ItemCommon.GetCanUseCountDaily(curItem) if maxCnt <= 0: return -1 curItemID = curItem.GetItemTypeID() useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % curItemID) for itemIDList in IpyGameDataPY.GetFuncEvalCfg('ShareUseCntItem'): if curItemID not in itemIDList: continue for itemID in itemIDList: if itemID == curItemID: continue useCnt += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID) canUseCnt = max(0, maxCnt - useCnt) if canUseCnt <= 0: GameWorld.DebugLog("ÒÑ´ïµ½½ñÈÕʹÓôÎÊýÉÏÏÞ!itemID=%s,useCnt=%s,maxCnt=%s" % (curItemID, useCnt, maxCnt)) #PlayerControl.NotifyCode(curPlayer, notifyMark, [itemID]) #GameWorld.DebugLog("ÎïÆ·ID(%s)½ñÈÕÒÑʹÓôÎÊý(%s), maxCnt=%s" % (itemID, useCnt, maxCnt)) return canUseCnt ## Ôö¼ÓÎïÆ·½ñÈÕʹÓôÎÊý # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @return def __AddItemUseCntToday(curPlayer, itemID, addCnt=1): useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID) updCnt = min(useCnt + addCnt, ChConfig.Def_UpperLimit_DWord) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ItemUseCntToday % itemID, updCnt) #GameWorld.DebugLog("¸üÐÂÎïÆ·ID(%s)½ñÈÕÒÑʹÓôÎÊý(%s)" % (itemID, updCnt)) Sync_ItemDayUseCnt(curPlayer, [itemID]) return updCnt ## ÖØÖÃÎïÆ·½ñÈÕʹÓôÎÊý # @param curPlayer µ±Ç°Íæ¼Ò # @return def ResetItemUseCntToday(curPlayer): resetItemIDList = [] for itemID in PyGameData.DailyUseCountLimitItemIDList: if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ItemUseCntToday % itemID, 0) resetItemIDList.append(itemID) if resetItemIDList: Sync_ItemDayUseCnt(curPlayer, resetItemIDList) return def Sync_ItemDayUseCnt(curPlayer, syncItemIDList=[]): isForceSync = True if not syncItemIDList: isForceSync = False # ûÓÐÖ¸¶¨ID£¬Ôòֻ֪ͨÓÐʹÓôÎÊýµÄ syncItemIDList = PyGameData.DailyUseCountLimitItemIDList useCntInfoPack = ChPyNetSendPack.tagMCItemDayUseCntInfo() useCntInfoPack.Clear() useCntInfoPack.ItemUseCntList = [] for itemID in syncItemIDList: useCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID) if not useCount and not isForceSync: continue useCntPack = ChPyNetSendPack.tagMCItemDayUseCnt() useCntPack.Clear() useCntPack.ItemID = itemID useCntPack.UseCnt = useCount useCntInfoPack.ItemUseCntList.append(useCntPack) useCntInfoPack.Count = len(useCntInfoPack.ItemUseCntList) if useCntInfoPack.Count: NetPackCommon.SendFakePack(curPlayer, useCntInfoPack) return #--------------------------------------------------------------------- ## Ö´ÐÐʹÓÃÎïÆ·Âß¼­ // ·µ»ØÕæ±íʾʹÓóɹ¦( Íâ²ãתCDºÍ֪ͨ¿Í»§¶Ë ) # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None or True # @remarks º¯ÊýÏêϸ˵Ã÷. def DoUseItemLogic(curPlayer, curItem, tick, useCnt=1, exData=0): #ʹÓÃÌØÊâÎïÆ·½á¹û //·µ»Ø-1´ú±íÒ»°ãÎïÆ· useSpecialItemResult = __DealWith_SpecialItem(curPlayer, curItem, tick, useCnt, exData) if useSpecialItemResult != -1: #Õâ¸öÎïÆ·²»ÊÇÒ»°ãÎïÆ·, Ö±½Ó·µ»Ø½á¹û return useSpecialItemResult #---ÌØÊâ×°±¸²»Ñé֤װ±¸ÊôÐÔ, ÆÕͨÎïÆ·ÒªÑé֤װ±¸ÊôÐÔ--- itemControler = ItemControler.PlayerItemControler(curPlayer) #×°±¸ÎÞ·¨Ê¹Óà if itemControler.PlayerCanEquipItem(curItem, False): #Õâ¸öÎïÆ·ÊÇ×°±¸ PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045") return #ÎïÆ·ÀàÐÍID itemTypeID = curItem.GetItemTypeID() # ĬÈÏÅúÁ¿Ê¹Óà callFunc = GameWorld.GetExecFunc(UseItem, "Item_%d.%s"%(itemTypeID, "BatchUseItem")) if callFunc: return callFunc(curPlayer, curItem, tick, useCnt, exData) #¾É´úÂë¼æÈÝ£¬ÅúÁ¿Ê¹ÓÃÓ¦¸Ãµ÷ÓÃBatchUseItem£¬¶ÔUseItemÑ­»·µ÷Óò»ÑϽ÷ callFunc = GameWorld.GetExecFunc(UseItem, "Item_%d.%s"%(itemTypeID, "UseItem")) if not callFunc: #ÎïÆ·²»¿ÉCall GameWorld.ErrLog("ʹÓÃÎïÆ· = %s²»¿ÉCall"%(itemTypeID), curPlayer.GetID()) return #·µ»ØÕæ±íʾʹÓóɹ¦( Íâ²ãתCDºÍ֪ͨ¿Í»§¶Ë ) return callFunc(curPlayer, curItem, tick) #--------------------------------------------------------------------- ## ´¦ÀíÌØÊâÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None or True # @remarks º¯ÊýÏêϸ˵Ã÷. def __DealWith_SpecialItem(curPlayer, curItem, tick, useCnt, exData): #¹ûʵÎïÆ· useFruitResult = PlayerAttrFruit.DoPlayerEatFruitItem(curPlayer, curItem, useCnt) if useFruitResult != -1: return useFruitResult #------------------------»ñµÃÎïÆ·Ïà¹ØÊôÐÔ itemTypeID = curItem.GetItemTypeID() #ÎïÆ·ÀàÐÍid curItemType = curItem.GetType() # ÎïÆ·ÀàÐÍ curEffID = curItem.GetEffectByIndex(0).GetEffectID() #¸ù¾ÝÎïÆ·ÀàÐÍʹÓÃ{ÎïÆ·ÀàÐÍ:callµÄpyÃû} itemTypeCallFuncDic = { ChConfig.Def_ItemType_HPMP:"Item_Add_HPMP", # ²¹ºì²¹ÀºÒ©¼Á ChConfig.Def_ItemType_AddExp:"Item_AddExp", # ¸ø¾­ÑéµÀ¾ß ChConfig.Def_ItemType_GiveMoney:"Item_GiveMoney", # ¸øÈËÎï½ðÇ® ChConfig.Def_ItemType_AutoUseMoney:"Item_GiveMoney", # ¸øÈËÎï½ðÇ® ChConfig.Def_ItemType_RuneExp:"Item_RuneExp", # ¸øÈËÎï·ûÓ¡¾«»ª ChConfig.Def_ItemType_AddLimitBuff:"Item_Add_LimitingBuff", # ¸øÏÞʱbuffÎïÆ· ChConfig.Def_ItemType_AddLimitBuff2:"Item_Add_LimitingBuff", # ¸øÏÞʱbuffÎïÆ· ChConfig.Def_ItemType_AddExpBuff:"Item_Add_LimitingBuff", # ¸øÏÞʱbuffÎïÆ· ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint", #µ¥¸öÊôÐÔµãÖØÖà ChConfig.Def_ItemType_AddCrossRealmPKCnt:"Item_AddCrossRealmPKCnt" #Ôö¼Ó¿ç·þPK´ÎÊý } #¸ù¾ÝÎïÆ·Ð§¹ûʹÓÃ{ÎïÆ·Ð§¹ûID:callµÄpyÃû} itemEffIdCallFuncDic = { ChConfig.Def_Effect_UseItemGiveZhenQi:"Item_UseItemGiveZhenQi", # ʹÓõÀ¾ß¸øÓèÕæÆø ChConfig.Def_Effect_AddDienstgrad:"Item_AddDienstgrad", #µÀ¾ß»ñµÃ³ÆºÅ ChConfig.Def_Effect_Face:"Item_Face", ChConfig.Def_Effect_FacePic:"Item_Face", ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #Éý¼¶µÀ¾ß ChConfig.Def_Effect_TJGAddTime:"Item_TJGAddTime", #Ôö¼ÓÍÑ»ú¹Òʱ¼ä ChConfig.Def_Effect_GuajiAward:"Item_GuajiAward", #Ö±½Ó¸ø¹Ò»úÊÕÒæ ChConfig.Def_Effect_CleanGuilt:"Item_CleanGuilt", # Ï´ºìÃû ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # ½±Àø³äÖµµãȯ ChConfig.Def_Effect_AddVIPExp:"Item_AddVIPExp", # Ôö¼ÓVIP¾­Ñé ChConfig.Def_Effect_VIPLVCard:"Item_VIPLVCard", # VIPµÈ¼¶Ö±Éý¿¨ ChConfig.Def_Effect_TiandaoQiyun:"Item_TiandaoQiyun", # ÌìµÀÊ÷ÆøÔË ChConfig.Def_Effect_GubaoPiece:"Item_GubaoPiece", # ¹Å±¦ËéÆ¬Ð§¹ûID ChConfig.Def_Effect_TrainRealmLV:"Item_TrainRealmLV", # ¾³½çÅàÑø¿¨ ChConfig.Def_Effect_ResetBossKillCnt:"Item_ResetBossKillCnt", # ÖØÖÃboss»÷ɱƣÀÍ ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # Ôö¼Ó¸±±¾¿É½øÈë´ÎÊý ChConfig.Def_Effect_AddArenaBattleCount:"Item_AddArenaBattleCount", # Ôö¼Ó¾º¼¼³¡ÌôÕ½´ÎÊý ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # Ôö¼ÓBOSS¿É»÷ɱ´ÎÊý ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # Ôö¼Ó·¨±¦ÉýÐǾ­Ñé ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # ¼¤»îÁÄÌìÆøÅÝ¿ò ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack", ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # Ôö¼Ó»î¶¯Ñ²Àñ»ý·Ö ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # Ôö¼Ó»î¶¯Ñ²Àñ»ý·Ö ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # Ôö¼Ó¾ÛÁéЧÂÊ ChConfig.Def_Effect_TouchMission:"Item_TouchMission", # ´¥·¢ÈÎÎñ½Ó¿Ú #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach", # µ¯ÛÀ·û #ChConfig.Def_Effect_ClothesCoatSkin:"Item_ClothesCoatSkin", #¼¤»îʱװƤ·ô #ChConfig.Def_Effect_AddOfficialExp:"Item_AddOfficialExp", # Ôö¼Ó¾ôλ¾­Ñé } callFuncName = itemTypeCallFuncDic.get(curItemType, "") if not callFuncName: callFuncName = itemEffIdCallFuncDic.get(curEffID, "") if not callFuncName: chestsIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Chests", itemTypeID) if chestsIpyData: callFuncName = "Item_Chests" if callFuncName: pass elif itemTypeID == ChConfig.Def_ItemID_VIPExperience: callFuncName = "Item_VIPExperience" #VIPÌåÑ鿨 if callFuncName == '': #//Õâ¸öÎïÆ·ÊÇÒ»°ãÎïÆ·, ·µ»ØÍâ²ã¼ÌÐø´¦Àí return -1 GameWorld.DebugLog("__DealWith_SpecialItem %s" % callFuncName) # ĬÈÏʹÓà callFunc = GameWorld.GetExecFunc(UseItem, "%s.BatchUseItem" % callFuncName) if callFunc: return callFunc(curPlayer, curItem, tick, useCnt, exData) # ¾É´úÂë¼æÈÝ£¬ÅúÁ¿Ê¹ÓÃÓ¦¸Ãµ÷ÓÃBatchUseItem£¬¶ÔUseItemÑ­»·µ÷Óò»ÑϽ÷ callFunc = GameWorld.GetExecFunc(UseItem, "%s.UseItem"%callFuncName) if not callFunc: GameWorld.ErrLog('###ʹÓÃÎïÆ·Òì³£, ÎÞ·¨²éÕÒ %s Îļþ'%(callFuncName)) return return callFunc(curPlayer, curItem, tick) #--------------------------------------------------------------------- #=============================================================================== # //07 16 ʹÓÃСÀ®°È#tagCUseSpeaker # tagCUseSpeaker * GettagCUseSpeaker(); # # class IPY_CUseSpeaker # { # public: # //ÊÇ·ñʹÓýðǮ˵»° # int GetUseGold(); # //ʹÓÃÎïÆ·Ëµ»°Ê±, ÎïÆ·Index # int GetItemIndex(); # //×Ö·û³¤¶È # int GetTextLen(); # //size = TextLen # char * GetText(); # }; #=============================================================================== ## ʹÓÃÀ®°È # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def UseSpeaker(index, tick): # ·ÏÆú£¬Ê¹Óà A2 17 À®°ÈÁÄÌì #tagCMPYSpeaker return ## ʹÓÃÎïÆ·Ð¡À®°È # @param curPlayer µ±Ç°Íæ¼Ò # @param itemIndex ÎïÆ·Ë÷Òý # @return СÀ®°ÈµÈ¼¶ # @remarks º¯ÊýÏêϸ˵Ã÷. def DoSpeaker_UseItem(curPlayer, itemIndex, speakerType=0): #µÃµ½Íæ¼ÒµÄ±³°ü backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) #µÃµ½µ±Ç°ÎïÆ· curItem = backPack.GetAt(itemIndex) #»ñµÃʹÓõÄÀ®°ÈµÈ¼¶ speakerLV = __GetSpeakerLV(curPlayer, curItem) if not speakerLV or (speakerType and speakerType != speakerLV): return 0 dataDict = {"ItemID":curItem.GetItemTypeID(), "ItemCount":1, "ItemGUID":curItem.GetGUID()} DataRecordPack.DR_DeleteItem(curPlayer, 'SpeakerUseItem', dataDict) ItemControler.SetItemCount(curItem, curItem.GetCount() - 1, curPlayer.GetID(), curPlayer.GetAccID(), curPlayer.GetPlayerName()) return speakerLV ### ʹÓýðǮСÀ®°È ## @param curPlayer µ±Ç°Íæ¼Ò ## @param useGold ## @return None or speakerLV ## @remarks º¯ÊýÏêϸ˵Ã÷. #def __DoSpeaker_UseGold(curPlayer , useGold): # #ʹÓÃÀ®°ÈµÈ¼¶ # speakerLV = 0 # #useGold 1:ʹÓýðÀ®°È , 2:ʹÓÃÒøÀ®°È # if useGold == 1: # speakerLV = 3 # curItemData = GameWorld.GetGameData().GetItemByTypeID(ChConfig.Def_SpeakerItem_GoldID) # else: # speakerLV = 2 # curItemData = GameWorld.GetGameData().GetItemByTypeID(ChConfig.Def_SpeakerItem_SilverID) # # if not curItemData: # GameWorld.Log('###Êý¾Ý¿âÎÞ·¨²éÕÒСÀ®°È') # return speakerLV # # price , priceType = ItemCommon.GetItemSellPrice(curPlayer , curItemData , 1) # # if not PlayerControl.PayMoney(curPlayer, priceType, price): # #ûǮ,·µ»Ø # return speakerLV # # GameWorld.Login_Interface_GoldRec(curPlayer , curItemData.GetItemTypeID() , 1 , curItemData.GetName() , priceType , price) # # return speakerLV #--------------------------------------------------------------------- ## »ñÈ¡·¢ÑԵȼ¶ # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem ʹÓõÄÎïÆ· # @return ·¢ÑԵȼ¶ # @remarks »ñÈ¡·¢ÑԵȼ¶. def __GetSpeakerLV(curPlayer, curItem): #Òì³£ÎïÆ· if not ItemCommon.CheckItemCanUse(curItem): return 0 if not ItemControler.CheckItemUseLV(curPlayer, curItem): return 0 #µÃµ½µ±Ç°Ð§¹û curEff = curItem.GetEffectByIndex(0) curEffID = curEff.GetEffectID() if curEffID != ChConfig.Def_Effect_ItemSpeak: return 0 curEffValue = curEff.GetEffectValue(0) if curEffValue < 1 or curEffValue > 3: GameWorld.ErrLog("СÀ®°ÈÌî±í´íÎó curEffID = %s, value = %s"%(curEffID, curEffValue), curPlayer.GetPlayerID()) return 0 return curEffValue #--------------------------------------------------------------------- ## ¼ì²éʹÓÃÎïÆ·µÄÍæ¼ÒÊôÐÔ # @param curPlayer µ±Ç°Íæ¼Ò # @return ²¼¶ûÖµ # @remarks ¼ì²éʹÓÃÎïÆ·µÄÍæ¼ÒÊôÐÔ. def CheckUseItemSelf_Player(curPlayer): if GameObj.GetHP(curPlayer) <= 0 : return False # #Ñ£ÔÎʱ, ²»¿ÉʹÓÃÎïÆ· # if curPlayer.GetAbnormalState() == IPY_GameWorld.sctFaint: # return False #ʹÓÃÎïÆ·ÐÐΪ״̬, ÅжϷþÎñ¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction( curPlayer, ChConfig.Def_Obj_ActState_ServerAct, IPY_GameWorld.oalUseItem ): return False #ÔÚïÚ³µÖÐ, ²»¿ÉʹÓÃÎïÆ· if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck : PlayerControl.NotifyCode(curPlayer, "Old_hgg_0") return False #½»Ò×״̬, ²»¿ÉʹÓÃÎïÆ· if curPlayer.GetPlayerAction() == IPY_GameWorld.paTrade: PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_372238") return False # #GM½ûֹʹÓà # if GameWorld.IsGM(curPlayer): # PlayerControl.NotifyCode(curPlayer, "GeRen_admin_59724") # return False return True #--------------------------------------------------------------------- ## ¼ì²éÄÜ·ñʹÓÃÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem µ±Ç°ÎïÆ· # @param tick µ±Ç°Ê±¼ä # @return None or True # @remarks º¯ÊýÏêϸ˵Ã÷. def UseItemSelf_Item(curPlayer, curItem, tick): if curItem.GetType() == ChConfig.Def_ItemType_CanUseByCDTime: cdType = curItem.GetCanPlaceInShortcut() # ÓÉÓÚ GetCDType ×Ö¶ÎÊǹ«¹²CD£¬ËùÒÔµ¥¶ÀÁíÒ»¸öÀàÐÍ # µ¹¼ÆÊ±ÀàÐÍ: 0-ĬÈÏÃ룻1-°´»ñµÃÎïÆ·Ìì if not cdType: curItemPastTime = int(time.time()) - curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime) if curItemPastTime < curItem.GetCDTime(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572") GameWorld.DebugLog("δµ½Ê¹ÓÃʱ¼ä£¬²»¿ÉʹÓÃ! itemID=%s,curItemPastTime=%s < CDTime(%s)" % (curItem.GetItemTypeID(), curItemPastTime, curItem.GetCDTime())) return elif cdType == 1: passDays = GameWorld.GetDiff_Day(int(time.time()), curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)) + 1 if passDays < curItem.GetCDTime(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572") GameWorld.DebugLog("δµ½Ê¹ÓÃʱ¼ä£¬²»¿ÉʹÓÃ! itemID=%s,cdType=%s,passDays=%s < CDTime(%s)" % (curItem.GetItemTypeID(), cdType, passDays, curItem.GetCDTime())) return else: if (tick - curPlayer.GetItemCDStartTime(curItem.GetCDType())) < curItem.GetCDTime(): #CDÀäȴʱ¼äδµ½ #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572") GameWorld.DebugLog("CDÀäȴʱ¼äδµ½,itemID=%s,CDType=%s,tick(%s)-cdStartTime(%s)=%s < %s" % (curItem.GetItemTypeID(), curItem.GetCDType(), tick, curPlayer.GetItemCDStartTime(curItem.GetCDType()), tick - curPlayer.GetItemCDStartTime(curItem.GetCDType()), curItem.GetCDTime())) return #¼ì²éʹÓõȼ¶ if curItem.GetUseLV() == 0: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045") return if curItem.GetUseLV() > curPlayer.GetLV(): PlayerControl.NotifyCode(curPlayer, "DJ_Equip_UnUse_Lv") return if ItemControler.IsEventItem(curItem): PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379") return #Íæ¼ÒÔÚïÚ³µÖÐ,²»ÄÜʹÓÃÎïÆ· if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck: PlayerControl.NotifyCode(curPlayer, "Old_hgg_0") return # #Íæ¼ÒʼþÖÐ, ²»ÄÜʹÓÃÎïÆ· # if (curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent and # not curItem.GetEventCanUse()): # PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_372238") # return #Ö°ÒµÏÞÖÆ if not ItemCommon.CheckJob(curPlayer, curItem): PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379") return #ÎïÆ·Ê¹Óõȼ¶¼ì²é if not ItemControler.CheckItemUseLV(curPlayer, curItem): return #=============================================================================== # #¼ì²é¶ÔÏóÊÇ·ñÕýÈ· # if curItem.GetUseTag() not in [1,5,12]: # GameWorld.Log("curItem is : %s UseTag is : %s"%(curItem.GetItemTypeID(),curItem.GetUseTag())) # PlayerControl.NotifyCode(curPlayer, "UseResLost09") # return #=============================================================================== #------------------------ÌØÊⳡ¾°¼ì²é #FB½ûֹʹÓÃÎïÆ· if FBLogic.DoFBForbidUseItem(curPlayer, curItem): return return True ## ÎïÆ·¼ì²éÊÇ·ñ¿ÉÒÔɾ³ý # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem µ±Ç°ÎïÆ· # @return False or True # @remarks º¯ÊýÏêϸ˵Ã÷. def __CheckItemCanDel(curPlayer, curItem): #ÎïÆ·²»´æÔÚ if curItem == None or curItem.IsEmpty(): return False if curItem.GetIsLocked(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055") return False if curItem.GetCanDrop() == 0: PlayerControl.NotifyCode(curPlayer, "UseResLost10") return False #°ó¶¨ÎïÆ·²»¿É¶ªÆú if curItem.GetIsBind(): PlayerControl.NotifyCode(curPlayer, "UseResLost10") return False if ItemControler.IsEventItem(curItem): PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379") return False # ÅжÏÊÇ·ñÊǹóÖØÆ· if ItemControler.IsValuableItem(curItem): return False return True #--------------------------------------------------------------------- #//A3 02 ¶ªÆú±³°üÎïÆ· #tagPlayerDropItem # #struct tagPlayerDropItem # #{ # tagHead Head; # BYTE PackType; //±³°üÀàÐÍ # WORD ItemIndex; //ÎïÆ·ÔÚ±³°üÖÐË÷Òý # WORD DropPosX; # WORD DropPosY; //µôÂäÎïÆ· #}; #--------------------------------------------------------------------- ## Íæ¼Ò¶ªÆúÎïÆ·(·â°ü²ÎÊý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None def PlayerDropItem(index, packData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) packType = packData.PackType if IPY_GameWorld.rptItem != packType: return dropPosX = packData.DropPosX dropPosY = packData.DropPosY # Õϰ­µã if not GameWorld.GetMap().CanMove(dropPosX, dropPosY): return itemIndex = packData.ItemIndex #»ñµÃÍæ¼ÒÎïÆ·¹ÜÀíÆ÷ ItemManager = curPlayer.GetItemManager() #»ñµÃÍæ¼Ò±³°ü curPack = ItemManager.GetPack(packType) #¸ù¾Ý·â°ü,»ñµÃ±³°üÖеÄÎïÆ· curItem = curPack.GetAt(itemIndex) #ÎïÆ·²»´æÔÚ if not ItemCommon.CheckItemCanUse(curItem): return #¼ì²éÎïÆ·¿É·ñ¶ªÆú if not __CheckItemCanDel(curPlayer, curItem): return #ÒòÈռǼǼÁ¿¹ý´ó,Ìí¼Óɸѡ if ItemControler.ItemNeedRecord(curItem): #Ïêϸ¼Ç¼װ±¸ÐÅÏ¢ equipNoteDict = ItemCommon.GetItemNoteDict(curItem, curItem.GetCount()) DataRecordPack.DR_DeleteItemInRecycle(curPlayer, equipNoteDict) ItemCommon.DR_DelItem(curPlayer, packType, "DropPackItem", equipNoteDict) #ɾ³ýÎïÆ· #ItemManager.DeleteItem(curItem) sightLevel = PlayerControl.GetMapRealmDifficulty(curPlayer) curMapItem = AddMapDropItem(dropPosX, dropPosY, curItem.GetItem(), sightLevel=sightLevel) curMapItem.SetOwnerType(ChConfig.Def_NPCHurtTypePlayer) curMapItem.SetOwnerID(curPlayer.GetPlayerID()) #Çå³ýÔ­±³°üÎïÆ· curItem.Wipe() return #--------------------------------------------------------------------- #=============================================================================== # //07 12 Íæ¼Òɾ³ý³ÆºÅ#tagCDeleteTitle # # struct tagCDeleteTitle # { # tagHead Head; # WORD TitleIndex; //³ÆºÅ±³°üÖеĵڼ¸¸ö # }; #=============================================================================== ## ɾ³ý³ÆºÅ(·â°ü²ÎÊý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks //07 12 Íæ¼Òɾ³ý³ÆºÅ#tagCDeleteTitle def DeleteTitle(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #Ҫɾ³ý³ÆºÅµÄλÖà sendPack = IPY_GameWorld.IPY_CDeleteTitle() titleIndex = sendPack.GetTitleIndex() #»ñµÃҪɾ³ýµÄ³ÆºÅ itemManager = curPlayer.GetItemManager() curItem = itemManager.GetPack(IPY_GameWorld.rptTitle).GetAt(titleIndex) if not ItemCommon.CheckItemCanUse(curItem): #CallcannotDelete Ëø¶¨µÄ³ÆºÅ,ÎÞ·¨É¾³ý PlayerControl.NotifyCode(curPlayer, "CallcannotDelete") return DataRecordPack.DR_DeleteItem(curPlayer, "DeleteTitle", {"ItemID":curItem.GetItemTypeID()}) #ɾ³ý³ÆºÅ itemManager.DeleteItem(curItem) return #--------------------------------------------------------------------- ## ´Ó»ØÊÕÕ¾ÖÐÈ¡»ØÎïÆ·(·â°üË÷Òý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GetbackItemInRecycle(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CGetbackItemInRecycle() #»ØÊÕÕ¾ÖÐÎïÆ·Î»Öà recycleIndex = sendPack.GetRecycleIndex() #»ñµÃÍæ¼ÒÎïÆ·¹ÜÀíÆ÷ itemManager = curPlayer.GetItemManager() #»ñµÃ»ØÊÕÕ¾ curRecyclePack = itemManager.GetPack(IPY_GameWorld.rptRecycle) #¸ù¾Ý·â°ü,»ñµÃ»ØÊÕÕ¾ÖеÄÎïÆ·¸ñ curRecycleItem = curRecyclePack.GetAt(recycleIndex) #ÎïÆ·²»´æÔÚ if not ItemCommon.CheckItemCanUse(curRecycleItem): return #»ñµÃ·ÅÈëµÄÍæ¼Ò±³°üλÖà itemPackIndex = sendPack.GetItemIndex() curItemPack = itemManager.GetPack(IPY_GameWorld.rptItem) if itemPackIndex >= curItemPack.GetCount() or itemPackIndex < 0: GameWorld.Log("GetbackItemInRecycle -> µ±Ç°¸ñ×Ó±³°üδ´ò¿ª, %s%s"%(itemPackIndex, curItemPack.GetCount()) , curPlayer.GetPlayerID()) return #»ñµÃÎïÆ·¸öÊý curCount = curRecycleItem.GetCount() curItemID = curRecycleItem.GetItemTypeID() #»Ø¹ºÎïÆ··ÑÓÃ=ÎïÆ·¼þÊý*#»Ø¹ºµ¥¼þÎïÆ··ÑÓà curRecycleItemPrice = curCount * ChConfig.Def_RecycleReturnMoney curSilverType = curPlayer.GetUseSilverType() #silverValue = PlayerControl.GetSilver(curPlayer) itemControl = ItemControler.PlayerItemControler(curPlayer) #ÊÇ·ñÓÐ×ã¹»µÄ¿Õ¼ä if not itemControl.CanPutInItem(IPY_GameWorld.rptItem, curItemID, curCount, curRecycleItem.GetIsBind()): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem]) return if not PlayerControl.PayMoney(curPlayer, curSilverType, curRecycleItemPrice, ChConfig.Def_Cost_BuyItemBack, {ChConfig.Def_Cost_Reason_SonKey:curItemID}): return ItemControler.DragItem(curPlayer, IPY_GameWorld.rptRecycle, recycleIndex, IPY_GameWorld.rptItem, itemPackIndex, curCount) #--------------------------------------------------------------------- ## Çå¿Õ»ØÊÕÕ¾(·â°üË÷Òý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def ClearRecycle(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #sendPack = IPY_GameWorld.IPY_CClearRecycle() #»ñµÃÍæ¼ÒÎïÆ·¹ÜÀíÆ÷ ItemManager = curPlayer.GetItemManager() #»ñµÃ»ØÊÕÕ¾ curPack = ItemManager.GetPack(IPY_GameWorld.rptRecycle) #¸ù¾Ý·â°ü,ɾ³ý»ØÊÕÕ¾ÖеÄËùÓÐÎïÆ· for i in range(0, curPack.GetCount()): curItem = curPack.GetAt(i) if not ItemCommon.CheckItemCanUse(curItem): continue #ɾ³ýÎïÆ· ItemManager.DeleteItem(curItem) return #--------------------------------------------------------------------- ## Í϶¯ÎïÆ·(·â°üË÷Òý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def DragItem(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # if curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent: # GameWorld.Log("Íæ¼ÒʼþÖÐ, ²»ÔÊÐíÍÏ×§") # return clientDrag = IPY_GameWorld.IPY_CDragItem() ItemControler.DragItem(curPlayer, IPY_GameWorld.rptItem, clientDrag.GetSrcIndex(), IPY_GameWorld.rptItem, clientDrag.GetDestIndex(), clientDrag.GetItemCount()) return #--------------------------------------------------------------------- ## ÎïÆ·Ê°È¡¼ì²é(²ÎÊý - > µ±Ç°Íæ¼Ò,µØÍ¼ÎïÆ·,µ±Ç°Ê±¼ä) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def __CheckPickUpItemTime(curPlayer, mapItem, tick, mapItemID, dropItemNPCID): #ÅжÏÎïÆ·±£»¤Ê±¼ä #Íæ¼Ò»÷ɱµôÂäµÄ if mapItem.GetRemainTick(tick) == 0: return True itemOwnerType = mapItem.GetOwnerType() playerID = curPlayer.GetPlayerID() ownerID = mapItem.GetOwnerID() #ËùÓÐÈ˶¼¿ÉÒÔʰȡµÄÎïÆ· if itemOwnerType == ChConfig.Def_NPCHurtTypeAll: return True #¸öÈËÎïÆ· elif itemOwnerType == ChConfig.Def_NPCHurtTypePlayer: if ownerID != playerID: GameWorld.Log("Íæ¼ÒûÓйéÊôȨ£¬²»ÄÜʰȡ! mapItemID=%s,dropItemNPCID=%s,ownerID=%s" % (mapItemID, dropItemNPCID, ownerID), playerID) return False #¶ÓÎéÎïÆ· elif itemOwnerType == ChConfig.Def_NPCHurtTypeTeam: curTeam = curPlayer.GetTeam() if curTeam == None: GameWorld.Log("ûÓжÓÎé²»ÄÜʰȡ¹éÊô¶ÓÎéÎïÆ·! mapItemID=%s,dropItemNPCID=%s,ownerID=%s" % (mapItemID, dropItemNPCID, ownerID), playerID) return False if curTeam.GetTeamID() != ownerID: GameWorld.Log("¶ÓÎéûÓйéÊôȨ£¬²»ÄÜʰȡ! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curTeamID=%s" % (mapItemID, dropItemNPCID, ownerID, curTeam.GetTeamID()), playerID) return False #ÕóÓªÎïÆ· elif itemOwnerType == ChConfig.Def_NPCHurtTypeFaction: if ownerID != curPlayer.GetFaction(): GameWorld.Log("ÕóӪûÓйéÊôȨ£¬²»ÄÜʰȡ! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curFaction=%s" % (mapItemID, dropItemNPCID, ownerID, curPlayer.GetFaction()), playerID) return False #ÌØÊâÍæ¼ÒID¹éÊô elif itemOwnerType == ChConfig.Def_NPCHurtTypeSpecial: ownerIDList = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_SpecOwner, []) if playerID not in ownerIDList: GameWorld.Log("Íæ¼ÒûÓйéÊôȨ£¬²»ÄÜʰȡ! mapItemID=%s,dropItemNPCID=%s,ownerIDList=%s" % (mapItemID, dropItemNPCID, ownerIDList), playerID) return False #ÏÉÃ˹éÊô elif itemOwnerType == ChConfig.Def_NPCHurtTypeFamily: if ownerID != curPlayer.GetFamilyID(): GameWorld.Log("ÏÉÃËûÓйéÊôȨ£¬²»ÄÜʰȡ! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curFamilyID=%s" % (mapItemID, dropItemNPCID, ownerID, curPlayer.GetFamilyID()), playerID) return False return True def GetMapItemUserDataValue(mapItem, dataIndex, defaultValue=None): userData = mapItem.GetUserData() try: userData = eval(userData) except: return defaultValue key = str(dataIndex) if key not in userData: return defaultValue return userData[key] #=============================================================================== # //07 19 ÍòÄܱ³°üÈ¡³öÎïÆ·#tagCGetAnyWhereItem # tagCGetAnyWhereItem * GettagCGetAnyWhereItem(); # # class IPY_CGetAnyWhereItem # { # public: # //ÍòÄܱ³°üµÄindex # int GetAnyWhereItemIndex(); # //×Ô¼º±³°üµÄindex # int GetDestIndex(); # //ÍòÄܱ³°üÈ¡³öÀàÐÍTAnyWherePackType # int GetAnyWherePackType(); # }; #=============================================================================== ## »ñÈ¡ÍòÄܱ³°üÎïÆ· # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GetAnyWhereItem(index , tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) pack = IPY_GameWorld.IPY_CGetAnyWhereItem() srcIndex = pack.GetAnyWhereItemIndex() destIndex = pack.GetDestIndex() anyWherePackType = pack.GetAnyWherePackType() __DoLogic_GetAnyWhereItem(curPlayer , srcIndex , destIndex , anyWherePackType) return ## ´ÓÍòÄܱ³°üÈ¡ÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param srcIndex ÍòÄܱ³°üË÷Òý # @param destIndex ±³°üË÷Òý # @param anyWherePackType ±³°üÀàÐÍ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __DoLogic_GetAnyWhereItem(curPlayer , srcIndex , destIndex , anyWherePackType): curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptAnyWhere).GetAt(srcIndex) if not ItemCommon.CheckItemCanUse(curItem): return curItemCount = curItem.GetCount() curItemTypeID = curItem.GetItemTypeID() itemControl = ItemControler.PlayerItemControler(curPlayer) if not itemControl.CanPutInItem(IPY_GameWorld.rptItem, curItemTypeID, curItemCount, curItem.GetIsBind()): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem]) return #ÊÀ½ç¹ã²¥¼«Æ· #__Notify_GoodItem(curPlayer , anyWherePackType , curItem) #GeRen_chenxin_341290 ¹§Ï²Äú,»ñµÃ[s1][s2] #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_341290", [curItemTypeID , curItemCount]) #֪ͨ·ÅÈëÌØÐ§ #curPlayer.Sync_GetItemView(curItemTypeID, curItemCount) #È¡»ØÎïÆ·µ½±³°ü ItemControler.DragItem(curPlayer, IPY_GameWorld.rptAnyWhere, srcIndex, IPY_GameWorld.rptItem, destIndex, curItemCount) return #--------------------------------------------------------------------- #=============================================================================== # //07 20 ÎïÆ··ÅÈë·¨±¦±³°ü#tagCPutItemInFabao # tagCPutItemInFabao * GettagCPutItemInFabao(); # # class IPY_CPutItemInFabao # { # public: # //·¨±¦µÄIndex # int GetItemIndex(); # }; #=============================================================================== ## ²»Ïê # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PutItemInFabao(index , tick): return #--------------------------------------------------------------------- #=============================================================================== # //07 21 È¡³ö·¨±¦±³°üµÄÎïÆ·#tagCGetBackItemInFabao # tagCGetBackItemInFabao * GettagCGetBackItemInFabao(); # # class IPY_CGetBackItemInFabao # { # public: # //È¡³öµÄÄ¿±êλÖà # int GetTagItemIndex(); # }; #=============================================================================== ## ²»Ïê # @param index # @param tick # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GetBackItemInFabao(index , tick): return ##=============================================================================== ##07 24 tagCDingDianTransport # ### ¶¨µã£¨³ÇÊУ©´«ËÍ ºÍ ¶´Ñ¨´«ËÍ £¨ÊÕ°ü²ÎÊý£© ## @param index Íæ¼ÒË÷Òý ## @param tick µ±Ç°Ê±¼ä ## @return None ## @remarks º¯ÊýÏêϸ˵Ã÷. #def PointTransport(index, tick): # return # packUseItem = IPY_GameWorld.IPY_CDingDianTransport() # useItemIndex = packUseItem.GetItemIndex() # transportIndex = packUseItem.GetTransportIndex() # # #»ñµÃÍæ¼ÒʹÓõÄÎïÆ· # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # curItem = backPack.GetAt(useItemIndex) # # #¼ì²éÍæ¼Ò״̬ºÍÎïÆ· # if not CheckUseTransformItem(curPlayer, curItem, tick): # return # # #ÅжÏÊôÓÚÄÄÖÖ´«ËÍ # effIndex = curItem.GetEffectByIndex(0) # curEffID = effIndex.GetEffectID() # # #CDÑéÖ¤ # if (tick - curPlayer.GetItemCDStartTime(curEffID)) < curItem.GetCDTime(): # #CDÀäȴʱ¼äδµ½ # PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572") # return # # #Åжϲ¢Ö´Ðд«ËÍ # if not __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick): # return # ### Ö´Ðд«ËÍ ## @param curPlayer µ±Ç°Íæ¼Ò ## @param curItem ʹÓÃÎïÆ· ## @param curEffID µ±Ç°Ð§¹û ## @param transportIndex ´«Ë͵ãË÷Òý ## @param useItemIndex ʹÓõÄÎïÆ·Ë÷Òý ## @param tick µ±Ç°Ê±¼ä ## @return None ## @remarks º¯ÊýÏêϸ˵Ã÷. #def __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick): # #¶¨µãÁбí # cityPosList = ReadChConfig.GetEvalChConfig('Def_List_City_Pos') # #ɽ¶´Áбí # cavePosList = ReadChConfig.GetEvalChConfig('Def_List_Cave_Pos') # # #¶¨µã # if curEffID == ChConfig.Def_Item_150_Effect: # posList = cityPosList # #ɽ¶´ # elif curEffID == ChConfig.Def_Item_152_Effect: # posList = cavePosList # else: # GameWorld.Log('###·Ç·¨Ê¹ÓÃÎïÆ·,Ч¹ûÖµ%s'%(curEffID,), curPlayer.GetPlayerID()) # return # # #¼ì²éÔ½½ç # if transportIndex < 0 or transportIndex >= len(posList): # GameWorld.Log('###¶¨µã´«ËÍÔ½½ç--%s'%(transportIndex)) # return # # #Ä¿±êµØÍ¼ÅÐ¶Ï # if not PlayerControl.CheckTagCountry(curPlayer, posList[transportIndex][0]): # return # # itemID = curItem.GetItemTypeID() # # # #ʹÓÃxxÒ»¸ö # PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, 1]) # #֪ͨ¿Í»§¶Ë # curPlayer.Sync_UseItem(itemID, useItemIndex) # curPlayer.SetItemCD(curItem.GetCDType(), tick) # # #¿Û³ýÎïÆ·£¨ÏȼǼÔÙɾ³ý£¬±ÜÃâµ×²ãÒѾ­É¾³ý´ËÎïÆ·£© # curItem.SetCount(curItem.GetCount() - 1) # # #Åжϳɹ¦£¬½øÐд«ËÍ # PlayerControl.PlayerResetWorldPos(curPlayer, posList[transportIndex][0], posList[transportIndex][1], posList[transportIndex][2], False) # # #´«ËÍXXµØµãÌáʾ # PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [posList[transportIndex][0]]) #--------------------------------------------------------------------- #=============================================================================== # //07 26 ÓжÔÏóµÄʹÓÃÎïÆ·#tagCUseItemTag # tagCUseItemTag * GettagCUseItemTag(); # # class IPY_CUseItemTag # { # public: # //ÎïÆ·Index # int GetItemIndex(); # //ÀàÐÍ # int GetTagType(); # //ID # int GetTagID(); # }; #=============================================================================== ## Íæ¼ÒʹÓÃÎïÆ·(Ðè»Ø°ü)£¨²ÎÊý·â°ü£© # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PlayerUseItemTag(index , tick): #µÃµ½Íæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #Íæ¼ÒʹÓÃÎïÆ· packUseItem = IPY_GameWorld.IPY_CUseItemTag() useItemIndex = packUseItem.GetItemIndex() backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = backPack.GetAt(useItemIndex) if not ItemCommon.CheckItemCanUse(curItem): return curItemType = curItem.GetType() curItemID = curItem.GetItemTypeID() #Ö´ÐÐʹÓÃÎïÆ·Âß¼­ useItemResult = __DoLogic_PlayerUseItemSelf(curPlayer, useItemIndex, tick) #ʹÓÃÎïÆ·Çé¿ö»Ø°ü __SendUseItemBackPack(curPlayer, curItemType, curItemID, useItemResult) return #// A3 23 ʹÓÃÎïÆ· #tagCMUseItems # #struct tagCMUseItemsSelect #{ # DWORD SelectID; //Ñ¡ÔñÏîID # WORD SelectCnt; //Ñ¡ÔñÊý #}; # #struct tagCMUseItems #{ # tagHead Head; # BYTE ItemIndex; //ÎïÆ·ÔÚ±³°üÖÐË÷Òý # WORD UseCnt; //ʹÓøöÊý£¬0±íʾȫ²¿Ê¹Óà # DWORD ExData; //ʹÓÃÀ©Õ¹Öµ, ĬÈÏ0, Ñ¡ÔñÎïÆ·±¦Ïäʱ·¢ËÍÑ¡ÔñµÄÎïÆ·ID # BYTE SelectCount; //Ö¸¶¨Ñ¡ÔñÏµ±ÅúÁ¿Ê¹Óõ¥¸öÏä×ÓÐèҪͬʱѡÖжàÖÖÑ¡ÏîʱʹÓøÃÖµ # tagCMUseItemsSelect SelectList[SelectCount]; #}; def OnUseItems(index, packData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) itemIndex = packData.ItemIndex useCnt = packData.UseCnt exData = packData.ExData selectDict = {} if packData.SelectCount: for selectInfo in packData.SelectList: selectDict[selectInfo.SelectID] = selectInfo.SelectCnt GameWorld.DebugLog("OnUseItems itemIndex=%s,useCnt=%s,exData=%s,selectDict=%s" % (itemIndex, useCnt, exData, selectDict), curPlayer.GetPlayerID()) if selectDict: exData = selectDict GameWorld.DebugLog(" ʹÓöàÏîÑ¡Ôñ£¬ÒÔ¶àѡΪ׼! exData=%s" % exData) elif exData: GameWorld.DebugLog(" ʹÓõ¥ÏîÑ¡Ôñ£¬¼æÈݾÉģʽ! exData=%s" % exData) backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = backPack.GetAt(itemIndex) if not ItemCommon.CheckItemCanUse(curItem): GameWorld.DebugLog(" ÎïÆ·ÎÞ·¨Ê¹Óã¡") return if useCnt <= 0: useCnt = curItem.GetCount() GameWorld.DebugLog(" ûָ¶¨Ê¹ÓøöÊý£¬Ä¬ÈÏʹÓÃÈ«²¿=%s" % useCnt) __DoLogic_PlayerUseItemSelf(curPlayer, itemIndex, tick, useCnt, exData) return #--------------------------------------------------------------------- ## ʹÓÃÎïÆ·Çé¿ö»Ø°ü # @param curPlayer µ±Ç°Íæ¼Ò # @param useItemType ʹÓõÄÎïÆ·ÀàÐÍ # @param useItemType ʹÓõÄÎïÆ·ID # @param useItemResult ʹÓõÄÎïÆ·Çé¿ö # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __SendUseItemBackPack(curPlayer, useItemType, useItemID, useItemResult): #¿ÉÁ¬ÐøÊ¹ÓÃÎïÆ·ÅäÖà 0:[ÎïÆ·ÀàÐÍ]£¬1:[ÎïÆ·ID] useItem_CanSeriesUse = ReadChConfig.GetEvalChConfig("UseItem_CanSeriesUse") #---¿ÉÁ¬ÐøÊ¹ÓÃÎïÆ·Åжϣ¬»Ø°ü--- if useItemType in useItem_CanSeriesUse.get(0, []) or useItemID in useItem_CanSeriesUse.get(1, []): # »Ø°ü¸£´üʹÓóɹ¦ if useItemResult: curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitUseFuDai, ChConfig.Def_UseFuDai_Sucess) # »Ø°ü¸£´üʹÓÃʧ°Ü else: curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitUseFuDai, ChConfig.Def_UseFuDai_Fail) return def SendUseItemGetItemResult(curPlayer, useItemID, useCount, getItemInfo, moneyType=0, moneyCount=0): # ֪ͨ¿Í»§¶ËʹÓÃÎïÆ·½á¹û°ü # @param getItemInfo: [{"ItemID":ÎïÆ·ID, "Count":¸öÊý, "IsBind":ÊÇ·ñ°ó¶¨, "IsSuite":ÊÇ·ñÌ××°»¯, "UserData":"×Ô¶¨ÒåÊôÐÔ×Ö·û´®"}, ...] getItemInfo = json.dumps(getItemInfo, ensure_ascii=False) getItemInfo = getItemInfo.replace(" ", "") getItemPack = ChPyNetSendPack.tagMCNotifyUseItemGetItem() getItemPack.Clear() getItemPack.UseItemID = useItemID getItemPack.UseCount = useCount getItemPack.GetItemData = str(getItemInfo) getItemPack.GetItemLen = len(getItemPack.GetItemData) getItemPack.MoneyType = moneyType getItemPack.MoneyCount = moneyCount NetPackCommon.SendFakePack(curPlayer, getItemPack) return #--------------------------------------------------------------------- ## ×¼±¸½áÊø # @param curPlayer µ±Ç°Íæ¼Ò # @param prepareState ×¼±¸×´Ì¬ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnPrepareEnd(curPlayer, prepareState): if prepareState == IPY_GameWorld.pstCatching: callFunc = GameWorld.GetExecFunc(UseItem, "Item_CallNPC.OnPrepareOK") if not callFunc: GameWorld.Log('###³ÌÐòÒì³£,ÎÞ·¨²éÕÒÎļþ Item_CallNPC.py"') return callFunc(curPlayer, GameWorld.GetGameWorld().GetTick()) return return #--------------------------------------------------------------------- #=============================================================================== # //07 33 ʹÓÃÎåÐоí#tagCUseWuXingJuan # tagCUseWuXingJuan * GettagCUseWuXingJuan(); # # class IPY_CUseWuXingJuan # { # public: # //ÎïÆ·Index # int GetItemIndex(); # //еÄÎåÐÐ # int GetNewWuXing(); # }; #=============================================================================== ## ʹÓÃÎåÐоíÖᣨ·â°ü²ÎÊý£© # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None or False # @remarks º¯ÊýÏêϸ˵Ã÷. def UseWuXingJuan(index , tick): return ## ¼ì²âÎïÆ·ÊÇ·ñÊÇÎåÐоíÖá # @param curItem µÈ´ý¼ì²âµÄÎïÆ· # @return ²¼¶ûÖµ # @remarks º¯ÊýÏêϸ˵Ã÷. #=============================================================================== # def CheckWuXingJuan(curItem): # if not ItemCommon.CheckItemCanUse(curItem): # return False # # #Õâ¸öÎïÆ·²»ÊÇÎåÐÐת»»¾íÖá # if curItem.GetEffectByIndex(0).GetEffectID() != ChConfig.Def_Effect_ItemWuXingJuan: # return False # # return True #=============================================================================== ## ʹÓÃ»Ø³Ç # @param curPlayer µ±Ç°Íæ¼Ò # @return None or True # @remarks º¯ÊýÏêϸ˵Ã÷. def UseTownPortal(curPlayer): #¼ì²éÊÇ·ñÊǻسǾí itemIndex = curPlayer.GetDictByKey(ChConfig.Def_Use_Item_303_Index) curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(itemIndex) #ÎïÆ·²»´æÔÚ,²»ÊÇ»Ø³Ç¾í²»´¦Àí if not ItemCommon.CheckItemCanUse(curItem) or curItem.GetItemTypeID() != 303: #²»ÄÜ»ñµÃÎïÆ·IDÖ»ÄÜдËÀ£¬·ñÔòÍæ¼ÒÒÆ¶¯½«ÕÒ²»µ½ÎïÆ·£¬»òID²»Æ¥Åä PlayerControl.NotifyCode(curPlayer, "B66BA2D6-0B3C-4177-B3FE66153B638DD0", [303, 303]) return useCount = 1 itemID = curItem.GetItemTypeID() guID = curItem.GetGUID() dataDict = {"ItemID":itemID, "ItemCount":useCount, "IsBind":curItem.GetIsBind(),"ItemGUID":guID} DataRecordPack.DR_DeleteItem(curPlayer, 'UseTownPortal', dataDict) #ÎïÆ·Ê¹ÓüõÉÙ if curItem.GetCount() > useCount: ItemControler.SetItemCount(curItem, curItem.GetCount() - useCount, curPlayer.GetID(), curPlayer.GetAccID(), curPlayer.GetPlayerName()) else: curItem.Clear() #PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, useCount]) playerControl = PlayerControl.PlayerControl(curPlayer) #°ÑÈËÎïÉèÖûØÖØÉúµã playerControl.SetToBornPlace() return True #=============================================================================== # 07 39 ʹÓÃÖ¸¶¨ÊýÁ¿µÄÎïÆ· tagCUseItemCount # struct tagCUseItemCount # { # tagHead Head; # BYTE Type; //ÎïÆ·ÀàÐÍ # DWORD Count; //ÎïÆ·ÊýÁ¿ # } #=============================================================================== ## 07 39·â°ü ʹÓÃÖ¸¶¨ÊýÁ¿µÄÎïÆ· # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return ÎÞ # @remarks ºÍ¿Í»§¶ËÔ¼¶¨µÄÀàÐÍÀ´È¡µÃÖ¸¶¨ÎïÆ·£¬Ä¿Ç°ÓÃÓÚÀëÏß¹Ò»ú£¬¿ÛǬÀ¤Öé def UseOfflineTime(index, tick): return #=============================================================================== # struct tagCPetUseItemByIndex # { # tagHead Head; # BYTE PetIndex; // ³èÎïÔÚ³èÎïÀ¸µÄË÷Òý # WORD ItemIndex; # }; #=============================================================================== ## 16 08·â°ü ʹÓóèÎïµÀ¾ß # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return ÎÞÒâÒå # @remarks def UsePetItem(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) pack = IPY_GameWorld.IPY_CPetUseItemByIndex() petID = pack.GetPetID() itemIndex = pack.GetItemIndex() #»ñµÃÎïÆ· curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(itemIndex) if not CheckPlayerUseItemSelf(curPlayer, curItem, tick): #´ËÎïÆ·²»¿ÉʹÓà return if curItem.GetType() != ChConfig.Def_ItemType_PetItem: #²»ÊdzèÎïµÀ¾ß return # ³èÎïУÑé rolePet = curPlayer.GetPetMgr().PetList_Find(petID) if rolePet == None: return #»º´æÎïÆ·ÊôÐÔ curItemEffectID = curItem.GetEffectByIndex(0).GetEffectID() curItemTypeID = curItem.GetItemTypeID() curItemCDType = curItem.GetCDType() callFuncName = "" # # Ò×Ë赤 # if curItemEffectID == ChConfig.Def_Effect_PetReSet: # callFuncName = "Item_PetReSet.UsePetItem" # # # Ô컯µ¤ # elif curItemEffectID == ChConfig.Def_Effect_PetUpdateTalent: # callFuncName = "Item_PetUpdateTalent.UsePetItem" # # # ÉñÆíÖ®Àá # elif curItemEffectID == ChConfig.Def_Effect_PetRePoint: # callFuncName = "Item_PetRePoint.UsePetItem" # # # ³èÎï±äÎïÆ· # elif curItemEffectID == ChConfig.Def_Effect_PetEmptySoul: # callFuncName = "Item_PetEmptySoul.UsePetItem" # # # ÖØÏ´¼¼ÄÜ # elif curItemEffectID == ChConfig.Def_Effect_PetRewashSkill: # callFuncName = "Item_PetRewashSkill.UsePetItem" # # # ÖØÏ´×ÊÖÊ # elif curItemEffectID == ChConfig.Def_Effect_PetReSetTalentl: # callFuncName = "Item_PetReSetTalentl.UsePetItem" if callFuncName == '': GameWorld.ErrLog('###ʹÓÃÎïÆ·Òì³£, ÎÞ·¨²éÕÒ %s Ч¹ûID'%(curItemEffectID)) return callFunc = GameWorld.GetExecFunc(UseItem, callFuncName) if not callFunc: GameWorld.ErrLog('###ʹÓÃÎïÆ·Òì³£, ÎÞ·¨²éÕÒ %s Îļþ'%(callFuncName)) return if not callFunc(curPlayer, rolePet, curItem): #ʹÓÃÎïÆ·Ê§°Ü return #------------ʹÓÃÎïÆ·³É¹¦, Ö´ÐÐÏà¹Ø²Ù×÷ curPlayer.Sync_UseItem(curItemTypeID, itemIndex) if curItemCDType: curPlayer.SetItemCD(curItemCDType, tick) return #--------------------------------------------------------------------- def DoMapDropItem(curPlayer, itemList, npcID, dropPosX, dropPosY, isOnlySelfSee=True, isDropDisperse=True): if not itemList: return if isDropDisperse: dropItemList = [] for itemInfo in itemList: if isinstance(itemInfo, list): itemID, itemCount, isAuctionItem = itemInfo # ÅÄÆ·²»²ð if isAuctionItem: dropItemList.append(itemInfo) continue for _ in xrange(itemCount): dropItemList.append([itemID, 1, isAuctionItem]) else: dropItemList.append(itemInfo) else: dropItemList = itemList random.shuffle(dropItemList) # ´òÂÒ˳Ðò index = 0 playerID = curPlayer.GetPlayerID() gameMap = GameWorld.GetMap() sightLevel = PlayerControl.GetMapRealmDifficulty(curPlayer) for posX, posY in ChConfig.Def_DropItemAreaMatrix: resultX = dropPosX + posX resultY = dropPosY + posY if not gameMap.CanMove(resultX, resultY): #Íæ¼Ò²»¿ÉÒÆ¶¯Õâ¸öµã continue if index > len(dropItemList) - 1: break curItem = dropItemList[index] index += 1 if isinstance(curItem, list): itemID, itemCount, isAuctionItem = curItem curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer) if not curItem: continue AddMapDropItem(resultX, resultY, curItem, ownerInfo=[ChConfig.Def_NPCHurtTypePlayer, playerID], dropNPCID=npcID, isOnlySelfSee=isOnlySelfSee, sightLevel=sightLevel) return ## ÔÚµØÉÏÌí¼ÓÎïÆ·(ͳһ½Ó¿Ú) # @param itemPosX λÖÃx # @param itemPosY λÖÃy # @param curItem µ±Ç°ÎïÆ· # @param effIndex ÒªÏÔʾµÄÌØÐ§Ë÷Òý # @param ownerInfo µôÂä¹éÊôÐÅÏ¢[¹éÊôÀàÐÍ, ¹éÊôID, [ÌØÊâ¹éÊôÍæ¼ÒIDÁбí]] # @return ·µ»ØÖµÎÞÒâÒå def AddMapDropItem(itemPosX, itemPosY, curItem, effIndex=0, ownerInfo=[], dropNPCID=0, isOnlySelfSee=False, sightLevel=0): itemDataStr = GetMapDropItemDataStr(curItem, effIndex, ownerInfo, dropNPCID, isOnlySelfSee) curMapItem = GameWorld.GetMapItemManager().AddDropItem(itemPosX, itemPosY, curItem, len(itemDataStr), itemDataStr) if ownerInfo: ownerType, ownerID = ownerInfo[:2] curMapItem.SetOwnerType(ownerType) curMapItem.SetOwnerID(ownerID) if sightLevel > 0: curMapItem.SetSightLevel(sightLevel) if dropNPCID: itemNoteDict = ItemCommon.GetItemNoteDict(curItem, curItem.GetCount()) GameWorld.Log("AddMapDropItem mapItemID=%s,ownerType=%s,ownerID=%s,mapItemDataStr=%s,itemNoteDict=%s" % (curMapItem.GetID(), curMapItem.GetOwnerType(), curMapItem.GetOwnerID(), itemDataStr, itemNoteDict)) return curMapItem def GetMapDropItemDataStr(curItem, effIndex=0, ownerInfo=[], dropNPCID=0, isOnlySelfSee=False): itemData = {} if ItemCommon.CheckItemIsEquip(curItem): # Ìí¼Ó×°±¸ÊôÐÔÏÔʾ itemData.update(GetMapEquipInfo(curItem)) elif curItem.GetCount() > 1: # ½ðÇ®ÊýÁ¿ÏÔʾ itemData[ShareDefine.Def_MapItemInfo_Count] = curItem.GetCount() if effIndex > 0: itemData[ShareDefine.Def_MapItemInfo_Effect] = effIndex if ownerInfo and len(ownerInfo) > 2 and ownerInfo[2]: itemData[ShareDefine.Def_MapItemInfo_SpecOwner] = ownerInfo[2] #GameWorld.DebugLog("µôÂäÎïÆ·ÌØÊâ¹éÊô: %s" % ownerInfo[2]) if dropNPCID: itemData[ShareDefine.Def_MapItemInfo_NPCID] = dropNPCID if isOnlySelfSee: itemData[ShareDefine.Def_MapItemInfo_OnlySelfSee] = 1 return json.dumps(itemData, ensure_ascii=False) ## »ñµÃµôÂä×°±¸µÄÏÔʾÐÅÏ¢ # @param curItem µ±Ç°ÎïÆ· # @return ·µ»ØÖµÎÞÒâÒå def GetMapEquipInfo(curItem): infoDict = {} # Ì××° if curItem.GetIsSuite(): infoDict[ShareDefine.Def_MapItemInfo_IsSuite] = 1 return infoDict # ÌØ±ðÉ趨:׿ԽÎïÆ·±Ø´øÎäÆ÷¼¼ÄÜÔöǿЧ¹û£¬Ê¹ÓÃÕßÇëÌØ±ð×¢Òâ ## ×°±¸¶¯Ì¬ÊôÐÔ£¬Ö»ÓÃÓÚδÉèÖÃÊôÐÔµÄsingleItem£¬roleItemʹÓöà´Î·¢±³°üˢаü # @param curItem Íæ¼ÒʵÀý # @param equipData # @return def EquipAddAdditionEx(curItem, equipData): # °ó¶¨ #if equipData.isBind: # ItemControler.SetItemIsBind(curItem, equipData.isBind) if not ItemCommon.CheckItemIsEquip(curItem): return #=========================================================================== # # Ç¿»¯µÈ¼¶ # if equipData.starLV: # curItem.SetItemStarLV(equipData.starLV) # # ´ò¿× # if 0 < equipData.holeCnt <= curItem.GetMaxHoleCount(): # curItem.SetCanPlaceStoneCount(equipData.holeCnt) # # # ¸øÏâǶ±¦Ê¯ # for i, stoneID in enumerate(equipData.stoneData): # if i > equipData.holeCnt - 1: # break # # if stoneID <= 0: # continue # # curItem.SetStone(i, stoneID) #=========================================================================== # Ì××° #if equipData.isSuite: # curItem.SetIsSuite(equipData.isSuite) #if equipData.suiteLV: # curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV) # ÎïÆ·À´Ô´ if equipData.source: curItem.SetUserAttr(ShareDefine.Def_IudetSource, equipData.source) # ´«ÆæÊôÐÔ if equipData.legendAttrIDList and equipData.legendAttrValueList: curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID) curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue) for i in xrange(len(equipData.legendAttrIDList)): curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, equipData.legendAttrIDList[i]) curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, equipData.legendAttrValueList[i]) # ´«ÆæÊôÐÔ - Éñ if equipData.legendAttrIDListShen and equipData.legendAttrValueListShen: curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen) curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen) for i in xrange(len(equipData.legendAttrIDListShen)): curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, equipData.legendAttrIDListShen[i]) curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, equipData.legendAttrValueListShen[i]) # ´«ÆæÊôÐÔ - ÏÉ if equipData.legendAttrIDListXian and equipData.legendAttrValueListXian: curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian) curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian) for i in xrange(len(equipData.legendAttrIDListXian)): curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, equipData.legendAttrIDListXian[i]) curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, equipData.legendAttrValueListXian[i]) # ´«ÆæÊôÐÔ - ¼« if equipData.legendAttrIDListJi and equipData.legendAttrValueListJi: curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi) curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi) for i in xrange(len(equipData.legendAttrIDListJi)): curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, equipData.legendAttrIDListJi[i]) curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, equipData.legendAttrValueListJi[i]) ItemCommon.MakeEquipGS(curItem) return ## ÅжÏ×°±¸ÊÇ·ñÊǿɼÓǿװ±¸ # @param curItem ÎïÆ·ÊµÀý # @return None def CheckItemCanPlus(curItem): # ´ÓÇ¿»¯±íÖлñµÃÊý¾Ý if curItem.GetType() in ReadChConfig.GetEvalChConfig("EquipPlus_EquipType"): return True return False ( Def_Discount_ItemType, #ÕÛ¿Û¿¨ÎïÆ·ÀàÐÍ Def_SelectMore_ItemType #¶àÑ¡Àñ°üÎïÆ·ÀàÐÍ ) = range(2) #// A3 07 ¹ýÆÚÎïÆ·Ðø·Ñ #tagCMItemRenew # #struct tagCMItemRenew # #{ # tagHead Head; # WORD ItemIndex; //ÎïÆ·ÔÚ±³°üÖÐË÷Òý # BYTE MoneyType; //½ðÇ®ÀàÐÍ #}; def OnItemRenew(index, clientData, tick): ## ¹ýÆÚÎïÆ·Ðø·Ñ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) timeOutItemIndex = clientData.ItemIndex moneyType = clientData.MoneyType #1 ÏÉÓñ 2 °óÓñ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) timeOutItem = itemPack.GetAt(timeOutItemIndex) if not ItemCommon.CheckItemCanUse(timeOutItem): return timeOutItemID =timeOutItem.GetItemTypeID() itemTimeOutDict = IpyGameDataPY.GetFuncEvalCfg('ItemTimeOut') if str(timeOutItemID) not in itemTimeOutDict: GameWorld.DebugLog('ItemTimeOut ûÓиÃÎïÆ·Ðø·ÑÅäÖà timeOutItemID=%s'%timeOutItemID) return if ItemCommon.CheckItemCanUseByExpireTime(timeOutItem): GameWorld.DebugLog('¹ýÆÚÎïÆ·Ðø·Ñ ¸ÃÎïÆ·Î´¹ýÆÚ timeOutItemID=%s'%timeOutItemID) return renewInfo = itemTimeOutDict[str(timeOutItemID)] changeItemID = renewInfo[0] if moneyType == 1: needMoney = renewInfo[1] elif moneyType == 2: needMoney = renewInfo[2] else: return if not needMoney: return #¿ÛÇ® infoDict = {ChConfig.Def_Cost_Reason_SonKey:timeOutItemID} if not PlayerControl.PayMoney(curPlayer, moneyType, needMoney, ChConfig.Def_Cost_BuyStoreItem, infoDict): return #ÏÈɾԭÎïÆ·ÔÙ¸øÐÂÎïÆ· ItemCommon.DelItem(curPlayer, timeOutItem, 1, False, "RenewItem") ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, 0, [IPY_GameWorld.rptItem]) PlayerControl.NotifyCode(curPlayer, 'Guardian_ContinuePay') return #// A3 08 ÎïÆ·¹ýÆÚ #tagCMItemTimeout # #struct tagCMItemTimeout # #{ # tagHead Head; # BYTE PackType; //±³°üÀàÐÍ # BYTE ItemIndex; //ÎïÆ·ÔÚ±³°üÖÐË÷Òý # BYTE IsAll; //ÊÇ·ñ´¦ÀíËùÓйýÆÚÎïÆ· #}; def OnItemTimeout(index, clientData, tick): packType = clientData.PackType itemIndex = clientData.ItemIndex isAll = clientData.IsAll curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) backPack = curPlayer.GetItemManager().GetPack(packType) if not backPack: return if isAll: # 20201223 Ö÷¸ÉÈ¡ÏûÅÄÆ·ÓÐЧʱ³¤É趨 # # Ŀǰ½öÕë¶ÔÅÄÆ· # GameWorld.DebugLog("=== Ò»¼ü´¦ÀíËùÓйýÆÚÎïÆ· ===") # curTime = int(time.time()) # auctionItemTimeout = IpyGameDataPY.GetFuncCfg("AuctionItem", 1) # for i in xrange(backPack.GetCount()): # curItem = backPack.GetAt(i) # if not ItemCommon.CheckItemCanUse(curItem): # continue # if not ItemControler.GetIsAuctionItem(curItem): # continue # auctionItemCreateTime = curItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime) # if not auctionItemCreateTime: # continue # if curTime - auctionItemCreateTime < auctionItemTimeout * 3600: # # δ¹ýÆÚ # continue # GameWorld.DebugLog("Íæ¼ÒÅÄÆ·¹ýÆÚ: i=%s,itemID=%s" % (i, curItem.GetItemTypeID()), curPlayer.GetPlayerID()) # ItemControler.SetIsAuctionItem(curItem, False, curPlayer) # # # ÕûÀí±³°ü # ItemControler.ResetItem(curPlayer, packType, 0, 0, tick) return curItem = backPack.GetAt(itemIndex) if not ItemCommon.CheckItemCanUse(curItem): GameWorld.DebugLog("ÎïÆ·²»´æÔÚ!") return # ÅÄÆ· if ItemControler.GetIsAuctionItem(curItem): GameWorld.DebugLog("Íæ¼ÒÅÄÆ·¹ýÆÚ: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID()) ItemControler.SetIsAuctionItem(curItem, False, curPlayer) return return