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

📄 database.pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 PAS
📖 第 1 页 / 共 5 页
字号:
	Application.ProcessMessages;


	LoadSummonLists;
{巵{敔捛壛僐僐傑偱}

{僉儏乕儁僢僩}
	LoadPetData;
{僉儏乕儁僢僩偙偙傑偱}

{NPC僀儀儞僩捛壛}
	//mapinfo_db撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Mapinfo database loading...');
	Application.ProcessMessages;
	if FileExists(AppPath + 'database\mapinfo_db.txt') then begin
		AssignFile(txt, AppPath + 'database\mapinfo_db.txt');
		Reset(txt);
		Readln(txt, str);
		k := 0;
		while not eof(txt) do begin
			sl.Clear;
			Readln(txt, str);
			sl.DelimitedText := LowerCase(str);
			if (sl.Count < 2) then continue;
			sl[0] := ChangeFileExt(sl[0], '');
			if (MapInfo.IndexOf(sl[0]) = -1) then begin
				mi := MapTbl.Create;
				j := 1;
			end else begin
				mi := MapInfo.Objects[MapInfo.IndexOf(sl[0])] as MapTbl;
				j := 0;
			end;
			for i := 1 to sl.Count - 1 do begin
				if (sl[i] = 'nomemo') then mi.noMemo := true
				else if (sl[i] = 'nosave') then mi.noSave := true
				else if (sl[i] = 'noteleport') then mi.noTele := true
{傾僕僩婡擻捛壛}
				else if (sl[i] = 'noportal') then mi.noPortal := true
				else if (sl[i] = 'nofly') then mi.noFly := true
				else if (sl[i] = 'nobutterfly') then mi.noBfly := true
				else if (sl[i] = 'nobranch') then mi.noBranch := true
				else if (sl[i] = 'noskill') then mi.noSkill := true
				else if (sl[i] = 'noitem') then mi.noItem := true
				else if (sl[i] = 'agit') then mi.Agit := true
				else if (sl[i] = 'pvp') then mi.PvP := true
				else if (sl[i] = 'pvpg') then mi.PvPG := true
				else if (sl[i] = 'noday') then mi.noday := true
				else if (sl[i] = 'ctf') then mi.ctf := true;

				if (Option_PVP = false) then begin
					mi.PvP  := false;
					mi.PvPG := false;
				end;

				{傾僕僩婡擻捛壛僐僐傑偱}
			end;
			if (j = 1) then begin
				MapInfo.AddObject(sl[0], mi);
			end;
			Inc(k);
		end;
		CloseFile(txt);
		debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d MapInfo database loaded.', [k]));
		Application.ProcessMessages;
	end else begin
		debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-> Mapinfo database Not Find.');
		Application.ProcessMessages;
	end;
{NPC僀儀儞僩捛壛僐僐傑偱}
	//僗僉儖僨乕僞儀乕僗撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Skill database loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\skill_db.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for i := sl.Count to 74 do
			sl.Add('0');
		for i := 0 to 74 do
			if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
		tl := TSkillDB.Create;
		with tl do begin
			ID := StrToInt(sl.Strings[0]);
			IDC := sl.Strings[1];
			Name := sl.Strings[2];
			SType := StrToInt(sl.Strings[3]);
			MasterLV := StrToInt(sl.Strings[4]);
			for i := 0 to 9 do
				SP[i+1] := StrToInt(sl.Strings[5+i]);
			HP := StrToInt(sl.Strings[15]);
			UseItem := StrToInt(sl.Strings[16]);
			CastTime1 := StrToInt(sl.Strings[17]);
			CastTime2 := StrToInt(sl.Strings[18]);
			CastTime3 := StrToInt(sl.Strings[19]);
			Range := StrToInt(sl.Strings[20]);
			Element := StrToInt(sl.Strings[21]);
			for i := 0 to 9 do
				Data1[i+1] := StrToInt(sl.Strings[22+i]);
			for i := 0 to 9 do
				Data2[i+1] := StrToInt(sl.Strings[32+i]);
			Range2 := StrToInt(sl.Strings[42]);
			Icon := StrToInt(sl.Strings[43]);

			wj := StrToInt64(sl.Strings[44]);

			for i := 0 to MAX_JOB_NUMBER do begin
				Job1[i] := Job1[i] or boolean((wj and (Int64(1) shl i)) <> 0);
        if (i < (LOWER_JOB_END - 1)) and (Job1[i]) then begin
          Job1[i + LOWER_JOB_END + 1] := true;
        end;
        //if (Job1[i + LOWER_JOB_END + 1]) then debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('Job1[%d] set',[i+LOWER_JOB_END+1]));
			end;
      {for i := 0 to MAX_JOB_NUMBER do begin
        if (Job1[i]) and (ID = 394) then
          debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('Skill %d, job %d is set',[tl.ID, i]));
      end;}
			for i := 0 to 4 do begin
				ReqSkill1[i] := StrToInt(sl.Strings[45+i*2]);
				ReqLV1[i] := StrToInt(sl.Strings[46+i*2]);
			end;

			wj := StrToInt64(sl.Strings[55]);
			for i := 0 to MAX_JOB_NUMBER do begin
				Job2[i] := Job2[i] or boolean((wj and (Int64(1) shl i)) <> 0);
        if (i < LOWER_JOB_END - 1) then Job2[i + LOWER_JOB_END + 1] := Job2[i];
			end;
			for i := 0 to 4 do begin
				ReqSkill2[i] := StrToInt(sl.Strings[56+i*2]);
				ReqLV2[i] := StrToInt(sl.Strings[57+i*2]);
			end;
		end;
		SkillDB.AddObject(tl.ID, tl);
    SkillDBName.AddObject(tl.IDC, tl);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d skill(s) database loaded.', [SkillDB.Count]));
	Application.ProcessMessages;

	//宱尡抣僥乕僽儖撉傒崬傒
{僊儖僪婡擻捛壛}
	//僊儖僪僗僉儖僨乕僞儀乕僗撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Guild Skill database loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\skill_guild_db.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		for i := sl.Count to 74 do
			sl.Add('0');
		for i := 0 to 74 do
			if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
		tl := TSkillDB.Create;
		with tl do begin
			ID := StrToInt(sl.Strings[0]);
			IDC := sl.Strings[1];
			Name := sl.Strings[2];
			SType := StrToInt(sl.Strings[3]);
			MasterLV := StrToInt(sl.Strings[4]);
			for i := 0 to 9 do
				SP[i+1] := StrToInt(sl.Strings[5+i]);
			HP := StrToInt(sl.Strings[15]);
			UseItem := StrToInt(sl.Strings[16]);
			CastTime1 := StrToInt(sl.Strings[17]);
			CastTime2 := StrToInt(sl.Strings[18]);
			CastTime3 := StrToInt(sl.Strings[19]);
			Range := StrToInt(sl.Strings[20]);
			Element := StrToInt(sl.Strings[21]);
			for i := 0 to 9 do
				Data1[i+1] := StrToInt(sl.Strings[22+i]);
			for i := 0 to 9 do
				Data2[i+1] := StrToInt(sl.Strings[32+i]);
			Range2 := StrToInt(sl.Strings[42]);
			Icon := StrToInt(sl.Strings[43]);
			wj := StrToInt64(sl.Strings[44]);
			for i := 0 to MAX_JOB_NUMBER do begin
				Job1[i] := boolean((wj and (Int64(1) shl i)) <> 0);
        if (i < LOWER_JOB_END - 1) then Job1[i + LOWER_JOB_END + 1] := Job1[i];
			end;
			for i := 0 to 9 do begin
				ReqSkill1[i] := StrToInt(sl.Strings[45+i*2]);
				ReqLV1[i] := StrToInt(sl.Strings[46+i*2]);
			end;
      for i := 0 to 9 do begin
				ReqSkill2[i] := StrToInt(sl.Strings[55+i*2]);
				ReqLV2[i] := StrToInt(sl.Strings[56+i*2]);
			end;
		end;
		GSkillDB.AddObject(tl.ID, tl);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d guild skill(s) database loaded.', [GSkillDB.Count]));
	Application.ProcessMessages;

  // Colus, 20040130: Adding territory name DB.
  debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Guild Territory database loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\territory_db.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		if (sl.Count = 2) then begin
			tt := TTerritoryDB.Create;
			with tt do begin
				MapName := sl.Strings[0];
				TerritoryName := sl.Strings[1];
			end;
			TerritoryList.AddObject(tt.MapName, tt);
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d guild territories loaded.', [TerritoryList.Count]));
	Application.ProcessMessages;


	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Slave Summon Mobs List loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\summon_slave.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;
		//for i := sl.Count to 6 do
			//sl.Add('0');
		//for i := 0 to 6 do
			//if (i <> 0) and (sl.Strings[i] = '') then sl.Strings[i] := '0';
		if (sl.Count = 7) then begin
		tss := TSlaveDB.Create;
		with tss do begin
			Name := sl.Strings[0];
			Slaves[0] := MobDBName.IndexOf(sl.Strings[1]);
			Slaves[1] := MobDBName.IndexOf(sl.Strings[2]);
			Slaves[2] := MobDBName.IndexOf(sl.Strings[3]);
			Slaves[3] := MobDBName.IndexOf(sl.Strings[4]);
			Slaves[4] := MobDBName.IndexOf(sl.Strings[5]);
			TotalSlaves := StrToInt(sl.Strings[6]);
		end;
		SlaveDBName.AddObject(tss.Name,tss);
		end;
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d Slave Summon Mobs List loaded.', [j]));
	Application.ProcessMessages;

	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Make Arrow List loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\make_arrow.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;

		for i := sl.Count to 7 do
			sl.Add('0');
		for i := 0 to 7 do
			if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';

		ma := TMArrowDB.Create;
		with ma do begin
			ID := StrToInt(sl.Strings[0]);
			if (sl.Strings[1] <> '') then CID[0] := StrToInt(sl.Strings[1]);
			if (sl.Strings[2] <> '') then CNum[0] := StrToInt(sl.Strings[2]);
			if (sl.Strings[3] <> '') then CID[1] := StrToInt(sl.Strings[3]);
			if (sl.Strings[4] <> '') then CNum[1] := StrToInt(sl.Strings[4]);
			if (sl.Strings[5] <> '') then CID[2] := StrToInt(sl.Strings[5]);
			if (sl.Strings[6] <> '') then CNum[2] := StrToInt(sl.Strings[6]);
		end;
		MArrowDB.AddObject(ma.ID,ma);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d Make Arrow List loaded.', [j]));
	Application.ProcessMessages;


	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'ID Table List loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\id_table.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;

		for i := sl.Count to 16 do
			sl.Add('0');
		for i := 0 to 16 do
			if (i <> 1) and (i <> 2) and (sl.Strings[i] = '') then sl.Strings[i] := '0';

		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]);
			if (sl.Strings[16] <> '') then PVPControl := StrToInt(sl.Strings[16]);
			if (sl.Strings[17] <> '') then UserControl := StrToInt(sl.Strings[17]);
		end;
		IDTableDB.AddObject(tid.ID,tid);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d ID Table List loaded.', [j]));
	Application.ProcessMessages;


	debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'GM Access List loading...');
	Application.ProcessMessages;
	AssignFile(txt, AppPath + 'database\gm_access.txt');
	Reset(txt);
	Readln(txt, str);
	while not eof(txt) do begin
		sl.Clear;
		Readln(txt, str);
		sl.DelimitedText := str;

		tGM := TGM_Table.Create;
		with tGM do begin
			ID := StrToInt(sl.Strings[0]);
            Level := StrToInt(sl.Strings[1]);
		end;
        GM_Access_DB.AddObject(tGM.ID, tGM);
	end;
	CloseFile(txt);
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('-> Total %d GM Access List loaded.', [j]));
	Application.ProcessMessages;


	//僊儖僪宱尡抣僥乕僽儖撉傒崬傒
	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '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('[' + TimeToStr(Now) + '] ' + '-> Guild EXP database loaded.');
	Application.ProcessMessages;

	//Check for Emblem directory...
	if not DirectoryExists(AppPath + 'emblem') then begin
		if not CreateDir(AppPath + 'emblem') then begin
			MessageBox(Handle, 'The \emblem directory was not found.', 'Weiss', MB_OK or MB_ICONSTOP);
			Application.Terminate;
			Exit;
		end;
	end;
{僊儖僪婡擻捛壛僐僐傑偱}

	debugout.lines.add('[' + TimeToStr(Now) + '] ' + '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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -