#!/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
|
|
|