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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 14.05.2008, 15:55   #11
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

ну геодата я пробывал раскопать файлы клиента единственно до чего добрался это программа для делания геодаты из файлов клиента картинку даже где то выкладывал.
мир состоит из 2-х типов геодаты рельеф и объектная т.е. рельеф он везде есть а объектная это каты, города, также есть третий тип но понему ходить нельзя он тупо является препятствием
Grinch вне форума   Ответить с цитированием
За это сообщение Grinch нажился спасибкой от:
Старый 16.05.2008, 14:53   #12
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию

Цитата:
Сообщение от Grinch Посмотреть сообщение
ну геодата я пробывал раскопать файлы клиента единственно до чего добрался это программа для делания геодаты из файлов клиента картинку даже где то выкладывал.
мир состоит из 2-х типов геодаты рельеф и объектная т.е. рельеф он везде есть а объектная это каты, города, также есть третий тип но понему ходить нельзя он тупо является препятствием
ага вот глянул сейчас в папке мапс, там файлы стандартно запакованы.
Можеш ли выложить описание структуры?
alexsl вне форума   Ответить с цитированием
Старый 16.05.2008, 23:26   #13
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

Цитата:
Сообщение от alexsl Посмотреть сообщение
ага вот глянул сейчас в папке мапс, там файлы стандартно запакованы.
Можеш ли выложить описание структуры?
панятия не имею какая там структура загугли может тебе повезёт

Добавлено через 7 часов 50 минут
возможно тебе повезло и в бекапе системы найду эти файлы, но вопрос в другом как раскрутить геодату сервера лутьше искать её и xkor вроде как то говорил что были у него какие то наработки в этом направление может поделиться опытом.

Последний раз редактировалось Grinch, 16.05.2008 в 23:26. Причина: Добавлено сообщение
Grinch вне форума   Ответить с цитированием
Старый 17.05.2008, 04:30   #14
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Суперский скрипт от Alexsl с панелью управления. Из чата тоже можно.
Работает Rec Save Go Back Stop согласно описания ниже.
Остальное заготовка для рыбалки.
delphi Код:
/////////////////////////////////////////////////////////////// // для: L2PacketHack by xkor // посл. редактирование: 14.05.2008, 15:03msk, alexsl // модифицировано by NLObP 17.05.2008 // назначение: перемещение чара по указанному маршруту // // краткая инструкция: // //                     1. прописать ник в MyNick // //    - для записи пути в файл: //                     1. встаем на исходную позицию //                     2. в чат пишим "===rec test1" (test1 - или другое имя без пробелов) //                     3. бежим куда нужно. (желательно много не кликать на одно и тоже место. все клики записываются в файл) //                     4. в чат пишим "===save" //                     5. все. теперь данные записаны на диск, согласно настройкам и под именем test1 указ. в п.п.2 // //    - записываем требуемые пути с разными маршрутами и названиями // //    - использование //                   1. бег до последнего чекпоинта: //                        пишим в чат "===go test1" (test1 - название записанного маршрута) //                   2. бег до первого чекпоинта: //                        пишим в чат "===back test1" (test1 - название записанного маршрута) //                   3. остановить передвижение: пишим в чат "===stop" // //   Использовались идеи, коды участников форума за, что спасибо ///////////////////////////////////////////////////////////////////// const   MyNick = 'NLObP';// <------------------------------   interlude = false;   debug = true;   // эта переменная указывает уничтожить пакет или нет если он обработан   // может данные нужны для других скриптов   EraseCommandFromChat = true;   //*******************************************************   RecordFilesPath = 'c:\'; // путь где хранятся наши файлы   RecordPathName = 'recordmove'; // файл по умолчанию   RecordFileExt = '.txt';// расширение по умолчанию   RangeToCheckPoint = 150; // дистанция до чекпоинта при которой считается , что мы достигли оного   MoveTrigerDelay = 800; // срабатывание таймера на движение  0,8 сек   cmdPrefix = '===';// с этих символов начинается команда   cmdDlm    = ' ';// разделитель параметров команды, параметры не должены содержать разделитель   // команды в общий чат                            // пример   cmdRecordPath = 'rec';   // в общий чат "===rec giran1"   cmdSavePath = 'save';    // в общий чат "===save"   cmdMove = 'go';         // в общий чат "===go giran1"   cmdBack = 'back';        // в общий чат "===back giran1"   cmdStop = 'stop';       // останавливает следование по маршруту   //******************************************************* var   // movement data   MovePath,                   //  данные по которому мы будем двигатся в данный момент   RecordPath: TStringList;    //  данные для записи пути   RecordPathFileName: string; // название файла для записи   PointsCount: integer;       // кол-во поинтов в процессе записи пути   SavePathEnabled: boolean;   // флаг записи пути   MoveToPathEnabled: boolean; // флаг движения по пути   MoveToForward: boolean;     // направление движения да-вперед, нет - назад   MoveStepIndex: integer;     // текущ. чекпоинт (куды бежим сейчас)   MoveTimer: TTimer;          //   old_X,old_Y,old_Z,old_time: integer;   myX,myY,myZ: integer;       // наши статы   myID: integer;   myHP,myMP,myMaxHP,myMaxMP: integer;   splitter1, splitter2 : Tsplitter;   msg, stats: TMemo;   form1: TForm;   Panel1 : Tpanel;   Button1,Button2,Button3,Button4,Button5,Button6,Button7,Button8 : TButton;   GroupBox1,GroupBox2,GroupBox3,GroupBox4 : TGroupBox;   ComboBox1,ComboBox2,ComboBox3,ComboBox4,ComboBox5,ComboBox6,ComboBox7,ComboBox8 : TComboBox;   CheckBox1,CheckBox2,CheckBox3,CheckBox4,CheckBox5,CheckBox6,CheckBox7,CheckBox8,CheckBox9,CheckBox10,CheckBox11,checkBox12,CheckBox13,CheckBox14,CheckBox15,CheckBox16,CheckBox17,CheckBox18: TCheckBox;   Label1,Label2,Label3,Label4:TLabel;   Edit1:TEdit; //*************************************************************** procedure Init; begin   MoveTimer := TTimer.Create(nil);   MoveTimer.Enabled := False;   MoveTimer.Interval := MoveTrigerDelay;   MoveTimer.OnTimer := @OnMove;   RecordPathFileName:='';   buf:=hstr('0F');   SendToServerEX(MyNick);   RecordPath:=TStringList.Create;   MovePath:=TStringList.Create;   //форма   form1:=TForm.Create(nil);   with form1 do   begin     Left:=0;     Top:=0;     Caption:='FishBot by NLObP v.0.10';     ClientHeight:=494;     ClientWidth:=613;     OnClose:=@FormClose;   end;   Panel1:=TPanel.Create(form1);   with Panel1 do   begin     parent:=form1;     Left:=0;     Top:=0;     Width:=425;     Height:=379;     Align:=alLeft;     TabOrder:=0;   end;   //статистика   Stats:=TMemo.Create(form1);   with Stats do   begin     parent:=form1;     Left:=428;     Top:=0;     Width:=185;     Height:=379;     Align:=alClient;     TabOrder:=1;     ScrollBars:=2;   end;   //сообщения   Msg:=TMemo.Create(form1);   with Msg do   begin     parent:=form1;     Left:=0;     Top:=382;     Width:=613;     Height:=112;     Align:=alBottom;     TabOrder:=2;     ReadOnly:=true;     ScrollBars:=2;     msg.Lines.Add('...');   end;   //разделители   splitter2:=Tsplitter.Create(form1);   with splitter2 do   begin     parent:=form1;     Top:=0;     Left:=425; //    Height:=379;     Width:=3;     Align:=alLeft;   end;   splitter1:=Tsplitter.Create(form1);   with splitter1 do   begin     parent:=form1;     Left:=0;     Height:=3;     Align:=alBottom;   end;   GroupBox1:=TGroupBox.Create(Panel1);   with GroupBox1 do   begin     parent:=Panel1;     Left:=1;     Top:=1;     Width:=423;     Height:=76;     Align:=alTop;     Caption:=' Movement ';     TabOrder:=0;   end;   Label1:=TLabel.Create(GroupBox1);   with Label1 do   begin     parent:=GroupBox1;     Left:=9;     Top:=18;     Width:=47;     Height:=13;     Caption:='FileName:';   end;   Button4:=TButton.Create(GroupBox1);   with Button4 do   begin     parent:=GroupBox1;     Left:=251;     Top:=42;     Width:=75;     Height:=25;     Caption:='Back';     TabOrder:=0;     OnClick:=@Button4Click;   end;   Button7:=TButton.Create(GroupBox1);   with Button7 do   begin     parent:=GroupBox1;     Left:=329;     Top:=42;     Width:=75;     Height:=25;     Caption:='Stop';     TabOrder:=1;     OnClick:=@Button7Click;   end;   Button3:=TButton.Create(GroupBox1);   with Button3 do   begin     parent:=GroupBox1;     Left:=173;     Top:=42;     Width:=75;     Height:=25;     Caption:='Go';     TabOrder:=2;     OnClick:=@Button3Click;   end;   Button2:=TButton.Create(GroupBox1);   with Button2 do   begin     parent:=GroupBox1;     Left:=90;     Top:=42;     Width:=75;     Height:=25;     Caption:='Save';     TabOrder:=3;     OnClick:=@Button2Click;   end;   Button1:=TButton.Create(GroupBox1);   with Button1 do   begin     parent:=GroupBox1;     Left:=9;     Top:=42;     Width:=75;     Height:=25;     Caption:='Rec';     TabOrder:=4;     OnClick:=@Button1Click;   end;   Edit1:=TEdit.Create(GroupBox1);   with Edit1 do   begin     parent:=GroupBox1;     Left:=56;     Top:=15;     Width:=109;     Height:=21;     TabOrder:=5;     Text:='recordmove';   end;   ComboBox8:=TComboBox.Create(GroupBox1);   with ComboBox8 do   begin     parent:=GroupBox1;     Left:=173;     Top:=15;     Width:=231;     Height:=21; //    Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=6;     Text:='ComboBox8';     OnChange:=@ComboBox8Change;   end;   GroupBox2:=TGroupBox.Create(Panel1);   with GroupBox2 do   begin     parent:=Panel1;     Left:=1;     Top:=77;     Width:=423;     Height:=239;     Align:=alNone;     //Anchors:=[akLeft, akTop, akRight];     Caption:=' Fishing ';     TabOrder:=1;   end;   Label2:=TLabel.Create(GroupBox2);   with Label2 do   begin     parent:=GroupBox2;     Left:=32;     Top:=164;     Width:=43;     Height:=13;     Caption:='FisherMan';   end;   ComboBox7:=TComboBox.Create(GroupBox2);   with ComboBox7 do   begin     parent:=GroupBox2;     Left:=90;     Top:=161;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=0;     Text:='ComboBox7';     OnChange:=@ComboBox7Change;   end;   ComboBox6:=TComboBox.Create(GroupBox2);   with ComboBox6 do   begin     parent:=GroupBox2;     Left:=90;     Top:=137;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=1;     Text:='ComboBox1';     OnChange:=@ComboBox6Change;   end;   CheckBox1:=TCheckBox.Create(GroupBox2);   with CheckBox1 do   begin     parent:=GroupBox2;     Left:=32;     Top:=18;     Width:=55;     Height:=17;     Caption:='Rod';     TabOrder:=2;     OnClick:=@CheckBox1Click;   end;   ComboBox1:=TComboBox.Create(GroupBox2);   with ComboBox1 do   begin     parent:=GroupBox2;     Left:=90;     Top:=16;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=3;     Text:='ComboBox1';     OnChange:=@ComboBox1Change;   end;   ComboBox5:=TComboBox.Create(GroupBox2);   with ComboBox5 do   begin     parent:=GroupBox2;     Left:=90;     Top:=113;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=4;     Text:='ComboBox1';     OnChange:=@ComboBox5Change;   end;   Button5:=TButton.Create(GroupBox2);   with Button5 do   begin     parent:=GroupBox2;     Left:=173;     Top:=206;     Width:=75;     Height:=25;     Caption:='Start';     TabOrder:=5;     OnClick:=@Button5Click;   end;   Button6:=TButton.Create(GroupBox2);   with Button6 do   begin     parent:=GroupBox2;     Left:=263;     Top:=206;     Width:=75;     Height:=25;     Caption:='Stop';     TabOrder:=6;     OnClick:=@Button6Click;   end;   CheckBox2:=TCheckBox.Create(GroupBox2);   with CheckBox2 do   begin     parent:=GroupBox2;     Left:=32;     Top:=39;     Width:=55;     Height:=23;     Caption:='Lure';     TabOrder:=7;     OnClick:=@CheckBox2Click;   end;   CheckBox3:=TCheckBox.Create(GroupBox2);   with CheckBox3 do   begin     parent:=GroupBox2;     Left:=32;     Top:=64;     Width:=55;     Height:=22;     Caption:='Weapon';     TabOrder:=8;     OnClick:=@CheckBox3Click;   end;   CheckBox4:=TCheckBox.Create(GroupBox2);   with CheckBox4 do   begin     parent:=GroupBox2;     Left:=32;     Top:=90;     Width:=52;     Height:=17;     Caption:='Shield';     TabOrder:=9;     OnClick:=@CheckBox4Click;   end;   CheckBox5:=TCheckBox.Create(GroupBox2);   with CheckBox5 do   begin     parent:=GroupBox2;     Left:=32;     Top:=115;     Width:=52;     Height:=17;     Caption:='FShot';     TabOrder:=10;     OnClick:=@CheckBox5Click;   end;   CheckBox6:=TCheckBox.Create(GroupBox2);   with CheckBox6 do   begin     parent:=GroupBox2;     Left:=32;     Top:=139;     Width:=52;     Height:=17;     Caption:='HPotion';     TabOrder:=11;     OnClick:=@CheckBox6Click;   end;   ComboBox2:=TComboBox.Create(GroupBox2);   with ComboBox2 do   begin     parent:=GroupBox2;     Left:=90;     Top:=40;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=12;     Text:='ComboBox1';     OnChange:=@ComboBox2Change;   end;   ComboBox3:=TComboBox.Create(GroupBox2);   with ComboBox3 do   begin     parent:=GroupBox2;     Left:=90;     Top:=64;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=13;     Text:='ComboBox1';     OnChange:=@ComboBox3Change;   end;   ComboBox4:=TComboBox.Create(GroupBox2);   with ComboBox4 do   begin     parent:=GroupBox2;     Left:=90;     Top:=88;     Width:=314;     Height:=21;     //Anchors:=[akLeft, akTop, akRight];     ItemHeight:=13;     TabOrder:=14;     Text:='ComboBox1';     OnChange:=@ComboBox4Change;   end;   CheckBox10:=TCheckBox.Create(GroupBox2);   with CheckBox10 do   begin     parent:=GroupBox2;     Left:=32;     Top:=189;     Width:=38;     Height:=17;     Caption:='PFO';     TabOrder:=15;     OnClick:=@CheckBox10Click;   end;   CheckBox11:=TCheckBox.Create(GroupBox2);   with CheckBox11 do   begin     parent:=GroupBox2;     Left:=32;     Top:=210;     Width:=45;     Height:=17;     Caption:='GFO';     TabOrder:=16;     OnClick:=@CheckBox11Click;   end;   GroupBox3:=TGroupBox.Create(Panel1);   with GroupBox3 do   begin     parent:=Panel1;     Left:=1;     Top:=318;     Width:=104;     Height:=51;     Align:=alNone;     Caption:=' Trade ';     TabOrder:=2;   end;   Button8:=TButton.Create(GroupBox3);   with Button8 do   begin     parent:=GroupBox3;     Left:=12;     Top:=20;     Width:=75;     Height:=25;     Caption:='Start';     TabOrder:=0;     OnClick:=@Button8Click;   end;   GroupBox4:=TGroupBox.Create(Panel1);   with GroupBox4 do   begin     parent:=Panel1;     Left:=111;     Top:=318;     Width:=313;     Height:=51;     //Anchors:=[akLeft, akTop, akRight];     Caption:=' Ready ';     TabOrder:=3;   end;   CheckBox7:=TCheckBox.Create(GroupBox4);   with CheckBox7 do   begin     parent:=GroupBox4;     Left:=16;     Top:=24;     Width:=73;     Height:=17;     Caption:='Fisherman';     TabOrder:=0;   end;   CheckBox8:=TCheckBox.Create(GroupBox4);   with CheckBox8 do   begin     parent:=GroupBox4;     Left:=95;     Top:=24;     Width:=58;     Height:=17;     Caption:='Fishing';     TabOrder:=1;   end;   CheckBox9:=TCheckBox.Create(GroupBox4);   with CheckBox9 do   begin     parent:=GroupBox4;     Left:=159;     Top:=24;     Width:=57;     Height:=17;     Caption:='Moving';     TabOrder:=2;   end;   form1.Show; end; //*************************************************************** //Вызывается при выключении скрипта //*************************************************************** procedure Free; begin   if RecordPath<>nil then   try     RecordPath.Free;   except     debugmsg('error free RecordPath');   end;   if MovePath<>nil then   try     MovePath.Free;   except     debugmsg('error free MovePath');   end;   Button1.Free;   Button2.Free;   Button3.Free;   Button4.Free;   Button5.Free;   Button6.Free;   Button7.Free;   Button8.Free;   ComboBox1.Free;   ComboBox2.Free;   ComboBox3.Free;   ComboBox4.Free;   ComboBox5.Free;   ComboBox6.Free;   ComboBox7.Free;   ComboBox8.Free;   CheckBox1.Free;   CheckBox2.Free;   CheckBox3.Free;   CheckBox4.Free;   CheckBox5.Free;   CheckBox6.Free;   CheckBox7.Free;   CheckBox8.Free;   CheckBox9.Free;   CheckBox10.Free;   CheckBox11.Free;   checkBox12.Free;   CheckBox13.Free;   CheckBox14.Free;   CheckBox15.Free;   CheckBox16.Free;   CheckBox17.Free;   CheckBox18.Free;   Label1.Free;   Label2.Free;   Label3.Free;   Label4.Free;   Edit1.Free;   GroupBox1.Free;   GroupBox2.Free;   GroupBox3.Free;   GroupBox4.Free;   Panel1.Free;   splitter1.free;   splitter2.free;   msg.Free;   stats.Free;   form1.Free; end; procedure Edit1Change(Sender: TObject); begin //   RecordPathFileName:=Edit1.text; end; procedure Button1Click(Sender: TObject); begin //   RecordPathFileName:=Edit1.text;   StartRecord; end; procedure Button2Click(Sender: TObject); begin //   StopRecord; end; procedure Button3Click(Sender: TObject); begin //идти в конец пути   RecordPathFileName:=Edit1.text;   try     MovePath.LoadFromFile(RecordFilesPath+RecordPathFileName+RecordFileExt);   except     SendMsg('файл пути не найден');     exit;   end;   GoToPath(true); end; procedure Button4Click(Sender: TObject); begin //идти в начало пути   RecordPathFileName:=Edit1.text;   try     MovePath.LoadFromFile(RecordFilesPath+RecordPathFileName+RecordFileExt);   except     SendMsg('файл пути не найден');     exit;   end;   GoToPath(false); end; procedure Button5Click(Sender: TObject); begin // end; procedure Button6Click(Sender: TObject); begin // end; procedure Button7Click(Sender: TObject); begin //   MoveToPathEnabled:=False;   //SendMsg('Движение остановлено'); end; procedure Button8Click(Sender: TObject); begin // end; procedure CheckBox10Click(Sender: TObject); begin // end; procedure CheckBox11Click(Sender: TObject); begin // end; procedure CheckBox1Click(Sender: TObject); begin // end; procedure CheckBox2Click(Sender: TObject); begin // end; procedure CheckBox3Click(Sender: TObject); begin // end; procedure CheckBox4Click(Sender: TObject); begin // end; procedure CheckBox5Click(Sender: TObject); begin // end; procedure CheckBox6Click(Sender: TObject); begin // end; procedure ComboBox1Change(Sender: TObject); begin // end; procedure ComboBox2Change(Sender: TObject); begin // end; procedure ComboBox3Change(Sender: TObject); begin // end; procedure ComboBox4Change(Sender: TObject); begin // end; procedure ComboBox5Change(Sender: TObject); begin // end; procedure ComboBox6Change(Sender: TObject); begin // end; procedure ComboBox7Change(Sender: TObject); begin // end; procedure ComboBox8Change(Sender: TObject); begin // end; //****************************************************************************** procedure FormClose(Sender: TObject; var Action: TCloseAction); begin   //Action:=caNone; end; procedure debugmsg(s: string); begin   if debug then     SendMsg(s); end; function GetValue(ValName: string): string; begin   result:=RecordPath.Values[ValName]; end; procedure SetValue(ValName: string; Value: string); begin   RecordPath.Values[ValName]:=Value; end; procedure StartRecord; begin   if SavePathEnabled then     exit;   if MoveToPathEnabled then   begin     SendMsg('Во время следования по маршруту запись не возможна');     exit;   end;   RecordPath.Clear;   PointsCount:=0;   SendMsg('Начата запись маршрута');   SavePathEnabled := True end; procedure StopRecord; begin   if not SavePathEnabled then     exit;   // записываем   RecordPath.SaveToFile(GetRecordFileName);   SendMsg('Запись маршрута завершена');   SavePathEnabled := False; end; function GetRecordFileName: string; begin   result:=RecordFilesPath+RecordPathFileName+RecordFileExt; end; procedure SendMsg(msg:string)// отправка системных сообщений клиенту begin   buf:=#$4A;   WriteD(0);   WriteD(10);   WriteS('');   WriteS(msg);   SendToClientEx(MyNick); end; procedure ParseMoveClient; var   i,x,y,z: integer; s: string; begin   if not SavePathEnabled then     exit;   i:=2;   x:=readd(i);   y:=readd(i);   z:=readd(i);   inc(PointsCount);   s:='|'+inttostr(x)+'|'+inttostr(y)+'|'+inttostr(z)+'|';   RecordPath.Add(s);   SendMsg('добавлен чекпоинт № '+inttostr(PointsCount)); end; function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает переменную rezu которая является растоянием между 2 точками var   dx,dy,summa: extended; begin   try   dx:= xpos1-xpos2;   dy:= ypos1-ypos2;   summa:= dx*dx+dy*dy;   if summa = 0 then result:= 0 else result:= Round(sqrt(summa));   debugmsg('delta='+inttostr(result));   except     debugmsg('error in delta');   end; end; function GetMinCheckPoint(PointsList: TStringList): integer; var   i,m,min_dist: integer;   s: string;   x,y,z: integer; begin   result:=-1;   min_dist:=-1;   // проверка на наличие маршрута   if PointsList.Count=0 then   begin     exit;     MoveTimer.Enabled:=False;     MoveToPathEnabled:=False;     SendMsg('Нет данных по маршруту');     exit;   end;   try   for i:=0 to PointsList.count-1 do   begin     s:=PointsList[i];     y:=ExtractValue(s,2);     x:=ExtractValue(s,1);     debugMsg(s+' x:='+inttostr(x)+' y:='+inttostr(y));     m:=delta(x,y,myx,myy);     if m>0 then     begin             if (result=-1) then             begin               min_dist:=m;               result:=i;             end             else               if m<min_dist then               begin                 min_dist:=m;                 result:=i;               end;             end;   end;   except     debugMsg('error in GetMinCheckPoint');   end;//try end; procedure GoToPath(ToForward: boolean); var   x,y,z,i: integer;   s: string; begin   MoveToPathEnabled:= not MoveToPathEnabled;   MoveToForward:=ToForward;   if not MoveToPathEnabled then   begin     MoveTimer.Enabled:=False;     SendMsg('Следование по маршруту остановлено');     exit;   end;   //   // предположительно путь уже прописан в MovePath   //   SendMsg('Пробуем выйти на путь...');   // сперва идем к ближайшему чекпоинту   i:= GetMinCheckPoint(MovePath);   if i<0 then   begin     SendMsg('чекпоинт не найден');     MoveToPathEnabled:=False;   end else   begin     SendMsg('найден ближайший чекпоинт бежим туды');     MoveToPathEnabled:=True;     MoveStepIndex:=i;     if debug then       SendMsg('checkpoint #'+inttostr(i));     s:=MovePath[MoveStepIndex];     x:=ExtractValue(s,1);     y:=ExtractValue(s,2);     z:=ExtractValue(s,3);     if (old_x<>x) and (old_y<>y) and (old_z<>z) then     begin       MoveTo(x,y,z);       old_x:=x;       old_y:=y;       old_z:=z;       old_time:=0;     end;   end;   MoveTimer.Enabled:=True; end; //*************************************************************** procedure OnMove(Sender: TObject); var   x,y,z: integer; s: string; begin   inc(old_time);// счетчик, сколько тиков прошло с последнего клика. исп. при следованию по маршруту   if not MoveToPathEnabled then   begin     try       TTimer(Sender).Enabled:=False;     except     end;     SendMsg('Движение остановлено');     exit;   end;   // возможно мы пали смертью храбрых, то не дергаемся пока   if myHP<=0 then   begin     sendmsg('Die');     MoveToPathEnabled:=False;     exit;   end;   debugmsg('hp:'+inttostr(myhp));   try     // проверяем на существ. объекта     // при отладке всякое может быть     MovePath.Count;   except     TTimer(Sender).Enabled:=False;     exit;   end;   s:=MovePath[MoveStepIndex];   x:=ExtractValue(s,1);   y:=ExtractValue(s,2);   z:=ExtractValue(s,3);   if PosInRange(x,y,z,RangeToCheckPoint) then   begin     if MoveToForward then     begin       if MoveStepIndex=MovePath.Count-1 then       begin         MoveToPathEnabled:=False;         SendMsg('Мы по идее в конечной точке');         exit;       end       else       begin         inc(MoveStepIndex);       end;     end     else     begin        if MoveStepIndex>0 then dec(MoveStepIndex)        else        begin           MoveToPathEnabled:=False;           SendMsg('Мы по идее в начальной точке');           exit;        end;     end;     // мы достигли чекпоинта идем далее     SendMsg('бежим к #'+inttostr(MoveStepIndex));     s:=MovePath[MoveStepIndex];     x:=ExtractValue(s,1);     y:=ExtractValue(s,2);     z:=ExtractValue(s,3);     MoveTo(x,y,z);   end; end; function ExtractValue(sData: string;nIndex: integer): integer; var   s: string;   i,j: integer; begin   i:=0;j:=0;s:='';   s:=sData;   while j<nIndex do   begin     i:=pos('|',S);     if i>=0 then     begin       s:=copy(s,i+1,length(s)-i);       inc(j);     end     else       break;   end;   i:=pos('|',s);   if i>=0 then     s:=copy(s,1,i-1);   try     result:=strtoint(s);   except   end; end; //****************************************************************** //Идти в точку с координатами x,y,z procedure MoveTo(TargetX,TargetY,TargetZ:integer); begin   //01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse)   buf:=#$01;   WriteD(targetx); //куда   WriteD(targety);   WriteD(targetz);   WriteD(MyX); //откуда   WriteD(MyY);   WriteD(MyZ);   WriteD(1); //используем 1-мышь 0-клавиатура   SendToServerEx(MyNick); end; //Проверка находится ли заданная точка в пределах досягаемости. function PosInRange(targetx,targety,targetz,distanciya:integer):boolean; begin      if delta(targetx, targety, MyX, MyY)<=distanciya      then result:=true else result:=false; end; procedure UserInfo;            // обновление донных о себе var   i:word; begin   MyID:=ReadD(18);   MyX:=ReadD(2);   MyY:=ReadD(6);   MyZ:=ReadD(10);   i:=22;   ReadS(i);   if interlude then i:=i+48 else i:=i+44;   MyMaxHP:=ReadD(i);   MyHP:=ReadD(i);   MyMaxMP:=ReadD(i);        // чисто информативно   MyMP:=ReadD(i); end; procedure StatusUpdate;       // обновление данных о себе var   i: integer; begin   for i:=0 to ReadD(6)-1 do    case pck[i*8+10] of     #$09: MyHP:=ReadD(i*8+14);     #$0A: MyMaxHP:=ReadD(i*8+14);     #$0B: MyMP:=ReadD(i*8+14);     #$0C: MyMaxMP:=ReadD(i*8+14);    end; end; //*************************************************************** procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения begin end; procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения begin end; function iif(Bool: Boolean;aTrue: variant; aFalse: variant): variant; begin   if Bool then     result:=aTrue   else     result:=aFalse; end; function ParseCmd(cmd: string):boolean; var   s: string;   i,j,k: integer;   params: array[0..9] of string; // до 10 параметров, должно хватить begin   result:=False;   try     j:=-1;     i:=pos(cmdPrefix,trim(cmd));     if i=0 then       exit;     debugmsg('start ParseCmd: idx:'+inttostr(i)+' cmd: '+cmd);     result:=true;     k:=length(cmdPrefix);     s:=trim(lowercase(cmd));     s:=trim(copy(s,i+k,length(cmd)-i));     debugmsg('trim:'+s);     repeat       inc(j);       k:=pos(cmdDlm,s);       if k>0 then       begin         params[j]:=copy(s,1,k-1); //        s:=copy(s,k+length(cmdDlm),length(s)-k-length(cmdDlm));         s:=trim(copy(s,k+length(cmdDlm),length(s)-k));         debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);       end       else       begin         params[j]:=s;         debugmsg('parm is one');       end;     until pos(cmdDlm,S)=0;     if j>-1 then     begin       inc(j);       params[j]:=s;       debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);     end;     if j=-1 then       exit;     //*******************************************************     // пропарсили команду     // теперь выполняем     //*******************************************************     if params[0]=cmdRecordPath then     begin        if params[1]<>'' then          RecordPathFileName:=params[1]        else          RecordPathFileName:=RecordPathName;        StartRecord;     end     else     if params[0]=cmdSavePath then     begin        StopRecord;     end     else     if params[0]=cmdMove then     begin        if params[1]='' then        begin          SendMsg('хз куда бежать, укажите имя');          exit;        end;        try          MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);        except          SendMsg('файл пути не найден');          exit;        end;        GoToPath(true);     end     else     if params[0]=cmdBack then     begin        if params[1]='' then        begin          SendMsg('хз куда бежать, укажите имя');          exit;        end;        try          MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);        except          SendMsg('файл пути не найден');          exit;        end;        GoToPath(false);     end     else     if (params[0]=cmdStop) and MoveToPathEnabled then       MoveToPathEnabled:=False;   except     debugmsg('error in ParseCmd,params='+cmd);   end; end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен var   i: integer; begin   if FromClient and (ConnectName=MyNick)then     case pck[1] of {      #$1B:  // social               case pck[2] of                 #$06: StartRecord; //Yes                 #$05: StopRecord;//No                 #$04: begin GoToPath(true); pck:=''; end;               end; //case }      #$01: // move               ParseMoveClient;      #$38: // say2            // если это команда и она обработана и надо очистить чат             if ParseCmd(ReadS(2)) and EraseCommandFromChat then               pck:='';// kill packet      #$48:            begin              myx:=ReadD(2);              myY:=ReadD(6);              myZ:=ReadD(10);            end;     end; // case   if FromServer and (ConnectName=MyNick) then     case pck[1] of       #$04: UserInfo;       #$0E: StatusUpdate;     end; // case end.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 2 спасибками от:
Старый 08.12.2008, 22:00   #15
Местный
 
Аватар для wanick
 
Регистрация: 20.09.2008
Сообщений: 133
Сказал Спасибо: 32
Имеет 54 спасибок в 22 сообщенях
wanick пока неопределено
По умолчанию под ру ОФФ

вот скрипт от alexsl для ру ОФФА проверял работает скорее всего и на Kamael пойдет

функцию sendMsg - закоментарил т.к. она встроена в последних версиях пакетхака

Последний раз редактировалось wanick, 08.12.2008 в 22:15.
wanick вне форума   Ответить с цитированием
За это сообщение wanick нажился 3 спасибками от:
Старый 10.12.2008, 21:50   #16
Местный
 
Аватар для wanick
 
Регистрация: 20.09.2008
Сообщений: 133
Сказал Спасибо: 32
Имеет 54 спасибок в 22 сообщенях
wanick пока неопределено
По умолчанию

А вот это скрипт переделан и доработан мной, управление скриптом прямо в игре



в шорткаты 2 закладку 1 ячейку вставляется предмет по клику на который открывается управление скриптом


delphi Код:
/////////////////////////////////////////////////////////////// // для: L2PacketHack by xkor  // посл. редактирование: 14.05.2008, 15:03msk, alexsl // доработан и внедре интерфейс управления из Игры by Wanick 10.12.2008 4:45msk // назначение: перемещение чара по заранее записаным маршруту(м)  //    // краткая инструкция:  //  //                     1. прописать ник в MyNick    //  //    - для записи пути в файл:  //                     1. встаем на исходную позицию  //                     2. в чат пишим "===rec test1" (test1 - или другое имя без пробелов)  //                     3. бежим куда нужно. (желательно много не кликать на одно и тоже место. все клики записываются в файл)  //                     4. в чат пишим "===save"  //                     5. все. теперь данные записаны на диск, согласно настройкам и под именем test1 указ. в п.п.2  //  //    - записываем требуемые пути с разными маршрутами и названиями  //  //    - использование  //                   1. бег до последнего чекпоинта(при достижении скрипт завершает работу):  //                        пишим в чат "===go test1" (test1 - название записанного маршрута)  //                   2. бег до первого чекпоинта (при достижении скрипт завершает работу):  //                        пишим в чат "===back test1" (test1 - название записанного маршрута)  //                   3. для остановки скрипта при передвижении: пишим в чат "===stop"  //  //   как работает?: при запуске бежит к ближайшему чекпоинту и следует согласно направлению //   Использовались идеии, коды участников форума за, что спасибо  ///////////////////////////////////////////////////////////////////// const   MyNick = 'ваш Ник';// <------------------------------   interlude = false;    debug = false;   // эта переменная указывает уничтожить пакет или нет если он обработан    // может данные нужны для других скриптов    EraseCommandFromChat = true;    //*******************************************************    RecordFilesPath = 'c:\tmp\'; // путь где хранятся наши файлы   RecordPathName = 'recordmove'; // файл по умолчанию    RecordFileExt = '.txt';// расширение по умолчанию    RangeToCheckPoint = 150; // дистанция до чекпоинта при которой считается , что мы достигли оного   MoveTrigerDelay = 500; // срабатывание таймера на движение  0,5 сек   cmdPrefix = '===';// с этих символов начинается команда    cmdDlm    = ' ';// разделитель параметров команды, параметры не должены содержать разделитель    // команды в общий чат                             // пример    cmdRecordPath = 'rec';   // в общий чат "===rec giran1"    cmdSavePath = 'save';    // в общий чат "===save"    cmdMove = 'go';         // в общий чат "===go giran1"    cmdBack = 'back';        // в общий чат "===back giran1"    cmdStop = 'stop';       // останавливает следование по маршруту   cmdDelete = 'delete';     // в общий чат "===delete giran1"   cmdPatrol = 'patrol'// в общий чат "===patrol giran1"  - егает туда обратно по маршруту   //*******************************************************    QItemID = 765; // Свиток Заговорщика   RandomID = 1953719668; // случаны objectID; //******************************************************* var    // movement data    MovePath,                   //  данные по которому мы будем двигатся в данный момент    RecordPath: TStringList;    //  данные для записи пути    RecordPathFileName: string; // название файла для записи   selectPathFileName: string; // название файла движения   PointsCount: integer;       // кол-во поинтов в процессе записи пути    SavePathEnabled: boolean;   // флаг записи пути    MoveToPathEnabled: boolean; // флаг движения по пути    MoveToForward: boolean;     // направление движения да-вперед, нет - назад    MoveStepIndex: integer;     // текущ. чекпоинт (куды бежим сейчас)    MoveTimer: TTimer;          //    old_X,old_Y,old_Z,old_time: integer;   myX,myY,myZ: integer;       // наши статы    myID: integer;    myHP,myMP,myMaxHP,myMaxMP: integer// by wanick // id нашего диалогового окна для сартировки на перехвате   menuID :String = 'scr_'+ IntToStr (RandomID) +'?';   isInit,isPatrol:boolean; procedure Init; //Вызывается при включении скрипта  begin  isInit:=true;  MoveTimer := TTimer.Create(nil);  MoveTimer.Enabled := False;   MoveTimer.Interval := MoveTrigerDelay;   MoveTimer.OnTimer := @OnMove;   RecordPathFileName:=''//запрос на itemList вместе с ним приходит пакет UserInfo //нужен для первоначального определения позиции  buf:=hstr('14');  SendToServerEX(MyNick);  RecordPath:=TStringList.Create;   MovePath:=TStringList.Createendprocedure Free; //Вызывается при выключении скрипта  begin   if RecordPath<>nil then   try      RecordPath.Free;    except      debugmsg('error free RecordPath');    end;    if MovePath<>nil then    try      MovePath.Free;    except      debugmsg('error free MovePath');    endendprocedure debugmsg(s: string)begin    if debug then      SendMsgPM(s); endfunction GetValue(ValName: string): stringbegin    result:=RecordPath.Values[ValName];  endprocedure SetValue(ValName: string; Value: string)begin    RecordPath.Values[ValName]:=Value;  endprocedure StartRecord;  begin    if SavePathEnabled then      exit;    if MoveToPathEnabled then    begin      SendMsgPM('Во время следования по маршруту запись не возможна');     exit;    end;    RecordPath.Clear;    PointsCount:=0;    SendMsgPM('Начата запись маршрута');   SavePathEnabled := True  endprocedure StopRecord;  begin    if not SavePathEnabled then      exit;    // записываем    RecordPath.SaveToFile(GetRecordFileName);    SendMsgPM('Запись маршрута завершена');   SavePathEnabled := Falseendfunction GetRecordFileName: stringbegin    result:=RecordFilesPath+RecordPathFileName+RecordFileExt;  endprocedure SendMsgPM(msg:string)// отправка сообщений клиенту begin //62 CB 04 00 00 02 00 00 00 00 00 00 00 42 04 35 04 41 04 42 04   buf:=#$62;   WriteD(1227);   WriteD(2);   WriteD(0);   WriteS(msg);   SendToClientEx(MyNick)end; procedure ParseMoveClient;  var    i,x,y,z: integer; s: stringbegin   if MoveToPathEnabled then begin ParseCmd ('===stop'); OpenControl; end;   if not SavePathEnabled then      exit;    i:=2;    x:=readd(i);    y:=readd(i);    z:=readd(i);    inc(PointsCount);    s:='|'+inttostr(x)+'|'+inttostr(y)+'|'+inttostr(z)+'|';    RecordPath.Add(s);    SendMsgPM('добавлен чекпоинт № '+inttostr(PointsCount)); endfunction delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает переменную rezu которая является растоянием между 2 точками  var    dx,dy,summa: extendedbegin    try    dx:= xpos1-xpos2;    dy:= ypos1-ypos2;    summa:= dx*dx+dy*dy;    if summa = 0 then result:= 0 else result:= Round(sqrt(summa));    debugmsg('delta='+inttostr(result));    except      debugmsg('error in delta');    endendfunction GetMinCheckPoint(PointsList: TStringList): integervar    i,m,min_dist: integer;    s: string;    x,y,z: integerbegin    result:=-1;    min_dist:=-1;    // проверка на наличие маршрута    if PointsList.Count=0 then    begin      exit;      MoveTimer.Enabled:=False;      MoveToPathEnabled:=False;      SendMsgPM('Нет данных по маршруту');     exit;    end;    try    for i:=0 to PointsList.count-1 do    begin      s:=PointsList[i];      y:=ExtractValue(s,2);      x:=ExtractValue(s,1);      debugMsg(s+' x:='+inttostr(x)+' y:='+inttostr(y));      m:=delta(x,y,myx,myy);      if m>0 then      begin              if (result=-1) then              begin                min_dist:=m;                result:=i;              end              else                if m<min_dist then                begin                  min_dist:=m;                  result:=i;                end;              end;    end;    except      debugMsg('error in GetMinCheckPoint');    end;//try  endprocedure GoToPath(ToForward: boolean)var    x,y,z,i: integer;    s: stringbegin    MoveToPathEnabled:= not MoveToPathEnabled;    MoveToForward:=ToForward;    if not MoveToPathEnabled then    begin      MoveTimer.Enabled:=False;      SendMsgPM('Следование по маршруту остановлено');     exit;    end;    //    // предположительно путь уже прописан в MovePath    //    SendMsgPM('Пробуем выйти на путь...');   // сперва идем к ближайшему чекпоинту    i:= GetMinCheckPoint(MovePath);    if i<0 then    begin      SendMsgPM('чекпоинт не найден');     MoveToPathEnabled:=False;    end else    begin      //SendMsgPM('найден ближайший чекпоинт бежим туды');     MoveToPathEnabled:=True;      MoveStepIndex:=i;      if debug then        SendMsgPM('checkpoint #'+inttostr(i));     s:=MovePath[MoveStepIndex];      x:=ExtractValue(s,1);      y:=ExtractValue(s,2);      z:=ExtractValue(s,3);     if (old_x<>x) and (old_y<>y) and (old_z<>z) then     begin       MoveTo(x,y,z);       old_x:=x;       old_y:=y;       old_z:=z;       old_time:=0;     end;   end;    MoveTimer.Enabled:=Trueend//*************************************************************** procedure OnMove(Sender: TObject)var    x,y,z: integer; s: stringbegin    inc(old_time);// счетчик, сколько тиков прошло с последнего клика. исп. при следованию по маршруту   if not MoveToPathEnabled then   begin     try       TTimer(Sender).Enabled:=False;     except     end;     SendMsgPM('Движение остановлено');     exit;    end;    // возможно мы пали смертью храбрых, то не дергаемся пока   if myHP<=0 then   begin     SendMsgPM('Die');     MoveToPathEnabled:=False;     exit;   end;   debugmsg('hp:'+inttostr(myhp));   try     // проверяем на существ. объекта      // при отладке всякое может быть      MovePath.Count;    except      TTimer(Sender).Enabled:=False;      exit;    end;    s:=MovePath[MoveStepIndex];    x:=ExtractValue(s,1);    y:=ExtractValue(s,2);    z:=ExtractValue(s,3);    if PosInRange(x,y,z,RangeToCheckPoint) then    begin      if MoveToForward then      begin        if MoveStepIndex=MovePath.Count-1 then        begin         SendMsgPM('Вы в конечной точке');         MoveToPathEnabled:=False;         if isPatrol then           ParseCmd ('===back '+selectPathFileName);         OpenControl;         exit;       end          else        begin          inc(MoveStepIndex);        end;      end      else      begin         if MoveStepIndex>0 then dec(MoveStepIndex)         else         begin            MoveToPathEnabled:=False;            SendMsgPM('Вы в начальной точке');           if isPatrol then              ParseCmd ('===go '+selectPathFileName);           OpenControl;           exit;         end;      end;      // мы достигли чекпоинта идем далее      SendMsgPM('бежим к #'+inttostr(MoveStepIndex));     s:=MovePath[MoveStepIndex];      x:=ExtractValue(s,1);      y:=ExtractValue(s,2);      z:=ExtractValue(s,3);      MoveTo(x,y,z);    endendfunction ExtractValue(sData: string;nIndex: integer): integervar    s: string;    i,j: integerbegin    i:=0;j:=0;s:='';    s:=sData;    while j<nIndex do    begin      i:=pos('|',S);      if i>=0 then      begin        s:=copy(s,i+1,length(s)-i);        inc(j);      end      else        break;    end;    i:=pos('|',s);    if i>=0 then      s:=copy(s,1,i-1);    try      result:=strtoint(s);    except    endend//******************************************************************  //Bot by Skymanrus  //modified by NLObP специально для Владера, моего сына!  //ПЕРЕМЕЩЕНИЕ:  //Идти в точку с координатами x,y,z  //MOVETO(x,y,z)  procedure MoveTo(TargetX,TargetY,TargetZ:integer)begin    //01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse)    buf:=#$0F;   WriteD(targetx); //куда    WriteD(targety);    WriteD(targetz);    WriteD(MyX); //откуда    WriteD(MyY);    WriteD(MyZ);    WriteD(1); //используем 1-мышь 0-клавиатура    SendToServerEx(MyNick)end//Ориентация на местности:  //Проверка находится ли заданная точка в пределах досягаемости. Если да, то выполняется кусок скрипта в фигурных скобках {}.  function PosInRange(targetx,targety,targetz,distanciya:integer):booleanbegin       if delta(targetx, targety, MyX, MyY)<=distanciya       then result:=true else result:=falseendprocedure UserInfo;            // обновление донных о себе  var    i:wordbegin    MyID:=ReadD(18);    MyX:=ReadD(2);    MyY:=ReadD(6);    MyZ:=ReadD(10);    i:=22;   ReadS(i);   if interlude then i:=i+48 else i:=i+44;   MyMaxHP:=ReadD(i);   MyHP:=ReadD(i);   MyMaxMP:=ReadD(i);        // чисто информативно   MyMP:=ReadD(i)endprocedure StatusUpdate;       // обновление данных о себе  var    i: integer; begin   for i:=0 to ReadD(6)-1 do    case pck[i*8+10] of      #$09: MyHP:=ReadD(i*8+14);      #$0A: MyMaxHP:=ReadD(i*8+14);      #$0B: MyMP:=ReadD(i*8+14);      #$0C: MyMaxMP:=ReadD(i*8+14);     end; end; //***************************************************************  procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения  begin  endprocedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения  begin  endfunction iif(Bool: Boolean;aTrue: variant; aFalse: variant): variantbegin    if Bool then      result:=aTrue    else      result:=aFalse;  endfunction ParseCmd(cmd: string):booleanvar    s: string;    i,j,k: integer;    params: array[0..9] of string; // до 10 параметров, должно хватить   isOne:boolean =false; begin    result:=False;   try     j:=-1;     i:=pos(cmdPrefix,trim(cmd));      if i=0 then        exit;      debugmsg('start ParseCmd: idx:'+inttostr(i)+' cmd: '+cmd);      result:=true;      k:=length(cmdPrefix);      s:=trim(lowercase(cmd));      s:=trim(copy(s,i+k,length(cmd)-i));      debugmsg('trim:'+s);     repeat       inc(j);        k:=pos(cmdDlm,s);       params[0] := '';       params[1] := '';       if k>0 then       begin          params[j]:=copy(s,1,k-1)//        s:=copy(s,k+length(cmdDlm),length(s)-k-length(cmdDlm));          s:=trim(copy(s,k+length(cmdDlm),length(s)-k));          debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);        end        else        begin          params[j]:=s;         isOne := true;         debugmsg('parm is one');        end;      until pos(cmdDlm,S)=0;      if (j>-1) AND (NOT isOne) then     begin        inc(j);        params[j]:=s;        debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);      end;     if j=-1 then       exit;      //*******************************************************      // пропарсили команду      // теперь выполняем      //*******************************************************      if params[0]=cmdRecordPath then      begin        sendMsg(params[1]);        if (params[1] <> '') then          RecordPathFileName:=params[1]         else           RecordPathFileName:=RecordPathName;         StartRecord;      end      else      if params[0]=cmdSavePath then      begin         StopRecord;      end      else      if params[0]=cmdMove then      begin        if (params[1] <> '') then          selectPathFileName:=params[1]        else           selectPathFileName:=RecordPathName;        try          MovePath.LoadFromFile(RecordFilesPath+selectPathFileName+RecordFileExt);        except           SendMsgPM('файл пути не найден');          exit;         end;         GoToPath(true);      end      else      if params[0]=cmdBack then      begin         if (params[1] <> '') then          selectPathFileName:=params[1]        else           selectPathFileName:=RecordPathName;        try          MovePath.LoadFromFile(RecordFilesPath+selectPathFileName+RecordFileExt);        except           SendMsgPM('файл пути не найден');          exit;         end;         GoToPath(false);      end      else      if (params[0]=cmdStop) and MoveToPathEnabled then  begin       MoveToPathEnabled:=False;       isPatrol:= false;     end     else     if (params[0] = cmdDelete) then begin SendMsgPM ('Удаление не работает'); exit; end     else     if (params[0] = cmdPatrol) then     begin          isPatrol := true;          if (params[1] <> '') then             selectPathFileName:=params[1]          else             selectPathFileName:=RecordPathName;          ParseCmd ('===go '+selectPathFileName);     end;   except     debugmsg('error in ParseCmd,params='+cmd);    endendprocedure OpenControl; var // первая часть tmpRS, textSR, textPath:string; //вторая часть textCombo:string; begin   tmpRS := 'rec';   if SavePathEnabled then tmpRS := 'save';   textSR := 'Начать запись';   if SavePathEnabled then textSR := 'Завершить запись';   textPath := 'Введите название пути:</td><td><edit length="15" var="RecordPathName" height=9 width=120>';   if SavePathEnabled then textPath := 'Идет запись пути: <font color="FF0000">'+RecordPathFileName+'</font>'; //--------------   textCombo := 'Выберите путь:</td><td><edit length="15" var="selectPathName" height=9 width=170>'; //  textCombo := 'Выберите пути:</td><td><combobox var="selectPathName" width=170 list="'+ getPathList +'">';   buf:=#$19;   WriteD(RandomID);   WriteS('<HTML><BODY> ' +'<font color="LEVEL">Создать новый маршрут:</font><br>' +'<table width=270 height=17>'    +'<tr>'           +'<td>'+ textPath +'</td>'    +'</tr>' +'</table>' +'<br>'+ cButton(textSR, '==='+tmpRS+' $RecordPathName', 110, 22, (not MoveToPathEnabled)) +'<img src="L2UI.SquareWhite" width=270 height=1><img src="L2UI.SquareBlank" width=270 height=4>' +'<font color="LEVEL">Использовать уже имеющийся маршрут:</font><br>' +'<table width=270 height=17>'    +'<tr>'           +'<td>'+ textCombo +'</td>'    +'</tr>' +'</table><br>' +'<table width=270 height=17>'    +'<tr>'           +'<td fixwidth=95>'+ cButton('Вперед', '===go $selectPathName', 95, 22, ((not MoveToPathEnabled) AND (not SavePathEnabled))) +'</td>'           +'<td fixwidth=95>'+ cButton('Стоп', '===stop', 95, 22, MoveToPathEnabled) +'</td>'           +'<td fixwidth=95>'+ cButton('Назад', '===back $selectPathName', 95, 22, ((not MoveToPathEnabled) AND (not SavePathEnabled))) +'</td>'    +'</tr>' +'</table><br>' +'<font color="LEVEL">а также можно:</font>' + cButton('Патрулировать путь', '===patrol $selectPathName', 145, 22, ((not MoveToPathEnabled) AND (not SavePathEnabled))) //+ cButton('Удалить выбраный путь', '===delete $selectPathName', 145, 22) +'<img src="L2UI.SquareWhite" width=270 height=1><img src="L2UI.SquareBlank" width=270 height=4>' +'скрипт сохранения маршрутов передвижения by <font color="LEVEL">alexsl</font>.<br>' +'Игровой интерфейс, доработка и расширение возможностей by <font color="LEVEL">Wanick</font>.<br>' +'Вопросы и обсуждения на сайте <font color="LEVEL">http://coderx.ru</font>' +'</BODY></HTML>');   WriteD(QItemID);   SendToClient; end; function cButton(var value, action:string; width, height:integer; show:boolean=true ):string; begin   Result := '<table border=1 cellspacing=1 cellpadding=0 bgcolor="b09979" width="'+ IntToStr(width) +'" height="'+ IntToStr(height) +'"><tr><td><center>'+value+'</center></td></tr></table>';   if not show then exit;   Result := '<button value="'+ value +'"'    +'action="bypass -h '+ menuID + action +'"'    +'width="'+ IntToStr(width) +'" height="'+ IntToStr(height) +'"'    +'back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">'; end; function getPathList:string; begin   Result := 'recordmove'; end; procedure MyRule (var sel:string); begin //sendMsg(sel); ParseCmd(sel); OpenControl; end; //основная часть скрипта  //вызывается при приходе каждого пакета если скрипт включен  var    i: integer;   tmp1: string; // временная переменная begin    if FromClient and (ConnectName=MyNick)then      case pck[1] of       #$0F: // move               ParseMoveClient;       #$49: // say2            // если это команда и она обработана и надо очистить чат              if ParseCmd(ReadS(2)) and EraseCommandFromChat then                pck:='';// kill packet       #$59:            begin               myx:=ReadD(2);               myY:=ReadD(6);               myZ:=ReadD(10);             end; //by wanick     #$19: //перехват пакета на использование наше вещи           if ReadD(2) = RandomID then begin pck := ''; OpenControl; end;     #$23: //  перехват наших действий в диалоговом окне       begin            tmp1:= ReadS(2);            if Pos (menuID, tmp1) = 1 then begin                     pck:='';                     tmp1 := Copy(tmp1, Length(menuID)+1, Length(tmp1)-Length(menuID));                     MyRule(tmp1);            end;       end;     end; // case   if FromServer and (ConnectName=MyNick) then      case pck[1] of        #$32: UserInfo;       #$18: StatusUpdate; //by Wanick      #$11:begin       if isInit=false then       begin            buf:=pck;            SendToClient;       end       else          begin             isInit:=false;             pck:='';             buf:=#$21;             buf := buf + HStr('01 00 02 00 04 00 ');             WriteD (RandomID);             WriteD(QItemID);             buf := buf + HStr('11 00 00 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F1 D8 FF FF');             SendToClient;             buf:=#$44;             buf := buf + HStr('01 00 00 00 0C 00 00 00 ');             WriteD(RandomID);             buf := buf + HStr('01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00');             SendToClient;             pck:='';            // OpenControl;          end;      end; //#11     end; // case   if pck='' then exit; end.

Не получилось сделать выбор уже существующих маршрутов в combobox
из-за ограниченных возможностей FastScript в плагине, собираюсь сделать плагин там будет по проще.

если кто знает как из fastScript получить список фалов пишите

Последний раз редактировалось wanick, 11.12.2008 в 20:39. Причина: забыл упоминуть скрипт для Оффа
wanick вне форума   Ответить с цитированием
За это сообщение wanick нажился 7 спасибками от:
Старый 11.12.2008, 18:54   #17
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от wanick Посмотреть сообщение
если кто знает как из fastScript получить список фалов пишите
Надо вот так попробовать
delphi Код:
var   searchResult : TSearchRec; begin   // Попытка найти правильные файлы, соответствующие Unit1.d* в текущем каталоге   if FindFirst('Unit1.d*', faAnyFile, searchResult) = 0 then   begin     repeat       ShowMessage('Имя файла = '+searchResult.Name);       ShowMessage('Размер файла = '+IntToStr(searchResult.Size));     until FindNext(searchResult) <> 0;     // Должен освободить ресурсы, используемые этим успешным поиском     FindClose(searchResult);   end; end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 11.12.2008, 20:33   #18
Местный
 
Аватар для wanick
 
Регистрация: 20.09.2008
Сообщений: 133
Сказал Спасибо: 32
Имеет 54 спасибок в 22 сообщенях
wanick пока неопределено
По умолчанию

я так пробовал проблема в том что TSearchRec, это запись(record) из sysutils.dll, а FastScript не позволяет использовать "uses sysutils;"
пробовал и через подгрузку dll делать, скорее всего не получилось, из-за того что SysUtils не лежит в папке с пакетхаком, и надо указывать полный путь от корня диска, а как определить путь в зависимости от системы я не знаю да и не искал, в скрипте нестал вводить переменную, путь до библиотеки SysUtils узеры могут испугатся )) , проще сделать плагин. что я и собираюсь сделать. а в плагине и "uses sysutils;" не проблема.
wanick вне форума   Ответить с цитированием
Старый 12.12.2008, 01:02   #19
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от wanick Посмотреть сообщение
uses sysutils;
такое FastScript собсно и не поддерживает...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.12.2008, 18:27   #20
Местный
 
Аватар для wanick
 
Регистрация: 20.09.2008
Сообщений: 133
Сказал Спасибо: 32
Имеет 54 спасибок в 22 сообщенях
wanick пока неопределено
По умолчанию

скрипт включил ?
myNick - прописал ?
на каком серваке грация или что у тебя или ру Офф?
wanick вне форума   Ответить с цитированием
Ответ

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


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

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

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


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

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

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