#!/usr/bin/python # -*- coding: GBK -*- ##@package PlayerTrade # Íæ¼Ò½»Ò×Âß¼­ # # @author panwei # @date 2010-4-28 # @version 2.3 # # @change: "2013-03-18 16:30" wdb ½»Ò׿ªÆô # @change: "2013-04-12 14:30" wdb ÎÞÎïÆ·½ðÇ®½»Ò×ÅжϴíÎó # @change: "2013-09-27 15:20" hxp Ôö¼Óµ¥·½ÃæÍ˳ö½»Ò×ʱ֪ͨ¶Ô·½Í˳ö½»Ò×ÐÅÏ¢ # @change: "2013-10-12 21:10" Alee ϵͳÌáʾ # @change: "2013-10-17 10:50" hxp Ôö¼Ó½»Ò׵ȼ¶ÏÞÖÆ # @change: "2013-12-10 15:20" hxp Ôö¼Ó½»Ò×½ðÇ®ÀàÐÍÏÞÖÆ # @change: "2013-12-16 18:30" hxp Ð޸Ľ»Ò×¼ì²â£¬ÐÞ¸ÄÎÞ½»Ò×ÎïÆ·Ê±·¢Ëͽ»Ò×½áÊø # @change: "2013-12-20 10:50" xmnathan ½»Ò×Åж¨Ð޸ģ¬Ç¿»¯7ÒÔÉϼ°ÏâǶ±¦Ê¯×°±¸²»ÔÊÐí½»Ò× # @change: "2014-01-07 15:30" hxp ϵͳmarkÐÞ¸Ä # @change: "2015-01-14 00:30" hxp Ôö¼Ó½»Ò×ʼþ»ã±¨ # @change: "2015-06-04 11:00" hxp °ó¶¨ÎïÆ·²»¿É½»Ò×; ·À·¶²»¿É½»Ò×µÄÎïÆ·²»¿É½»Ò× # @change: "2015-07-03 16:00" zqx È¥³ýGMÏÞÖÆ # @change: "2016-03-17 19:00" hxp ÐÞ¸´LostItemÁ÷ÏòÎÞ×°±¸ÏêϸÐÅÏ¢ÎÊÌâ #--------------------------------------------------------------------- """Version = 2016-03-17 19:00""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import ChConfig import ItemControler import ItemCommon import PlayerRequest import PlayerControl import FunctionNPCCommon #import PlayerVip import DataRecordPack import ReadChConfig import ShareDefine import EventReport import GameObj #--------------------------------------------------------------------- #=============================================================================== # ½»Ò×ÏûÏ¢Ìáʾ curPlayer.TradeMsg # 1. ¶Ô·½¾Ü¾ø½»Ò× # 2. ¶Ô·½ÎÞ»ØÓ¦ # 3. ½»Ò×ʧ°Ü, Ô­Òò: ¶Ô·½½ðÇ®³¬¹ýÉÏÏÞ # 4. ½»Ò×ʧ°Ü, Ô­Òò: ¶Ô·½±³°ü¿Õ¼ä²»×ã # 5. ½»Ò×ʧ°Ü, Ô­Òò: ¶Ô·½ÒÑÀëÏß #=============================================================================== #½»Ò×ÇëÇó #class IPY_CPlayerTradeAsk #{ #public: # # int GetTagPlayerID(); #}; ## ÅжÏÊÇ·ñÄܹ»¿ªÊ¼½»Ò× # @param curPlayer µ±Ç°Íæ¼Ò # @param curTagPlayer Ä¿±êÍæ¼Ò # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def __CanStartTrade(curPlayer, curTagPlayer): #״̬Åж¨ if curPlayer.GetPlayerAction() not in ChConfig.Def_CanTradeState or curPlayer.IsMoving(): PlayerControl.NotifyCode(curPlayer, "Business_Fail01") #PlayerControl.NotifyCode(curTagPlayer, "Business_Fail02") return False #״̬Åж¨ if curTagPlayer.GetPlayerAction() not in ChConfig.Def_CanTradeState or curTagPlayer.IsMoving(): PlayerControl.NotifyCode(curPlayer, "ApplyDealingLost04") return False return True ## ·¢³ö½»Ò×ÇëÇó(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return True or False def TradeAsk(index, tick): sendPack = IPY_GameWorld.IPY_CPlayerTradeAsk() #·¢Æð½»Ò×Íæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #Ä¿±êÍæ¼ÒID curTagPlayerID = sendPack.GetTagPlayerID() #½»Ò×Ä¿±êÍæ¼Ò curTagPlayer = GameWorld.GetObj(curTagPlayerID, IPY_GameWorld.gotPlayer) #·â°ü¼ì²é if curTagPlayer == None : PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_795514") return False #½»Ò×»ù±¾Åж¨ if not TradeBasicCondition(curPlayer, curTagPlayer): return False #Ë«·½×´Ì¬ÅÐ¶Ï if not __CanStartTrade(curPlayer, curTagPlayer): return False #ÎÞ·¨ºÍ×Ô¼º½»Ò× if curPlayer.GetID() == curTagPlayerID : GameWorld.Log("TradeAsk -> ÎÞ·¨ºÍ×Ô¼º½»Ò×" , curPlayer.GetPlayerID()) return False #Ìí¼ÓÇëÇó curPlayer.AddRequest(curTagPlayerID, IPY_GameWorld.reqTrade, tick, ChConfig.Def_EventClearTime) #ÉèÖõ±Ç°×´Ì¬ÎªÑ¯Îʽ»Ò×״̬ curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeAsk) #ÉèÖñ»Ñ¯ÎÊÈËΪ±»Ñ¯ÎÊ״̬ curTagPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeAsked) #Ä¿±êÍæ¼ÒÌáʾÐÅÏ¢ curTagPlayer.RequestWarn(IPY_GameWorld.reqTrade , curPlayer.GetID() , curPlayer.GetPlayerName()) #InviteDealing ½»Ò×ÑûÇëÒѾ­·¢³ö£¬ÇëµÈ´ý¶Ô·½Ó¦´ð£¡ PlayerControl.NotifyCode(curPlayer, "InviteDealing") return True #»ØÓ¦¶Ô·½µÄ½»Ò×ÇëÇó #class IPY_CTradeAnswer #{ #public: # # int GetHostPlayerID(); # //0: ¾Ü¾ø½»Ò× 1:½ÓÊܽ»Ò× 2: ³¬Ê± # int GetType(); #}; ## »ØÓ¦½»Ò×ÇëÇó(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None or True or False def TradeAnswer(index, tick): sendPack = IPY_GameWorld.IPY_CTradeAnswer() #½»Ò×Ä¿±êÍæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #½»Ò×·¢ÆðÍæ¼Ò curTagPlayer = GameWorld.GetObj(sendPack.GetHostPlayerID(), IPY_GameWorld.gotPlayer) if curTagPlayer == None: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_795514") return False #״̬ÅÐ¶Ï if not __CanStartTrade(curPlayer, curTagPlayer): return False if not PlayerRequest.CheckRequest(curTagPlayer, curPlayer, IPY_GameWorld.reqTrade): GameWorld.Log("TradeAnswer ->Request no record" , curPlayer.GetPlayerID() , curTagPlayer.GetPlayerID()) return False #½»Ò×Ä¿±êÍæ¼ÒÎÞask·â°ü if curPlayer.GetPlayerTradeState() != IPY_GameWorld.tsTradeAsked : GameWorld.Log("TradeAnswer->Trade not Asked" , curPlayer.GetPlayerID() , curTagPlayer.GetPlayerID()) return False #½»Ò×»ù±¾Åж¨ if not TradeBasicCondition(curPlayer, curTagPlayer): #GameWorld.Log("²»Âú×ã½»Ò×»ù±¾Åж¨") return False answerType = sendPack.GetType() #¶Ô·½ÎÞµã»÷È·¶¨»ò³¬Ê±,·µ»Ø if answerType != 1: if answerType == 0: curPlayer.TradeMsg(1) #CancelLockedDealing02 ¶Ô·½È¡Ïû½»Ò× PlayerControl.NotifyCode(curTagPlayer, "CancelLockedDealing02") else: curPlayer.TradeMsg(2) #CancelLockedDealing03 Ä¿±êÍæ¼Ò¶ÔÄúµÄ½»Ò×ÇëÇóδ×ö³öÈκÎÏìÓ¦£¬ÇëÇó³¬Ê± PlayerControl.NotifyCode(curTagPlayer, "CancelLockedDealing03") curPlayer.ClearRequest() curTagPlayer.ClearRequest() return False #ÉèÖÃË«·½×´Ì¬Îª¿ªÊ¼½»Ò×״̬ curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) curTagPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) #ÉèÖõ±Ç°½»Ò×¶ÔÏó curPlayer.SetActionObj(curTagPlayer) curTagPlayer.SetActionObj(curPlayer) #¿ªÊ¼½»Ò× curPlayer.StartTrade(curTagPlayer.GetID()) curTagPlayer.StartTrade(curPlayer.GetID()) #Çå¿ÕÉϴν»Ò×Áбí curPlayer.GetTradeList().Clear() curPlayer.ClearRequest() curTagPlayer.ClearRequest() return True ## 2¸öÍæ¼ÒÊÇ·ñ½»Ò×ÖÐ # @param curPlayer µ±Ç°Íæ¼Ò # @param curTagPlayer Ä¿±êÍæ¼Ò # @return True or False def __IsTrading(curPlayer, curTagPlayer): if curPlayer.GetPlayerAction() != IPY_GameWorld.paTrade: #GameWorld.Log("½»Ò×״̬²»¶Ô") return False if curTagPlayer.GetPlayerAction() != IPY_GameWorld.paTrade: #GameWorld.Log("Ä¿±ê½»Ò×״̬²»¶Ô") return False return True #°ÑÎïÆ··Åµ½½»Ò×À¸ #class IPY_CPutItemTrade #{ #public: # # int GetItemIndex(); #}; ## °ÑÎïÆ··ÅÈë½»Ò×À¸(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return True or False def PutItemTrade(index, tick): #=========================================================================== # sendPack = IPY_GameWorld.IPY_CPutItemTrade() # #·¢Æð½»Ò×Íæ¼Ò # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # #½»Ò×½ÓÊÜ·½ # curTagPlayer = curPlayer.GetActionPlayer() # # #½»Ò×»ù±¾Åж¨ # if not TradeBasicCondition(curPlayer, curTagPlayer): # #GameWorld.Log("²»Âú×ã½»Ò×»ù±¾Åж¨") # return False # # #״̬Åж¨ # if not __IsTrading(curPlayer, curTagPlayer) : # #GameWorld.Log("µ±Ç°×´Ì¬²»Êǽ»Ò×״̬") # return False # # #µ±Ç°×´Ì¬²»ÊÇ¿ªÊ¼½»Ò×״̬ # if curPlayer.GetPlayerTradeState() != IPY_GameWorld.tsTradeBegin: # #GameWorld.Log("·ÅÈëÎïÆ·Ê±µÄ״̬²»ÊÇ¿ªÊ¼½»Ò×״̬") # return False # # #·¢Æð½»Ò×Íæ¼ÒµÄÎïÆ·±³°ü # backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # #»ñµÃµ±Ç°ÎïÆ· # curItem = backPack.GetAt(sendPack.GetItemIndex()) # # if not CheckTradeItem(curPlayer, curItem): # return # # #»ñµÃ×Ô¼ºµÄ½»Ò×Áбí # tradeList = curPlayer.GetTradeList() # #½»Ò×À¸ÒÑÂú # if tradeList.GetPutInCount() >= tradeList.GetTradeItemCount(): # return False # # #Ìí¼ÓÎïÆ· # tradeList.AddItem(sendPack.GetItemIndex()) # #ÉèÖÃÎïÆ·ÎªËø¶¨×´Ì¬ # curItem.SetIsEventLocked(True) #=========================================================================== return True #°ÑÎïÆ·´Ó½»Ò×À¸Ð¶Ïµ½°ü¹ü #class IPY_CGetBackItemInTrade #{ #public: # ////½»Ò×ÁбíµÄÐòºÅ # int GetTradeIndex(); #}; ## °ÑÎïÆ·´Ó½»Ò×À¸Ð¶Ïµ½±³°ü(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None or False # @remarks º¯ÊýÏêϸ˵Ã÷. def GetBackItemInTrade(index, tick): #=========================================================================== # sendPack = IPY_GameWorld.IPY_CGetBackItemInTrade() # #·¢Æð½»Ò×Íæ¼Ò # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # #½»Ò×½ÓÊÜ·½ # curTagPlayer = curPlayer.GetActionPlayer() # #½»Ò×»ù±¾Åж¨ # if not TradeBasicCondition(curPlayer, curTagPlayer): # #GameWorld.Log("²»Âú×ã½»Ò×»ù±¾Åж¨") # return False # # #״̬Åж¨ # if not __IsTrading(curPlayer, curTagPlayer): # #GameWorld.Log("µ±Ç°×´Ì¬²»Êǽ»Ò×״̬") # return False # # #µ±Ç°×´Ì¬²»ÊÇ¿ªÊ¼½»Ò×״̬ # if curPlayer.GetPlayerTradeState() != IPY_GameWorld.tsTradeBegin: # GameWorld.Log("жÏÂÎïÆ·Ê±µÄ״̬²»ÊÇ¿ªÊ¼½»Ò×״̬ %d " % (curPlayer.GetPlayerTradeState()) , curPlayer.GetPlayerID()) # return False # # #»ñµÃ×Ô¼ºµÄ½»Ò×Áбí # tradeList = curPlayer.GetTradeList() # #»ñµÃ½»Ò×À¸Ë÷Òý # tradeIndex = sendPack.GetTradeIndex() # itemIndex = tradeList.GetTradeItem(tradeIndex) # #·¢Æð½»Ò×Íæ¼ÒµÄÎïÆ·±³°ü # backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # #»ñµÃµ±Ç°ÎïÆ· # curItem = backPack.GetAt(itemIndex) # if curItem == None or curItem.IsEmpty(): # return False # # #ɾ³ýÎïÆ·Ë÷Òý # tradeList.DeleteByIndex(tradeIndex) # #°ü¹üÖеÄÎïÆ·½âËø # curItem.SetIsEventLocked(False) #=========================================================================== return ## À뿪½»Ò× # @param curPlayer µ±Ç°Íæ¼Ò # @param type ½áÊøÀàÐÍ # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def LeaveTrade(curPlayer, type): if curPlayer == None or curPlayer.GetID() == 0: return False #ÊÇ·ñÔÚ½»Ò×״̬ if curPlayer.GetPlayerAction() != IPY_GameWorld.paTrade: return False #½ÓÊܽ»Ò×·½ curTagPlayer = curPlayer.GetActionPlayer() if not curTagPlayer or curTagPlayer.GetID() == 0 : #Ä¿±ê²»´æÔÚ,×Ô¼º½áÊø½»Ò× unTrade(curPlayer, type) return False #²»ÔÚ½»Ò×״̬,²»´¦Àí if curTagPlayer.GetPlayerAction() != IPY_GameWorld.paTrade: return False #Ë«·½À뿪½»Ò× unTrade(curPlayer, type) unTrade(curTagPlayer, type) # Í˳ö½»Ò×ʱ֪ͨ¶Ô·½Í˳ö½»Ò×ÐÅÏ¢ if type == 0: PlayerControl.NotifyCode(curTagPlayer, "CancelLockedDealing02") return True #Ò»·½Í˳ö½»Ò× #//0A 07 Í˳ö½»Ò×#tagCExitTrade #tagCExitTrade * GettagCExitTrade(); # #class IPY_CExitTrade #{ #public: # # int GetType(); #}; ## Õý³£Í˳ö½»Ò×(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def ExitTrade(index, tick): sendPack = IPY_GameWorld.IPY_CExitTrade() #µ±Ç°Íæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) LeaveTrade(curPlayer, sendPack.GetType()) return True #//0A 08 Ô¶³Ì··ÊÛµÀ¾ß#tagCSaleItem # #struct tagCSaleItem #{ #WORD UseItem; // ʹÓõĵÀ¾ßË÷Òý #WORD SaleItem1; // ··ÂôµÄÎïÆ·1 #WORD SaleItem2; // ··ÂôµÄÎïÆ·2 #WORD SaleItem3; // ··ÂôµÄÎïÆ·3 #WORD SaleItem4; // ··ÂôµÄÎïÆ·4 #WORD SaleItem5; // ··ÂôµÄÎïÆ·5 #WORD SaleItem6; // ··ÂôµÄÎïÆ·6 #}; ## Ô¶³Ì··ÊÛµÀ¾ß # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def LongDistanceSaleItem(index, tick): return #=============================================================================== # # µ±Ç°Íæ¼Ò # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # vipLv = curPlayer.GetVIPLv() # # #µÈ¼¶²»×ã # #if not PlayerVip.GetVipCanFarSellItem(vipLv): # # return # # # µ±Ç°·Ç¿ÕÏÐ״̬ # if not PlayerControl.IsPlanStateNull(curPlayer): # PlayerControl.NotifyCode(curPlayer, "CanNotUseAffectActionItem", [ChConfig.Def_ItemID_LongSaleItem]) # return # # sendPack = IPY_GameWorld.IPY_CSaleItem() # curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # useItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_FarSellItem) # # isUseItem = True # useMoney = 0 # # if not ItemCommon.CheckItemCanUse(useItem): # isUseItem = False # #useMoney = PlayerVip.GetVipFarSellCost(vipLv) # # #ÑéÖ¤½ð¶î # if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, useMoney): # return # # saleItemIndex1 = sendPack.GetSaleItem1() # saleItemIndex2 = sendPack.GetSaleItem2() # saleItemIndex3 = sendPack.GetSaleItem3() # saleItemIndex4 = sendPack.GetSaleItem4() # saleItemIndex5 = sendPack.GetSaleItem5() # saleItemIndex6 = sendPack.GetSaleItem6() # # saleItemIndexList = [saleItemIndex1, saleItemIndex2, saleItemIndex3, \ # saleItemIndex4, saleItemIndex5, saleItemIndex6] # # # ±äÁ¿ÎïÆ·½øÐз·ÊÛ # for saleItemIndex in saleItemIndexList: # if saleItemIndex < 0 or saleItemIndex >= curPack.GetMaxCount(): # continue # FunctionNPCCommon.SellPackItem(curPlayer, IPY_GameWorld.rptItem, saleItemIndex, ChConfig.Def_ShopType_LongSale) # # if isUseItem: # #--¿Û³ýµÀ¾ßÎïÆ·-- # ItemCommon.DelItem(curPlayer, useItem, 1, True, "LongDistanceSaleItem") # else: # payType = IPY_GameWorld.TYPE_Price_Gold_Money # #¿Û½ð¶î # if not PlayerControl.PayMoney(curPlayer, payType, useMoney, ChConfig.Def_Cost_Trade): # return # #Ïû·Ñ¼Ç¼ # GameWorld.Login_Interface_GoldRec(curPlayer, 0, 1, 'FarSell', IPY_GameWorld.TYPE_Price_Gold_Money, useMoney) # # return #=============================================================================== #½»Ò×Ëø¶¨ #class IPY_CTradeLock #{ #public: # //1: ½»Ò×È·ÈÏ 0: È¡ÏûÈ·ÈÏ # int GetType(); # int GetMoney(); #}; ## ½»Ò×Ëø¶¨(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def TradeLock(index, tick): sendPack = IPY_GameWorld.IPY_CTradeLock() #µã»÷Ëø¶¨µÄÍæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #Ä¿±êÍæ¼Ò curTagPlayer = curPlayer.GetActionPlayer() #½»Ò×»ù±¾Åж¨ if not TradeBasicCondition(curPlayer, curTagPlayer): #GameWorld.Log("½»Ò×Ëø¶¨(·â°ü²ÎÊý)²»Âú×ã½»Ò×»ù±¾Åж¨") return False #״̬Åж¨ if not __IsTrading(curPlayer, curTagPlayer): #GameWorld.Log("½»Ò×Ëø¶¨(·â°ü²ÎÊý)µ±Ç°×´Ì¬²»Êǽ»Ò×״̬") return False #·â°ü״̬ lockType = sendPack.GetType() #½â³ýËø¶¨ if lockType == 0: #Ä¿±êÍæ¼ÒδµãËø¶¨ if curTagPlayer.GetPlayerTradeState() == IPY_GameWorld.tsTradeBegin: curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) curPlayer.SetTradeLock(False, 0, 0, 0, 0) #Ä¿±êÒѾ­µãËø¶¨»òÒѵ㽻Ò× else: curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) curPlayer.SetTradeLock(False, 0, 0, 0, 0) curTagPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) curTagPlayer.SetTradeLock(False, 0, 0, 0, 0) #CancelLockedDealing ¶Ô·½È¡ÏûËø¶¨½»Ò×£¡ PlayerControl.NotifyCode(curTagPlayer, "CancelLockedDealing") return False #È·ÈÏËø¶¨ if curPlayer.GetPlayerTradeState() != IPY_GameWorld.tsTradeBegin: #Íæ¼Òµ±Ç°×´Ì¬,ÎÞ·¨È·ÈÏËø¶¨ return False # ÅжϽðÇ® sendGold = sendPack.GetGold() if CheckMoneyInvalid(curPlayer, sendGold, curPlayer.GetGold(), "GoldErr"): return False sendGPaper = sendPack.GetGoldPaper() if CheckMoneyInvalid(curPlayer, sendGPaper, curPlayer.GetGoldPaper(), "GoldPaperErr"): return False sendSilver = sendPack.GetSilver() if CheckMoneyInvalid(curPlayer, sendSilver, PlayerControl.GetSilver(curPlayer), "SilverErr"): return False sendSPaper = sendPack.GetSilverPaper() if CheckMoneyInvalid(curPlayer, sendSPaper, curPlayer.GetSilverPaper(), "SilverPaperErr"): return False # Ææ¼£Ö»ÔÊÐí½»ÒׯÕͨ½ð±Ò - hxp if sendGold > 0 or sendGPaper > 0 or sendSPaper > 0: GameWorld.ErrLog("sendGold > 0 or sendGPaper > 0 or sendSPaper > 0", curPlayer.GetID()) return False #Ëø¶¨³É¹¦ curPlayer.SetTradeLock(True, sendGold, sendGPaper, sendSilver, sendSPaper) #ÉèÖõ±Ç°×´Ì¬ÎªËø¶¨×´Ì¬ curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeConfirm) #LockedDealing ¶Ô·½ÒѾ­Ëø¶¨½»Ò×£¬ÇëÈ·ÈϽ»Ò×ÎïÆ·£¡ PlayerControl.NotifyCode(curTagPlayer, "LockedDealing") return True ## ¼ì²â½ðÇ®ÊÇ·ñ²»ÕýÈ· # @param curPlayer µ±Ç°Íæ¼Ò # @return None def CheckMoneyInvalid(curPlayer, sendMoney, playerMoney, notify): if sendMoney < 0 or playerMoney < sendMoney: PlayerControl.NotifyCode(curPlayer, notify) return True return False ## ½»Ò×ʧ°Üºó, Íæ¼ÒÒª×öµÄÊÂÇé(²ÎÊý -> µ±Ç°Íæ¼Ò) # @param curPlayer µ±Ç°Íæ¼Ò # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def TradeOKFail(curPlayer): #=========================================================================== # curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeBegin) # curPlayer.SetTradeLock(False, 0, 0, 0, 0) # #ÄûØËùÓÐÎïÆ· # #ÓÉÓÚtradeListÁбíÔڵײ㹹½¨Îª¾²Ì¬Áбí(³¤¶È¹Ì¶¨), ËùÒÔÔÚÏÂÃæ # #¿ÉÒÔÔÚforÖÐÖ±½Óɾ³ýµÚi¸öÔªËØ # tradeList = curPlayer.GetTradeList() # #·¢Æð½»Ò×Íæ¼ÒµÄÎïÆ·±³°ü # backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # for i in range(tradeList.GetTradeItemCount()): # itemIndex = tradeList.GetTradeItem(i) # # if itemIndex < 0: # continue # # tradeList.DeleteByIndex(i) # # #°ü¹üÖеÄÎïÆ·½âËø # #»ñµÃµ±Ç°ÎïÆ· # curItem = backPack.GetAt(itemIndex) # #°ü¹üÖеÄÎïÆ·½âËø # # if not curItem.IsEmpty(): # curItem.SetIsEventLocked(False) # # #½áÊøµ±Ç°½»Ò× # unTrade(curPlayer, 0) #=========================================================================== return #½»Ò×µã»÷È·ÈÏ #class IPY_CTradeOK #{ #public: # //1: OK 0: Cancel # int GetType(); #}; ## ½»Ò׳ɹ¦(·â°ü²ÎÊý) # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def TradeOK(index, tick): sendPack = IPY_GameWorld.IPY_CTradeOK() #·¢Æð½»Ò×Íæ¼Ò curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #½ÓÊܽ»Ò×·½ curTagPlayer = curPlayer.GetActionPlayer() #½»Ò×»ù±¾Åж¨ if not TradeBasicCondition(curPlayer, curTagPlayer): #GameWorld.Log("TradeOK²»Âú×ã½»Ò×»ù±¾Åж¨") return False #״̬Åж¨ if not __IsTrading(curPlayer, curTagPlayer): #GameWorld.Log("TradeOKµ±Ç°×´Ì¬²»Êǽ»Ò×״̬") return False #ûѡÔñÈ·¶¨ if sendPack.GetType() != 1: #½â³ý½»Ò× unTrade(curPlayer, 0) unTrade(curTagPlayer, 0) return False if curPlayer.GetPlayerTradeState() != IPY_GameWorld.tsTradeConfirm: #Ö»ÓÐÏÈËø¶¨ºó,²Å¿ÉÒÔ½»Ò× return False #»ñµÃ×Ô¼ºµÄ½»Ò×Çåµ¥ curPlayerTradeList = curPlayer.GetTradeList() #»ñµÃ¶Ô·½µÄ½»Ò×Çåµ¥ curTagPlayerTradeList = curTagPlayer.GetTradeList() #»ñµÃ×Ô¼ºµÄ±³°ü curPlayerPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) #»ñµÃ¶Ô·½µÄ±³°ü curTagPlayerPack = curTagPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) #ÉèÖõ±Ç°×´Ì¬ÎªOK״̬ curPlayer.SetPlayerTradeState(IPY_GameWorld.tsTradeOK) #---------------------------------Èç¹ûË«·½¶¼OK,¿ªÊ¼½»Ò×------------------------------------ #Ë«·½¶¼µã»÷OK if curTagPlayer.GetPlayerTradeState() == IPY_GameWorld.tsTradeOK : # ÎÞ½ðÇ®ºÍÎïÆ·½»Ò× if max(TradeMoneyCount(curPlayerTradeList)) <= 0 and max(TradeMoneyCount(curTagPlayerTradeList)) <= 0 \ and CheckIsEmptyItem(curPlayerTradeList) and CheckIsEmptyItem(curTagPlayerTradeList): TradeOKFail(curPlayer) TradeOKFail(curTagPlayer) return False # ½»Ò×ǰ½ðÇ® curGold, curGPaper, curSilver, curSPaper = GetPlayerMoney(curPlayer) tagGold, tagGPaper, tagSilver, tagSPaper = GetPlayerMoney(curTagPlayer) #·ÅÈëÎïÆ· if not TradePutIn(curPlayer, curTagPlayer, curPlayerTradeList, curTagPlayerTradeList, curTagPlayerPack, curPlayerPack): #GameWorld.Log("·ÅÈëÎïÆ·Ê§°Ü") TradeOKFail(curPlayer) TradeOKFail(curTagPlayer) return False # #¼Ç¼´ó¶î¶È½ðÇ®½»Ò× # __LargeTradeMoney(curPlayer,curTagPlayer,curPlayerTradeList,curTagPlayerTradeList) # ½»Ò×ÖнðÇ®±ä»¯ DataRecordPack.DR_TradeMoney(curPlayer, curTagPlayer, curGold, curGPaper, curSilver, curSPaper) DataRecordPack.DR_TradeMoney(curTagPlayer, curPlayer, tagGold, tagGPaper, tagSilver, tagSPaper) #Ë«·½½áÊøµ±Ç°½»Ò× unTrade(curPlayer, 1) unTrade(curTagPlayer, 1) return True ## »ñµÃÍæ¼Ò½ðÇ® # @param curPlayer µ±Ç°Íæ¼Ò # @return def GetPlayerMoney(player): return player.GetGold(), player.GetGoldPaper(), PlayerControl.GetSilver(player), player.GetSilverPaper() ## ÅжÏÊÇ·ñʱ¿ÕÎïÆ·Áбí # @param tradeList ½»Ò×Áбí # @return def CheckIsEmptyItem(tradeList): for i in range(0, tradeList.GetTradeItemCount()): if tradeList.GetTradeItem(i) >= 0: return False return True #=============================================================================== ### ¼Ç¼´ó¶î¶È½ðÇ®½»Ò×------------------ ## @param curPlayer µ±Ç°Íæ¼Ò ## @param curTagPlayer ½»Ò×¶Ô·½ ## @param curPlayerTradeList ½»Ò×ÐÅÏ¢ ## @param curTagPlayerTradeList ¶Ô·½½»Ò×ÐÅÏ¢ ## @return None ## @remarks º¯ÊýÏêϸ˵Ã÷. #def __LargeTradeMoney(curPlayer,curTagPlayer,curPlayerTradeList,curTagPlayerTradeList): # playerID = curPlayer.GetPlayerID() # haveGold = curPlayer.GetGold() # haveSilver = PlayerControl.GetSilver(curPlayer) # tagPlayerID = curTagPlayer.GetPlayerID() # tagHaveGold = curTagPlayer.GetGold() # tagHaveSilver = PlayerControl.GetSilver(curTagPlayer) # # curPlayerTradeMoney = curPlayerTradeList.GetMoney() # curTagPlayerTradeMoney = curTagPlayerTradeList.GetMoney() # # #Ë«·½¶¼¸øÓè´ó¶î¶È½ð¶î£¬ÎÞÁĵÄÈËÀà°¡ # if curPlayerTradeMoney >= ChConfig.Def_LargeTrade_Silver and \ # curTagPlayerTradeMoney >= ChConfig.Def_LargeTrade_Silver: # # GameWorld.NoteDownLargeTrade( # tradeSilver = curPlayerTradeMoney, # senderID = playerID, # senderGold = haveGold, # senderSilver = haveSilver, # ) # # GameWorld.NoteDownLargeTrade( # tradeSilver = curTagPlayerTradeMoney, # receiverID = tagPlayerID, # receiverGold = tagHaveGold, # receiverSilver = tagHaveSilver # ) # return # # #µ¥Ïò¸øÓè´ó¶î¶È½ð¶î # #Ò»´ÎÐÔ½»Ò×ÖУ¬Ô­·½¸øÓèµÄ½ð¶î # if curPlayerTradeMoney >= ChConfig.Def_LargeTrade_Silver: # GameWorld.NoteDownLargeTrade( # tradeSilver = curPlayerTradeMoney, # senderID = playerID, # senderGold = haveGold, # senderSilver = haveSilver, # receiverID = tagPlayerID, # receiverGold = tagHaveGold, # receiverSilver = tagHaveSilver # ) # # #Ò»´ÎÐÔ½»Ò×ÖУ¬¶Ô·½¸øÓèµÄ½ð¶î # if curTagPlayerTradeMoney >= ChConfig.Def_LargeTrade_Silver: # GameWorld.NoteDownLargeTrade( # tradeSilver = curTagPlayerTradeMoney, # senderID = playerID, # senderGold = haveGold, # senderSilver = haveSilver, # receiverID = tagPlayerID, # receiverGold = tagHaveGold, # receiverSilver = tagHaveSilver # ) # ### ¼Ç¼´ó¶îÎïÆ·½»Ò× ## @param curPlayer µ±Ç°Íæ¼Ò ## @param curTagPlayer ¶Ô·½Íæ¼Ò ## @param curItem ½»Ò×ÎïÆ· ## @return None ## @remarks º¯ÊýÏêϸ˵Ã÷. #def __LargeTradeItem(curPlayer,curTagPlayer,curItem): # curItemID = curItem.GetItemTypeID() # if curItemID not in ChConfig.Def_ItemID_LargeTrade: # return # # curCount = curItem.GetCount() # if curCount != curItem.GetPackCount(): # return # # GameWorld.NoteDownLargeTrade( # tradeItemID = curItemID, # tradeItemCount = curCount, # senderID = curPlayer.GetPlayerID(), # senderGold = curPlayer.GetGold(), # senderSilver = PlayerControl.GetSilver(curPlayer), # receiverID = curTagPlayer.GetPlayerID(), # receiverGold = curTagPlayer.GetGold(), # receiverSilver = PlayerControl.GetSilver(curTagPlayer) # ) #=============================================================================== ## ½«½»Ò×À¸ÖеÄÎïÆ··ÅÈë±³°ü # @param curPlayer µ±Ç°Íæ¼Ò # @param curTagPlayer Ä¿±êÍæ¼Ò # @param curPlayerTradeList µ±Ç°Íæ¼Ò½»Ò×Çåµ¥, # @param curTagPlayerTradeList Ä¿±êÍæ¼Ò½»Ò×Çåµ¥, # @param curTagPlayerPack Ä¿±êÍæ¼Ò±³°ü # @param curPlayerPack µ±Ç°Íæ¼Ò±³°ü # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def TradePutIn(curPlayer, curTagPlayer, curPlayerTradeList, curTagPlayerTradeList, curTagPlayerPack, curPlayerPack): #¼ì²é±³°ü¿Õ¼äºÍÒø×ÓÉÏÏÞÊÇ·ñÂú×ãÌõ¼þ if not TradePackCanPutIn(curPlayer, curTagPlayer, curTagPlayerTradeList, curPlayerTradeList , curTagPlayerPack) or \ not TradePackCanPutIn(curTagPlayer, curPlayer, curPlayerTradeList, curTagPlayerTradeList , curPlayerPack): #²»Âú×ã½»Ò×Ìõ¼þ #GameWorld.Log("²»Âú×ã½»Ò×Ìõ¼þ") return False selfTradeItemList = list() #Type = SingleItem tagTradeItemList = list() #Type = SingleItem #»ñµÃ×Ô¼ºÎïÆ·¹ÜÀíÆ÷ curItemControl = ItemControler.PlayerItemControler(curPlayer) #È¡³ö¶Ô·½ÎïÆ·,·ÅÈë×Ô¼º±³°ü for i in range(0, curTagPlayerTradeList.GetTradeItemCount()): curTagItemIndex = curTagPlayerTradeList.GetTradeItem(i) if curTagItemIndex == -1: continue #GameWorld.Log("%sµÄÎïÆ·Ë÷Òý%s"%(curTagPlayer.GetPlayerName(),curTagItemIndex)) curTagItem = curTagPlayerPack.GetAt(curTagItemIndex) if curTagItem.IsEmpty(): GameWorld.Log("%s->%s ½»Ò×ÎïÆ·»ñȡʧ°Ü,%sÎïÆ·Îª¿Õ" % (curPlayer.GetPlayerID(), curTagPlayer.GetPlayerID(), curTagItem.GetItemTypeID())) continue # #¼Ç¼´ó¶îÎïÆ·½»Ò× # __LargeTradeItem(curPlayer,curTagPlayer,curTagItem) tagTradeItemList.append(curTagItem.GetItem()) tagItemNoteDict = ItemCommon.GetItemNoteDict(curTagItem.GetItem(), curTagItem.GetCount()) # Á÷Ïò¼Ç¼£¬¼Ç¼½»Ò×ʧȥ ÎïÆ· #DataRecordPack.DR_TradeLostItem(curTagPlayer, curPlayer, curTagItem.GetItemTypeID(), # curTagItem.GetCount(), tagItemNoteDict) TradeEventReport(curTagPlayer, curPlayer, curTagItem.GetItemTypeID(), curTagItem.GetCount(), "Lost") ItemCommon.DR_DelItem(curTagPlayer, IPY_GameWorld.rptItem, "Trade", tagItemNoteDict) #²Á³ý¶Ô·½ÎïÆ· curTagItem.Wipe() #»ñµÃ¶Ô·½ÎïÆ·¹ÜÀíÆ÷ tagItemControl = ItemControler.PlayerItemControler(curTagPlayer) #È¡³ö×Ô¼ºÎïÆ·,·ÅÈë¶Ô·½±³°ü for i in range(0, curPlayerTradeList.GetTradeItemCount()): curItemIndex = curPlayerTradeList.GetTradeItem(i) if curItemIndex == -1: continue #GameWorld.Log("%sµÄÎïÆ·Ë÷Òý%s"%(curPlayer.GetPlayerName(),curItemIndex)) curItem = curPlayerPack.GetAt(curItemIndex) if curItem.IsEmpty(): GameWorld.Log("%s->%s½»Ò×ÎïÆ·»ñȡʧ°Ü,%sÎïÆ·Îª¿Õ" % (curPlayer.GetPlayerID(), curTagPlayer.GetPlayerID(), curItem.GetItemTypeID())) continue # #¼Ç¼´ó¶îÎïÆ·½»Ò× # __LargeTradeItem(curPlayer,curTagPlayer,curItem) selfTradeItemList.append(curItem.GetItem()) curItemNoteDict = ItemCommon.GetItemNoteDict(curItem.GetItem(), curItem.GetCount()) # Á÷Ïò¼Ç¼£¬¼Ç¼½»Ò×ʧȥ ÎïÆ· #DataRecordPack.DR_TradeLostItem(curPlayer, curTagPlayer, curItem.GetItemTypeID(), # curItem.GetCount(), curItemNoteDict) TradeEventReport(curPlayer, curTagPlayer, curItem.GetItemTypeID(), curItem.GetCount(), "Lost") ItemCommon.DR_DelItem(curPlayer, IPY_GameWorld.rptItem, "Trade", curItemNoteDict) #²Á³ý×Ô¼ºÎïÆ· curItem.Wipe() curPlayerID = curPlayer.GetPlayerID() curTagPlayerID = curTagPlayer.GetPlayerID() #½«×Ô¼ºÎïÆ··ÅÈë¶Ô·½¿Ú´ü for curItem in selfTradeItemList: curItemTypeID = curItem.GetItemTypeID() curItemCount = curItem.GetCount() curItemGUID = curItem.GetGUID() if not tagItemControl.PutInItem(IPY_GameWorld.rptItem, curItem, event=["Trade", True, {}]): GameWorld.ErrLog("TradePutIn fail, tagPlayerID=%s, ItemDetel=%s, %s, %s" % (curTagPlayerID, curItemTypeID, curItemCount, curItemGUID), curPlayerID, curTagPlayerID) return False # Á÷Ïò¼Ç¼£¬½»Ò×¹ºµÃÎïÆ·, ÔÝʱÆÁ±Î£¬PutInͳһ¼Ç¼ #DataRecordPack.DR_TradeGetItem(curTagPlayer, curPlayer, curItemTypeID, curItemCount, equipNote) TradeEventReport(curTagPlayer, curPlayer, curItemTypeID, curItemCount, "Get") #Ë«·½ÎïÆ·Ìáʾ PlayerControl.NotifyCode(curPlayer, "LostRes", [curItemTypeID, curItemCount]) PlayerControl.NotifyCode(curTagPlayer, "ObtainRes01", [curItemTypeID, curItemCount]) #½«¶Ô·½ÎïÆ··ÅÈë×Ô¼º¿Ú´ü for curItem in tagTradeItemList: curItemTypeID = curItem.GetItemTypeID() curItemCount = curItem.GetCount() curItemGUID = curItem.GetGUID() if not curItemControl.PutInItem(IPY_GameWorld.rptItem, curItem, event=["Trade", True, {}]): GameWorld.ErrLog("TradePutIn, tagPlayerID=%s, ItemDetel=%s, %s, %s" % (curPlayerID, curItemTypeID, curItemCount, curItemGUID), curTagPlayerID, curPlayerID) return False # Á÷Ïò¼Ç¼£¬½»Ò×¹ºµÃÎïÆ·, ÔÝʱÆÁ±Î£¬PutInͳһ¼Ç¼ #DataRecordPack.DR_TradeGetItem(curPlayer, curTagPlayer, curItemTypeID, curItemCount, equipNote) TradeEventReport(curPlayer, curTagPlayer, curItemTypeID, curItemCount, "Get") #Ë«·½ÎïÆ·Ìáʾ PlayerControl.NotifyCode(curTagPlayer, "LostRes", [curItemTypeID, curItemCount]) PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [curItemTypeID, curItemCount]) #½ðÇ®ÀàÐÍ tradeMoneyType = (IPY_GameWorld.TYPE_Price_Gold_Money, IPY_GameWorld.TYPE_Price_Gold_Paper, IPY_GameWorld.TYPE_Price_Silver_Money, IPY_GameWorld.TYPE_Price_Silver_Paper) #½«¶Ô·½µÄÇ®·ÅÈë×Ô¼ºµÄ¿Ú´ü for typeIndex, moneyValue in enumerate(TradeMoneyCount(curTagPlayerTradeList)): TradeMoney(curPlayer, curTagPlayer, moneyValue, tradeMoneyType[typeIndex]) #½«×Ô¼ºµÄÇ®·ÅÈë¶Ô·½µÄ¿Ú´ü for typeIndex, moneyValue in enumerate(TradeMoneyCount(curPlayerTradeList)): TradeMoney(curTagPlayer, curPlayer, moneyValue, tradeMoneyType[typeIndex]) return True ## ½»Ò×ÎïÆ·Ê¼þ»ã±¨ # @param None # @return None def TradeEventReport(curPlayer, tagPlayer, itemID, itemCnt, tradeType): eventParam = "PlayerID=%s,PlayerName=%s,TradeType=%s,TagPlayer=%s,ItemID=%s,ItemCount=%s" \ % (curPlayer.GetPlayerID(), curPlayer.GetPlayerName(), tradeType, tagPlayer.GetPlayerID(), itemID, itemCnt) #EventReport.EventReport(ShareDefine.Def_UserAction_TradeItem, eventParam, curPlayer) return ## »ñµÃ½»Ò×ÖнðÇ®µÄÊýÁ¿ # @param tradeList ½»Ò×ÕËÄ¿ # @return None def TradeMoneyCount(tradeList): return (tradeList.GetGold(), tradeList.GetGoldPaper(), tradeList.GetSilver(), tradeList.GetSilverPaper()) ## ½»Ò×½ðÇ®×ªÒÆ # @param curPlayer µ±Ç°Íæ¼Ò # @param tagPlayer Ä¿±êÍæ¼Ò # @param moneyCnt ½ðÇ®ÊýÁ¿ # @param moneyType ½ðÇ®ÀàÐÍ # @return None def TradeMoney(curPlayer, tagPlayer, moneyCnt, moneyType): if moneyCnt <= 0: return if PlayerControl.PayMoney(tagPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_Trade): PlayerControl.GiveMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_GiveMoney_Trade) else: GameWorld.ErrLog('TradeMoney fail, %s, %s' % (curPlayer.GetPlayerID(), tagPlayer.GetPlayerID())) return ## ½»Ò×»ù±¾Åж¨ # @param curPlayer µ±Ç°Íæ¼Ò # @param curTagPlayer Ä¿±êÍæ¼Ò # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def TradeBasicCondition(curPlayer, curTagPlayer): tradeLVLimit = ReadChConfig.GetEvalChConfig("TradeLVLimit") # ·¢Æð·½µÈ¼¶ÅÐ¶Ï if curPlayer.GetLV() < tradeLVLimit: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_93493") return False #ÈÎÒâÒ»·½¶ÏÏß,½»Ò×״̬ȡÏû if curTagPlayer == None : curPlayer.TradeMsg(5) #GeRen_chenxin_795514 Ä¿±êÍæ¼Ò²»ÔÚÏߣ¡ PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_740521") return False # ½»Ò×Ä¿±êµÈ¼¶ÅÐ¶Ï if curTagPlayer.GetLV() < tradeLVLimit: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_67166") return False #ÈÎÒâÒ»·½ËÀÍö,ÎÞ·¨¿ªÆô½»Ò× if GameObj.GetHP(curPlayer) <= 0: #ApplyDealingLost07 ÄãÒѾ­ËÀÍö£¬½»Ò×È¡Ïû£¡ PlayerControl.NotifyCode(curPlayer, "ApplyDealingLost07") return False if GameObj.GetHP(curTagPlayer) <= 0: #ApplyDealingLost03 Ä¿±êËÀÍö£¬ÎÞ·¨·¢³ö½»Ò×ÑûÇ룡 PlayerControl.NotifyCode(curPlayer, "ApplyDealingLost03") return False #¾àÀëÅж¨ #¼ì²éÍæ¼ÒÒÆ¶¯¾àÀëÊÇ·ñ¹ýÔ¶ if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), curTagPlayer.GetPosX(), curTagPlayer.GetPosY()) > ChConfig.Def_CanTradeDist: #GeRen_chenxin_671654 ¾àÀë̫Զ£¬ÎÞ·¨·¢³ö½»Ò×ÑûÇ룡 PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_671654") return False #GMÎ޴˹¦ÄÜ # if GameWorld.IsGM(curPlayer) or GameWorld.IsGM(curTagPlayer): # PlayerControl.NotifyCode(curPlayer, "GeRen_admin_59724") # return False return True ## ¼ì²éÍæ¼Ò±³°üÊÇ·ñ¿ÉÒÔ·ÅÏ # @param curPlayer µ±Ç°Íæ¼Ò # @param curTagPlayer Ä¿±êÍæ¼Ò # @param tagList Ä¿±ê½»Ò× # @param selfList ×Ô¼º½»Ò×À¸ # @param tagPack Ä¿±êÎïÆ·´æÔڵı³°ü # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def TradePackCanPutIn(curPlayer, curTagPlayer, tagList, selfList, tagPack): #ÑéÖ¤±³°ü¿Õ¼ä--------------------------------------------------------------------- if ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem) + selfList.GetPutInCount() < tagList.GetPutInCount(): #PlayerControl.NotifyCode(curPlayer, "PackRoomageLack") PlayerControl.NotifyCode(curTagPlayer, "PackFullTag", [IPY_GameWorld.rptItem]) #Task_WinLost_RoomLack02 ÄúµÄ±³°ü¿Õ¼ä²»×ã,ÇëÕûÀí±³°üºóÔÙÀ´ PlayerControl.NotifyCode(curPlayer, "Task_WinLost_RoomLack02") curPlayer.TradeMsg(4) return False #ÑéÖ¤½ðÇ®--------------------------------------------------------------------- #½ðÇ®ÀàÐÍ tradeMoneyType = (IPY_GameWorld.TYPE_Price_Gold_Money, IPY_GameWorld.TYPE_Price_Gold_Paper, IPY_GameWorld.TYPE_Price_Silver_Money, IPY_GameWorld.TYPE_Price_Silver_Paper) # ÑéÖ¤Íæ¼Ò½ðÇ®ÊÇ·ñ×ã¹»£¬½ÓÊÕÍæ¼ÒÇ®ÊÇ·ñ³¬ÏÞ for typeIndex, moneyValue in enumerate(TradeMoneyCount(tagList)): if not CheckMoneyValue(curTagPlayer, curPlayer, moneyValue, tradeMoneyType[typeIndex]): return False #ÑéÖ¤ÎïÆ·--------------------------------------------------------------------- for i in range(0, tagList.GetTradeItemCount()): curTagItemIndex = tagList.GetTradeItem(i) if curTagItemIndex == -1: continue curTagItem = tagPack.GetAt(curTagItemIndex) if curTagItem.IsEmpty() or curTagItem.GetIsBind() or not curTagItem.GetCanTrade(): GameWorld.ErrLog("¶Ô·½½»Ò×ÎïÆ·Îª¿Õ»ò´æÔÚ°ó¶¨ÎïÆ·»ò´æÔÚ²»¿É½»Ò×ÎïÆ·!tagPlayerID=%s" % (curTagPlayer.GetPlayerID()), curPlayer.GetPlayerID()) return False return True ## ½âËø½»Ò×À¸ÖеÄÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param tagPlayer Ä¿±êÍæ¼Ò # @param tradeValue ½»Ò×Çåµ¥ # @param moneyType µ±Ç°Íæ¼Ò # @return True def CheckMoneyValue(curPlayer, tagPlayer, tradeValue, moneyType): if tradeValue <= 0: return True # ÅжϽðÇ®²¢Ìáʾ if not PlayerControl.HaveMoney(curPlayer, moneyType, tradeValue): #¶Ô²»Æð£¬Ä¿±ê½ðÇ®²»×㣬²Ù×÷ÎÞЧ PlayerControl.NotifyCode(tagPlayer, "Objective_Money_Shortage") # #¶Ô²»Æð,ÄãµÄ½ðÇ®²»×ã # PlayerControl.NotifyCode(curPlayer, "SilverErr") return False if moneyType in (IPY_GameWorld.TYPE_Price_Gold_Money, IPY_GameWorld.TYPE_Price_Gold_Paper): valueLimit = ChConfig.Def_PlayerTotalMoney_Gold else: valueLimit = ChConfig.Def_PlayerTotalMoney_Silver #¼ì²éÍæ¼Ò½ðÇ®ÊÇ·ñ×ã¹» if PlayerControl.GetMoney(tagPlayer, moneyType) + tradeValue > valueLimit: # ¶Ô²»Æð£¬ÄúЯ´øµÄ½ðÇ®ÒѾ­´ïÉÏÏÞ,²Ù×÷ÎÞЧ! PlayerControl.NotifyCode(tagPlayer, "GeRen_chenxin_609765") #Money_Schlep_Most01 ¶Ô²»Æð£¬Ä¿±êÉíÉÏЯ´øµÄ½ðÇ®ÒѾ­´ïÉÏÏÞ,²Ù×÷ÎÞЧ PlayerControl.NotifyCode(curPlayer, "Money_Schlep_Most01") tagPlayer.TradeMsg(3) return False return True ## ½âËø½»Ò×À¸ÖеÄÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param list ½»Ò×Çåµ¥ # @return True # @remarks º¯ÊýÏêϸ˵Ã÷. def unBindItem(curPlayer, list): #=========================================================================== # pack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) # for i in range(0, list.GetTradeItemCount()): # curItemIndex = list.GetTradeItem(i) # if curItemIndex == -1: # continue # # curItem = pack.GetAt(curItemIndex) # # if curItem.IsEmpty(): # continue # # curItem.SetIsEventLocked(False) #=========================================================================== return True ## ½â³ý½»Ò× # @param curPlayer µ±Ç°Íæ¼Ò # @param Type ÀàÐÍ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def unTrade(curPlayer, Type): #½»Ò׳ɹ¦,½â³ý½»Ò× #ɾ³ýÉϴν»Ò×Áбí curPlayerTradeList = curPlayer.GetTradeList() if curPlayerTradeList == None: curPlayer.EndTrade(Type) return #½»Ò׳ɹ¦,Çå³ý½»Ò×Áбí if Type == 1: curPlayerTradeList.Clear() curPlayer.EndTrade(Type) PlayerControl.NotifyCode(curPlayer, "DealingSucceed") #½»Ò×ʧ°Ü,½â³ýÎïÆ·Ëø¶¨×´Ì¬,²¢Çå³ý½»Ò×Áбí elif Type == 0: unBindItem(curPlayer, curPlayerTradeList) curPlayerTradeList.Clear() curPlayer.EndTrade(Type) #Ò쳣״̬ else: GameWorld.Log("½»Ò×״̬Òì³£ type = %s" % (Type) , curPlayer.GetPlayerID()) return return True ## ¼ì²é½»Ò×ÎïÆ·ÊÇ·ñÊÇ¿ÉÒÔ½»Ò×µÄ # @param curPlayer µ±Ç°Íæ¼Ò # @param curItem µ±Ç°ÎïÆ· # @return True or False # @remarks º¯ÊýÏêϸ˵Ã÷. def CheckTradeItem(curPlayer, curItem): if curItem == None or curItem.IsEmpty(): #ÎÞ´ËÎïÆ· #GameWorld.Log("µ±Ç°Íæ¼ÒÎïÆ·²»´æÔÚ") return False if curItem.GetIsBind(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165") return False if not curItem.GetCanTrade(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165") return False if ItemControler.IsEventItem(curItem): PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379") return False if curItem.GetIsLocked(): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055") return False return True