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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 24.12.2011, 20:13   #1
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию пишем свой нубский скрипт для автоточки

сервер в дауне... и лежать будет незнамо сколько. решил я создать тему-конкурс о создании нубского скрипта для автоточки для любого сервера, где работает l2ph, с подробным расписыванием что нам нужно и как и где и почему. дабы любой смог бы подправить его для своего сервера без проблем. тема будет в виде конкурса для новичков, с заданиями найти что-то на форуме и скопипастить с нужными поправками в эту тему.




задание первое:
для начала нам нужен механизм отправки пакетов из l2ph на сервер. (он стандартный для всех серверов). выкладывайте кусочек кода, которым можно отправить что-то на сервер
правильный ответ: NLObP
delphi Код:
buf:=hstr('0F'); SendToServerEx(Name);
buf - это переменная, в которую мы записываем информацию, которую надо отправить на сервер.

hstr('0F') - путем применения hstr мы записываем в нашу переменную buf кусочек информации (в данном случае коротенький пакет 0F) в понятном виде для сервера.
buf:=0F; неправильно
buf=hstr(0F); неправильно

SendToServerEx(Name); - этой командой мы посылаем buf на сервер. причем посылаем от имени конкретного клиента Name - это нужно для того, если у вас запущено 2-3 окна, чтобы l2ph не путался от какого именно окна посылать данные серверу.





задание второе:
привести кусочек кода для оператора если - if
правильный ответ: Pinko & NLObP
delphi Код:
if (STAKAN=0) then begin // если стакан пуст, то начать следующие операции    STAKAN:=1;            // налить end else begin // в случае, если стакан изначально полон,            //то срабатывает эта часть кода        STAKAN:=0; //выпить и закусить=) end;
здесь мы рассматриваем сложный оператор если - if - сложный то есть с двумя значениями "если равно" и "если не равно" (else).
важная деталь что тут два end, причем первый должен быть обязательно без точки с запятой.

в случае простого if код будет выглядеть чуть чуть по другому:
delphi Код:
if (STAKAN=0) then begin // если стакан пуст, то начать следующие операции    STAKAN:=1;            // налить end;

бывают случаи когда нужно провести проверку сразу двух параметров - то здесь нам поможет and. выглядит он следующим образом:
delphi Код:
if (STAKAN=0) and (ZAKUSKA=0) then begin // если стакан пуст и нет закуски, то начать следующие операции    STAKAN:=1;            // налить    ZAKUSKA:=1;           // достать банку с огурцами end;

бывают случаи когда нам нужно или - если это равно чему-то или если вон то равно чему-то. в этом случае нам поможет or:
delphi Код:
if (STAKAN=0) or (ZAKUSKA=0) then begin // если стакан пуст или нет закуски, то начать следующие операции    STAKAN:=1;           // налить    ZAKUSKA:=1;          // достать банку с огурцами end;

со всеми вариантами if - если - есть важная деталь. в самом if сравнение следует писать без двоеточия! это наиболее частая ошибка новичков. пример неправильного синтаксиса:
if (STAKAN:=0) then begin

также следует помнить какого типа наша переменная STAKAN - цифровая или текстовая. если STAKAN изначально текстовая, то сравнить текст с цифрой не получится. нужен будет вариант с апострофом:
delphi Код:
// если STAKAN текстовая переменная то if (STAKAN=0) then begin    // не правильно! if (STAKAN='0') then begin  // правильно.  




задание третье:
нужен пример таймера. задача сложная
правильный ответ: Breadfan
немного промодифицируем (пронубируем, чтоб понятнее было), и добавим пошаговость таймеру:
delphi Код:
var //var это блок, где объявляются переменные и определяется их тип. Timer01: TTimer; // указываем что Timer01 это таймер (TTimer) a:integer; // a - это цифровая переменная integer // на будущее *:string; - текстовая переменная procedure OnTimer01(Sender: TObject); // наша процедура по таймеру  begin  Timer01.interval := 1000+round(random()*1000); // каждый раз у нас будет рандомный промежуток времени от одной до двух секунд.                                                 // нужно для "очеловечивания" нашего скрипта, чтобы не спалили злые админы :)                                                 // random()*1000 - случайное число от 0 до 1000                                                 // round(random()*1000) - округление того случайного числа до ближайшего целого.                                                 // например рандом выбрал 352,2456575474 - нахрена нам эти знаки после запятой? вот и округляем.  case a of // проверка цифровой переменной a и отфутболивание на нужный пункт            // по сути наша а это метка для управления шагами в таймере.            // то есть через эту переменную а мы можем запросить конкретный шаг таймера, когда он тикнет в следующий раз   1:begin      buf:=''; // что-то мы записываем для отправки      SendtoserverEx(Name); // отправляем на сервер наш buf от конкретного игрока - Name      inc(a); // увеличение цифровой переменной a на +1,              // то есть переключение на следующий пункт таймера, когда таймер сработает на следующий раз     end;   2:begin      buf:='';      SendtoserverEx(Name);      inc(a);     end;  end; end; procedure Init; // при старте скрипта производятся следующие операции begin  Timer01:=TTimer.Create(nil);  Timer01.OnTimer:=@OnTimer01;  Timer01.enabled:=true// таймер включен  Timer01.interval:=1000; // начальный таймер у нас составляет 1 секунду  // все эти четыре строчки касаются только таймера  // но помимо таймера здесь могут быть и другие начальные данные, нужные для старта скрипта. end; procedure Free; //Вызывается при выключении скрипта begin  Timer01.enabled:=false; // таймер отключаем end; begin // тут код, который будет выполнятся по приходу каждого пакета end.




задание четвертое:
нужны пакеты inventory update с пометкой что было куплено (на 2 предмета +шмотка -адена)
action - наведение таргета на любого нпс.
пакет useitem на использование любого предмета
которые мы потом разберем на составляющие

народ пошел нынче ленивый... самому придется приводить пример пакета инвентори апдейт и расписывать его содержимое.

итак! сам пакет:
Оффтоп

в поле л2пх видно его расшифровку. так что же нам полезно из той информации, что там расписано?

(эти имайж хостинги просто заепли удалять нужные картинки)
в кратце, при покупке лука, в инвентаре произошло два изменения. первое - исчезла одна аденка - цена стоимости лука, и появился сам лук. в количестве одна штука и не заточен.
нам интересен пункт ObjectId - в данном случае 1075488020 это есть уникальный номер лука на данном сервере игры. запомним, он нам понадобится. хотя точнее нам понадобится его хекс вариант 14 A5 1A 40 дабы не парится насчет всяких там преобразований...

изменяем четвертое задание: следует расписать точно также пакет с покупкой точки - что пришло, что ушло и найти ObjectId для заточки.
__________________
хочу картинку в подпись!

Последний раз редактировалось SeregaZ, 23.09.2013 в 20:12.
SeregaZ вне форума   Ответить с цитированием
За это сообщение SeregaZ нажился 4 спасибками от:
Старый 25.12.2011, 01:26   #2
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от SeregaZ Посмотреть сообщение
кусочек кода, которым можно отправить что-то на сервер
delphi Код:
//Пакет RequestItemList   buf:=hstr('0F');   SendToServerEx(Name);
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 25.12.2011, 02:03   #3
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

нечестно! конкурс для новичков, а не для корифеев программирования
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 25.12.2011, 20:45   #4
Местный
 
Аватар для Pinko
 
Регистрация: 31.05.2011
Сообщений: 130
Сказал Спасибо: 287
Имеет 23 спасибок в 22 сообщенях
Pinko пока неопределено
По умолчанию

задание второе:
привести кусочек кода для оператора если - if
if (STAKAN=0) the // ежли стакан пуст
begin // налить
__________________
Никого нельзя ничему научить,
но всему можно научиться

народная мудрость

"Если любишь в жизни риск - форматируй жесткий диск!"
Pinko вне форума   Ответить с цитированием
Старый 25.12.2011, 21:29   #5
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

end
else \\ стакан полон
begin
.. \\выпить и закусить=)
end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 25.12.2011, 22:20   #6
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

нет новичков... никому не интересно свой собственный скрипт наваять... все приходят за готовыми

ооо! предлагаю идею! при нажатии на кнопку "скачать скрипт" - вылазила программа с дибровым-галкиным - кто хочет стать миллионером с вопросами и вариантами ответов. если пользователь ответит на 3 из 4 - то скачка ему разрешается
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
За это сообщение SeregaZ нажился 3 спасибками от:
Старый 27.12.2011, 02:32   #7
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

завтра придется самому ответить ну четвертое задание будет простое.
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 27.12.2011, 12:24   #8
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

таймер, с рендомным интервалом:
Оффтоп
а заодно - удобнее было бы сделать stakan - булевым, используя его без всяких =0\=1
delphi Код:
if (STAKAN=0) or (ZAKUSKA=0) then begin // если стакан пуст или нет закуски, то начать следующие операции    STAKAN:=1;            // налить    ZAKUSKA:=1;          // достать банку с огурцами end;
код неверен. если стакан налит но закуски нет - все равно нальет в стакан.
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?

Последний раз редактировалось Breadfan, 28.12.2011 в 06:41.
Breadfan вне форума   Ответить с цитированием
Старый 27.12.2011, 16:51   #9
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

delphi Код:
if (STAKAN=0) or (ZAKUSKA=0) then begin // если стакан пуст или нет закуски, то начать следующие операции    STAKAN:=1;            // обновить    ZAKUSKA:=1;          // доложить огурцов в тарелку end;

пофиксил
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 27.12.2011, 17:24   #10
Пользователь
 
Аватар для kolr
 
Регистрация: 24.11.2009
Сообщений: 75
Сказал Спасибо: 5
Имеет 6 спасибок в 6 сообщенях
kolr пока неопределено
По умолчанию

с таймером както так
Код:
var
  Timer01: TTimer;
  Timer02: TTimer;
  Timer03: TTimer;


procedure OnTimer01(Sender: TObject);
begin
  {делаем дела}
  Timer01.enabled:=false;
end;


procedure OnTimer02(Sender: TObject);
begin
 
  {делаем дела}
 Timer02.enabled:=false;
 Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin

  {делаем дела}
 Timer03.enabled:=false;
end;


procedure Init;
  begin
  Timer01:=TTimer.Create(nil);
 Timer01.OnTimer:=@OnTimer01;
 Timer01.enabled:=false;
 Timer01.interval:=500;

 Timer02:=TTimer.Create(nil);
 Timer02.OnTimer:=@OnTimer02;
 Timer02.enabled:=false;
 Timer02.interval:=500;

 Timer03:=TTimer.Create(nil);
 Timer03.OnTimer:=@OnTimer03;
 Timer03.enabled:=false;
 Timer03.interval:=3700;
 end;

procedure Free;
begin
  Timer01.free;
  Timer02.free;
  Timer03.free;
end;

Последний раз редактировалось kolr, 27.12.2011 в 17:27.
kolr вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра

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

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


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

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

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