From c19d3b869bfb294223a38880e15935fc0d73bc9e Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 15 十一月 2018 14:35:18 +0800
Subject: [PATCH] 2378 【1.3】【1.2】集市购买偶发出现扣仙玉没有给物品bug

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBourseTube.py |   32 +++++++++++++++++---------------
 ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py                                   |    3 ++-
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py                          |   16 +++++++++++++++-
 3 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
index ef8aa1b..515da95 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
@@ -31,6 +31,7 @@
 import PyGameDataStruct
 import PyDataManager
 import ChPyNetSendPack
+import PyGameData
 
 import time
 import json
@@ -437,6 +438,15 @@
             PlayerControl.NotifyCode(curPlayer, "BoursePasswordError")
         GameWorld.DebugLog("Bourse### MGCheckBuyBourseItem ItemGUID %s  pwd is error! %s != %s" % (curPackData.ItemGUID, curBourseItem.GetPwd(), curPackData.Pwd))
         return
+    #物品交易锁定状态判断
+    curTime = int(time.time())
+    if curPackData.ItemGUID in PyGameData.g_bourseItemTradingTimeDict:
+        if curTime - PyGameData.g_bourseItemTradingTimeDict.get(curPackData.ItemGUID, 0) < 10:
+            curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
+            if curPlayer:
+                PlayerControl.NotifyCode(curPlayer, "MarketNoPutaway5")
+            return
+    PyGameData.g_bourseItemTradingTimeDict[curPackData.ItemGUID] = curTime
     
     #//02 02 玩家购买交易所物品查询结果#tagGMCheckBuyBourseItemResult
     sendPack = ChGameToMapPyPack.tagGMCheckBuyBourseItemResult()
@@ -469,6 +479,10 @@
     if CheckBourseItemDataSaleState(curBourseItem):
         GameWorld.Log("玩家确认购买交易所物品 Bourse### MGBuyBourseItemSure ItemGUID %s SoldOut" % (curPackData.ItemGUID), curPlayerID)
         return
+    if not curPackData.PlayerName: #为空时代表地图判断购买失败
+        PyGameData.g_bourseItemTradingTimeDict.pop(curPackData.ItemGUID, 0)
+        return
+    
     #给物品//02 03 玩家获取交易所物品结果#tagGMGiveBourseItem
     sendPack = GetGMGiveBourseItemPack(curPlayerID, curBourseItem)
     NetPackCommon.SendPyPackToMapServer(routeIndex, mapID, sendPack)
@@ -478,7 +492,7 @@
     curBourseItem.SetCustomerPlayerName(curPackData.PlayerName)
     soldOutTime = int(time.time())
     curBourseItem.SetSoldOutTime(str(soldOutTime))
-        
+    PyGameData.g_bourseItemTradingTimeDict.pop(curPackData.ItemGUID, 0)
     #通知顾客购买物品状态变更    
     curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPlayerID)
     if curPlayer:
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index 8873ab7..94c1825 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -77,4 +77,5 @@
 g_familyPartyTopInfo = [] #仙盟宴会答题王 [playerID,名字]
 g_partyheroAnswerDict = {} #仙盟宴会玩家答题数量 {playerid:答题数量,..}
 
-g_dogzNPCRefreshTimeDict = {} # 神兽副本NPC刷新时间{npcid:剩余刷新时间}
\ No newline at end of file
+g_dogzNPCRefreshTimeDict = {} # 神兽副本NPC刷新时间{npcid:剩余刷新时间}
+g_bourseItemTradingTimeDict = {} # 物品开始交易的时间记录 {guid:tick}
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBourseTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBourseTube.py
index df3e785..bc41323 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBourseTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBourseTube.py
@@ -323,35 +323,37 @@
 #  @return None
 def OnGMCheckBuyBourseItemResult(curPackData, tick):
     GameWorld.DebugLog("Bourse### GMCheckBuyBourseItemResult in, PlayerID %s"%curPackData.PlayerID)
+    
+    playerName = __CheckBuyBourseItemResult(curPackData)
+    #//02 04 玩家确认购买交易所物品#tagMGBuyBourseItemSure
+    sendPack = ChMapToGamePyPack.tagMGBuyBourseItemSure()
+    sendPack.PlayerID = curPackData.PlayerID
+    sendPack.PlayerName = playerName #发空代表购买失败
+    sendPack.ItemGUID = curPackData.ItemGUID
+    NetPackCommon.SendPyPackToGameServer(sendPack)
+    GameWorld.DebugLog("Bourse### GMCheckBuyBourseItemResult out,  PriceCount %s"%curPackData.PriceCount)
+    return
+
+def __CheckBuyBourseItemResult(curPackData):
     curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
     if not curPlayer:
         GameWorld.DebugLog("Bourse### GMCheckBuyBourseItemResult , PlayerID %s no found "%curPackData.PlayerID)
-        return
+        return ''
    
     if curPackData.PriceCount != 0:
         if not PlayerControl.HaveMoney(curPlayer, curPackData.PriceType, curPackData.PriceCount):
             GameWorld.DebugLog("Bourse### GMCheckBuyBourseItemResult , ItemGUID %s  no enough money %s"%(curPackData.ItemGUID, curPackData.PriceCount))
-            return
+            return ''
         if curPackData.PriceType == IPY_GameWorld.TYPE_Price_Gold_Money:
             if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney, curPackData.PriceCount):
                 curBourseMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
                 GameWorld.Log("Bourse### GMCheckBuyBourseItemResult , ItemGUID %s no enough bourse money! priceCount=%s,curBourseMoney=%s" 
                               % (curPackData.ItemGUID, curPackData.PriceCount, curBourseMoney), curPlayer.GetPlayerID())
-                return
+                return ''
         #先付钱再给卖家收益
         infoDict = {"ItemGUID":curPackData.ItemGUID}
         PlayerControl.PayMoney(curPlayer, curPackData.PriceType, curPackData.PriceCount, ChConfig.Def_Cost_BourseBuy, infoDict)
-        
-        #//02 04 玩家确认购买交易所物品#tagMGBuyBourseItemSure
-        sendPack = ChMapToGamePyPack.tagMGBuyBourseItemSure()
-        sendPack.PlayerID = curPackData.PlayerID
-        sendPack.PlayerName = curPlayer.GetPlayerName()
-        sendPack.ItemGUID = curPackData.ItemGUID
-        NetPackCommon.SendPyPackToGameServer(sendPack)
-    
-    GameWorld.DebugLog("Bourse### GMCheckBuyBourseItemResult out,  PriceCount %s"%curPackData.PriceCount)
-    return
-
-
+        return curPlayer.GetPlayerName()
+    return ''
     
 

--
Gitblit v1.8.0