Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Рес куры через интерфейс, юзает 2 скролла

Рег
28 Ноя 2015
Сообщения
126
Реакции
0
Помогите настроить , чет я туплю
На интерфейсе юзается сор при смерти куры , она сразу же встает, но чар начинает автоматом юзать второй скролл , хотя кура уже стоит живая)
И еще вопрос как вы реализуете данный момент у себя? Может лучше делать это через скрипт все даки и ставить делеи
Скриншот 27-10-2016 172408.jpg
 
@CMAK, давно не юзал,попробуй интервал убрать
 
@ganj, галочку с интервала нельзя убрать, только если выставить значение 0 , но это не помогает.
Магами уже никто не фармит?)
 
CMAK написал(а):
интерфейсе юзается сор при смерти куры , она сразу же встает, но чар начинает автоматом юзать второй скролл , хотя кура уже стоит живая)
Попробуй интервал больше поставить.
 
а в событиях есть графа где умер пет и заюзать рес с интервалом на проверку 5-10 сек ?
 
@sasha282, интервал не помогает
@xuzard, в событиях нельзя указывать таргет на пета же
 
попробуй сделать скрипт на проверку пета , если мерт пусть ресает и все
 
Такого типа?
Код:
function GetCountMyAttackerNpc:integer;
var
  idx:integer;
begin
  result:=0;
  for idx:=0 to NpcList.Count-1 do begin
    if Not(NpcList.Items(idx).Dead)and(NpcList.Items(idx).AtkOID=User.Oid)then begin
      inc(result);
    end;
  end;
end;

procedure CheckAttackingMobs; //если мы в бою и моб у нас в таргете будет бить 
//если цель мертва отмена таргета
begin
  //print('Проверяем, аттакуют ли нас мобы');
  while GetCountMyAttackerNpc<>0 do
  begin
    if(user.target.incombat) then
    Engine.AutoSoulshot(3949,true);    // BSSC
    Engine.UseSkill(1234); // вампирик
    Engine.UseSkill(1239); // ураган
      if(user.target.dead) then engine.canceltarget;
      delay(100);
  end;
      //print('Мобы не атакуют:)');
end;

procedure checkCOUR;
var MYPET: TL2NPC;
begin
    PetList.ByID(16035, MYPET);
		Print('кура мертва го реснем');
		delay(random(4444)+random(3333));
		Engine.Facecontrol(0,False);   
		CheckAttackingMobs;
		Engine.SetTarget(MYPET);
		Engine.MoveToTarget; 
		engine.useitem(737);
		Engine.Facecontrol(0,True);
	   end;	
	end;

begin
  if not (User.dead ) and  (MYPET.dead) and (User.DistTo(MYPET) < 3000)  then begin 
  checkcour;
 end;
end.
 
Скорее ближе к такому:
Код:
function isObjAttacked(Obj: TL2Live): boolean;
var
  i: integer;
begin
  Result:= false;
  for i:= 0 to NpcList.Count - 1 do
  begin
    if (not NpcList(i).Dead) and
       (NpcList(i).Attackable) and
       (NpcList(i).AtkOID = Obj.OID) then
    begin
      Result:= true;
      break;
    end;
  end;
end;

procedure PetResThread;
var
  Pet: TL2Npc;
  Item: TL2Item;
begin
  while (true) do
  begin
    delay(100);
    if (Engine.Status = lsOnline) and // онлайн
       (not User.dead) and // персонаж жив
       (not isObjAttacked(User)) and // персонаж не атакуется монстрами
       (ItemList.ByID(737, Item)) and // имеется свиток для воскрешения
       (PetList.count > 0) then // имеется пет
    begin
      Pet:= PetList(0);
      if (Pet.valid) and // пет валиден
         (Pet.dead) and // пет мертв
         (User.DistTo(Pet) < 3000) then // дистанция до пета < 3000
      begin
        if (User.DistTo(Pet) > 200) then // дистанция до пета > 300 
        begin
          Engine.FaceControl(0, false);
          Engine.MoveTo(Pet, 100);
        end;
        if (User.DistTo(Pet) < 300) then  // дистанция до пета < 300
        begin
          Engine.FaceControl(0, false);
          Engine.SetTarget(Pet);
          Engine.UseItem(Item.ID);
          delay(300); 
          if (User.Cast.EndTime > 0) then
          begin
            while (User.Cast.EndTime > 0) and (not isObjAttacked(User)) do
              delay(10);
            if (isObjAttacked(User)) then
              Engine.StopCasting
            else
              delay(3000);
          end;
          Engine.FaceControl(0, true);
        end
        else
          Engine.FaceControl(0, true);
      end;
    end;
  end;	
end;

begin
  Script.NewThread(@PetResThread);
end.
 
@Krickt, Проверка объекта на существование в игре (актуальность) :hz:
 
Krickt написал(а):
Код:
if (Pet.valid) or // пет валиден
   (Pet.dead) or // пет мертв
   (User.DistTo(Pet) < 3000) then // дистанция до пета < 3000
неверное условие, требуетса замена логических ИЛИ на И.
 
@Krickt, даже с твоим вариантом юзает скролл 2 раза)) что за бред... типо поток по кд юзает СОР и успевает заюзать его второй раз.
 
UseItem возвращает управление скрипту сразу после использования предмета (образно говоря - сразу после отправки команды на использование предмета), т.е. после (до)
engine.useitem(...) должна быть проверка на каст\завершение каста, чтобы избежать даблюза.
 
while (User.Cast.EndTime <> 0) do Delay(100);
?
а все уже ответил Krickt , спасибо , репа кончилась на сегодня :(
Кстати еще заметил, есть недостаток в проверке на атакующих меня мобов, чар юзает СОР, но в этот момент может напасть моб.
Добавлю туда еще проверку : если во время каста сора, меня атакуют > то отменяем каст и отбиваемся > затем снова юзаем СОР
 
Назад
Сверху