PDA

Просмотр полной версии : Скриптинг для нуба


Алексей
15.07.2009, 16:43
Ребятки, помогите с основными функциями, надо скрипт для отправки разных пакетов через разные промежутки времени, замкнутый в цыкл.
Как я понял,

buf:=hstr('пакет');
SendToServerEx(Name);

в скрипте отправляет "пакет" на сервер.
Помогите теперь разобраться, как выставить задержку в 10 секунд между, например

buf:=hstr('пакет№1');
SendToServerEx(Name);

и

buf:=hstr('пакет№2');
SendToServerEx(Name);

и замкнуть ето в цыкл.
Пытался, как в паскале, зделать цыкл через Label's :D ничего не вышло)
И с таймером не могу разобраться, phx не читает такую команду как delay()?
Заранее спасибо!

QaK
15.07.2009, 16:46
Алексей,Я же тебе и ссылку дал и скрипт поправил, что ты еще хочешь? Если хочешь разобраться, что как работает - ищи книжку по паскалю/основам дельфы.

alexteam
15.07.2009, 16:47
таймер + счетчик + case
delay ( он же sleep) не рекомендуется к использованию.

Алексей
15.07.2009, 16:57
Если бы я делал ето в обычном паскале, ето бы имело следующий вид:

Label l1;
Begin
l1:
buf:=hstr('1');
SendToserverEx(name);
Delay(10000);
buf:=hstr('2');
SendToserverEx(name);
Delay(500);
buf:=hstr('2');
SendToserverEx(name);
Delay(500);buf:=hstr('2');
SendToserverEx(name);
Delay(500);
buf:=hstr('3');
SendToserverEx(name);
Delay(10000);
buf:=hstr('2');
SendToserverEx(name);
Delay(500);buf:=hstr('2');
SendToserverEx(name);
Delay(500);buf:=hstr('2');
SendToserverEx(name);
Delay(500);
Goto l1;
end.

Если не трудно, напишыте как ето должно выглядеть под phx

Книжку я обязательно прочитаю, но мне кажеться что для создания такого простого скрипта ето делать не обязательно, а смотря на

timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=10000;
Просто ни.у. не понимаю :(

В твоем скрипте нельзя ставить разное время задержки между разными пакетами

Неужели вам легче посылать на разные темки форума, чем написать 2-3 команды?

QaK
15.07.2009, 17:16
Неужели вам легче посылать на разные темки форума, чем написать 2-3 команды?неужели тебе легче донимать всех вопросом, чем просто почитать теорию и самому во всем разобраться. Мой стрипт поправить - будут разные задержки между отправкой.

Алексей
15.07.2009, 17:21
ну а как менять задержку?)
Приведи пример на своем же скрипте :good:

mks
15.07.2009, 17:23
Алексей, объясняю, в л2пх то что находится в основной части скрипта проходит 1 раз при проходе одного пакета от клиента либо сервера, поэтому нежелательно там использовать Delay, т.к. следующий пакет л2пх уже не пропустит пока не обработает твой код и не выдержет все твои Delay, и уж темболее, если ты зациклишь этот код, то вообще последующие пакеты от сервера и клиента никуда не дойдут, посему следует использовать таймер

AlbeNeC
15.07.2009, 17:25
Все било б очень просто, если б работали функции Sleep() и Delay(), но нет =(((
п.с. мну опередили, прочетал то что више, ети функции не помогли б =(
пока что рабочая програма имеет такой вид :
const

Name='name';


var

timer1: TTimer;

procedure Init;
begin



timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=true;
timer1.interval:=10000;
end;

procedure OnTimer1(Sender: TObject);
begin

buf:=hstr('2F 89 05 00 00 00 00 00 00 00 ');
SendToServerEx(Name);


end;



procedure Free;
begin
timer1.Free;
end;

begin
end.
воть, но как ее переделать так чтоб шло:

1) пакет №1
2)ждем 10 сек
3)пакет № 2 три раза через 0,3 сек
4)обратно к пункту 1
попиталса вставить еще 1 таймер аналогично 1му, не работает, хз почему =((

Алексей
15.07.2009, 17:27
Delay блокирует прохождение всех пакетов от сервера и клиента о.О?

TAMBIK
15.07.2009, 17:28
const
Name='ххххх';

var
timer1: TTimer;
x: integer;


procedure OnTimer1(Sender: TObject);
begin

case x of
0: begin
timer1.interval := интервал_через_который_будет_отослан_первый_пакет;
end;

1: begin
buf:=hstr('пакет №1');
SendToServerEx(Name);
timer1.interval := интервал_через_который_будет_отослан_второй_пакет;
end;

2: begin
buf:=hstr('пакет №2');
SendToServerEx(Name);
timer1.interval := интервал_через_который_будет_отослан_третий_пакет;
end;

3: begin
buf:=hstr('пакет №3');
SendToServerEx(Name);
end;

else
begin
timer1.enabled := false;
x := 0;
end;
end;
inc(x);
end;

//************************************************** ****************************
// Вызывается при включении скрипта
//************************************************** ****************************
procedure Init;
begin
x := 0;
timer1:=TTimer.Create(nil);//выделяем памать и т.п.
timer1.OnTimer:=@OnTimer1;//привязываем процедуру к событию
timer1.enabled:=true;//начальное положение true-включен/false-выключен
timer1.interval:=1;//интервал
end;

procedure Free;
begin
timer1.free;
end;

begin
end.


//alexteam: поправил.. малех..

QaK
15.07.2009, 17:36
Алексей, timer1.interval:={сюда пишешь величину паузы в милисекундах};
Погуглить не судьба?

AlbeNeC, остальное сам правь,если кто попросит меня еще что-то в этом скрипте исправить, не являющееся конструктивной доработкой по моему субъективному мнению - дам бан, 7 дней.

Добавлено через 2 минуты
const
Name='nick';
var timer:TTimer;
phase:integer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=100;
timer.OnTimer:=@fireTimer;
timer.enabled:=false;//изначально таймер выключен

phase:=1;//начальная фаза
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
case phase of
1:begin
buf:=hstr('{здесь пакет на таргет гмшопа}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
2:begin
buf:=hstr('{здесь пакет на второй таргет гмшопа}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
3:begin
buf:=hstr('{здесь пакет на выбор магазина}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
4:begin
buf:=hstr('{здесь пакет на покупку нужного кол-ва итемов}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
5:begin
buf:=hstr('{здесь пакет на таргет гк}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
6:begin
buf:=hstr('{здесь пакет на второй таргет гк}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
7:begin
buf:=hstr('{здесь пакет на выбор магазина}');
SendToServerEx(Name);
inc(phase);
timer1.interval:=1000;//1 секунда
end;
8:begin
buf:=hstr('{здесь пакет на обмен}');
SendToServerEx(Name);
phase:=1;//вернулись к началу
timer1.interval:=1000;//1 секунда
end;
end;
end;
begin
if FromClient and (ConnectName=Name) and (pck = HStr('{здесь пакет на старт точки, например социальное действие}' )) then begin
timer.enabled:=true;
end;

if FromClient and (ConnectName=Name) and (pck = HStr('{здесь пакет на стоп точки, например социальное действие}' )) then begin
timer.enabled:=false;
end;

end.

AlbeNeC
15.07.2009, 19:03
спасибо =)))
поправил код, теперь работает ;)
жмакнул "спасибки"
п.с. у тебя в коде есть ошибка, найди сам :p

tiranosaur
07.12.2009, 21:57
А как сделать проверку таймера? типа if (таймер включен) then exit; else then begin (Действие)?

alexteam
07.12.2009, 22:00
if timer.enabled then .... else ....

tiranosaur
15.12.2009, 09:41
Если timer1.interval=1000 то сколько это секунд? Написано вроде 1 но если выставляешь значение 50к то получается почти 2ве минуты

alexteam
15.12.2009, 11:35
50к = 50 сек.

DpblH
22.12.2009, 20:45
прошу помоч мне :(
const

name='ктоКидает';
name2='камуКидают';




var
timer1: TTimer;
x: integer;


procedure OnTimer1(Sender: TObject);
begin




begin
buf:=hstr('42');
writeS(name2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(name);


end;






inc(x);
end;


procedure Init;
begin
x := 0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=true;
timer1.interval:=3000;
end;

procedure Free;
begin
timer1.free;
end;

begin
end.
суть в том чтобы сделать раздачу пати бд свс пп коту или каму угодно. чтобы бд свс бафали каждые 2 минуты с разничей в бафе в 5 секунд. и пп с котом когда угодно.
пытался скрипт на бд свс сделать неполучаеться. либо бд свс одновременно бафают либо вообще нечего хорошего. пробовал запускать с разных скриптов бд свс, окно уходило в дисконект.
помогите плиз

Добавлено через 1 час 23 минуты
const

name='ктоКидает';
name2='бд';
name3='свс';



var
timer1: TTimer;
x: integer;


procedure OnTimer1(Sender: TObject);
begin



case x of
1:begin
buf:=hstr('42');
writeS(name2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(name);
timer1.interval := 5000
end;

2:begin
buf:=hstr('42');
writeS(name3);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(name);

end;



end;
inc(x);

end;
//************************************************** ****************************
// Вызывается при включении скрипта
//************************************************** ****************************
procedure Init;
begin
x := 0;
timer1:=TTimer.Create(nil);//выделяем памать и т.п.
timer1.OnTimer:=@OnTimer1;//привязываем процедуру к событию
timer1.enabled:=true;//начальное положение true-включен/false-выключен
timer1.interval:=125000;//интервал
end;




begin


end.
нипонимаю почему ниработает

QaK
22.12.2009, 23:11
UseForConnectName не прописан

DpblH
24.12.2009, 01:31
QaK пасиб. прописал. но скрипт всё равно работает ни как как я хочу. цыкл в нём неработает. каждые 2 минуты надо посылать два пакета

Добавлено через 4 часа 33 минуты
понял свои ошибки. подправьте если коряво. щас попробую впихнуть кота не в цикл


const

name='ктоКидает';
name2='бд';
name3='свс';



var
timer1: TTimer;
x: integer;



procedure OnTimer1(Sender: TObject);
begin



case x of
1:begin
buf:=hstr('42');
writeS(name2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(name);
inc(x);
timer1.interval := 5000;
end;

2:begin
buf:=hstr('42');
writeS(name3);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(name);
timer1.interval := 125000;
x:=1;
end;




end;


end;
//************************************************** ****************************
// Вызывается при включении скрипта
//************************************************** ****************************
procedure Init;
begin


UseForConnectName:='ктоКидает';
timer1:=TTimer.Create(nil);//выделяем памать и т.п.
timer1.OnTimer:=@OnTimer1;//привязываем процедуру к событию
timer1.enabled:=true;//начальное положение true-включен/false-выключен
timer1.interval:=1000;//интервал
x := 1;
end;

procedure Free;
begin
timer1.free;
end;


begin


end.

UseForConnectName(name); так правельнее будет? через постоянные

Добавлено через 20 часов 45 минут
прошу помоч со скриптом AutoBD_SVS by Ad переделать его для кота.

QaK
24.12.2009, 22:27
DpblH, попробуй сделать старт таймера по тексту в чате или по социальному действию.

DpblH
25.12.2009, 00:19
QaK, вырезать кусок из другого скрипта мне несложно:) но мне это ненадо. мая задача валкер + пнх полный автомат. кач чара офф пати.
мне интересно можно ли настроить баф кота по типу скрипта от AD!
и непроверял работает ли скрипт после релога валкера, и если неработает то сразу вопрос. можно ли сделать чтобы посли релога скрипт продолжал работать?
и хотелось бы узнать по подробнее о том какие пакеты можно пропускать на сервер а какие нет

TAMBIK
25.12.2009, 00:35
можно ли сделать чтобы посли релога скрипт продолжал работать?
чар появился . другим приходит пакет
31=CharInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Nam e)d(Race)d(

DpblH
25.12.2009, 02:47
TAMBIK, хз канешно, но у меня скрипты продолжили работать и без 31=CharInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Nam e)d(Race)d(. еси использовать эту проверку то в какую часть скрипта её ставить?

и ещё вопрос. как настроить wss + wpf + l2walker чтобы он работал с пнх.
было бы ничего еси бы бот от хкора неспамил в общий чат ау :)))) но он спамит, так что решил побегать через wss, но при включеном пнх бот нехочет запускаться

QaK
25.12.2009, 22:54
как настроить wss + wpf + l2walker чтобы он работал с пнх.а вы говорите - гланды через жопу ....

DpblH
26.12.2009, 19:48
а вы говорите - гланды через жопу ....

:)))) а чего так?:D

QaK
28.12.2009, 23:55
DpblH, нафигища тебе связка wss+wpf+phx+walker? ИМХО или wss+wpf или phx ...

DpblH
29.12.2009, 03:18
QaK
опачки. тупанул. тока вот всё адно. как настроить валкер и пнх?

DpblH
02.01.2010, 13:29
С НОВЫМ ГОДОМ!!!! :)
а с помощью каких команд можно сделать проверку на наличие данных персонажий в данном радиусе?