From 1e4ed58c083e2e530eddf1bbf9dc45fdde6d02f0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 26 十一月 2024 11:01:44 +0800 Subject: [PATCH] 10317 【英文】【越南】【BT】【砍树】仙盟传功支持离线 --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 43 +++++++++++++++++++++ ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 3 + ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py | 9 ++++ ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py | 28 ++++++++++++++ 5 files changed, 83 insertions(+), 1 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py index 3cb4b72..ec4eb90 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Assist.py @@ -31,6 +31,9 @@ # @remarks 函数详细说明. def OnExec(curPlayer, gmList): + if not gmList: + GameWorld.DebugAnswer(curPlayer, "清除感谢: Assist t0") + isShowThanks = gmList[0] if len(gmList) > 0 else 0 assistMgr = PyDataManager.GetPlayerAssistPyManager() GameWorld.Log("---------- 当前总协助条数: %s" % len(assistMgr.allAssistDict)) @@ -55,6 +58,12 @@ return assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager() + if isShowThanks == "t0": + assistThanksMgr.allAssistThanksList = [] + assistThanksMgr.playerThanksDict = {} + assistThanksMgr.assistPlayerThanksDict = {} + GameWorld.DebugAnswer(curPlayer, "清除所有协助感谢!") + GameWorld.Log("---------- 未完结总感谢条数: %s" % len(assistThanksMgr.allAssistThanksList)) for playerID, thanksList in assistThanksMgr.playerThanksDict.items(): GameWorld.DebugLog("--- 玩家未发送感谢数: %s, %s" % (playerID, len(thanksList))) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py index b40c2c6..0cff408 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py @@ -1214,6 +1214,34 @@ GameWorld.DebugLog("增加协助感谢: itemID=%s,mapID=%s,lineID=%s,npcID=%s,exData=%s" % (itemID, mapID, lineID, npcID, exData), playerID) return +def AddNewAssistThanksEx(curPlayer, itemID, assistPlayerDict, mapID=0, lineID=0, npcID=0, exData=""): + ## 添加协助感谢数据,自动更新 TodayGiftCount 及 玩家信息 + DailyDateStr = GameWorld.GetDailyDateStr() + assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager() + for assistPlayerID, assistPlayerInfoDict in assistPlayerDict.items(): + + # 查找今日该感谢物品已接受感谢次数 + TodayGiftCount = 0 + assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict.get(assistPlayerID, []) + for thanks in assistPlayerThanksList: + if DailyDateStr != thanks.DailyDateStr or itemID != thanks.ItemID: + continue + if assistPlayerID not in thanks.AssistPlayerDict: + continue + infoDict = thanks.AssistPlayerDict[assistPlayerID] + TodayGiftCount = infoDict.get("TodayGiftCount", 0) + break + + assistPlayerInfoDict["TodayGiftCount"] = TodayGiftCount + + # 更新玩家信息,之后有需要再扩展,可以从玩家缓存或直接取在线玩家实例赋值 name job 等信息 + + GameWorld.DebugLog("获取今日接受感谢次数: itemID=%s,TodayGiftCount=%s" % (itemID, TodayGiftCount), assistPlayerID) + GameWorld.DebugLog("AddNewAssistThanksEx itemID=%s,assistPlayerDict=%s" % (itemID, assistPlayerDict), curPlayer.GetPlayerID()) + AddNewAssistThanks(curPlayer, itemID, mapID, lineID, assistPlayerDict, npcID, exData) + return + + #// B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift # #struct tagCGUseAssistThanksGift diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py index 93b6ae1..d9af3a4 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py @@ -3715,6 +3715,8 @@ __DoChuangong_Response(curPlayer, tagPlayerID, isOK) return + if msgType == "ThanksGift": + __DoChuangong_ThanksGift(curPlayer, msgData) return def __CheckChuangongPlayer(curPlayer, tagPlayerID): @@ -3734,8 +3736,26 @@ def __DoChuangong_Invite(curPlayer, tagPlayerID): ## 邀请 playerID = curPlayer.GetPlayerID() - tagPlayer = __CheckChuangongPlayer(curPlayer, tagPlayerID) + curFamily = curPlayer.GetFamily() + if not curFamily: + return + tagMember = curFamily.FindMember(tagPlayerID) + if not tagMember: + GameWorld.DebugLog("非盟友无法传功! tagPlayerID=%s" % tagPlayerID, curPlayer.GetPlayerID()) + return + tagPlayer = tagMember.GetPlayer() if not tagPlayer: + clientPack = ChPyNetSendPack.tagGCChuangongStart() + clientPack.Clear() + clientPack.PlayerID = tagMember.GetPlayerID() + clientPack.Name = tagMember.GetName() + clientPack.NameLen = len(clientPack.Name) + clientPack.LV = tagMember.GetLV() + clientPack.Job = tagMember.GetJob() + clientPack.RealmLV = tagMember.GetOfficialRank() + NetPackCommon.SendFakePack(curPlayer, clientPack) + PyGameData.g_chuangongTagPlayerDict[playerID] = tagPlayerID + GameWorld.DebugLog("对方离线,则自己直接开始传功: tagPlayerID=%s, %s" % (tagPlayerID, PyGameData.g_chuangongPlayerDict), playerID) return invitePlayerIDList = PyGameData.g_chuangongPlayerDict.get(playerID, []) if tagPlayerID not in invitePlayerIDList: @@ -3791,6 +3811,27 @@ clientPack.Job = tagPlayer.GetJob() clientPack.RealmLV = tagPlayer.GetOfficialRank() NetPackCommon.SendFakePack(curPlayer, clientPack) + PyGameData.g_chuangongTagPlayerDict[curPlayer.GetPlayerID()] = tagPlayer.GetPlayerID() + return + +def __DoChuangong_ThanksGift(curPlayer, msgData): + itemID = msgData[0] + playerID = curPlayer.GetPlayerID() + tagPlayerID = PyGameData.g_chuangongTagPlayerDict.pop(playerID, 0) + GameWorld.DebugLog("__DoChuangong_ThanksGift tagPlayerID=%s" % tagPlayerID, playerID) + if not tagPlayerID: + return + curFamily = curPlayer.GetFamily() + if not curFamily: + return + tagMember = curFamily.FindMember(tagPlayerID) + if not tagMember: + return + assistPlayerDict = {tagPlayerID:{"PlayerName":tagMember.GetName(), "Job":tagMember.GetJob(), + "LV":tagMember.GetLV(), "RealmLV":tagMember.GetOfficialRank(), + "Face":tagMember.GetFace(), "FacePic":tagMember.GetFacePic()}} + GameWorld.DebugLog(" assistPlayerDict %s" % assistPlayerDict, playerID) + PlayerAssist.AddNewAssistThanksEx(curPlayer, itemID, assistPlayerDict) return ##-------------------------------------------------------------------------------------------------- diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py index 518c228..da34b85 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py @@ -89,6 +89,7 @@ g_partyheroAnswerDict = {} #仙盟宴会玩家答对题目数量 {playerid:答题数量,..} g_familyAnswerPlayerIDDict = {} #仙盟宴会玩家参与答题数量 {playerID:[题目ID, ...], ...} g_chuangongPlayerDict = {} #传功玩家信息 {playerID:[目标玩家ID, ...], ...} +g_chuangongTagPlayerDict = {} #协助传功玩家信息 {playerID:协助玩家ID, ...} g_redPacketMgr = None # RedPacketMgr diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py index 103bb2a..4ed6927 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py @@ -1299,6 +1299,9 @@ syncItem.ItemID = itemID syncItem.ItemCount = itemCount syncItemList.append(syncItem) + # 有协助感谢礼盒 + if IpyGameDataPY.GetIpyGameDataNotLog("AssistThanksGift", itemID): + SendGameServer_FamilyChuangong(curPlayer, "ThanksGift", [itemID]) clientPack = ChPyNetSendPack.tagMCChuangongResult() clientPack.Clear() clientPack.FromLV = fromLV -- Gitblit v1.8.0