📄 database.pas
字号:
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 + -