📄 database.pas
字号:
Application.ProcessMessages;
LoadSummonLists;
{巵{敔捛壛僐僐傑偱}
{僉儏乕儁僢僩}
LoadPetData;
{僉儏乕儁僢僩偙偙傑偱}
{NPC僀儀儞僩捛壛}
//mapinfo_db撉傒崬傒
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Mapinfo database loading...');
Application.ProcessMessages;
if FileExists(AppPath + 'database\mapinfo_db.txt') then begin
AssignFile(txt, AppPath + 'database\mapinfo_db.txt');
Reset(txt);
Readln(txt, str);
k := 0;
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := LowerCase(str);
if (sl.Count < 2) then continue;
sl[0] := ChangeFileExt(sl[0], '');
if (MapInfo.IndexOf(sl[0]) = -1) then begin
mi := MapTbl.Create;
j := 1;
end else begin
mi := MapInfo.Objects[MapInfo.IndexOf(sl[0])] as MapTbl;
j := 0;
end;
for i := 1 to sl.Count - 1 do begin
if (sl[i] = 'nomemo') then mi.noMemo := true
else if (sl[i] = 'nosave') then mi.noSave := true
else if (sl[i] = 'noteleport') then mi.noTele := true
{傾僕僩婡擻捛壛}
else if (sl[i] = 'noportal') then mi.noPortal := true
else if (sl[i] = 'nofly') then mi.noFly := true
else if (sl[i] = 'nobutterfly') then mi.noBfly := true
else if (sl[i] = 'nobranch') then mi.noBranch := true
else if (sl[i] = 'noskill') then mi.noSkill := true
else if (sl[i] = 'noitem') then mi.noItem := true
else if (sl[i] = 'agit') then mi.Agit := true
else if (sl[i] = 'pvp') then mi.PvP := true
else if (sl[i] = 'pvpg') then mi.PvPG := true
else if (sl[i] = 'noday') then mi.noday := true
else if (sl[i] = 'ctf') then mi.ctf := true;
if (Option_PVP = false) then begin
mi.PvP := false;
mi.PvPG := false;
end;
{傾僕僩婡擻捛壛僐僐傑偱}
end;
if (j = 1) then begin
MapInfo.AddObject(sl[0], mi);
end;
Inc(k);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d MapInfo database loaded.', [k]));
Application.ProcessMessages;
end else begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Mapinfo database Not Find.');
Application.ProcessMessages;
end;
{NPC僀儀儞僩捛壛僐僐傑偱}
//僗僉儖僨乕僞儀乕僗撉傒崬傒
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Skill database loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\skill_db.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
for i := sl.Count to 74 do
sl.Add('0');
for i := 0 to 74 do
if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
tl := TSkillDB.Create;
with tl do begin
ID := StrToInt(sl.Strings[0]);
IDC := sl.Strings[1];
Name := sl.Strings[2];
SType := StrToInt(sl.Strings[3]);
MasterLV := StrToInt(sl.Strings[4]);
for i := 0 to 9 do
SP[i+1] := StrToInt(sl.Strings[5+i]);
HP := StrToInt(sl.Strings[15]);
UseItem := StrToInt(sl.Strings[16]);
CastTime1 := StrToInt(sl.Strings[17]);
CastTime2 := StrToInt(sl.Strings[18]);
CastTime3 := StrToInt(sl.Strings[19]);
Range := StrToInt(sl.Strings[20]);
Element := StrToInt(sl.Strings[21]);
for i := 0 to 9 do
Data1[i+1] := StrToInt(sl.Strings[22+i]);
for i := 0 to 9 do
Data2[i+1] := StrToInt(sl.Strings[32+i]);
Range2 := StrToInt(sl.Strings[42]);
Icon := StrToInt(sl.Strings[43]);
wj := StrToInt64(sl.Strings[44]);
for i := 0 to MAX_JOB_NUMBER do begin
Job1[i] := Job1[i] or boolean((wj and (Int64(1) shl i)) <> 0);
if (i < (LOWER_JOB_END - 1)) and (Job1[i]) then begin
Job1[i + LOWER_JOB_END + 1] := true;
end;
//if (Job1[i + LOWER_JOB_END + 1]) then debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('Job1[%d] set',[i+LOWER_JOB_END+1]));
end;
{for i := 0 to MAX_JOB_NUMBER do begin
if (Job1[i]) and (ID = 394) then
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('Skill %d, job %d is set',[tl.ID, i]));
end;}
for i := 0 to 4 do begin
ReqSkill1[i] := StrToInt(sl.Strings[45+i*2]);
ReqLV1[i] := StrToInt(sl.Strings[46+i*2]);
end;
wj := StrToInt64(sl.Strings[55]);
for i := 0 to MAX_JOB_NUMBER do begin
Job2[i] := Job2[i] or boolean((wj and (Int64(1) shl i)) <> 0);
if (i < LOWER_JOB_END - 1) then Job2[i + LOWER_JOB_END + 1] := Job2[i];
end;
for i := 0 to 4 do begin
ReqSkill2[i] := StrToInt(sl.Strings[56+i*2]);
ReqLV2[i] := StrToInt(sl.Strings[57+i*2]);
end;
end;
SkillDB.AddObject(tl.ID, tl);
SkillDBName.AddObject(tl.IDC, tl);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d skill(s) database loaded.', [SkillDB.Count]));
Application.ProcessMessages;
//宱尡抣僥乕僽儖撉傒崬傒
{僊儖僪婡擻捛壛}
//僊儖僪僗僉儖僨乕僞儀乕僗撉傒崬傒
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Guild Skill database loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\skill_guild_db.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
for i := sl.Count to 74 do
sl.Add('0');
for i := 0 to 74 do
if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
tl := TSkillDB.Create;
with tl do begin
ID := StrToInt(sl.Strings[0]);
IDC := sl.Strings[1];
Name := sl.Strings[2];
SType := StrToInt(sl.Strings[3]);
MasterLV := StrToInt(sl.Strings[4]);
for i := 0 to 9 do
SP[i+1] := StrToInt(sl.Strings[5+i]);
HP := StrToInt(sl.Strings[15]);
UseItem := StrToInt(sl.Strings[16]);
CastTime1 := StrToInt(sl.Strings[17]);
CastTime2 := StrToInt(sl.Strings[18]);
CastTime3 := StrToInt(sl.Strings[19]);
Range := StrToInt(sl.Strings[20]);
Element := StrToInt(sl.Strings[21]);
for i := 0 to 9 do
Data1[i+1] := StrToInt(sl.Strings[22+i]);
for i := 0 to 9 do
Data2[i+1] := StrToInt(sl.Strings[32+i]);
Range2 := StrToInt(sl.Strings[42]);
Icon := StrToInt(sl.Strings[43]);
wj := StrToInt64(sl.Strings[44]);
for i := 0 to MAX_JOB_NUMBER do begin
Job1[i] := boolean((wj and (Int64(1) shl i)) <> 0);
if (i < LOWER_JOB_END - 1) then Job1[i + LOWER_JOB_END + 1] := Job1[i];
end;
for i := 0 to 9 do begin
ReqSkill1[i] := StrToInt(sl.Strings[45+i*2]);
ReqLV1[i] := StrToInt(sl.Strings[46+i*2]);
end;
for i := 0 to 9 do begin
ReqSkill2[i] := StrToInt(sl.Strings[55+i*2]);
ReqLV2[i] := StrToInt(sl.Strings[56+i*2]);
end;
end;
GSkillDB.AddObject(tl.ID, tl);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d guild skill(s) database loaded.', [GSkillDB.Count]));
Application.ProcessMessages;
// Colus, 20040130: Adding territory name DB.
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Guild Territory database loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\territory_db.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
if (sl.Count = 2) then begin
tt := TTerritoryDB.Create;
with tt do begin
MapName := sl.Strings[0];
TerritoryName := sl.Strings[1];
end;
TerritoryList.AddObject(tt.MapName, tt);
end;
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d guild territories loaded.', [TerritoryList.Count]));
Application.ProcessMessages;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Slave Summon Mobs List loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\summon_slave.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
//for i := sl.Count to 6 do
//sl.Add('0');
//for i := 0 to 6 do
//if (i <> 0) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
if (sl.Count = 7) then begin
tss := TSlaveDB.Create;
with tss do begin
Name := sl.Strings[0];
Slaves[0] := MobDBName.IndexOf(sl.Strings[1]);
Slaves[1] := MobDBName.IndexOf(sl.Strings[2]);
Slaves[2] := MobDBName.IndexOf(sl.Strings[3]);
Slaves[3] := MobDBName.IndexOf(sl.Strings[4]);
Slaves[4] := MobDBName.IndexOf(sl.Strings[5]);
TotalSlaves := StrToInt(sl.Strings[6]);
end;
SlaveDBName.AddObject(tss.Name,tss);
end;
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d Slave Summon Mobs List loaded.', [j]));
Application.ProcessMessages;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Make Arrow List loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\make_arrow.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
for i := sl.Count to 7 do
sl.Add('0');
for i := 0 to 7 do
if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
ma := TMArrowDB.Create;
with ma do begin
ID := StrToInt(sl.Strings[0]);
if (sl.Strings[1] <> '') then CID[0] := StrToInt(sl.Strings[1]);
if (sl.Strings[2] <> '') then CNum[0] := StrToInt(sl.Strings[2]);
if (sl.Strings[3] <> '') then CID[1] := StrToInt(sl.Strings[3]);
if (sl.Strings[4] <> '') then CNum[1] := StrToInt(sl.Strings[4]);
if (sl.Strings[5] <> '') then CID[2] := StrToInt(sl.Strings[5]);
if (sl.Strings[6] <> '') then CNum[2] := StrToInt(sl.Strings[6]);
end;
MArrowDB.AddObject(ma.ID,ma);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d Make Arrow List loaded.', [j]));
Application.ProcessMessages;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'ID Table List loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\id_table.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
for i := sl.Count to 16 do
sl.Add('0');
for i := 0 to 16 do
if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
tid := TIDTbl.Create;
with tid do begin
ID := StrToInt(sl.Strings[0]);
if (sl.Strings[1] <> '') then BroadCast := StrToInt(sl.Strings[1]);
if (sl.Strings[2] <> '') then ItemSummon := StrToInt(sl.Strings[2]);
if (sl.Strings[3] <> '') then MonsterSummon := StrToInt(sl.Strings[3]);
if (sl.Strings[4] <> '') then ChangeStatSkill := StrToInt(sl.Strings[4]);
if (sl.Strings[5] <> '') then ChangeOption := StrToInt(sl.Strings[5]);
if (sl.Strings[6] <> '') then SaveReturn := StrToInt(sl.Strings[6]);
if (sl.Strings[7] <> '') then ChangeLevel := StrToInt(sl.Strings[7]);
if (sl.Strings[8] <> '') then Warp := StrToInt(sl.Strings[8]);
if (sl.Strings[9] <> '') then Whois := StrToInt(sl.Strings[9]);
if (sl.Strings[10] <> '') then GotoSummonBanish := StrToInt(sl.Strings[10]);
if (sl.Strings[11] <> '') then KillDieAlive := StrToInt(sl.Strings[11]);
if (sl.Strings[12] <> '') then ChangeJob := StrToInt(sl.Strings[12]);
if (sl.Strings[13] <> '') then ChangeColorStyle := StrToInt(sl.Strings[13]);
if (sl.Strings[14] <> '') then AutoRawUnit := StrToInt(sl.Strings[14]);
if (sl.Strings[15] <> '') then Refine := StrToInt(sl.Strings[15]);
if (sl.Strings[16] <> '') then PVPControl := StrToInt(sl.Strings[16]);
if (sl.Strings[17] <> '') then UserControl := StrToInt(sl.Strings[17]);
end;
IDTableDB.AddObject(tid.ID,tid);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d ID Table List loaded.', [j]));
Application.ProcessMessages;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'GM Access List loading...');
Application.ProcessMessages;
AssignFile(txt, AppPath + 'database\gm_access.txt');
Reset(txt);
Readln(txt, str);
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
tGM := TGM_Table.Create;
with tGM do begin
ID := StrToInt(sl.Strings[0]);
Level := StrToInt(sl.Strings[1]);
end;
GM_Access_DB.AddObject(tGM.ID, tGM);
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d GM Access List loaded.', [j]));
Application.ProcessMessages;
//僊儖僪宱尡抣僥乕僽儖撉傒崬傒
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Guild EXP database loading...');
Application.ProcessMessages;
for i := 1 to 50 do GExpTable[i] := 1999999999;
AssignFile(txt, AppPath + 'database\exp_guild_db.txt');
Reset(txt);
i := 1;
while not eof(txt) do begin
sl.Clear;
Readln(txt, str);
sl.DelimitedText := str;
if sl.Count = 1 then begin
GExpTable[i] := StrToInt(sl.Strings[0]);
Inc(i);
if i > 49 then break;
end;
end;
CloseFile(txt);
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Guild EXP database loaded.');
Application.ProcessMessages;
//Check for Emblem directory...
if not DirectoryExists(AppPath + 'emblem') then begin
if not CreateDir(AppPath + 'emblem') then begin
MessageBox(Handle, 'The \emblem directory was not found.', 'Weiss', MB_OK or MB_ICONSTOP);
Application.Terminate;
Exit;
end;
end;
{僊儖僪婡擻捛壛僐僐傑偱}
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'EXP database loading...');
Application.ProcessMessages;
for j := 0 to 3 do ExpTable[j][0] := 1;
for i := 1 to 255 do begin
for j := 0 to 3 do ExpTable[j][i] := 999999999;
end;
AssignFile(txt, AppPath + 'database\exp_db.txt');
Reset(txt);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -