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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 27.04.2008, 17:41   #1
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Автоматизация движения по маршруту

Организация движения чара по маршруту. Выдернул из скрипта рыбалки.
delphi Код:
//Автоматизация движения по маршруту by NLObP для L2PacketHack v.3.1.8+// program Move; { Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя. } const   Name='NLObP'//имя чара для которого включаем скрипт //*************************************************************** var   moveto1: TTimer;   distanciya:boolean;   MestoLovli, mov, i, j, MyID, MyXpos, MyYpos, MyZpos: integer; //*************************************************************** //Вызывается при включении скрипта //*************************************************************** procedure Init; begin   MestoLovli:=1; //номер маршрута   //таймеры, можно поправить время по обстоятельствам   moveto1:=TTimer.Create(nil);   moveto1.OnTimer:=@Onmoveto1;   moveto1.enabled:=false;   moveto1.interval:=1000; //время задержки end; //*************************************************************** //Вызывается при выключении скрипта //*************************************************************** procedure Free; begin   moveto1.OnTimer := nil;   moveto1.Enabled := false;   moveto1.Interval := 0;   moveto1.Free; end; //*************************************************************** // Все перемещения чара здесь!!! //*************************************************************** procedure OnMoveTo1(Sender: TObject); begin   case mov of     //-------------------------------------------------     //1 бежим к фишерману в Гиран-харбор     //-------------------------------------------------     1100: MoveTo(51049,186286,-3672);     1101: MoveTo(50920,186425,-3631);     1102: MoveTo(50553,186269,-3631);     1103: MoveTo(49912,185723,-3561);     1104: MoveTo(49126,185867,-3491);     1105: MoveTo(48806,186219,-3491);     1106: Mov:=1315;     //-------------------------------------------------     //2 бежим к фишерману в Гиран-харбор     //-------------------------------------------------     1200: MoveTo(50931,185930,-3672);     1201: MoveTo(51030,186033,-3676);     1202: MoveTo(51065,186124,-3676);     1203: MoveTo(50987,186359,-3656);     1204: MoveTo(50837,186416,-3630);     1205: MoveTo(50620,186268,-3630);     1206: MoveTo(50397,186114,-3630);     1207: MoveTo(50152,185954,-3589);     1208: MoveTo(49912,185830,-3560);     1209: MoveTo(49625,185825,-3560);     1210: MoveTo(49347,185813,-3490);     1211: MoveTo(49118,185886,-3490);     1212: MoveTo(48942,186034,-3490);     1213: MoveTo(48786,186220,-3490);     1214: Mov:=1315;     //-------------------------------------------------     //3 бежим к фишерману в Гиран-харбор     //-------------------------------------------------     1300: MoveTo(52452,186940,-3665);     1301: MoveTo(52280,187089,-3631);     1302: MoveTo(52025,187265,-3631);     1303: MoveTo(51755,187315,-3631);     1304: MoveTo(51476,187101,-3631);     1305: MoveTo(51228,186902,-3631);     1306: MoveTo(50977,186692,-3631);     1307: MoveTo(50676,186423,-3631);     1308: MoveTo(50425,186213,-3631);     1309: MoveTo(50182,186015,-3599);     1310: MoveTo(49932,185836,-3560);     1311: MoveTo(49591,185850,-3560);     1312: MoveTo(49290,185853,-3490);     1313: MoveTo(49032,185921,-3490);     1314: MoveTo(48790,186223,-3490);     1315: begin       //мы у фишермана, покупаем крючки и обмениваем мусор на пруфы       MoveTo1.enabled:=false;       trade:=200;       trade1.enabled:=true;       TradeCount:=0;       Mov:=0;       msg.Lines.Add('Продадим/купим/обменяем...');     end;     //-------------------------------------------------     //1 бежим от фишермана на берег в Гиран-харбор     //-------------------------------------------------     2100: MoveTo(48786,186215,-3480);     2101: MoveTo(48922,186037,-3490);     2102: MoveTo(49058,185930,-3490);     2103: MoveTo(49170,185860,-3490);     2104: MoveTo(49585,185865,-3560);     2105: MoveTo(49908,185843,-3560);     2106: MoveTo(50121,185970,-3587);     2107: MoveTo(50502,186174,-3630);     2108: MoveTo(50701,186330,-3630);     2109: MoveTo(50904,186471,-3630);     2110: MoveTo(51062,186567,-3630);     2111: MoveTo(51164,186504,-3676);     2112: MoveTo(51381,186442,-3676);     2113: Mov:=2320;     //-------------------------------------------------     //2 бежим от фишермана на берег в Гиран-харбор     //-------------------------------------------------     2200: MoveTo(48781,186197,-3490);     2201: MoveTo(48899,186049,-3490);     2202: MoveTo(49066,185916,-3490);     2203: MoveTo(49222,185843,-3490);     2204: MoveTo(49580,185846,-3560);     2205: MoveTo(49783,185862,-3560);     2206: MoveTo(50012,185914,-3568);     2207: MoveTo(50191,186002,-3599);     2208: MoveTo(50375,186097,-3630);     2209: MoveTo(50515,186211,-3630);     2310: MoveTo(50619,186301,-3630);     2311: MoveTo(50715,186381,-3630);     2312: MoveTo(50831,186422,-3630);     2313: MoveTo(50949,186359,-3647);     2314: MoveTo(51033,186267,-3676);     2315: MoveTo(51100,186129,-3676);     2316: MoveTo(51001,186029,-3676);     2317: MoveTo(50933,185934,-3676);     2318: Mov:=2320;     //-------------------------------------------------     //3 бежим от фишермана на берег в Гиран-харбор     //-------------------------------------------------     2300: MoveTo(48784,186224,-3480);     2301: MoveTo(48906,186063,-3490);     2302: MoveTo(49037,185949,-3490);     2303: MoveTo(49200,185858,-3490);     2304: MoveTo(49601,185833,-3560);     2305: MoveTo(49844,185827,-3560);     2306: MoveTo(50200,186064,-3607);     2307: MoveTo(50448,186242,-3630);     2308: MoveTo(50648,186407,-3630);     2309: MoveTo(50848,186584,-3630);     2310: MoveTo(51077,186782,-3630);     2311: MoveTo(51258,186927,-3630);     2312: MoveTo(51424,187069,-3630);     2313: MoveTo(51630,187205,-3630);     2314: MoveTo(51787,187300,-3630);     2315: MoveTo(52019,187216,-3630);     2316: MoveTo(52192,187106,-3630);     2317: MoveTo(52329,187024,-3630);     2318: MoveTo(52482,186920,-3677);     2319: MoveTo(52568,186838,-3677);     2320: begin       MoveTo1.enabled:=false;       Mov:=0;       fishin.enabled:=true; //продолжим ловить рыбу       msg.Lines.Add('Продолжим ловить рыбу!!!');     end;     //-------------------------------------------------     //1 бежим после смерти на берег в Гиран-харбор...     //-------------------------------------------------     3100: MoveTo(48786,186215,-3480);     3101: MoveTo(48922,186037,-3490);     3102: MoveTo(49058,185930,-3490);     3103: MoveTo(49170,185860,-3490);     3104: MoveTo(49585,185865,-3560);     3105: MoveTo(49908,185843,-3560);     3106: MoveTo(50121,185970,-3587);     3107: MoveTo(50502,186174,-3630);     3108: MoveTo(50701,186330,-3630);     3109: MoveTo(50904,186471,-3630);     3110: MoveTo(51062,186567,-3630);     3111: MoveTo(51164,186504,-3676);     3112: MoveTo(51381,186442,-3676);     3113: Mov:=3317;     //-------------------------------------------------     //2 бежим после смерти на берег в Гиран-харбор...     //-------------------------------------------------     3200: MoveTo(48785,186203,-3490);     3201: MoveTo(48907,186068,-3490);     3202: MoveTo(49041,185940,-3490);     3203: MoveTo(49201,185825,-3490);     3204: MoveTo(49628,185829,-3560);     3205: MoveTo(49983,185850,-3560);     3206: MoveTo(50507,186220,-3630);     3207: MoveTo(50760,186382,-3630);     3208: MoveTo(50889,186435,-3630);     3209: MoveTo(51030,186278,-3676);     3210: MoveTo(51096,186134,-3676);     3211: MoveTo(50915,185939,-3676);     3212: Mov:=3317;     //-------------------------------------------------     //3 бежим после смерти на берег в Гиран-харбор...     //-------------------------------------------------     3300: MoveTo(48768,186185,-3490);     3301: MoveTo(48918,186002,-3490);     3302: MoveTo(49080,185890,-3490);     3303: MoveTo(49238,185821,-3490);     3304: MoveTo(49598,185839,-3560);     3305: MoveTo(49835,185826,-3560);     3306: MoveTo(50052,185868,-3568);     3307: MoveTo(50434,186189,-3630);     3308: MoveTo(50744,186457,-3630);     3309: MoveTo(51096,186752,-3630);     3310: MoveTo(51487,187037,-3630);     3311: MoveTo(51717,187227,-3630);     3312: MoveTo(51881,187325,-3630);     3313: MoveTo(52007,187299,-3630);     3314: MoveTo(52181,187192,-3630);     3315: MoveTo(52349,187025,-3630);     3316: MoveTo(52579,186835,-3676);     3317: begin       MoveTo1.enabled:=false;       Mov:=0;       if not isEquipRod then giverod;       delay(1000);       if not isEquipLure then givelure;       delay(1000);       fishin.enabled:=true; //продолжим ловить рыбу       msg.Lines.Add('Продолжим ловить рыбу!!!');     end;     //-------------------------------------------------     //1 меняем место     //-------------------------------------------------     4100: MoveTo(51384,186429,-3672);     4101: MoveTo(51219,186267,-3672);     4102: MoveTo(51036,186050,-3672);     4103: MoveTo(50932,185926,-3672);     4104: Mov:=4306;     //-------------------------------------------------     //2 меняем место     //-------------------------------------------------     4200: MoveTo(51090,186099,-3671);     4201: MoveTo(51076,186201,-3671);     4202: MoveTo(50977,186336,-3653);     4203: MoveTo(50876,186510,-3625);     4204: MoveTo(51181,186804,-3625);     4205: MoveTo(51365,186967,-3625);     4206: MoveTo(51572,187157,-3625);     4207: MoveTo(51752,187311,-3625);     4208: MoveTo(51955,187368,-3625);     4209: MoveTo(52123,187211,-3625);     4210: MoveTo(52334,187043,-3625);     4211: MoveTo(52586,186835,-3672);     4212: Mov:=4306;     //-------------------------------------------------     //3 меняем место     //-------------------------------------------------     4300: MoveTo(52359,187030,-3626);     4301: MoveTo(51784,187362,-3626);     4302: MoveTo(51365,186951,-3626);     4303: MoveTo(51087,186638,-3626);     4304: MoveTo(51275,186445,-3672);     4305: MoveTo(51378,186435,-3671);     4306: begin       MoveTo1.enabled:=false;       Mov:=0;       MMesto:=0;       fishin.enabled:=true; //продолжим ловить рыбу       msg.Lines.Add('Продолжим ловить рыбу на новом месте!!!');     end;     //-------------------------------------------------     //1 Репозиция на месте рыбалки после боя с мобом     //-------------------------------------------------     9100: begin       moveto1.interval:=500; //время задержки 0,5 сек       MoveTo(51333,186383,-3671);     end;     9101: MoveTo(51381,186427,-3671);     9102: Mov:=9302;     //-------------------------------------------------     //2 Репозиция на месте рыбалки после боя с мобом     //-------------------------------------------------     9200: begin       moveto1.interval:=500; //время задержки 0,5 сек       MoveTo(50966,185965,-3672);     end;     9201: MoveTo(50931,185931,-3672);     9202: Mov:=9302;     //-------------------------------------------------     //3 Репозиция на месте рыбалки после боя с мобом     //-------------------------------------------------     9300: begin       moveto1.interval:=500; //время задержки 0,5 сек       MoveTo(52589,186837,-3672);     end;     9301: MoveTo(52586,186837,-3672);     9302: begin       MoveTo1.enabled:=false;       Mov:=0;       fishin.enabled:=true; //продолжим ловить рыбу       msg.Lines.Add('Продолжим ловить рыбу!!!');       moveto1.interval:=1000; //время задержки 1 сек     end;   end; end; //*************************************************************** //ПЕРЕМЕЩЕНИЕ: //Идти в точку с координатами x,y,z procedure MoveTo(TargetX,TargetY,TargetZ:integer); begin   if PosInRange(TargetX,TargetY,TargetZ,100) then inc(mov)   else MoveTo2(TargetX,TargetY,TargetZ); end; //*************************************************************** procedure MoveTo2(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(MyXpos); //откуда   WriteD(MyYpos);   WriteD(MyZpos);   WriteD(1); //используем 1-мышь 0-клавиатура   SendToServerEx(Name);   msg.Lines.Add('MoveTo('+inttostr(targetx)+','+inttostr(targety)+','+inttostr(targetz)+')'); end; //*************************************************************** //Ориентация на местности: //Проверка находится ли заданная точка в пределах досягаемости. function PosInRange(targetx,targety,targetz,distanciya:extended):boolean; begin      if delta(targetx, targety, MyXpos, MyYpos)<=distanciya      then result:=true else result:=false; end; //*************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //*************************************************************** begin   //****************************************************************************   //не обрабатываем пустые пакеты   if pck='' then exit;   //****************************************************************************   if (ConnectName=Name) and FromServer then begin     case pck[1] of       #$04: begin           //msg.Lines.Add('S>Пакет UserInfo #$04');           //пакет с инфой о моём чаре           i:=2;           MyXpos:=ReadD(i); //получаю координату х моего чара           MyYpos:=ReadD(i); //получаю координату у моего чара           MyZpos:=ReadD(i); //получаю координату z моего чара           //Запоминаем ИД           i:=18;           MyID:=ReadD(i); //получаю ид моего чара       end;     end;   end;   //****************************************************************************   if (ConnectName=Name) and FromClient then begin     case pck[1] of       #$1B: begin         //msg.Lines.Add('C>Пакет RequestSicialAction #$1B');         //социальное действие         case ReadD(2) of           8: begin //unaware             case MestoLovli of               1: mov:=210;               2: mov:=220;               3: mov:=230;             end;             moveto1.enabled:=true;             //msg.Lines.Add('Бежим из магазина на берег...');             //не передаем серверу             pck:='';           end;           //для облечения написания маршрута (требуется панель информации!) {          11: begin //applaud - чекаем точку движения для внесения в скрипт.             info.Lines.Add(': begin');             info.Lines.Add('  if PosInRange('+inttostr(MyXpos)+','+inttostr(MyYpos)+','+inttostr(MyZpos)+',50) then inc(mov)');             info.Lines.Add('  else MoveTo('+inttostr(MyXpos)+','+inttostr(MyYpos)+','+inttostr(MyZpos)+');');             info.Lines.Add('end;');             //не передаем серверу             pck:='';           end;}           12: begin //dance             case MestoLovli of               1: mov:=110;               2: mov:=120;               3: mov:=130;             end;             moveto1.enabled:=true;             //msg.Lines.Add('Бежим в магазин...');             //не передаем серверу             pck:='';           end;         end;       end;       //ValidatePosition пакет от клиента с моими кординатами       #$48: begin         //msg.Lines.Add('C>Пакет ValidatePosition #$48');         MyXpos:=ReadD(2); //получаю координату х моего чара         MyYpos:=ReadD(6); //получаю координату у моего чара         MyZpos:=ReadD(10); //получаю координату z моего чара       end;     end;   end; end.

Последний раз редактировалось NLObP, 14.05.2008 в 01:00. Причина: изменение скрипта
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 13 спасибками от:
Старый 13.05.2008, 18:08   #2
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию

маленькая лепта в скриптоводстве, возможно кому-нибудь понадобится.

что делает:
- автоматически записывает в файл маршрут следования.
- можно загрузить данные пути из файла
- передвигается по маршруту.

Для начала, нужно создать маршрут(ы), запись происходит так:
1. соц. действ. Да - начать запись
2 соц. действ. Нет - остановить.
(записывает в файл все события от клиента на движение юзера, событе мув))
=== вот примерная структкра файла (x,y,z)=========
|19007|145255|-3151|
|19016|144485|-3130|
|19124|144579|-3128|
|19112|144059|-3103|
======================================
Следование по маршруту:
1. соц.дейст. Виктори
(определяется ближ. чекпоинт из массива данных MovePath и следует к данной точке, если достигнит ее то переходит к следующей в зависимости от направления.)

зы: есть мысль, допустим зациклить путь, чтобы бегал по маршруту и по ходу движения проверять на нападение на нас, если напали то приостонавить скрипт. тоды можно включить в паре с любым ботом "локомотив" представленные на данном форуме. В итоге получим место кача не круглое а допустим с более сложной геометрией или там отход на безопастную позицию для ребафа и ренегена манны или .....

зыы: интересно выслушать различные мнения по данному вопросу


delphi Код:
var   // movement data   MovePath,              // данные по которому мы будем двигатся в данный момент   MyFile: TStringList//  данные для записи пути   PointsCount: integer;   SavePathEnabled: boolean;   MoveToPathEnabled: boolean;   MoveToForward: boolean;   MoveStepIndex: integer;   MoveTimer: TTimer;   MoveStepTime: integer;   // self states   myX,myY,myZ: integer;   myID: integer;   myHP,myMP,myMaxHP,myMaxMP: integer; const   MyFileName = 'c:\myfile.txt';   MyNick = 'МойНик';   interlude = false;   debug = false; procedure Init; //Вызывается при включении скрипта begin  MoveTimer := TTimer.Create(nil);  MoveTimer.Enabled := False;  MoveTimer.Interval := 1000;  MoveTimer.OnTimer := @OnMove;  buf:=hstr('0F');  SendToServerEX(MyNick);  MyFile:=TStringList.Create;  MovePath:=TStringList.Create;  try    MyFile.LoadFromFile(MyFileName);  except  end;  //ShowMessage(inttostr(ExtractValue('|100|12345|300|',2)));  // debug end; procedure Free; //Вызывается при выключении скрипта begin   if MyFile<>nil then   begin     MyFile.Free;   end;   if MovePath<>nil then     MovePath.Free; end; function GetValue(ValName: string): string; begin   result:=MyFile.Values[ValName]; end; procedure SetValue(ValName: string; Value: string); begin   MyFile.Values[ValName]:=Value; end; procedure StartRecord; begin   if SavePathEnabled then     exit;   if MoveToPathEnabled then   begin     SendMsg('Во время следования по маршруту запись не возможна');     exit;   end;   MyFile.Clear;   PointsCount:=0;   SendMsg('Начата запись маршрута');   SavePathEnabled := True end; procedure StopRecord; begin   if not SavePathEnabled then     exit;   MyFile.SaveToFile(MyFileName);   SendMsg('Запись маршрута завершена');   SavePathEnabled := False; 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)+'|';   MyFile.Add(s);   SendMsg('добавлен чекпоинт № '+inttostr(PointsCount)); end; function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает переменную rezu которая является растоянием между 2 точками var   dx,dy,summa: extended; begin   dx:= xpos1-xpos2;   dy:= ypos1-ypos2;   summa:= dx*dx+dy*dy;   if summa = 0 then result:= 0 else result:= Round(sqrt(summa));     if debug then       SendMsg('delta='+inttostr(result));   {   try     result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));     if debug then       SendMsg('delta='+inttostr(result));   except     result:=-1;     if debug then       SendMsg('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<=1 then     exit;   for i:=0 to PointsList.count-1 do   begin     s:=PointsList[i];     y:=ExtractValue(s,2);     x:=ExtractValue(s,1);     if debug then       SendMsg(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; 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;   //***********************   // берем путь из MyFile   MovePath.assign(MyFile);   //**********************   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);     MoveTo(x,y,z);   end;   MoveTimer.Enabled:=True; end; procedure OnMove(Sender: TObject); var   x,y,z: integer; s: string; begin   if not MoveToPathEnabled then   begin     TTimer(Sender).Enabled:=False;     if debug then       SendMsg('OnMove disabled');     exit;   end;   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,100) 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; //****************************************************************** //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:=#$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);   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; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен 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;//attack!               end; //case      #$01: // move               ParseMoveClient;      #$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.

Последний раз редактировалось alexsl, 13.05.2008 в 18:20.
alexsl вне форума   Ответить с цитированием
За это сообщение alexsl нажился 10 спасибками от:
Старый 13.05.2008, 18:52   #3
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию

ппц откуда этот скрипт? сам писал?
DashKAaa вне форума   Ответить с цитированием
Старый 13.05.2008, 19:43   #4
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию

Цитата:
Сообщение от DashKAaa Посмотреть сообщение
ппц откуда этот скрипт? сам писал?
так сказать на вольную тему (для изучения). естестено с встаками из готовых скриптов. Чтото конкретно интересует?
alexsl вне форума   Ответить с цитированием
Старый 13.05.2008, 20:15   #5
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию

да просто маштаб скрипта и функциональность его удивила, можно немножко его подправить и будет готовый фармер для S рецептиков)
DashKAaa вне форума   Ответить с цитированием
Старый 13.05.2008, 22:26   #6
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

NLObP, а последнюю версию скрипта не выложишь она вроде у тя оптимизирована и писанины меньше, честно до фарма дальше записать пакеты разговора с нпц не ушёл а тут ты вроде уменьшил объём скрипта, плиз выложи если не затруднит
Grinch вне форума   Ответить с цитированием
Старый 14.05.2008, 02:10   #7
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от alexsl Посмотреть сообщение
маленькая лепта в скриптоводстве, возможно кому-нибудь понадобится.

что делает:
- автоматически записывает в файл маршрут следования.
- можно загрузить данные пути из файла
- передвигается по маршруту.
Надо попробовать развить скрипт в разрезе ASTAR (A*) алгоритма

Добавлено через 1 час 16 минут
Цитата:
Сообщение от alexsl Посмотреть сообщение
Следование по маршруту:
1. соц.дейст. Виктори
Здесь опечатка: надо Адвансе!

Потестил скрипт. Очень удобен в использовании. Из Гирана в Гиран-харбор 73 чекпоинта. Гном теперь бегает туда и обратно по маршруту как экспресс! В рыбалку можно засунуть и менять места станет намного легче.

Последний раз редактировалось NLObP, 14.05.2008 в 03:23. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
Старый 14.05.2008, 08:32   #8
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию

важно: скрипт токо для отладки

Спасибо всем за замечание, вот вчерашний дописанный скрипт. В описаловке к скрипту все написано. Замечание:
- теперь можно управлять скрипом из других скриптов через чат.
- социальные действия отключены (если надо раскоментировать)
delphi Код:
/////////////////////////////////////////////////////////////// // для: L2PacketHack by xkor  // посл. редактирование: 14.05.2008, 15:03msk, alexsl  // назначение: перемещение чара по заранее записаным маршруту(м)  //    // краткая инструкция:  //  //                     1. прописать ник в MyNick    //  //    - для записи пути в файл:  //                     1. встаем на исходную позицию  //                     2. в чат пишим "===rec test1" (test1 - или другое имя без пробелов)  //                     3. бежим куда нужно. (желательно много не кликать на одно и тоже место. все клики записываются в файл)  //                     4. в чат пишим "===save"  //                     5. все. теперь данные записаны на диск, согласно настройкам и под именем test1 указ. в п.п.2  //  //    - записываем требуемые пути с разными маршрутами и названиями  //  //    - использование  //                   1. бег до последнего чекпоинта(при достижении скрипт завершает работу):  //                        пишим в чат "===go test1" (test1 - название записанного маршрута)  //                   2. бег до первого чекпоинта (при достижении скрипт завершает работу):  //                        пишим в чат "===back test1" (test1 - название записанного маршрута)  //                   3. для остановки скрипта при передвижении: пишим в чат "===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: integerconst    MyNick = 'Мой ник';// <------------------------------   interlude = false;    debug = false;   // эта переменная указывает уничтожить пакет или нет если он обработан    // может данные нужны для других скриптов    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';       // останавливает следование по маршруту    //*******************************************************  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.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      SendMsg(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      SendMsg('Во время следования по маршруту запись не возможна');      exit;    end;    RecordPath.Clear;    PointsCount:=0;    SendMsg('Начата запись маршрута');    SavePathEnabled := True  endprocedure StopRecord;  begin    if not SavePathEnabled then      exit;    // записываем    RecordPath.SaveToFile(GetRecordFileName);    SendMsg('Запись маршрута завершена');    SavePathEnabled := Falseendfunction GetRecordFileName: stringbegin    result:=RecordFilesPath+RecordPathFileName+RecordFileExt;  endprocedure SendMsg(msg:string)// отправка системных сообщений клиенту  begin    buf:=#$4A;    WriteD(0);    WriteD(10);    WriteS('');    WriteS(msg);    SendToClientEx(MyNick)endprocedure ParseMoveClient;  var    i,x,y,z: integer; s: stringbegin    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))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;      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  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;      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:=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;     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);    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:=#$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):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 параметров, должно хватить  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);    endend//основная часть скрипта  //вызывается при приходе каждого пакета если скрипт включен  var    i: integerbegin    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.

Добавлено через 48 минут
Цитата:
Надо попробовать развить скрипт в разрезе ASTAR (A*)
интересная идея, гдето видел геодату от явы сервера, вечерком посмотрю может можно будет прикрутить. ну а на счет оценки стоимости передвижения ... ммм .. какие идеи? вариант: бот камикадзе, бегает туды сюды тыкается или самому отмечать чекпоинты или если есть в геодате инфа о проходимости того или иного участка юзать ее.

Последний раз редактировалось alexsl, 16.05.2008 в 15:01.
alexsl вне форума   Ответить с цитированием
За это сообщение alexsl нажился 5 спасибками от:
Старый 14.05.2008, 11:17   #9
Рыцарь
 
Аватар для mks
 
Регистрация: 21.09.2007
Сообщений: 376
Сказал Спасибо: 11
Имеет 218 спасибок в 106 сообщенях
mks пока неопределено
По умолчанию

Цитата:
Сообщение от alexsl Посмотреть сообщение
интересная идея, гдето видел геодату от явы сервера, вечерком посмотрю может можно будет прикрутить. ну а на счет оценки стоимости передвижения ... ммм .. какие идеи? вариант: бот камикадзе, бегает туды сюды тыкается или самому отмечать чекпоинты или если есть в геодате инфа о проходимости того или иного участка юзать ее.
да, на счет геодаты было бы круто, тогда перемещение бота можно было бы вообще сделать рандомным, что б он просто проверял возможность перемещения в определюнную точку сверяясь с маской геодаты.
ЗЫ а вообще в каком виде и где именно хранится геодата?
mks вне форума   Ответить с цитированием
Старый 14.05.2008, 13:31   #10
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию вот нарыл

Цитата:
да, на счет геодаты было бы круто, тогда перемещение бота можно было бы вообще сделать рандомным, что б он просто проверял возможность перемещения в определюнную точку сверяясь с маской геодаты.
ЗЫ а вообще в каком виде и где именно хранится геодата?
_http://l2j-geodata.sourceforge.net в общем геодата, есть общее описание но нет формата файла или не туды глядел. Может общими усилиями попробуем вычислить формат или гдето уже есть описание? или ну его нх игра не стои свеч
зы: ИМХО довольно удачно продуманный формат описания геодаты
че понял основное:
- мир резделен на 32*32 района/региона
- район разделен на 256*256 блоков
- блок разделен на 8*8 ячеек
- ячейка равняется 16*16 игровым units

ну и всякие вкусности, проверка возможности передвижения
в сторону из ячейки и т.д.

Последний раз редактировалось alexsl, 14.05.2008 в 13:44.
alexsl вне форума   Ответить с цитированием
За это сообщение alexsl нажился 2 спасибками от:
Ответ

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



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

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


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

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

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