PDA

Просмотр полной версии : [Скрипт] Автоматические сообщения


CyberCrime'r
17.06.2011, 16:12
Приветствую! решил написать скрипт на автоматическую посылку в чат, например в мировой, на продажу или покупку ( на ваше усмотрение ).
Теперь внимательно: скрипт будет не полный, остальные части вы должны будете доделать сами, я постараюсь доходчиво объяснить.

Первое, что нам понадобится это - присвоить имя нашему соеденению.
Это очень легко делается:
Разворачиваем пнх ( L2ph ), во вкладке: "Дополнительно" пишем такое:

begin
SetName('Ваш ник');
end.

И нажимаем: "Выполнить скрипт".

[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

Далее идем в раздел "Автоматизация" --> "Скрипты". ( Ctrl + E )
Создаем скрипт и пишем там такое:

//Скрипт на сообщение в чат by CyberCryme'r
const
name='CyberCrimer';
var
Timer:TTimer;
TimerMyMsgs:byte;
procedure Init;
begin
TimerMyMsgs:=1;
Timer:=TTimer.Create(nil);
Timer.OnTimer:=@OnTimer;
Timer.enabled:=false;
Timer.interval:=1;
end;

procedure Free;
begin
Timer.free;
end;


procedure OnTimer(Sender: TObject);
begin
buf:=HStr('Вот сюда'); //Сообщение в чат
SendToServerEx(name);
Timer.interval:=120000; //Таймер посылки пакета через интервал 120000 - миллисекунд - это: 2 минуты
end;

begin
if FromClient and (pck=HStr('Вот сюда')) and (ConnectName=name) then //Пакет активирующий скрипт/таймер ( сообщение на старт )
begin
Timer.enabled:=true;
pck:='';
end;
if FromClient and (pck=HStr('Вот сюда')) and (ConnectName=name) then //Пакет дезавтивирующий скрипт/таймер ( сообщение стоп )
begin
Timer.enabled:=false;
pck:='';
end;
end.

Этот скрипт расчитан на одно сообщение в чат.
В этом скрипте как может показаться, есть лишняя глобальная переменная - это TimerMyMsgs:byte;
Но это сделано для того, что бы можно было без тотальных изменений добавить больше одного сообщения, ну об этом позже...

Теперь непосредственно расскажу про вышенаписанный скрипт, что бы он работал, для начала нужно вписать в нашей константе то имя, которое мы присвоили соеденению, оно может быть каким угодно, но должно быть одинаковым.
Прописать надо:


const
name='CyberCrimer'; //Вместо моего ника, нужное имя


После займемся вставкой наших пакетов.
Чтобы скрипт посылал сообщение, нам надо написать его в чат и словить пакет, далее вставить его:


procedure OnTimer(Sender: TObject);
begin
buf:=HStr('Вот сюда'); //Сообщение в чат
SendToServerEx(name);
end;


После нам надо словить пакеты на активацию/дезактивацию скрипта/таймера.
Вы можете ловить какие угодно пакеты: эмоций; действий; команд в чат.
Лично я выбрал команды в чат. Итак, что бы активировать скрипт нам надо словить определенный пакет, например это будет сообщение в ""общий чат"" такого вида: "/старт", пишем слово, ловим пакет и вставляем его:


begin
if FromClient and (pck=HStr('Вот сюда')) and (ConnectName=name) then //Пакет активирующий скрипт/таймер ( сообщение на старт )
begin
Timer.enabled:=true;
pck:='';
end;


Тоже самое делаем с пакетом дезактивации, пишем в ""общий чат"" слово: "/стоп", ловим пакет и вставляем его:


if FromClient and (pck=HStr('Вот сюда')) and (ConnectName=name) then //Пакет дезавтивирующий скрипт/таймер ( сообщение стоп )
begin
Timer.enabled:=false;
pck:='';


Теперь для выполнения данного скрипта нужно его отметить галочкой в списке скриптов и он автоматически скомпилируется и выполнится.
Теперь в игре пишем "/старт" в общий чат и видим, что сообщение послалось, следующее сообщение будет послано через 2 минуты, это можно изменить тут:


procedure OnTimer(Sender: TObject);
begin
buf:=HStr('Вот сюда'); //Сообщение в чат
SendToServerEx(name);
Timer.interval:=120000; //Таймер посылки пакета через интервал 120000 - миллисекунд - это: 2 минуты
end;

Там где Timer.interval:=120000; меняем 120000 на большее или меньшее время, время в миллисекундах ( 1 секунда = 1000 миллисекунд )
Перед тем как исправить обязательно снемите галочку в списке скриптов.

Добавлено через 2 минуты
Теперь сделаем 2 и больше сообщений в чат.
Для этого в самом скрипте нужно всего лишь добавить конструкцию case в процедуру таймера.

Там где у нас:


procedure OnTimer(Sender: TObject);
begin
buf:=HStr('Вот сюда'); //Сообщение в чат
SendToServerEx(name);
Timer.interval:=120000; //Таймер посылки пакета через интервал 120000 - миллисекунд - это: 2 минуты
end;


Напишем так:


procedure OnTimer(Sender: TObject);
begin
case TimerMyMsgs of
1:
begin
buf:=HStr('');
SendToServerEx(name); //первое сообщение
Inc(TimerMyMsgs);
end;
2:
begin
buf:=HStr('');
SendToServerEx(name); //второе сообщение
Inc(TimerMyMsgs);
end;
3:
begin
buf:=HStr('');
SendToServerEx(name); //третье сообщение
TimerMyMsgs:=1; //возвращает процедуру к первому действию
Timer.interval:=120000; // задает интервал между выполнением действий/посылки сообщений
end;
end;
end;


Можно делать и больше сообщений, главное чтоб вконце процедуры посылки пакета было:

Inc(TimerMyMsgs);

А в конце последнего сообщение было:


TimerMyMsgs:=1;
Timer.interval:=120000;

==================
В принципе все, надеюсь все понятно. Удачи

react666
17.06.2011, 19:48
ну и зачем столько гемороя, если можно юзать для этого макросы?

CyberCrime'r
17.06.2011, 20:04
для тебя это геморой, для меня это дело 1й минуты...и потом чтоб не жать на эти геморойные макросы, я качаюсь бегаю, не парюсь и жду ПМов например и т.д., если тебе тема не нужна уйди из нее и не надо разводить флуд

Furydose
17.06.2011, 20:39
А не легче отпечатать один раз и поставить пакет на часики?