From 0c96af08f55d05ab40eae9f940467dd8eafae44c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 16 九月 2025 14:07:53 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(增加属性ID技能增伤65、技能减伤66;曹轶技能;被动触发增加属性支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py | 67 ++++++++++++++++++++++++++------- 1 files changed, 53 insertions(+), 14 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py index 318d0f4..ecd028e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py @@ -18,11 +18,15 @@ import DBDataMgr import GameWorld import IpyGameDataPY +import IPY_GameWorld import PlayerEventCounter -import ShareDefine -import PlayerTeam -import PyGameData +import PlayerControl import NetPackCommon +import PlayerOnline +import ShareDefine +import PyGameData +import BattleObj +import ObjPool import datetime import time @@ -231,6 +235,11 @@ if tick - PyGameData.g_highProcessTick < 1000: return PyGameData.g_highProcessTick = tick + + if PyGameData.g_serverClosing: + CheckCloseMapOK() + return + OnMinute(tick) # 其他逻辑 @@ -256,8 +265,10 @@ #GameWorldActionControl.Dispose_OperationActionState() #GameWorldActionControl.Dispose_DailyActionState() #GameWorldActionControl.Dispose_FBStateTime() + PlayerOnline.OnMinute() + BattleObj.OnMinute() + ObjPool.OnMinute() - PlayerTeam.OnCheckTeamPlayerDisconnectTimeout(tick) __CheckIpyDataRecycle(curTime) return @@ -367,15 +378,43 @@ # 关闭地图通知py处理 def CloseMap(tick): + serverID = GameWorld.GetGameWorld().GetServerID() + GameWorld.Log("地图服务器关闭开始保存数据! serverID=%s" % serverID) + PyGameData.g_serverClosing = 1 + + playerManager = GameWorld.GetPlayerManager() + for i in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(i) + if not curPlayer or curPlayer.GetID() == 0 or curPlayer.IsEmpty(): + continue + + #镜像玩家回收、真实玩家踢下线 + if GameWorld.IsMirrorPlayer(curPlayer): + PlayerControl.DeleteMirror(curPlayer) + else: + curPlayer.Kick(IPY_GameWorld.disMapServerClose) + + DBDataMgr.OnServerClose() + return + +def CheckCloseMapOK(): + '''检查等待关服数据处理完毕 + 没有玩家了,且公共数据已入库完毕 + ''' + if PyGameData.g_serverClosing != 1: + return + if not PyGameData.g_closeSaveDataOK: + return + if GameWorld.GetPlayerManager().OnlineCount(): + return + DBDataMgr.ClearBackupFile() # 正常关服数据处理完毕可直接删除备档 + from PyMongoDB.DBCommon import CommonDefine from PyMongoDB.Common import CommFunc - #初始化数据库, 恢复备档(按区服记录), 加载静态表 - try: - pass - finally: - #回发地图 处理完成,必须被调用地图才能正常关闭 - data = '' - data = CommFunc.WriteBYTE(data, CommonDefine.dgPlayerSaveGameServerData) - NetPackCommon.SendPyPackToMapServerSelf(data, len(data)) - GameWorld.Log("python 已处理地图关闭逻辑") - return \ No newline at end of file + data = '' + data = CommFunc.WriteBYTE(data, CommonDefine.dgPlayerSaveGameServerData) + NetPackCommon.SendPyPackToMapServerSelf(data, len(data)) + GameWorld.Log("python 已处理地图关闭逻辑") + PyGameData.g_serverClosing = 2 + return + \ No newline at end of file -- Gitblit v1.8.0