From b923772dbfdb2c5a5a7b42190bac092098ec82a1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 17:00:32 +0800
Subject: [PATCH] 9415 【BT】【后端】古神战场(修复GM命令增加虚拟玩家数据时可能导致多次结算bug)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py | 69 +++++++++++++++++++++++++++++++++-
1 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
index 78e3e0c..8cec51f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
@@ -582,6 +582,45 @@
PyGameData.g_marryReqInfo.pop(playerID, None) # 可能存在相互提亲的情况,尝试顺便把自身的提亲请求删除,因为已经无用了
return True
+def GMAddCandy(curPlayer, bridePriceID, addCount):
+ ## GM添加测试喜糖宴会
+ fakeID = 0
+ for playerIDA, playerIDB in PyGameData.g_marryCandyInfo.keys():
+ if playerIDA < 10000:
+ fakeID = max(playerIDA, fakeID)
+ if playerIDB < 10000:
+ fakeID = max(playerIDB, fakeID)
+
+ ipyData = IpyGameDataPY.GetIpyGameData("Marry", bridePriceID)
+ if not ipyData:
+ return 0
+ prosperity = ipyData.GetProsperity()
+ candyTimes = ipyData.GetCandyTimes()
+
+ syncCandyList = []
+ curTime = int(time.time())
+ for _ in xrange(addCount):
+ playerIDA = fakeID + 1
+ playerIDB = fakeID + 2
+ fakeID = playerIDB
+
+ candyObj = MarryCandy()
+ candyObj.playerIDA = playerIDA
+ candyObj.playerNameA = PlayerSocial.GetSocialPlayerName(playerIDA)
+ candyObj.playerIDB = playerIDB
+ candyObj.playerNameB = PlayerSocial.GetSocialPlayerName(playerIDB)
+ candyObj.bridePriceID = bridePriceID
+ candyObj.marryTime = curTime
+ candyObj.endTime = curTime + candyTimes
+ AddProsperity(candyObj, prosperity)
+
+ PyGameData.g_marryCandyInfo[(playerIDA, playerIDB)] = candyObj
+ syncCandyList.append(candyObj)
+
+ __SortCandy()
+ Sync_CandyList(None, syncCandyList)
+ return addCount
+
def __SortCandy():
PyGameData.g_marryCandySortList = PyGameData.g_marryCandyInfo.values()
PyGameData.g_marryCandySortList.sort(key=operator.attrgetter("endTime"))
@@ -739,6 +778,10 @@
tagPlayerID = dataMsg[0]
playerID = curPlayer.GetPlayerID()
+ if not PlayerControl.GetDBPlayerAccIDByID(tagPlayerID):
+ PlayerControl.NotifyCode(curPlayer, "NoInDBPlayer")
+ return
+
# 黑名单检查
if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(playerID, tagPlayerID, curPlayer):
return
@@ -757,8 +800,8 @@
if not ipyData:
return
- addCharmSelf = ipyData.GetAddCharmSelf() * giftCount
- addCharmTag = ipyData.GetAddCharmTag() * giftCount
+ addCharmSelf = int(ipyData.GetAddCharmSelf() * giftCount)
+ addCharmTag = int(ipyData.GetAddCharmTag() * giftCount)
addIntimacy = ipyData.GetAddIntimacy() * giftCount
worldNotifyKey = ipyData.GetWorldNotifyKey()
@@ -818,6 +861,10 @@
playerID = curPlayer.GetPlayerID()
+ if not PlayerControl.GetDBPlayerAccIDByID(tagPlayerID):
+ PlayerControl.NotifyCode(curPlayer, "NoInDBPlayer")
+ return
+
# 黑名单检查
if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(playerID, tagPlayerID, curPlayer):
return
@@ -869,6 +916,10 @@
coupleID = couple.GetCoupleID(playerID)
if coupleID != tagPlayerID:
GameWorld.Log("已成亲伴侣ID不一致,无法提亲! tagPlayerID(%s) != coupleID(%s)" % (tagPlayerID, coupleID), playerID)
+ return
+
+ if couple.GetBreakRequestID():
+ PlayerControl.NotifyCode(curPlayer, "LimitByMarryBroke") # 和离中无法操作
return
ipyData = IpyGameDataPY.GetIpyGameData("Marry", bridePriceID)
@@ -973,6 +1024,14 @@
if canBuy:
addProsperityValue = IpyGameDataPY.GetFuncCfg("LoveCandy", 3) # 喜糖每次增加繁荣度
AddProsperity(candyObj, addProsperityValue)
+ PlayerControl.NotifyCode(curPlayer, "EatCandyProsperity", [curPlayer.GetName(), addProsperityValue])
+ for pID in [playerIDA, playerIDB]:
+ if playerID == pID:
+ continue
+ player = GameWorld.GetPlayerManager().FindPlayerByID(pID)
+ if not player or PlayerControl.GetIsTJG(player):
+ continue
+ PlayerControl.NotifyCode(player, "EatCandyProsperity", [curPlayer.GetName(), addProsperityValue])
if isFree:
candyObj.playerFreeEatCountDict[playerID] = playerFreeEatCount + 1
Sync_CandyList(None, [candyObj])
@@ -1108,7 +1167,7 @@
clientPack = ChPyNetSendPack.tagGCCandyList()
clientPack.CandyInfoList = []
- for candyObj in PyGameData.g_marryCandySortList:
+ for candyObj in syncCandyList:
candyInfo = ChPyNetSendPack.tagGCCandyInfo()
candyInfo.PlayerIDA = candyObj.playerIDA
candyInfo.PlayerNameA = candyObj.playerNameA
@@ -1139,6 +1198,10 @@
continue
for candyInfo in clientPack.CandyInfoList:
+ coupleIDInfo = (candyInfo.PlayerIDA, candyInfo.PlayerIDB)
+ if coupleIDInfo not in PyGameData.g_marryCandyInfo:
+ continue
+ candyObj = PyGameData.g_marryCandyInfo[coupleIDInfo]
candyInfo.FireworksPlayerBuyCount = candyObj.fireworksCountDict.get(curPlayer.GetPlayerID(), 0)
candyInfo.PlayerFreeEatCandyCount = candyObj.playerFreeEatCountDict.get(curPlayer.GetPlayerID(), 0)
--
Gitblit v1.8.0