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