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