From f9a7c4f3e1baaf0a2768e355677aa35dd820230e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 四月 2024 14:00:47 +0800
Subject: [PATCH] 10130 【后端】福地争夺资源功能(增加支持自己驱赶;优化刷福地物品相关GM命令;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py |    7 +++
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/MineArea.py                                             |   44 +++++++++++++++------
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py                                 |   53 ++++++++++++++++----------
 3 files changed, 71 insertions(+), 33 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/MineArea.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/MineArea.py
index acb9ec2..6d0c928 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/MineArea.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/MineArea.py
@@ -31,17 +31,19 @@
 def OnExec(curPlayer, msgList):
     if not msgList:
         GameWorld.DebugAnswer(curPlayer, "以下是GameServer命令")
-        GameWorld.DebugAnswer(curPlayer, "随机重新刷新: MineArea item [是否超级 坐标 索引]")
-        GameWorld.DebugAnswer(curPlayer, "刷新指定等级: MineArea lv 等级 [坐标 索引]")
-        GameWorld.DebugAnswer(curPlayer, "刷新指定物品: MineArea id 矿物ID [坐标 索引]")
+        GameWorld.DebugAnswer(curPlayer, "随机重新刷新: MineArea item [是否超级 坐标 索引 福地玩家ID]")
+        GameWorld.DebugAnswer(curPlayer, "刷新指定等级: MineArea lv 等级 [坐标 索引 福地玩家ID]")
+        GameWorld.DebugAnswer(curPlayer, "刷新指定物品: MineArea id 矿物ID [坐标 索引 福地玩家ID]")
         GameWorld.DebugAnswer(curPlayer, "派工人拉物品: MineArea pull 索引 人数 状态")
         GameWorld.DebugAnswer(curPlayer, "[工人玩家ID 福地玩家ID]")
         GameWorld.DebugAnswer(curPlayer, "输出在拉物品: MineArea pulling [玩家ID]")
         GameWorld.DebugAnswer(curPlayer, "输出福地物品: MineArea area [福地玩家ID]")
         GameWorld.DebugAnswer(curPlayer, "清除福地物品: MineArea clear [福地玩家ID,isPop]")
         GameWorld.DebugAnswer(curPlayer, "输出功能数据: MineArea info")
-        GameWorld.DebugAnswer(curPlayer, "坐标: 0~100; []内为可选参数")
-        GameWorld.DebugAnswer(curPlayer, "玩家ID可以是假人ID: 1~%s" % GameWorldMineArea.Def_FakeAreaCount)
+        GameWorld.DebugAnswer(curPlayer, "[]内为可选参数; ")
+        GameWorld.DebugAnswer(curPlayer, "坐标: 0~100;-1时随机坐标 ")
+        GameWorld.DebugAnswer(curPlayer, "索引: 0~5; -1时为全部索引")
+        GameWorld.DebugAnswer(curPlayer, "玩家ID可以是假人ID: 1~%s, 没填则默认自己" % GameWorldMineArea.Def_FakeAreaCount)
         return
     
     playerID = curPlayer.GetPlayerID()
@@ -49,24 +51,39 @@
     if value1 == "item":
         isSuper = msgList[1] if len(msgList) > 1 else 0
         position = msgList[2] if len(msgList) > 2 else None
-        refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
-        refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, isSuper=isSuper, refreshIndexList=refreshIndexList, setPosition=position)
+        if position == -1:
+            position = None
+        refreshIndex = msgList[3] if len(msgList) > 3 else -1
+        refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
+        areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
+        areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
+        refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, isSuper=isSuper, refreshIndexList=refreshIndexList, setPosition=position)
         __PrintRefreshDict(curPlayer, refreshDict, "超级" if isSuper else "普通")
         
     # 刷新指定等级
     elif value1 == "lv":
         itemLV = msgList[1] if len(msgList) > 1 else 1
         position = msgList[2] if len(msgList) > 2 else None
-        refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
-        refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, refreshIndexList=refreshIndexList, setPosition=position, setItemLV=itemLV)
+        if position == -1:
+            position = None
+        refreshIndex = msgList[3] if len(msgList) > 3 else -1
+        refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
+        areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
+        areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
+        refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, refreshIndexList=refreshIndexList, setPosition=position, setItemLV=itemLV)
         __PrintRefreshDict(curPlayer, refreshDict, "指定等级:%s" % itemLV)
         
     # 刷新指定物品
     elif value1 == "id":
         mineID = msgList[1] if len(msgList) > 1 else 1
         position = msgList[2] if len(msgList) > 2 else None
-        refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
-        refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, refreshIndexList=refreshIndexList, setPosition=position, setMineID=mineID)
+        if position == -1:
+            position = None
+        refreshIndex = msgList[3] if len(msgList) > 3 else -1
+        refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
+        areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
+        areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
+        refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, refreshIndexList=refreshIndexList, setPosition=position, setMineID=mineID)
         __PrintRefreshDict(curPlayer, refreshDict, "指定ID:%s" % mineID)
         
     # 派工人拉物品
@@ -165,8 +182,9 @@
         GameWorld.DebugLog("    MoveSpeed=%s,remainSeconds=%s(%s),EndTime=%s" 
                            % (MoveSpeed, remainSeconds, remainHms, endTimeStr), areaPlayerID)
         
-    GameWorld.DebugAnswer(curPlayer, "%s,ID(%s-%s),拉(%s-%s-%s),抢(%s-%s-%s),%s" 
-                          % (index, MineID, MineType, WorkerCount, WorkerState, areaPlayerID, RobWorkerCount, RobWorkerState, RobPlayerID, remainHms))
+    Position = int(float(Position)) if Position else 0
+    GameWorld.DebugAnswer(curPlayer, "%s,ID(%s-%s-%s),拉(%s-%s),抢(%s-%s-%s),%s" 
+                          % (index, MineID, Position, MineType, WorkerCount, WorkerState, RobWorkerCount, RobWorkerState, RobPlayerID, remainHms))
     return
 
 def __ClearAreaData(curPlayer, areaPlayerID, isPop):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
index 6dfd747..59cef49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
@@ -790,22 +790,22 @@
 
 def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
     
-    # 摇人帮助请求
-    if funcLineID == 0:
+    # 摇人帮助请求、自己驱赶请求
+    if funcLineID == 0 or funcLineID == 1:
         return __OnMineHelpRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList)
     
     return
 
 def OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
     
-    # 摇人帮助结果
-    if funcLineID == 0:
+    # 摇人帮助结果、自己驱赶结果
+    if funcLineID == 0 or funcLineID == 1:
         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)
@@ -813,10 +813,15 @@
     areaPlayerID = valueList[0]
     itemIndex = valueList[1]
     
-    if playerID == areaPlayerID:
-        GameWorld.DebugLog("不能帮助自己!", playerID)
-        return
-    
+    if funcLineID == 0:
+        if playerID == areaPlayerID:
+            GameWorld.DebugLog("不能帮助自己! areaPlayerID=%s" % areaPlayerID, playerID)
+            return
+    elif funcLineID == 1:
+        if playerID != areaPlayerID:
+            GameWorld.DebugLog("不是自己的福地,无法自己驱赶! areaPlayerID=%s" % areaPlayerID, playerID)
+            return
+        
     mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
     mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
     mineID = mineItemData.MineID
@@ -841,7 +846,7 @@
     return True
 
 def __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
-    # 摇人帮助结果
+    # 摇人帮助结果、自己驱赶结果
     
     playerID = curPlayer.GetPlayerID()
     helpPlayerName = curPlayer.GetName()
@@ -863,17 +868,25 @@
     if robPlayerID and robPlayerID == tagPlayerID:
         __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
     
-    robCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(tagPlayerID))
-    robPlayerName = robCacheDict.get("Name", "")
+    # 帮助的发奖
+    if funcLineID == 0:
+        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])
+        
+    # 自己驱赶的
+    elif funcLineID == 1:
+        # 自己驱赶的,不用再通知地图,直接return
+        return
     
-    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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
index d4c7296..33397f8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
@@ -33,6 +33,9 @@
         if awardCountMax and awardCount >= awardCountMax:
             GameWorld.DebugLog("已达到今日福地帮助奖励次数上限! awardCount=%s" % awardCount, curPlayer.GetPlayerID())
             return
+    # 自己驱赶
+    elif funcLineID == 1:
+        pass
     else:
         # 通过lineID扩展同个功能系统下的不同战斗需求
         pass
@@ -53,6 +56,10 @@
         awardItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHelp", 2)
         return True, awardItemList, 2
     
+    # 自己驱赶
+    elif funcLineID == 1:
+        return True, [], 0
+    
     return
 
 def OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList, ret):

--
Gitblit v1.8.0