15 卡牌服务端搭建
1. 增加地图关闭接口 CloseMap,必须调用处理保存后,地图才能关闭
2. 玩家登录流程在PlayerLogin统一处理,不再需要等待客户端回报
6个文件已修改
344 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ServerCMD/CMDS/SavePlayerBackupFile.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -20,6 +20,14 @@
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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -22,6 +22,7 @@
import ShareDefine
import PlayerTeam
import PyGameData
import NetPackCommon
import datetime
import time
@@ -362,3 +363,19 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -603,13 +603,7 @@
    gameWorld.BalanceServer_MapServerInitOK()
    return
## 初始化共享表(原c++表)
#  @param tick 当前时间
#  @return None
def ReadShareData(tick):
    from PyMongoDB import PyMongoMain
    PyMongoMain.GetUserCtrlDB().OnGetGameData()
    return
def GameServer_CommMapServerInitOK(gameWorld):
    '''
@@ -734,3 +728,125 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -487,52 +487,29 @@
#---------------------------------------------------------------------
'''
旧登录流程 -- 留着对比
登录流程
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  中的功能登录逻辑
'''
##玩家登陆游戏逻辑处理
@@ -1477,7 +1454,9 @@
        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
@@ -1565,7 +1544,7 @@
    PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
    #通知GameServer自己现在的地图
    curPlayer.Sync_GameServer_MapID()
    #curPlayer.Sync_GameServer_MapID()
    
    #如果本地图是副本的话, 则通知GameServer玩家进入副本
    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
@@ -1680,8 +1659,9 @@
#@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
#---------------------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
@@ -5800,116 +5800,4 @@
        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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ServerCMD/CMDS/SavePlayerBackupFile.py
@@ -22,5 +22,6 @@
#  @return None
#  @remarks 函数详细说明.
def OnExec(playerList): 
    GameWorld.GetGameWorld().SetNeedSavePlayerBackupFile(True)
    # 关地图会触发此命令
    #GameWorld.GetGameWorld().SetNeedSavePlayerBackupFile(True)
    return