PDA

Просмотр полной версии : проблема с процедурой


kpa9pt
16.01.2010, 01:23
Доброго времени суток тому кто читает.
Собственно проблема:

Пишу скрипт и хочу сделать чтоб при отсылке пакета на сервер(в моём случае чтото написать в чате) пакет не отсылался и слался другой (в моём случае это пакет на соц действие - сесть).
Код вот такой, часть конечно:

begin
if FromClient and (pck[1]=hstr('49')) then begin
pck:='';
buf:=hstr('56 00 00 00 00 00 00 00 00 00');
SendToServerEx(name);
end;
end.

Работает без проблем, но если я положу его в процедуру таймера(не буду писать код дело не в нём, работает если под таймер поставить просто пакет на сесть), то ничего не происходит.
Думаю всё дело что под процедурой стоит условие if...then..begin...end;
Но что делать я не знаю чтоб работало по таймеру...
Подскажите плз.

Fer123
16.01.2010, 12:10
Выложи код может как раз таки дело в нем. Я что то не совсем понял что ты хочешь.

kpa9pt
16.01.2010, 15:24
const
name='brbr';
var
enchant:TTimer;
procedure Init;
begin
enchant:=TTimer.Create(nil);
enchant.OnTimer:=@Onenchant;
enchant.enabled:=true;
enchant.interval:=3000;
end;
procedure Onenchant(Sender: TObject);
begin
if FromClient and (pck[1]=hstr('49')) then begin
pck:='';
buf:=hstr('56 00 00 00 00 00 00 00 00 00');
SendToServerEx(name);
end;
end;
procedure Free;
begin
enchant.Free;
end;
begin

end.


Вот то что под процедурой не работает, но если убрать в процедуре эту строку:

if FromClient and (pck[1]=hstr('49')) then то он каждые 3 секунды нормально садиться и встаёт тоесть всё отлично с таймером.

Ну а если же всё что под процедурой засунуть в тело скрипта тоесть вот так:

const
name='brbr';
var
enchant:TTimer;
procedure Init;
begin
enchant:=TTimer.Create(nil);
enchant.OnTimer:=@Onenchant;
enchant.enabled:=true;
enchant.interval:=3000;
end;
procedure Onenchant(Sender: TObject);
begin
end;
procedure Free;
begin
enchant.Free;
end;
begin
if FromClient and (pck[1]=hstr('49')) then begin
pck:='';
buf:=hstr('56 00 00 00 00 00 00 00 00 00');
SendToServerEx(name);
end;
end.

То работает отлично я пишу чтолибо в чат и он тутже садиться.

Ну и вот собствена проблема как сделать чтоб всё работало с условием тоесть с этой строкой - if FromClient and (pck[1]=hstr('49')) then
и именно в процедуре:

procedure Onenchant(Sender: TObject);
begin
end;

Вот).

alexteam
16.01.2010, 16:45
timer.enabled := true/false

Добавлено через 2 минуты
var
SitStand:TTimer;

procedure Init;
begin
useforconnectname := 'brbr';
SitStand:=TTimer.Create(nil);
SitStand.OnTimer:=@OnSitStand;
SitStand.enabled:=false;
SitStand.interval:=3000;
end;

procedure OnSitStand(Sender: TObject);
begin
buf:=hstr('56 00 00 00 00 00 00 00 00 00');
SendToServer;
end;

procedure Free;
begin
SitStand.Free;
end;

begin
if FromClient then
case pck[1] of
#$49:
begin
SitStand.enabled := not SitStand.enabled;
pck:='';
end;
end;
end.

kpa9pt
16.01.2010, 17:19
О спасиб огромное я позволил себе его немного добавить потому что мне надо было выполнить только единожды и написал так:

var
SitStand:TTimer;

procedure Init;
begin
useforconnectname := 'brbr';
SitStand:=TTimer.Create(nil);
SitStand.OnTimer:=@OnSitStand;
SitStand.enabled:=false;
SitStand.interval:=3000;
end;

procedure OnSitStand(Sender: TObject);
begin
buf:=hstr('56 00 00 00 00 00 00 00 00 00');
SendToServer;
SitStand.enabled:=false;
end;

procedure Free;
begin
SitStand.Free;
end;

begin
if FromClient then
case pck[1] of
#$49:
begin
SitStand.enabled := not SitStand.enabled;
pck:='';
end;
end;
end.