亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? localdb.pas

?? FIR引擎最新源碼+注冊(cè)
?? PAS
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
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, UsrEngn, PlugIn;

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 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 LoadMapQuest(): Integer;
    function LoadQuestDiary(): Integer;
    function LoadAdminList(): Boolean;
    function LoadMerchant(): Integer;
    function LoadGuardList(): Integer;
    function LoadNpcs(): Integer;
    procedure QMangeNPC;
    procedure QFunctionNPC;
    procedure RobotNPC();

    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 LoadMapEvent(): Integer;
    { Public declarations }
  end;

var
  FrmDB: TFrmDB;
implementation

uses ObjBase, Envir;
//{$R *.dfm}
{ TFrmDB }
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;

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)數(shù)據(jù)失敗!!!', [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;

function TFrmDB.LoadMagicDB(): Integer;
var
  I: Integer;
  Magic, OldMagic: pTMagic;
  OldMagicList: TList;
resourcestring
  sSQLString = 'select * from Magic';
begin
  Result := -1;
  EnterCriticalSection(ProcessHumanCriticalSection);
  try
    UserEngine.SwitchMagicList();
    for I := 0 to UserEngine.m_MagicList.Count - 1 do begin
      Dispose(pTMagic(UserEngine.m_MagicList.Items[I]));
    end;
    UserEngine.m_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;
    if UserEngine.OldMagicList.Count > 0 then begin
      OldMagicList := TList(UserEngine.OldMagicList.Items[UserEngine.OldMagicList.Count - 1]);
      for I := 0 to OldMagicList.Count - 1 do begin
        OldMagic := pTMagic(OldMagicList.Items[I]);
        if OldMagic.wMagicId >= 100 then begin
          New(Magic);
          Magic.wMagicId := OldMagic.wMagicId;
          Magic.sMagicName := OldMagic.sMagicName;
          Magic.btEffectType := OldMagic.btEffectType;
          Magic.btEffect := OldMagic.btEffect;
          //Magic.bt11 := OldMagic.bt11;
          Magic.wSpell := OldMagic.wSpell;
          Magic.wPower := OldMagic.wPower;
          Magic.TrainLevel := OldMagic.TrainLevel;
          //Magic.w02 := OldMagic.w02;
          Magic.MaxTrain := OldMagic.MaxTrain;
          Magic.btTrainLv := OldMagic.btTrainLv;
          Magic.btJob := OldMagic.btJob;
          //Magic.wMagicIdx := OldMagic.wMagicIdx;
          Magic.dwDelayTime := OldMagic.dwDelayTime;
          Magic.btDefSpell := OldMagic.btDefSpell;
          Magic.btDefPower := OldMagic.btDefPower;
          Magic.wMaxPower := OldMagic.wMaxPower;
          Magic.btDefMaxPower := OldMagic.btDefMaxPower;
          Magic.sDescr := OldMagic.sDescr;
          UserEngine.m_MagicList.Add(Magic);
        end;
      end;
      UserEngine.m_boStartLoadMagic := False;
      { for i := 0 to OldMagicList.Count - 1 do begin
         DisPose(pTMagic(OldMagicList.Items[i]));
       end;
       OldMagicList.Free;
       UserEngine.OldMagicList.Clear;  }
    end;
    UserEngine.m_boStartLoadMagic := False;
  finally
    LeaveCriticalSection(ProcessHumanCriticalSection);
  end;
end;

function TFrmDB.LoadMakeItem(): Integer;
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);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人91精品二区三区| 首页亚洲欧美制服丝腿| 在线观看欧美日本| 精品中文字幕一区二区| 国产精品大尺度| 91精品婷婷国产综合久久性色 | 欧美无乱码久久久免费午夜一区| 日韩福利视频网| 国产精品国产三级国产aⅴ入口| 欧美男人的天堂一二区| 成人三级伦理片| 美日韩一区二区三区| 亚洲精品菠萝久久久久久久| 欧美精品一区二区在线观看| 欧美日韩一区三区四区| jlzzjlzz国产精品久久| 国内欧美视频一区二区 | 国产大陆精品国产| 亚洲一区二区中文在线| 中文字幕第一区第二区| 欧美一级黄色大片| 欧美性猛片xxxx免费看久爱| 丰满白嫩尤物一区二区| 老汉av免费一区二区三区| 亚洲午夜激情av| 亚洲欧美一区二区视频| 国产日产欧美一区| 久久人人97超碰com| 91精品国产综合久久久久久漫画 | 国产欧美日韩中文久久| 日韩午夜精品视频| 欧美精品一级二级三级| 欧美视频在线播放| 欧美在线一二三| 色哟哟一区二区| av中文字幕一区| 成人久久视频在线观看| 国产精品一色哟哟哟| 激情综合色播五月| 精品午夜久久福利影院| 久草中文综合在线| 久久av资源网| 蜜臀av一区二区在线免费观看| 丝袜a∨在线一区二区三区不卡| 一区二区三区视频在线看| 亚洲人成7777| 一区二区三区在线视频观看58| 中文字幕日韩一区| 亚洲同性gay激情无套| 亚洲色图清纯唯美| 亚洲激情av在线| 亚洲国产综合人成综合网站| 午夜久久久久久久久| 天天免费综合色| 免费一级片91| 国产又粗又猛又爽又黄91精品| 激情综合色综合久久综合| 国产乱码精品1区2区3区| 国产999精品久久久久久绿帽| 国产剧情一区二区三区| 成人av资源网站| 日本道在线观看一区二区| 在线观看成人免费视频| 欧美日韩国产免费| 欧美不卡视频一区| 久久精品男人的天堂| 中文字幕一区二区视频| 亚洲综合激情小说| 日本人妖一区二区| 国产一本一道久久香蕉| 精品理论电影在线观看| 国产欧美一区在线| 亚洲乱码国产乱码精品精98午夜| 一区二区三区蜜桃网| 蜜臂av日日欢夜夜爽一区| 国产精品白丝jk白祙喷水网站| 成人激情电影免费在线观看| 99精品黄色片免费大全| 欧美人成免费网站| 久久综合九色综合97_久久久| 日本一区二区三区免费乱视频| 中文子幕无线码一区tr| 亚洲一区二区在线免费观看视频| 日本不卡高清视频| 成人av网站在线观看| 欧美日韩一级视频| 国产欧美精品一区二区色综合| 亚洲美女一区二区三区| 麻豆精品在线看| 99re热视频这里只精品| 这里是久久伊人| 国产精品久久久久久久久果冻传媒| 亚洲一区日韩精品中文字幕| 国产美女精品人人做人人爽| 色久优优欧美色久优优| 精品久久久网站| 亚洲国产精品一区二区久久 | av激情成人网| 日韩精品最新网址| 有码一区二区三区| 国产激情视频一区二区三区欧美 | 国产成人av一区二区三区在线| 在线观看一区二区视频| 国产偷国产偷亚洲高清人白洁| 亚洲超碰97人人做人人爱| 成熟亚洲日本毛茸茸凸凹| 5月丁香婷婷综合| 亚洲丝袜制服诱惑| 国产福利视频一区二区三区| 欧美日韩国产在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 91啪亚洲精品| 国产欧美一区二区精品婷婷| 日韩国产欧美视频| 欧洲生活片亚洲生活在线观看| 日本一区二区三区四区| 久久国产日韩欧美精品| 欧美日本在线一区| 亚洲欧美国产高清| 成人h版在线观看| 久久嫩草精品久久久久| 久久精工是国产品牌吗| 欧美日韩午夜在线视频| 亚洲精品久久久久久国产精华液| 国产麻豆精品视频| 欧美mv日韩mv| 热久久久久久久| 欧美日韩国产一级二级| 一区二区三区视频在线观看| 99在线精品视频| 国产精品欧美久久久久一区二区| 国产一区在线看| 欧美xingq一区二区| 蜜桃视频一区二区三区| 欧美人妖巨大在线| 亚洲一区二区综合| 欧美日韩一区二区三区在线| 亚洲一区二区五区| 欧美午夜一区二区三区 | 亚洲久草在线视频| 91免费观看国产| 一区二区三区日韩| 欧美中文字幕不卡| 亚洲韩国精品一区| 亚洲欧美综合网| 99国产欧美另类久久久精品| 中文字幕一区二区在线观看| 99久久精品免费精品国产| 一区在线观看视频| 一本久久综合亚洲鲁鲁五月天 | 蜜臀精品一区二区三区在线观看| 欧美一区二区三区免费观看视频 | 欧美日韩国产成人在线91| 天涯成人国产亚洲精品一区av| 欧美日本韩国一区| 日本在线播放一区二区三区| 日韩女同互慰一区二区| 国产美女在线精品| 亚洲欧洲在线观看av| 色成人在线视频| 视频一区二区国产| 精品国产123| 成人av网在线| 亚洲色图欧美偷拍| 5566中文字幕一区二区电影| 经典一区二区三区| 国产精品超碰97尤物18| 欧美色精品在线视频| 久久精品国产**网站演员| 日本一区二区免费在线观看视频| 99国产精品久| 日韩电影在线观看电影| 久久久精品影视| 色系网站成人免费| 免费视频最近日韩| 国产精品久久国产精麻豆99网站| 欧洲国内综合视频| 国产麻豆成人精品| 亚洲精品免费视频| 欧美电影免费提供在线观看| 成人黄色在线看| 91视频国产资源| 美女性感视频久久| 亚洲欧洲精品天堂一级| 91麻豆精品国产91久久久久| 成人亚洲精品久久久久软件| 一卡二卡三卡日韩欧美| 亚洲精品一区在线观看| 粉嫩av一区二区三区| 日欧美一区二区| 国产精品人妖ts系列视频| 91精品婷婷国产综合久久竹菊| 国产不卡视频一区| 丝袜美腿成人在线| 亚洲欧美一区二区三区孕妇| 精品久久人人做人人爱| 欧美色视频一区| 成人免费电影视频| 久久成人免费网站| 亚洲综合成人在线|