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

📄 localdb.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
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 + -