📄 localdb.pas
字号:
unit LocalDB;
// If you get an error on the next line, you need to reextract SourceFiles.rar
{$I defines.inc}
interface
uses
svn, nixtime, Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls, Forms, ActiveX, ExtCtrls,
Dialogs, GuildTerritory, M2Share, ADODB, DB, HUtil32, Grobal2, SDK, ObjNpc, ItmUnit, DateUtils, EDcode,ObjBase, math;
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
private
LastSQLTime: LongInt;
procedure QMangeNPC;
procedure QFunctionNPC;
procedure RobotNPC();
procedure DeCodeStringList(StringList:TStringList);
{ Private declarations }
public
SQLTimer: TTimer;
Query: TADOQuery;
QueryCommand: TADOCommand;
// SQLDBM: TADOQuery;
constructor Create();
destructor Destroy; override;
procedure InitDBM();
procedure DoSQLTimer(Sender: TObject);
procedure UseSQL();
function GetBoolean(MyQuery: TADOQuery; Field: String): boolean;
function LoadMonitems(MonName:String;var ItemList:TList):Integer;
function LoadItemsDB():Integer;
{$IFDEF UseTXT}
function LoadMinMap():Integer;
function LoadBigMap():Integer;
{$ELSE}
function LoadMapRoute():Integer;
{$ENDIF}
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 SaveGoodRecord(NPC:TMerchant;sFile:String):Integer;
function SaveGoodPriceRecord(NPC:TMerchant;sFile:String):Integer;
function LoadUpgradeWeaponRecord(sNPCName:String;DataList:TList):Integer;
function SaveUpgradeWeaponRecord(sNPCName:String;DataList:TList):Integer;
procedure ReLoadMerchants();
procedure ReLoadNpc();
function ConsignItem(Useritem: pTUserItem; Cost: String; Name: string): boolean;
procedure GetAuctionItems(Section: integer; CurrPage: Integer; SearchString: String; PlayObject: TPlayObject);
procedure BuyAuctionItem(PlayObject: TPlayObject; AuctionID: Integer);
procedure EndOfAuction(PlayObject: TPlayObject; AuctionID: Integer);
function SaveAdminList():Boolean;
procedure LoadGT(Number,ListNumber:Integer);
procedure LoadGTDecorations(GT:TTerritory);
procedure SaveGT(GT:TTerritory);
procedure SetupGT(GT:TTerritory);
procedure SaveDeco(looks,GTNumber:Byte;x,y:integer;mapname:String; starttime:dword);
procedure DeleteDeco(GTNumber:Byte; x,y: integer; mapname:String);
function LoadDecorationList():Integer;
function LoadGameShopItemList(PageCount:integer): TList;
function LoadBBSMsgList(GuildName:String;PageCount:integer):TList;
function LoadBBSMsg(Index:integer):pTBBSMSGL;
procedure SaveBBSMsg(BBSMSGL:pTBBSMSGL;GuildName:String);
procedure DeleteBBSMsg(index:integer);
function LoadMapEvent(): Integer;
// function LoadShopItemList(): Integer;
end;
var
FrmDB: TFrmDB;
nDeCryptString:Integer= -1;
implementation
uses
Envir, svMain;
{ 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;
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]);
//{$IF VEROWNER = WL}
// if (sCharName <= '') or (sIPaddr = '') then Continue;
//{$IFEND}
New(AdminInfo);
AdminInfo.nLv := nLv;
AdminInfo.sChrName := sCharName;
AdminInfo.sIPaddr := sIPaddr;
UserEngine.m_AdminList.Add(AdminInfo);
end;
end;
end;
LoadList.Free;
finally
UserEngine.m_AdminList.UnLock;
end;
Result:=True;
end;
{
function TFrmDB.LoadAdminList():Boolean;
var
i:Integer;
AdminInfo :pTAdminInfo;
ResourceString
sSQLString = 'SELECT * FROM TBL_ADMIN';
begin
Result:=False;
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
try
Query.Open;
except
end;
UserEngine.m_AdminList.Lock;
try
UserEngine.m_AdminList.Clear;
for i:=0 to Query.RecordCount -1 do begin
New(AdminInfo);
AdminInfo.nLv := Query.FieldByName('FLD_ADMINLEVEL').AsInteger;
AdminInfo.sChrName := Query.FieldByName('FLD_PLAYERNAME').AsString;
AdminInfo.sIPaddr := Query.FieldByName('FLD_IP').AsString;
UserEngine.m_AdminList.Add(AdminInfo);
Query.Next;
end;
finally
UserEngine.m_AdminList.UnLock;
end;
finally
Query.Close;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
Result:=True;
end; }
function TFrmDB.SaveAdminList():Boolean;
var
I :Integer;
sFileName :String;
SaveList :TStringList;
sPerMission :String;
nPerMission :Integer;
AdminInfo :pTAdminInfo;
begin
sFileName := g_Config.sEnvirDir + 'AdminList.txt';
SaveList := TStringList.Create;
UserEngine.m_AdminList.Lock;
try
for I := 0 to UserEngine.m_AdminList.Count - 1 do begin
AdminInfo:=pTAdminInfo(UserEngine.m_AdminList.Items[I]);
nPerMission:=AdminInfo.nLv;
if nPerMission = 10 then sPerMission:='*';
if nPerMission = 9 then sPerMission:='1';
if nPerMission = 8 then sPerMission:='2';
if nPerMission = 7 then sPerMission:='3';
if nPerMission = 6 then sPerMission:='4';
if nPerMission = 5 then sPerMission:='5';
if nPerMission = 4 then sPerMission:='6';
if nPerMission = 3 then sPerMission:='7';
if nPerMission = 2 then sPerMission:='8';
if nPerMission = 1 then sPerMission:='9';
//{$IF VEROWNER = WL}
// SaveList.Add(sPerMission + #9 + AdminInfo.sChrName + #9 + AdminInfo.sIPaddr);
//{$ELSE}
SaveList.Add(sPerMission + #9 + AdminInfo.sChrName);
//{$IFEND}
end;
SaveList.SaveToFile(sFileName);
finally
UserEngine.m_AdminList.UnLock;
end;
Result:=True;
end;
{
function TFrmDB.SaveAdminList():Boolean;
var
i:Integer;
AdminInfo :pTAdminInfo;
ResourceString
sSQLString = 'DELETE * FROM TBL_ADMIN';
sSQLString2= 'INSERT INTO TBL_ADMIN(FLD_ADMINLEVEL, FLD_PLAYERNAME, FLD_IP) VALUES( %d, ''%s'', ''%s'' )';
begin
Result:=False;
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
try
Query.ExecSQL;
except
end;
try
UserEngine.m_AdminList.Lock;
Query.SQL.Clear;
for I := 0 to UserEngine.m_AdminList.Count - 1 do begin
AdminInfo:=pTAdminInfo(UserEngine.m_AdminList.Items[I]);
Query.Close;
Query.SQL.Text:=Format(sSQLString2, [AdminInfo.nLv, AdminInfo.sChrName, AdminInfo.sIPaddr]);
if (Query.ExecSQL<=0) then begin
Break;
end;
end;
finally
UserEngine.m_AdminList.UnLock;
end;
finally
Query.Close;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
Result:=True;
end; }
//00488A68
function TFrmDB.LoadGuardList(): Integer;
{$IFDEF UseTXT}
var
sFileName,s14,s1C,s20,s24,s28,s2C:String;
tGuardList:TStringList;
i:Integer;
tGuard :TBaseObject;
begin
EnterCriticalSection(ProcessHumanCriticalSection);
try
Result:= -1;
sFileName:=g_Config.sEnvirDir + 'GuardList.txt';
if FileExists(sFileName) then begin
tGuardList:=TStringList.Create;
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;
tGuardList.Free;
Result:=1;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
{$ELSE}
var
i,nX,nY,nDir:Integer;
sGuardName,sMap:String;
tGuard:TBaseObject;
ResourceString
sSQLString = 'SELECT * FROM TBL_GUARD';
begin
EnterCriticalSection(ProcessHumanCriticalSection);
try
try
Result := -1;
UseSQL();
Query.SQL.Clear;
Query.SQL.Add(sSQLString);
try
Query.Open;
except
Result:= -2;
end;
for i:=0 to Query.RecordCount -1 do begin
sGuardName := Query.FieldByName('FLD_GUARDNAME').AsString;
sMap := Query.FieldByName('FLD_MAPNAME').AsString;
nX := Query.FieldByName('FLD_X').AsInteger;
nY := Query.FieldByName('FLD_Y').AsInteger;
nDir := Query.FieldByName('FLD_DIRECTION').AsInteger;
if (sGuardName <> '') and (sMap <> '') then begin
tGuard:=UserEngine.RegenMonsterByName(sMap,nX,nY,sGuardName);
//sMapName,nX,nY,sName
if tGuard <> nil then tGuard.m_btDirection:=nDir;
end;
Result := 1;
Query.Next;
end;
finally
Query.Close;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -