#!/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  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# ½»Ò×ÏûÏ¢Ìáʾ 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 curPlayer.GetHP() <= 0:  
 | 
        #ApplyDealingLost07 ÄãÒѾËÀÍö£¬½»Ò×È¡Ïû£¡  
 | 
        PlayerControl.NotifyCode(curPlayer, "ApplyDealingLost07")  
 | 
        return False   
 | 
      
 | 
    if curTagPlayer.GetHP() <= 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  
 | 
      
 | 
      
 |