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

Скрипт на 10 строк

Рег
7 Ноя 2016
Сообщения
12
Реакции
0
Собсно нужна помощь платная \ бесплатная без разницы. Нужно написать скрипт.
Что должен делать скрипт :
Если в радиусе X находится > 1 моба (мобов в локации 5 видов) -> кастовать определенный скилл по кд до того момента пока мобов станет 0.
При этом мобов в таргет брать не желательно.

На этом пожалуй все =)
 
Сорри, сонный писал. Если мобов в ренже больше 1 имелось ввиду.
 
Наверное он имел ввиду >1 )
 
Krickt написал(а):
щас бы за 3 строки деньги брать, бичара.
Ну так напиши бесплатно :) Я ведь свое время тратить буду...За просто так чтоли? К тому же человек готов заплатить и сам об этом написал, так почему бы и нет?
 
const
Range:integer=150; //ренж скила
SpellID:integer=1417; //ид скилла
RangePvP:integer=Range*2; //ренж для проверки флагнутых
BuffID:integer=304; //ид проверяемого бафа
BuffTime:integer=5*60*1000; //время до окончания бафа
Macro:boolean=false; //работают ли макросы на сервере?

function CheckPvP(range:integer):boolean;
//если нету флагнутых в ренже, то можем кастовать
var
i:integer;
obj:tl2live;
begin
result:=true;
for i:=0 to charlist.count-1 do
begin
obj:=charlist(i);
if((not obj.dead) and //таргет живой
(obj.pvp) and //флагнутый
(user.distto(obj)<=range) and //в ренже
(not obj.ismember) and //не сопартиец
((obj.clanid=0) or (obj.clanid<>user.clanid)) and //не соклан
(obj.valid)) //валиден
then result:=false;

if(user.distto(obj)>range) then break;
end;
end;

function SpellReady(ID:integer):boolean;
//проверяем готовность скилла
var skill:tl2skill;
begin
result:=false;
skilllist.byid(id, skill);
if(macro and (skill.endtime<=950)) then result:=true;
if(not macro and (skill.endtime=0)) then result:=true;
end;

function CheckBuff(id:integer; time:integer):boolean;
//проверяем время бафа
var buff:tl2buff;
begin
result:=true;
user.buffs.byid(id, buff);
if(buff.endtime<=time) then result:=false;
end;

function CheckMobs(range:integer):boolean;
//проверка есть ли вокруг мобы
var
i:integer;
mob:tl2live;
begin
result:=false;
for i:=0 to npclist.count-1 do
begin
mob:=npclist(i);
if((not mob.dead) and //моб живой
(user.distto(mob)<=range) and //в ренже
(mob.attackable) and //может быть атакован
(mob.valid)) //валиден
then result:=true;

if(user.distto(mob)>range) then break;
end;
end;

procedure Farm;
begin
while (engine.status=lsonline) do
begin
if(CheckPvP(RangePvP) and
SpellReady(SpellID) and
CheckBuff(BuffID, BuffTime) and
CheckMobs(Range) and
not user.dead) then
begin
if(macro) then engine.duseskill(spellID, false, false)
else engine.useskill(spellID);
delay(user.cast.endtime);
end;
delay(100);
end;
end;

begin
script.newthread(@Farm);
end.
если серьезно писать то как-то много кода выходит :D в коде есть проверка на флагнутых в ренже, на время бафа. в разделе констант указываются все параметры, думаю интуитивно все предельно ясно.
 
@allone, так то уведомлять об этом нужно =)
Код:
const
  Range: cardinal = 1000;
  SkillID: cardinal = 11; 

function GetMobsCountInRange(Range: cardinal): integer;
var
  i: integer;
begin
  Result:= 0;
  
  for i:= 0 to NpcList.count - 1 do
    if (NpcList(i).Attackable) and
       (NpcList(i).DistTo(User) < Range) and
       (not NpcList(i).Dead) and
       (NpcList(i).CurHP <> 0) then
    begin
      inc(Result);
    end;
end;

begin
  while (true) do
  begin
    delay(10);
    if (Engine.Status = lsOnline) and (not User.dead) then
    begin
      if (GetMobsCountInRange(Range) > 1) then
      begin
        while (GetMobsCountInRange(Range) > 0) do
        begin
          Engine.DUseSkill(SkillID, false, false);
          delay(300);
        end;
      end;
    end;
  end;
end.
 
@Krickt,
Скрипт пашет на ура, но нужна проверка на смерть мобов, ибо лежат трупы, а скрипт все равно кастует спелл. Расходы сосок, руды, маны х2
 
@allone, написал тебе скрипт со всеми проверками, а ты даже внимания не обратил, кек. чет плохая затея кому-то помогать и потеть на этом форуме :DDD
 
Krickt написал(а):
allone, сори, забыл, исправил.
Если ты исправил в предыдущем посту, то не работает, все равно после убийства мобов, бьет пока не исчезнет труп.

@SoundShocking, твой скрипт не работает вообще, сорри не было времени отписать, мб из-за проверки на флаг? Ибо вся пачка флагнутая по кд.
 
Krickt написал(а):
Бля не правильно тебя понял. Скрипт твой работает, кроме одной лишь проблемы. Он не чекает мобов на трупы. Моб лежит сдохший, но бот продолжает кастовать пока труп не пропадет.
 
Krickt написал(а):
я же просто проверку на смерть добавил, оно не могло перестать работать)
Не правильно тебя понял, думал ты о скрипте SoundShocking . Скрипт твой работает, кроме одной лишь проблемы. Он не чекает мобов на трупы. Моб лежит сдохший, но бот продолжает кастовать пока труп не пропадет.
Только что еще раз проверил, не пашет проверка.
 
Назад
Сверху