📄 svmain.pas
字号:
Config.WriteInteger('Setup', 'WinLotteryLevel6', g_Config.nWinLotteryLevel6);
for i:=0 to 255 do
Config.WriteInteger('Setup','TARIFF'+Inttostr(i),g_Config.TARIFF[i]);
for i:=0 to 255 do
Config.WriteInteger('Setup','REBATE'+Inttostr(i),g_Config.REBATE[i]);
except
end;
end;
procedure TFrmMain.AppOnIdle(Sender: TObject; var Done: Boolean);
begin
// MainOutMessage ('空闲');
end;
procedure TFrmMain.OnProgramException(Sender: TObject; E: Exception);
begin
{$IF SHowErr = 1}
MainOutMessage(E.Message);
{$IFEND}
end;
procedure TFrmMain.DBSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
Socket.Close;
shutdown(Socket.SocketHandle,0);
end;
procedure TFrmMain.DBSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
tStr : string;
begin
EnterCriticalSection(UserDBSection);
try
tStr := Socket.ReceiveText;
g_Config.sDBSocketRecvText := g_Config.sDBSocketRecvText + tStr;
// MainOutMessage(tstr);
if not g_Config.boDBSocketWorking then
begin
g_Config.sDBSocketRecvText := '';
end;
finally
LeaveCriticalSection(UserDBSection);
end;
end;
procedure TFrmMain.Timer1Timer(Sender: TObject); //004E5418
var
boWriteLog : Boolean;
i : Integer;
nRow : Integer;
wHour : Word;
wMinute : Word;
wSecond : Word;
tSecond : Integer;
sSrvType : string;
sVerType : string;
tTimeCount : Currency;
GateInfo : pTGateInfo;
// sGate,tGate :String;
LogFile : TextFile;
s28 : string;
begin
// Caption:=sCaption + ' [' + sCaptionExtText + ']';
if g_MemShared.Open=1 then
Caption := format('%s(企业版)', [sCaption])
else
Caption := format('%s(专业版)', [sCaption]) ;
Application.Title:=Caption;
EnterCriticalSection(LogMsgCriticalSection);
try
if MemoLog.Lines.Count > 500 then
MemoLog.Clear;
boWriteLog := True;
if MainLogMsgList.Count > 0 then
begin
try
if not FileExists(sLogFileName) then
begin
AssignFile(LogFile, sLogFileName);
Rewrite(LogFile);
end
else
begin
AssignFile(LogFile, sLogFileName);
Append(LogFile);
end;
boWriteLog := False;
except
MemoLog.Lines.Add('保存日志信息出错!!!');
end;
end;
for i := 0 to MainLogMsgList.Count - 1 do
begin
MemoLog.Lines.Add(MainLogMsgList.Strings[i]);
if not boWriteLog then
begin
WriteLn(LogFile, MainLogMsgList.Strings[i]);
end;
end;
MainLogMsgList.Clear;
if not boWriteLog then
CloseFile(LogFile);
for i := 0 to LogStringList.Count - 1 do
begin
try
s28 := '1' + #9 + IntToStr(g_Config.nServerNumber) + #9 +
IntToStr(nServerIndex) + #9 + LogStringList.Strings[i];
if not LogUDP.Active then
LogUDP.Active := True;
LogUDP.SendBuf(PChar(s28)^, length(s28), 0);
finally
end;
end;
LogStringList.Clear;
if LogonCostLogList.Count > 0 then
begin
WriteConLog(LogonCostLogList);
end;
LogonCostLogList.Clear;
finally
LeaveCriticalSection(LogMsgCriticalSection);
end;
{$IF SoftVersion = VERDEMO}
sVerType := '[D]';
{$ELSEIF SoftVersion = VERFREE}
sVerType := '[F]';
{$ELSEIF SoftVersion = VERSTD}
sVerType := '[S]';
{$ELSEIF SoftVersion = VEROEM}
sVerType := '[O]';
{$ELSEIF SoftVersion = VERPRO}
sVerType := '[P]';
{$ELSEIF SoftVersion = VERENT}
sVerType := '[E]';
{$IFEND}
if nServerIndex = 0 then
begin
sSrvType := '[M]';
end
else
begin
if FrmMsgClient.MsgClient.Socket.Connected then
begin
sSrvType := '[S]';
end
else
begin
sSrvType := '[ ]';
end;
end;
//检查线程 运行时间
//g_dwEngineRunTime:=GetTickCount - g_dwEngineTick;
tSecond := (GetTickCount() - g_dwStartTick) div 1000;
wHour := tSecond div 3600;
wMinute := (tSecond div 60) mod 60;
wSecond := tSecond mod 60;
LbRunTime.Caption := IntToStr(wHour) + ':' +
IntToStr(wMinute) + ':' +
IntToStr(wSecond) + ' ' + sSrvType + sVerType; { +
IntToStr(g_dwEngineRunTime) + g_sProcessName + '-' + g_sOldProcessName;}
LbUserCount.Caption := '(' + IntToStr(UserEngine.MonsterCount) + ') ' +
IntToStr(UserEngine.OnlinePlayObject) + '/' +
IntToStr(UserEngine.PlayObjectCount) + '[' +
IntToStr(UserEngine.LoadPlayCount) + '/' +
IntToStr(UserEngine.m_PlayObjectFreeList.Count) + ']';
{
Label1.Caption:= 'Run' + IntToStr(nRunTimeMin) + '/' + IntToStr(nRunTimeMax) + ' ' +
'Soc' + IntToStr(g_nSockCountMin) + '/' + IntToStr(g_nSockCountMax) + ' ' +
'Usr' + IntToStr(g_nUsrTimeMin) + '/' + IntToStr(g_nUsrTimeMax);
}
Label1.Caption := format('处理(%d/%d) 传输(%d/%d) 角色(%d/%d)', [nRunTimeMin,
nRunTimeMax, g_nSockCountMin, g_nSockCountMax, g_nUsrTimeMin,
g_nUsrTimeMax]);
{
Label2.Caption:= 'Hum' + IntToStr(g_nHumCountMin) + '/' + IntToStr(g_nHumCountMax) + ' ' +
'Mon' + IntToStr(g_nMonTimeMin) + '/' + IntToStr(g_nMonTimeMax) + ' ' +
'UsrRot' + IntToStr(dwUsrRotCountMin) + '/' + IntToStr(dwUsrRotCountMax) + ' ' +
'Merch' + IntToStr(UserEngine.dwProcessMerchantTimeMin) + '/' + IntToStr(UserEngine.dwProcessMerchantTimeMax) + ' ' +
'Npc' + IntToStr(UserEngine.dwProcessNpcTimeMin) + '/' + IntToStr(UserEngine.dwProcessNpcTimeMax) + ' ' +
'(' + IntToStr(g_nProcessHumanLoopTime) + ')';
}
Label2.Caption :=
format('人物(%d/%d) 循环(%d/%d) 交易(%d/%d) 管理(%d/%d) (%d)',
[g_nHumCountMin,
g_nHumCountMax,
dwUsrRotCountMin,
dwUsrRotCountMax,
UserEngine.dwProcessMerchantTimeMin,
UserEngine.dwProcessMerchantTimeMax,
UserEngine.dwProcessNpcTimeMin,
UserEngine.dwProcessNpcTimeMax,
g_nProcessHumanLoopTime]);
Label5.Caption := g_sMonGenInfo1 + ' - ' + g_sMonGenInfo2 + ' ';
{
Label20.Caption:='MonG' + IntToStr(g_nMonGenTime) + '/' + IntToStr(g_nMonGenTimeMin) + '/' + IntToStr(g_nMonGenTimeMax) + ' ' +
'MonP' + IntToStr(g_nMonProcTime) + '/' + IntToStr(g_nMonProcTimeMin) + '/' + IntToStr(g_nMonProcTimeMax) + ' ' +
'ObjRun' + IntToStr(g_nBaseObjTimeMin) + '/' + IntToStr(g_nBaseObjTimeMax);
}
Label20.Caption :=
format('刷新怪物(%d/%d/%d) 处理怪物(%d/%d/%d) 角色处理(%d/%d)',
[g_nMonGenTime, g_nMonGenTimeMin, g_nMonGenTimeMax, g_nMonProcTime,
g_nMonProcTimeMin, g_nMonProcTimeMax, g_nBaseObjTimeMin,
g_nBaseObjTimeMax]);
tTimeCount := GetTickCount() / (24 * 60 * 60 * 1000);
if tTimeCount >= 36 then
LbTimeCount.Font.Color := clRed
else
LbTimeCount.Font.Color := clBlack;
LbTimeCount.Caption := CurrToStr(tTimeCount) + '天';
nRow := 1;
//for i:= Low(RunSocket.GateList) to High(RunSocket.GateList) do begin
for i := Low(g_GateArr) to High(g_GateArr) do
begin
GridGate.Cells[0, i + 1] := '';
GridGate.Cells[1, i + 1] := '';
GridGate.Cells[2, i + 1] := '';
GridGate.Cells[3, i + 1] := '';
GridGate.Cells[4, i + 1] := '';
GridGate.Cells[5, i + 1] := '';
GridGate.Cells[6, i + 1] := '';
GateInfo := @g_GateArr[i];
//GateInfo:=@RunSocket.GateList[i];
if GateInfo.boUsed and (GateInfo.Socket <> nil) then
begin
GridGate.Cells[0, nRow] := IntToStr(i);
GridGate.Cells[1, nRow] := GateInfo.sAddr + ':' +
IntToStr(GateInfo.nPort);
GridGate.Cells[2, nRow] := IntToStr(GateInfo.nSendMsgCount);
GridGate.Cells[3, nRow] := IntToStr(GateInfo.nSendedMsgCount);
GridGate.Cells[4, nRow] := IntToStr(GateInfo.nSendRemainCount);
if GateInfo.nSendMsgBytes < 1024 then
begin
GridGate.Cells[5, nRow] := IntToStr(GateInfo.nSendMsgBytes) + 'b';
end
else
begin
GridGate.Cells[5, nRow] := IntToStr(GateInfo.nSendMsgBytes div 1024) +
'kb';
end;
GridGate.Cells[6, nRow] := IntToStr(GateInfo.nUserCount) + '/' +
IntToStr(GateInfo.UserList.Count);
Inc(nRow);
end;
end;
Inc(nRunTimeMax);
if g_nSockCountMax > 0 then
Dec(g_nSockCountMax);
if g_nUsrTimeMax > 0 then
Dec(g_nUsrTimeMax);
if g_nHumCountMax > 0 then
Dec(g_nHumCountMax);
if g_nMonTimeMax > 0 then
Dec(g_nMonTimeMax);
if dwUsrRotCountMax > 0 then
Dec(dwUsrRotCountMax);
if g_nMonGenTimeMin > 1 then
Dec(g_nMonGenTimeMin, 2);
if g_nMonProcTimeMin > 1 then
Dec(g_nMonProcTimeMin, 2);
if g_nBaseObjTimeMax > 0 then
Dec(g_nBaseObjTimeMax);
end;
procedure TFrmMain.StartTimerTimer(Sender: TObject); //004E4848
var
nCode : Integer;
i : Integer;
begin
{$IF DEBUG = 0}
Function2;
{$IFEND}
SendGameCenterMsg(SG_STARTNOW, '正在启动游戏主程序...');
StartTimer.Enabled := False;
FrmDB := TFrmDB.Create();
StartService();
try
for i:=0 to DateCount-1 do
Begin
if DateConfig[i].DataTableName<>'' then
Begin
g_sADODBString:=format(g_sADODBString,[DateConfig[i].DataPassWord, DateConfig[i].DataUserName, DateConfig[i].DataTableName, DateConfig[i].DatabaseName]);
DataModule_mir200[i].ADOConnection_Mir.ConnectString:=g_sADODBString;
g_GuildManager[i].Query.ConnectionString:=g_sADODBString;
try
DataModule_mir200[i].ADOConnection_Mir.Connected:=True;
MemoLog.Lines.Add(Format('联接SQL数据库%d成功...',[i]));
except
MemoLog.Lines.Add(Format('联接SQL数据库%d失败...',[i]));
End;
End;
End;
LoadGameLogItemNameList();
LoadDenyIPAddrList();
LoadDenyAccountList();
LoadDenyChrNameList();
LoadNoClearMonList();
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]));
LoadItemLimiteList();
LoadDisableTakeOffList();
LoadEnableSellOffList();
LoadMonDropLimitList();
LoadDisableMakeItem();
LoadEnableMakeItem();
LoadDisableMoveMap;
ItemUnit.LoadCustomItemName();
LoadDisableSendMsgList();
LoadItemBindIPaddr();
LoadItemBindAccount();
LoadItemBindCharName();
LoadUnMasterList();
LoadUnForceMasterList();
MemoLog.Lines.Add('正在加载捆装物品信息...');
nCode := FrmDB.LoadUnbindList;
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -