Здесь я постараюсь объединить наиболее популярные вопросы по скриптам. Так как почти на всех серверах пакеты 2.7 и 3.0,затрагивать пакеты ранних версий не буду. И так, приступим.
1) Как сделать скрипт автоатаки для своего класса?
Пример скрипта тут
Цитата:
var
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 таргета
SendToServer;
end;
begin
StartSkill := 578; //Стремительный удар V
if (FromClient) and (ReadC(1) = $D0) and (ReadH(6) = StartSkill) then
begin
TargetID := ReadD(10);
DoTheSkill(580, 9); //Рассекающий удар V
DoTheSkill(932, 9); //Нанесение древнего клейма III
DoTheSkill(581, 9); //Контратака V
end;
end.
Нам остается только подставить свои скилы.Как это сделать.Пишем свои строки DoTheSkill.Где первая цифра в скобках это ID нужного скила, а вторая -уровень скила.Узнать ID скила можно в базе,например:[Ссылки могут видеть только зарегистрированные пользователи. ] ,где 580-это ID. А так же назначаем скил, который будет активировать наш скрипт StartSkill := 578 ,578 меняем на нужный нам ID скила.
2) Как сделать задержку между пакетами чтобы не палиться?
Пример скрипта тут
Цитата:
var
name:string;
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
name:=ConnectName;
TargetID := ReadD(10);
Timer.enabled:=true; //включаем таймер
end;
end.
В строке Timer.interval:=900; меняем по желанию 900 на любое нужное вам время задержки.
Время задержки между скилами будет одинаковое.
3) Как сделать скрипт для ТП по локации?
Пример скрипта тут
Цитата:
begin
If FromClient and (pck=Hstr('B2 00 57 71 FF 00 67 00 67 00 00 00')) // gg
then
begin
buf:=HStr('C2 00 57 61 FF 04 CC DB A7 44 A4 20 F9 44 00 80 2A 42 36');
SendToServer;
pck:='';
end;
If FromClient and (pck=Hstr('B2 00 57 71 FF 00 57 00 67 55 45 00 00 00'))
then
begin
buf:=HStr('C2 00 57 61 FF 04 DC GB A9 44 A4 20 F9 44 00 80 2A 42 36');
SendToServer;
pck:='';
end;
end.
В моем примере две точки телепорта. Рассмотрим на примере первой точки.
И так, что делать чтобы создать свои точки ТП. 1) Идем в нужную нам точку локации.Ловим последний пакет 9F. Например 9F 00 57 5C FFCC DB A7 44 A4 20 F9 44 00 80 2A 426E 00 CC DB A7 44 A4 20 F9 44 00 80 2A 42- это координаты нашего местоположения.Запоминаем их.
Делаем новый пакет телепорта с нашими координатами: C2 00 57 61 FF 04CC DB A7 44 A4 20 F9 44 00 80 2A 4236 2) Создаем команду для активации ТП. Придумываем название для точки ТП. Например:gg .Пишем его в чат и ловим пакет B2.
Получилось B2 00 57 71 FF 00 67 00 67 00 00 00
Подставляем в скрипт полученные пакеты.
1) Как сделать скрипт автоатаки для своего класса?
Пример скрипта тут
Цитата:
var
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('EF 00 6D 10 FF 34 02 09 00 08 A4 00 00 00 00 00 00 00 00'); //Начальный пакет на скил
WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила
WriteC(Level, 8); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета
SendToServer;
end;
begin
StartSkill := 578; //Стремительный удар V
if (FromClient) and (ReadC(1) = $EF) and (ReadH(6) = StartSkill) then
begin
TargetID := ReadD(10);
DoTheSkill(580, 9); //Рассекающий удар V
DoTheSkill(932, 9); //Нанесение древнего клейма III
DoTheSkill(581, 9); //Контратака V
end;
end.
Нам остается только подставить свои скилы.Как это сделать.Пишем свои строки DoTheSkill.Где первая цифра в скобках это ID нужного скила, а вторая -уровень скила.Узнать ID скила можно в базе,например:[Ссылки могут видеть только зарегистрированные пользователи. ] ,где 580-это ID. А так же назначаем скил, который будет активировать наш скрипт StartSkill := 578 ,578 меняем на нужный нам ID скила.
2) Как сделать задержку между пакетами чтобы не палиться?
Пример скрипта тут
Цитата:
var
name:string;
Timer:TTimer;
TimerStep:integer;
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('EF 00 6D 10 FF 34 02 09 00 08 A4 00 00 00 00 00 00 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) = $EF) and (ReadH(6) = StartSkill) then
begin
name:=ConnectName;
TargetID := ReadD(10);
Timer.enabled:=true; //включаем таймер
end;
end.
В строке Timer.interval:=900; меняем по желанию 900 на любое нужное вам время задержки.
Время задержки между скилами будет одинаковое.
3) Как сделать скрипт для ТП по локации?
Пример скрипта тут
Цитата:
begin
If FromClient and (pck=Hstr('A9 00 6D 56 FF 00 67 00 67 00 00 00')) // gg
then
begin
buf:=HStr('F9 00 6D 06 FF 04 1F 8E D8 44 18 22 D0 44 05 C5 7A 43 36');
SendToServer;
pck:='';
end;
If FromClient and (pck=Hstr('A9 00 6D 56 FF 00 68 00 68 00 00 00'))
then
begin
buf:=HStr('C2 00 57 61 FF 04 DC GB A9 44 A4 20 F9 44 00 80 2A 42 36');
SendToServer;
pck:='';
end;
end.
В моем примере две точки телепорта. Рассмотрим на примере первой точки.
И так, что делать чтобы создать свои точки ТП. 1) Идем в нужную нам точку локации.Ловим последний пакет FE. Например FE 00 6D 01 FF1F 8E D8 44 18 22 D0 44 05 C5 7A 436E 00 1F 8E D8 44 18 22 D0 44 05 C5 7A 43- это координаты нашего местоположения.Запоминаем их.
Делаем новый пакет телепорта с нашими координатами: F9 00 6D 06 FF 041F 8E D8 44 18 22 D0 44 05 C5 7A 4336 2) Создаем команду для активации ТП. Придумываем название для точки ТП. Например:gg .Пишем его в чат и ловим пакет A9.
Получилось A9 00 6D 56 FF 00 67 00 67 00 00 00
Подставляем в скрипт полученные пакеты.
1) Как сделать скрипт автоатаки для своего класса?
Пример скрипта тут
Цитата:
var
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('E7 00 65 18 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00'); //Начальный пакет на скил
WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила
WriteC(Level, 8); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета
SendToServer;
end;
begin
StartSkill := 578; //Стремительный удар V
if (FromClient) and (ReadC(1) = $E7) and (ReadH(6) = StartSkill) then
begin
TargetID := ReadD(10);
DoTheSkill(580, 9); //Рассекающий удар V
DoTheSkill(932, 9); //Нанесение древнего клейма III
DoTheSkill(581, 9); //Контратака V
end;
end.
Нам остается только подставить свои скилы.Как это сделать.Пишем свои строки DoTheSkill.Где первая цифра в скобках это ID нужного скила, а вторая -уровень скила.Узнать ID скила можно в базе,например:[Ссылки могут видеть только зарегистрированные пользователи. ] ,где 580-это ID. А так же назначаем скил, который будет активировать наш скрипт StartSkill := 578 ,578 меняем на нужный нам ID скила.
2) Как сделать задержку между пакетами чтобы не палиться?
Пример скрипта тут
Цитата:
var
name:string;
Timer:TTimer;
TimerStep:integer;
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('E7 00 65 18 FF 00 00 00 00 00 00 00 00 00 00 00 00 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) = $E7) and (ReadH(6) = StartSkill) then
begin
name:=ConnectName;
TargetID := ReadD(10);
Timer.enabled:=true; //включаем таймер
end;
end.
В строке Timer.interval:=900; меняем по желанию 900 на любое нужное вам время задержки.
Время задержки между скилами будет одинаковое.
1) Как сделать скрипт автоатаки для своего класса?
Пример скрипта тут
Цитата:
var
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('E4 00 65 1B FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00'); //Начальный пакет на скил
WriteH(SkillID, 6); //Вставляем в начальный пакет ID скила
WriteC(Level, 8); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 10); //Вставляем в начальный пакет ID таргета
SendToServer;
end;
begin
StartSkill := 578; //Стремительный удар V
if (FromClient) and (ReadC(1) = $E4) and (ReadH(6) = StartSkill) then
begin
TargetID := ReadD(10);
DoTheSkill(580, 9); //Рассекающий удар V
DoTheSkill(932, 9); //Нанесение древнего клейма III
DoTheSkill(581, 9); //Контратака V
end;
end.
Нам остается только подставить свои скилы.Как это сделать.Пишем свои строки DoTheSkill.Где первая цифра в скобках это ID нужного скила, а вторая -уровень скила.Узнать ID скила можно в базе,например:[Ссылки могут видеть только зарегистрированные пользователи. ] ,где 580-это ID. А так же назначаем скил, который будет активировать наш скрипт StartSkill := 578 ,578 меняем на нужный нам ID скила.
2) Как сделать задержку между пакетами чтобы не палиться?
Пример скрипта тут
Цитата:
var
name:string;
Timer:TTimer;
TimerStep:integer;
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('E4 00 65 1B FF 00 00 00 00 00 00 00 00 00 00 00 00 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) = $E4) and (ReadH(6) = StartSkill) then
begin
name:=ConnectName;
TargetID := ReadD(10);
Timer.enabled:=true; //включаем таймер
end;
end.
В строке Timer.interval:=900; меняем по желанию 900 на любое нужное вам время задержки.
Время задержки между скилами будет одинаковое.
Последний раз редактировалось happytorn; 28.11.2013 в 14:41.
сяб. значит по 4 пары чисел на каждую координату) над будет поиграться с ними. Сегодня этим займусь. может получиться сделать по карте сразу собирать пакет)
2) Как сделать задержку между пакетами чтобы не палиться?
Пример скрипта
Не работает.
После Засады ничего не происходит.
Где ошибка?
Код:
const
name = 'xborrovx'; //имя соединения
var
Timer:TTimer;
TimerStep:integer;
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte);
begin
buf := HStr('CF 57 6C CC CC DD 00 FF FF FF FF 00 00 00 00 00 00');
WriteH(SkillID, 4);
WriteC(Level, 6);
WriteD(TargetID, 8);
SendToServer;
end;
procedure Init;
begin
TimerStep:=1; //Шаг
Timer:=TTimer.Create(nil); //выделяем память
Timer.OnTimer:=@OnTimer; //привязываем процедуру к событию
Timer.enabled:=false; //начальное положение выключен(false)
Timer.interval:=1000; //интервал(в миллисекундах) как часто таймер срабатывает
end;
procedure Free;
begin
Timer.free;
end;
procedure OnTimer(Sender: TObject);
begin
case TimerStep of
1:
begin
//Timer.interval:=900;
DoTheSkill(1987, 1); //Атака ядом
Inc(TimerStep);
end;
2:
begin
//Timer.interval:=900;
DoTheSkill(1990, 1); //Клинок обморока
Inc(TimerStep);
TimerStep:=1; //Переходим на первый шаг
end;
end;
end;
begin
StartSkill := 2126;
if (FromClient) and (ReadC(1) = $CF) and (ReadH(4) = StartSkill) then
begin
TargetID := ReadD(8);
Timer.enabled:=true; //включаем таймер
end;
end.
Не работает.
После Засады ничего не происходит.
Где ошибка?
Код:
const
name = 'xborrovx'; //имя соединения
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);
WriteC(Level, 8);
WriteD(TargetID, 10);
SendToServer;
end;
procedure Init;
begin
TimerStep:=1; //Шаг
Timer:=TTimer.Create(nil); //выделяем память
Timer.OnTimer:=@OnTimer; //привязываем процедуру к событию
Timer.enabled:=false; //начальное положение выключен(false)
Timer.interval:=1000; //интервал(в миллисекундах) как часто таймер срабатывает
end;
procedure Free;
begin
Timer.free;
end;
procedure OnTimer(Sender: TObject);
begin
case TimerStep of
1:
begin
//Timer.interval:=900;
DoTheSkill(1987, 1); //Атака ядом
Inc(TimerStep);
end;
2:
begin
//Timer.interval:=900;
DoTheSkill(1990, 1); //Клинок обморока
Inc(TimerStep);
TimerStep:=1; //Переходим на первый шаг
end;
end;
end;
begin
StartSkill := 2126;
if (FromClient) and (ReadC(1) = $D0) and (ReadH(6) = StartSkill) then
begin
TargetID := ReadD(10);
Timer.enabled:=true; //включаем таймер
end;
end.
Ну уже тупо беру твой скрипт и только заменяю пакет с 2.7 на 2.5
И ничего не происходит после скила активатора.
Код:
const
name = 'x-miskalin-x'; //Логин к Акаунту
var
Timer:TTimer;
TimerStep:integer;
TargetID:integer;
StartSkill:word;
procedure DoTheSkill(SkillID:word; Level:byte); //Формируем пакет нового скила
begin
buf := HStr('CF 57 6C CC CC DD 00 FF FF FF FF 00 00 00 00 00 00'); //Начальный пакет на скил
WriteH(SkillID, 4); //Вставляем в начальный пакет ID скила
WriteC(Level, 6); //Всталяем в начальный пакет уровень скила
WriteD(TargetID, 8); //Вставляем в начальный пакет 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) = $CF) and (ReadH(4) = StartSkill) then
begin
TargetID := ReadD(8);
Timer.enabled:=true; //включаем таймер
end;
end.