仓酷云

标题: 魔神运维管理完全操作指南(最终修订版) [打印本页]

作者: hzming    时间: 2015-1-18 21:22
标题: 魔神运维管理完全操作指南(最终修订版)
一 服务器硬件配置需求:
最低配置:
CPU :四核 Intel 2.0 型号5130
内存4.00GB
软件需求:
   Win2003的操作系统(打好sp2补丁)
   .net2.0软件
   Server U ftp工具
   Zip压缩工具

二 拓扑图:


魔神服务器说明

一,概述































如上图为《魔神》服务器各个模块之间的关系
所有S-S或者C-S以及S-C之间的通讯协议全部为tcp/ip

二,详况
详细介绍各个服务器模块之间的关系,以及主要的功能逻辑
1Account Server
   帐号数据库,主要工作在login时期,检测帐号是否合法,直接影响的只有Login Server,确定是否允许此帐号登陆该服务器

2Database Server
   游戏数据服务器,用来存储和读取一切与角色以及game server运行时期需要的数据。如:角色背包,仓库物品信息,游戏世界中的工会信息,等等。
   只接受game server的请求,实际运行中会有较大的数据吞吐,因为除去帐号以外所有的游戏数据都通过该sever保存或者读取

3Login Server
   登陆服务器,在进入游戏前必须经过的服务器。
登陆服务器功能,用一个用户登陆作为例子说明:
Client请求登陆;login ServerAccount Server请求验证,该用户的帐号密码和其他的信息是否正确;如果正确允许登陆,login servergame server请求分配一个gate server给该用户;收到login server关于gate server的信息后client 断开与login server的连接,并与分配到的gate server通讯,到次为止,全部登陆流程完成。

4Gate Server
   网关服务器,处理简单的逻辑,主要保证客户机与服务器之间的安全通讯,以及缓解服务器的网络压力
   值得注意的是一个gate server只能与一个game server连接,但是一个game server 可以与Ngate server建立通讯连接。
   Gate server会保存每个在线用户的连接,这样game server的网络压力会小的多。Game server只需要向gate server发送数据,gate server会根据需求决定此数据的发送与否和发送的类型。与客户机间的通讯同理。
   在完成登陆后client才会被允许直接连接gate server,所有clientgame server之间的通讯全部通过gate server中转,如果client与所在gate server连接断开,会尝试连接另外的gate server,此机制用来保证连接稳定。

5Game Server
   游戏世界服务器,处理所有的游戏逻辑和角色信息。


三,后记
   各个服务器之间,Account server database server相对来说负载小一点,可以适当的支撑多个login servergame server.
   Login servergame server必须保持一对一关系。
   Gate server因为直接接受外来的数据,会有很多难以预料的情况,所以最好的解决方案是跟game server从物理机器上分开。并且独立一台或者多台服务器。




internal test server
PS:因为内部测试服务器无论网络还是数据处理压力要比外网小很多,所以可以把几个功能向近的或者通讯比较频繁的开在同一台机器上。

每个矩形表示一台计算机
































public servercommendatory)
PS:每个矩形表示一台计算机,但是如二,三介绍,并不需要每组服务器都这么样开,比如account server 是可以供应多组公用的。







服务器逻辑分析


一、 登录过程:
二、 LoginServer逻辑分析:
1. 基本数据结构:
a. LoginServer中维护着所有登录用户的列表,数据结构为:
CStaticArray<LoginClient*> *m_pLoginClients;维护所有登录的客户信息;
b. IConnector* m_pSockGameWorld:这个用来和GameServer建立连链;
ISocketCtrl* m_pSockClientListen: 这个用来接手所有玩家的链接请求。
c. AcceptNewClient():接受客户端的链接请求,并未之分配LoginClient,并分配ID,作为索引。
d. 每个登录的用户都会分配一个类对象:
LoginClient{
        ClientID;     //这个编号是在分配LoginClient是确定的,有空闲块的编号确定
        State:                //用户的状态
        pConnector;  //和LoginServer通讯的Socket
        AccountName;  
        PassWord;
IP;
MapSoftKeyList;        //登录验证时的软键盘
TimeCost[STATE_MAX];
};
2. 处理模块
工作线程的处理方法是:RunOneStep;
主要的处理函数有以下几个:
a. RecvAllClientMsg:          //接收所有来自用户的数据
b. ProcessAllClientMsg:         //处理所有用户的请求
c. ProcessLoginDBMsg:   //处理来自AccountServer的回应
d. SendAllClientMsg:    //发送消息给各个用户。

3. ProcessAllClientMsg:
a. LoginClient::STATE_CHECK:
1) Msg_RIGHTCHECK:
2) MSG_RIGHTCHECK2:
所用的消息协议是:MsgRightCheck2;
如果版本号等验证通过,状态改成STATE_LOGIN;否则给客户端返回错误:MsgAckLogin
b. LoginClient::STATE_LOGIN:
1) MSG_ACKGRAPHICCODE:
2) MSG_LOGIN:
3) MSG_LOGIN2:
如果版本号验证没通过、用户名密码长度有问题,给客户端返回MsgAckLogin消息;
然后记录用户名、密码到LoginClient;

然后访问AcountServer或是其他运营商后台。注意,DLL方式(其他运营商) 使用同步方式。
l e_AccountServer;
访问DB,消息协议是DBMsgLogin2;
l e_Thunder;
l e_17173:
直接发送验证并等待返回,如果成功,将向GameServer发消息:MsgLoginInfo;
dwSessionKey:时间戳;
info.header.stID = iLoopSize;就是此Client分得的ID、编号。
l MSG_ThunderLoginInfo:
c. LoginClient::STATE_WAITDB

4. ProcessGWMsg:
a. 定时向GameServer发送Ping信息:MsgPingMsg;
b. 处理接收到的消息:
1) MSG_PING:
2) MSG_GWBURTHEN:
3) MSG_SWITCHGATE:
发送消息给Client,消息协议是:MsgSwitchGate;
pClient->SetTimeCost( LoginClient::STATE_SWITCHGATE, timeGetTime() );
4) MSG_Tell_LoginServer_GateOK:
收到消息格式:MsgTellLS_GS_OK;
给GameServer返回:ArabicNights:BMsgAckAccountState。
5.  ProcessLoginDBMsg
a. 定时向GameServer发送Ping信息:MsgPingMsg;
b. 处理接收到的消息:
1) DBMSG_ACKLOGIN:
返回给客户端,登录成功消息:MsgAckLogin;
给GameServer发消息:MsgLoginInfo。

三、 GateServer逻辑分析:
1. 处理模块
工作线程的处理方法是:RunOneStep;
主要的处理函数有以下几个:
a. SockClientListen->AcceptNewClient();
b. ProcessGWMsg();
c. RecvAllClientMsg();
d. UpdateTheLoginInfo();
e. ProcessAllClientMsg();
f. SendAllClientPackMsg();
g. SendAllClientMsg();

2. ProcessGWMsg():
a. 想GameServer发送Ping消息;
b. 消息协议:
1) MSG_PING:
2) MSG_GW2G_RETALLOCCLIENT:
3) MSG_GW2G_SYNCCHARPOS:
4) MSG_GW2G_NPCEXIT:
5) MSG_GW2G_CREATESTAGE:
6) MSG_GW2G_RELEASESTAGE:
7) MSG_GWORLDINFO:
8) MSG_LOGININFO:
9) DispatchToPlayer(),转发到Client。
sendrange_single;
sendrange_view;
sendrange_viewexceptme;
sendrange_area;
sendrange_region;
sendrange_stage;
sendrange_world。

3. ProcessAllClientMsg:
        while (pMsg = pClient->GetConnector()->GetMsg()) {
            //如果还未通过GameWorld分配ID,则只处理申请ID和重连消息
            if (pClient->GetGWID() == -1){
                if (pMsg->GetType() == MSG_ALLOCGWID) {
                    if (pClient->GetReqAllocTime() == 0) {
                        MsgAllocGWID* pMessage = (MsgAllocGWID*)pMsg;
                        DebugLogout("Client请求GameServer分配角色%d %s", pClient->iID, pClient->m_strIP.c_str());
                        pClient->m_bIsSendConnectInfo = true;
                        SendAllocClient(pClient->iID, pMessage->szUserName );
                        break;
                    }
                } else if (pMsg->GetType() == MSG_RECONNECT) {
                    OnClientReConnect(pMsg, pClient);
                    break;
                }
            }
        }
否则:
a. MSG_PING:
客户端的消息MsgLogin;
给GameServer发消息,同样是MsgLogin。
以下消息将更新一些信息,然后把消息转发给GameServer。
b. MSG_GETCHARACTER:
MsgGetCharacter* get = (MsgGetCharacter*)pMsg;
//在这里记录下曾经收到客户端发送过来的AccID和SessionKey
//客户端发送过来的并不一定就是正确的,但可以利用它来进行断线重连的校验
pClient->SetAccountID(get->nAccountID);
pClient->SetSessionKey(get->nSessionKey);
c. MSG_PLAYERMOVINGPOSTOSERVER:
MsgPlayerMovingPosToServer* p = static_cast<MsgPlayerMovingPosToServer*>(pMsg);                   pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
d. MSG_PLAYERMOVINGPOSANDDIRTOSERVER:
MsgPlayerMovingPosAndDirToServer* p = static_cast<MsgPlayerMovingPosAndDirToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
e. MSG_PLAYERPOSTOSERVER:
MsgPlayerPosToServer* p = static_cast<MsgPlayerPosToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
f. MSG_PLAYERPOSANDDIRTOSERVER.
MsgPlayerPosAndDirToServer* p = static_cast<MsgPlayerPosAndDirToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);


四、 AccountServer逻辑分析:

五、 GateServer逻辑分析:
1. RunOneStep:
h. SockClientListen->AcceptNewClient();
i. ProcessGWMsg();
j. RecvAllClientMsg();
k. UpdateTheLoginInfo();
l. ProcessAllClientMsg();
m. SendAllClientPackMsg();
n. SendAllClientMsg();

2. ProcessGWMsg():
c. 想GameServer发送Ping消息;
d. 消息协议:
10) MSG_PING:
11) MSG_GW2G_RETALLOCCLIENT:
12) MSG_GW2G_SYNCCHARPOS:
13) MSG_GW2G_NPCEXIT:
14) MSG_GW2G_CREATESTAGE:
15) MSG_GW2G_RELEASESTAGE:
16) MSG_GWORLDINFO:
17) MSG_LOGININFO:
18) DispatchToPlayer(),转发到Client。
sendrange_single;
sendrange_view;
sendrange_viewexceptme;
sendrange_area;
sendrange_region;
sendrange_stage;
sendrange_world。
ProcessAllClientMsg:

        while (pMsg = pClient->GetConnector()->GetMsg()) {
            //如果还未通过GameWorld分配ID,则只处理申请ID和重连消息
            if (pClient->GetGWID() == -1){
                if (pMsg->GetType() == MSG_ALLOCGWID) {
                    if (pClient->GetReqAllocTime() == 0) {
                        MsgAllocGWID* pMessage = (MsgAllocGWID*)pMsg;
                        DebugLogout("Client请求GameServer分配角色%d %s", pClient->iID, pClient->m_strIP.c_str());
                        pClient->m_bIsSendConnectInfo = true;
                        SendAllocClient(pClient->iID, pMessage->szUserName );
                        break;
                    }
                } else if (pMsg->GetType() == MSG_RECONNECT) {
                    OnClientReConnect(pMsg, pClient);
                    break;
                }
            }
        }
否则:
g. MSG_PING:
客户端的消息MsgLogin;
给GameServer发消息,同样是MsgLogin。
以下消息将更新一些信息,然后把消息转发给GameServer。
h. MSG_GETCHARACTER:
MsgGetCharacter* get = (MsgGetCharacter*)pMsg;
//在这里记录下曾经收到客户端发送过来的AccID和SessionKey
//客户端发送过来的并不一定就是正确的,但可以利用它来进行断线重连的校验
pClient->SetAccountID(get->nAccountID);
pClient->SetSessionKey(get->nSessionKey);
i. MSG_PLAYERMOVINGPOSTOSERVER:
MsgPlayerMovingPosToServer* p = static_cast<MsgPlayerMovingPosToServer*>(pMsg);                   pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
j. MSG_PLAYERMOVINGPOSANDDIRTOSERVER:
MsgPlayerMovingPosAndDirToServer* p = static_cast<MsgPlayerMovingPosAndDirToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
k. MSG_PLAYERPOSTOSERVER:
MsgPlayerPosToServer* p = static_cast<MsgPlayerPosToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);
l. MSG_PLAYERPOSANDDIRTOSERVER.
MsgPlayerPosAndDirToServer* p = static_cast<MsgPlayerPosAndDirToServer*>(pMsg);
pChar->SetFloatX(p->vPos.x);
pChar->SetFloatY(p->vPos.y);




六 服务器部分消息流程:

                  魔神程序方面开关

一 客户端方面
   客户端方面涉及到对palyer加密方面(防止刻意修改),
   在工程里cfg.cpp里添加游戏性能和配置方面的开关。
   一般“0”是关闭 “1”是开启

    1. //是否通过DCSERVER连接服务器(用0 1进行判断)
usedcserver=0
2.//人物初始化角色性别(0 ,1)
LoackRoleSex=1
3.// 使用高级特效
usehighleveleffect=1
4.//配置是否单机
     localversion=0
     //配置是否开启资源原始文件检测
    5. [ResourceCheck]
IsCheck = 1
[AntiCheckTime]
AntiTime=1//once checking time(minute)检测一次的时间
6.人物角角色阴影开关
   Goodshadow = 1

Game.cpp客户端:游戏主函数

1.//调试用的宏和预编译 设置的开关
_DEBUG //客户端release和Debug版本调试
2.//WIN32
  WIN32 windows的版本
3.//防沉迷客户段
#define USEDEFWALLOW 1   0是没打开1是打开根据版本需求写入相应的开关


CfgScreen.ini:3D渲染方面

     1.//使用蒙皮阴影渲染
useskinmeshshader=0
2.//使用高光效果
usehighleveleffect=1
3.//是否全屏显示
  fullscreen=0
4.屏幕显示的模式有三种
Displaymode =0;// eWindowScreen 得到当前屏幕窗口模式(指定的大小)
Displaymode = 1;//eMaxScreen   得到显示器最大分辩率模式
Displaymode = 2;//eFullScreen   全屏模式 游戏窗口占据全屏

Game_setting.xml
使用true or false开关来判定是否

IsCloseSound = "false"      //是否关闭游戏声音
IsAutoCamera = "false"      //是否是开启自由视角
IsCloseMusic = "false"      //是否关闭音乐
IsFullSrceen = "false"      //是否是全屏
IsGloatLight = "false"      //是否使用全局泛光
NewSkyBox = "true"           //是否使用用天空盒
IsShowHotkey = "false"      //是否使用快截键
IsShowNameTip = "0"          //配置人物 物品 怪屋的显示名字 0 ,1, 2
IsMouse = "true"             //是否使用鼠标模式
IsLockCamera = "false"      //是否视角锁定
IsShowNpcName = "true"      //是否显示NPC的名字
IsShowPlayerName = "false" //市斗显示玩家的名字

launcher.ini:客户端文件更新系统

1. 用户协议是否同意开关判定
IsRememberAgreement =1
2. 是否第一次打开luanch.exe
    firstopen =1

二  服务器端方面开关

      //调试用的宏和预编译 设置的开关
_DEBUG //客户端release和Debug版本调试和文件执行的结果
   Game_server.ini
     1.//是否开启所有怪物AI
AllAIOpen=1
2.//是否启用多线程刷怪
MTRefMonster=1
3.//是否启用多线程处理地图逻辑
MTStageProc=1
4.//是否开启计费 (TestServer=1时为不开启)
TestServer=1
5.//PK开关
PKOpen=1
6.//是否启用图形验证反外挂
AntiPluginOpen=1
7.//是否打开防沉迷
DefWallowOpen =1
8.//是否开启防UnderWord
DisableChatofWorld=0
9. m_nGameYear=1         (开新服时要改为1
10.//检测到非指定客户端登陆是否KICK掉这个PLAYER(1是踢,0是不踢)
IsKickCheater =0



login_server.ini

        //是否启用图形验证反外挂(0关1开启)
1.AntiPluginOpen=1
2.//17173
logintype = 0 //正式服务器
logintype = 1 //17173的服务器(通过dll 接口)
database_server.ini

1.//人物删除是否保留七天(0是关闭)1是开启
canceldel 0
2.//是否是测试服务器类型控制服务器的缓存 0不是测试服务器1是测试服务器
testserver 0
account_server.ini

1.//是否是测试服务器类型控制服务器的缓存 0关闭 1是开
testserver 0
2.//是否使用缓存1使用 0是关闭
AccountCache 1











              魔神文件格式和安装方法


一 安装方法
1. 安装Visual Studio 2005,DirectX SDK 9.0(d3dx9_37.dll版本)。
2. 登录AB,进入WOH工程,然后下载WOHDeveloper(该目录内容为魔神游戏所有代码,包括客户端,服务器,工具代码)到本地,从WOHDesignerReleaseChinaClient下载客户端资源到本地WOHDeveloperclientin目录下(WOHDeveloperclientin为客户端执行程序目录)和WOHDeveloperserverin目录下(WOHDeveloperserverin为服务器执行程序目录)。

二 代码文件夹结构
1. client文件夹为魔神客户端代码。
2. common文件夹为客户端,服务端,图形引擎共用的开发库。
3. contrib文件夹为客户端,服务端使用到的开发库,包括3D图形引擎HR3D,UI引擎HRUI,DXSDK,tinyxml,zlib等。
4. doc文件夹为开发文档。
5. server文件夹为魔神服务端代码。
6. tool文件夹为工具代码,包括HR3D模型编辑器mdx studio,HR3D地形编辑器map editor,HRUI编辑器ui editor,道具属性打包工具item factory,资源加密工具resource_checker,GM工具gmtool等。
三  客户端编译

1. 打开WOHDevelopercontribcontrib.sln,然后编译所有工程。
2. 打开WOHDeveloperclientclient.sln,然后编译client工程,编译后的client.exe会生成在WOHDeveloperclientin目录下。


四 客户端client目录结构


1. Action人物动作管理,比如施放技能。
2. ArabicNights通信协议使用到的数据结构,背包类。
3. CameraStuntManager摄像机效果管理器。
4. Effect图形特效。
5. GameLogic游戏逻辑类。
6. Include客户端代码头文件,包括主循环,其他的代码头文件。
7. Map游戏地图,包括MiniMap。
8. Player游戏人物类,包括通讯,移动,显示等功能。PlayerAnimCtrl类是Avatar,Player类是玩家游戏逻辑包括怪物,PlayerRole类是处理玩家自己逻辑,FightStatus类是战斗状态。
9. Script脚本类,Lua。
10. Src客户端代码源文件。
11. Tools一些数据库,slk读取。
12. UI游戏界面逻辑,包括UIFriend好友列表,UILogin(登录界面,游戏人物选择),UIGuild工会界面,role游戏人物UI(背包,属性,任务,技能等),UI        rade商城等。
13. 通信 里面包括客户端和服务器通讯的协议。





客户端篇

一、完整客户端放置
1、将项目组提供的完整客户端下载到本地测试安装过程和登陆过程。安装完运行游戏之前,先将安装目录下的client.dat 备份一份,然后改后缀名为“.exe”后运行(禁止更新)。如果这个过程没有问题,就可以将新版本的完整客户端上传到CDN221.238.255.21)了。
2、上传完后,用 WinMD5 工具算出当前客户端的MD5后连同下载地址一起发送给项目组同事。
至此,完整客户端的放置工作就做完了。

二、更新方法
1、客户端 手动 更新包操作
手动更新文件是程序部门提供的更新包里的带版本号的“.exe”文件,如Ms_Test_Server_1.15-1.16_patch.exe。只需要把“.exe”文件上传到帝联加速CDN(地址221.238.255.21)就可以了。
2、客户端 自动 更新包操作
2.1、先提取程序部门提供的更新包文件里的autopatch_test_1.15-1.16文件夹,删除Autopatch_Test_1.15-1.16UIpatchupdate.xml文件(该文件为版本记号,手动更新包需要该文件,但是自动更新包程序会自动生成,所以不需要更新) ,再用压缩工具UpdateMaker.exe将此文件夹的所有内容进行压缩:打开压缩工具UpdateMaker.exe,把文件夹拖进去(压缩工具和文件夹保持在同一目录下),然后回车,输入版本号(更新后的最新的版本),如这次为1.16,然后回车,第一个压缩选“Y”第二个扫描选“N”,等待压缩完成就可以了。压缩完后,会生成一个1.16的文件夹,这个就是我们做好的更新文件。然后将1.16上传到60.191.88.28(ftpqwf:30020),然后远程上60.191.88.28,传输上去的更新文件所在目录为E:TianjiUpdate,而魔神外网公测更新所在目录为E:updupdatems_patch,测试服目录为E:updupdatems_patchceshi 。然后把上传的版本更新到相应的目录下就可以了。
注意:验证文件是否存在,在CDN加速完成的几分钟之后在IE里输入http://cupd.tj.ferrygame.com/ms_patch/ceshi/1.16/versioninfo_1.16.xml(注意路径和地址上的版本信息),查看这个文件或者同目录下的其他文件,如果可以打开或者下载,就可以继续下面的操作。否则,等待到可以打开后再继续。
2.2修改配置文件,在关闭服务器之后(根据项目组要求,如果没有版本更新的话可以不用关服),Remote60.191.88.11,进入目录D:ms.ferrygame.com,该文件夹内只有几个“.zip”文件是我们用的,其他的不要乱动。
这里做下简要说明:serverip2.zipserverip3.zip是加大区的时候用的,2是对外的,3是对上海程序的。Slist_1.zip-slist_5.zip分别对应游戏客户端上面的服务器列表,slist_6.zip对应测试服务器,也可以通过以上更新包里面的server_list.ini(服务器列表)知道所在大区。合服,开新区以及开新服就是在server_list.ini里面进行的。
自动更新包是跟该压缩包里面的version.xml有关的。首先,先把该文件拖到桌面,编辑,添加相同格式的一条参数,修改为最新版本号,然后保存,再压缩回去就可以了。
2.3、然后上帝联科技的网站进行推送http://customer.dnion.com/ ——内容管理——文件更新,在框内输入如下(前面5条是正常服,最后一条是测试服):
http://ms.ferrygame.com/slist_1.zip
http://ms.ferrygame.com/slist_2.zip
http://ms.ferrygame.com/slist_3.zip
http://ms.ferrygame.com/slist_4.zip
http://ms.ferrygame.com/slist_5.zip
http://ms.ferrygame.com/slist_6.zip
然后点击“文件提交”,提交后在IE里检查,http://ms.ferrygame.com/slist_6.zip 打开一个文件,查看核对里面的修改日期与60.191.88.11上的应该一致,也就是最新修改过的日期,这样就说明该文件已经推送成功,至此客户端的自动更新就全部完成了。



但是,如果在10分钟内该文件还没有更新,那就该联系CDN了,有两种方式:发送邮件或者打电话:
电话:400-880-5508
邮箱:cdnsupport@dnion.com
客服csc@dnion.com

这几个阶段要用到的服务器的 FTP & Remote 账号:
1、CDNFTP221.238.255.21:21    帐号dukou,密码game123dk
2、自动更新包FTP60.191.88.28:30020    账号qwf,密码qwf
3、88.28Remote60.191.88.28    帐号:administrator 密码:Network~hztel
488.11Remote60.191.88.11:30010    帐号:administrator  密码:Network~ferry
5、帝联科技http://customer.dnion.com    账号:dl_dukou ,密码:Dukou1@#

服务端篇

一、开新大区和(或)开新服务器
1、核对、检查并测试好如下:硬件环境,系统状态,安全策略,远程端口,默认账号更改。
   硬件环境上面所说的硬件需求 ,系统状态-稳定 ,安全策略由用户根据自己需求自己设定,远程的端口是开启 ,默认帐号只服务器机器登陆帐号。
2、将准备好的外网服务端放进新的服务器(删除所有日志文件和“.xml”,如果有的话),再根据需求修改如下几个配置文件(红色部分是需要更改的):

u Account配置文件
[Main]
Name 渡口网络
Port 20006   //端口
[ACCDBSrv]
AccountCache=0
AccountCache 1
testserver 0
ip 60.191.34.89,1210   //数据库地址
uid sa    //数据库帐号
pwd china~209  //数据库密码
db GameAccountDB  //张浩数据库名称

u DBgate配置文件
[Main]
Name moting        
Port 20007  //端口
[ACCDBSrv]
ip 60.191.34.89,1210
uid sa              //accountgate.Ini对应
pwd china~209       //accountgate.Ini对应
db GameAccountDB  //accountgate.Ini对应

[ROLEDBSrv]
testserver 0
canceldel 1
ip 60.191.34.89,1210
uid sa
pwd china~209
db Role_DL    //角色库名称(DL大陆)

u Gate配置文件
[Default]
//对应的serverui 游戏世界的ip
GWorldIP=60.191.34.89  (所开服务器本机的IP
GWorldPort=20005
//需要和对应的Game server的名字一样
GameWorldName=磐石网络
OnlineMax=1000
//但前机器的对外IP,不能写名字
LocalIP=60.191.34.89
//对应的dcserverip
DCServerIP=60.191.34.89
GatePort=30004   (端口)

u SERVER配置文件:端口、ip地址、版本号、天机历等。包括:

u Game_server.ini
[Default]
//Ver
Version=1654041                (根据版本实际情况修改)
//目标数据库服务器的,ip
DBServerIP=10.1.1.217  (DB服务器地址)
//DBServerPort=20010
DBServerPort=20017  (DB服务器端口)
//------------------------------------------------------------------
//文件DB存储路径
FileDBPath=d:filedb        (如果D盘没有这个目录,则需要新建)
//------------------------------------------------------------------
//游戏世界的名字,需要和对应的Gateserver.ini一样
//系统会自动根据不同的名字生成不同的ID....一组游戏世界中名字不能一样
GameWorldName=磐石网络
LoginServerPort=20010
AccountServerIP=61.164.62.201        (AccountIP
AccountServerPort=20026        (不同的Account不同的端口)
//------------------------------------------------------------------
//游戏中新Player所在的出生点的位置

BornPointMap1=0
BornPointX1=494
BornPointY1=508

BornPointMap2=0
BornPointX2=494
BornPointY2=507

BornPointMap3=0
BornPointX3=495
BornPointY3=507

BornPointMap4=0
BornPointX4=495
BornPointY4=508

BornPointMap5=0
BornPointX5=493
BornPointY5=507

BornPointMap6=0
BornPointX6=493
BornPointY6=506

//------------------------------------------------------------------
//是否开启所有怪物AI
AllAIOpen=1
//游戏中能有的最多PLAYER数目
//游戏中能有的最多PLAYER数目根据服务器的承受能力和游戏的负载能力(小于1000
OnlineMax=700
//是否启用多线程刷怪
MTRefMonster=1
//是否启用多线程处理地图逻辑
MTStageProc=1
//------------------------------------------------------------------
m_AutoMonsterBornPoint1X=7887
m_AutoMonsterBornPoint1Y=60
m_AutoMonsterBornPoint2X=60
m_AutoMonsterBornPoint2Y=60
serverid=0
m_iEquipAttrDrop1000Rate=800
m_iEquipValueDrop1000Rate=800
fGlobalDropRate=1.00


m_nDropEquip1Hole1000Rate=500
m_nDropEquip2Hole1000Rate=100
m_nDropEquip3Hole1000Rate=20
m_nMakeEquip1Hole1000Rate=750
m_nMakeEquip2Hole1000Rate=150
m_nMakeEquip3Hole1000Rate=30


//等级上限
LevelLimt=60
FriendMax=100
DBIP=10.1.1.217,1210                 (DB库信息)
szDBName=ServerInfo_DX2                (库名)
szDBPWD=Role&DianXin                (库密码)
szDBUser=DX@Role                (库账号)
m_nYear=1                        魔神历,开新服时设置为:11100
m_nMonth=10
m_nDay=14
m_nHour=12
m_nMinute=0
m_szYearName=魔神
m_nGameWorldTimerRate=4

//是否开启计费 (TestServer=1时为不开启)
TestServer=1
//计费服务器地址
BillingServerIP=127.0.0.1
BillingServerPort=20008

SkillExpLimt =705032704
//PK开关
PKOpen=1
GMPassword=12345!@#$%
m_nGameYear=1         (开新服时要改为1
SaveDelay=300000
(基本上下面的都不要改动了)
//金钱最大值
MenoyMax=50000000
GoldCovSilver=500
MonsterNumber=1000
loginserverip=localhost
OnlySaveToDBOnExit=1

CreatCharBagSize=24
KickPlayerByCredit=1

//是否启用图形验证反外挂
AntiPluginOpen=0
//反脱机外挂图片生成程序路径
CreateImgExe=CreateImgCode/CreateCodeImage.exe
//服务器上用于存放临时生成的验证码图片路径
TmpImageFolder=d:        mpimgfolder
//在经过多长战斗状态时间后进行检测(单位:毫秒)
CheckWhenFightingTime=3600000
//留给玩家的验证时间,在此时间内玩家即使不验证也不会受到影响(单位:毫秒)
CheckTime=600000

//每点积分增加的时间(秒)
perIntegralTime =3600


//是否打开防沉迷
DefWallowOpen =0

//防沉迷每阶段的时间(秒)& 经验减少的比例
FirstPhase =28800
FirstPhaseExpSub =20
FirstPhaseSkillExpSub =20

SecondPhase =43200
SecondPhaseExpSub =40
SecondPhaseSkillExpSub =40

ThirdPhase =57600
ThirdPhaseExpSub =80
ThirdPhaseSkillExpSub =80

//刷新时间
Refresh_hour =17
Refresh_min =30
//复活的RMB
//原地复活
ReliveOriginNon =20
//原地复活HPMP全满
ReliveOriginAllHpMp =2000

//每隔多久告诉在线时间的(毫秒)
TellPlayerInfoPerTime =1800000
//远程修理价格RMB
RePairCost=0

MapThreadSleep=10
DisableChatofWorld=0
//加锁物品的数量上限
LockItemLimt=5
//坐下回复加快%
SitdownRestorePer=400

LogServerIP=127.0.0.1
LogServerPort=20011
//锁定强化的银票
LockIntensifyRMB=500
//回血速度
CharDataRestoreCheck =3000

//检测到非指定客户端登陆是否KICK掉这个PLAYER(1是踢,0是不踢)
IsKickCheater =0

//物品增加的积分上限
IntegralMaxByItem =550
ShopCenterOffSet=100
AfkTime=120
//杀死同一个人的刷新时间()
refreshtime=3600
//第一次杀死%
firstkill=100
//第而次杀死%
secondkill=80
//第三次杀死%
thirdkill=40
//更多次杀死%
morekill=0

HighShoutCountPerDay=999
highshottime =180
IsHighShoutTimeLimit=1

//每天获得最大PK值(不能大于PK值上限不能小于0
pkvaluemax =1000
areaid=0
dulendrethpper=15

u Login_Server.ini
[Default]
LocalIP = 127.0.0.1
ListenPort = 20003   (端口号)
GameWorldIP = 127.0.0.1         (游戏世界IP
GameWorldPort = 20010        (登陆游戏世界的端口号)
GameWorldName = 磐石网络
MaxClient = 1000
LoginDBIP = 127.0.0.1  Account地址)
LoginDBPort = 20006    (需要跟Accountgate的端口对应)
AntiPluginOpen=0
CreateImgExe=CreateImgCode/CreateCodeImage.exe
TmpImageFolder=d:        mpimgfolder


二、合区合服
不管是合大区还是合服,我们要做的仅仅只有Remote60.191.88.11上修改相对应的“.zip”里面的配置文件即可!
目前88.11目录下的serverip3.zip文件只是针对上海研发部使用的,基本上不会动到这个。外网信息都在serverip2.zip
合大区的时候修改serverip2.zip里对应的信息,合服的时候修改对应的slist_x.zip 里的信息。

三 服务端更新
根据项目组或者程序部门提供的更新包文件直接拷贝server 目录下的所有文件覆盖到服务端目录下即可(根据需要修改相应文件名)!

四 配置相应得服务器需要有的文件
      启动apl需要licence 有研发部门提供。要顾客提供相应的服务器端的MAC地址。
研发部门根据需求做相应。Licence一般的最小单位是月

五 开启服务器的成功的标志
1accountServer示列如下图











2DBServer示列如下图:








3loginServer示列如下图:
4GateServer示列如下图
5GameServer示列如下图
Save All Date是保存服务器数据 Button
Bulletin 是发送系统消息的Button点击按钮将会弹出个System Bulletin对话框
GM或平台人员可以根需求发送全服广播。
ClearDefWallow 之前是清除中国大陆防沉迷的设置的按钮(不需要操作)
Debug Info 是提供Debug信息按钮

6.主要看GameServer
连接成功的话loginServer ,DBGate ,AccountGate,1则开启成功Gate13则连接成功

7Application_manager 服务器exe启动器
服务器文件夹下application_manger.config里可以根据需求设置启动哪些sever执行文件

操作实践FAQ

1、玩家登陆游戏的原理
当玩家选择游戏服务器时首先是Login server相连接进行登陆,然后Login server会与account交换数据进行身份验证,验证通过后自动分流到Game server对应的某台gate server中,并且和DB gate交换数据,读取玩家角色,最后进入游戏(Game server)

2、各个服务器的作用
Ø Account :数据库主服务器,记录玩家帐号,消费信息
Ø DB gate :角色数据库服务器,记录玩家帐号所对应的角色
Ø Gate server :登陆分流服务器,保证玩家可以顺畅登陆游戏的负载均衡式服务器
Ø Login server :游戏登陆器,此服务器的开关直接影响到玩家能否登陆
Ø Game server :游戏世界服务器,负责游戏正常的运行。

3、开关服标准流程
启动管理进程,分别双击左边的各个程序以打开右边的标签。开启程序的顺序是:依次Start GameServer——3Gateway——Login,如果gate是独立在另外的服务器,则需要在此服务器上开启GameServer后,切换至Gate服务器开启所有的Gate后再回到本服务器开启Login程序。

关服则是一个逆过程,需要注意的是:1)只能够在管理进程里Stop程序才能够关闭程序,直接关闭的话,程序还会自动起来的;2StopGameServer这一步时,需要观察GameServer里的提示信息,如下图

当角色数据都为0的时候,游戏里的角色数据才保存完毕,这个时候才可以Stop GameServer,否则的话就会出现回挡。

4、出现如下错误或者异常时的解决方法


作者: 愤怒的大鸟    时间: 2015-1-21 17:36
魔神争霸学习下
作者: pizazz    时间: 2015-1-24 19:36
魔神争霸学习下
作者: 灵魂腐蚀    时间: 2015-1-25 16:26
魔神争霸好,很好,非常好!
作者: 因胸联盟    时间: 2015-2-3 09:46
魔神争霸为毛老子总也抢不到沙发?!!
作者: admin    时间: 2015-2-8 20:03
魔神争霸前排顶,很好!
作者: 谁可相欹    时间: 2015-2-26 02:52
魔神争霸看了一遍原文,不懂;又看了一遍原文,还是不懂。再看了一遍原文,实在不懂。最后看了一遍回帖,懂了我为什么不懂……于是我懂了,人有时候要学会放弃。
作者: 不帅    时间: 2015-3-6 07:49
魔神争霸楼主呀,,,您太有才了。。。
作者: kkk103005    时间: 2015-3-6 21:56
魔神争霸学习v
作者: 金色的骷髅    时间: 2015-3-12 16:37
魔神争霸看起来好像不错的样子
作者: 山那边是海    时间: 2015-3-19 15:22
魔神争霸大人,此事必有蹊跷!
作者: 冷月葬花魂    时间: 2015-3-28 01:53
魔神争霸OMG!介是啥东东!!!
作者: 老尸    时间: 2015-3-28 23:21
魔神争霸呵呵。。。
作者: 简单生活    时间: 2015-4-2 17:51
魔神争霸楼主,有不满可以合法发泄,有病也要早治啊……
作者: 若相依    时间: 2015-4-21 20:10
魔神争霸
作者: 莫相离    时间: 2015-4-25 02:01
魔神争霸
作者: 再现理想    时间: 2015-4-26 13:10
魔神争霸好帖必须得顶起
作者: 飘飘悠悠    时间: 2015-4-27 16:08
魔神争霸LZ敢整点更有创意的不?兄弟们等着围观捏~
作者: 精灵巫婆    时间: 2015-4-30 03:51
魔神争霸不错支持下
作者: 深爱那片海    时间: 2015-6-14 12:25
魔神争霸现在我隆重的宣布本界的诺贝尔文学奖颁发给来自中国的WWW221先生,下面让我们以最诚挚的掌声欢迎楼主发表获奖感言.....
作者: 小女巫    时间: 2015-6-25 22:31
魔神争霸OMG!介是啥东东!!!
作者: 小妖女    时间: 2015-7-15 11:36
魔神争霸哎呀,你太牛了,我好崇拜你!
作者: dianpula    时间: 2019-11-25 15:18
这是好东西啊




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2