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

📄 database.pas

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