Тема: BuffBot
Показать сообщение отдельно
Старый 31.07.2008, 04:01   #49
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

все можно исправить...
протестируйте
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 - теперь они не нужны.
тока я все это не тестю. т. к. не особо ботовод, и БД у мну нет

Последний раз редактировалось PanAm, 31.07.2008 в 04:01. Причина: Добавлено сообщение
PanAm вне форума   Ответить с цитированием
За это сообщение PanAm нажился спасибкой от: