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

📄 database.pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 PAS
📖 第 1 页 / 共 5 页
字号:
	i := 1;
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		if sl.Count = 4 then begin
			for j := 0 to 3 do ExpTable[j][i] := StrToInt(sl.Strings[j]);
			Inc(i);
			if i > 255 then break;
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> EXP database loaded.');
	Application.ProcessMessages;
{廋惓}
	//僕儑僽僨乕僞僥乕僽儖1撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Job database 1 loading...');
	Application.ProcessMessages;
	for i := 0 to MAX_JOB_NUMBER do begin
		WeightTable[i] := 0;
		HPTable[i] := 0;
		SPTable[i] := 1;
		for j := 0 to 16 do WeaponASPDTable[i][j] := 100;
	end;
	AssignFile(txt, AppPath + 'database\job_db1.txt');
	Reset(txt);
	for i := 0 to MAX_JOB_NUMBER do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		if sl.Count = 20 then begin
			WeightTable[i] := StrToInt(sl.Strings[0]);
			HPTable[i] := StrToInt(sl.Strings[1]);
			SPTable[i] := StrToInt(sl.Strings[2]);
			if SPTable[i] = 0 then SPTable[i] := 1;
			for j := 0 to 16 do WeaponASPDTable[i][j] := StrToInt(sl.Strings[j+3]);
		end else begin
			WeightTable[i] := WeightTable[0];
			HPTable[i] := HPTable[0];
			SPTable[i] := SPTable[0];
			if SPTable[i] = 0 then SPTable[i] := 1;
			for j := 0 to 16 do WeaponASPDTable[i][j] := WeaponASPDTable[0][j];
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Job database 1 loaded.');
	Application.ProcessMessages;

	//僕儑僽僨乕僞僥乕僽儖2撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Job database 2 loading...');
	Application.ProcessMessages;
	for i := 0 to MAX_JOB_NUMBER do begin
		for j := 1 to 255 do JobBonusTable[i][j] := 0;
	end;
	AssignFile(txt, AppPath + 'database\job_db2.txt');
	Reset(txt);
	for i := 0 to MAX_JOB_NUMBER do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := 1 to sl.Count do JobBonusTable[i][j] := StrToInt(sl.Strings[j-1]);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Job database 2 loaded.');
	Application.ProcessMessages;
{廋惓僐僐傑偱}
	//晲婍僟儊乕僕廋惓僥乕僽儖撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Weapon database loading...');
	Application.ProcessMessages;
	for i := 0 to 2 do begin
		for j := 0 to 16 do WeaponTypeTable[i][j] := 100;
	end;
	AssignFile(txt, AppPath + 'database\wp_db.txt');
	Reset(txt);
	for i := 0 to 2 do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := 0 to 16 do WeaponTypeTable[i][j] := StrToInt(sl.Strings[j]);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Weapon database loaded.');
	Application.ProcessMessages;

	{April 4, 2004: Warp Database - Darkhelmet
		It works like this, a Game Master can define in warp_db.txt what places any user
		can warp to without having to get to a kafra.  I.E. -warp prontera.  This will
		warp the user to prontera with the coordinates the Game Master Defines.  It also
		allows you to set a cost for the warp.  Lastly, a Game Master can define that
		a player needs item X to warp, but the item is not consumed on warp as of yet.
	}
	if WarpEnabled = true then begin
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Warping database loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\warp_db.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		if (sl.Strings[0] <> '//') then begin
		twp := TWarpDatabase.Create;
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		twp.NAME := sl.Strings[0];
		twp.MAP := sl.Strings[1];
		twp.X := StrToInt(sl.Strings[2]);
		twp.Y := StrToInt(sl.Strings[3]);
		twp.Cost := StrToInt(sl.Strings[4]);
		WarpDatabase.AddObject(twp.NAME, twp);
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d Warps loaded.', [WarpDatabase.Count]));
	Application.ProcessMessages;
	end;



	//懏惈僥乕僽儖撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Element database loading...');
	Application.ProcessMessages;
	for i := 0 to 9 do begin
		for j := 0 to 99 do ElementTable[i][j] := 100;
	end;
	AssignFile(txt, AppPath + 'database\ele_db.txt');
	Reset(txt);
	for i := 0 to 9 do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := sl.Count to 19 do sl.Add('100');
		for j := 0 to 19 do ElementTable[i][j] := StrToInt(sl.Strings[j]);
		//---
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := sl.Count to 19 do sl.Add('100');
		for j := 0 to 19 do ElementTable[i][j+20] := StrToInt(sl.Strings[j]);
		//---
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := sl.Count to 19 do sl.Add('100');
		for j := 0 to 19 do ElementTable[i][j+40] := StrToInt(sl.Strings[j]);
		//---
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := sl.Count to 19 do sl.Add('100');
		for j := 0 to 19 do ElementTable[i][j+60] := StrToInt(sl.Strings[j]);
		//---
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for j := sl.Count to 19 do sl.Add('100');
		for j := 0 to 19 do ElementTable[i][j+80] := StrToInt(sl.Strings[j]);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Element database loaded.');
	Application.ProcessMessages;

	//僗僋儕僾僩僼傽僀儖偺儕僗僩傪嶌惉
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Making script list...');
	Application.ProcessMessages;
	sl.Clear;
	sl1.Clear;
	sl.Add(AppPath + 'script\');
	sl1.Add(AppPath + 'script\');
	while sl.Count <> 0 do begin
		for i := 0 to sl.Count - 1 do begin
			if FindFirst(sl.Strings[0] + '*', $10, sr) = 0 then begin
				repeat
					if ((sr.Attr and $10) <> 0) and (sr.Name <> '.') and (sr.Name <> '..') then begin
						sl.Add(sl.Strings[0] + sr.Name + '\');
						sl1.Add(sl.Strings[0] + sr.Name + '\');
					end;
				until FindNext(sr) <> 0;
				FindClose(sr);
			end;
			sl.Delete(0);
		end;
	end;
	ScriptList.Clear;
	for i := 0 to sl1.Count - 1 do begin
		if FindFirst(sl1.Strings[i] + '*.txt', $27, sr) = 0 then begin
			repeat
				ScriptList.Add(sl1.Strings[i] + sr.Name);
			until FindNext(sr) <> 0;
			FindClose(sr);
		end;
	end;

	sl.Free;
	sl1.Free;
	{ChrstphrR 2004/04/26 - This 2nd TSL was created, used ... not free'd proper.
	}
end;//proc DatabaseLoad()
//------------------------------------------------------------------------------
// 僨乕僞撉傒崬傒
procedure PlayerDataLoad();
var
	i   : Integer;
	j   : Integer;
	k   : Integer;
	i1  : Integer;
	ver : Integer;
	str : string;
	txt : TextFile;
	sl  : TStringList;
	tp  : TPlayer;
begin
	sl := TStringList.Create;
	sl.QuoteChar := '"';
	sl.Delimiter := ',';

	//player.txt,chara.txt僠僃僢僋
	if not FileExists(AppPath + 'player.txt') then begin
		AssignFile(txt, AppPath + 'player.txt');
		Rewrite(txt);
		Writeln(txt, '##Weiss.PlayerData.0x0003');
                if passMD5 = True Then Writeln(txt, '100001,GM01,' + RivestStr('123456') + ',1,esxgx@163.com,0,,,,,,,,,');
                if passMD5 = False Then Writeln(txt, '100001,GM01,123456,1,esxgx@163.com,0,,,,,,,,,');
		Writeln(txt, '0');
		CloseFile(txt);
	end;

	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Player data loading...');
	Application.ProcessMessages;
	ver := 0;
	AssignFile(txt, AppPath + 'player.txt');
	Reset(txt);
	Readln(txt, str);
	if str = '##Weiss.PlayerData.0x0003' then begin
		ver := 3;
	end else if str = '##Weiss.PlayerData.0x0002' then begin
		ver := 2;
	end else if str = '##Weiss.PlayerData.0x0001' then begin
		ver := 1;
	end else begin
		Reset(txt);
	end;
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		if ver >= 1 then begin
{廋惓}
			if (sl.Count = 9) or (sl.Count = 15) then begin
				tp := TPlayer.Create;
				with tp do begin
					ID := StrToInt(sl.Strings[0]);
					Name := sl.Strings[1];
					Pass := sl.Strings[2];
					Gender := StrToInt(sl.Strings[3]);
					Mail := sl.Strings[4];
					Banned := StrToInt(sl.Strings[5]);

					CName[0] := sl.Strings[6];
					CName[1] := sl.Strings[7];
					CName[2] := sl.Strings[8];
					if sl.Count = 15 then begin
						CName[3] := sl.Strings[9];
						CName[4] := sl.Strings[10];
						CName[5] := sl.Strings[11];
						CName[6] := sl.Strings[12];
						CName[7] := sl.Strings[13];
						CName[8] := sl.Strings[14];
					end;
				end;
{廋惓僐僐傑偱}
				if ver >= 2 then begin
					//傾僀僥儉儘乕僪
					sl.Clear;
					Readln(txt, str);
					sl.DelimitedText := str;
					j := StrToInt(sl.Strings[0]);
					for i := 1 to j do begin
						if ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1])) <> -1 then begin
							//tc.Item[i] := TItem.Create;
							tp.Kafra.Item[i].ID := StrToInt(sl.Strings[(i-1)*10+1]);
							tp.Kafra.Item[i].Amount := StrToInt(sl.Strings[(i-1)*10+2]);
							tp.Kafra.Item[i].Equip := StrToInt(sl.Strings[(i-1)*10+3]);
							tp.Kafra.Item[i].Identify := StrToInt(sl.Strings[(i-1)*10+4]);
							tp.Kafra.Item[i].Refine := StrToInt(sl.Strings[(i-1)*10+5]);
							tp.Kafra.Item[i].Attr := StrToInt(sl.Strings[(i-1)*10+6]);
							for k := 0 to 3 do begin
								tp.Kafra.Item[i].Card[k] := StrToInt(sl.Strings[(i-1)*10+7+k]);
							end;
							tp.Kafra.Item[i].Data := ItemDB.Objects[ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1]))] as TItemDB;
						end;
					end;
					CalcInventory(tp.Kafra);
				end;
				PlayerName.AddObject(tp.Name, tp);
				Player.AddObject(tp.ID, tp);
			end;
		end else begin
			if sl.Count = 8 then begin
				tp := TPlayer.Create;
				with tp do begin
					ID := StrToInt(sl.Strings[0]);
					Name := sl.Strings[1];
					Pass := sl.Strings[2];
					Gender := StrToInt(sl.Strings[3]);
					Mail := sl.Strings[4];
					Banned := 0;
					CName[0] := sl.Strings[5];
					CName[1] := sl.Strings[6];
					CName[2] := sl.Strings[7];
				end;
				PlayerName.AddObject(tp.Name, tp);
				Player.AddObject(tp.ID, tp);
			end;
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('*** Total %d player(s) data loaded.', [PlayerName.Count]));
	Application.ProcessMessages;

	if (PlayerName.Count <= 0) then Exit;

	for i := 0 to PlayerName.Count - 1 do begin
		tp := PlayerName.Objects[i] as TPlayer;
		tp.ver2 := 9;
		if tp.ver2 = 9 then i1 := 8
		else i1 := 2;

		for j := 0 to i1 do begin
			if tp.CName[j] <> '' then begin
				k := CharaName.IndexOf(tp.CName[j]);
				if k <> -1 then begin
					tp.CData[j] := CharaName.Objects[k] as TChara;
					tp.CData[j].CharaNumber := j;
					tp.CData[j].ID := tp.ID;
					tp.CData[j].Gender := tp.Gender;
				end else begin
					tp.CName[j] := '';
					tp.CData[j] := nil;
				end;
			end;
		end;
	end;

	sl.Free;

end;
//------------------------------------------------------------------------------
// 僨乕僞撉傒崬傒
procedure DataLoad();
var
	i,j,k :integer;
	i1  :integer;
	ver :integer;
	str :string;
	txt :TextFile;
	sl  :TStringList;
	ta	:TMapList;
	tp  :TPlayer;
	tc  :TChara;
{僷乕僥傿乕婡擻捛壛}
	tpa	:TParty;
	tgc :TCastle;
{僷乕僥傿乕婡擻捛壛僐僐傑偱}
{僉儏乕儁僢僩}
				tpe     :TPet;
				tpd     :TPetDB;
				tmd     :TMobDB;
{僉儏乕儁僢僩偙偙傑偱}
{僊儖僪婡擻捛壛}
	tg  :TGuild;
	tgb :TGBan;
	tgl :TGRel;
{僊儖僪婡擻捛壛僐僐傑偱}
begin
	sl := TStringList.Create;
	sl.QuoteChar := '"';
	sl.Delimiter := ',';

	if not FileExists(AppPath + 'addplayer.txt') then begin
		AssignFile(txt, AppPath + 'addplayer.txt');
				rewrite(txt);
				closefile(txt);
		end;

	//player.txt,chara.txt僠僃僢僋
	if not FileExists(AppPath + 'player.txt') then begin
		AssignFile(txt, AppPath + 'pl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -