все можно исправить...
протестируйте
delphi Код:
const
NickName = 'BDGirl'; // Ник сменить на ник БД
var
timer1 : TTimer;
i, x : integer;
Bissy: Boolean;
Commandir, Command : string;
procedure OnTimer; //Последовательность танцев
begin
case x of
1: begin
buf:=hstr('2F 11 01 00 00 00 00 00 00 00'); //Dance Of Mystic
SendToServerEx(NickName);
inc(x);
end;
2: begin
buf:=hstr('2F 14 01 00 00 00 00 00 00 00'); //Dance Of Concentration
SendToServerEx(NickName);
x:=0; //Последовательность сбрасываем
Bissy:=False; //БД свободен
timer1.enabled:=false; //таймер отключаем
end;
3: begin
buf:=hstr('2F 0F 01 00 00 00 00 00 00 00'); //Dance Of Warrior
SendToServerEx(NickName);
inc(x);
end;
4: begin
buf:=hstr('2F 13 01 00 00 00 00 00 00 00'); //Dance Of Fury
SendToServerEx(NickName);
inc(x);
end;
5: begin
buf:=hstr('2F 12 01 00 00 00 00 00 00 00'); //Dance Of Fire
SendToServerEx(NickName);
x:=0;
Bissy:=False;
timer1.enabled:=false;
end;
end;
end;
procedure Init;
begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=2000; //интервал между танцами 2 сек
Bissy :=false;
x:=0;
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer1.free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=NickName) and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
Command := ReadS(i); //Сохранили комманду
if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //Проверяем что комманда от начальника
if not Bissy then begin //проверяем, что БД не занят
case Command of
'-mdance' : x :=1; //последовательность танцев 1-2
'-wdance' : x :=3; //последовательность танцев 3-4-5
end;
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end; //not Bissy
end; //FromServer and (pck[1]=#$4A)
end.
Добавлено через 4 часа 30 минут
А вот еще немножко подумав...
ваш чар и бот находятся на одном компе, зачем палится и посылать команды в чат через сервер? чтоб админу было легче ботов вычислить?
Значит надо отлавливать не 4A пакет с сервера, а пакет 38 с клиента, обрабатывать его и удалять, чтоб на сервер он не шел...
и сного переписываем основной скрипт
delphi Код:
begin
if FromClient and (pck[1]=#$38) then //say2 От клиента (боты не говорят)
if not Bissy then begin //проверяем, что БД не занят
case ReadS(2) of //Считываем команду
'-mdance' : begin
x :=1; //последовательность танцев 1-2
pck :=''; //не палимся
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end;
'-wdance' : begin
x :=3; //последовательность танцев 3-4-5
pck :=''; //не палимся
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end;
end; //case
end; //not Bissy
end.
вот примерно так
заодно убираем в начале описание Commandir, Command - теперь они не нужны.
тока я все это не тестю. т. к. не особо ботовод, и БД у мну нет