From d7e6ef56122500442ccee80ffeb29091e3fd0ce9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 06 六月 2024 11:17:58 +0800
Subject: [PATCH] 10130 【后端】福地争夺资源功能(增加摇人功能)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py |   96 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 92 insertions(+), 4 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
index 5973fab..d89f323 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
@@ -20,6 +20,7 @@
 import PyDataManager
 import ChPyNetSendPack
 import PyGameDataStruct
+import PlayerCompensation
 import PlayerViewCache
 import PlayerDBGSEvent
 import PlayerControl
@@ -42,6 +43,7 @@
 # 物品实例额外属性名
 MineItemAttr_MoveSpeed = "MoveSpeed"
 MineItemAttr_EndTime = "EndTime"
+MineItemAttr_HelpTick = "HelpTick"
 
 # 物品类型
 MineType_Normal = 0 # 常规物品
@@ -226,6 +228,7 @@
         # 不入库的属性
         setattr(mineItemData, MineItemAttr_EndTime, 0)
         setattr(mineItemData, MineItemAttr_MoveSpeed, 0)
+        setattr(mineItemData, MineItemAttr_HelpTick, 0)
         return
     
     def GetMineItem(self, playerID, index):
@@ -331,10 +334,7 @@
 def DoMineAreaFuncOpen(curPlayer):
     ## 福地功能开启
     playerID = curPlayer.GetPlayerID()
-    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
-    # 还没有福地物品数据,则刷新初始化
-    if playerID not in mineItemMgr.playerMineItemDict:
-        __DoMineItemRefresh(playerID, curPlayer)
+    __DoMineItemRefresh(playerID, curPlayer)
     return
 
 def OnPlayerLogin(curPlayer):
@@ -788,6 +788,94 @@
     mineItemMgr.socialIDListDict[playerID] = socialIDList
     return socialIDList
 
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
+    
+    # 摇人帮助请求
+    if funcLineID == 0:
+        return __OnMineHelpRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList)
+    
+    return
+
+def OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
+    
+    # 摇人帮助结果
+    if funcLineID == 0:
+        return __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList)
+        
+    return
+
+def __OnMineHelpRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
+    # 摇人帮助请求
+    playerID = curPlayer.GetPlayerID()
+    if not valueList or len(valueList) < 2:
+        GameWorld.DebugLog("没有指定valueList!", playerID)
+        return
+    areaPlayerID = valueList[0]
+    itemIndex = valueList[1]
+    
+    if playerID == areaPlayerID:
+        GameWorld.DebugLog("不能帮助自己!", playerID)
+        return
+    
+    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
+    mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
+    mineID = mineItemData.MineID
+    if not mineID:
+        # 该资源已消失
+        PlayerControl.NotifyCode(curPlayer, "MineDisappeared")
+        return
+    
+    robPlayerID = mineItemData.RobPlayerID
+    if not robPlayerID or robPlayerID != tagPlayerID:
+        # 当前资源无争夺者或已被其他玩家完成
+        PlayerControl.NotifyCode(curPlayer, "MineHelpFinished")
+        return
+    
+    tick = GameWorld.GetGameWorld().GetTick()
+    helpTick = getattr(mineItemData, MineItemAttr_HelpTick)
+    if helpTick and tick - helpTick < 10000:
+        GameWorld.DebugLog("已经有其他人在帮助中!", playerID)
+        return
+    setattr(mineItemData, MineItemAttr_HelpTick, tick)
+    
+    return True
+
+def __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
+    # 摇人帮助结果
+    
+    playerID = curPlayer.GetPlayerID()
+    helpPlayerName = curPlayer.GetName()
+    
+    areaPlayerID = valueList[0]
+    itemIndex = valueList[1]
+    isWin = fightRet[0]
+    
+    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
+    mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
+    setattr(mineItemData, MineItemAttr_HelpTick, 0)
+    
+    if not isWin:
+        #GameWorld.DebugLog("帮助失败")
+        return
+    
+    robPlayerID = mineItemData.RobPlayerID
+    # 赶走抢夺者
+    if robPlayerID and robPlayerID == tagPlayerID:
+        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
+    
+    robCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(tagPlayerID))
+    robPlayerName = robCacheDict.get("Name", "")
+    
+    areaCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(areaPlayerID))
+    areaPlayerName = areaCacheDict.get("Name", "")
+    
+    # 邮件发放奖励
+    PlayerCompensation.SendMailByKey("MineHelpAward", [playerID], awardItemList, [areaPlayerName, robPlayerName])
+    
+    # 通知福地玩家
+    PlayerCompensation.SendMailByKey("MineHelpReqOK", [areaPlayerID], [], [helpPlayerName, robPlayerName])    
+    return True
+
 def MapServer_MineArea(curPlayer, msgList):
     mapID = curPlayer.GetRealMapID()
     playerID = curPlayer.GetPlayerID()

--
Gitblit v1.8.0