Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 30.07.2008, 17:28   #41
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

Код:
4A=Say2:h(ObjectID)d(Type)s(From)s(Message)
ObjectID - Пропускаем
Type - можно пропустить
From - Ник написавшего, то что надо
Message - сообщение
Все строки передаются в формате UNICode, тоесть например "Amorality" будет - "41 00 6D 00 6F 00 72 00 61 00 6C 00 69 00 74 00 79 00" + "00 00"
ReadS() считывает эту строку уже в формате String "Amorality" = "41 6D 6F 72 61 6C 69 74 79"
Теперь попробуем написать скрипт
Delphi Код:
var    i:integer; begin   In FromServer and (pck[1]=#$4A) then begin     i := 10; //Имя с 10 байта     if ReadS(i) = 'Amorality' then //Считываем, сравниваем и увеличиваем i на длину ника       if ReadS(i) = 'dence me plz' then //Считываем, сравниваем сообщение          ....И понеслось   end; end.
Вот примерно так
это не совсем рабочий пример
Например - написав сообщение, вы получите этот пакет в оба окна, надо вставлять еще проверку на соединение (ConnectName)

Последний раз редактировалось PanAm, 30.07.2008 в 17:33.
PanAm вне форума   Ответить с цитированием
За это сообщение PanAm нажился спасибкой от:
Старый 30.07.2008, 18:09   #42
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Блин , сама хотела написать , ну спасибо ) Допишу еще , конект нейм и тип пати и буду использовать еще раз спасибо

Добавлено через 13 минут
var
i:integer;
o:integer;
begin
If FromServer and (ConnectName='BDGirl') and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
if ReadS(i) = 'Amorality' then //Считываем, сравниваем и увеличиваем i на длину ника
if ReadS(i) = '-dance' then //Считываем, сравниваем сообщение
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
end;
If FromServer and (ConnectName='BDGirl') and (pck[1]=#$4A) then begin
i:= 10; //Имя с 10 байта
o:=11; //ник вроде как 11 длинной
if ReadS(o) = 'Amorality2' then //Считываем, сравниваем и увеличиваем i на длину ника
if ReadS(o) = '-dance' then //Считываем, сравниваем сообщение
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
end;
end.

---
Я немного видоизменила скрипт , верен ли он? Задача скрипта .. Бд с ником BDGirl танцует , если в чат Amorality или Amorality2 напишет -dance

Последний раз редактировалось Amorality, 30.07.2008 в 18:11. Причина: Добавлено сообщение
Amorality вне форума   Ответить с цитированием
Старый 30.07.2008, 18:52   #43
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

Не правильно ReadS(i) автоматом увеличивает i на длину строки
o:integer просто лишне.
длина "Amorality2" 10*2+2
тело внитри условия одинаково, лучше тогда так
delphi Код:
var    Commandir : string; .......     i := 10; //Имя с 10 байта     Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника     if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем       if ReadS(i) = '-dence' then begin//Считываем, сравниваем сообщение          buf:=hstr('2F 11 01 00 00 00 00 00 00 00');         SendToServer;       end; ........

Добавлено через 4 минуты
Вот и начинается интересное
вы получили один танец на команду, теперь есть 2 пути -
1. В лоб размножить скрипт и давать отдельную команду на каждый танец.
2. Подумать как танцевать серию танцев
Для примера можно почитать тут
http://coderx.ru/showthread.php?t=14
и тут http://coderx.ru/showthread.php?t=397

Последний раз редактировалось PanAm, 30.07.2008 в 18:54. Причина: Добавлено сообщение
PanAm вне форума   Ответить с цитированием
За это сообщение PanAm нажился спасибкой от:
Старый 30.07.2008, 19:03   #44
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Цитата:
Сообщение от PanAm Посмотреть сообщение
Вот и начинается интересное
вы получили один танец на команду, теперь есть 2 пути -
А так нельзя?
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
buf:=hstr('2F 14 01 00 00 00 00 00 00 00');
SendToServer;
----

ПС А на счет варианта твоего последнего скрипта , будет ли правильно , что ты не описал переменную i в разделе Var?
Amorality вне форума   Ответить с цитированием
Старый 30.07.2008, 19:06   #45
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от Amorality Посмотреть сообщение
А так нельзя?
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
buf:=hstr('2F 14 01 00 00 00 00 00 00 00');
SendToServer;
нет, сервер максимум два подряд идущих пакета на юз скил обработает и в результате выполнит тока первый и последний если будет больше двух...

Цитата:
Сообщение от Amorality Посмотреть сообщение
ПС А на счет варианта твоего последнего скрипта , будет ли правильно , что ты не описал переменную i в разделе Var?
а он там и не скрипт указал а тока новые или измененные части так что i естесно надо обьявлять)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 30.07.2008, 19:34   #46
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Код:
var
   i,x : integer;
   Commandir : string;
   Bissy : Boolean;
begin
  case x of
    1: begin //Блок магического танца начался
     buf:=hstr('2F 11 01 00 00 00 00 00 00 00'); //Dance Of Mystic
     SendToServer; 
     inc(x);
     Bissy:=true;
     end;
     2: begin
     buf:=hstr('2F 14 01 00 00 00 00 00 00 00'); //Dance Of Concentration
     SendToServer; 
     inc(x);
     Bissy:=false;
     end;
     3: begin //Блок воинского танца начался
     buf:=hstr('2F 0F 01 00 00 00 00 00 00 00'); //Dance Of Warrior
     SendToServer; 
     inc(x);
     Bissy:=true;
     end;
     4: begin
     buf:=hstr('2F 13 01 00 00 00 00 00 00 00'); //Dance Of Fury
     SendToServer; 
     inc(x);
     Bissy:=true;
     end;
     5: begin
     buf:=hstr('2F 12 01 00 00 00 00 00 00 00'); //Dance Of Fire
     SendToServer; 
     inc(x);
     Bissy:=false;
     end;
end;
end.

begin
  If FromServer and (pck[1]=#$4A) then begin
   i := 10; //Имя с 10 байта
    Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
    if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем 
      if ReadS(i) = '-mdance' then begin //Считываем, сравниваем сообщение
      if not Bissy then begin
      x:=1; //Ссылка на блок с магическим дансом
     end;
end;
end;
end;
end;

begin
  If FromServer and (pck[1]=#$4A) then begin
   i := 10; //Имя с 10 байта
    Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
    if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем 
      if ReadS(i) = '-wdance' then begin //Считываем, сравниваем сообщение
      if not Bissy then begin
      x:=3; //Ссылка на блок с воинским дансом
     end;
end;
end;
end;
end;
Вот написала скрипт , его задача, если чар Amorality или Amorality2 пишет в чат -mdance , То BDGirl бафает 2 данса: Mystic и Concentration , а есле -wdance , то BDGirl бафает 3 данса : Fury,warrior,fire.

В общем я почти уверена , что скрипт написан не правильно , поправьте пожалуйста , потестить сама не могу , сервер , где я играю на профилактике до сих пор.

Последний раз редактировалось Amorality, 30.07.2008 в 22:20.
Amorality вне форума   Ответить с цитированием
Старый 30.07.2008, 21:57   #47
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

да, к сожелению. все неверно...
PanAm вне форума   Ответить с цитированием
Старый 30.07.2008, 22:19   #48
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Совсем все? Ну ладно если это уже не поправить , то буду водить ботов макросами в пати чат , туда вроде нету ограничений

Добавлено через 5 минут
Хм , сунула скрипт в l2phx , ошибок нету , запускается , но попробовать на деле к сожалению не могу .. Может все таки его можно исправить?

Последний раз редактировалось Amorality, 30.07.2008 в 22:19. Причина: Добавлено сообщение
Amorality вне форума   Ответить с цитированием
Старый 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 нажился спасибкой от:
Старый 02.08.2008, 02:08   #50
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Абис заработал , ПНХ тоже , удалось потестить , все отлично работает..
Собираюсь еще написать скрипт для ЕЕшки , но вот вопрос , как заставить чара с ником EvasS взять ассист(проще говорю взять тот же таргет) на моего мейна (Amorality) ?
Порылась в описаниях к пакетам нашла несколько:
A6=MyTargetSelected
29=TargetSelected

Потом решила выделить чара и поймать пакет , поймался пакет Action , Решила я его разобрать , но ник там вроде не указывается , хотя можно попробовать (я думаю) реализовать через ObjectID , состав:
04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ActionID)

Других идей нет , может кто-нибуть подскажет , спасибо заранее

Добавлено через 3 минуты
А вот еще что , когда используешь Assist и ловишь пакеты , то от сервера приходит пакет Attack , клиент ничего не посылает , а если у этого чара кто-то выделен и ассист удался , то клиент посылает Action

Добавлено через 28 минут
Ага , все ясно , разобралась с пакетом (04) Action .. Вижу только этот способ реализации того , что я хочу , просто нужно будет запомнить ID человека , выделяемого мейном и составить пакет Action для бота , даже уже знаю как реализовать , хоть 1 скрипт сама напишу

Последний раз редактировалось Amorality, 02.08.2008 в 02:08. Причина: Добавлено сообщение
Amorality вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:12.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!