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

📄 localdb.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit LocalDB;

interface

uses
  Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls, Forms,ActiveX,
  Dialogs, M2Share, DB, HUtil32, Grobal2, SDK, ObjNpc, ItmUnit, DBTABLES;


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 RobotNPC();
    procedure DeCodeStringList(StringList:TStringList);
    { Private declarations }
  public
    Query: TQuery;
    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 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 SaveAdminList():Boolean;
    { Public declarations }
  end;
  
var
  FrmDB: TFrmDB;
  nDeCryptString:Integer= -1;
implementation

uses ObjBase, Envir;


//{$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.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;


//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;
  Item: TItem;
resourcestring
  sSQLString = 'SELECT * FROM STDITEMS';
begin
  EnterCriticalSection(ProcessHumanCriticalSection);
  try
    try
      for i := 0 to UserEngine.StdItemList.Count - 1 do
      begin
        TItem(UserEngine.StdItemList.Items[i]).Free;
      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
        Item := TItem.Create;
        Idx := Query.FieldByName('IDX').AsInteger;
        Item.Name := Query.FieldByName('NAME').AsString;
        Item.StdMode := Query.FieldByName('STDMode').AsInteger;
        Item.Shape := Query.FieldByName('SHAPE').AsInteger;
        Item.Weight := Query.FieldByName('WEIGHT').AsInteger;
        Item.AniCount := Query.FieldByName('ANICOUNT').AsInteger;
        Item.Source := Query.FieldByName('SOURCE').AsInteger;
        Item.Reserved := Query.FieldByName('RESERVED').AsInteger;
        Item.Looks := Query.FieldByName('Looks').AsInteger;
        Item.DuraMax := Word(Query.FieldByName('DURAMAX').AsInteger);
        Item.AC := Round(Query.FieldByName('AC').AsInteger * (g_Config.nItemsACPowerRate / 10));
        Item.AC2 := Round(Query.FieldByName('AC2').AsInteger * (g_Config.nItemsACPowerRate / 10));
        Item.MAC := Round(Query.FieldByName('MAC').AsInteger * (g_Config.nItemsACPowerRate / 10));
        Item.MAC2 := Round(Query.FieldByName('MAC2').AsInteger * (g_Config.nItemsACPowerRate / 10));
        Item.DC := Round(Query.FieldByName('DC').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.DC2 := Round(Query.FieldByName('DC2').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.MC := Round(Query.FieldByName('MC').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.MC2 := Round(Query.FieldByName('MC2').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.SC := Round(Query.FieldByName('SC').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.SC2 := Round(Query.FieldByName('SC2').AsInteger * (g_Config.nItemsPowerRate / 10));
        Item.Need := Query.FieldByName('NEED').AsInteger;
        Item.NeedLevel := Query.FieldByName('NEEDLEVEL').AsInteger;
        Item.Price := Query.FieldByName('PRICE').AsInteger;
       // Item.Unique := Query.FieldByName('UNIQUEITEM').AsBoolean;
       // Item.Light:= Query.FieldByName('LIGHT').AsBoolean;
        Item.stock := Query.FieldByName('stock').AsInteger;


        Item.NeedIdentify := GetGameLogItemNameList(Item.Name);

        case Item.StdMode of
          5, 6: Item.ItemType := ITEM_WEAPON;
          10, 11: Item.ItemType := ITEM_ARMOR;
          15, 19, 20, 21, 22, 23, 24, 26, 51, 52, 53, 54, 62, 63, 64: Item.ItemType := ITEM_ACCESSORY;
        else Item.ItemType := ITEM_ETC;
        end;

        if UserEngine.StdItemList.Count = Idx then
        begin
          UserEngine.StdItemList.Add(Item);
          Result := 1;
        end else
        begin
          Memo.Lines.Add(Format('加载物品(Idx:%d Name:%s)数据失败!!!', [Idx, Item.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;

⌨️ 快捷键说明

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