15 卡牌服务端搭建
1. 增加地图关闭接口 CloseMap,必须调用处理保存后,地图才能关闭
2. 玩家登录流程在PlayerLogin统一处理,不再需要等待客户端回报
| | |
| | | ClassName = StartDB
|
| | | FuncName = StartDB
|
| | |
|
| | | [CloseMap]
|
| | | ScriptName = GameWorldLogic\GameWorldEvent.py
|
| | | Writer = Alee
|
| | | Releaser = Alee
|
| | | RegType = 1
|
| | | ClassName = CloseMap
|
| | | FuncName = CloseMap
|
| | |
|
| | | [RefreshNPC]
|
| | | ScriptName = NPC\ChNPC.py
|
| | | Writer = eggxp
|
| | |
| | | import ShareDefine
|
| | | import PlayerTeam
|
| | | import PyGameData
|
| | | import NetPackCommon
|
| | |
|
| | | import datetime
|
| | | import time
|
| | |
| | | PyGameData.g_ipyDataRecycleCheckTime = 1
|
| | | IpyGameDataPY.IPYData.Recycle()
|
| | | return
|
| | |
|
| | |
|
| | | # 关闭地图通知py处理
|
| | | def CloseMap(tick):
|
| | | 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 |
| | |
| | | gameWorld.BalanceServer_MapServerInitOK()
|
| | | return
|
| | |
|
| | | ## 初始化共享表(原c++表)
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def ReadShareData(tick):
|
| | | from PyMongoDB import PyMongoMain
|
| | | PyMongoMain.GetUserCtrlDB().OnGetGameData()
|
| | | return
|
| | |
|
| | |
|
| | | def GameServer_CommMapServerInitOK(gameWorld):
|
| | | '''
|
| | |
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
|
| | | ## 初始化共享表(原c++表)
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def ReadShareData(tick):
|
| | | #读取静态表,与数据库无关 不要调用UserCtrlDB
|
| | | from PyMongoDB.Collections import DataServerGameData
|
| | | from PyMongoDB.DBCommon import (GlobalFunctions, CommonDefine, error)
|
| | | from PyMongoDB.Common import (CommFunc, )
|
| | | import NetPackCommon
|
| | | import os
|
| | | import zlib
|
| | | sysData = DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinNPC,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinNPC.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagNPCRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagNPCRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinSkill,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinSkill.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinExp,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinExp.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagTransportRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagTransportRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinShopItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinShopItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagBornRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagBornRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinMixItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinMixItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagBuildEquip,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagBuildEquip.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagSuiteActivation,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagSuiteActivation.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagSuiteEffect,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagSuiteEffect.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagRepeatEvent,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagRepeatEvent.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagEffectRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagEffectRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinMap,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinMap.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagDBStoreItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagDBStoreItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagOnMissionDelete,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagOnMissionDelete.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPet,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPet.txt')) |
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetGrade,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetGrade.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetFriendliness,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetFriendliness.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetExp,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetExp.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagNPC_Item_Pet,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagNPC_Item_Pet.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagFlyObjBaseInfo,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagFlyObjBaseInfo.txt'))
|
| | |
|
| | |
|
| | | #压缩
|
| | | try:
|
| | | compressSysData = zlib.compress(sysData, 9) #最大压缩
|
| | | |
| | | #回发地图
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, CommonDefine.dgGameData) #1
|
| | | data = CommFunc.WriteString(data, len(compressSysData), compressSysData)
|
| | | |
| | | GameWorld.Log('Load game sys data for len = %s - %s ok!'%(len(compressSysData), len(data)))
|
| | | NetPackCommon.SendPyPackToMapServerSelf(data, len(data))
|
| | | except:
|
| | | msg = error.formatMsg('fatal', error.ERROR_NO_53, 'Compress game sys data failed!error = \n%s'%traceback.format_exc())
|
| | | GameWorld.ErrLog(msg)
|
| | | return |
| | |
| | |
|
| | | #---------------------------------------------------------------------
|
| | | '''
|
| | | 旧登录流程 -- 留着对比
|
| | | 登录流程
|
| | | UserCrtlDB
|
| | | onAuthentication 玩家登录 :验证账号-若没有角色则创角-返回角色信息-通知Map C++
|
| | | Map C++调用 PlayerLogin
|
| | | MapServer
|
| | | ChPlayer:def PlayerLogin(index, tick)
|
| | | DoPlayerLogin
|
| | | curPlayer.Sync_ClientPlayerLogin()
|
| | | curPlayer.Sync_GameServer_MapID() #同步GameServer自己的地图ID
|
| | | curPlayer.BalanceServer_PlayerLoginInitOK()
|
| | | |
| | | GameServer
|
| | | ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=0 此时的 LoadState 为0
|
| | | curPlayer.SetIsLoadMap(True) 设置在加载地图
|
| | | |
| | | ChPlayer:def PlayerLogin(index, tick)
|
| | | curPlayer.MapServer_InitOK() 通知地图自己OK了
|
| | | |
| | | MapServer
|
| | | PlayerEventCounter:def GameServer_InitOK(index, tick)
|
| | | curPlayer.SendToBServerServerInitOK() #通知BServer自己OK了
|
| | | ChPlayer:def OnAllServerInitOK(curPlayer, tick)
|
| | | DoPlayerLogin
|
| | | curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
|
| | | curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
|
| | | |
| | | curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送//01 09 服务器准备就绪#tagServerPrepareOK
|
| | | ChPlayer:def OnAllServerInitOK(curPlayer, tick)
|
| | |
|
| | | ChPlayer:def LoadMapOK(curPlayer, tick)
|
| | | curPlayer.GameServer_SetLoadMapState(1) #通知GameServer切换地图停止
|
| | | curPlayer.SetMapLoadOK(True)
|
| | | curPlayer.SetInitOK(True)
|
| | | curPlayer.EndLoadMap()
|
| | |
|
| | | GameServer
|
| | | ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=1 此时的 LoadState 为1
|
| | | PlayerLoginLoadMapOK
|
| | | ChPlayer:def __Func_LoadMapOK(curPlayer, tick) #!!!直接调用不等待客户端封包 //01 07 地图读取OK#tagCInitMapOK
|
| | | curPlayer.SetMapLoadOK(True)
|
| | | curPlayer.SetInitOK(True)
|
| | | curPlayer.MapServer_GameServerRefreshOK() #通知地图服务器玩家初始化成功
|
| | | curPlayer.SetIsLoadMap(False)
|
| | | |
| | | MapServer
|
| | | GameServerRefresh:GameSever_PlayerInitOK curPlayer.GetGameServerInitOK()=0
|
| | | curPlayer.SetGameServerInitOK(True)
|
| | | |
| | | 后续补充流程
|
| | | MapServer
|
| | | ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
|
| | | 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
|
| | | 通知GameServer地图最终登录成功了
|
| | | |
| | | GameServer
|
| | | ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
|
| | | 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
|
| | | curPlayer.EndLoadMap() #通知客户端 04 03 玩家登录数据发送完毕OK#tagPlayerLoginLoadOK
|
| | |
|
| | | GameServerRefresh:GameSever_PlayerInitOK
|
| | | curPlayer.SetGameServerInitOK(True)
|
| | |
|
| | | ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
|
| | |
|
| | | '''
|
| | |
|
| | | ##玩家登陆游戏逻辑处理
|
| | |
| | | curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送0109包
|
| | | OnAllServerInitOK(curPlayer, tick)
|
| | | #到此处已经可以保存数据,即使客户端不回包断线
|
| | | #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK
|
| | | #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
|
| | | __Func_LoadMapOK(index, tick)
|
| | | GameServerRefresh.GameSever_PlayerInitOK(index, tick)
|
| | | except:
|
| | | curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
|
| | | import traceback
|
| | |
| | | PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
|
| | |
|
| | | #通知GameServer自己现在的地图
|
| | | curPlayer.Sync_GameServer_MapID()
|
| | | #curPlayer.Sync_GameServer_MapID()
|
| | |
|
| | | #如果本地图是副本的话, 则通知GameServer玩家进入副本
|
| | | if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
|
| | |
| | | #@return 返回值无意义
|
| | | #@remarks C++封包触发, 切换地图成功( 目标地图 )
|
| | | def LoadMapOK(index, tick):
|
| | | GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
|
| | | GameServerRefresh.GameSever_PlayerInitOK(index, tick)
|
| | | #不需要等待客户端,以前有视野客户端未加载成功会被偷袭的问题,可以通过加x秒无敌BUFF解决,不应该增加流程
|
| | | # GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
|
| | | # GameServerRefresh.GameSever_PlayerInitOK(index, tick)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | return (True, playerRec.PlayerID)
|
| | |
|
| | |
|
| | | #读取静态表,与数据库无关
|
| | | def OnGetGameData(self):
|
| | | sysData = DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinNPC,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinNPC.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagNPCRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagNPCRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinSkill,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinSkill.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinExp,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinExp.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagTransportRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagTransportRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinShopItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinShopItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagBornRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagBornRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinMixItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinMixItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagBuildEquip,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagBuildEquip.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagSuiteActivation,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagSuiteActivation.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagSuiteEffect,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagSuiteEffect.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagRepeatEvent,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagRepeatEvent.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagEffectRefresh,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagEffectRefresh.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagChinMap,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagChinMap.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagDBStoreItem,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagDBStoreItem.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagOnMissionDelete,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagOnMissionDelete.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPet,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPet.txt')) |
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetGrade,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetGrade.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetFriendliness,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetFriendliness.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagPetExp,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagPetExp.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagNPC_Item_Pet,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagNPC_Item_Pet.txt'))
|
| | | sysData += DataServerGameData.sysDBLoadFromFile(DataServerGameData.tagFlyObjBaseInfo,
|
| | | os.path.join(GlobalFunctions.getServerConfigPath(),
|
| | | CommonDefine.SYSDB_PATH,
|
| | | 'tagFlyObjBaseInfo.txt'))
|
| | |
|
| | |
|
| | | #压缩
|
| | | try:
|
| | | compressSysData = zlib.compress(sysData, 9) #最大压缩
|
| | | |
| | | #回发地图
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, CommonDefine.dgGameData) #1
|
| | | data = CommFunc.WriteString(data, len(compressSysData), compressSysData)
|
| | | |
| | | mylog.info('Load game sys data for len = %s - %s ok!'%(len(compressSysData), len(data)))
|
| | | NetPackCommon.SendPyPackToMapServerSelf(data, len(data))
|
| | | except:
|
| | | msg = error.formatMsg('fatal', error.ERROR_NO_53, 'Compress game sys data failed!error = \n%s'%traceback.format_exc())
|
| | | mylog.fatal(msg)
|
| | |
|
| | |
|
| | | |
| | | |
| | |
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(playerList):
|
| | | GameWorld.GetGameWorld().SetNeedSavePlayerBackupFile(True)
|
| | | # 关地图会触发此命令
|
| | | #GameWorld.GetGameWorld().SetNeedSavePlayerBackupFile(True)
|
| | | return |