Перейти к содержимому

Фотография
- - - - -

Повтор выбора диалогов окнами за основным персонажем



  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

Нашел на сайте здесь было то, что нельзя публиковать в примерах. Но что то Delphi 10 очень сильно ругается на данный скрипт. 22 ошибки((( 

Если честно, то я в этом скрипте вообще не разобрался, от слова совсем((((  Если есть добрые люди, помогите его довести до ума. а то у меня ума не хватает((( 

Просто очень сложно телепортировать фул пак ботов((

const
  DialogRepeatEnable: boolean = true; // повтор диалогов, true(да) / false(нет)
  // список ников персонажей, которые должны повторять за основным окном
  DialogRepeatPlayerList: array of string = ['Krickt1338',
    'Krickt1339', 'Vasya'];
  OpcodeStr = '21'; // для Interlude заменить на '21'
  OpcodeHex = $21; // для Interlude заменить на $21

procedure OnCliPacket(ID1, ID2: Cardinal; Data: Pointer; Size: Word);
// обработчик исходящих пакетов (C->S)
begin
  if (DialogRepeatEnable) and (ID1 = OpcodeHex) then
  // если повтор включен, и id пакета совпадает с выбором диалога, то
    DialogRepeat(MemToHex(Data^, Size));
  // вызываем функцию, которая повторит выбор диалога указанным окнам
end;

procedure DialogRepeat(PacketData: string);
var
  E: TL2Control;
  i: integer;
begin
  for i := 0 to Length(DialogRepeatPlayerList) - 1 do
  begin // проходим по списку чаров, которыми нужно повторять диалоги
    E := nil;
    E := GetControl(DialogRepeatPlayerList[i]); // получаем Engine нужного окна
    if (E <> nil) then
      E.SendToServer(OpcodeStr + PacketData);
    // если Engine получен, то отправляем пакет выбора диалога
  end;
end;

procedure DialogOpen(E: TL2Control);
// берет в таргет и открывает диалог с нужным NPC другим окном
begin
  E.SetTarget(User.Target.ID);
  E.DlgOpen;
end;

procedure DialogOpenThread(); // основной поток, выполняющий всю логику
var
  p1, p2: integer;
  i: integer;
  E: TL2Control;
  LastTargetID: Cardinal; // тут мы храним ID последнего нашего таргета
  LastDlgText: string; // тут будет храниться текст последнего диалога
begin
  Engine.SendActID(1); // активируем перехват C->S пакетов
  while (true) do
  begin // запускаем бесконечный цикл
    Engine.WaitAction([laDlg], p1, p2); // ждем события "открытие диалога"
    while (User.Target.ID = LastTargetID) and (Engine.DlgText <> LastDlgText) do
      delay(10);
    for i := 0 to Length(DialogRepeatPlayerList) - 1 do
    begin // для каждого ника из списка персонажей
      E := nil;
      E := GetControl(DialogRepeatPlayerList[i]); // получаем его Engine
      if (E <> nil) then // и если Engine получен, то
        Script.NewThread(@DialogOpen(E));
      // запускаем для его поток, который откроет диалог с нужным NPC
    end;
    LastTargetID := User.Target.ID; // перезаписываем ID последнего цели
    LastDlgText := Engine.DlgText; // и текст последнего диалога
  end;
end;

begin
  if (DialogRepeatEnable) then // если повтор включен, то
    Script.NewThread(@DialogOpenThread);
  // запускаем поток, который будет делать все необходимое

  // code ...

  delay(-1);

end.

  • 0

#2
pups

pups

чел... тут ничего не надо доводить до ума, скрипт готов, просто пользуйся...


  • 0

#3
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

pups, он у меня ошибку выдает, а может он не хочет работать , потому что я использую пиратскую версию адреналина?!


Сообщение отредактировал katalizatorrr: 12 Август 2019 - 17:28

  • 0

#4
ScythLab

ScythLab

потому что я использую пиратскую версию адреналина?
легко, хотя гадать без сообщения об ошибки могут только телепаты, ну а мы все знаем где бывают телепаты в это время года
  • 0

Хобби: разработка непубличного бота для Lineage


#5
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

он в самом коде выделяет красной строкой    DialogRepeat(MemToHex(Data^, Size));


  • 0

#6
ScythLab

ScythLab

katalizatorrr, функции MemToHex нет в крякнутой версии


  • 1

Хобби: разработка непубличного бота для Lineage


#7
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab, Спасибо большое! ;)


  • 0



Темы с аналогичным тегами наработки

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Rawr.pro - Сделано с для игроков.