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