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