📄 database.pas
字号:
MemoMap[i] := ''; MemoPoint[i].X := 0; MemoPoint[i].Y := 0; end; end; end; end; //僗僉儖儘乕僪 for i := 0 to 330 do begin if SkillDB.IndexOf(i) <> -1 then begin tc.Skill[i].Data := SkillDB.IndexOfObject(i) as TSkillDB; end; end; if (tc.Plag <> 0) then begin tc.Skill[tc.Plag].Plag := true; end; sl.Clear; Readln(txt, str); sl.DelimitedText := str; j := StrToInt(sl.Strings[0]); for i := 1 to j do begin if SkillDB.IndexOf(StrToInt(sl.Strings[(i-1)*2+1])) <> -1 then begin k := StrToInt(sl.Strings[(i-1)*2+1]); tc.Skill[k].Lv := StrToInt(sl.Strings[(i-1)*2+2]); tc.Skill[k].Card := false; tc.Skill[k].Plag := false; end; end; //傾僀僥儉儘乕僪 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].ID := StrToInt(sl.Strings[(i-1)*10+1]); tc.Item[i].Amount := StrToInt(sl.Strings[(i-1)*10+2]); tc.Item[i].Equip := StrToInt(sl.Strings[(i-1)*10+3]); tc.Item[i].Identify := StrToInt(sl.Strings[(i-1)*10+4]); tc.Item[i].Refine := StrToInt(sl.Strings[(i-1)*10+5]); tc.Item[i].Attr := StrToInt(sl.Strings[(i-1)*10+6]); for k := 0 to 3 do begin tc.Item[i].Card[k] := StrToInt(sl.Strings[(i-1)*10+7+k]); end; tc.Item[i].Data := ItemDB.Objects[ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1]))] as TItemDB; end; end; if ver >= 2 then begin //僇乕僩傾僀僥儉儘乕僪 sl.Clear; Readln(txt, str); sl.DelimitedText := str; j := StrToInt(sl.Strings[0]);{僇乕僩婡擻捛壛} //僇乕僩撪偺傾僀僥儉憤悢 tc.Cart.Count := j;{僇乕僩婡擻捛壛僐僐傑偱} for i := 1 to j do begin if ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1])) <> -1 then begin tc.Cart.Item[i].ID := StrToInt(sl.Strings[(i-1)*10+1]); tc.Cart.Item[i].Amount := StrToInt(sl.Strings[(i-1)*10+2]); tc.Cart.Item[i].Equip := StrToInt(sl.Strings[(i-1)*10+3]); tc.Cart.Item[i].Identify := StrToInt(sl.Strings[(i-1)*10+4]); tc.Cart.Item[i].Refine := StrToInt(sl.Strings[(i-1)*10+5]); tc.Cart.Item[i].Attr := StrToInt(sl.Strings[(i-1)*10+6]); for k := 0 to 3 do begin tc.Cart.Item[i].Card[k] := StrToInt(sl.Strings[(i-1)*10+7+k]); end; tc.Cart.Item[i].Data := ItemDB.Objects[ItemDB.IndexOf(StrToInt(sl.Strings[(i-1)*10+1]))] as TItemDB; end; end; //僼儔僌儘乕僪 sl.Clear; Readln(txt, str); sl.DelimitedText := str; j := StrToInt(sl.Strings[0]); for i := 1 to j do tc.Flag.Add(sl.Strings[i]); end; CharaName.AddObject(tc.Name, tc); Chara.AddObject(tc.CID, tc); end; CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d character(s) data loaded.', [CharaName.Count])); Application.ProcessMessages; //僉儍儔忣曬&僾儗僀儎乕忣曬偺儕儞僋{廋惓} 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;{廋惓僐僐傑偱}{僷乕僥傿乕婡擻捛壛} DebugOut.Lines.Add('Castle data loading...'); Application.ProcessMessages; AssignFile(txt, AppPath + 'gcastle.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.GCastleData.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 <> 17 then continue; tgc := TCastle.Create; with tgc do begin Name := sl.Strings[0]; GID := StrToInt(sl.Strings[1]); GName:= sl.Strings[2]; GMName:=sl.Strings[3]; GKafra:=StrToInt(sl.Strings[4]); EDegree:=StrToInt(sl.Strings[5]); ETrigger:=StrToInt(sl.Strings[6]); DDegree:=StrToInt(sl.Strings[7]); DTrigger:=StrToInt(sl.Strings[8]); for i := 0 to 7 do begin GuardStatus[i] := StrToInt(sl.Strings[i+9]); end; end; CastleList.AddObject(tgc.Name, tgc); end; CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d Castle(s) data loaded.', [CastleList.Count])); Application.ProcessMessages; //僷乕僥傿乕忣曬儘乕僪 DebugOut.Lines.Add('Party data loading...'); Application.ProcessMessages; AssignFile(txt, AppPath + 'party.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.PartyData.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 <> 13 then continue; tpa := TParty.Create; with tpa do begin Name := sl.Strings[0]; for i := 0 to 11 do begin MemberID[i] := StrToInt(sl.Strings[i+1]); end; EXPShare := 0; end; PartyNameList.AddObject(tpa.Name, tpa); //DebugOut.Lines.Add(Format('Name : %s.', [tpa.Name])); end; CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d Party(s) data loaded.', [PartyNameList.Count])); Application.ProcessMessages; //ID偲僾儗僀儎乕忣曬偺儕儞僋 for i := 0 to PartyNameList.Count - 1 do begin tpa := PartyNameList.Objects[i] as TParty; for j := 0 to 11 do begin if tpa.MemberID[j] <> 0 then begin k := Chara.IndexOf(tpa.MemberID[j]); if k <> -1 then begin tc := Chara.Objects[k] as TChara; tc.PartyName := tpa.Name; //僷乕僥傿柤偼僐僐偱擖傟傞 tpa.Member[j] := tc; end; end; end; end;{僷乕僥傿乕婡擻捛壛僐僐傑偱}{僊儖僪婡擻捛壛} //僊儖僪忣曬儘乕僪 DebugOut.Lines.Add('Guild data loading...'); Application.ProcessMessages; AssignFile(txt, AppPath + 'guild.txt'); Reset(txt); Readln(txt, str); if str = '##Weiss.GuildData.0x0002' then begin// ver := 2; end else begin Reset(txt); end; while not eof(txt) do begin tg := TGuild.Create; with tg do begin //婎杮忣曬 sl.Clear; Readln(txt, str); sl.DelimitedText := str; if sl.Count <> 12 then continue; ID := StrToInt(sl.Strings[0]); if (ID > NowGuildID) then NowGuildID := ID; Name := sl.Strings[1]; LV := StrToInt(sl.Strings[2]); EXP := StrToInt(sl.Strings[3]); GSkillPoint := StrToInt(sl.Strings[4]); Notice[0] := sl.Strings[5]; Notice[1] := sl.Strings[6]; Agit := sl.Strings[7]; Emblem := StrToInt(sl.Strings[8]); Present := StrToInt(sl.Strings[9]); DisposFV := StrToInt(sl.Strings[10]); DisposRW := StrToInt(sl.Strings[11]); //儊儞僶乕忣曬 sl.Clear; Readln(txt, str); sl.DelimitedText := str; if sl.Count <> 108 then continue; for i := 0 to 35 do begin MemberID[i] := StrToInt(sl.Strings[i * 3]); MemberPos[i] := StrToInt(sl.Strings[i * 3 + 1]); MemberEXP[i] := StrToInt(sl.Strings[i * 3 + 2]); if (MemberID[i] <> 0) then Inc(RegUsers, 1); end; //怑埵忣曬 sl.Clear; Readln(txt, str); sl.DelimitedText := str; if sl.Count <> 80 then continue; for i := 0 to 19 do begin PosName[i] := sl.Strings[i * 4]; PosInvite[i] := (StrToInt(sl.Strings[i * 4 + 1]) = 1); PosPunish[i] := (StrToInt(sl.Strings[i * 4 + 2]) = 1); PosEXP[i] := StrToInt(sl.Strings[i * 4 + 3]); end; //僗僉儖忣曬 for i := 10000 to 10004 do begin if GSkillDB.IndexOf(i) <> -1 then begin GSkill[i].Data := GSkillDB.IndexOfObject(i) as TSkillDB; end; end; sl.Clear; Readln(txt, str); sl.DelimitedText := str; j := StrToInt(sl.Strings[0]); for i := 1 to j do begin if GSkillDB.IndexOf(StrToInt(sl.Strings[(i-1)*2+1])) <> -1 then begin k := StrToInt(sl.Strings[(i-1)*2+1]); GSkill[k].Lv := StrToInt(sl.Strings[(i-1)*2+2]); GSkill[k].Card := false; end; end; //捛曻幰儕僗僩丄摨柨丒揋懳儕僗僩 sl.Clear; Readln(txt, str); sl.DelimitedText := str; if sl.Count < 3 then continue; k := 3; //捛曻幰 j := StrToInt(sl.Strings[0]); for i := 1 to j do begin tgb := TGBan.Create; tgb.Name := sl.Strings[k]; Inc(k); tgb.AccName := sl.Strings[k]; Inc(k); tgb.Reason := sl.Strings[k]; Inc(k); GuildBanList.AddObject(tgb.Name, tgb); end; //摨柨 j := StrToInt(sl.Strings[1]); for i := 1 to j do begin tgl := TGRel.Create; tgl.ID := StrToInt(sl.Strings[k]); Inc(k); tgl.GuildName := sl.Strings[k]; Inc(k); RelAlliance.AddObject(tgl.GuildName, tgl); end; //揋懳 j := StrToInt(sl.Strings[2]); for i := 1 to j do begin tgl := TGRel.Create; tgl.ID := StrToInt(sl.Strings[k]); Inc(k); tgl.GuildName := sl.Strings[k]; Inc(k); RelHostility.AddObject(tgl.GuildName, tgl); end; //曗懌忣曬愝掕 MaxUsers := 16; if (GSkill[10004].Lv > 0) then begin MaxUsers := MaxUsers + GSkill[10004].Data.Data1[GSkill[10004].Lv]; end; NextEXP := GExpTable[LV]; end; GuildList.AddObject(tg.ID, tg); end; CloseFile(txt); DebugOut.Lines.Add(Format('*** Total %d Guild(s) data loaded.', [GuildList.Count])); Application.ProcessMessages; //ID偲僾儗僀儎乕忣曬偺儕儞僋 for i := 0 to GuildList.Count - 1 do begin tg := GuildList.Objects[i] as TGuild; with tg do begin for j := 0 to 35 do begin if MemberID[j] <> 0 then begin k := Chara.IndexOf(MemberID[j]); if k <> -1 then begin tc := Chara.Objects[k] as TChara; tc.GuildName := Name; tc.GuildID := ID; tc.ClassName := PosName[MemberPos[j]]; tc.GuildPos := j; Member[j] := tc; if (j = 0) then MasterName := tc.Name; SLV := SLV + tc.BaseLV; end; end; end; end; end;{僊儖僪婡擻捛壛僐僐傑偱}{僉儏乕儁僢僩} DebugOut.Lines.Add('Pet data loading...'); Application.ProcessMessages; AssignFile(txt, AppPath + 'pet.txt'); Reset(txt); Readln(txt, str); ver := 0; if str = '##Weiss.PetData.0x0001' then begin ver := 1; end else if str = '##Weiss.PetData.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 tpe := TPet.Create; if ver = 1 then begin if sl.Count <> 11 then continue; with tpe do begin PlayerID := StrToInt( sl.Strings[ 0] ); CharaID := StrToInt( sl.Strings[ 1] ); Cart := StrToInt( sl.Strings[ 2] ); Index := StrToInt( sl.Strings[ 3] ); Incubated := StrToInt( sl.Strings[ 4] ); PetID := StrToInt( sl.Strings[ 5] ); Name := sl.Strings[ 6]; Renamed := StrToInt( sl.Strings[ 7] ); Relation := StrToInt( sl.Strings[ 8] ); Fullness := StrToInt( sl.Strings[ 9] ); Accessory := StrToInt( sl.Strings[10] ); end; end else if ver = 2 then begin if sl.Count <> 13 then continue; i := PetDB.IndexOf( StrToInt( sl.Strings[6] ) ); if i <> -1 then begin tpe := TPet.Create; with tpe do begin PlayerID := StrToInt( sl.Strings[ 0] ); CharaID := StrToInt( sl.Strings[ 1] ); Cart := StrToInt( sl.Strings[ 2] ); Index := StrToInt( sl.Strings[ 3] ); Incubated := StrToInt( sl.Strings[ 4] ); PetID := StrToInt( sl.Strings[ 5] ); JID := StrToInt( sl.Strings[ 6] ); Name := sl.Strings[ 7]; Renamed := StrToInt( sl.Strings[ 8] ); LV := StrToInt( sl.Strings[ 9] ); Relation := StrToInt( sl.Strings[10] ); Fullness := StrToInt( sl.Strings[11] ); Accessory := StrToInt( sl.Strings[12] ); Data := PetDB.Objects[i] as
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -