📄 svmain.pas
字号:
// end;
if not LoadClientFile then begin
Close;
exit;
end;
{$IF DBTYPE = BDE}
FrmDB.Query.DatabaseName:=sDBName;
{$ELSE}
FrmDB.Query.ConnectionString:=g_sADODBString;
{$IFEND}
LoadGameLogItemNameList();
LoadDenyIPAddrList();
LoadDenyAccountList();
LoadDenyChrNameList();
LoadNoClearMonList();
LoadDisableDropList(); // 读取禁止掉物列表
LoadDisableDealList(); //读取禁止交易列表
LoadDisableStorageList(); //读取禁止存仓列表
LoadDisablePlayTakeOnList();//读取禁止人物穿戴列表
LoadDisableYSTakeOnList();//读取禁止元神穿戴列表
LoadTopPlayList(); //读取TOPpLAYLIST
// g_Config.nServerFile_CRCB:=CalcFileCRC(Application.ExeName);
MemoLog.Lines.Add('正在加载物品数据库...');
nCode:=FrmDB.LoadItemsDB;
if nCode < 0 then begin
MemoLog.Lines.Add('物品数据库加载失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('物品数据库加载成功(%d)...',[UserEngine.StdItemList.Count]));
MemoLog.Lines.Add('正在加载数据图文件...');
nCode:= FrmDB.LoadMinMap;
if nCode < 0 then begin
MemoLog.Lines.Add('小地图数据加载失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('小地图数据加载成功...');
MemoLog.Lines.Add('正在加载地图数据...');
nCode:= FrmDB.LoadMapInfo;
if nCode < 0 then begin
MemoLog.Lines.Add('地图数据加载失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('地图数据加载成功(%d)...',[g_MapManager.Count]));
MemoLog.Lines.Add('正在加载怪物数据库...');
nCode:= FrmDB.LoadMonsterDB;
if nCode < 0 then begin
MemoLog.Lines.Add('加载怪物数据库失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('加载怪物数据库成功(%d)...',[UserEngine.MonsterList.Count]));
MemoLog.Lines.Add('正在加载技能数据库...');
nCode:= FrmDB.LoadMagicDB;
if nCode < 0 then begin
MemoLog.Lines.Add('加载技能数据库失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('加载技能数据库成功(%d)...',[UserEngine.m_MagicList.Count]));
MemoLog.Lines.Add('正在加载怪物刷新配置信息...');
nCode:= FrmDB.LoadMonGen;
if nCode < 0 then begin
MemoLog.Lines.Add('加载怪物刷新配置信息失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('加载怪物刷新配置信息成功(%d)...',[UserEngine.m_MonGenList.Count]));
MemoLog.Lines.Add('正加载怪物说话配置信息...');
LoadMonSayMsg();
MemoLog.Lines.Add(format('加载怪物说话配置信息成功(%d)...',[g_MonSayMsgList.Count]));
LoadDisableTakeOffList();
LoadMonDropLimitList();
LoadDisableMakeItem();
LoadEnableMakeItem();
LoadDisableMoveMap;
ItemUnit.LoadCustomItemName();
LoadDisableSendMsgList();
LoadItemBindIPaddr();
LoadItemBindAccount();
LoadItemBindCharName();
LoadUnMasterList();
LoadUnForceMasterList();
MemoLog.Lines.Add('正在加载捆装物品信息...');
nCode:= FrmDB.LoadUnbindList;
nCode:=nCode + FrmDB.LoadbindList;
if nCode < 0 then begin
MemoLog.Lines.Add('加载捆装物品信息失败!!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('加载捆装物品信息成功...');
MemoLog.Lines.Add('正在加载任务地图信息...');
nCode:= FrmDB.LoadMapQuest;
if nCode < 0 then begin
MemoLog.Lines.Add('加载任务地图信息失败!!!');
exit;
end;
MemoLog.Lines.Add('加载任务地图信息成功...');
MemoLog.Lines.Add('正在加载任务说明信息...');
nCode:= FrmDB.LoadQuestDiary;
if nCode < 0 then begin
MemoLog.Lines.Add('加载任务说明信息失败!!!');
exit;
end;
MemoLog.Lines.Add('加载任务说明信息成功...');
if LoadAbuseInformation('.\!abuse.txt') then begin
MemoLog.Lines.Add('加载文字过滤信息成功...');
end;
MemoLog.Lines.Add('正在加载公告提示信息...');
if not LoadLineNotice(g_Config.sNoticeDir + 'LineNotice.txt') then begin
MemoLog.Lines.Add('加载公告提示信息失败!!!');
end;
if not LoadLineBanner(g_Config.sNoticeDir + 'BannerNotice.TXT') then begin
MemoLog.Lines.Add('加载广告提示信息失败!!!');
end;
MemoLog.Lines.Add('加载公告提示信息成功...');
FrmDB.LoadAdminList();
MemoLog.Lines.Add('管理员列表加载成功...');
g_GuildManager.LoadGuildInfo();
MemoLog.Lines.Add('行会列表加载成功...');
g_CastleManager.LoadCastleList();
MemoLog.Lines.Add('城堡列表加载成功...');
//UserCastle.Initialize;
g_CastleManager.Initialize;
MemoLog.Lines.Add('城堡城初始完成...');
if (nServerIndex=0) then FrmSrvMsg.StartMsgServer
else FrmMsgClient.ConnectMsgServer;
StartEngine();
boStartReady:=True;
Sleep(500);
g_bostartup:= True;
{$IF DBSOCKETMODE = TIMERENGINE}
ConnectTimer.Enabled:=True;
{$ELSE}
FillChar(g_Config.DBSOcketThread,SizeOf(g_Config.DBSOcketThread),0);
g_Config.DBSOcketThread.Config:=@g_Config;
g_Config.DBSOcketThread.hThreadHandle:=CreateThread(nil,
0,
@DBSocketThread,
@g_Config.DBSOcketThread,
0,
g_Config.DBSOcketThread.dwThreadID);
{$IFEND}
{$IF IDSOCKETMODE = THREADENGINE}
FillChar(g_Config.IDSocketThread,SizeOf(g_Config.IDSocketThread),0);
g_Config.IDSocketThread.Config:=@g_Config;
g_Config.IDSocketThread.hThreadHandle:=CreateThread(nil,
0,
@IDSocketThread,
@g_Config.IDSocketThread,
0,
g_Config.IDSocketThread.dwThreadID);
{$IFEND}
g_dwRunTick := GetTickCount();
n4EBD1C := 0;
g_dwUsrRotCountTick := GetTickCount();
{$IF USERENGINEMODE = THREADENGINE}
FillChar(g_Config.UserEngineThread,SizeOf(g_Config.UserEngineThread),0);
g_Config.UserEngineThread.Config:=@g_Config;
g_Config.UserEngineThread.hThreadHandle:=CreateThread(nil,
0,
@UserEngineThread,
@g_Config.UserEngineThread,
0,
g_Config.UserEngineThread.dwThreadID);
{$ELSE}
{$IFEND}
RunTimer.Enabled:=True;
SendGameCenterMsg(SG_STARTOK,'游戏主程序启动完成...');
GateSocket.Address:=g_Config.sGateAddr;
GateSocket.Port:=g_Config.nGatePort;
g_GateSocket:=GateSocket;
// GateSocket.Open;
{$IF DEBUG = 0}
asm
jz @@Start
jnz @@Start
db 0E8h
@@Start:
end;
{$IFEND}
{$IF DEBUG = 0}
asm
jz @@Start
jnz @@Start
db 0E8h
@@Start:
end;
{$IFEND}
SendGameCenterMsg(SG_CHECKCODEADDR,IntToStr(Integer(@g_CheckCode)));
except
on e: Exception do
MainOutMessage('服务器启动异常!!!' + E.Message);
end;
asm
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
end;
end;
procedure TFrmMain.StartEngine(); //004E5F2C
var
nCode:Integer;
begin
try
{$IF IDSOCKETMODE = TIMERENGINE}
FrmIDSoc.Initialize;
MemoLog.Lines.Add('登录服务器连接初始化完成...');
{$IFEND}
g_MapManager.LoadMapDoor;
MemoLog.Lines.Add('地图环境加载成功...');
MakeStoneMines();
MemoLog.Lines.Add('矿物数据初始成功...');
nCode:= FrmDB.LoadMerchant;
if nCode < 0 then begin
MemoLog.Lines.Add('Load Merchant Error !!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('交易NPC列表加载成功...');
if not g_Config.boVentureServer then begin
nCode:= FrmDB.LoadGuardList;
if nCode < 0 then begin
MemoLog.Lines.Add('Load GuardList Error !!!' + 'Code: ' + IntToStr(nCode));
end;
MemoLog.Lines.Add('守卫列表加载成功...');
end;
nCode:= FrmDB.LoadNpcs;
if nCode < 0 then begin
MemoLog.Lines.Add('Load NpcList Error !!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('管理NPC列表加载成功...');
nCode:= FrmDB.LoadMakeItem;
if nCode < 0 then begin
MemoLog.Lines.Add('Load MakeItem Error !!!' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('炼制物品信息加载成功...');
// {$I License.inc}
nCode:= FrmDB.LoadStartPoint;
if nCode < 0 then begin
MemoLog.Lines.Add('加载回城点配置时出现错误 !!!(错误码: ' + IntToStr(nCode) + ')');
Close;
end;
MemoLog.Lines.Add('回城点配置加载成功...');
// {$I License.inc}
FrontEngine.Resume;
MemoLog.Lines.Add('人物数据引擎启动成功...');
// {$I License.inc}
UserEngine.initialize;
MemoLog.Lines.Add('游戏处理引擎初始化成功...');
// {$I License.inc}
// gamename:= g_Config.sServerName ;
// {$I License.inc}
// regthread:=mythread.Create(true);
// {$I License.inc}
// regthread.Priority :=tpHigher; //tpLower;
// {$I License.inc}
// regthread.Resume;
// {$I License.inc}
// {$I License.inc}
//这里可以做为验证点。
except
MainOutMessage('服务启动时出现异常错误 !!!');
end;
asm
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
end;
end;
procedure TFrmMain.MakeStoneMines();//004E5E88
var
i,nW,nH:Integer;
Envir:TEnvirnoment;
StoneMineEvent: TStoneMineEvent ;
begin
for i:=0 to g_MapManager.Count -1 do begin
Envir:=TEnvirnoment(g_MapManager.Items[i]);
if Envir.m_boMINE then begin
for nW:=0 to Envir.m_nWidth - 1 do begin
for nH:=0 to Envir.m_nHeight - 1 do begin
//if (nW mod 2 = 0) and (nH mod 2 = 0) then
// if Envir.CanWalk(nW, nH,false) then
StoneMineEvent:=TStoneMineEvent.Create(Envir,nW,nH,ET_STONEMINE);
if not StoneMineEvent.m_boAddmapok then StoneMineEvent.Free;
end;
end;
end;
end;
end;
function TFrmMain.LoadClientFile():Boolean;
begin
MemoLog.Lines.Add('正在加载客户端版本信息...');
// if not (g_Config.sClientFile1='') then g_Config.nClientFile1_CRC:=CalcFileCRC(g_Config.sClientFile1);
// if not (g_Config.sClientFile2='') then g_Config.nClientFile2_CRC:=CalcFileCRC(g_Config.sClientFile2);
// if not (g_Config.sClientFile3='') then g_Config.nClientFile3_CRC:=CalcFileCRC(g_Config.sClientFile3);
// if (g_Config.nClientFile1_CRC<>0) or (g_Config.nClientFile2_CRC<>0) or (g_Config.nClientFile3_CRC<>0) then begin
MemoLog.Lines.Add('加载客户端版本信息成功...');
Result:=True;
// end else begin
// MemoLog.Lines.Add('加载客户端版本信息失败!!!');
// Result:=False;
// end;
// Result:=True;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
var MenuItem,nMenuItem : TMenuItem;
begin
Start;
end;
procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
ResourceString
sCloseServerYesNo = '是否确认关闭游戏服务器?';
sCloseServerTitle = '确认信息';
begin
if not boServiceStarted then begin
// Application.Terminate;
exit;
end;
if g_boExitServer then begin
boStartReady:=False;
StopService();
// Sleep(500);
exit;
end;
CanClose:=False;
// if MessageDlg('是否确认退出服务器?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
if Application.MessageBox(PChar(sCloseServerYesNo),PChar(sCloseServerTitle),MB_YESNO + MB_ICONQUESTION) = mrYes then begin
g_boExitServer:=True;
CloseGateSocket();
g_Config.boKickAllUser:=True;
// RunSocket.CloseAllGate;
// GateSocket.Close;
CloseTimer.Enabled:=True;
end;
end;
procedure TFrmMain.CloseTimerTimer(Sender: TObject);
ResourceString
sCloseServer = '%s [正在关闭服务器(%d/%d)...]';
begin
Caption:=format(sCloseServer,[g_Config.sServerName,UserEngine.OnlinePlayObject,FrontEngine.SaveListCount]);
if UserEngine.OnlinePlayObject = 0 then begin
if FrontEngine.IsIdle then begin
CloseTimer.Enabled:=False;
Close;
end;
end;
end;
procedure TFrmMain.SaveVariableTimerTimer(Sender: TObject);
begin
SaveItemNumber();
end;
procedure TFrmMain.GateSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
RunSocket.CloseErrGate(Socket,ErrorCode);
end;
procedure TFrmMain.GateSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
RunSocket.CloseGate(Socket);
end;
procedure TFrmMain.GateSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
RunSocket.AddGate(Socket);
end;
procedure TFrmMain.GateSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -