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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 15.04.2009, 16:05   #1
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Try except в релизе 3.5.2.102 и выше не желателен вообще. ОСОБЕННО В ИНИТЕ!
если его убрать, редактор пх сразу покажет проблему подсветив это место, и написав что за ошибка произошла в статусбаре. как следствие исключит возможность запускать скрипт с заведомо непроизведенным полноценно инитом.
с блоком трайекцепт - как минимум подсвечивать он ничего не будет.
как максимум он пройдет дальше в ините скрипта и уже в теле скрипта натворит делов. либо в фрии.

Добавлено через 5 минут
особенно это касается релизов в промежутке 3.5.1.84 - 3.5.2.100. там возможен дезлок и как результат - невозможность снять галочку с скрипта либо вызвать тестфрии. при обращении к несуществующему обьекту в фрии.
рекомендую обновиться. и поубирать трайексепты в инитах.
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 15.04.2009 в 16:09. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
Старый 15.04.2009, 16:23   #2
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

Вот немного подредактировал скрипт (да простит меня автор)
Логику не менял, только переписал для более удобного портирования на различные хроники.
delphi Код:
{ AutoBD_SVS by Ad Принимает пати танцует или поет, и следует по необходимости! Для того чтобы нормально следовал за целью, нужно основным чаром что нибудь в чат написать, чтобы запомнился айди. name- ник БД или СВСа name2- ник того перса который будет кидать пати и за кем будет следовать БД или СВС. Запускать скрипт ТОЛЬКО ПОСЛЕ того как БД или СВС уже вошел в игру. } Const   name2='МойНик';   name='никБДилиСВС';     //ID пакетов   //От клиента   ACTION_ID = #$04;   REQUESTITEMLIST_ID = #$0F;   REQUESTANSWERJOINPARTY_ID = #$2A;   REQUESTWITHDRAWALPARTY_ID = #$2B;   REQUESTMAGICSKILLUSE_ID = #$2F;   REQUESTSOCIALACTION_ID = #$1B;   REQUESTSSKILLLIST_ID = #$3F;   //от сервера   USERINFO_ID = #$04;   ASKJOINPARTY_ID = #$39;    SAY2_ID = #$4A;   SKILLLIST_ID = #$58;   MAGICSKILLLAUNCHED_ID = #$76;     Var   Msg : TMemo;   FormMain : TForm; //Создаваемая форма   useskill: TTimer;   skills:string;   skillid,skillidold:integer;   party_have,iswork,skillhave:boolean;   skillbase: array[1..200,1..2] of integer;   SkillsName : TStringList;   listbox1,listbox2: TListBox;   GB1: TGroupBox;   Button1,Button2,Button3,Button4: TButton;   Lb1,Lb2: Tlabel;   cb3:tcheckbox;   myOID,myX,myY,myZ: integer;          targetOID:integer; function Create_FormMain : TForm; Var   Yes : boolean; begin   Yes := FALSE;   Result := TForm.Create(nil);   Result.Caption     := 'AutoBD v.0.0.1';   Result.Left        := 397;   Result.Top         := 233;   Result.Width       := 450;   Result.Height      := 650;   Result.FormStyle   := fsNormal;   Result.Position    := poDesigned;   Result.BorderStyle := bsSizeable;   Result.BorderWidth := 0;   Result.WindowState := wsNormal;   Result.Color       := clBtnFace;   Result.Font.Name   := 'Tahoma';   Result.Font.Size   := 8;   Result.Font.Color  := clWindowText;   Result.Font.CharSet:= 1;   Result.OnClose := @FormClose;   Msg := TMemo.Create(Result);   Msg.Parent := Result;   Msg.Left    := 0;   Msg.Top     := 400;   Msg.Width   := 200;   Msg.Height  := 200;   Msg.Visible := TRUE;   Msg.Tag     := 0;   Msg.Enabled  := TRUE;   Msg.Hint     := '';   Msg.ShowHint := FALSE;   Msg.Font.Name  := 'Tahoma';   Msg.Font.Size  := 8;   Msg.Font.Color := clWindowText;   Msg.Color         := clWindow;   Msg.TabOrder      := 2;   Msg.TabStop       := TRUE;   Msg.Align         := alBottom;   Msg.WordWrap      := TRUE;   Msg.Alignment     := taLeftJustify;   Msg.WantTabs      := FALSE;   Msg.WantReturns   := TRUE;   Msg.HideSelection := TRUE;   Msg.MaxLength     := 0;   Msg.OEMConvert    := FALSE;   Msg.ReadOnly      := FALSE;   Msg.ScrollBars    := ssNone;   GB1 := TGroupBox.Create(Result);   GB1.Parent := result;   GB1.Align         := alRight;   GB1.Left    := 1;   GB1.Top     := 2;   GB1.Width   := 100;   GB1.Height  := 95;   GB1.Visible := TRUE;   GB1.Tag     := 0;   GB1.Enabled  := TRUE;   GB1.Hint     := '';   GB1.ShowHint := FALSE;   GB1.Caption    := 'НЕПРИНИМАЕТ ПАТИ';   GB1.Align      := alTOP;   GB1.Color      := clBtnFace;   GB1.Font.Name  := 'Tahoma';   GB1.Font.Size  := 8;   GB1.Font.Color := clWindowText;   GB1.Font.CharSet := 1;   GB1.TabOrder     := 3;   GB1.TabStop      := FALSE;   listbox1 := Tlistbox.Create(Result);   listbox1.Parent := Result;   listbox1.Left    := 0;   listbox1.Top     := 100;   listbox1.Width   := 180;   listbox1.Height  := 200;   listbox1.Visible := TRUE;   listbox1.Tag     := 0;   listbox1.Enabled  := TRUE;   listbox1.Hint     := '';   listbox1.ShowHint := FALSE;   listbox1.Font.Name  := 'Tahoma';   listbox1.Font.Size  := 8;   listbox1.Font.Color := clWindowText;   listbox1.Color         := clWindow;   listbox1.TabOrder      := 2;   listbox1.TabStop       := TRUE;   listbox1.Align         := alLeft;   listbox1.OnDblClick :=@button3click;   listbox2 := Tlistbox.Create(Result);   listbox2.Parent := Result;   listbox2.Left    := 0;   listbox2.Top     := 100;   listbox2.Width   := 180;   listbox2.Height  := 200;   listbox2.Visible := TRUE;   listbox2.Tag     := 0;   listbox2.Enabled  := TRUE;   listbox2.Hint     := '';   listbox2.ShowHint := FALSE;   listbox2.Font.Name  := 'Tahoma';   listbox2.Font.Size  := 8;   listbox2.Font.Color := clWindowText;   listbox2.Color         := clWindow;   listbox2.TabOrder      := 2;   listbox2.TabStop       := TRUE;   listbox2.Align         := alRight;   listbox2.OnDblClick :=@button4click;   Button1 := TButton.Create(Result);   Button1.Parent := gb1;   Button1.Left    := 10;   Button1.Top     := 30;   Button1.Width   := 75;   Button1.Height  := 25;   Button1.Visible := TRUE;   Button1.Tag     := 0;   Button1.Enabled  := true;   Button1.Hint     := '';   Button1.ShowHint := FALSE;   Button1.Caption    := 'Вкл';   Button1.Font.Name  := 'Tahoma';   Button1.Font.Size  := 8;   Button1.Font.Color := clWindowText;   Button1.Font.CharSet := 1;   Button1.TabOrder     := 1;   Button1.TabStop      := TRUE;   Button1.Cancel       := FALSE;   Button1.ModalResult  := 0;   Button1.OnClick     := @Button1click;   Button2 := TButton.Create(Result);   Button2.Parent := gb1;   Button2.Left    := 100;   Button2.Top     := 30;   Button2.Width   := 75;   Button2.Height  := 25;   Button2.Visible := TRUE;   Button2.Tag     := 0;   Button2.Enabled  := true;   Button2.Hint     := '';   Button2.ShowHint := FALSE;   Button2.Caption    := 'Выкл';   Button2.Font.Name  := 'Tahoma';   Button2.Font.Size  := 8;   Button2.Font.Color := clWindowText;   Button2.Font.CharSet := 1;   Button2.TabOrder     := 1;   Button2.TabStop      := TRUE;   Button2.Cancel       := FALSE;   Button2.ModalResult  := 0;   Button2.OnClick     := @Button2click;   Button3 := TButton.Create(Result);   Button3.Parent := result;   Button3.Left    := 200;   Button3.Top     := 140;   Button3.Width   := 40;   Button3.Height  := 25;   Button3.Visible := TRUE;   Button3.Tag     := 0;   Button3.Enabled  := True;   Button3.Hint     := '';   Button3.ShowHint := FALSE;   Button3.Caption    := '>>>>';   Button3.Font.Name  := 'Tahoma';   Button3.Font.Size  := 8;   Button3.Font.Color := clWindowText;   Button3.Font.CharSet := 1;   Button3.TabOrder     := 1;   Button3.TabStop      := TRUE;   Button3.Cancel       := FALSE;   Button3.ModalResult  := 0;   Button3.OnClick     := @button3click;   Button4 := TButton.Create(Result);   Button4.Parent := result;   Button4.Left    := 200;   Button4.Top     := 220;   Button4.Width   := 40;   Button4.Height  := 25;   Button4.Visible := TRUE;   Button4.Tag     := 0;   Button4.Enabled  := True;   Button4.Hint     := '';   Button4.ShowHint := FALSE;   Button4.Caption    := '<<<<';   Button4.Font.Name  := 'Tahoma';   Button4.Font.Size  := 8;   Button4.Font.Color := clWindowText;   Button4.Font.CharSet := 1;   Button4.TabOrder     := 1;   Button4.TabStop      := TRUE;   Button4.Cancel       := FALSE;   Button4.ModalResult  := 0;   Button4.OnClick     := @button4click;   Lb1:= Tlabel.Create(result);   Lb1.Parent := GB1;   Lb1.Left    := 140;   Lb1.Top     := 30+200;   Lb1.Align         := alLeft;   Lb1.Layout     := tlBottom;   Lb1.Visible := TRUE;   Lb1.Tag     := 0;   Lb1.Enabled  := TRUE;   Lb1.Hint     := '';   Lb1.ShowHint := FALSE;   Lb1.Caption    := 'Все Скилы';   Lb1.Font.Name  := 'Tahoma';   Lb1.Font.Size  := 10;   Lb1.Font.Color := clWindowText;   Lb1.Font.CharSet := 1;   Lb2:= Tlabel.Create(result);   Lb2.Parent := GB1;   Lb2.Left    := 140;   Lb2.Top     := 30+200;   Lb2.Align         := alRight;   Lb2.Layout     := tlBottom;   Lb2.Visible := TRUE;   Lb2.Tag     := 0;   Lb2.Enabled  := TRUE;   Lb2.Hint     := '';   Lb2.ShowHint := FALSE;   Lb2.Caption    := 'Те которые использовать';   Lb2.Font.Name  := 'Tahoma';   Lb2.Font.Size  := 10;   Lb2.Font.Color := clWindowText;   Lb2.Font.CharSet := 1;   cb3:= TCheckbox.Create(result);   cb3.Parent := GB1;   cb3.Left    := 220;   cb3.Top     := 60;   cb3.Width   := 220;   cb3.Checked := TRUE;   cb3.Visible := TRUE;   cb3.Tag     := 0;   cb3.Enabled  := TRUE;   cb3.Hint     := '';   cb3.ShowHint := FALSE;   cb3.Caption    := 'Следовать послы выхода из пати';   cb3.Font.Name  := 'Tahoma';   cb3.Font.Size  := 10;   cb3.Font.Color := clWindowText;   cb3.Font.CharSet := 1;   Yes := TRUE;   Result.Show;   msg.Lines.Add(timetostr(now)+': '+'Autodance, by Ad');   msg.Lines.Add(timetostr(now)+': '+'Работаем с чаром: '+Name); end; procedure button1click(Sender: TButton); begin   iswork:=true;   GB1.Caption    := 'ПРИНИМАЕТ ПАТИ'; end; procedure button2click(Sender: TButton); begin   iswork:=false;   GB1.Caption    := 'НЕПРИНИМАЕТ ПАТИ'; end; procedure perreshet; var i:integer; str:string; begin  str:='';  for i:=1 to ListBox2.items.Count do      begin      str:=str+Copy(ListBox2.Items.Strings[i-1],1+pos(':',ListBox2.Items.Strings[i-1]),pos(' ',ListBox2.Items.Strings[i-1])-4)+':';      end;  skills:=str; end; procedure button3click(Sender: TButton); var m:integer; begin if ListBox1.Items.Count>0 then    begin    m:=ListBox1.ItemIndex;    if (ListBox1.Items.Count=1) then m:=0    else    if m=ListBox1.Items.Count-1 then dec(m);    ListBox2.Items.Add(ListBox1.Items.Strings[ListBox1.ItemIndex]);    ListBox1.Items.Delete(ListBox1.ItemIndex);    ListBox1.ItemIndex:=m;    perreshet;    end; end; procedure Button4Click(Sender: TObject); var m:integer; begin if ListBox2.Items.Count>0 then    begin    m:=ListBox2.ItemIndex;    if (ListBox2.Items.Count=1) then m:=0    else    if m=ListBox2.Items.Count-1 then dec(m);    ListBox1.Items.Add(ListBox2.Items.Strings[ListBox2.ItemIndex]);    ListBox2.Items.Delete(ListBox2.ItemIndex);    ListBox2.ItemIndex:=m;    perreshet; end; end; procedure FormClose(Sender: TObject; var Action: TCloseAction); begin   Action:=caNone; end; procedure Free_FormMain; begin   TRY     if FormMain<>NIL then begin        FormMain.Free;        FormMain:=NIL;     end;   FINALLY   END; end; procedure SendMesg(msg:string)//отправка сообщений клиенту begin  buf:=SAY2_ID;   WriteD(0);   WriteD(2);   WriteS('->БОГ');   WriteS(msg);   SendToClientEx(Name); end; procedure Init; //Вызывается при включении скрипта begin  skillsName:=TStringList.Create; try   skillsName.LoadFromFile('.\settings\SkillsID.ini');   except     msg.Lines.Add('itemsid.ini не найден!');     exit;   end; skillid:=0; iswork:=false; useskill:=TTimer.Create(nil); useskill.OnTimer:=@timerskill; useskill.interval:=200; //время задержки useskill.enabled:=true; skillhave:=false; party_have:=false; FormMain:=Create_FormMain; buf:=REQUESTSSKILLLIST_ID; SendToServerEx(name); buf:=REQUESTITEMLIST_ID; SendToServerEx(name); end; procedure timerskill; begin if skillid<>0 then  begin    msg.lines.add('Юзаю скилл');    MagicSkillUse(skillid);    skillidold:=skillID;    skillID:=0;  end; end; procedure Free; //Вызывается при выключении скрипта begin  useskill.free;  Free_FormMain; end; procedure UserInfo; //обновление данных о себе var   i:word; begin   MyOID:=ReadD(18);   MyX:=ReadD(2);   MyY:=ReadD(6);   MyZ:=ReadD(10); end; procedure MagicSkillUse(MagicID:integer); begin   buf:=REQUESTMAGICSKILLUSE_ID;   WriteD(MagicID);   WriteD(00);   WriteC(00);   SendToServerEx(Name); end; procedure createskillbase; var  i, j,n: integer; begin   for i:=1 to 200 do begin     skillbase[i,1]:=0;     skillbase[i,2]:=0;   end;   n:=0;   J:=10;   listbox1.items.Clear;   for I:=1 to 200 do begin     skillbase[i,1]:=ReadD(j);     skillbase[i,2]:=ReadD(j);     if skillbase[i,2]=0 then break;     j:=j+5;     inc(n);     listbox1.items.Add('ID:'+inttostr(skillbase[i,2])+'   '+SkillsName.Values[IntToStr(skillbase[i,2])]+'  LVL:'+inttostr(skillbase[i,1]));   end;   if N>0 then skillhave:=true; end; procedure Target(Attacker: Integer); begin   buf:=ACTION_ID;   WriteD(Attacker);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteC(00);   SendToServerEx(Name); end; procedure TargetAttacker(Attacker: Integer); begin   if Attacker<>0 then begin     msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));     Target(Attacker);     delay(800);     Target(Attacker);     delay(800);   end; end;         procedure buffok; begin   if ReadD(6)=skillIDold then begin     msg.lines.add('Прописываем следующий скилл');     if Length(skills)>0 then begin       skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));       delete(Skills,1,pos(':',Skills));     end else       if  party_have=true then begin         msg.lines.add('Cледуем за '+name2);         if cb3.Checked=true then           TargetAttacker(targetOID);         msg.lines.add('Разрываем пати');         delay(200);         buf:=REQUESTWITHDRAWALPARTY_ID;         SendToServerEx(name);         party_have:=false;       end;   end; end; var   temp : String; begin   if pck='' then exit;   if (ConnectName=Name) and FromClient then     case pck[1] of     REQUESTSOCIALACTION_ID:         case ReadD(2) of           //социальное действие Yes для старта           6: begin              iswork:=true;              GB1.Caption:= 'ПРИНИМАЕТ ПАТИ';              end;           //социальное действие No для остановки            5: begin               iswork:=false;               GB1.Caption:= 'НЕПРИНИМАЕТ ПАТИ';               end;         end;     end; if (ConnectName=Name) and FromServer then begin          case pck[1] of          ASKJOINPARTY_ID: if iswork then               begin                 temp:=ReadS(2);                 if temp=name2 then                   begin                   perreshet;                   Delay(100);                   buf:=REQUESTANSWERJOINPARTY_ID+#$01#$00#$00#$00;                   SendToServerEx(name);                   msg.Lines.Add('Принимаю пати');                   party_have:=true;                   Delay(200);                   if Length(skills)>0 then                     begin                     msg.Lines.Add('Прописываю скилл');                     skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));                     delete(Skills,1,pos(':',Skills));                     end;                   pck:='';                   end else msg.Lines.Add('Проигнорирован запрос пати от: '+temp);               end;          MAGICSKILLLAUNCHED_ID:  begin                 if (MyOID=ReadD(2)) then buffok;                 end;          USERINFO_ID:  begin //пакет с инфой о моём чаре                 UserInfo;                 end;          SAY2_ID:  begin //пакет с инфой о моём чаре                  if ReadS(10)=name2 then                      begin                      TargetOID:=ReadD(2);                      msg.lines.add('Нашли цель следовния: '+inttostr(TARGETOID));                      end;                  end;          SKILLLIST_ID:  begin                 if skillhave=false then createskillbase;                 end;            end; end; end.
PanAm вне форума   Ответить с цитированием
За это сообщение PanAm нажился 5 спасибками от:
Старый 15.04.2009, 20:23   #3
Пользователь
 
Регистрация: 11.04.2009
Адрес: lameriy
Сообщений: 34
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
lamer пока неопределено
По умолчанию

Цитата:
Сообщение от PanAm Посмотреть сообщение
Вот немного подредактировал скрипт (да простит меня автор)
Логику не менял, только переписал для более удобного портирования на различные хроники.
вот только не понял что это дало..)
lamer вне форума   Ответить с цитированием
Старый 15.04.2009, 21:23   #4
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

айди пакетов вынесены в секцию const дабы не рыться в их поисках по всему скрипту.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 15.04.2009, 22:18   #5
Пользователь
 
Регистрация: 11.04.2009
Адрес: lameriy
Сообщений: 34
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
lamer пока неопределено
По умолчанию

Всё, сёдня башка уже взорвёться нах, отложу до завтра..
Вот только поправте меня если я не прав, мне счас нужно поменять ИД покетов на ХБшные и должно заработать?
lamer вне форума   Ответить с цитированием
Старый 15.04.2009, 22:23   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от lamer Посмотреть сообщение
Вот только поправте меня если я не прав, мне счас нужно поменять ИД покетов на ХБшные и должно заработать?
Да. Внимательно перечти топик ещё раз. =)
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 15.04.2009, 22:23   #7
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

По идее да.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 16.04.2009, 08:10   #8
Пользователь
 
Регистрация: 11.04.2009
Адрес: lameriy
Сообщений: 34
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
lamer пока неопределено
Радость

Это жесть!!! но это мой первый труд в реальном редактировании скрипта. Душа поёт (можно ник менять на lamer+)...
Подитожим.
Вероятнее всего нужно добавить есчё чтото чтоб бд за вами бежал, так как он только берёт в таргет. а не бежит за вами, ну или чтото с форматом пакета, но это я точно сам не додумаю.
И второе если запускать скрипт с \settings

Код:
skillsName.LoadFromFile('.\settings\SkillsID.ini'
то ПНХ выдаёт ошибку. Поэтому редактируем на оригинал и убераем.

Ну и вот исправленные пакеты, вроде всё работает (кроме следования).
Код:
 //ID пакетов
  //От клиента
  ACTION_ID = #$1F;
  REQUESTITEMLIST_ID = #$14;
  REQUESTANSWERJOINPARTY_ID = #$43;
  REQUESTWITHDRAWALPARTY_ID = #$44;
  REQUESTMAGICSKILLUSE_ID = #$39;
  REQUESTSOCIALACTION_ID = #$34;
  REQUESTSSKILLLIST_ID = #$50;
  //от сервера
  USERINFO_ID = #$32;
  ASKJOINPARTY_ID = #$39;  
  SAY2_ID = #$4A;
  SKILLLIST_ID = #$5F;
  MAGICSKILLLAUNCHED_ID = #$54;
Чуть незабыл, почемуто в таблице со скилами вылезают вещи чара. Но мне это особо не мешает, хотя я так понимаю это не правильно..)

Это оказываеться не шмот игрока, а пасивные скилы показывает(7 раз отмерь - один раз отреж), поспешил , не внимательность.. сори..

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

Цитата:
Сообщение от lamer Посмотреть сообщение
Подитожим.
Вероятнее всего нужно добавить есчё чтото чтоб бд за вами бежал, так как он только берёт в таргет. а не бежит за вами
В клиенте надо два раза кликнуть на чара, чтобы бежать за ним. В скрипте также надо послать два раза таргет от чара, на того, за которым надо бежать.

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


NLObP вне форума   Ответить с цитированием
Старый 16.04.2009, 19:18   #10
Пользователь
 
Регистрация: 11.04.2009
Адрес: lameriy
Сообщений: 34
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
lamer пока неопределено
По умолчанию

Цитата:
Сообщение от NLObP Посмотреть сообщение
В клиенте надо два раза кликнуть на чара, чтобы бежать за ним. В скрипте также надо послать два раза таргет от чара, на того, за которым надо бежать.
Угу, ток я не програмайзер и переделывал пакеты в игре, заходил чаром и юзал чтоб ИД узнать, терь надо перепроверить. Кстати спс за разьяснение с Т0 и Т1. Правда там пару пакетов не нашёл перехода, но эт не в этой теме.
Перепроверю отредактированные пакеты и выложу скрипт целиком, как обещал..)

Добавлено через 1 час 29 минут
Код:
{
AutoBD_SVS by Ad
Принимает пати танцует или поет, и следует по необходимости!
Для того чтобы нормально следовал за целью, нужно основным чаром что нибудь в чат написать, чтобы запомнился айди.

name- ник БД или СВСа
name2- ник того перса который будет кидать пати и за кем будет следовать БД или СВС.

Запускать скрипт ТОЛЬКО ПОСЛЕ того как БД или СВС уже вошел в игру.
}

Const 
  name2='---';
  name='---';
  
  //ID пакетов
  //От клиента
  ACTION_ID = #$1F;
  REQUESTITEMLIST_ID = #$14;
  REQUESTANSWERJOINPARTY_ID = #$43;
  REQUESTWITHDRAWALPARTY_ID = #$44;
  REQUESTMAGICSKILLUSE_ID = #$39;
  REQUESTSOCIALACTION_ID = #$34;
  REQUESTSSKILLLIST_ID = #$50;
  //от сервера
  USERINFO_ID = #$32;
  ASKJOINPARTY_ID = #$39;  
  SAY2_ID = #$4A;
  SKILLLIST_ID = #$5F;
  MAGICSKILLLAUNCHED_ID = #$54;
  
  
Var
  Msg : TMemo;
  FormMain : TForm; //Создаваемая форма
  useskill: TTimer;
  skills:string;
  skillid,skillidold:integer;
  party_have,iswork,skillhave:boolean;
  skillbase: array[1..200,1..2] of integer;
  SkillsName : TStringList;
  listbox1,listbox2: TListBox;
  GB1: TGroupBox;
  Button1,Button2,Button3,Button4: TButton;
  Lb1,Lb2: Tlabel;
  cb3:tcheckbox;
  myOID,myX,myY,myZ: integer;       
  targetOID:integer;

function Create_FormMain : TForm;
Var
  Yes : boolean;
begin
  Yes := FALSE;
  Result := TForm.Create(nil);

  Result.Caption     := 'AutoBD v.0.0.1';
  Result.Left        := 397;
  Result.Top         := 233;
  Result.Width       := 450;
  Result.Height      := 650;
  Result.FormStyle   := fsNormal;
  Result.Position    := poDesigned;
  Result.BorderStyle := bsSizeable;
  Result.BorderWidth := 0;
  Result.WindowState := wsNormal;
  Result.Color       := clBtnFace;
  Result.Font.Name   := 'Tahoma';
  Result.Font.Size   := 8;
  Result.Font.Color  := clWindowText;
  Result.Font.CharSet:= 1;
  Result.OnClose := @FormClose;

  Msg := TMemo.Create(Result);
  Msg.Parent := Result;
  Msg.Left    := 0;
  Msg.Top     := 400;
  Msg.Width   := 200;
  Msg.Height  := 200;
  Msg.Visible := TRUE;
  Msg.Tag     := 0;
  Msg.Enabled  := TRUE;
  Msg.Hint     := '';
  Msg.ShowHint := FALSE;
  Msg.Font.Name  := 'Tahoma';
  Msg.Font.Size  := 8;
  Msg.Font.Color := clWindowText;
  Msg.Color         := clWindow;
  Msg.TabOrder      := 2;
  Msg.TabStop       := TRUE;
  Msg.Align         := alBottom;
  Msg.WordWrap      := TRUE;
  Msg.Alignment     := taLeftJustify;
  Msg.WantTabs      := FALSE;
  Msg.WantReturns   := TRUE;
  Msg.HideSelection := TRUE;
  Msg.MaxLength     := 0;
  Msg.OEMConvert    := FALSE;
  Msg.ReadOnly      := FALSE;
  Msg.ScrollBars    := ssNone;

  GB1 := TGroupBox.Create(Result);
  GB1.Parent := result;
  GB1.Align         := alRight;
  GB1.Left    := 1;
  GB1.Top     := 2;
  GB1.Width   := 100;
  GB1.Height  := 95;
  GB1.Visible := TRUE;
  GB1.Tag     := 0;
  GB1.Enabled  := TRUE;
  GB1.Hint     := '';
  GB1.ShowHint := FALSE;
  GB1.Caption    := 'НЕПРИНИМАЕТ ПАТИ';
  GB1.Align      := alTOP;
  GB1.Color      := clBtnFace;
  GB1.Font.Name  := 'Tahoma';
  GB1.Font.Size  := 8;
  GB1.Font.Color := clWindowText;
  GB1.Font.CharSet := 1;
  GB1.TabOrder     := 3;
  GB1.TabStop      := FALSE;

  listbox1 := Tlistbox.Create(Result);
  listbox1.Parent := Result;
  listbox1.Left    := 0;
  listbox1.Top     := 100;
  listbox1.Width   := 180;
  listbox1.Height  := 200;
  listbox1.Visible := TRUE;
  listbox1.Tag     := 0;
  listbox1.Enabled  := TRUE;
  listbox1.Hint     := '';
  listbox1.ShowHint := FALSE;
  listbox1.Font.Name  := 'Tahoma';
  listbox1.Font.Size  := 8;
  listbox1.Font.Color := clWindowText;
  listbox1.Color         := clWindow;
  listbox1.TabOrder      := 2;
  listbox1.TabStop       := TRUE;
  listbox1.Align         := alLeft;
  listbox1.OnDblClick :=@button3click;

  listbox2 := Tlistbox.Create(Result);
  listbox2.Parent := Result;
  listbox2.Left    := 0;
  listbox2.Top     := 100;
  listbox2.Width   := 180;
  listbox2.Height  := 200;
  listbox2.Visible := TRUE;
  listbox2.Tag     := 0;
  listbox2.Enabled  := TRUE;
  listbox2.Hint     := '';
  listbox2.ShowHint := FALSE;
  listbox2.Font.Name  := 'Tahoma';
  listbox2.Font.Size  := 8;
  listbox2.Font.Color := clWindowText;
  listbox2.Color         := clWindow;
  listbox2.TabOrder      := 2;
  listbox2.TabStop       := TRUE;
  listbox2.Align         := alRight;
  listbox2.OnDblClick :=@button4click;

  Button1 := TButton.Create(Result);
  Button1.Parent := gb1;
  Button1.Left    := 10;
  Button1.Top     := 30;
  Button1.Width   := 75;
  Button1.Height  := 25;
  Button1.Visible := TRUE;
  Button1.Tag     := 0;
  Button1.Enabled  := true;
  Button1.Hint     := '';
  Button1.ShowHint := FALSE;
  Button1.Caption    := 'Вкл';
  Button1.Font.Name  := 'Tahoma';
  Button1.Font.Size  := 8;
  Button1.Font.Color := clWindowText;
  Button1.Font.CharSet := 1;
  Button1.TabOrder     := 1;
  Button1.TabStop      := TRUE;
  Button1.Cancel       := FALSE;
  Button1.ModalResult  := 0;
  Button1.OnClick     := @Button1click;

  Button2 := TButton.Create(Result);
  Button2.Parent := gb1;
  Button2.Left    := 100;
  Button2.Top     := 30;
  Button2.Width   := 75;
  Button2.Height  := 25;
  Button2.Visible := TRUE;
  Button2.Tag     := 0;
  Button2.Enabled  := true;
  Button2.Hint     := '';
  Button2.ShowHint := FALSE;
  Button2.Caption    := 'Выкл';
  Button2.Font.Name  := 'Tahoma';
  Button2.Font.Size  := 8;
  Button2.Font.Color := clWindowText;
  Button2.Font.CharSet := 1;
  Button2.TabOrder     := 1;
  Button2.TabStop      := TRUE;
  Button2.Cancel       := FALSE;
  Button2.ModalResult  := 0;
  Button2.OnClick     := @Button2click;

  Button3 := TButton.Create(Result);
  Button3.Parent := result;
  Button3.Left    := 200;
  Button3.Top     := 140;
  Button3.Width   := 40;
  Button3.Height  := 25;
  Button3.Visible := TRUE;
  Button3.Tag     := 0;
  Button3.Enabled  := True;
  Button3.Hint     := '';
  Button3.ShowHint := FALSE;
  Button3.Caption    := '>>>>';
  Button3.Font.Name  := 'Tahoma';
  Button3.Font.Size  := 8;
  Button3.Font.Color := clWindowText;
  Button3.Font.CharSet := 1;
  Button3.TabOrder     := 1;
  Button3.TabStop      := TRUE;
  Button3.Cancel       := FALSE;
  Button3.ModalResult  := 0;
  Button3.OnClick     := @button3click;

  Button4 := TButton.Create(Result);
  Button4.Parent := result;
  Button4.Left    := 200;
  Button4.Top     := 220;
  Button4.Width   := 40;
  Button4.Height  := 25;
  Button4.Visible := TRUE;
  Button4.Tag     := 0;
  Button4.Enabled  := True;
  Button4.Hint     := '';
  Button4.ShowHint := FALSE;
  Button4.Caption    := '<<<<';
  Button4.Font.Name  := 'Tahoma';
  Button4.Font.Size  := 8;
  Button4.Font.Color := clWindowText;
  Button4.Font.CharSet := 1;
  Button4.TabOrder     := 1;
  Button4.TabStop      := TRUE;
  Button4.Cancel       := FALSE;
  Button4.ModalResult  := 0;
  Button4.OnClick     := @button4click;

  Lb1:= Tlabel.Create(result);
  Lb1.Parent := GB1;
  Lb1.Left    := 140;
  Lb1.Top     := 30+200;
  Lb1.Align         := alLeft;
  Lb1.Layout     := tlBottom;
  Lb1.Visible := TRUE;
  Lb1.Tag     := 0;
  Lb1.Enabled  := TRUE;
  Lb1.Hint     := '';
  Lb1.ShowHint := FALSE;
  Lb1.Caption    := 'Все Скилы';
  Lb1.Font.Name  := 'Tahoma';
  Lb1.Font.Size  := 10;
  Lb1.Font.Color := clWindowText;
  Lb1.Font.CharSet := 1;

  Lb2:= Tlabel.Create(result);
  Lb2.Parent := GB1;
  Lb2.Left    := 140;
  Lb2.Top     := 30+200;
  Lb2.Align         := alRight;
  Lb2.Layout     := tlBottom;
  Lb2.Visible := TRUE;
  Lb2.Tag     := 0;
  Lb2.Enabled  := TRUE;
  Lb2.Hint     := '';
  Lb2.ShowHint := FALSE;
  Lb2.Caption    := 'Те которые использовать';
  Lb2.Font.Name  := 'Tahoma';
  Lb2.Font.Size  := 10;
  Lb2.Font.Color := clWindowText;
  Lb2.Font.CharSet := 1;

  cb3:= TCheckbox.Create(result);
  cb3.Parent := GB1;
  cb3.Left    := 220;
  cb3.Top     := 60;
  cb3.Width   := 220;
  cb3.Checked := TRUE;
  cb3.Visible := TRUE;
  cb3.Tag     := 0;
  cb3.Enabled  := TRUE;
  cb3.Hint     := '';
  cb3.ShowHint := FALSE;
  cb3.Caption    := 'Следовать послы выхода из пати';
  cb3.Font.Name  := 'Tahoma';
  cb3.Font.Size  := 10;
  cb3.Font.Color := clWindowText;
  cb3.Font.CharSet := 1;

  Yes := TRUE;

  Result.Show;
  msg.Lines.Add(timetostr(now)+': '+'Autodance, by Ad');
  msg.Lines.Add(timetostr(now)+': '+'Работаем с чаром: '+Name);

end;

procedure button1click(Sender: TButton);
begin
  iswork:=true;
  GB1.Caption    := 'ПРИНИМАЕТ ПАТИ';
end;

procedure button2click(Sender: TButton);
begin
  iswork:=false;
  GB1.Caption    := 'НЕПРИНИМАЕТ ПАТИ';
end;

procedure perreshet;
var i:integer;
str:string;
begin
 str:='';
 for i:=1 to ListBox2.items.Count do
     begin
     str:=str+Copy(ListBox2.Items.Strings[i-1],1+pos(':',ListBox2.Items.Strings[i-1]),pos(' ',ListBox2.Items.Strings[i-1])-4)+':';
     end;
 skills:=str;
end;

procedure button3click(Sender: TButton);
var m:integer;
begin

if ListBox1.Items.Count>0 then
   begin
   m:=ListBox1.ItemIndex;
   if (ListBox1.Items.Count=1) then m:=0
   else
   if m=ListBox1.Items.Count-1 then dec(m);

   ListBox2.Items.Add(ListBox1.Items.Strings[ListBox1.ItemIndex]);
   ListBox1.Items.Delete(ListBox1.ItemIndex);
   ListBox1.ItemIndex:=m;
   perreshet;
   end;

end;

procedure Button4Click(Sender: TObject);
var m:integer;
begin

if ListBox2.Items.Count>0 then
   begin
   m:=ListBox2.ItemIndex;
   if (ListBox2.Items.Count=1) then m:=0
   else
   if m=ListBox2.Items.Count-1 then dec(m);

   ListBox1.Items.Add(ListBox2.Items.Strings[ListBox2.ItemIndex]);
   ListBox2.Items.Delete(ListBox2.ItemIndex);
   ListBox2.ItemIndex:=m;
   perreshet;
end;

end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caNone;
end;

procedure Free_FormMain;
begin
  TRY
    if FormMain<>NIL then begin
       FormMain.Free;
       FormMain:=NIL;
    end;
  FINALLY
  END;
end; 

procedure SendMesg(msg:string);  //отправка сообщений клиенту
begin
 buf:=SAY2_ID;
  WriteD(0);
  WriteD(2);
  WriteS('->БОГ');
  WriteS(msg);
  SendToClientEx(Name);
end;

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

 skillsName:=TStringList.Create;
try
  skillsName.LoadFromFile('.\SkillsID.ini');
  except
    msg.Lines.Add('itemsid.ini не найден!');
    exit;
  end;

skillid:=0;
iswork:=false;
useskill:=TTimer.Create(nil);
useskill.OnTimer:=@timerskill;
useskill.interval:=200; //время задержки
useskill.enabled:=true;
skillhave:=false;
party_have:=false;
FormMain:=Create_FormMain;
buf:=REQUESTSSKILLLIST_ID;
SendToServerEx(name);

buf:=REQUESTITEMLIST_ID;
SendToServerEx(name);

end;

procedure timerskill;
begin
if skillid<>0 then
 begin
   msg.lines.add('Юзаю скилл');
   MagicSkillUse(skillid);
   skillidold:=skillID;
   skillID:=0;
 end;

end;

procedure Free; //Вызывается при выключении скрипта
begin
 useskill.free;
 Free_FormMain;
end;

procedure UserInfo; //обновление данных о себе
var
  i:word;
begin
  MyOID:=ReadD(18);
  MyX:=ReadD(2);
  MyY:=ReadD(6);
  MyZ:=ReadD(10);
end;

procedure MagicSkillUse(MagicID:integer);
begin
  buf:=REQUESTMAGICSKILLUSE_ID;
  WriteD(MagicID);
  WriteD(00);
  WriteC(00);
  SendToServerEx(Name);
end;

procedure createskillbase;
var
 i, j,n: integer;
begin
  for i:=1 to 200 do begin
    skillbase[i,1]:=0;
    skillbase[i,2]:=0;
  end;
  n:=0;
  J:=10;
  listbox1.items.Clear;
  for I:=1 to 200 do begin
    skillbase[i,1]:=ReadD(j);
    skillbase[i,2]:=ReadD(j);
    if skillbase[i,2]=0 then break;
    j:=j+5;
    inc(n);
    listbox1.items.Add('ID:'+inttostr(skillbase[i,2])+'   '+SkillsName.Values[IntToStr(skillbase[i,2])]+'  LVL:'+inttostr(skillbase[i,1]));
  end;
  if N>0 then skillhave:=true;
end;

procedure Target(Attacker: Integer);
begin
  buf:=ACTION_ID;
  WriteD(Attacker);
  WriteD(MyX);
  WriteD(MyY);
  WriteD(MyZ);
  WriteC(00);
  SendToServerEx(Name);
end;

procedure TargetAttacker(Attacker: Integer);
begin
  if Attacker<>0 then begin
    msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));
    Target(Attacker);
    delay(800);
    Target(Attacker);
    delay(800);
  end;
end;
        
procedure buffok;
begin
  if ReadD(6)=skillIDold then begin
    msg.lines.add('Прописываем следующий скилл');
    if Length(skills)>0 then begin
      skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));
      delete(Skills,1,pos(':',Skills));
    end else
      if  party_have=true then begin
        msg.lines.add('Cледуем за '+name2);
        if cb3.Checked=true then
          TargetAttacker(targetOID);
        msg.lines.add('Разрываем пати');
        delay(200);
        buf:=REQUESTWITHDRAWALPARTY_ID;
        SendToServerEx(name);
        party_have:=false;
      end;
  end;
end;

var
  temp : String;

begin
  if pck='' then exit;
  if (ConnectName=Name) and FromClient then
    case pck[1] of
    REQUESTSOCIALACTION_ID:
        case ReadD(2) of
          //социальное действие Yes для старта
          6: begin
             iswork:=true;
             GB1.Caption:= 'ПРИНИМАЕТ ПАТИ';
             end;
          //социальное действие No для остановки
           5: begin
              iswork:=false;
              GB1.Caption:= 'НЕПРИНИМАЕТ ПАТИ';
              end;
        end;
    end;

if (ConnectName=Name) and FromServer then
begin
         case pck[1] of
         ASKJOINPARTY_ID: if iswork then
              begin
                temp:=ReadS(2);
                if temp=name2 then
                  begin
                  perreshet;
                  Delay(100);
                  buf:=REQUESTANSWERJOINPARTY_ID+#$01#$00#$00#$00;
                  SendToServerEx(name);
                  msg.Lines.Add('Принимаю пати');
                  party_have:=true;
                  Delay(200);
                  if Length(skills)>0 then
                    begin
                    msg.Lines.Add('Прописываю скилл');
                    skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));
                    delete(Skills,1,pos(':',Skills));
                    end;
                  pck:='';
                  end else msg.Lines.Add('Проигнорирован запрос пати от: '+temp);
              end;

         MAGICSKILLLAUNCHED_ID:  begin
                if (MyOID=ReadD(2)) then buffok;
                end;
         USERINFO_ID:  begin //пакет с инфой о моём чаре
                UserInfo;
                end;
         SAY2_ID:  begin //пакет с инфой о моём чаре
                 if ReadS(10)=name2 then
                     begin
                     TargetOID:=ReadD(2);
                     msg.lines.add('Нашли цель следовния: '+inttostr(TARGETOID));
                     end;
                 end;
         SKILLLIST_ID:  begin
                if skillhave=false then createskillbase;
                end;
           end;
end;

end.
Проверил, всё верно переделал, такчто как обещал вылаживаю под ХБ. Спасибо автору за данный скрипт.
Вот если кто доделает следование за командиром, буду благодарен.

Последний раз редактировалось lamer, 16.04.2009 в 19:18. Причина: Добавлено сообщение
lamer вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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