⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
	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 + -