📄 localdb.pas
字号:
unit LocalDB;
interface
uses
Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls,
Forms, ActiveX,
Dialogs, M2Share, ADODB, DB, HUtil32,
Grobal2, ObjNpc, UsrEngn,mylist;
type
TDefineInfo = record
sName: string;
sText: string;
end;
pTDefineInfo = ^TDefineInfo;
TQDDinfo = record
n00: Integer;
s04: string;
sList: TStringList;
end;
pTQDDinfo = ^TQDDinfo;
TGoodFileHeader = record
nItemCount: Integer;
Resv: array[0..251] of Integer;
end;
TFrmDB = class {(TForm)}
private
procedure QMangeNPC;
procedure QFunctionNPC;
procedure MakeItemNPC;
procedure UNMakeItemNPC;
procedure RobotNPC();
procedure DeCodeStringList(StringList: TStringList);
{ Private declarations }
public
constructor Create();
destructor Destroy; override;
function LoadMonitems(MonName: string; var ItemList: TmyList): Integer;
function LoadItemsDB(): Integer;
function LoadMinMap(): Integer;
function LoadMapInfo(): Integer;
function LoadMonsterDB(): Integer;
function LoadMagicDB(): Integer;
function LoadMonGen(): Integer;
function LoadUnbindList(): Integer;
function LoadMapQuest(): Integer;
function LoadQuestDiary(): Integer;
function LoadAdminList(): Boolean;
function LoadMerchant(): Integer;
function LoadGuardList(): Integer;
function LoadNpcs(): Integer;
function LoadMakeItem(): Integer;
function LoadStartPoint(): Integer;
function LoadNpcScript(NPC: TNormNpc; sPatch, sScritpName: string): Integer;
function LoadScriptFile(NPC: TNormNpc; sPatch, sScritpName: string; boFlag:
Boolean): Integer;
function LoadGoodRecord(NPC: TMerchant; sFile: string): Integer;
function LoadGoodPriceRecord(NPC: TMerchant; sFile: string): Integer;
function LoadSellOffRecord(NPC: TMerchant; sFile: string): Integer;
function SaveSellOffRecord(NPC: TMerchant; sFile: string): Integer;
function LoadSellGoldRecord(NPC: TMerchant; sFile: string): Integer;
function SaveSellGoldRecord(NPC: TMerchant; sFile: string): Integer;
function SaveGoodRecord(NPC: TMerchant; sFile: string): Integer;
function SaveGoodPriceRecord(NPC: TMerchant; sFile: string): Integer;
function LoadUpgradeWeaponRecord(sNPCName: string; DataList: TMyList):
Integer;
function SaveUpgradeWeaponRecord(sNPCName: string; DataList: TMyList):
Integer;
procedure ReLoadMerchants();
procedure ReLoadNpc();
{ Public declarations }
end;
var
FrmDB : TFrmDB;
nDeCryptString : Integer = -1;
implementation
uses ObjBase, Envir, DataModule_Sql;
//{$R *.dfm}
{ TFrmDB }
//00487630
function TFrmDB.LoadAdminList(): Boolean;
var
sFileName : string;
sLineText : string;
sIPaddr : string;
sCharName : string;
sData : string;
LoadList : TStringList;
AdminInfo : pTAdminInfo;
i : Integer;
nLv : Integer;
begin
Result := False;
;
sFileName := g_Config.sEnvirDir + 'AdminList.txt';
if not FileExists(sFileName) then
exit;
UserEngine.m_AdminList.Lock;
try
UserEngine.m_AdminList.Clear;
LoadList := TStringList.Create;
try
LoadList.LoadFromFile(sFileName);
for i := 0 to LoadList.Count - 1 do
begin
sLineText := LoadList.Strings[i];
nLv := -1;
if (sLineText <> '') and (sLineText[1] <> ';') then
begin
if sLineText[1] = '*' then
nLv := 10
else if sLineText[1] = '1' then
nLv := 9
else if sLineText[1] = '2' then
nLv := 8
else if sLineText[1] = '3' then
nLv := 7
else if sLineText[1] = '4' then
nLv := 6
else if sLineText[1] = '5' then
nLv := 5
else if sLineText[1] = '6' then
nLv := 4
else if sLineText[1] = '7' then
nLv := 3
else if sLineText[1] = '8' then
nLv := 2
else if sLineText[1] = '9' then
nLv := 1;
if nLv > 0 then
begin
sLineText := GetValidStrCap(sLineText, sData, ['/', '\', ' ', #9]);
sLineText := GetValidStrCap(sLineText, sCharName, ['/', '\', ' ',
#9]);
// sLineText := GetValidStrCap(sLineText, sIPaddr, ['/', '\', ' ', #9]);
New(AdminInfo);
AdminInfo.nLv := nLv;
AdminInfo.sChrName := sCharName;
AdminInfo.sIPaddr:='';
// AdminInfo.m_sDbCharName := sLineText;
UserEngine.m_AdminList.Add(AdminInfo);
end;
end;
end;
finally
LoadList.Free;
End;
finally
UserEngine.m_AdminList.UnLock;
end;
Result := True;
end;
//00488A68
function TFrmDB.LoadGuardList(): Integer;
var
sFileName, s14, s1C, s20, s24, s28, s2C: string;
tGuardList : TStringList;
i : Integer;
tGuard : TBaseObject;
begin
Result := -1;
sFileName := g_Config.sEnvirDir + 'GuardList.txt';
if FileExists(sFileName) then
begin
tGuardList := TStringList.Create;
Try
tGuardList.LoadFromFile(sFileName);
for i := 0 to tGuardList.Count - 1 do
begin
s14 := tGuardList.Strings[i];
if (s14 <> '') and (s14[1] <> ';') then
begin
s14 := GetValidStrCap(s14, s1C, [' ']);
if (s1C <> '') and (s1C[1] = '"') then
ArrestStringEx(s1C, '"', '"', s1C);
s14 := GetValidStr3(s14, s20, [' ']);
s14 := GetValidStr3(s14, s24, [' ', ',']);
s14 := GetValidStr3(s14, s28, [' ', ',', ':']);
s14 := GetValidStr3(s14, s2C, [' ', ':']);
if (s1C <> '') and (s20 <> '') and (s2C <> '') then
begin
tGuard := UserEngine.RegenMonsterByName(s20, Str_ToInt(s24, 0),
Str_ToInt(s28, 0), s1C);
//sMapName,nX,nY,sName
if tGuard <> nil then
tGuard.m_btDirection := Str_ToInt(s2C, 0);
end;
end;
end;
finally
tGuardList.Free;
End;
Result := 1;
end;
end;
//004855E0
function TFrmDB.LoadItemsDB: Integer;
var
i, Idx : Integer;
StdItem : pTStdItem;
resourcestring
sSQLString = 'select * from StdItems ORDER BY Idx';
begin
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
for i := 0 to UserEngine.StdItemList.Count - 1 do
begin
DisPose(pTStdItem(UserEngine.StdItemList.Items[i]));
end;
UserEngine.StdItemList.Clear;
Result := -1;
DataModule_mir200[0].ADOQuery.SQL.Clear;
DataModule_mir200[0].ADOQuery.SQL.Add(sSQLString);
try
DataModule_mir200[0].ADOQuery.Open;
finally
Result := -2;
end;
for i := 0 to DataModule_mir200[0].ADOQuery.RecordCount - 1 do
begin
New(StdItem);
Idx := DataModule_mir200[0].ADOQuery.FieldByName('Idx').AsInteger;
StdItem.Name := DataModule_mir200[0].ADOQuery.FieldByName('Name').AsString;
StdItem.StdMode := DataModule_mir200[0].ADOQuery.FieldByName('StdMode').AsInteger;
StdItem.Shape := DataModule_mir200[0].ADOQuery.FieldByName('Shape').AsInteger;
StdItem.Weight := DataModule_mir200[0].ADOQuery.FieldByName('Weight').AsInteger;
StdItem.AniCount := DataModule_mir200[0].ADOQuery.FieldByName('AniCount').AsInteger;
StdItem.Source := DataModule_mir200[0].ADOQuery.FieldByName('Source').AsInteger;
StdItem.Reserved := DataModule_mir200[0].ADOQuery.FieldByName('Reserved').AsInteger;
StdItem.Looks := DataModule_mir200[0].ADOQuery.FieldByName('Looks').AsInteger;
StdItem.DuraMax := Word(DataModule_mir200[0].ADOQuery.FieldByName('DuraMax').AsInteger);
StdItem.AC := MakeLong(ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Ac').AsInteger *
(g_Config.nItemsACPowerRate / 10)),
ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Ac2').AsInteger * (g_Config.nItemsACPowerRate
/
10)));
StdItem.MAC := MakeLong(ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Mac').AsInteger *
(g_Config.nItemsACPowerRate / 10)),
ROUND((DataModule_mir200[0].ADOQuery.FieldByName('MAc2').AsInteger) *
(g_Config.nItemsACPowerRate
/ 10)));
StdItem.DC := MakeLong(ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Dc').AsInteger *
(g_Config.nItemsPowerRate / 10)),
ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Dc2').AsInteger * (g_Config.nItemsPowerRate /
10)));
StdItem.MC := MakeLong(ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Mc').AsInteger *
(g_Config.nItemsPowerRate / 10)),
ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Mc2').AsInteger * (g_Config.nItemsPowerRate /
10)));
StdItem.SC := MakeLong(ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Sc').AsInteger *
(g_Config.nItemsPowerRate / 10)),
ROUND(DataModule_mir200[0].ADOQuery.FieldByName('Sc2').AsInteger * (g_Config.nItemsPowerRate /
10)));
StdItem.Need := DataModule_mir200[0].ADOQuery.FieldByName('Need').AsInteger;
StdItem.NeedLevel := DataModule_mir200[0].ADOQuery.FieldByName('NeedLevel').AsInteger;
StdItem.Price := DataModule_mir200[0].ADOQuery.FieldByName('Price').AsInteger;
StdItem.NeedIdentify := GetGameLogItemNameList(StdItem.Name);
if UserEngine.StdItemList.Count = Idx then
begin
UserEngine.StdItemList.Add(StdItem);
Result := 1;
end
else
begin
Memo.Lines.Add(format('加载物品(Idx:%d Name:%s)数据失败!!!', [Idx,
StdItem.Name]));
Result := -100;
exit;
end;
DataModule_mir200[0].ADOQuery.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
DataModule_mir200[0].ADOQuery.Close;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
//00486330
function TFrmDB.LoadMagicDB(): Integer;
var
i : Integer;
Magic : pTMagic;
resourcestring
sSQLString = 'select * from Magic';
begin
Result := -1;
EnterCriticalSection(ProcessHumanCriticalSection);
try
UserEngine.SwitchMagicList();
{
for I := 0 to UserEngine.MagicList.Count - 1 do begin
Dispose(pTMagic(UserEngine.MagicList.Items[I]));
end;
UserEngine.MagicList.Clear;
}
DataModule_mir200[0].ADOQuery.SQL.Clear;
DataModule_mir200[0].ADOQuery.SQL.Add(sSQLString);
try
DataModule_mir200[0].ADOQuery.Open;
finally
Result := -2;
end;
for i := 0 to DataModule_mir200[0].ADOQuery.RecordCount - 1 do
begin
New(Magic);
Magic.wMagicId := DataModule_mir200[0].ADOQuery.FieldByName('MagId').AsInteger;
Magic.sMagicName := DataModule_mir200[0].ADOQuery.FieldByName('MagName').AsString;
Magic.btEffectType := DataModule_mir200[0].ADOQuery.FieldByName('EffectType').AsInteger;
Magic.btEffect := DataModule_mir200[0].ADOQuery.FieldByName('Effect').AsInteger;
Magic.wSpell := DataModule_mir200[0].ADOQuery.FieldByName('Spell').AsInteger;
Magic.wPower := DataModule_mir200[0].ADOQuery.FieldByName('Power').AsInteger;
Magic.wMaxPower := DataModule_mir200[0].ADOQuery.FieldByName('MaxPower').AsInteger;
Magic.btJob := DataModule_mir200[0].ADOQuery.FieldByName('Job').AsInteger;
Magic.TrainLevel[0] := DataModule_mir200[0].ADOQuery.FieldByName('NeedL1').AsInteger;
Magic.TrainLevel[1] := DataModule_mir200[0].ADOQuery.FieldByName('NeedL2').AsInteger;
Magic.TrainLevel[2] := DataModule_mir200[0].ADOQuery.FieldByName('NeedL3').AsInteger;
Magic.TrainLevel[3] := DataModule_mir200[0].ADOQuery.FieldByName('NeedL3').AsInteger;
Magic.MaxTrain[0] := DataModule_mir200[0].ADOQuery.FieldByName('L1Train').AsInteger;
Magic.MaxTrain[1] := DataModule_mir200[0].ADOQuery.FieldByName('L2Train').AsInteger;
Magic.MaxTrain[2] := DataModule_mir200[0].ADOQuery.FieldByName('L3Train').AsInteger;
Magic.MaxTrain[3] := Magic.MaxTrain[2];
Magic.btTrainLv := 3;
Magic.dwDelayTime := DataModule_mir200[0].ADOQuery.FieldByName('Delay').AsInteger;
Magic.btDefSpell := DataModule_mir200[0].ADOQuery.FieldByName('DefSpell').AsInteger;
Magic.btDefPower := DataModule_mir200[0].ADOQuery.FieldByName('DefPower').AsInteger;
Magic.btDefMaxPower := DataModule_mir200[0].ADOQuery.FieldByName('DefMaxPower').AsInteger;
Magic.sDescr := DataModule_mir200[0].ADOQuery.FieldByName('Descr').AsString;
if Magic.wMagicId > 0 then
begin
UserEngine.m_MagicList.Add(Magic);
end
else
begin
DisPose(Magic);
end;
Result := 1;
DataModule_mir200[0].ADOQuery.Next;
end;
DataModule_mir200[0].ADOQuery.Close;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
function TFrmDB.LoadMakeItem(): Integer; //00488CDC
var
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -