По многочисленным просьбам попытаюсь доходчиво изложить как сделать задержку между посылаемыми пакетами, на примере скрипта автоатаки несколькими скилами(для сина).
Для начала покажу сам скрипт со всевозможными комментариями:
PHP код:
//Timer by happytorn const name = 'borrov'; //имя соединения var Timer:TTimer; TimerStep:integer; TargetID:integer; StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила begin buf := HStr('D0 00 57 6F FF CC CC DD 00 60 CA 00 00 00 00 79 8D 00 00'); //Начальный пакет на скил WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила WriteC(Level, 8); //Всталяем в начальный пакет уровень скила WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета SendToServerEx(name); end;
procedure Init; begin TimerStep:=1; //Шаг Timer:=TTimer.Create(nil); //выделяем память Timer.OnTimer:=@OnTimer; //привязываем процедуру к событию Timer.enabled:=false; //начальное положение выключен(false) Timer.interval:=900; //интервал(в миллисекундах) как часто таймер срабатывает end;
procedure Free; begin Timer.free; end;
procedure OnTimer(Sender: TObject); begin case TimerStep of 1: begin DoTheSkill(580, 9); //Рассекающий удар V Inc(TimerStep); end; 2: begin DoTheSkill(932, 9); //Нанесение древнего клейма III Inc(TimerStep); end; 3: begin DoTheSkill(581, 9); //Контратака V Inc(TimerStep); end; 4: begin DoTheSkill(875, 9); //Рев Зверя IV Inc(TimerStep); end; 5: begin DoTheSkill(860, 9); //Удар Зверя IV Inc(TimerStep);
end; 6: begin DoTheSkill(2110, 9); //Бросок зверя II Timer.enabled:=false; //выключаем таймер Inc(TimerStep); TimerStep:=1; end;
end;
end;
begin
StartSkill := 578; //Стремительный удар V if (FromClient) and (ReadC(1) = $D0) and (ReadH(6) = StartSkill) then begin TargetID := ReadD(10); Timer.enabled:=true; //включаем таймер end; end.
И так, на что следует обратить внимание если наша задача переделать скрипт "под себя".
PHP код:
name = 'borrov';
-Здесь меняем borrov на свое имя соединения(логин)
PHP код:
Timer.interval:=900;
-Здесь меняем 900 миллисекунд на желаемое время задержки
PHP код:
DoTheSkill(580, 9);
-580 это ID скила,9-это уровень скила.ID скила узнать можно в базе.Например [Ссылки могут видеть только зарегистрированные пользователи. ]580
PHP код:
begin DoTheSkill(2110, 9); //Бросок зверя II Timer.enabled:=false; //выключаем таймер Inc(TimerStep); TimerStep:=1;
В последнем из списка добавленных скилов не забываем выключить таймер и добавить TimerStep:=1;.В моем случае последний скил это Бросок Зверя II
PHP код:
StartSkill := 578;
- Это начальный скил активатор.В моем случае это Стремительный удар V
ЗЫ. Если кто-то желает протестировать именно этот скрипт,то менять в нем нужно только Имя соединения(логин)
ЗЫЫ. Если хотите чтобы у вас между определенными скилами был какой-то свой отдельный интервал,то
добавляем строку Timer.interval:=600;600 меняем на желаемое время задержки
Например:
Цитата:
begin
Timer.interval:=600;
DoTheSkill(580, 9); //Рассекающий удар V
Inc(TimerStep);
end;
Последний раз редактировалось happytorn; 05.02.2012 в 17:32.
немного подправлю
If (TimerStep=7) then TimerStep:=1 это лишнее
делаееш так
вместо этого:
Код:
6:
begin
DoTheSkill(2110, 9); //Бросок зверя II
SendToServerEx(name); это не нужно-есть в процедуре, нужно только подправить.
Timer.enabled:=false; //выключаем таймер// таймер выключен, но зачем дальше идет зацикливание атаки?
Inc(TimerStep);
end;
пишем:
Код:
6:
begin
DoTheSkill(2110, 9);
TimerStep:=1; //зацикливаем-идет на первый шаг.
end;
правим процедуру
Код:
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('D0 00 57 6F FF CC CC DD 00 60 CA 00 00 00 00 79 8D 00 00'); //Начальный пакет на скил
WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила
WriteC(Level, 8); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета
SendToServer; в таймере не будет работать меняем на SendToServerEx(name);
end;
будет так:
Код:
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('D0 00 57 6F FF CC CC DD 00 60 CA 00 00 00 00 79 8D 00 00'); //Начальный пакет на скил
WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила
WriteC(Level, 8); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета
SendToServerEx(name);
end;
и еще у тебя атака скилами зациклена, но вто же время таймер выключается
я сделал зацикливание, терь нужно в проверку где нить вставить выключение таймера, и атака пркуратится.
а так скрип отличный, нужно только отшлифовать его
скрипт практически 1 в 1 как я сделал)
еще можно добавить задержку для следующего удара(задержка может быть произвольная
примерно так:
Код:
1: //начало первой серии
begin
timer.interval:=300;// след удар полетит через 0.3 сек
DoTheSkill(1260, 4);
Inc(TimerStep);
end;
2:
begin
timer.interval:=500;// след удар полетит через 0.5 сек
DoTheSkill(1276, 4);
Inc(TimerStep);
end;
3:
Последний раз редактировалось manyunya; 05.02.2012 в 17:05.
а можешь сделать скрипт. что бы. когда юзаешь "засаду" срабатывали бафы "око гнева" "точный расчет" "ритуал" "штурмовая стойка" после бафоф "атака ядом" "клинок обморока" ?
а можешь сделать скрипт. что бы. когда юзаешь "засаду" срабатывали бафы "око гнева" "точный расчет" "ритуал" "штурмовая стойка" после бафоф "атака ядом" "клинок обморока" ?
А вот в одной теме нельзя обо всем рассказать? Уже третья тема посвященная разработке скриптов, но инфа разрозненная и скудная. Если есть возможность, то создайте полноценную тему от начала и до конца.
________________ подполье Аион - для суровых подпольщиков
Восстановлена работоспособность одного из лучших радаров для Аион. Спасибо автору(ам) =)
Path of Exile - в настоящее время там.
А вот в одной теме нельзя обо всем рассказать? Уже третья тема посвященная разработке скриптов, но инфа разрозненная и скудная. Если есть возможность, то создайте полноценную тему от начала и до конца.
кому интересен процесс написания скриптов и так все сам нашел, а кто ждет только готового, то и подробная тема не поможет.
а подробная тема - это книга по обджект паскаль будет)
скажи какие темы ты имел ввиду и думаю happytorn все подробненько распишет
Не надо про паскаль. =)
Желательно объединить в теме это, это и данную тему. И поддерживать ее, отвечая на вопросы. Думаю, авторам тем лучше объединиться в группу - допустим "Скриптеры Аион" (название временное =) ).
________________ подполье Аион - для суровых подпольщиков
Восстановлена работоспособность одного из лучших радаров для Аион. Спасибо автору(ам) =)
Path of Exile - в настоящее время там.
Последний раз редактировалось talala; 07.02.2012 в 23:36.
Причина: Добавлено сообщение
и что значит цифра 8 (бывает 10) в строке TargetID := ReadD(8);
Цифра - это номер байта в пакете . DO, CF, 23, 60 - это байты. 8 - значит начиная с 8го байта в пакете будет начинаться TargetID. если 10 то с 10го соответственно. цифра эта не постоянная. В нашем случае это 60
buf := HStr('D0 00 57 6F FF CC CC DD 00 60 CA 00 00 00 00 79 8D 00 00');
WriteD(TargetID, 10);
Последний раз редактировалось Levapishe; 08.02.2012 в 14:42.