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

📄 localdb.pas

📁 传奇源代码的delphi版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  finally
    LeaveCriticalSection(ProcessHumanCriticalSection);
  end;
{$ENDIF}
end;
//004855E0
function TFrmDB.LoadItemsDB: Integer;
var
  i,Idx:Integer;
  Item:TItem;
ResourceString
  sSQLString = 'SELECT * FROM TBL_STDITEMS ORDER BY FLD_ID';
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;
    UseSQL();
    Query.SQL.Clear;
    Query.SQL.Add(sSQLString);
    try
      Query.Open;
    except
      Result:= -2;
    end;
    if Query.RecordCount = 0 then Result := -3;
    for i:=0 to Query.RecordCount -1 do begin
      Item := TItem.Create;
      Idx            := Query.FieldByName('FLD_ID').AsInteger;
      Item.Name      := Query.FieldByName('FLD_NAME').AsString;
      Item.StdMode   := Query.FieldByName('FLD_STDMode').AsInteger;
      Item.Shape     := Query.FieldByName('FLD_SHAPE').AsInteger;
      Item.Weight    := Query.FieldByName('FLD_WEIGHT').AsInteger;
      Item.AniCount  := Query.FieldByName('FLD_ANICOUNT').AsInteger;
      Item.Source    := Query.FieldByName('FLD_SOURCE').AsInteger;
      Item.Reserved  := Query.FieldByName('FLD_RESERVED').AsInteger;
      Item.Looks     := Query.FieldByName('FLD_IMGINDEX').AsInteger;
      Item.DuraMax   := Word(Query.FieldByName('FLD_DURAMAX').AsInteger);
      Item.AC        := ROUND(Query.FieldByName('FLD_AC').AsInteger * (g_Config.nItemsACPowerRate / 10));
      Item.AC2       := ROUND(Query.FieldByName('FLD_ACMAX').AsInteger * (g_Config.nItemsACPowerRate / 10));
      Item.MAC       := ROUND(Query.FieldByName('FLD_MAC').AsInteger * (g_Config.nItemsACPowerRate / 10));
      Item.MAC2      := ROUND(Query.FieldByName('FLD_MACMAX').AsInteger * (g_Config.nItemsACPowerRate / 10));
      Item.DC        := ROUND(Query.FieldByName('FLD_DC').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.DC2       := ROUND(Query.FieldByName('FLD_DCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.MC        := ROUND(Query.FieldByName('FLD_MC').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.MC2       := ROUND(Query.FieldByName('FLD_MCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.SC        := ROUND(Query.FieldByName('FLD_SC').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.SC2       := ROUND(Query.FieldByName('FLD_SCMAX').AsInteger * (g_Config.nItemsPowerRate / 10));
      Item.Need      := Query.FieldByName('FLD_NEED').AsInteger;
      Item.NeedLevel := Query.FieldByName('FLD_NEEDLEVEL').AsInteger;
      Item.Price     := Query.FieldByName('FLD_PRICE').AsInteger;
      Item.Unique    := Query.FieldByName('FLD_UNIQUEITEM').AsBoolean;
      Item.Light     := Query.FieldByName('FLD_LIGHT').AsInteger;
      Item.Tox       := Query.FieldByName('FLD_TOX').AsInteger;
      Item.ToxAvoid  := Query.FieldByName('FLD_TOXAVOID').AsInteger;
      Item.SlowDown  := Query.FieldByName('FLD_SLOWDOWN').AsInteger;
      Item.MagAvoid  := Query.FieldByName('FLD_MGAVOID').AsInteger;
      Item.HpAdd     := Query.FieldByName('FLD_HPADD').AsInteger;
      Item.MpAdd     := Query.FieldByName('FLD_MPADD').AsInteger;
      Item.boCanTrade := Query.FieldByName('FLD_CanTrade').AsBoolean;
      Item.boCanDrop  := Query.FieldByName('FLD_CanDrop').AsBoolean;
      Item.boCanDeathDrop := Query.FieldByName('FLD_CanDeathDrop').AsBoolean;
      Item.boCanRepair    := Query.FieldByName('FLD_CanRepair').AsBoolean;
      Item.boCanSpecialRepair := Query.FieldByName('FLD_CanSpecialRepair').AsBoolean;
      Item.boCanStore         := Query.FieldByName('FLD_CanStore').AsBoolean;
      Item.boCanSell          := Query.FieldByName('FLD_CanSell').AsBoolean;
      Item.boVanishDrop       := Query.FieldByName('FLD_VanishDrop').AsBoolean;
      Item.NeedIdentify :=GetGameLogItemNameList(Item.Name);

      if Item.StdMode = 48 then
        g_Config.sGTDeco:=Item.Name;//set the name of the gt decoration base item
      case Item.StdMode of
        5,6: Item.ItemType := ITEM_WEAPON;
        10,11,12: Item.ItemType := ITEM_ARMOR;
        15,19,20,21,22,23,24,26,62,63,64: Item.ItemType := ITEM_ACCESSORY;
        else Item.ItemType := ITEM_ETC;
      end;
      if UserEngine.StdItemList.Count = Idx-1 then begin
        UserEngine.StdItemList.Add(Item);
        Result := 1;
      end else begin
        Memo.Lines.Add(format('Error: Invalid Index found(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 TBL_MAGIC ORDER BY FLD_ID';
begin
  Result:= -1;
  EnterCriticalSection(ProcessHumanCriticalSection);
  try
  try
    UserEngine.SwitchMagicList();
    {
    for I := 0 to UserEngine.MagicList.Count - 1 do begin
      Dispose(pTMagic(UserEngine.MagicList.Items[I]));
    end;
    UserEngine.MagicList.Clear;
    }

    UseSQL();
    Query.SQL.Clear;
    Query.SQL.Add(sSQLString);
    try
      Query.Open;
    except
      Result:= -2;
    end;
    for i:=0 to Query.RecordCount -1 do begin
      New(Magic);
      Magic.wMagicId      := Query.FieldByName('FLD_ID').AsInteger;
      Magic.wMimicID      := Query.FieldByName('FLD_MIMICID').AsInteger;
      Magic.sMagicName    := Trim(Query.FieldByName('FLD_NAME').AsString);
      Magic.btEffectType  := Query.FieldByName('FLD_EFFECTTYPE').AsInteger;
      Magic.btEffect      := Query.FieldByName('FLD_EFFECT').AsInteger;
      Magic.wSpell        := Query.FieldByName('FLD_SPELL').AsInteger;
      Magic.wPower        := Query.FieldByName('FLD_POWER').AsInteger;
      Magic.wMaxPower     := Query.FieldByName('FLD_MAXPOWER').AsInteger;
      Magic.btJob         := Query.FieldByName('FLD_JOB').AsInteger;
      Magic.TrainLevel[0] := Query.FieldByName('FLD_NEEDL1').AsInteger;
      Magic.TrainLevel[1] := Query.FieldByName('FLD_NEEDL2').AsInteger;
      Magic.TrainLevel[2] := Query.FieldByName('FLD_NEEDL3').AsInteger;
      Magic.TrainLevel[3] := Magic.TrainLevel[2]; //Query.FieldByName('FLD_NEEDL3').AsInteger;
      Magic.MaxTrain[0]   := Query.FieldByName('FLD_L1TRAIN').AsInteger;
      Magic.MaxTrain[1]   := Query.FieldByName('FLD_L2TRAIN').AsInteger;
      Magic.MaxTrain[2]   := Query.FieldByName('FLD_L3TRAIN').AsInteger;
      Magic.MaxTrain[3]   := Magic.MaxTrain[2];
      Magic.btTrainLv     := MaxSkillLevel;
      Magic.dwDelayTime   := Query.FieldByName('FLD_DELAY').AsInteger;
      Magic.btDefSpell    := Query.FieldByName('FLD_DEFSPELL').AsInteger;
      Magic.btDefPower    := Query.FieldByName('FLD_DEFPOWER').AsInteger;
      Magic.btDefMaxPower := Query.FieldByName('FLD_DEFMAXPOWER').AsInteger;
      Magic.sDescr        := Trim(Query.FieldByName('FLD_DESCR').AsString);
      if Magic.wMagicId > 0 then begin
        UserEngine.m_MagicList.Add(Magic);
      end else begin
        Dispose(Magic);
      end;
      Result := 1;
      Query.Next;
    end;
  finally
    Query.Close;
  end;
  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;


function TFrmDB.LoadMapInfo: Integer;
  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;
    QuestNPC.m_boIsQuest:=False;
    UserEngine.QuestNPCList.Add(QuestNPC);

    Result:=QuestNPC;
  end;

{$IFDEF UseTXT}
  procedure LoadSubMapInfo(LoadList:TStringList;sFileName:String);
  var
    I: Integer;
    sFilePatchName,sFileDir:String;
    LoadMapList:TStringList;
  begin
    sFileDir:=g_Config.sEnvirDir + 'MapInfo\';
    if not DirectoryExists(sFileDir) then begin
      CreateDir(sFileDir);
    end;
      
    sFilePatchName:=sFileDir + sFileName;
    if FileExists(sFilePatchName) then begin
      LoadMapList:=TStringList.Create;
      LoadMapList.LoadFromFile(sFilePatchName);
      for I := 0 to LoadMapList.Count - 1 do begin
        LoadList.Add(LoadMapList.Strings[I]);
      end;
      LoadMapList.Free;
    end;
  end;
{$ENDIF}

var
{$IFDEF UseTXT}
  sFileName:String;

  LoadList:TStringList;
  sLineText:String;

  sData,sMapNo,sMapNameLine,sMapFileName,sDMapNO,sServerIndex:String;
  nSMapX,nSMapY,nDMapX,nDMapY:Integer;

  sMapInfoFile:String;
{$ELSE}
  nIdx: Integer;
{$ENDIF}
  sCaption: String;
  i:Integer;
  sFlag,s34,s38,sMapName,sMapDesc,sReConnectMap:String;
  nServerIndex:Integer;
  MapFlag:TMapFlag;
  QuestNPC:TMerchant;
{$IFNDEF UseTXT}
ResourceString
  sSQLString = 'SELECT * FROM TBL_MAPINFO';
{$ENDIF}
begin
  sCaption := FrmMain.Caption;
  Result:= -1;
  try
    EnterCriticalSection(ProcessHumanCriticalSection);
  {$IFDEF UseTXT}
    sFileName:=g_Config.sEnvirDir + 'MapInfo.txt';
    if FileExists(sFileName) then begin
      LoadList:=TStringList.Create;
      LoadList.LoadFromFile(sFileName);
      if LoadList.Count < 0 then begin
        LoadList.Free;
        exit;
      end;
      I:=0;
      while (True) do begin
        if I >= LoadList.Count then break;
        if CompareLStr('loadmapinfo',LoadList.Strings[I],Length('loadmapinfo')) then begin
          sMapInfoFile:=GetValidStr3(LoadList.Strings[I], sLineText, [' ', #9]);
          LoadList.Delete(I);
          if sMapInfoFile <> '' then begin
            LoadSubMapInfo(LoadList,sMapInfoFile);
          end;
        end;
        Inc(I);
      end;
      Result:=1;

      for i:=0 to LoadList.Count -1 do begin
        sLineText:=LoadList.Strings[i];
        if (sLineText <> '') and (sLineText[1] = '[') then begin
          sMapName:='';
          MapFlag.boSAFE:=False;
          sLineText:=ArrestStringEx(sLineText,'[',']',sMapNameLine);
          sMapDesc:=GetValidStrCap(sMapNameLine,sMapFileName,[' ', ',', #9]);
          sMapFileName:=GetValidStr3(sMapFileName,sMapName,['|']);
          if sMapFileName = '' then sMapFileName:=sMapName;
            
          if (sMapDesc <> '') and (sMapDesc[1] = '"') then
              ArrestStringEx(sMapDesc,'"','"',sMapDesc);
          sServerIndex:=Trim(GetValidStr3(sMapDesc,sMapDesc,[' ', ',', #9]));
          nServerIndex:=Str_ToInt(sServerIndex,0);
          if sMapName = '' then Continue;


          FillChar(MapFlag,SizeOf(TMapFlag),#0);
          MapFlag.nL:=1;
          QuestNPC:=nil;
          MapFlag.nNEEDSETONFlag:= -1;
          MapFlag.nNeedONOFF:= -1;
          MapFlag.nMUSICID:=-1;
          MapFlag.nGuildTerritory:=-1; // Sergiu

          FrmMain.Caption:=sCaption + '[处理地图:'+sMapName+' ('+inttostr(I+1)+'/'+inttostr(LoadList.Count)+')';

          sFlag := sLineText;
    {$ELSE}
      try
      UseSQL();
      Query.SQL.Clear;
      Query.SQL.Add(sSQLString);
      MiniMapList.Clear;
      BigMapList.Clear;
      try
        Query.Open;
      except
        Result:= -2;
      end;
      for i:=0 to Query.RecordCount -1 do begin
        sMapName      := Trim(Query.FieldByName('FLD_MAPFILENAME').AsString);
        sMapDesc      := Trim(Query.FieldByName('FLD_MAPNAME').AsString);
        sFlag         := Trim(Query.FieldByName('FLD_FLAGS').AsString);
        nServerIndex  := Query.FieldByName('FLD_SERVERINDEX').AsInteger;
        
        if sMapName = '' then begin
          Query.Next;
          Continue;
        end;
        FrmMain.Caption:=sCaption + '[处理地图:'+sMapName+' ('+inttostr(I+1)+'/'+inttostr(Query.RecordCount)+')';
  //      FrmMain.MemoLog.Lines.Add(' -> Adding Map: '+sMapName+' ('+inttostr(I+1)+'/'+inttostr(Query.RecordCount)+')');
        nIdx          := Query.FieldByName('FLD_MINIMAP').AsInteger;
        if nIdx > 0 then
          MiniMapList.AddObject(sMapName,TObject(nIdx));

     nIdx          := Query.FieldByName('FLD_BIGMAP').AsInteger;
      if nIdx > 0 then
        BigMapList.AddObject(sMapName,TObject(nIdx));

  
    {$ENDIF}

      FillChar(MapFlag,SizeOf(TMapFlag),#0);
      MapFlag.nL:=1;
      QuestNPC:=nil;
      MapFlag.boSAFE:=False;
      MapFlag.nNEEDSETONFlag:= -1;
      MapFlag.nNeedONOFF:= -1;
      MapFlag.nMUSICID:=-1;

⌨️ 快捷键说明

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