#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package EventShell # @todo: ʼþ¹ÜÀíÆ÷ # # @author: eggxp # @date 2010-4-20 # @version 6.8 # # @note: ¹ÜÀíËùÓÐNPCʼþ´¥·¢½Ó¿Ú #--------------------------------------------------------------------- # @change: "2013-04-15 11:00" wdb ½«ComparePlayerLV_UseItem¸üÃûΪCheckItemUseLV£¬·ÅÈëItemControler # @change: "2013-04-18 17:00" wdb ÎïÆ·ÑÕɫʹÓÃÐÞ¸Ä # @change: "2013-05-03 17:00" wdb npcÉ̵êÐÞ¸Ä # @change: "2013-05-07 15:30" wdb ²Ö¿âÐÞ¸Ä # @change: "2013-05-20 11:00" wdb Ôö¼Ó¸±±¾É¨µ´ # @change: "2013-05-29 11:55" Alee ÐÂÔöɱµÈ¼¶·¶Î§µÄÈÎÎñÂß¼­(дËÀ) # @change: "2013-05-30 10:30" wdb ×°±¸±¦Ê¯ÏâǶµ÷Õû # @change: "2013-06-06 21:30" Alee Õ½¶·×´Ì¬²»¿É½øÈëÈÎÎñ¶Ô»°£¬µ¼Ö¶ÔÏó±ä¸üµÈÎÊÌâ # @change: "2013-07-08 15:00" Alee Ìí¼ÓÆÕͨǿ»¯´¥·¢ÈÎÎñ # @change: "2013-07-09 15:30" Alee ÒѽÓÈÎÎñÉý¼¶´¥·¢Âß¼­ # @change: "2013-07-19 20:00" Alee Ìí¼Ó»Ø¹º # @change: "2013-07-26 17:00" Alee VIP´ò¿ªÔ¶³Ì²Ö¿â # @change: "2013-09-10 20:10" Alee ϵͳÌáʾ³åÍ» # @change: "2013-09-18 17:00" Alee Í˳öËø¶¨Í˳ö½»Ò× # @change: "2013-09-23 19:30" Alee ºìÃûÌáʾÐÞ¸Ä # @change: "2013-11-15 20:20" hxp ¹Ø±Õ07 3A¹ºÂò±³°ü·â°ü¹¦ÄÜ£¬Ôö¼Ó±³°ü³É¹¦ÏµÍ³Ìáʾ # @change: "2013-12-12 14:30" hxp Ôö¼Ó×êʯ¹ºÂò±³°ü¼Æ·Ñµãʼþͬ²½ # @change: "2013-12-13 12:20" hxp ÐÞ¸ÄÊ×µÇÎïÆ·°ó¶¨ÉèÖà # @change: "2013-12-27 16:00" Alee ɾ³ý¶àÓà´úÂë # @change: "2014-01-08 13:20" hxp ÐÞ¸Ä×êʯ¹ºÂò±³°ü»¨·Ñ×êʯ¼Æ·Ñµãʼþͬ²½£¬ÔÚPayMoneyÄڲ㴦Àí # @change: "2014-02-17 17:30" hxp Ôö¼Ó¹ºÂò·ûÎı³°ü¸ñ×Ó # @change: "2014-03-18 19:00" hxp Ê×µÇÔùËÍÎïÆ·¸ÄΪÅäÖÃÎļþÅäÖà # @change: "2014-03-27 19:30" hxp Ôö¼Ó×øÆï»»×° # @change: "2014-04-04 20:00" hxp Ôö¼Ó×øÆï»»¼¼ÄÜ£¬¹Ù¾ô¼¼ÄÜ # @change: "2014-04-07 12:30" hxp ³á°òÏà¹Ø±³°üÎïÆ·½»»» # @change: "2014-04-17 20:30" hxp ÉñÆ÷ʱװ»»×° # @change: "2014-04-22 17:50" xcc Ôö¼ÓÔÚÏßʱ¼äÃâ·Ñ¿ªÆô±³°ü¹¦ÄÜ # @change: "2014-04-26 19:30" hxp ÁìµØÕ½ÇÅ # @change: "2014-04-28 14:00" Alee ɾ³ý²âÊÔ×ʽð # @change: "2014-05-23 14:30" xcc Ôö¼Óħ·½±³°üÎïÆ··ÅÈë½ÇÉ«±³°üµÄ½Ó¿Ú # @change: "2014-05-23 15:40" xcc ÐÞ¸´È«²¿·ÅÈë·ÅÈëʧ°ÜµÄbug # @change: "2014-06-06 17:00" hxp Ôö¼Ó¿ìËÙÍê³ÉÈÎÎñʼþ # @change: "2014-06-23 14:30" Alee ¹Ø±ÕÊä³ö # @change: "2014-07-24 21:30" hxp Ôö¼ÓÉèÖÃÅÜ»·ÈÎÎñÐǼ¶£¬Ò»¼üÍê³ÉËùÓÐÅÜ»·ÈÎÎñ # @change: "2014-07-31 21:30" hxp È¡ÏûºìÃû²»ÄÜÓëNPC¶Ô»°ÏÞÖÆ # @change: "2014-12-25 16:10" ljd ͬ²½ÉÏÒ»´Î±³°ü¿ª¸ñʱ¼ä # @change: "2015-01-10 23:00" hxp ²Ö¿â¹ºÂòÌØÊâ´¦Àí # @change: "2015-01-14 00:30" hxp Ôö¼Óʼþ»ã±¨ # @change: "2015-01-22 15:00" hxp ¾«¼òlogÊä³ö # @change: "2015-03-20 15:00" hxp Ôö¼ÓÊÕ»ñ¹ûʵ£¬¸±±¾²É¼¯Ê¼þ£»Ôö¼Ó½øÈë¼ÒÔ°´«ËÍÃÅÈë¿Ú # @change: "2015-03-23 11:00" Alee ¼Ò×åÉý¼¶Ê¼þ¸ÄΪ´¥·¢ËùÓнڵã # @change: "2015-03-28 11:40" ljd Ôö¼ÓÈÎÎñ°ëСʱ´¥·¢Ê¼þ×¢²á¡¢¹ºÂòÈÕ³£ÈÎÎñÉÏÏÞ # @change: "2015-04-09 15:00" hxp ¸±±¾ÖÐÎÞ·¨É¾³ýÈÎÎñÌáʾÐÞ¸Ä # @change: "2015-06-15 23:00" hxp ʱװ»»×° # @change: "2015-07-13 14:00" hxp Á÷ÏòÔö¼ÓÍæ¼Ò²ÎÊý # @change: "2015-07-16 15:00" zqx Ôö¼ÓµÀ¾ß¿ªÆô±³°ü¸ñ×Ó # @change: "2015-08-10 14:00" zqx Ð޸Ŀª¸ñ¿ÛµÀ¾ßÂß¼­ # @change: "2015-12-08 18:00" hxp Ôö¼Ó²»ÊÇͨ¹ýNPC¶Ô»°½çÃæ½øÈëµØÍ¼IDÅäÖà # @change: "2016-05-17 18:00" hxp Ôö¼Ó·ÇNPC¶Ô»°Íê³ÉÈÎÎñÁìÈ¡½±Àø # @change: "2016-07-27 10:40" xdh Ê״εǼ¼¤»îÅå´÷³ÆºÅ # @change: "2016-10-28 10:40" xdh ×øÆï¡¢³á°ò¡¢³È×°ÊýÁ¿´¥·¢ÈÎÎñ # @change: "2016-12-26 21:00" xdh ¾ôλÉý½×¡¢²¿Î»Ç¿»¯ÐǼ¶´¥·¢ÈÎÎñ #--------------------------------------------------------------------- #"""Version = 2016-12-26 21:00""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import EventSrc import ChConfig import PlayerControl import FunctionNPCCommon import FBLogic import ItemControler import ItemCommon import ShareDefine import IpyGameDataPY import NPCCommon import math import random Def_Warehouse_FuncName = "Func_6" # ²Ö¿âÏà¹Ø¹¦ÄÜpyÃû #--------------------------------------------------------------------- #µ¼ÈëËùÓеÄNPCAI GameWorld.ImportAll("Script\\Event\\" , "EventSrc") GameWorld.ImportAll("Script\\Event\\" , "") #--------------------------------------------------------------------- ##C++´¥·¢·â°üÖØ¶ÁËùÓÐʼþ #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++´¥·¢·â°üÖØ¶ÁËùÓÐʼþ def ReloadEvent(tick): GameWorld.__ReloadScript() # Ö»µ÷ÓÃÒ»´Î£¬ÓëºóÌ¨ÖØ¶Á½Å±¾Ò»Ö scriptPath = ChConfig.GetAppPath() + "Script\\Event\\EventSrc" GameWorld.ReloadScript(scriptPath, "EventSrc") scriptPath = ChConfig.GetAppPath() + "Script\\Event" GameWorld.ReloadScript(scriptPath, "") return ############################################################# ##»Ø¾ø×°±¸¼Ó¹¤·â°ü #@param curPlayer Íæ¼ÒʵÀý #@param funcAnswer ÏìÓ¦µÄʼþ #@return ÎÞ #@remarks »Ø¾ø×°±¸¼Ó¹¤·â°ü def SyncMakeItemRefuse(curPlayer, funcAnswer): answerDict = { 'EquipAddStar' : ShareDefine.Def_mitLVUpStar, #ÉýÐÇ } answerType = answerDict.get(funcAnswer) if answerType == None: return curPlayer.Sync_MakeItemAnswer(answerType, ChConfig.Def_ComposeState_None) #--------------------------------------------------------------------- ##Ô¶³ÌÖ´ÐÐNPC¹¦ÄÜ #@param curPlayer Íæ¼ÒʵÀý #@param responseType ʼþÏìÓ¦ÀàÐÍ #@param funcAnswer ÏìÓ¦µÄʼþ #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÊÇ·ñÖ´Ðгɹ¦ #@remarks Ô¶³ÌÖ´ÐÐNPC¹¦ÄÜ def FuncDirectCall(curPlayer, responseType, funcAnswer, tick, clientData=None): #Ô¶³Ìʼþ,״̬ͳһÅÐ¶Ï #if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer): # #Í˳ö»Ø°ü # SyncMakeItemRefuse(curPlayer, funcAnswer) # return callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer)) if callFunc == None: #º¯Êýµ÷Óò»¿ÉʹÓà GameWorld.Log("¹¦ÄÜ»ØÓ¦Ê¼þÏìÓ¦ %s %s²»¿ÉʹÓÃ"%(responseType, funcAnswer) , curPlayer.GetPlayerID()) #Í˳ö»Ø°ü SyncMakeItemRefuse(curPlayer, funcAnswer) return if clientData: return GameWorld.GetPsycoFunc(callFunc)(curPlayer, clientData, tick) return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick) #--------------------------------------------------------------------- ## NPC¶Ô»°Ö´ÐÐNPC¹¦ÄÜ #@param curPlayer Íæ¼ÒʵÀý #@param funcAnswer ÏìÓ¦µÄʼþ #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÊÇ·ñÖ´Ðгɹ¦ #@remarks NPC¶Ô»°Ö´ÐÐNPC¹¦ÄÜ def FuncCall(curPlayer, funcAnswer, tick): tagObj = curPlayer.GetActionObj() if tagObj == None: #ûÓÐÄ¿±ê GameWorld.Log("FuncCall -> ûÓÐÄ¿±ê" , curPlayer.GetPlayerID()) return if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC: #̸»°¶ÔÏó²»¶Ô GameWorld.Log("FuncCall -> ̸»°¶ÔÏó²»¶Ô" , curPlayer.GetPlayerID()) return curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex()) if curNPC == None: #ûÓÐÕâ¸öNPC GameWorld.Log("FuncCall ->ûÓÐÕâ¸öNPC" , curPlayer.GetPlayerID()) return responseType = "Func_%d"%curNPC.GetFunctionType() if not responseType: return callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer)) if callFunc == None: #º¯Êýµ÷Óò»¿ÉʹÓà GameWorld.Log("FuncCall ->¹¦ÄÜ»ØÓ¦Ê¼þÏìÓ¦ %s %s²»¿ÉʹÓÃ"%(responseType, funcAnswer) , curPlayer.GetPlayerID()) return return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick) #=============================================================================== # //A2 03 »Ø¹ºÎïÆ· #tagCMBuyItemBack # # struct tagCMBuyItemBack # { # tagHead Head; # BYTE Index; //±³°üλÖÃË÷Òý # }; #=============================================================================== ## »Ø¹ºÎïÆ· # @param None # @return None def BuyItemBack(index, clientPack, tick): #µÃµ½Íæ¼ÒµÄ¶ÔÏó #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick) return #=============================================================================== # //0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse # tagCPutItemInWarehouse * GettagCPutItemInWarehouse(); # # class IPY_CPutItemInWarehouse # { # public: # //±³°üλÖà # int GetItemIndex(); # //·ÅÈëλÖà # int GetWarehouseIndex(); # //·ÅÈëÊýÁ¿ # int GetCount(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦//0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse def PutItemInWarehouse(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "PutItemInWarehouse", tick) return #--------------------------------------------------------------------- #=============================================================================== # //0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse # tagCGetItemInWarehouse * GettagCGetItemInWarehouse(); # # class IPY_CGetItemInWarehouse # { # public: # //²Ö¿âλÖà # int GetWarehouseIndex(); # //ÎïÆ·Î»Öà # int GetItemIndex(); # //È¡³öÊýÁ¿ # int GetCount(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦//0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse def GetItemInWarehouse(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "GetItemInWarehouse", tick) return #--------------------------------------------------------------------- #=============================================================================== # //07 0F ±³°üÖØÕû#tagCItemPackReset # //¶ÔÐÔÄÜÓбȽϴóµÄÓ°Ïì # # struct tagCItemPackReset # { # BYTE Type; //±³°üÀàÐÍ # WORD ItemBeginIndex; //ÎïÆ·ÆðʼË÷Òý # WORD ItemEndIndex; //ÎïÆ·½áÊøË÷Òý # }; #=============================================================================== ## ÎïÆ·ÖØÕû(·â°ü²ÎÊý) # @param index ÎïÆ·Ë÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def ResetItem(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CItemPackReset() sendPack_PackIndex = sendPack.GetType() sendPack_ItemBeginIndex = sendPack.GetItemBeginIndex() sendPack_ItemEndIndex = sendPack.GetItemEndIndex() #·â°ü¼ì²é if sendPack_PackIndex not in ChConfig.Def_CanItemResetPack: GameWorld.ErrLog('ResetItem TypeErr = %s'%(sendPack_PackIndex), curPlayer.GetID()) return #Íæ¼Ò±³°ü¼ì²é rolePack = curPlayer.GetItemManager().GetPack(sendPack_PackIndex) if sendPack_ItemBeginIndex < 0 or sendPack_ItemBeginIndex >= sendPack_ItemEndIndex \ or sendPack_ItemEndIndex >= rolePack.GetCount(): GameWorld.ErrLog('ResetItem IndexErr = %s,%s'%(sendPack_ItemBeginIndex, sendPack_ItemEndIndex), curPlayer.GetID()) return #²Ö¿â±³°üÌØÊâ´¦Àí: ÿ´ÎÕûÀíÒ»Ò³ #=========================================================================== # if sendPack_PackIndex == IPY_GameWorld.rptWarehouse: # #if sendPack_ItemEndIndex - sendPack_ItemBeginIndex >= ChConfig.Def_ItemReset_WarehousePageCnt: # # GameWorld.ErrLog('ResetItem WarehouseIndexErr = %s,%s'%(sendPack_ItemBeginIndex, sendPack_ItemEndIndex), curPlayer.GetID()) # # return # # #Íæ¼Òµ±Ç°×´Ì¬²»ÊÇ²Ö¿â´æÈ¡×´Ì¬ # if curPlayer.GetWarehouseState() != IPY_GameWorld.wsWarehouse: # return #=========================================================================== #±³°üÕûÀíÂß¼­ ItemControler.ResetItem(curPlayer, sendPack_PackIndex, sendPack_ItemBeginIndex, sendPack_ItemEndIndex, tick) return #=============================================================================== # #//07 3CͨÓñ³°ü²Ù×÷#tagCBackpackOperate # #//¶ÔÐÔÄÜÓ°ÏìºÜС # //////////////////////////////////////////////////////////// # tagCBackpackOperate*GettagCBackpackOperate(); # class IPY_CBackpackOperate # { # int GetSrcBackpack();//Ô´±³°üÀàÐÍ # int GetDesBackPack();//Ä¿±ê±³°üÀàÐÍ # int GetSrcIndex();//Æðʼλ # int GetDestIndex();//Ä¿±êλÖà # int GetCount();//ÎïÆ·ÊýÁ¿ # } #=============================================================================== ## ͨÓñ³°ü²Ù×÷#tagCBackpackOperate # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ÎÞ·µ»ØÖµ # @remarks 07 3CͨÓñ³°ü²Ù×÷#tagCBackpackOperate def BackpackOperate(index, tick): # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendPack = IPY_GameWorld.IPY_CBackpackOperate() # pack_SrcBackpack = sendPack.GetSrcBackpack() # pack_DesBackPack = sendPack.GetDesBackPack() # pack_SrcIndex = sendPack.GetSrcIndex() # pack_DestIndex = sendPack.GetDestIndex() # pack_ItemCount = sendPack.GetCount() # # FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack, # pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick) return #--------------------------------------------------------------------- #=============================================================================== # //07 3D ͨÓñ³°üÎïÆ·½»»»#tagCPackItemExchange # //¶ÔÐÔÄܼ¸ºõÎÞÓ°Ïì # struct tagCPackItemExchange # { # BYTE SrcBackpack;//Ô´±³°üÀàÐÍ # BYTE DesBackPack;//Ä¿±ê±³°üÀàÐÍ # WORD SrcIndex;//ÆðʼλÖà # WORD DestIndex;//Ä¿±êλÖà # }; #=============================================================================== ## ͨÓñ³°üÎïÆ·½»»»#tagCPackItemExchange # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ÎÞ·µ»ØÖµ # @remarks //07 3D ͨÓñ³°üÎïÆ·½»»»#tagCPackItemExchange def PackItemExchange(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CPackItemExchange() pack_SrcBackpack = sendPack.GetSrcBackpack() pack_DesBackPack = sendPack.GetDesBackPack() pack_SrcIndex = sendPack.GetSrcIndex() pack_DestIndex = sendPack.GetDestIndex() #FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack, # pack_SrcIndex, pack_DestIndex, tick) return #=============================================================================== #//07 41 ͨÓùºÂòPack¿Õ¼ä#tagCOpenPackCount # struct tagCOpenPackCount # { # tagHead Head; # BYTE PackType; //±³°üÀàÐÍ:rptItem, rptEquip, rptWarehouse # BYTE Count; //¹ºÂò¸ñÊý # }; #=============================================================================== ##¹ºÂò¸÷ÖÖ°ü¹ü¸ñ×Ó # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå def OpenPackCount(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) pack = IPY_GameWorld.IPY_COpenPackCount() packType = pack.GetPackType() #buyCount = pack.GetCount() __DoOpenPackCount(curPlayer, packType) return def __DoOpenPackCount(curPlayer, packType): costMoneyTypeDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 1, {}) costMoneyValueDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 2, {}) openGridListDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 3, {}) if str(packType) not in costMoneyTypeDict or str(packType) not in costMoneyValueDict or str(packType) not in openGridListDict: GameWorld.ErrLog("¸Ã±³°ü²»¿É¹ºÂò! packType=%s" % packType) return moneyType = costMoneyTypeDict[str(packType)] costValueList = costMoneyValueDict[str(packType)] openGridList = openGridListDict[str(packType)] curPack = curPlayer.GetItemManager().GetPack(packType) curPackMaxCnt = curPack.GetMaxCount() initCnt = ItemCommon.GetPackInitCount(packType) alreadyOpenCnt = ItemCommon.GetPackOpenItemCnt(curPlayer, packType) canOpenGridCnt = curPackMaxCnt - initCnt - alreadyOpenCnt nextBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PackBuyCnt % packType) + 1 nextOpenCnt = openGridList[nextBuyCnt - 1] if len(openGridList) >= nextBuyCnt else openGridList[-1] moneyCnt = costValueList[nextBuyCnt - 1] if len(costValueList) >= nextBuyCnt else costValueList[-1] if canOpenGridCnt < nextOpenCnt: #ÊýÁ¿³¬¹ý×î´ó¸ñ×ÓÊý GameWorld.DebugLog("¹ºÂò±³°ü¸ñ×Ó£¬ÊýÁ¿³¬¹ý×î´ó¸ñ×ÓÊý£¡packType=%s,initCnt=%s,alreadyOpenCnt=%s,ÒѹºÂò´ÎÊý=%s,curPackMaxCnt=%s,canOpenGridCnt=%s < %s" % (packType, initCnt, alreadyOpenCnt, nextBuyCnt - 1, curPackMaxCnt, canOpenGridCnt, nextOpenCnt)) return infoDict = {"BuyCount":nextBuyCnt, ChConfig.Def_Cost_Reason_SonKey:packType} if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1): return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PackBuyCnt % packType, nextBuyCnt) PlayerControl.Init_PackCount(curPlayer, packType) ItemCommon.SyncPackBuyCnt(curPlayer, packType) return #=============================================================================== #//A2 04 ÇëÇó´ò¿ªÔ¶³Ì²Ö¿â #tagCMOpenLongWarehouse # #struct tagCMOpenLongWarehouse #{ # tagHead Head; #}; #=============================================================================== ## A2 04 ÇëÇó²Ö¿âÎïÆ· # @param index Ë÷Òý # @param clientData ·â°ü½á¹¹Ìå # @param tick ʱ¼ä´Á # @return None # @remarks def PlayerOpenLongWarehouse(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # Ôݲ»¼ÓCD·À·¶ curPlayer.Sync_WarehouseItem() return #// A2 24 ´¥ÅöNPC #tagCMTouchNPC # #struct tagCMTouchNPC #{ # tagHead Head; # DWORD ObjID; #}; def MoveTouchNPC(index, clientData, tick): #´¥ÅöNPC curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) eventNPCID = clientData.ObjID curNPC = GameWorld.GetNPCManager().FindNPCByID(eventNPCID) #ûÓÐÕâ¸öNPC if curNPC == None : return dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), curNPC.GetPosX(), curNPC.GetPosY()) if dist > ChConfig.Def_EventDist: #Íæ¼Ò¾àÀë¹ýÔ¶, ²»ÄÜ´¥·¢ return if curNPC.GetType() != ChConfig.ntTouchKill: return if not FBLogic.OnCanMoveTouchNPC(curPlayer, curNPC, tick): return #¸±±¾ FBLogic.OnMoveTouchNPC(curPlayer, curNPC, tick) #Âß¼­´¦ÀíÍêºóɱËÀNPC npcControl = NPCCommon.NPCControl(curNPC) npcControl.SetKilled() return