📄 localdb.pas
字号:
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
{$ENDIF}
end;
//004855E0
function TFrmDB.LoadItemsDB: Integer;
var
i,Idx:Integer;
Item:TItem;
ResourceString
sSQLString = 'SELECT * FROM TBL_STDITEMS ORDER BY FLD_ID';
begin
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
for I := 0 to UserEngine.StdItemList.Count - 1 do begin
TItem(UserEngine.StdItemList.Items[I]).Free;
end;
UserEngine.StdItemList.Clear;
Result := -1;
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
try
Query.Open;
except
Result:= -2;
end;
if Query.RecordCount = 0 then Result := -3;
for i:=0 to Query.RecordCount -1 do begin
Item := TItem.Create;
Idx := Query.FieldByName('FLD_ID').AsInteger;
Item.Name := Query.FieldByName('FLD_NAME').AsString;
Item.StdMode := Query.FieldByName('FLD_STDMode').AsInteger;
Item.Shape := Query.FieldByName('FLD_SHAPE').AsInteger;
Item.Weight := Query.FieldByName('FLD_WEIGHT').AsInteger;
Item.AniCount := Query.FieldByName('FLD_ANICOUNT').AsInteger;
Item.Source := Query.FieldByName('FLD_SOURCE').AsInteger;
Item.Reserved := Query.FieldByName('FLD_RESERVED').AsInteger;
Item.Looks := Query.FieldByName('FLD_IMGINDEX').AsInteger;
Item.DuraMax := Word(Query.FieldByName('FLD_DURAMAX').AsInteger);
Item.AC := ROUND(Query.FieldByName('FLD_AC').AsInteger * (g_Config.nItemsACPowerRate / 10));
Item.AC2 := ROUND(Query.FieldByName('FLD_ACMAX').AsInteger * (g_Config.nItemsACPowerRate / 10));
Item.MAC := ROUND(Query.FieldByName('FLD_MAC').AsInteger * (g_Config.nItemsACPowerRate / 10));
Item.MAC2 := ROUND(Query.FieldByName('FLD_MACMAX').AsInteger * (g_Config.nItemsACPowerRate / 10));
Item.DC := ROUND(Query.FieldByName('FLD_DC').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.DC2 := ROUND(Query.FieldByName('FLD_DCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.MC := ROUND(Query.FieldByName('FLD_MC').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.MC2 := ROUND(Query.FieldByName('FLD_MCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.SC := ROUND(Query.FieldByName('FLD_SC').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.SC2 := ROUND(Query.FieldByName('FLD_SCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
Item.Need := Query.FieldByName('FLD_NEED').AsInteger;
Item.NeedLevel := Query.FieldByName('FLD_NEEDLEVEL').AsInteger;
Item.Price := Query.FieldByName('FLD_PRICE').AsInteger;
Item.Unique := Query.FieldByName('FLD_UNIQUEITEM').AsBoolean;
Item.Light := Query.FieldByName('FLD_LIGHT').AsInteger;
Item.Tox := Query.FieldByName('FLD_TOX').AsInteger;
Item.ToxAvoid := Query.FieldByName('FLD_TOXAVOID').AsInteger;
Item.SlowDown := Query.FieldByName('FLD_SLOWDOWN').AsInteger;
Item.MagAvoid := Query.FieldByName('FLD_MGAVOID').AsInteger;
Item.HpAdd := Query.FieldByName('FLD_HPADD').AsInteger;
Item.MpAdd := Query.FieldByName('FLD_MPADD').AsInteger;
Item.boCanTrade := Query.FieldByName('FLD_CanTrade').AsBoolean;
Item.boCanDrop := Query.FieldByName('FLD_CanDrop').AsBoolean;
Item.boCanDeathDrop := Query.FieldByName('FLD_CanDeathDrop').AsBoolean;
Item.boCanRepair := Query.FieldByName('FLD_CanRepair').AsBoolean;
Item.boCanSpecialRepair := Query.FieldByName('FLD_CanSpecialRepair').AsBoolean;
Item.boCanStore := Query.FieldByName('FLD_CanStore').AsBoolean;
Item.boCanSell := Query.FieldByName('FLD_CanSell').AsBoolean;
Item.boVanishDrop := Query.FieldByName('FLD_VanishDrop').AsBoolean;
Item.NeedIdentify :=GetGameLogItemNameList(Item.Name);
if Item.StdMode = 48 then
g_Config.sGTDeco:=Item.Name;//set the name of the gt decoration base item
case Item.StdMode of
5,6: Item.ItemType := ITEM_WEAPON;
10,11,12: Item.ItemType := ITEM_ARMOR;
15,19,20,21,22,23,24,26,62,63,64: Item.ItemType := ITEM_ACCESSORY;
else Item.ItemType := ITEM_ETC;
end;
if UserEngine.StdItemList.Count = Idx-1 then begin
UserEngine.StdItemList.Add(Item);
Result := 1;
end else begin
Memo.Lines.Add(format('Error: Invalid Index found(Idx:%d Name:%s)..',[Idx,Item.Name]));
Result := -100;
exit;
end;
Query.Next;
end;
g_boGameLogGold:=GetGameLogItemNameList(sSTRING_GOLDNAME) = 1;
g_boGameLogHumanDie:=GetGameLogItemNameList(g_sHumanDieEvent) = 1;
g_boGameLogGameGold:=GetGameLogItemNameList(g_Config.sGameGoldName) = 1;
g_boGameLogGamePoint:=GetGameLogItemNameList(g_Config.sGamePointName) = 1;
finally
Query.Close;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
//00486330
function TFrmDB.LoadMagicDB():Integer;
var
i:Integer;
Magic:pTMagic;
ResourceString
sSQLString = 'SELECT * FROM TBL_MAGIC ORDER BY FLD_ID';
begin
Result:= -1;
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
UserEngine.SwitchMagicList();
{
for I := 0 to UserEngine.MagicList.Count - 1 do begin
Dispose(pTMagic(UserEngine.MagicList.Items[I]));
end;
UserEngine.MagicList.Clear;
}
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
try
Query.Open;
except
Result:= -2;
end;
for i:=0 to Query.RecordCount -1 do begin
New(Magic);
Magic.wMagicId := Query.FieldByName('FLD_ID').AsInteger;
Magic.wMimicID := Query.FieldByName('FLD_MIMICID').AsInteger;
Magic.sMagicName := Trim(Query.FieldByName('FLD_NAME').AsString);
Magic.btEffectType := Query.FieldByName('FLD_EFFECTTYPE').AsInteger;
Magic.btEffect := Query.FieldByName('FLD_EFFECT').AsInteger;
Magic.wSpell := Query.FieldByName('FLD_SPELL').AsInteger;
Magic.wPower := Query.FieldByName('FLD_POWER').AsInteger;
Magic.wMaxPower := Query.FieldByName('FLD_MAXPOWER').AsInteger;
Magic.btJob := Query.FieldByName('FLD_JOB').AsInteger;
Magic.TrainLevel[0] := Query.FieldByName('FLD_NEEDL1').AsInteger;
Magic.TrainLevel[1] := Query.FieldByName('FLD_NEEDL2').AsInteger;
Magic.TrainLevel[2] := Query.FieldByName('FLD_NEEDL3').AsInteger;
Magic.TrainLevel[3] := Magic.TrainLevel[2]; //Query.FieldByName('FLD_NEEDL3').AsInteger;
Magic.MaxTrain[0] := Query.FieldByName('FLD_L1TRAIN').AsInteger;
Magic.MaxTrain[1] := Query.FieldByName('FLD_L2TRAIN').AsInteger;
Magic.MaxTrain[2] := Query.FieldByName('FLD_L3TRAIN').AsInteger;
Magic.MaxTrain[3] := Magic.MaxTrain[2];
Magic.btTrainLv := MaxSkillLevel;
Magic.dwDelayTime := Query.FieldByName('FLD_DELAY').AsInteger;
Magic.btDefSpell := Query.FieldByName('FLD_DEFSPELL').AsInteger;
Magic.btDefPower := Query.FieldByName('FLD_DEFPOWER').AsInteger;
Magic.btDefMaxPower := Query.FieldByName('FLD_DEFMAXPOWER').AsInteger;
Magic.sDescr := Trim(Query.FieldByName('FLD_DESCR').AsString);
if Magic.wMagicId > 0 then begin
UserEngine.m_MagicList.Add(Magic);
end else begin
Dispose(Magic);
end;
Result := 1;
Query.Next;
end;
finally
Query.Close;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
function TFrmDB.LoadMakeItem(): Integer; //00488CDC
var
I,n14:Integer;
s18,s20,s24:String;
LoadList:TStringList;
sFileName:String;
List28:TStringList;
begin
Result:= -1;
sFileName:=g_Config.sEnvirDir + 'MakeItem.txt';
if FileExists(sFileName) then begin
LoadList:=TStringList.Create;
LoadList.LoadFromFile(sFileName);
List28:=nil;
s24:='';
for I := 0 to LoadList.Count - 1 do begin
s18:=Trim(LoadList.Strings[I]);
if (s18 <> '') and (s18[1] <> ';') then begin
if s18[1] = '[' then begin
if List28 <> nil then
g_MakeItemList.AddObject(s24,List28);
List28:=TStringList.Create;
ArrestStringEx(s18,'[',']',s24);
end else begin
if List28 <> nil then begin
s18:=GetValidStr3(s18,s20,[' ',#9]);
n14:=Str_ToInt(Trim(s18),1);
List28.AddObject(s20,TObject(n14));
end;
end;
end;
end; // for
if List28 <> nil then
g_MakeItemList.AddObject(s24,List28);
LoadList.Free;
Result:=1;
end;
end;
function TFrmDB.LoadMapInfo: Integer;
function LoadMapQuest(sName:String):TMerchant;
var
QuestNPC:TMerchant;
begin
QuestNPC:=TMerchant.Create;
QuestNPC.m_sMapName:='0';
QuestNPC.m_nCurrX:=0;
QuestNPC.m_nCurrY:=0;
QuestNPC.m_sCharName:=sName;
QuestNPC.m_nFlag:=0;
QuestNPC.m_wAppr:=0;
QuestNPC.m_sFilePath:='MapQuest_def\';
QuestNPC.m_boIsHide:=True;
QuestNPC.m_boIsQuest:=False;
UserEngine.QuestNPCList.Add(QuestNPC);
Result:=QuestNPC;
end;
{$IFDEF UseTXT}
procedure LoadSubMapInfo(LoadList:TStringList;sFileName:String);
var
I: Integer;
sFilePatchName,sFileDir:String;
LoadMapList:TStringList;
begin
sFileDir:=g_Config.sEnvirDir + 'MapInfo\';
if not DirectoryExists(sFileDir) then begin
CreateDir(sFileDir);
end;
sFilePatchName:=sFileDir + sFileName;
if FileExists(sFilePatchName) then begin
LoadMapList:=TStringList.Create;
LoadMapList.LoadFromFile(sFilePatchName);
for I := 0 to LoadMapList.Count - 1 do begin
LoadList.Add(LoadMapList.Strings[I]);
end;
LoadMapList.Free;
end;
end;
{$ENDIF}
var
{$IFDEF UseTXT}
sFileName:String;
LoadList:TStringList;
sLineText:String;
sData,sMapNo,sMapNameLine,sMapFileName,sDMapNO,sServerIndex:String;
nSMapX,nSMapY,nDMapX,nDMapY:Integer;
sMapInfoFile:String;
{$ELSE}
nIdx: Integer;
{$ENDIF}
sCaption: String;
i:Integer;
sFlag,s34,s38,sMapName,sMapDesc,sReConnectMap:String;
nServerIndex:Integer;
MapFlag:TMapFlag;
QuestNPC:TMerchant;
{$IFNDEF UseTXT}
ResourceString
sSQLString = 'SELECT * FROM TBL_MAPINFO';
{$ENDIF}
begin
sCaption := FrmMain.Caption;
Result:= -1;
try
EnterCriticalSection(ProcessHumanCriticalSection);
{$IFDEF UseTXT}
sFileName:=g_Config.sEnvirDir + 'MapInfo.txt';
if FileExists(sFileName) then begin
LoadList:=TStringList.Create;
LoadList.LoadFromFile(sFileName);
if LoadList.Count < 0 then begin
LoadList.Free;
exit;
end;
I:=0;
while (True) do begin
if I >= LoadList.Count then break;
if CompareLStr('loadmapinfo',LoadList.Strings[I],Length('loadmapinfo')) then begin
sMapInfoFile:=GetValidStr3(LoadList.Strings[I], sLineText, [' ', #9]);
LoadList.Delete(I);
if sMapInfoFile <> '' then begin
LoadSubMapInfo(LoadList,sMapInfoFile);
end;
end;
Inc(I);
end;
Result:=1;
for i:=0 to LoadList.Count -1 do begin
sLineText:=LoadList.Strings[i];
if (sLineText <> '') and (sLineText[1] = '[') then begin
sMapName:='';
MapFlag.boSAFE:=False;
sLineText:=ArrestStringEx(sLineText,'[',']',sMapNameLine);
sMapDesc:=GetValidStrCap(sMapNameLine,sMapFileName,[' ', ',', #9]);
sMapFileName:=GetValidStr3(sMapFileName,sMapName,['|']);
if sMapFileName = '' then sMapFileName:=sMapName;
if (sMapDesc <> '') and (sMapDesc[1] = '"') then
ArrestStringEx(sMapDesc,'"','"',sMapDesc);
sServerIndex:=Trim(GetValidStr3(sMapDesc,sMapDesc,[' ', ',', #9]));
nServerIndex:=Str_ToInt(sServerIndex,0);
if sMapName = '' then Continue;
FillChar(MapFlag,SizeOf(TMapFlag),#0);
MapFlag.nL:=1;
QuestNPC:=nil;
MapFlag.nNEEDSETONFlag:= -1;
MapFlag.nNeedONOFF:= -1;
MapFlag.nMUSICID:=-1;
MapFlag.nGuildTerritory:=-1; // Sergiu
FrmMain.Caption:=sCaption + '[处理地图:'+sMapName+' ('+inttostr(I+1)+'/'+inttostr(LoadList.Count)+')';
sFlag := sLineText;
{$ELSE}
try
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
MiniMapList.Clear;
BigMapList.Clear;
try
Query.Open;
except
Result:= -2;
end;
for i:=0 to Query.RecordCount -1 do begin
sMapName := Trim(Query.FieldByName('FLD_MAPFILENAME').AsString);
sMapDesc := Trim(Query.FieldByName('FLD_MAPNAME').AsString);
sFlag := Trim(Query.FieldByName('FLD_FLAGS').AsString);
nServerIndex := Query.FieldByName('FLD_SERVERINDEX').AsInteger;
if sMapName = '' then begin
Query.Next;
Continue;
end;
FrmMain.Caption:=sCaption + '[处理地图:'+sMapName+' ('+inttostr(I+1)+'/'+inttostr(Query.RecordCount)+')';
// FrmMain.MemoLog.Lines.Add(' -> Adding Map: '+sMapName+' ('+inttostr(I+1)+'/'+inttostr(Query.RecordCount)+')');
nIdx := Query.FieldByName('FLD_MINIMAP').AsInteger;
if nIdx > 0 then
MiniMapList.AddObject(sMapName,TObject(nIdx));
nIdx := Query.FieldByName('FLD_BIGMAP').AsInteger;
if nIdx > 0 then
BigMapList.AddObject(sMapName,TObject(nIdx));
{$ENDIF}
FillChar(MapFlag,SizeOf(TMapFlag),#0);
MapFlag.nL:=1;
QuestNPC:=nil;
MapFlag.boSAFE:=False;
MapFlag.nNEEDSETONFlag:= -1;
MapFlag.nNeedONOFF:= -1;
MapFlag.nMUSICID:=-1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -