From d2d8ca57a661abb973550f35b8112b5078c1defb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 16 十二月 2024 15:27:39 +0800
Subject: [PATCH] 10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端(奖励类型增加类型3 - 消耗物品,目前支持坐骑经验丹、灵宠经验丹)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py |   89 ++++++++++++++++++++++++++++----------------
 1 files changed, 57 insertions(+), 32 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
index d89f323..ff7dc79 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
@@ -436,7 +436,7 @@
     robWorkerCount = mineItemData.RobWorkerCount
     if not curWorkerCount and not robWorkerCount:
         return curPos
-    moveSpeed = getattr(mineItemData, MineItemAttr_MoveSpeed)
+    moveSpeed = getattr(mineItemData, MineItemAttr_MoveSpeed, 0)
     if not moveSpeed:
         return curPos
     passSeconds = curTime - mineItemData.UpdTime
@@ -530,6 +530,9 @@
         battleRatio = workerBattleRatioList[len(workerBattleRatioList) - 1] if batWorkerCount > len(workerBattleRatioList) else workerBattleRatioList[batWorkerCount - 1]
         
     needSeconds = int(dist * itemWeight * baseTime * workRatio * battleRatio) # 还需工作时长,秒
+    if needSeconds <= 0:
+        return 0, 0
+    
     moveSpeed = dist / float(needSeconds) # 移动速度  x格/秒
     needHms = "%02d:%02d:%02d" % (needSeconds / 3600, needSeconds % 3600 / 60, needSeconds % 60)
     
@@ -556,7 +559,7 @@
     GameWorld.Log("福地系统定时刷新! %s" % str(curHourMinute))
     mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
     for playerID in mineItemMgr.playerMineItemDict.keys():
-        __DoMineItemRefresh(playerID, isSuper=True)
+        __DoMineItemRefresh(playerID, isSys=True)
     return
 
 def OnMineItemTimeProcess(curTime, tick):
@@ -633,7 +636,7 @@
     while doCount > 0 and allMineItemByEndTimeList:
         doCount -= 1
         mineItemData = allMineItemByEndTimeList[index]
-        endTime = getattr(mineItemData, MineItemAttr_EndTime)
+        endTime = getattr(mineItemData, MineItemAttr_EndTime, 0)
         if curTime < endTime:
             break
         
@@ -790,22 +793,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 +816,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
@@ -832,7 +840,7 @@
         return
     
     tick = GameWorld.GetGameWorld().GetTick()
-    helpTick = getattr(mineItemData, MineItemAttr_HelpTick)
+    helpTick = getattr(mineItemData, MineItemAttr_HelpTick, 0)
     if helpTick and tick - helpTick < 10000:
         GameWorld.DebugLog("已经有其他人在帮助中!", playerID)
         return
@@ -841,7 +849,7 @@
     return True
 
 def __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
-    # 摇人帮助结果
+    # 摇人帮助结果、自己驱赶结果
     
     playerID = curPlayer.GetPlayerID()
     helpPlayerName = curPlayer.GetName()
@@ -861,19 +869,27 @@
     robPlayerID = mineItemData.RobPlayerID
     # 赶走抢夺者
     if robPlayerID and robPlayerID == tagPlayerID:
-        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
+        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex, "out")
     
-    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):
@@ -910,7 +926,7 @@
         return
     if workerCount <= 0:
         if not isPreview:
-            __DoCancelPull(playerID, areaPlayerID, itemIndex)
+            __DoCancelPull(playerID, areaPlayerID, itemIndex, "cancel")
         return
     GameWorld.DebugLog("请求福地拉物品! areaPlayerID=%s,itemIndex=%s,workerCount=%s,workerState=%s,workerTotal=%s,isPreview=%s" 
                        % (areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview), playerID)
@@ -1003,7 +1019,7 @@
     SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
     return
 
-def __DoCancelPull(playerID, areaPlayerID, itemIndex):
+def __DoCancelPull(playerID, areaPlayerID, itemIndex, reason=""):
     ## 取消拉取
     mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
     mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
@@ -1038,6 +1054,9 @@
         __RefreshMineItemSpeed(mineItemData, True)
         
     SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
+    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+    if curPlayer:
+        MapServer_QueryPlayerResult(curPlayer, "MineAreaCancelPull", [areaPlayerID, reason])
     return
 
 def __DoMineItemRefresh(areaPlayerID, areaPlayer=None, isSys=False, isSuper=False, isNotify=True, refreshIndexList=None, setPosition=None, setItemLV=None, setMineID=None):
@@ -1334,7 +1353,9 @@
         if areaPlayerID > Def_FakeAreaCount:
             cacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(areaPlayerID))
             areaInfo.PlayerName = cacheDict.get("Name", "")
-            areaInfo.Face = cacheDict.get("Job", 0)
+            areaInfo.Job = cacheDict.get("Job", 0)
+            areaInfo.Face = cacheDict.get("Face", 0)
+            areaInfo.FacePic = cacheDict.get("FacePic", 0)
                     
         areaInfo.MineItemList = []
         if not mineIndexList:
@@ -1348,16 +1369,18 @@
             mineItem.UpdTime = mineItemData.UpdTime
             mineItem.Position = mineItemData.Position
             mineItem.PosLen = len(mineItem.Position)
-            mineItem.MoveSpeed = "%s" % getattr(mineItemData, MineItemAttr_MoveSpeed)
+            mineItem.MoveSpeed = "%s" % getattr(mineItemData, MineItemAttr_MoveSpeed, 0)
             mineItem.SpeedLen = len(mineItem.MoveSpeed)
-            mineItem.EndTime = getattr(mineItemData, MineItemAttr_EndTime)
+            mineItem.EndTime = getattr(mineItemData, MineItemAttr_EndTime, 0)
             mineItem.WorkerCount = mineItemData.WorkerCount
             mineItem.RobPlayerID = mineItemData.RobPlayerID
             mineItem.RobWorkerCount = mineItemData.RobWorkerCount
             if mineItemData.RobPlayerID:
                 robCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(mineItemData.RobPlayerID))
                 mineItem.RobPlayerName = robCacheDict.get("Name", "")
-                mineItem.RobFace = robCacheDict.get("Job", 0)
+                mineItem.RobJob = robCacheDict.get("Job", 0)
+                mineItem.RobFace = robCacheDict.get("Face", 0)
+                mineItem.RobFacePic = robCacheDict.get("FacePic", 0)
             areaInfo.MineItemList.append(mineItem)
         areaInfo.MineCount = len(areaInfo.MineItemList)
         
@@ -1381,7 +1404,9 @@
         if playerID != recordInfo.TagPlayerID and recordInfo.TagPlayerID > Def_FakeAreaCount:
             tagCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(recordInfo.TagPlayerID))
             recordInfo.TagPlayerName = tagCacheDict.get("Name", "")
-            recordInfo.TagFace = tagCacheDict.get("Job", 0)
+            recordInfo.TagJob = tagCacheDict.get("Job", 0)
+            recordInfo.TagFace = tagCacheDict.get("Face", 0)
+            recordInfo.TagFacePic = tagCacheDict.get("FacePic", 0)
         clientPack.AreaRecordList.append(recordInfo)
     clientPack.RecordCount = len(clientPack.AreaRecordList)
     NetPackCommon.SendFakePack(curPlayer, clientPack)

--
Gitblit v1.8.0