📄 database.pas
字号:
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]); end; IDTableDB.AddObject(tid.ID,tid); end; CloseFile(txt); DebugOut.Lines.Add(Format('-> Total %d ID Table List loaded.', [j])); Application.ProcessMessages; //僊儖僪宱尡抣僥乕僽儖撉傒崬傒 DebugOut.Lines.Add('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('-> Guild EXP database loaded.'); Application.ProcessMessages; //僄儞僽儗儉奿擺僨傿儗僋僩儕 if not DirectoryExists(AppPath + 'emblem') then begin if not CreateDir(AppPath + 'emblem') then begin MessageBox(Handle, '僄儞僽儗儉奿擺僨傿儗僋僩儕偑嶌惉偱偒傑偣傫丅', 'darkWeiss', MB_OK or MB_ICONSTOP); Application.Terminate; exit; end; end;{僊儖僪婡擻捛壛僐僐傑偱} DebugOut.Lines.Add('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); 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('-> EXP database loaded.'); Application.ProcessMessages;{廋惓} //僕儑僽僨乕僞僥乕僽儖1撉傒崬傒 DebugOut.Lines.Add('Job database 1 loading...'); Application.ProcessMessages; for i := 0 to 20 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 20 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('-> Job database 1 loaded.'); Application.ProcessMessages; //僕儑僽僨乕僞僥乕僽儖2撉傒崬傒 DebugOut.Lines.Add('Job database 2 loading...'); Application.ProcessMessages; for i := 0 to 20 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 20 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('-> Job database 2 loaded.'); Application.ProcessMessages;{廋惓僐僐傑偱} //晲婍僟儊乕僕廋惓僥乕僽儖撉傒崬傒 DebugOut.Lines.Add('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('-> Weapon database loaded.'); Application.ProcessMessages; //懏惈僥乕僽儖撉傒崬傒 DebugOut.Lines.Add('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('-> Element database loaded.'); Application.ProcessMessages; //僗僋儕僾僩僼傽僀儖偺儕僗僩傪嶌惉 DebugOut.Lines.Add('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;end;//------------------------------------------------------------------------------// 僨乕僞撉傒崬傒procedure PlayerDataLoad();var i,j,k :integer; i1 :integer; ver :integer; str :string; txt :TextFile; sl :TStringList; ta :TMapList; tp :TPlayer; tk :TKafra; 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 := ','; //player.txt,chara.txt僠僃僢僋 if not FileExists(AppPath + 'player.txt') then begin AssignFile(txt, AppPath + 'player.txt'); Rewrite(txt); Writeln(txt, '##Weiss.PlayerData.0x0003'); Writeln(txt, '100001,test,test,0,-@-,0,,,,,,,,,'); Writeln(txt, '0'); Writeln(txt, '100002,test2,test,1,-@-,0,,,,,,,,,'); Writeln(txt, '0'); CloseFile(txt); end; DebugOut.Lines.Add('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]; GMMode := 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; 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]; GMMode := 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(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; for j := 0 to 8 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; add :TextFile; sl :TStringList; ta :TMapList; tp :TPlayer; tk :TKafra; tbn :TBan; 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 (UseDatabase = false) then begin //player.txt,chara.txt僠僃僢僋 if not FileExists(AppPath + 'player.txt') then begin AssignFile(txt, AppPath + 'player.txt'); Rewrite(txt); Writeln(txt, '##Weiss.PlayerData.0x0003'); Writeln(txt, '100001,test,test,0,-@-,0,,,,,,,,,'); Writeln(txt, '0'); Writeln(txt, '100002,test2,test,1,-@-,0,,,,,,,,,'); Writeln(txt, '0'); CloseFile(txt); end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -