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

📄 database.pas

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