📄 localdb.pas
字号:
function TFrmDB.LoadMonGen(): Integer;
procedure LoadMapGen(MonGenList: TStringList; sFileName: string);
var
i : Integer;
sFilePatchName : string;
sFileDir : string;
LoadList : TStringList;
begin
sFileDir := g_Config.sEnvirDir + 'MonGen\';
if not DirectoryExists(sFileDir) then
begin
CreateDir(sFileDir);
end;
sFilePatchName := sFileDir + sFileName;
if FileExists(sFilePatchName) then
begin
LoadList := TStringList.Create;
try
LoadList.LoadFromFile(sFilePatchName);
for i := 0 to LoadList.Count - 1 do
begin
MonGenList.Add(LoadList.Strings[i]);
end;
finally
LoadList.Free;
End;
end;
end;
var
sFileName, sLineText, sData : string;
MonGenInfo : pTMonGenInfo;
LoadList : TStringList;
sMapGenFile : string;
i : Integer;
begin
Result := 0;
sFileName := g_Config.sEnvirDir + 'MonGen.txt';
if FileExists(sFileName) then
begin
LoadList := TStringList.Create;
Try
LoadList.LoadFromFile(sFileName);
i := 0;
while (True) do
begin
if i >= LoadList.Count then
break;
if CompareLStr('loadgen', LoadList.Strings[i], length('loadgen')) then
begin
sMapGenFile := GetValidStr3(LoadList.Strings[i], sLineText, [' ', #9]);
LoadList.Delete(i);
if sMapGenFile <> '' then
begin
LoadMapGen(LoadList, sMapGenFile);
end;
end;
Inc(i);
end;
for i := 0 to LoadList.Count - 1 do
begin
sLineText := LoadList.Strings[i];
if (sLineText <> '') and (sLineText[1] <> ';') then
begin
New(MonGenInfo);
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.sMapName := sData;
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.nX := Str_ToInt(sData, 0);
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.nY := Str_ToInt(sData, 0);
sLineText := GetValidStrCap(sLineText, sData, [' ', #9]);
if (sData <> '') and (sData[1] = '"') then
ArrestStringEx(sData, '"', '"', sData);
MonGenInfo.sMonName := sData;
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.nRange := Str_ToInt(sData, 0);
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.nCount := Str_ToInt(sData, 0);
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.dwZenTime := Str_ToInt(sData, -1) * 60 * 1000;
sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
MonGenInfo.nMissionGenRate := Str_ToInt(sData, 0);
//集中座标刷新机率 1 -100
if (MonGenInfo.sMapName <> '') and
(MonGenInfo.sMonName <> '') and
(MonGenInfo.dwZenTime <> 0) and
(g_MapManager.GetMapInfo(nServerIndex, MonGenInfo.sMapName) <> nil)
then
begin
MonGenInfo.CertList := TMyList.create;
MonGenInfo.Envir := g_MapManager.FindMap(MonGenInfo.sMapName);
if MonGenInfo.Envir <> nil then
begin
UserEngine.m_MonGenList.Add(MonGenInfo);
end
else
begin
DisPose(MonGenInfo);
end;
end;
//tMonGenInfo.nRace:=UserEngine.GetMonRace(tMonGenInfo.sMonName);
end; //00486B5B
end; //00486B67
//00486B67
New(MonGenInfo);
MonGenInfo.sMapName := '';
MonGenInfo.sMonName := '';
MonGenInfo.CertList := TMyList.create;
MonGenInfo.Envir := nil;
UserEngine.m_MonGenList.Add(MonGenInfo);
finally
LoadList.Free;
End;
Result := 1;
end;
end;
//00485E04
function TFrmDB.LoadMonsterDB(): Integer;
var
i : Integer;
Monster : pTMonInfo;
resourcestring
sSQLString = 'select * from Monster';
begin
Result := 0;
EnterCriticalSection(ProcessHumanCriticalSection);
try
for i := 0 to UserEngine.MonsterList.Count - 1 do
begin
DisPose(pTMonInfo(UserEngine.MonsterList.Items[i]));
end;
UserEngine.MonsterList.Clear;
DataModule_mir200[0].ADOQuery.SQL.Clear;
DataModule_mir200[0].ADOQuery.SQL.Add(sSQLString);
try
DataModule_mir200[0].ADOQuery.Open;
finally
Result := -1;
end;
for i := 0 to DataModule_mir200[0].ADOQuery.RecordCount - 1 do
begin
New(Monster);
Monster.ItemList := TMyList.create;
Monster.sName := Trim(DataModule_mir200[0].ADOQuery.FieldByName('NAME').AsString);
Monster.btRace := DataModule_mir200[0].ADOQuery.FieldByName('Race').AsInteger;
Monster.btRaceImg := DataModule_mir200[0].ADOQuery.FieldByName('RaceImg').AsInteger;
Monster.wAppr := DataModule_mir200[0].ADOQuery.FieldByName('Appr').AsInteger;
Monster.wLevel := DataModule_mir200[0].ADOQuery.FieldByName('Lvl').AsInteger;
Monster.btLifeAttrib := DataModule_mir200[0].ADOQuery.FieldByName('Undead').AsInteger;
Monster.wCoolEye := DataModule_mir200[0].ADOQuery.FieldByName('CoolEye').AsInteger;
Monster.dwExp := DataModule_mir200[0].ADOQuery.FieldByName('Exp').AsInteger;
//城门或城墙的状态跟HP值有关,如果HP异常,将导致城墙显示不了
if Monster.btRace in [110, 111] then
begin //如果为城墙或城门由HP不加倍
Monster.wHP := DataModule_mir200[0].ADOQuery.FieldByName('HP').AsInteger;
end
else
begin
Monster.wHP := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('HP').AsInteger *
(g_Config.nMonsterPowerRate / 10));
end;
Monster.wMP := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MP').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wAC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('AC').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wMAC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MAC').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wDC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('DC').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wMaxDC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('DCMAX').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wMC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MC').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wSC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('SC').AsInteger *
(g_Config.nMonsterPowerRate / 10));
Monster.wSpeed := DataModule_mir200[0].ADOQuery.FieldByName('SPEED').AsInteger;
Monster.wHitPoint := DataModule_mir200[0].ADOQuery.FieldByName('HIT').AsInteger;
Monster.wWalkSpeed := _MAX(200, DataModule_mir200[0].ADOQuery.FieldByName('WALK_SPD').AsInteger);
Monster.wWalkStep := _MAX(1, DataModule_mir200[0].ADOQuery.FieldByName('WalkStep').AsInteger);
Monster.wWalkWait := DataModule_mir200[0].ADOQuery.FieldByName('WalkWait').AsInteger;
Monster.wAttackSpeed := DataModule_mir200[0].ADOQuery.FieldByName('ATTACK_SPD').AsInteger;
if Monster.wWalkSpeed < 200 then
Monster.wWalkSpeed := 200;
if Monster.wAttackSpeed < 200 then
Monster.wAttackSpeed := 200;
Monster.ItemList := nil;
LoadMonitems(Monster.sName, Monster.ItemList);
UserEngine.MonsterList.Add(Monster);
Result := 1;
DataModule_mir200[0].ADOQuery.Next;
end;
DataModule_mir200[0].ADOQuery.Close;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
function TFrmDB.LoadMonitems(MonName: string; var ItemList: TMyList): Integer;
//00485ABC
var
i : Integer;
s24 : string;
LoadList : TStringList;
MonItem : pTMonItemInfo;
s28, s2C, s30 : string;
n18, n1C, n20 : Integer;
begin
Result := 0;
s24 := g_Config.sEnvirDir + 'MonItems\' + MonName + '.txt';
if FileExists(s24) then
begin
if ItemList <> nil then
begin
for i := 0 to ItemList.Count - 1 do
begin
DisPose(pTMonItemInfo(ItemList.Items[i]));
end;
ItemList.Clear;
end
else
ItemList := TMyList.create; //00485B81
LoadList := TStringList.Create;
try
LoadList.LoadFromFile(s24);
for i := 0 to LoadList.Count - 1 do
begin
s28 := LoadList.Strings[i];
if (s28 <> '') and (s28[1] <> ';') then
begin
s28 := GetValidStr3(s28, s30, [' ', '/', #9]);
n18 := Str_ToInt(s30, -1);
s28 := GetValidStr3(s28, s30, [' ', '/', #9]);
n1C := Str_ToInt(s30, -1);
s28 := GetValidStr3(s28, s30, [' ', #9]);
if s30 <> '' then
begin
if s30[1] = '"' then
ArrestStringEx(s30, '"', '"', s30);
end;
s2C := s30;
s28 := GetValidStr3(s28, s30, [' ', #9]);
n20 := Str_ToInt(s30, 1);
if (n18 > 0) and (n1C > 0) and (s2C <> '') then
begin
if ItemList = nil then
ItemList := TMyList.create;
New(MonItem);
MonItem.SelPoint := n18 - 1;
MonItem.MaxPoint := n1C;
MonItem.ItemName := s2C;
MonItem.Count := n20;
ItemList.Add(MonItem);
Inc(Result);
end;
end;
end;
finally
LoadList.Free;
End;
end;
end;
//00488178
function TFrmDB.LoadNpcs(): Integer;
var
sFileName, s10, s18, s1C, s20, s24, s28, s2C, s30, s34, s38: string;
LoadList : TStringList;
NPC : TNormNpc;
i : Integer;
begin
sFileName := g_Config.sEnvirDir + 'Npcs.txt';
if FileExists(sFileName) then
begin
LoadList := TStringList.Create;
try
LoadList.LoadFromFile(sFileName);
for i := 0 to LoadList.Count - 1 do
begin
s18 := Trim(LoadList.Strings[i]);
if (s18 <> '') and (s18[1] <> ';') then
begin
s18 := GetValidStrCap(s18, s20, [' ', #9]);
if (s20 <> '') and (s20[1] = '"') then
ArrestStringEx(s20, '"', '"', s20);
s18 := GetValidStr3(s18, s24, [' ', #9]);
s18 := GetValidStr3(s18, s28, [' ', #9]);
s18 := GetValidStr3(s18, s2C, [' ', #9]);
s18 := GetValidStr3(s18, s30, [' ', #9]);
s18 := GetValidStr3(s18, s34, [' ', #9]);
s18 := GetValidStr3(s18, s38, [' ', #9]);
if (s20 <> '') and (s28 <> '') and (s38 <> '') then
begin
NPC := nil;
case Str_ToInt(s24, 0) of
0: NPC := TMerchant.Create;
1: NPC := TGuildOfficial.Create;
2: NPC := TCastleOfficial.Create;
end;
if NPC <> nil then
begin
NPC.m_sMapName := s28;
NPC.m_nCurrX := Str_ToInt(s2C, 0);
NPC.m_nCurrY := Str_ToInt(s30, 0);
NPC.m_sCharName := s20;
NPC.m_nFlag := Str_ToInt(s34, 0);
NPC.m_wAppr := Str_ToInt(s38, 0);
UserEngine.QuestNPCList.Add(NPC); //0048847D
end;
end;
end;
end;
finally
LoadList.Free;
End;
end;
Result := 1;
end;
//00489840
function TFrmDB.LoadQuestDiary(): Integer;
function sub_48978C(nIndex: Integer): string;
begin
if nIndex >= 1000 then
begin
Result := IntToStr(nIndex);
exit;
end;
if nIndex >= 100 then
begin
Result := IntToStr(nIndex) + '0';
exit;
end;
Result := IntToStr(nIndex) + '00';
end;
var
i, ii : Integer;
QDDinfoList : TMyList;
QDDinfo : pTQDDinfo;
s14, s18, s1C, s20 : string;
bo2D : Boolean;
nC : Integer;
LoadList : TStringList;
begin
Result := 1;
for i := 0 to QuestDiaryList.Count - 1 do
begin
QDDinfoList := QuestDiaryList.Items[i];
for ii := 0 to QDDinfoList.Count - 1 do
begin
QDDinfo := QDDinfoList.Items[ii];
QDDinfo.sList.Free;
DisPose(QDDinfo);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -