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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 15.03.2008, 18:20   #1
Новичок
 
Регистрация: 08.03.2008
Сообщений: 10
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Xedinsey
По умолчанию Вопрос о delay.

Итак, дорогие друзья. Разъясните нубу плз как устроена эта команда.
Вот смотрите, мне нужно отправить 1 пакет, а через 5с отправить еще 1 пакет. Но, когда я использую команду Delay, задержка действует на все. Т.е. второй пакет высылается через 5с, но в течении этих 5с не принимаются никакие пакеты. А как сделать что бы принимались?
Я пробовал сделать через так называемые "таймеры сквозного прохода", которые указаны в доп командах, но они у меня вобще никакой задержки на отправку пакетов не дают.
Как мне можно организовать такой таймер, что бы после отправки первого пакета принимались серверные пакеты?
Xedinsey вне форума   Ответить с цитированием
Старый 16.03.2008, 00:12   #2
Новичок
 
Регистрация: 27.12.2007
Сообщений: 17
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
dip56245
По умолчанию

в теме "да будет бот" там есть скрипты (например по потрошению рыбы - 3 пост), там пример что бы не тормозила отсылка и прием... посмотри

Добавлено спустя 11 минут 49 секунд:
Код:
    //Автоматизация потрошения рыбы by NLObP
    //Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и  Protocol 656
    //Как только поймаете рыбку, она потрошиться.

    {Disclaimer of Warranty. Unless required by applicable law or
    agreed to in writing, Licensor provides the Work (and each
    Contributor provides its Contributions) on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    implied, including, without limitation, any warranties or conditions
    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    PARTICULAR PURPOSE. You are solely responsible for determining the
    appropriateness of using or redistributing the Work and assume any
    risks associated with Your exercise of permissions under this License.}

    //*******************************************************************
    const
        Name='NLObP'; //имя чара
    //*******************************************************************
    var
      ItemObjID, time1: integer;
      status: boolean;
    //*******************************************************************
    procedure Init; //Вызывается при включении скрипта
    begin
        time1:=0;
        status:=false;
    end;
    //*******************************************************************
    procedure Free; //Вызывается при выключении скрипта
    begin
    end;
    //*******************************************************************
    function Wait(var tick:integer; Timewait: Integer): Boolean;
    // сквозная проверка без остановки скрипта (c)dmitry501
    // modifed by Sh00rGo
    var
      t: integer;
    begin
      result:=false;
      t:=Round(Time*86400);
      if t>(tick+Timewait/1000) then begin
        if tick>0 then result:=true;
        tick:=t;
      end;
    end;
    //*******************************************************************
    procedure UseItem(ObjectID:integer);
    begin
       buf:=#$14;
       WriteD(ObjectID);
       WriteD(0);
       SendToServerEx(Name);
    end;
    //*******************************************************************
    // вызывается при приходе каждого пакета, если скрипт включен
    //*******************************************************************
    begin
      //*******************************************************************
      //не обрабатываем пустые пакеты
      if pck='' then exit;
      //*******************************************************************
      //потрошим рыбу
      //необходимо уточнить ItemID рыб для своего сервера!!!
      if FromServer and (pck[1]+pck[2]=#$27#$01) and (ConnectName=Name) and ((ReadD(12)>=6411) and (ReadD(12)<=6518)) then
      begin
        ItemObjID:=ReadD(8);
        status:=true;
      end;
      //*******************************************************************
      if Wait(time1,2000) and status then begin
        UseItem(ItemObjID);
        status:=false;
      end;
    end.
вот пример кода, захочешь поймешь... )
dip56245 вне форума   Ответить с цитированием
Старый 16.03.2008, 02:15   #3
Новичок
 
Регистрация: 08.03.2008
Сообщений: 10
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Xedinsey
По умолчанию

Что характерно, я как раз с этого примера и брал "таймер". Че-то не работал он у мну.
Xedinsey вне форума   Ответить с цитированием
Старый 16.03.2008, 12:24   #4
Новичок
 
Регистрация: 27.12.2007
Сообщений: 17
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
dip56245
По умолчанию

должно работать - проверял. ) проверь внимательно, скорее всего где -то напарил...
dip56245 вне форума   Ответить с цитированием
Старый 16.03.2008, 15:20   #5
Новичок
 
Регистрация: 08.03.2008
Сообщений: 10
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Xedinsey
По умолчанию

procedure Init; //Вызывается при включении скрипта
begin
t1:=0;
end;

function Wait(var tick:integer; Timewait: Integer): Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501
// modifed by Sh00rGo
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait/1000) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;

begin
if FromClient and (pck[1]=#$38) and (pck[2]=#$2D) then
begin
sCom:=ReadS(4);
Com:=copy(sCom,1,8);
if Com='clossell' then begin
buf:=HStr('73');
SendToServer;
if wait(t1,2000) then begin
buf:=HStr('76');
SendToServer;
end;
pck:=nil;
end;
end;
end.

Пакет 76 вобще не отправляется. Пробовал уже в различных вариациях. Та же фигня.
Xedinsey вне форума   Ответить с цитированием
Старый 16.03.2008, 15:58   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: Вопрос о delay.

Этот кусок должен стоять в главном цикле BEGIN ... END. и его нельзя вставлять в другие условия проверки, иначе до него очередь не дойдет или пропустишь его.
Код:
begin
  ...
  if wait(t1,2000) then begin
    buf:=HStr('76');
    SendToServer;
  end;
  ...
end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 17.03.2008, 11:34   #7
Новичок
 
Регистрация: 08.03.2008
Сообщений: 10
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Xedinsey
По умолчанию Re: Вопрос о delay.

Цитата:
Сообщение от NLObP
Этот кусок должен стоять в главном цикле BEGIN ... END. и его нельзя вставлять в другие условия проверки, иначе до него очередь не дойдет или пропустишь его.
Хорошо, как мне сделать, что бы при вводе команды с клавиатуры -clossell, у меня отправлялся пакет 73, а через 2с пакет 76, но при этом за эти 2с принимались другие пакеты?
Кусок "wait" у меня итак стоит в основном теле скрипта, но мне ведь нужно что бы пакеты отправлялись только при наборе -clossell, а как можно это сделать что бы не было условий проверки?
Xedinsey вне форума   Ответить с цитированием
Старый 17.03.2008, 13:31   #8
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: Вопрос о delay.

Цитата:
Сообщение от Xedinsey
Хорошо, как мне сделать, что бы при вводе команды с клавиатуры -clossell, у меня отправлялся пакет 73, а через 2с пакет 76, но при этом за эти 2с принимались другие пакеты?
Кусок "wait" у меня итак стоит в основном теле скрипта, но мне ведь нужно что бы пакеты отправлялись только при наборе -clossell, а как можно это сделать что бы не было условий проверки?
Могу предложить только использовать доп. флаг, который будет указывать, что команда -clossell пришла.
Код:
t1:=0;

begin

if FromClient and (pck[1]=#$38) and (pck[2]=#$2D) then begin
  if ReadS(4)='-clossell' then begin
     status:=true;
     buf:=HStr('73');
     SendToServer;
     pck:=nil;
  end;
end;

if wait(t1,2000) and (status=true) then begin
  buf:=HStr('76');
  SendToServer;
end;

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


NLObP вне форума   Ответить с цитированием
Старый 17.03.2008, 19:40   #9
Новичок
 
Регистрация: 08.03.2008
Сообщений: 10
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Xedinsey
По умолчанию

Код:
begin
if FromClient and (pck[1]=#$38) and (pck[2]=#$2D) then begin
  sCom:=ReadS(4);
  com:=copy(sCom,1,8);
  if com='clossell' then begin
     status:=true;
     buf:=HStr('73');
     SendToServer;
     pck:=nil;
  end;
end;

if wait(t1,2000) and (status=true) then begin
  buf:=HStr('76');
  SendToServer;
end;

end.
Если так, то посылается пакет 73, получаются другие (все нормально), через 2с посылается пакет 76. НО, потом еще каждые 2с посылается пакет 76... %)

Код:
begin
if FromClient and (pck[1]=#$38) and (pck[2]=#$2D) then begin
  sCom:=ReadS(4);
  com:=copy(sCom,1,8);
  if com='clossell' then begin
     status:=true;
     buf:=HStr('73');
     SendToServer;
     pck:=nil;
  end;
end;

if wait(t1,2000) and (status=true) then begin
  buf:=HStr('76');
  SendToServer;
  status:=false;
end;

end.
Если так, то оба пакета посылаются одновременно, т.е. таймер не срабатыват.
Вот такая вот дрочь... Что делать, ума не приложу.

Там кто-то в полезных функциях писал таймер, который выполняется не в основном потоке, но в коде ошибка когда ссылается на указатель nil^.
Xedinsey вне форума   Ответить с цитированием
Старый 18.03.2008, 12:17   #10
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Xedinsey
Код:
begin
if FromClient and (pck[1]=#$38) and (pck[2]=#$2D) then begin
  sCom:=ReadS(4);
  com:=copy(sCom,1,8);
  if com='clossell' then begin
     status:=true;
     buf:=HStr('73');
     SendToServer;
     pck:=nil;
  end;
end;

if wait(t1,2000) and (status=true) then begin
  buf:=HStr('76');
  SendToServer;
end;

end.
Если так, то посылается пакет 73, получаются другие (все нормально), через 2с посылается пакет 76. НО, потом еще каждые 2с посылается пакет 76... %)
Трудно флаг статус в FALSE сбросить? :twisted:

Код:
if wait(t1,2000) and (status=true) then begin
  buf:=HStr('76');
  SendToServer;
  status:=false;
end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Ответ

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


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

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

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


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

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

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