Показать сообщение отдельно
Старый 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 спасибками от: