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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2008, 13:52   #11
Новичок
 
Регистрация: 03.01.2008
Сообщений: 8
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Shnaider
По умолчанию

Может кто то,кому нетрудно переделать Юлин скрипт,так чтобы он был привязан к одному нику?,а то немогу играть в 2 окна,скрипт начинает издеваться над титулом основного чара.И ещё(если кто то конечно за это возьмётся просто так)сделать чтобы рассказывался анекдот не за то что у меня чтото купят,а наоборот продадут.Сам этого сделать точно несмогу,так как неразбираюсь,я только в титуле переписал "ANEKDOTI"на "Анекдоты" и текст обращения к игрокам,а больше ничего незнаю :oops:
Shnaider вне форума   Ответить с цитированием
Старый 15.01.2008, 15:02   #12
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Shnaider
Может кто то,кому нетрудно переделать Юлин скрипт,так чтобы он был привязан к одному нику?,а то немогу играть в 2 окна,скрипт начинает издеваться над титулом основного чара.И ещё(если кто то конечно за это возьмётся просто так)сделать чтобы рассказывался анекдот не за то что у меня чтото купят,а наоборот продадут.Сам этого сделать точно несмогу,так как неразбираюсь,я только в титуле переписал "ANEKDOTI"на "Анекдоты" и текст обращения к игрокам,а больше ничего незнаю :oops:
Код:
// copyright (c) 2006, 2007 Puella
//модифицировано by NLObP
//Может работать одновременно несколько скриптов.
//Необходимо изменить константу MyNAME!!!

{суть проста, программа ведет учет всех персов в округе, когда по вашему
персу-торговцу кликают, она пишет в френдчат ему предложение купить стрелу
и обешание за это рассказать анекдотик. за покупку программа конечно же как
и обешала рассказывает анекдотик. как показывает практика, самая идеальная
цена чтобы клиенты купили как можно больше ваших стрел, для х1 - это не
более 3к, для х5 - 10к. а для привлечения внимания именно к вашему
торговцу, в титуле (для этого вам надо быть в клане) постоянно мигает
рожица и надпись "АНЕКДОТЫ". Все анекдоты грузяться с папки c:\l2jokes (в
аттаче уже готовый архив с 237 анекдотами), каждый анекдот в отдельном
файле, не более 255 символов}

const
  MyName='впиши_сюда_имя чара';
  jokes_max = 237;

var
  curpos: byte;
  TITLE_DATA2: array [0..16] of string;
  f: TStringList;
  jokes: array [1..jokes_max] of string;
  jokes_real: integer;
  IDs: array [1..2000] of cardinal;
  Names: array [1..2000] of String;
  count: Integer;
  MyID: Cardinal;
  //MyName: String;

  frm: TForm;
  m: TMemo;
  t: TTimer;

  InTimer: Boolean;

procedure OnTimerProc;
begin
  InTimer := true;
  buf := #$55;
  WriteS(MyName);
  WriteS(TITLE_DATA2[curpos]);
  SendToServerEx(MyName);

  curpos := curpos + 1;
  if curpos > 16 then curpos := 0;

  InTimer := false;
end;

procedure Init;
var i: byte;
begin
  randomize;
  count := 0;

  f := TStringList.Create;
  jokes_real := 0;
  for i := 1 to jokes_max do
  begin
    try
      f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt');
      jokes_real := jokes_real + 1;
    except
    end;
    jokes[jokes_real] := f.Text;
  end;
  f.free;

  TITLE_DATA2[0] := '@(o_O)@';
  TITLE_DATA2[1] := '@(O_o)@';
  TITLE_DATA2[2] := '@(o_O)@';
  TITLE_DATA2[3] := '@(O_o)@';
  TITLE_DATA2[4] := '';
  TITLE_DATA2[5] := 'ANEKDOTI';
  TITLE_DATA2[6] := '';
  TITLE_DATA2[7] := 'ANEKDOTI';
  TITLE_DATA2[8] := '';
  TITLE_DATA2[9] := 'ANEKDOTI';
  TITLE_DATA2[10] := '';
  TITLE_DATA2[11] := '@(o_O)@';
  TITLE_DATA2[12] := '@(O_o)@';
  TITLE_DATA2[13] := '@(o_O)@';
  TITLE_DATA2[14] := '@(O_o)@';
  TITLE_DATA2[15] := '@(o_O)@';
  TITLE_DATA2[16] := '@(O_o)@';

  curpos := 0;

  t := TTimer.Create(nil);
  t.Enabled := false;
  t.Interval := 2000;
  t.OnTimer := @OnTimerProc;

  //форма
  frm := TForm.Create(nil);
  frm.Caption := 'L2Jokes '+MyName;
  frm.BorderStyle := bsSizeable;
  frm.Position := poScreenCenter;
  frm.Width:=500;
  frm.Height:=500;

  m:=TMemo.Create(frm);
  m.parent:=frm;
  m.align:=alClient;
  m.ReadOnly:=true;
  m.ScrollBars:=ssBoth;
  m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));

  frm.Show;
end;

procedure Free;
begin
  m.Free;
  frm.Free;

  t.OnTimer := nil;
  t.Enabled := false;
  t.Interval := 0;
  t.Free;
end;

function FindPlayer(ObjID: cardinal): integer;
var k: cardinal;
begin
  result := -1;
  if Count > 0 then
    for k := 1 to Count do
      if IDs[k] = ObjID then
      begin
        result := k;
        break
      end;
end;

var
  i, k: integer;
  objid: cardinal;
  name: string;
begin
  if (ConnectName=MyName) and FromServer then
  case pck[1] of
    #$64:
    begin
      i := 2;
      if ReadD(i) = 380 then {S1_PURCHASED_S3_S2_s}
      begin
        i := i + 4*2;
        name := ReadS(i);
        if (name = '') then
        begin
          // внесем в лог (blacklist)
          m.Lines.Add(TimeToStr(now)+': '+name+' purchased (BLACKLISTED)');
        end
        else
        begin
          while (InTimer = true) do i := i;

          buf := #$CC;
          i := int(random * jokes_real) + 1;
          WriteS(jokes[i]);
          WriteS(name);
          SendToServerEx(MyName);

          if (Length(m.Lines.Text) > 60000) then m.Lines.Text := '<cleared>';
          // внесем в лог
          m.Lines.Add(TimeToStr(now)+': '+name+' purchased');
          m.Lines.Add('> ' + jokes[i]);
        end;
      end
    end;

    #$03: // CharInfo
    begin
      i := 4 + 4 * 4 - 2;
      objid := ReadD(i);

      i := FindPlayer(ObjID);

      if i = -1 then
      begin
        i := 4 + 4 * 5 - 2;
        name := ReadS(i);
        // blacklist
        if (name = '') then
        begin
          // (none)
        end
        else begin
          // добавление
          count := count + 1;
          IDs[count] := ObjID;
          Names[count] := name;
          //m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]);
        end;
      end;
    end;

    #$04: //UserInfo
    begin
      i := 2 + 4*4;
      MyID := ReadD(i);
      //MyName := ReadS(i);
      t.Enabled := true;
    end;

    #$12: // ObjectDelete
    begin
      i := 2;
      objid := ReadD(i);

      i := FindPlayer(objid);

      if i <> -1 then
      begin
        IDs[i] := IDs[count];
        Names[i] := Names[count];
        count := count - 1;
      end
    end;

    #$29: //TargetSeleted
    begin
      i := 2;
      objid := ReadD(i);

      if ReadD(i) <> MyID then exit;

      i := FindPlayer(objid);

      if i <> -1 then
      begin
        while (InTimer = true) do i := i;

        buf := #$CC;
        WriteS('Привет, '+names[i]+'! Я '+MyName+'! Купи у меня стрел и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
        WriteS(names[i]);
        SendToServerEx(MyName);
        // внесем в лог
        m.Lines.Add(TimeToStr(now)+': '+names[i]);
      end
    end;
  end;
end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 24.02.2008, 22:14   #13
Гость
 
Сообщений: n/a
По умолчанию

Код:
procedure Pause2(Timewait: Integer);
var
 begin_time: double;
begin
  begin_time:=now;
  while Trunc(86400000*(now-begin_time))<TimeWait do ;
end;
Использовать как delay -> возврат из функции будет только после выполнения условия.
  Ответить с цитированием
Старый 25.02.2008, 16:36   #14
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

OllyDbg, а собсно зачем она если есть delay?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 26.02.2008, 20:27   #15
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию Re:

Цитата:
Сообщение от rexx
xkor, подскажи плиз как запустить скрипт для автоматической сдачи манора, никак не могу понять... там вроде и описано...но чет неполучается никак :(
rexx ты попробуй есчё раз прочитать.. особенно первые строчки там про автора написано прямым текстом и попробуй тупо прочитать пол темы да будет бот и тема про манор посвещена это вопросу, и прочитай правила форума, помоч можно но задавай вопрос конкретней я думаю xkor отправил телепатов в отпуск, жаль конечно :(
Grinch вне форума   Ответить с цитированием
Старый 28.02.2008, 22:59   #16
Гость
 
Сообщений: n/a
По умолчанию

нехорошо ставить слип на основной поток :<
там вместо do ; должно было быть do Application.ProcessMessages;
альтернатива делаю, только будут обрабатываться ProcessMessages...
Код:
procedure Delay(ATimeout: Integer);
var
  t: Cardinal;
begin
  while ATimeout > 0 do
  begin
    t := GetTickCount;
    if MsgWaitForMultipleObjects(0, nil^, False, ATimeOut, QS_ALLINPUT) = WAIT_TIMEOUT then
      Exit;
    Application.ProcessMessages;
    dec(ATimeout, GetTickCount - t);
  end;
end;

Последний раз редактировалось NLObP, 09.05.2008 в 15:42.
  Ответить с цитированием
Старый 03.03.2008, 00:49   #17
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от OllyDbg
нехорошо ставить слип на основной поток :<
да, логично, как то забыл что у меня эта хрень в основном потоке выполняется(
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 22.03.2008, 23:23   #18
Новичок
 
Аватар для Johnson
 
Регистрация: 27.10.2007
Адрес: Пермь
Сообщений: 19
Сказал Спасибо: 28
Имеет 1 спасибку в 1 сообщении
Johnson пока неопределено
По умолчанию

Цитата:
Таймер со сквозным проходом (mod)
позволяет задавать переменную, по которой будет проверяться время

Код: Выделить всё
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) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;
Мучался, мучался, но так и не понял, как интервал можно сократить... подскажите подалста? Желательно, чтоб можно было задавать хотябы 0.5 секунды.
__________________
Если Вы недовольны моими действиями - то Вам сюда!
Johnson вне форума   Ответить с цитированием
Старый 02.04.2008, 12:27   #19
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Johnson
Мучался, мучался, но так и не понял, как интервал можно сократить... подскажите подалста? Желательно, чтоб можно было задавать хотябы 0.5 секунды.
В такой реализации можно писать 500 - это 0,5 сек
Код:
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;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


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

Запрещаем случайное закрытие формы.
Код:
procedure Init;
begin
//форма
frm := TForm.Create(nil);
frm.Caption := 'FishBOT '+Name;
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=570;
frm.Height:=500;
frm.OnClose := @FormClose;
end;

//******************************************************************************
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caNone;
end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


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

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


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

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

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


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

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

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