Сообщения без ответов | Активные темы Текущее время: Ср дек 12, 2018 1:46 am



Ответить на тему  [ Сообщений: 9 ] 
Помогите с проверкой бафа 
Автор Сообщение
Куда я попал

Зарегистрирован: Пт май 01, 2015 12:21 pm
Сообщений: 28
Сообщение Помогите с проверкой бафа
Народ подскажите как сделать чтобы бафер проверял бафы персонажа если есть баф и его время больше 19 минут но нет другого из списка бафал недостающие. А то бывает при ребафе затупит или стан от моба словишь и бафа не хватает. Попробовал написать так: Ребафает даже если время бафа меньше 19 минут. Может кто подскажет как сделать заранее спасибо.

if not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil); engine.useskill(Might); delay(500); end;


Пн авг 06, 2018 2:36 pm
Профиль
Куда я попал

Зарегистрирован: Пт ноя 20, 2015 5:43 am
Сообщений: 54
Сообщение Re: Помогите с проверкой бафа
С верху скрипта объяви переменную
Если
Код:
var
уже написано, то просто добавить строку что ниже к уже существующим переменным.

Код:
var
    buff: TL2Effect;


дальше в нужное место ставишь условие, а лучше процедуру написать

/**
* там где 1111 и 2222 туда вписать какой бафф надо проверить, ид баффа искать в интерфейсе
* buff.EndTime < 1000 , где 1000 это время указанное в миллисекундах т.е. 1000 - 1сек, 10000 - 10сек , итд, выставляешь нужное время.
* код читается как " Если на герое нету баффа под номером ID или на герое нету баффа под номером ID или оставшееся время 1111 или 2222 баффа меньше чем 1 секунда , тогда заходим
* внутрь условия и выполняем, то что надо сделать.
*/
Код:
    if not User.Buffs.ById(1111,buff) or not User.Buffs>ByID(2222, buff) or (buff.EndTime < 1000) then begin
        Тут пишем то что надо сделать.
    end;


Ср авг 08, 2018 1:08 pm
Профиль ICQ
Куда я попал

Зарегистрирован: Пт ноя 20, 2015 5:43 am
Сообщений: 54
Сообщение Re: Помогите с проверкой бафа
т.е. у тебя это должно быть примерно вот так , я бы порекомендовал написать процедуру, процедура это место куда ты запишешь 1 раз код и будешь от туда потом брать во всем скрипте где угодно , так удобнее, что бы в твоем варианте получился ребафф, под каждый бафф надо написать свой IF , а то видишь как получается, у тебя , если нет баффа А, Б , С , Д , тогда взять таргет спойла и использовать майт.

Код:
var
    buff: TL2Effect;

// В эту процедуру ты сможешь дописывать любой бафф когда он появится у твоего баффера, и в коде ничего менять не надо будет , у тебя просто уже будет вызвана даннаая процедура там где надо.
procedure buffMe;
begin
    //Оставляй комментарии для удобства что бы не запутаться к примеру
    //Might (Если нет Might или оставшееся время меньше чем 3 минуты (можешь поменять как удобно)
    if not (GetControl(Spoil).Getuser.Buffs.ById(1111,buff) or (buff.EndTime < 180000) then begin
        print('Баффаю Might');
        engine.settarget(Spoil);
        engine.useskill(1111);
        delay(100);
    end;
   //Shield (Если нет Shield или оставшееся время меньше чем 3 минуты (можешь поменять как удобно)
    if not (GetControl(Spoil).Getuser.Buffs.ById(2222,buff) or (buff.EndTime < 180000) then begin
        print('Баффаю Shield');
        engine.settarget(Spoil);
        engine.useskill(2222);
        delay(100);
    end;
    //Focus (Если нет Focus или оставшееся время меньше чем 3 минуты (можешь поменять как удобно)
    if not (GetControl(Spoil).Getuser.Buffs.ById(3333,buff) or (buff.EndTime < 180000) then begin
        print('Баффаю Focus');
        engine.settarget(Spoil);
        engine.useskill(3333);
        delay(100);
    end;
    //DeathWhispers (Если нет DeathWhispers или оставшееся время меньше чем 3 минуты (можешь поменять как удобно)
    if not (GetControl(Spoil).Getuser.Buffs.ById(4444,buff) or (buff.EndTime < 180000) then begin
        print('Баффаю DeathWhispers');
        engine.settarget(Spoil);
        engine.useskill(4444);
        delay(100);
    end;
    //И дальше добавляешь баффы которые тебе нужны, и которые у тебя в дальнейшем появятся сюда с теме же условиями
end;

//Ну а далее все просто, процедура это отдельный кусок кода, и таким процедур ты можешь создать сколько угодно, но каждая процедура должна выполнять свое определенное действие,
//К примеру процедура Добежать до ТП, процедура добежать до спота , одну процедуру можно использовать внутри другой, к примеру процедуру добежать до тп можно вставить внутрь       
//процедуры добежать до спота, надеюсь логика ясна , в общем процедура это отдельный кусок кода, но нам ее ведь надо где то применить , и где то запустить , по этому далее пишем просто

//Основной скрипт, у тебя он скорее всего уже есть, по этому тебе это не надо.
begin
 //И в основном скрипте просто вызываем процедуру
 buffMe;
 //Все, условия этой процедуре не нужны, они уже прописаны внутри нее.
end;



Ср авг 08, 2018 1:38 pm
Профиль ICQ
Куда я попал

Зарегистрирован: Пт май 01, 2015 12:21 pm
Сообщений: 28
Сообщение Re: Помогите с проверкой бафа
Спасибо за развернутый ответ все расписано очень хорошо. Но видать я не точно сформулировал в чем именно проблема ниже скину весь код с описанием что должен делать скрипт и где возникла проблема буду надеяться на вашу помощь в ее решение заранее спасибо.


Ср авг 08, 2018 2:45 pm
Профиль
Куда я попал

Зарегистрирован: Пт май 01, 2015 12:21 pm
Сообщений: 28
Сообщение Re: Помогите с проверкой бафа
Код:
var
Might,Shield,Focus,WindWalk,Vampiric,DeathWhispers,Mental,Empower,Concentration: integer;
Spoil,BladeDancer,SE,Tank: string;
buff: TL2Buff;
//Проверяет нужен ли ребаф
function Rebuff: boolean;
begin
result := false;
Spoil:=('Name');
if not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) or (buff.EndTime<70000) then  begin   
            result := true;
            exit;
            end;
end;


begin
Might:=(1068); Shield:=(1040); Focus:=(1077); WindWalk:=(1204); Vampiric:=(1268); DeathWhispers:=(1242); Mental:=(1035); Empower:=(1059);
Spoil:=('Name'); BladeDancer:=('Name'); SE:=('Name');
while true do begin
delay(500);
// Запускает ребаф (должен проверять не мертв ли персонаж но почему то если умирает бежит и ребафает труп)
if (Rebuff) and (not GetControl(Spoil).Getuser.dead) and (not GetControl(BladeDancer).Getuser.dead)  then  begin
   delay(2111+Random(3000));
   engine.settarget(SE);
   engine.useskill(Shield); delay(500);
   engine.useskill(WindWalk); delay(500);
   engine.useskill(Mental); delay(500);
   delay(2111+Random(3000));
   engine.settarget(BladeDancer);
   engine.useskill(Might); delay(500);
   engine.useskill(Shield); delay(500);
   engine.useskill(Focus); delay(500);
   engine.useskill(DeathWhispers); delay(500);
   engine.useskill(Vampiric); delay(500);
   engine.useskill(WindWalk); delay(500);
   engine.useskill(Mental); delay(500);
   delay(2111+Random(3000));
   engine.settarget(Spoil);
   engine.useskill(Might); delay(500);
   engine.useskill(Shield); delay(500);
   engine.useskill(Focus); delay(500);
   engine.useskill(DeathWhispers); delay(500);
   engine.useskill(Vampiric); delay(500);
   engine.useskill(WindWalk); delay(500);
   engine.useskill(Mental); delay(500);
   end;
{
Проверка всех бафов (Цель данной проверки если во время ребафа что то пошло не так и не пробафался 1 или более бафов
определи какого бафа не хватает и если есть бафы время которых больше 18 минут тогда добафать если же есть бафы время которых
меньше 18 минут тогда не бафать ни чего персонаж будет ждать ребафа ехр не будет менятся и сработает событие.
А у меня происходит так не зависимо от времени бафов происходит ребаф недостающего к примеру время бафа 7 минут отменяю щит бафер тут же его ребавает.
Смысл данного скрипта в том чтобы был одинаковый тайм бафов а не как бывает через интерфейс один 18 другой 5 третий 9.
А проверка на таим в 18 минут нужна чтобы при проверке гм если будет канцел бот не ребафал мгновенно.
        }
if not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(Might); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(Shield); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(Focus); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(DeathWhispers); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(Vampiric); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(WindWalk); delay(500); end;
if not (GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) or (buff.EndTime<70000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) then begin engine.settarget(Spoil);  engine.useskill(Mental); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(Might); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(Shield); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(Focus); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(DeathWhispers); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(Vampiric); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(WindWalk); delay(500); end;
if not (GetControl(BladeDancer).Getuser.Buffs.ByID(Mental, buff)) or (buff.EndTime<70000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(BladeDancer).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime>1080000) then begin engine.settarget(BladeDancer);  engine.useskill(Mental); delay(500); end;
if not (user.Buffs.ByID(Shield, buff)) or (buff.EndTime<70000) and
(user.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(user.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(SE);  engine.useskill(Shield); delay(500); end;
if not (user.Buffs.ByID(WindWalk, buff)) or (buff.EndTime<70000) and
(user.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(user.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then begin engine.settarget(SE);  engine.useskill(WindWalk); delay(500); end;
if not (user.Buffs.ByID(Mental, buff)) or (buff.EndTime<70000) and
(user.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(user.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) then begin engine.settarget(SE);  engine.useskill(Mental); delay(500); end;

end;
end.


Ср авг 08, 2018 2:46 pm
Профиль
Куда я попал

Зарегистрирован: Пт ноя 20, 2015 5:43 am
Сообщений: 54
Сообщение Re: Помогите с проверкой бафа
Вот тут есть сомнения, это правильно написано?

Код:
Spoil:=('Name');
if not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) or (buff.EndTime<70000) and
   not (GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) or (buff.EndTime<70000) then  begin   
            result := true;
            exit;
            end;
end;


т.е. у тебя идет логическое "И" оно складывает, может заменить на логическое "ИЛИ" ('or') ?
типо у тебя если нету баффа или оставшиеся время такое , и еще нету бафа такого и оствшиеся время такое, тоесть все в охапку, он сразу моментально проверяет абсолютно весь баф, так и задумано?
Т.е. ты проверяешь одномоментно сразу весь бафф, я еще писал там бы стоит добавить еще проверку если нету вовсе баффа,
я бы не советовал проверять сразу все баффы, я кажись начинаю понимать о чем ты, но это жесть немного , там бы все переписать, попробуй баффы по 3 распредели ну сгруппируй , и если один из группы уберут уже шло действие какое то,

первый раз с такой задачей сталкиваюсь, выглядит очень мудрено, или ты намудрил что то, я все пытаюсь читать что ты написал и с каждым прочтением лучше понимаю, мол
Код:
если отсутствет 1 бафф(тут любой ИД БАФА) , и у других время больше чем 18 минут, продолжить кач, если отсутвтует 1 бафф и у других время меньше чем 18 минут, тогда ребаф

ну так и пиши условия как я расписал на псевдокоде, под кажджый бафф свой

Я понял просто у тебя если true , он входит в условие. тебе же надо обратное , т.е. если нету баффа, или его оставшееся время меньше чем 18 минут И есть бафф и его время больше чем 18 минут тогда входим в условие

еще попробуй написать по другому , я не уверен что правильно работает, в 1 строке попробуй,
Код:
ЕСЛИ ЕСТЬ БАФФ такой то И ЕГО ОСТАВШИЕСЯ ВРЕМЯ ТАКОЕ ТО, ИЛИ БАФФА НЕТ

потому что боюсь может работать так , Если нет баффа или !не его время <70000 т.е. делает наоборот < .
Код:
if (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime<70000) or not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then
begin
    УСЛОВИЕ 1
end else begin
    УСЛОВИЕ 2
end;


Ср авг 08, 2018 6:04 pm
Профиль ICQ
Куда я попал

Зарегистрирован: Пт ноя 20, 2015 5:43 am
Сообщений: 54
Сообщение Re: Помогите с проверкой бафа
Все таки советую процедурами писать, легче было бы объединять код логически


Ср авг 08, 2018 6:08 pm
Профиль ICQ
Куда я попал

Зарегистрирован: Пт ноя 20, 2015 5:43 am
Сообщений: 54
Сообщение Re: Помогите с проверкой бафа
Код:
if (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime<70000) or not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and
(GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) and
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then
begin
    УСЛОВИЕ 1 true
end else begin
    УСЛОВИЕ 2 false
end;


Ср авг 08, 2018 6:14 pm
Профиль ICQ
Куда я попал

Зарегистрирован: Пт май 01, 2015 12:21 pm
Сообщений: 28
Сообщение Re: Помогите с проверкой бафа
Treyvin Спасибо большое за советы переписал вот так и заработало как надо:
Код:
function Rebuff: boolean;
begin
result := false;
Spoil:=('Name');
if (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff))) and
   (GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime<70000) or (not (GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff))) then  begin   
            result := true;
            exit;
            end;
end;


и условия проверки изменил
Код:
if ((GetControl(Spoil).Getuser.Buffs.ByID(Might, buff)) and (buff.EndTime<70000)) or  ( not (GetControl(Spoil).Getuser.Buffs.ByID(Might, buff))) then
begin
if (GetControl(Spoil).Getuser.Buffs.ByID(Shield, buff)) and (buff.EndTime>1080000) or
(GetControl(Spoil).Getuser.Buffs.ByID(Focus, buff)) and (buff.EndTime>1080000) or
(GetControl(Spoil).Getuser.Buffs.ByID(DeathWhispers, buff)) and (buff.EndTime>1080000) or
(GetControl(Spoil).Getuser.Buffs.ByID(Vampiric, buff)) and (buff.EndTime>1080000) or
(GetControl(Spoil).Getuser.Buffs.ByID(WindWalk, buff)) and (buff.EndTime>1080000) or
(GetControl(Spoil).Getuser.Buffs.ByID(Mental, buff)) and (buff.EndTime>1080000) then
begin engine.settarget(Spoil);  engine.useskill(Might); delay(500); end;
end;


Сб авг 11, 2018 5:11 pm
Профиль
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ Сообщений: 9 ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Разработано: g-yar.
Русская поддержка phpBB