Перейти к содержанию

Управление окнами через пати чат (скрипт)


Рекомендуемые сообщения

Скрипт объединен со скриптом "кол-во сосок в пати чат" и не только.

Самое вкусное - телепорт за окнами без мозгодрочки как в других скриптах. 

Все команды пишутся в пати чат как и прежде. Дорабатывайте на свой вкус, буду рад увидеть ваши модификации :)

Не забудьте указать всех необходимых персонажей в скрипте. Примерно на 70 строке найти myChars.add('Name1'); и заменить/дописать на ники ваших персов.

tp X - где X номер пункта тп у гейткипера. Берем в таргет ГК, смотрим номер строки куда надо полететь, пишем например tp 3. работает так же на других нпц, нужно указать номер пункта в окне диалога.
gate - если скрипт запущен у варка - заюзает gate chant
start - Активирует чаров
stop - Дактивирует чаров. Если включены Arcane Power или Arcane Wisdom, то они будут отключены
follow - привяжутся за написавшим. желательно делать stop перед юзом этой команды
soe - все юзнут /unstuck
aa - кол-во старых аден в пч
df - кол-во дф в пч
ls - кол-во 76 топ лс в пч
stat - кол-во сосок, мп, спирта в пч
rec - рекомендуют того кто написал команду
as - возьмут ассист и откроют диалог с нпц
dance/bow/vic - веселуха

// Управление пати через пати-чат
// 26/09/2018 Existone
// ------------------------------------
// доступные команды:
// tp X - где X номер пункта тп у гейткипера. Берем в таргет ГК, смотрим номер строки куда надо полететь, пишем например tp 3. работает так же на других нпц, нужно указать номер пункта в окне диалога.
// gate - если скрипт запущен у варка - заюзает gate chant
// start - Активирует чаров
// stop - Дактивирует чаров. Если включены Arcane Power или Arcane Wisdom, то они будут отключены
// follow - привяжутся за написавшим. желательно делать stop перед юзом этой команды
// soe - все юзнут /unstuck
// aa - кол-во старых аден в пч
// df - кол-во дф в пч
// ls - кол-во 76 топ лс в пч
// stat - кол-во сосок, мп, спирта в пч
// rec - рекомендуют того кто написал команду
// as - возьмут ассист и откроют диалог с нпц
// dance/bow/vic - веселуха


uses sysutils,classes;

var myChars: TStringList;
var remoteControl: TL2Control;
var remoteControlCheck: TL2Control;
var UserCustom: TL2User;
var UserCustomTemp: TL2Control;
var Buff: TL2Buff;
var obj:TL2Effect;
i: integer;
var soski: string;

procedure Split(Delimiter: Char; Str: string; ListOfStrings: TStrings) ;
begin
   ListOfStrings.Clear;
   ListOfStrings.Delimiter       := Delimiter;
   ListOfStrings.StrictDelimiter := True;
   ListOfStrings.DelimitedText   := Str;
end;

function ContainsBeforeEnd(const str, substr: string): Boolean;
var
  P: Integer;
begin
  P := Pos(substr, str);
  if P = 0 then
    Result := False
  else
    Result := P + Length(substr) - 1 <> Length(str);
end;

var
  List: TStrings;

function CheckItemCount (const userID: string; const itemID: Integer) : Integer;
var tempItem: TL2Item;
begin
    if Assigned(remoteControl) then begin
      GetControl(userID).GetInventory.User.ByID(itemID, tempItem);
      Result := tempItem.Count;
    end;
end;

function CheckLoad (const userID: string) : Cardinal;
var tempItem: TL2Item;
begin
    if Assigned(remoteControl) then begin
      GetControl(userID).GetUser.Load();
      Result := tempItem.Count;
    end;
end;



begin
  myChars := TStringList.Create;
  myChars.add('Name1');
  myChars.add('Name2');
  myChars.add('Name3');

   while Engine.Status = lsOnline do begin
      
      if (ChatMessage.ChatType = mtParty) and ChatMessage.Unread then
      begin

        // Телепорт по команде в пч. например: tp 1 отправит всех на первый пункт в списке телепортов
        if ContainsBeforeEnd(ChatMessage.Text, 'tp ') then begin
          List := TStringList.Create;
          Split(' ', ChatMessage.Text, List);
          if StrToInt(List[1]) > 0 then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                           UserCustomTemp :=  GetControl(ChatMessage.sender);
                           remoteControl.MoveTo(UserCustomTemp.GetUser.target);
                           delay(300);
                           remoteControl.SetTarget(UserCustomTemp.GetUser.target);
                           delay(100);
                           remoteControl.DlgOpen();
                           delay(100);
                           remoteControl.DlgSel('Телепорт');
                           delay(300);
                           remoteControl.DlgSel(StrToInt(List[1]));
                           remoteControl.CancelTarget;
                end;
            end;
          end;

        end;

        // если этот скрипт запущен у варка, то он кастанет Gate Chant
        if (ChatMessage.Text = 'gate') then begin
            Engine.UseSkill(1429, false);
        end;

        // Деактивация всех чаров. Если включены Arcane Power или Arcane Wisdom, то они будут отключены
        if (ChatMessage.Text = 'stop') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then begin
                        remoteControl.FaceControl(0,false);
                        UserCustom:= remoteControl.GetUser;
                        if UserCustom.Buffs.Byid(337,obj) then begin
                          remoteControl.UseSkill(337, false);
                        end;
                        if UserCustom.Buffs.Byid(336,obj) then begin
                          remoteControl.UseSkill(336, false);
                        end;
                end;
            end;
        end;

        // Активация всех чаров
        if (ChatMessage.Text = 'start') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.FaceControl(0,true);
                end;
            end;
        end;

        // Все чары рекомендуют написавшего в пч
        if (ChatMessage.Text = 'rec') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/target ' + ChatMessage.sender);
                        delay(100);
                        remoteControl.EnterText('/evaluate');
                end;
            end;
        end;

        // Чары возьмут ассист и откроют диалог с этим нпц
        if (ChatMessage.Text = 'as') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        UserCustomTemp :=  GetControl(ChatMessage.sender);
                           
                           remoteControl.MoveTo(UserCustomTemp.GetUser.target);
                           delay(300);
                           remoteControl.SetTarget(UserCustomTemp.GetUser.target);
                           delay(100);
                           remoteControl.DlgOpen();
                end;
            end;
        end;

        // denza-faradenza
        if (ChatMessage.Text = 'dance') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/socialdance');
                end;
            end;
        end;

        // челом бью
        if (ChatMessage.Text = 'bow') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/socialbow');
                end;
            end;
        end;

        
        if (ChatMessage.Text = 'vic') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/socialvictory');
                end;
            end;
        end;

        // привязка всех за написавшим. перед этим нужно делать stop
        if (ChatMessage.Text = 'follow') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/target ' + ChatMessage.sender);
                        delay(100);
                        remoteControl.EnterText('/target ' + ChatMessage.sender);
                end;
            end;
        end;

        // все сделают /unstuck
        if (ChatMessage.Text = 'soe') then begin
            for i := 0 to myChars.Count - 1 do begin
                remoteControl := GetControl(myChars[i]);
                if Assigned(remoteControl) then
                    begin
                        remoteControl.EnterText('/unstuck');
                end;
            end;
        end;

        
        // счетчик старых аден в пч
        if (ChatMessage.Text = 'aa') then begin
              for i := 0 to myChars.Count - 1 do begin
                      remoteControl := GetControl(myChars[i]);
                  if Assigned(remoteControl) then begin
                          if(CheckItemCount(myChars[i], 5575) > 0) then begin
                            soski := soski + 'AA: ' + IntToStr(CheckItemCount(myChars[i], 5575));
                          end;
                          if(CheckItemCount(myChars[i], 5575) < 1) then begin
                            soski := '>>> NO AA!!! <<<';
                          end;
                          remoteControl.Say('[ ' + soski + ' ]', 3, '');
                          soski := '';
                  end;
              end;
        end;

        // счетчик dimensional fragment
        if (ChatMessage.Text = 'df') then begin

              for i := 0 to myChars.Count - 1 do begin
                      remoteControl := GetControl(myChars[i]);
                  if Assigned(remoteControl) then begin

                          // df
                          if(CheckItemCount(myChars[i], 7079) > 0) then begin
                            soski := soski + 'DF: ' + IntToStr(CheckItemCount(myChars[i], 7079));
                          end;
                          // df
                          if(CheckItemCount(myChars[i], 7079) < 1) then begin
                            soski := '>>> NO DF!!! <<<';
                          end;
                          
                          remoteControl.Say('[ ' + soski + ' ]', 3, '');
                          soski := '';
                  end;
              end;
        end;

        // счетчик top ls 76
        if (ChatMessage.Text = 'ls') then begin

              for i := 0 to myChars.Count - 1 do begin
                      remoteControl := GetControl(myChars[i]);
                  if Assigned(remoteControl) then begin

                          // df
                          if(CheckItemCount(myChars[i], 8762) > 0) then begin
                            soski := soski + 'TOP LS 76: ' + IntToStr(CheckItemCount(myChars[i], 8762));
                          end;
                          // df
                          if(CheckItemCount(myChars[i], 8762) < 1) then begin
                            soski := 'NO LS :(';
                          end;
                          
                          remoteControl.Say('[ ' + soski + ' ]', 3, '');
                          soski := '';
                  end;
              end;
        end;

        // счетчик сосок, спирит оре, маны
        if (ChatMessage.Text = 'stat') then begin
              for i := 0 to myChars.Count - 1 do begin
                      remoteControl := GetControl(myChars[i]);
                  if Assigned(remoteControl) then begin
                          // bssc
                          if(CheckItemCount(myChars[i], 3949) > 0) then begin
                            soski := soski + ' | BSSC: ' + IntToStr(CheckItemCount(myChars[i], 3949));
                            if(CheckItemCount(myChars[i], 3949) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // bssa
                          if(CheckItemCount(myChars[i], 3951) > 0) then begin
                            soski := soski + ' | BSSA: ' + IntToStr(CheckItemCount(myChars[i], 3951));
                            if(CheckItemCount(myChars[i], 3951) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // bsss
                          if(CheckItemCount(myChars[i], 3952) > 0) then begin
                            soski := soski + ' | BSSS: ' + IntToStr(CheckItemCount(myChars[i], 3952));
                            if(CheckItemCount(myChars[i], 3952) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // ssb
                          if(CheckItemCount(myChars[i], 1465) > 0) then begin
                            soski := soski + ' | SSB: ' + IntToStr(CheckItemCount(myChars[i], 1465));
                            if(CheckItemCount(myChars[i], 1465) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // ssa
                          if(CheckItemCount(myChars[i], 1466) > 0) then begin
                            soski := soski + ' | SSA: ' + IntToStr(CheckItemCount(myChars[i], 1466));
                            if(CheckItemCount(myChars[i], 1466) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // sss
                          if(CheckItemCount(myChars[i], 1467) > 0) then begin
                            soski := soski + ' | SSS: ' + IntToStr(CheckItemCount(myChars[i], 1467));
                            if(CheckItemCount(myChars[i], 1467) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          // spirit ore
                          if(CheckItemCount(myChars[i], 3031) > 0) then begin
                            soski := soski + ' | St Ore: ' + IntToStr(CheckItemCount(myChars[i], 3031));
                            if(CheckItemCount(myChars[i], 3031) < 100) then
                            soski := soski + ' <<<!!!';
                          end;
                          remoteControl.Say('[ MP: ' + IntToStr(CheckItemCount(myChars[i], 728)) + soski + ' ]', 3, '');
                          soski := '';
                  end;
              end;
        end;

      end;

           
    delay(2000);
   end;
end.
Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...
  • 8 месяцев спустя...

при команде SOE зависает все, помогает только перезагрузка персов, такое ощущение что на сервере unstuck сломан ) 

и очень нехватает что бы при команде боты выбирали нужную строчку в диалоге с нпс, отлично бы помогло для диалога с квестами, перехода на рифт, и прочими

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...