📄 main.~pas
字号:
if sl.IndexOfName('DefaultPoint_Y') > -1 then begin
DefaultPoint_Y := StrToInt(sl.Values['DefaultPoint_Y']);
end else begin
DefaultPoint_Y := 100;
end;
if sl.IndexOfName('DefaultItem1') > -1 then begin
DefaultItem1 := StrToInt(sl.Values['DefaultItem1']);
end else begin
DefaultItem1 := 1201;
end;
if sl.IndexOfName('DefaultItem2') > -1 then begin
DefaultItem2 := StrToInt(sl.Values['DefaultItem2']);
end else begin
DefaultItem2 := 2301;
end;
if sl.IndexOfName('GMCheck') > -1 then begin
GMCheck := StrToIntDef(sl.Values['GMCheck'],0);
end else begin
GMCheck := $FF;
end;
if sl.IndexOfName('DebugCMD') > -1 then begin
DebugCMD := StrToIntDef(sl.Values['DebugCMD'],0);
end else begin
DebugCMD := $FFFF;
end;
if sl.IndexOfName('DeathBaseLoss') > -1 then begin
DeathBaseLoss := StrToInt(sl.Values['DeathBaseLoss']);
end else begin
DeathBaseLoss := 1;
end;
if sl.IndexOfName('DeathJobLoss') > -1 then begin
DeathJobLoss := StrToInt(sl.Values['DeathJobLoss']);
end else begin
DeathJobLoss := 1;
end;
if sl.IndexOfName('MonsterMob') > -1 then begin
MonsterMob := StrToBool(sl.Values['MonsterMob']);
end else begin
MonsterMob := true;
end;
if sl.IndexOfName('SummonMonsterExp') > -1 then begin
SummonMonsterExp := StrToBool(sl.Values['SummonMonsterExp']);
end else begin
SummonMonsterExp := true;
end;
if sl.IndexOfName('SummonMonsterAgo') > -1 then begin
SummonMonsterAgo := StrToBool(sl.Values['SummonMonsterAgo']);
end else begin
SummonMonsterAgo := false;
end;
if sl.IndexOfName('SummonMonsterName') > -1 then begin
SummonMonsterName := StrToBool(sl.Values['SummonMonsterName']);
end else begin
SummonMonsterName := true;
end;
if sl.IndexOfName('SummonMonsterMob') > -1 then begin
SummonMonsterMob := StrToBool(sl.Values['SummonMonsterMob']);
end else begin
SummonMonsterMob := true;
end;
if sl.IndexOfName('GlobalGMsg') > -1 then begin
GlobalGMsg := sl.Values['GlobalGMsg'];
end else begin
GlobalGMsg := '工会基地 $mapname 已经被 $guildname 工会占领!';
// Unoccupied version: 'The [$castlename] castle is claimed by [$guildname] guild.'
end;
if sl.IndexOfName('WelcomeMsg') > -1 then begin
WelcomeMsg := sl.Values['WelcomeMsg'];
WMsg := WelcomeMsg;
text7.Text := WMsg;
end;
if sl.IndexOfName('MapGMsg') > -1 then begin
MapGMsg := sl.Values['MapGMsg'];
end else begin
MapGMsg := '工会石已经被破坏!';
end;
if sl.IndexOfName('Timer') > -1 then begin
Timer := StrToBool(sl.Values['Timer']);
end else begin
Timer := true;
end;
{U0x008a_fix_end}
sl.Clear;
ini.ReadSectionValues('Nweiss', sl);
if sl.IndexOfName('Option_PVP') > -1 then begin
Option_PVP := StrToBool(sl.Values['Option_PVP']);
end else begin
Option_PVP := false;
end;
if sl.IndexOfName('Option_MaxUsers') > -1 then begin
Option_MaxUsers := StrToInt(sl.Values['Option_MaxUsers']);
end else begin
Option_MaxUsers := 150;
end;
if sl.IndexOfName('Option_AutoSave') > -1 then begin
Option_AutoSave := StrToInt(sl.Values['Option_AutoSave']);
end else begin
Option_AutoSave := 600;
end;
if sl.IndexOfName('Option_AutoBackup') > -1 then begin
Option_AutoBackup := StrToInt(sl.Values['Option_AutoBackup']);
end else begin
Option_AutoBackup := 0;
end;
if sl.IndexOfName('Option_WelcomeMsg') > -1 then begin
Option_WelcomeMsg := StrToBool(sl.Values['Option_WelcomeMsg']);
end else begin
Option_WelcomeMsg := True;
end;
if sl.IndexOfName('Option_WBlueFont') > -1 then begin
BlueFont := StrToBool(sl.Values['Option_WBlueFont']);
end else begin
BlueFont := True ;
end;
if BlueFont = True then begin
WelcomeMsg := 'blue'+ WelcomeMsg;
end;
Option_MOTD := StrToBoolDef(SL.Values['Option_MOTD'], False);
if Option_MOTD then begin
Option_MOTD_Athena := StrToBoolDef(SL.Values['Option_MOTD_Athena'], False);
end;
if sl.IndexOfName('Option_GraceTime') > -1 then begin
Option_GraceTime := StrToInt(sl.Values['Option_GraceTime']);
end else begin
Option_GraceTime := 5000;
end;
if sl.IndexOfName('Option_GraceTime_PvPG') > -1 then begin
Option_GraceTime_PvPG := StrToInt(sl.Values['Option_GraceTime_PvPG']);
end else begin
Option_GraceTime_PvPG := 15000;
end;
if sl.IndexOfName('Option_Username_MF') > -1 then begin
Option_Username_MF := StrToBool(sl.Values['Option_Username_MF']);
end else begin
Option_Username_MF := True;
end;
if sl.IndexOfName('Option_Pet_Capture_Rate') > -1 then begin
Option_Pet_Capture_Rate := StrToInt(sl.Values['Option_Pet_Capture_Rate']);
end else begin
Option_Pet_Capture_Rate := 100;
end;
if sl.IndexOfName('Option_PVP_Steal') > -1 then begin
Option_PVP_Steal := StrToBool(sl.Values['Option_PVP_Steal']);
end else begin
Option_PVP_Steal := False;
end;
if sl.IndexOfName('Option_PartyShare_Level') > -1 then begin
Option_PartyShare_Level := StrToInt(sl.Values['Option_PartyShare_Level']);
end else begin
Option_PartyShare_Level := 10;
end;
if sl.IndexOfName('Option_GM_Logs') > -1 then begin
Option_GM_Logs := StrToBool(sl.Values['Option_GM_Logs']);
end else begin
Option_GM_Logs := False;
end;
if sl.IndexOfName('Option_PVP_XPLoss') > -1 then begin
Option_PVP_XPLoss := StrToBool(sl.Values['Option_PVP_XPLoss']);
end else begin
Option_PVP_XPLoss := True;
end;
sl.Clear;
sl1.Clear;
ini.ReadSectionValues('MySQL Server', sl);
if sl.IndexOfName('Option_MySQL') <> -1 then begin
UseSQL := StrToBool(sl.Values['Option_MySQL']);
end else begin
UseSQL := false;
end;
sl1.Delimiter := '.';
sl1.DelimitedText := sl.Values['MySQL_Address'];
if sl1.Count = 4 then begin
DbHost := sl.Values['MySQL_Address'];
end else begin
DbHost := '127.0.0.1';
end;
sl1.Free;
if sl.IndexOfName('MySQL_Username') <> -1 then begin
DbUser := sl.Values['MySQL_Username'];
end else begin
DbUser := 'root';
end;
if sl.IndexOfName('MySQL_Password') <> -1 then begin
DbPass := sl.Values['MySQL_Password'];
end else begin
DbPass := '';
end;
if sl.IndexOfName('MySQL_Database') <> -1 then begin
DbName := sl.Values['MySQL_Database'];
end else begin
DbName := 'NweissSQL';
end;
sl.clear;
ini.ReadSectionValues('Option', sl);
if sl.IndexOfName('Left') <> -1 then begin
FormLeft := StrToInt(sl.Values['Left']);
end else begin
FormLeft := 0;
end;
Left := FormLeft;
if sl.IndexOfName('Top') <> -1 then begin
FormTop := StrToInt(sl.Values['Top']);
end else begin
FormTop := 0;
end;
Top := FormTop;
//调整大小
if sl.IndexOfName('Width') <> -1 then begin
FormWidth := StrToInt(sl.Values['Width']);
Width := FormWidth;
end else begin
FormWidth := frmMain.Width;
end;
if sl.IndexOfName('Height') <> -1 then begin
FormHeight := StrToInt(sl.Values['Height']);
Height := FormHeight;
end else begin
FormHeight := frmMain.Height;
end;
if sl.IndexOfName('Priority') <> -1 then begin
Priority := StrToInt(sl.Values['Priority']);
if Priority > 5 then Priority := 3;
end else begin
Priority := 1;
end;
if sl.IndexOfName('GMCheck') <> -1 then begin
GMCheck := StrToIntDef(sl.Values['GMCheck'],0);
end else begin
GMCheck := $FF;
end;
SL.Clear;
//Darkhelmet's Toys
ini.ReadSectionValues('Toys', sl);
if sl.IndexOfName('EnabledUWarp') <> -1 then begin
WarpEnabled := StrToBool(sl.Values['EnabledUWarp']);
end else begin
WarpEnabled := False;
end;
if sl.IndexOfName('EUWarpItem') <> -1 then begin
WarpItem := StrToInt(sl.Values['EUWarpItem']);
end else begin
WarpItem := 0;
end;
//Krietor's Request by Darkhelmet
// Designed for pvp, a range of items a character will drop when killed
if sl.IndexOfName('DeathdropS') <> - 1 then begin //Start Range
StartDeathDropItem := StrToInt(sl.Values['DeathdropS']);
end else begin
StartDeathDropItem := 0;
end;
if sl.IndexOfName('DeathDropE') <> -1 then begin //End Range
EndDeathDropItem := StrToInt(sl.Values['DeathdropE']);
end else begin
EndDeathDropItem := 0;
end;
//Krietor's Request, Token Drops by Darkhelmet
if sl.IndexOfName('DropToken') <> -1 then begin
TokenDrop := StrToBool(sl.Values['DropToken']);
end else begin
TokenDrop := false;
end;
{ChrstphrR 2004/05/09 - Debug section added to INI file
Controls options that allow/supress when errors occur - these features
will be useful to Devs in Core/DB/Scripts, and people modifying both
Database and Script files for testing.}
SL.Clear;
ini.ReadSectionValues('Debug', SL);
{Current Options:
ShowDebugErrors - boolean, default False - if true, outputs error messages
during Script Validation phase of MapLoad
}
if SL.IndexOfName('ShowDebugErrors') <> -1 then begin
ShowDebugErrors := StrToBool(SL.Values['ShowDebugErrors']);
end else begin
ShowDebugErrors := False;
end;
//cbxPriority.ItemIndex := Priority;
case Priority of
0: PriorityClass := REALTIME_PRIORITY_CLASS;
1: PriorityClass := HIGH_PRIORITY_CLASS;
2: PriorityClass := ABOVE_NORMAL_PRIORITY_CLASS;
3: PriorityClass := NORMAL_PRIORITY_CLASS;
4: PriorityClass := BELOW_NORMAL_PRIORITY_CLASS;
5: PriorityClass := IDLE_PRIORITY_CLASS;
else
begin
Priority := 3;
PriorityClass := NORMAL_PRIORITY_CLASS;
end;
end;
ini.Free;
SL.Free;
Show;
//僨乕僞撉傒崬傒
DatabaseLoad(Handle);
if UseSQL then
SQLDataLoad()
else
DataLoad();
//MapLoad('moc_vilg00');
//MapLoad('moc_vilg01');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Startup Success.');
//DebugOut.Lines.SaveToFile('StartupLog.txt');
//DebugOut.Lines.LoadFromFile('Fusion.notice');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '--- Nweiss Pro V'+ RELEASE_VERSION +' ---');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '--- 官方站:http://www.nweiss.net ---');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '--- 门户站:http://ysw.llbbll.com ---');
ConnectionKind();
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '--- Command Output Begin ---');
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '');
cmdStart.Enabled := true;
//cbxPriorityClick(Sender);
if AutoStart then PostMessage(cmdStart.Handle, BM_CLICK, 0, 0);
{U0x003b}
DBsaveTimer.Enabled := True;
DBSaveTimer.Interval := Option_AutoSave * 1000;
if (Option_AutoBackup = 0) then begin
BackupTimer.Enabled := False;
end
else begin
BackupTimer.Enabled := True;
BackupTimer.Interval := Option_AutoBackup * 1000;
end;
{U0x003b僐僐傑偱}
end;
//------------------------------------------------------------------------------
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
sr : TSearchRec;
Idx : Integer; // Loop Iterator for freeing our global lists.
begin
save_commands();
weiss_ini_save();
if FindFirst(AppPath + 'map\tmpFiles\*.out', $27, sr) = 0 then begin
repeat
DeleteFile(AppPath+'map\tmpFiles\'+sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
if ServerRunning then begin
cmdStop.Enabled := false;
CancelFlag := true;
repeat
Application.ProcessMessages;
until ServerRunning;
end;
if WindowState = wsNormal then begin
FormLeft := Left;
FormTop := Top;
FormWidth := Width;
FormHeight := Height;
end;
if UseSQL then
SQLDataSave
else
DataSave;
{ Mitch: Doesnt hurt to make sure the tray icon was deleted }
Shell_notifyIcon(NIM_DELETE, @TrayIcon);
{ChrstphrR 2004/04/27 -- I'm pretty sure this cleans up the 4k a bare Delphi
app leaks because code in the RTL that Borland hasn't fixed - Bravo!}
ScriptList.Free; //CR only stores strings, ergo safe as is.
{ChrstphrR 2004/04/27 - My apologies for such dirty fixes to the lists ...
Objects[] of a TSL or TIL are not freed up on Clear or Free, so the following
for loops do so safely and properly - the Assigned() checks ensure that the
object isn't NIL -- freeing NIL is one of those Zen riddles you just don't
want to toy with in Delphi! The Lists are grouped with some not looped
through, because there often pairs or groups of lists that index the same
list of objects. Pure StringLists / IntLists are just free'd and are marked
explicitly.}
for Idx := ItemDB.Count-1 downto 0 do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -