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

📄 localdb.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:

function TFrmDB.LoadMonGen(): Integer;

  procedure LoadMapGen(MonGenList: TStringList; sFileName: string);
  var
    i                                   : Integer;
    sFilePatchName                      : string;
    sFileDir                            : string;
    LoadList                            : TStringList;
  begin
    sFileDir := g_Config.sEnvirDir + 'MonGen\';
    if not DirectoryExists(sFileDir) then
    begin
      CreateDir(sFileDir);
    end;

    sFilePatchName := sFileDir + sFileName;
    if FileExists(sFilePatchName) then
    begin
      LoadList := TStringList.Create;
      try
        LoadList.LoadFromFile(sFilePatchName);
        for i := 0 to LoadList.Count - 1 do
        begin
          MonGenList.Add(LoadList.Strings[i]);
        end;
      finally
        LoadList.Free;
      End;
    end;
  end;
var
  sFileName, sLineText, sData           : string;
  MonGenInfo                            : pTMonGenInfo;
  LoadList                              : TStringList;
  sMapGenFile                           : string;
  i                                     : Integer;
begin
  Result := 0;
  sFileName := g_Config.sEnvirDir + 'MonGen.txt';
  if FileExists(sFileName) then
  begin
    LoadList := TStringList.Create;
    Try
      LoadList.LoadFromFile(sFileName);
      i := 0;
      while (True) do
      begin
        if i >= LoadList.Count then
          break;
        if CompareLStr('loadgen', LoadList.Strings[i], length('loadgen')) then
        begin
          sMapGenFile := GetValidStr3(LoadList.Strings[i], sLineText, [' ', #9]);
          LoadList.Delete(i);
          if sMapGenFile <> '' then
          begin
            LoadMapGen(LoadList, sMapGenFile);
          end;
        end;
        Inc(i);
      end;
      for i := 0 to LoadList.Count - 1 do
      begin
        sLineText := LoadList.Strings[i];
        if (sLineText <> '') and (sLineText[1] <> ';') then
        begin
          New(MonGenInfo);
          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.sMapName := sData;

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.nX := Str_ToInt(sData, 0);

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.nY := Str_ToInt(sData, 0);

          sLineText := GetValidStrCap(sLineText, sData, [' ', #9]);
          if (sData <> '') and (sData[1] = '"') then
            ArrestStringEx(sData, '"', '"', sData);

          MonGenInfo.sMonName := sData;

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.nRange := Str_ToInt(sData, 0);

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.nCount := Str_ToInt(sData, 0);

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.dwZenTime := Str_ToInt(sData, -1) * 60 * 1000;

          sLineText := GetValidStr3(sLineText, sData, [' ', #9]);
          MonGenInfo.nMissionGenRate := Str_ToInt(sData, 0);
          //集中座标刷新机率 1 -100
          if (MonGenInfo.sMapName <> '') and
            (MonGenInfo.sMonName <> '') and
            (MonGenInfo.dwZenTime <> 0) and
            (g_MapManager.GetMapInfo(nServerIndex, MonGenInfo.sMapName) <> nil)
            then
          begin

            MonGenInfo.CertList := TMyList.create;
            MonGenInfo.Envir := g_MapManager.FindMap(MonGenInfo.sMapName);
            if MonGenInfo.Envir <> nil then
            begin
              UserEngine.m_MonGenList.Add(MonGenInfo);
            end
            else
            begin
              DisPose(MonGenInfo);
            end;
          end;
          //tMonGenInfo.nRace:=UserEngine.GetMonRace(tMonGenInfo.sMonName);

        end;                                                  //00486B5B
      end;                                                    //00486B67
      //00486B67
      New(MonGenInfo);
      MonGenInfo.sMapName := '';
      MonGenInfo.sMonName := '';
      MonGenInfo.CertList := TMyList.create;
      MonGenInfo.Envir := nil;
      UserEngine.m_MonGenList.Add(MonGenInfo);
    finally
      LoadList.Free;
    End;
    Result := 1;
  end;
end;
//00485E04

function TFrmDB.LoadMonsterDB(): Integer;
var
  i                                     : Integer;
  Monster                               : pTMonInfo;
resourcestring
  sSQLString                            = 'select * from Monster';
begin
  Result := 0;
  EnterCriticalSection(ProcessHumanCriticalSection);
  try
    for i := 0 to UserEngine.MonsterList.Count - 1 do
    begin
      DisPose(pTMonInfo(UserEngine.MonsterList.Items[i]));
    end;
    UserEngine.MonsterList.Clear;

    DataModule_mir200[0].ADOQuery.SQL.Clear;
    DataModule_mir200[0].ADOQuery.SQL.Add(sSQLString);
    try
      DataModule_mir200[0].ADOQuery.Open;
    finally
      Result := -1;
    end;
    for i := 0 to DataModule_mir200[0].ADOQuery.RecordCount - 1 do
    begin
      New(Monster);
      Monster.ItemList := TMyList.create;
      Monster.sName := Trim(DataModule_mir200[0].ADOQuery.FieldByName('NAME').AsString);
      Monster.btRace := DataModule_mir200[0].ADOQuery.FieldByName('Race').AsInteger;
      Monster.btRaceImg := DataModule_mir200[0].ADOQuery.FieldByName('RaceImg').AsInteger;
      Monster.wAppr := DataModule_mir200[0].ADOQuery.FieldByName('Appr').AsInteger;
      Monster.wLevel := DataModule_mir200[0].ADOQuery.FieldByName('Lvl').AsInteger;
      Monster.btLifeAttrib := DataModule_mir200[0].ADOQuery.FieldByName('Undead').AsInteger;
      Monster.wCoolEye := DataModule_mir200[0].ADOQuery.FieldByName('CoolEye').AsInteger;
      Monster.dwExp := DataModule_mir200[0].ADOQuery.FieldByName('Exp').AsInteger;

      //城门或城墙的状态跟HP值有关,如果HP异常,将导致城墙显示不了
      if Monster.btRace in [110, 111] then
      begin //如果为城墙或城门由HP不加倍
        Monster.wHP := DataModule_mir200[0].ADOQuery.FieldByName('HP').AsInteger;
      end
      else
      begin
        Monster.wHP := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('HP').AsInteger *
          (g_Config.nMonsterPowerRate / 10));
      end;

      Monster.wMP := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MP').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wAC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('AC').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wMAC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MAC').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wDC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('DC').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wMaxDC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('DCMAX').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wMC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('MC').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wSC := ROUND(DataModule_mir200[0].ADOQuery.FieldByName('SC').AsInteger *
        (g_Config.nMonsterPowerRate / 10));
      Monster.wSpeed := DataModule_mir200[0].ADOQuery.FieldByName('SPEED').AsInteger;
      Monster.wHitPoint := DataModule_mir200[0].ADOQuery.FieldByName('HIT').AsInteger;
      Monster.wWalkSpeed := _MAX(200, DataModule_mir200[0].ADOQuery.FieldByName('WALK_SPD').AsInteger);
      Monster.wWalkStep := _MAX(1, DataModule_mir200[0].ADOQuery.FieldByName('WalkStep').AsInteger);
      Monster.wWalkWait := DataModule_mir200[0].ADOQuery.FieldByName('WalkWait').AsInteger;
      Monster.wAttackSpeed := DataModule_mir200[0].ADOQuery.FieldByName('ATTACK_SPD').AsInteger;

      if Monster.wWalkSpeed < 200 then
        Monster.wWalkSpeed := 200;
      if Monster.wAttackSpeed < 200 then
        Monster.wAttackSpeed := 200;
      Monster.ItemList := nil;
      LoadMonitems(Monster.sName, Monster.ItemList);

      UserEngine.MonsterList.Add(Monster);
      Result := 1;
      DataModule_mir200[0].ADOQuery.Next;
    end;
    DataModule_mir200[0].ADOQuery.Close;
  finally
    LeaveCriticalSection(ProcessHumanCriticalSection);
  end;
end;

function TFrmDB.LoadMonitems(MonName: string; var ItemList: TMyList): Integer;
//00485ABC
var
  i                                     : Integer;
  s24                                   : string;
  LoadList                              : TStringList;
  MonItem                               : pTMonItemInfo;
  s28, s2C, s30                         : string;
  n18, n1C, n20                         : Integer;
begin
  Result := 0;
  s24 := g_Config.sEnvirDir + 'MonItems\' + MonName + '.txt';
  if FileExists(s24) then
  begin
    if ItemList <> nil then
    begin
      for i := 0 to ItemList.Count - 1 do
      begin
        DisPose(pTMonItemInfo(ItemList.Items[i]));
      end;
      ItemList.Clear;
    end
    else
      ItemList := TMyList.create;                             //00485B81
    LoadList := TStringList.Create;

    try
      LoadList.LoadFromFile(s24);
      for i := 0 to LoadList.Count - 1 do
      begin
        s28 := LoadList.Strings[i];
        if (s28 <> '') and (s28[1] <> ';') then
        begin
          s28 := GetValidStr3(s28, s30, [' ', '/', #9]);
          n18 := Str_ToInt(s30, -1);
          s28 := GetValidStr3(s28, s30, [' ', '/', #9]);
          n1C := Str_ToInt(s30, -1);
          s28 := GetValidStr3(s28, s30, [' ', #9]);
          if s30 <> '' then
          begin
            if s30[1] = '"' then
              ArrestStringEx(s30, '"', '"', s30);
          end;
          s2C := s30;
          s28 := GetValidStr3(s28, s30, [' ', #9]);
          n20 := Str_ToInt(s30, 1);
          if (n18 > 0) and (n1C > 0) and (s2C <> '') then
          begin
            if ItemList = nil then
              ItemList := TMyList.create;
            New(MonItem);
            MonItem.SelPoint := n18 - 1;
            MonItem.MaxPoint := n1C;
            MonItem.ItemName := s2C;
            MonItem.Count := n20;
            ItemList.Add(MonItem);
            Inc(Result);
          end;
        end;
      end;
    finally
      LoadList.Free;
    End;
  end;

end;
//00488178

function TFrmDB.LoadNpcs(): Integer;
var
  sFileName, s10, s18, s1C, s20, s24, s28, s2C, s30, s34, s38: string;
  LoadList                              : TStringList;
  NPC                                   : TNormNpc;
  i                                     : Integer;
begin
  sFileName := g_Config.sEnvirDir + 'Npcs.txt';
  if FileExists(sFileName) then
  begin
    LoadList := TStringList.Create;
    try
      LoadList.LoadFromFile(sFileName);
      for i := 0 to LoadList.Count - 1 do
      begin
        s18 := Trim(LoadList.Strings[i]);
        if (s18 <> '') and (s18[1] <> ';') then
        begin
          s18 := GetValidStrCap(s18, s20, [' ', #9]);
          if (s20 <> '') and (s20[1] = '"') then
            ArrestStringEx(s20, '"', '"', s20);

          s18 := GetValidStr3(s18, s24, [' ', #9]);
          s18 := GetValidStr3(s18, s28, [' ', #9]);
          s18 := GetValidStr3(s18, s2C, [' ', #9]);
          s18 := GetValidStr3(s18, s30, [' ', #9]);
          s18 := GetValidStr3(s18, s34, [' ', #9]);
          s18 := GetValidStr3(s18, s38, [' ', #9]);
          if (s20 <> '') and (s28 <> '') and (s38 <> '') then
          begin
            NPC := nil;
            case Str_ToInt(s24, 0) of
              0: NPC := TMerchant.Create;
              1: NPC := TGuildOfficial.Create;
              2: NPC := TCastleOfficial.Create;
            end;
            if NPC <> nil then
            begin
              NPC.m_sMapName := s28;
              NPC.m_nCurrX := Str_ToInt(s2C, 0);
              NPC.m_nCurrY := Str_ToInt(s30, 0);
              NPC.m_sCharName := s20;
              NPC.m_nFlag := Str_ToInt(s34, 0);
              NPC.m_wAppr := Str_ToInt(s38, 0);
              UserEngine.QuestNPCList.Add(NPC);               //0048847D
            end;
          end;
        end;
      end;
    finally
      LoadList.Free;
    End;
  end;
  Result := 1;

end;
//00489840

function TFrmDB.LoadQuestDiary(): Integer;

  function sub_48978C(nIndex: Integer): string;
  begin
    if nIndex >= 1000 then
    begin
      Result := IntToStr(nIndex);
      exit;
    end;
    if nIndex >= 100 then
    begin
      Result := IntToStr(nIndex) + '0';
      exit;
    end;
    Result := IntToStr(nIndex) + '00';
  end;
var
  i, ii                                 : Integer;
  QDDinfoList                           : TMyList;
  QDDinfo                               : pTQDDinfo;
  s14, s18, s1C, s20                    : string;
  bo2D                                  : Boolean;
  nC                                    : Integer;
  LoadList                              : TStringList;
begin
  Result := 1;
  for i := 0 to QuestDiaryList.Count - 1 do
  begin
    QDDinfoList := QuestDiaryList.Items[i];
    for ii := 0 to QDDinfoList.Count - 1 do
    begin
      QDDinfo := QDDinfoList.Items[ii];
      QDDinfo.sList.Free;
      DisPose(QDDinfo);

⌨️ 快捷键说明

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