📄 database.pas
字号:
end; if not FileExists(AppPath + 'kafra.txt') then begin AssignFile(txt, AppPath + 'kafra.txt'); Rewrite(txt); Writeln( txt, '##Weiss.KafraData.0x0002' ); CloseFile(txt); end; if not FileExists(AppPath + 'banned.txt') then begin AssignFile(txt, AppPath + 'banned.txt'); Rewrite(txt); Writeln( txt, '##Weiss.BannedData.0x0002' ); CloseFile(txt); end; if not FileExists(AppPath + 'chara.txt') then begin AssignFile(txt, AppPath + 'chara.txt'); Rewrite(txt); Writeln(txt, '##Weiss.CharaData.0x0002'); CloseFile(txt); end;{僷乕僥傿乕婡擻捛壛} if not FileExists(AppPath + 'party.txt') then begin AssignFile(txt, AppPath + 'party.txt'); Rewrite(txt); Writeln(txt, '##Weiss.PartyData.0x0002'); CloseFile(txt); end;{僷乕僥傿乕婡擻捛壛僐僐傑偱}{僉儏乕儁僢僩} if not FileExists(AppPath + 'pet.txt') then begin AssignFile(txt, AppPath + 'pet.txt'); Rewrite(txt); Writeln( txt, '##Weiss.PetData.0x0002' ); CloseFile(txt); end; if not FileExists(AppPath + 'gcastle.txt') then begin AssignFile(txt, AppPath + 'gcastle.txt'); Rewrite(txt); Writeln( txt, '##Weiss.GCastleData.0x0002' ); CloseFile(txt); end;{僉儏乕儁僢僩偙偙傑偱}{NPC僀儀儞僩捛壛} //status.txt僠僃僢僋 if not FileExists(AppPath + 'status.txt') then begin AssignFile(txt, AppPath + 'status.txt'); Rewrite(txt); Writeln(txt, '##Weiss.StatusData.0x0002'); Writeln(txt, '0'); CloseFile(txt); end else begin //僒乕僶嫟桳僼儔僌撉崬 DebugOut.Lines.Add('Server Flag loading...'); Application.ProcessMessages; AssignFile(txt, AppPath + 'status.txt'); Reset(txt); Readln(txt, str); sl.Clear; Readln(txt, str); sl.DelimitedText := str; j := StrToInt(sl.Strings[0]); for i := 1 to j do ServerFlag.Add('\' + sl.Strings[i]); CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d Server Flag loaded.', [ServerFlag.Count])); Application.ProcessMessages; end;{NPC僀儀儞僩捛壛僐僐傑偱}{僊儖僪婡擻捛壛} if not FileExists(AppPath + 'guild.txt') then begin AssignFile(txt, AppPath + 'guild.txt'); Rewrite(txt); Writeln(txt, '##Weiss.GuildData.0x0002'); CloseFile(txt); end;{僊儖僪婡擻捛壛僐僐傑偱} //傾僇僂儞僩忣曬儘乕僪 If (UseDatabase = false) then begin 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; end; DebugOut.Lines.Add('Kafra data loading...'); Application.ProcessMessages; ver := 0; AssignFile(txt, AppPath + 'kafra.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.KafraData.0x0002' then begin ver := 2; 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 = 1) and (StrToInt(sl.Strings[0]) <> 0) then begin tk := TKafra.Create; with tk do begin PID := StrToInt(sl.Strings[0]); 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 tk.Kafra.Item[i].ID := StrToInt(sl.Strings[(i-1)*10+1]); tk.Kafra.Item[i].Amount := StrToInt(sl.Strings[(i-1)*10+2]); tk.Kafra.Item[i].Equip := StrToInt(sl.Strings[(i-1)*10+3]); tk.Kafra.Item[i].Identify := StrToInt(sl.Strings[(i-1)*10+4]); tk.Kafra.Item[i].Refine := StrToInt(sl.Strings[(i-1)*10+5]); tk.Kafra.Item[i].Attr := StrToInt(sl.Strings[(i-1)*10+6]); for k := 0 to 3 do begin tk.Kafra.Item[i].Card[k] := StrToInt(sl.Strings[(i-1)*10+7+k]); end; tk.Kafra.Item[i].Data := ItemDB.Objects[ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1]))] as TItemDB; end; end; CalcInventory(tk.Kafra); end; KafraDB.AddObject(tk.PID, tk); end; end; end; CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d kafra(s) data loaded.', [KafraDB.Count])); Application.ProcessMessages; DebugOut.Lines.Add('Banned data loading...'); Application.ProcessMessages; ver := 0; AssignFile(txt, AppPath + 'banned.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.BannedData.0x0002' then begin //ver := 2; end else begin Reset(txt); end; while not eof(txt) do begin sl.Clear; Readln(txt, str); sl.DelimitedText := str; if (sl.Count = 1) and (sl.Strings[0] <> '') then begin tbn := TBan.Create; with tbn do begin BIP := sl.Strings[0]; end; BannedDB.AddObject(tbn.BIP, tbn); end; end; CloseFile(txt); AssignFile(txt, AppPath + 'banned.txt'); AssignFile(add, AppPath + 'addban.txt'); if not FileExists(AppPath + 'addban.txt') then begin Rewrite(add);
end else begin
Reset(add);
append(txt);
while not eof(add) do begin
sl.Clear;
Readln(add, str);
sl.DelimitedText := str;
if (sl.Count = 1) and (sl.Strings[0] <> '') and (BannedDB.IndexOf(tbn.BIP) = -1) then begin
tbn := TBan.Create;
tbn.BIP := sl.Strings[0];
BannedDB.AddObject(tbn.BIP, tbn);
Writeln(txt, sl.Delimitedtext);
end;
end;
Rewrite(add);
end;
CloseFile(add); CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d Banned data loaded.', [BannedDB.Count])); Application.ProcessMessages; //僉儍儔忣曬儘乕僪 DebugOut.Lines.Add('Character data loading...'); Application.ProcessMessages; ver := 0; AssignFile(txt, AppPath + 'chara.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.CharaData.0x0002' then begin ver := 2; end else if str = '##Weiss.CharaData.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 <> 51) and (sl.Count <> 52) and (sl.Count <> 53) and (sl.Count <> 54) then continue;{僷乕僥傿乕婡擻廋惓僐僐傑偱} end else begin if sl.Count <> 41 then continue; end; tc := TChara.Create; with tc do begin CID := StrToInt(sl.Strings[ 0]); Name := sl.Strings[ 1]; JID := StrToInt(sl.Strings[ 2]); BaseLV := StrToInt(sl.Strings[ 3]); BaseEXP := StrToInt(sl.Strings[ 4]); StatusPoint := StrToInt(sl.Strings[ 5]); JobLV := StrToInt(sl.Strings[ 6]); JobEXP := StrToInt(sl.Strings[ 7]); SkillPoint := StrToInt(sl.Strings[ 8]); Zeny := StrToInt(sl.Strings[ 9]);{廋惓} Stat1 := StrToInt(sl.Strings[10]); Stat2 := StrToInt(sl.Strings[11]);{廋惓僐僐傑偱} Option := StrToInt(sl.Strings[12]); Karma := StrToInt(sl.Strings[13]); Manner := StrToInt(sl.Strings[14]); HP := StrToInt(sl.Strings[15]); SP := StrToInt(sl.Strings[16]); DefaultSpeed := StrToInt(sl.Strings[17]); Hair := StrToInt(sl.Strings[18]); _2 := StrToInt(sl.Strings[19]); _3 := StrToInt(sl.Strings[20]); Weapon := StrToInt(sl.Strings[21]); Shield := StrToInt(sl.Strings[22]); Head1 := StrToInt(sl.Strings[23]); Head2 := StrToInt(sl.Strings[24]); Head3 := StrToInt(sl.Strings[25]); HairColor := StrToInt(sl.Strings[26]); ClothesColor := StrToInt(sl.Strings[27]); for i := 0 to 5 do ParamBase[i] := StrToInt(sl.Strings[28+i]); CharaNumber := StrToInt(sl.Strings[34]); Map := sl.Strings[35]; Point.X := StrToInt(sl.Strings[36]); Point.Y := StrToInt(sl.Strings[37]); SaveMap := sl.Strings[38]; SavePoint.X := StrToInt(sl.Strings[39]); SavePoint.Y := StrToInt(sl.Strings[40]); if (sl.Count = 51) then begin Plag := StrToInt(sl.Strings[48]); PLv := StrToInt(sl.Strings[49]); ID := StrToInt(sl.Strings[50]); end; if (sl.Count = 54) then begin Plag := StrToInt(sl.Strings[51]); PLv := StrToInt(sl.Strings[52]); ID := StrToInt(sl.Strings[53]); end; if (sl.Count = 52) then begin Plag := StrToInt(sl.Strings[49]); PLv := StrToInt(sl.Strings[50]); ID := StrToInt(sl.Strings[51]); end; if (sl.Count = 53) then begin Plag := StrToInt(sl.Strings[50]); PLv := StrToInt(sl.Strings[51]); ID := StrToInt(sl.Strings[52]); end; if ver >= 1 then begin for i := 0 to 2 do begin MemoMap[i] := sl.Strings[41+i*3]; MemoPoint[i].X := StrToInt(sl.Strings[42+i*3]); MemoPoint[i].Y := StrToInt(sl.Strings[43+i*3]); end; end else begin for i := 0 to 2 do begin MemoMap[i] := ''; MemoPoint[i].X := 0; MemoPoint[i].Y := 0; end; end;{傾僀僥儉惢憿娭學捛壛} if CID < 100001 then CID := CID + 100001;{傾僀僥儉惢憿娭學捛壛} if CID >= NowCharaID then NowCharaID := CID + 1; //儅僢僾懚嵼僠僃僢僋 if MapList.IndexOf(Map) = -1 then begin DebugOut.Lines.Add(Format('%s : Invalid Map "%s"', [Name, Map])); Map := 'prontera'; Point.X := 158; Point.Y := 189; end; //嵗昗僠僃僢僋 ta := MapList.Objects[MapList.IndexOf(Map)] as TMapList; if (Point.X < 0) or (Point.X >= ta.Size.X) or (Point.Y < 0) or (Point.Y >= ta.Size.Y) then begin DebugOut.Lines.Add(Format('%s : Invalid Map Point "%s"[%dx%d] (%d,%d)', [Name, Map, ta.Size.X, ta.Size.Y, Point.X, Point.Y])); Map := 'prontera'; Point.X := 158; Point.Y := 189; end; //儅僢僾懚嵼僠僃僢僋 if MapList.IndexOf(SaveMap) = -1 then begin DebugOut.Lines.Add(Format('%s : Invalid SaveMap "%s"', [Name, SaveMap])); SaveMap := 'prontera'; SavePoint.X := 158; SavePoint.Y := 189; end; //嵗昗僠僃僢僋 ta := MapList.Objects[MapList.IndexOf(SaveMap)] as TMapList; if (SavePoint.X < 0) or (SavePoint.X >= ta.Size.X) or (SavePoint.Y < 0) or (SavePoint.Y >= ta.Size.Y) then begin DebugOut.Lines.Add(Format('%s : Invalid SaveMap Point "%s"[%dx%d] (%d,%d)', [Name, SaveMap, ta.Size.X, ta.Size.Y, SavePoint.X, SavePoint.Y])); SaveMap := 'prontera'; SavePoint.X := 158; SavePoint.Y := 189; end; for i := 0 to 2 do begin //儅僢僾懚嵼僠僃僢僋 if (MemoMap[i] <> '') and (MapList.IndexOf(MemoMap[i]) = -1) then begin DebugOut.Lines.Add(Format('%s : Invalid MemoMap%d "%s"', [Name, i, MemoMap[i]])); MemoMap[i] := ''; MemoPoint[i].X := 0; MemoPoint[i].Y := 0; end else if MemoMap[i] <> '' then begin //嵗昗僠僃僢僋 ta := MapList.Objects[MapList.IndexOf(MemoMap[i])] as TMapList; if (MemoPoint[i].X < 0) or (MemoPoint[i].X >= ta.Size.X) or (MemoPoint[i].Y < 0) or (MemoPoint[i].Y >= ta.Size.Y) then begin DebugOut.Lines.Add(Format('%s : Invalid MemoMap%d Point "%s"[%dx%d] (%d,%d)', [Name, i, MemoMap[i], ta.Size.X, ta.Size.Y, MemoPoint[i].X, MemoPoint[i].Y]));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -