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

📄 localdb.~pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
unit LocalDB;

interface

uses
  Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls, Forms,ActiveX,
  Dialogs, M2Share,{$IF DBTYPE = BDE}DBTables{$ELSE} ADODB{$IFEND},DB,HUtil32, Grobal2,SDK, ObjNpc,_Function;


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 QSHOPNPC;
    procedure RobotNPC();
    procedure DeCodeStringList(StringList:TStringList);
    { Private declarations }
  public
{$IF DBTYPE = BDE}
    Query: TQuery;
{$ELSE}
    Query: TADOQuery;
{$IFEND}
    constructor Create();
    destructor Destroy; override;
    function LoadMonitems(MonName:String;var ItemList:TList):Integer;
    function LoadItemsDB():Integer;
    function LoadMinMap():Integer;
    function LoadMapInfo():Integer;
    function LoadMonsterDB():Integer;
    function LoadMagicDB():Integer;
    function LoadMonGen():Integer;
    function LoadUnbindList():Integer;
    function LoadbindList():Integer;
    procedure QMangeNPC;
    procedure QFunctionNPC;
    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();
    { Public declarations }
  end;
  
var
  FrmDB: TFrmDB;
  nDeCryptString:Integer= -1;
implementation

uses ObjBase, Envir,edcode;


//{$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;
      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;
//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;
      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;
end;
//004855E0
function TFrmDB.LoadItemsDB: Integer;
var
  i,Idx:Integer;
  StdItem:pTStdItem;
ResourceString
  sSQLString = 'select * from StdItems';
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;
    Query.SQL.Clear;
    Query.SQL.Add(sSQLString);
    try
      Query.Open;
    finally
      Result:= -2;
    end;
    for i:=0 to Query.RecordCount -1 do begin
      New(StdItem);
      Idx            := Query.FieldByName('Idx').AsInteger;
      StdItem.Name      := Query.FieldByName('Name').AsString;
      StdItem.StdMode   := Query.FieldByName('StdMode').AsInteger;
      StdItem.Shape     := Query.FieldByName('Shape').AsInteger;
      StdItem.Weight    := Query.FieldByName('Weight').AsInteger;
      StdItem.AniCount  := Query.FieldByName('AniCount').AsInteger;
      StdItem.Source    := Query.FieldByName('Source').AsInteger;
      StdItem.Reserved  := Query.FieldByName('Reserved').AsInteger;
      StdItem.Looks     := Query.FieldByName('Looks').AsInteger;
      StdItem.DuraMax   := Word(Query.FieldByName('DuraMax').AsInteger);
      StdItem.AC        := MakeLong(ROUND(Query.FieldByName('Ac').AsInteger * (g_Config.nItemsACPowerRate / 10)),ROUND(Query.FieldByName('Ac2').AsInteger * (g_Config.nItemsACPowerRate / 10)));
      StdItem.MAC       := MakeLong(ROUND(Query.FieldByName('Mac').AsInteger * (g_Config.nItemsACPowerRate / 10)),ROUND(Query.FieldByName('MAc2').AsInteger * (g_Config.nItemsACPowerRate / 10)));
      StdItem.DC        := MakeLong(ROUND(Query.FieldByName('Dc').AsInteger * (g_Config.nItemsPowerRate / 10)),ROUND(Query.FieldByName('Dc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
      StdItem.MC        := MakeLong(ROUND(Query.FieldByName('Mc').AsInteger * (g_Config.nItemsPowerRate / 10)),ROUND(Query.FieldByName('Mc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
      StdItem.SC        := MakeLong(ROUND(Query.FieldByName('Sc').AsInteger * (g_Config.nItemsPowerRate / 10)),ROUND(Query.FieldByName('Sc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
      StdItem.Need      := Query.FieldByName('Need').AsInteger;
      StdItem.NeedLevel := Query.FieldByName('NeedLevel').AsInteger;
      StdItem.Price     := Query.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;
      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 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;
    }

    Query.SQL.Clear;
    Query.SQL.Add(sSQLString);
    try
      Query.Open;
    finally
      Result:= -2;
    end;
    for i:=0 to Query.RecordCount -1 do begin
      New(Magic);
      Magic.wMagicId      := Query.FieldByName('MagId').AsInteger;
      Magic.sMagicName    := Query.FieldByName('MagName').AsString;
      Magic.btEffectType  := Query.FieldByName('EffectType').AsInteger;
      Magic.btEffect      := Query.FieldByName('Effect').AsInteger;
      Magic.wSpell        := Query.FieldByName('Spell').AsInteger;
      Magic.wPower        := Query.FieldByName('Power').AsInteger;
      Magic.wMaxPower     := Query.FieldByName('MaxPower').AsInteger;
      Magic.btJob         := Query.FieldByName('Job').AsInteger;
      Magic.TrainLevel[0] := Query.FieldByName('NeedL1').AsInteger;
      Magic.TrainLevel[1] := Query.FieldByName('NeedL2').AsInteger;
      Magic.TrainLevel[2] := Query.FieldByName('NeedL3').AsInteger;
      Magic.TrainLevel[3] := Query.FieldByName('NeedL3').AsInteger;
      Magic.MaxTrain[0]   := Query.FieldByName('L1Train').AsInteger;
      Magic.MaxTrain[1]   := Query.FieldByName('L2Train').AsInteger;
      Magic.MaxTrain[2]   := Query.FieldByName('L3Train').AsInteger;
      Magic.MaxTrain[3]   := Magic.MaxTrain[2];
      Magic.btTrainLv     := 3;
      Magic.dwDelayTime   := Query.FieldByName('Delay').AsInteger;
      Magic.btDefSpell    := Query.FieldByName('DefSpell').AsInteger;
      Magic.btDefPower    := Query.FieldByName('DefPower').AsInteger;
      Magic.btDefMaxPower := Query.FieldByName('DefMaxPower').AsInteger;
      Magic.sDescr        := Query.FieldByName('Descr').AsString;
      if Magic.wMagicId > 0 then begin
        UserEngine.m_MagicList.Add(Magic);
      end else begin
        Dispose(Magic);
      end;
      Result := 1;
      Query.Next;
    end;
    Query.Close;
  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;
//00486D1C
function TFrmDB.LoadMapInfo: Integer;
  //00486C1C
  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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -