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

📄 localdb.pas

📁 传奇源代码的delphi版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
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 + -