⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.pas

📁 仙境传说(RO)私人服务器端源代码。第一次上传。
💻 PAS
📖 第 1 页 / 共 5 页
字号:
						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 + -