From 98065966c2b63ebf186b0a393342cf591ace61e9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 七月 2024 17:26:19 +0800
Subject: [PATCH] 10215 10213 【越南】【主干】【港台】【砍树】古宝升星效果与古宝共鸣(同步砍树版本新增的属性计算定义值;)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py | 125 +++++++++++++++++++++++++++++++++++++----
1 files changed, 113 insertions(+), 12 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
index 9015a45..c1f3449 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):
@@ -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
@@ -556,7 +556,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 +633,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
@@ -787,6 +787,107 @@
mineItemMgr.socialIDListDict[playerID] = socialIDList
return socialIDList
+
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
+
+ # 摇人帮助请求、自己驱赶请求
+ 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 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)
+ return
+ areaPlayerID = valueList[0]
+ itemIndex = valueList[1]
+
+ 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
+ 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, 0)
+ 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)
+
+ # 帮助的发奖
+ 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
+
+ return True
def MapServer_MineArea(curPlayer, msgList):
mapID = curPlayer.GetRealMapID()
@@ -1246,7 +1347,7 @@
if areaPlayerID > Def_FakeAreaCount:
cacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(areaPlayerID))
areaInfo.PlayerName = cacheDict.get("Name", "")
- areaInfo.Face = cacheDict.get("Face", 0)
+ areaInfo.Face = cacheDict.get("Job", 0)
areaInfo.MineItemList = []
if not mineIndexList:
@@ -1260,16 +1361,16 @@
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("Face", 0)
+ mineItem.RobFace = robCacheDict.get("Job", 0)
areaInfo.MineItemList.append(mineItem)
areaInfo.MineCount = len(areaInfo.MineItemList)
@@ -1293,7 +1394,7 @@
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("Face", 0)
+ recordInfo.TagFace = tagCacheDict.get("Job", 0)
clientPack.AreaRecordList.append(recordInfo)
clientPack.RecordCount = len(clientPack.AreaRecordList)
NetPackCommon.SendFakePack(curPlayer, clientPack)
--
Gitblit v1.8.0