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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 20.09.2010, 17:23   #1
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию Рисунок пути

Скрипт должен расчитывать и рисовать путь, который он узнает из пакета MoveToLocation, выбрасывая вещи.

x21 - х начала пути.
x11 - х конца пути.

по аналогии устроены другие переменные.

GetTimeFromPath - получение длинны пути.

dropitem - выброс вещи, который шлется на клиент.

delphi Код:
procedure PaintMyWay(x11,y11,z11,x21,y21,z21:integer); // объявление процедуры begin // начало 1 if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then // не равняется ли длинна пути 0? begin //начало 2 exit; // если да - выходим дабы избежать вылета end; // конец 2 // если же длинна нашего пути не равна 0 то //Описание 1: вычесляем разницу между координатами, вычитаем из нее длинну пути dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)// Описание 1 для x dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); // Описание 1 для y dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)// Описание 1 для z while (dx1>0) or (dx1<0) or (dy1>0) or (dy1<0) or (dz1>0) or (dz1<0) do // начинаем цикл, который выполняется при // условии что разница между разностью начальной и конечной координат x y z не равна 0. begin // начало 3 x11:=x11+dx1;  // прибавляем к начальному x разницу y11:=y11+dy1; // прибавляем к начальному y разницу z11:=z11+dz1;  // прибавляем к начальному z разницу dropItem(x11,y11,z11); // выкидываем вещь в эти координаты if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then //проверяем новые координаты, не равен ли путь с них 0? begin //начало 4 exit; //если это так то выходим дабы избежать ошибки end; //конец 4 dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); // Описание 1 для x dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);// Описание 1 для y dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); // Описание 1 для z end; // конец 3 end; // конец 1  

В чем заключается ПРОБЛЕМА - при непонятно каких обстоятельствах, рисованый путь искривляется.
__________________
Начало.

Последний раз редактировалось supernewbie, 20.09.2010 в 20:36. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием
Старый 20.09.2010, 20:56   #2
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Как понять "рассчитывать путь" ? А еще, если не секрет, зачем это?
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 20.09.2010, 21:10   #3
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

"выкидывай" шмотки в те места в которых клиент сделал validateposition.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 20.09.2010, 21:22   #4
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

Цитата:
Сообщение от J-Fobos Посмотреть сообщение
Как понять "рассчитывать путь" ? А еще, если не секрет, зачем это?
проводить линию прямую, от начала до конца пути, отрезки прямой обозначать аденой.

Добавлено через 10 минут
но мне надо линию епт
__________________
Начало.

Последний раз редактировалось supernewbie, 20.09.2010 в 21:22. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием
Старый 20.09.2010, 22:13   #5
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

А если по такому алгоритму попробовать?

1) Узнаем dx,dy,dz
Код:
dx:=x21-x1;
dy:=y21-y1;
dz:=z21-z1;
3) Узнаем относительную скорость движения чара.
Код:
//здесь опционально, вместо 100 надо (методом тыка) выставить другое значение, чтоб рисовалось с нормальной скоростью
vx:=dx/100; 
vy:=dy/100;
vz:=dz/100;
4) Далее по таймеру кидаем итем на землю увеличивая координаты на vx, vy, vz пока не достигнем конечной точки. Координаты понятное дело округлять до целого.


ЗЫ: зачем эти линии?
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber

Последний раз редактировалось J-Fobos, 20.09.2010 в 22:16.
J-Fobos вне форума   Ответить с цитированием
Старый 20.09.2010, 23:00   #6
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

фобос, ты че-то не то написал)
во-первых просто делить на сто это получится если линия маленькая - промежутки мелкие, если длинная - промежутки большие

А у меня промежутки зависят от длинны пути.

и вообще это нихрена не то что я просил, линия получается КРИВОЙ. Надо понять почему...

Добавлено через 19 минут
delphi Код:
const Name='1'; var Path,ID,itemid:integer; Speed,MoveMul: double; dx,dy,dz:integer; dx1,dy1,dz1:integer; timer:TTimer; i:integer; procedure Init; //Вызывается при включении скрипта begin timer:=TTimer.Create(nil); timer.OnTimer:=@Prishel; timer.enabled:=false; end; procedure Free; //Вызывается при выключении скрипта begin timer.free; end; procedure Say(msg:string); begin   buf:=#$4A;    WriteD(0);   WriteD(3);   WriteS('Инфо');   WriteS(msg);   SendToClientEx(Name); end; procedure Prishel(Sender: TObject); begin ClearPath; timer.enabled:=false; end; procedure ClearPath; begin for i:=0 to itemid do DeleteObject(i); itemid:=0; end; procedure DeleteObject(l:integer); begin buf:=#$08; WriteD(l); SendToClientEx(Name); end; function MyRound(r:double) : double; begin result:=Round(r*10)/10; end; procedure dropItem(x1,y1,z1:integer); begin buf:=#$16; WriteD(id); WriteD(itemid); WriteD(57); WriteD(x1); WriteD(y1); WriteD(z1); WriteD(0); WriteQ(0); WriteD(0); SendToClientEx(Name); Inc(itemid); end; procedure PaintMyWay(x11,y11,z11,x21,y21,z21:integer); begin if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then begin exit; end; dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); while (dx1>0) or (dx1<0) or (dy1>0) or (dy1<0) or (dz1>0) or (dz1<0) do begin x11:=x11+dx1; y11:=y11+dy1; z11:=z11+dz1; dropItem(x11,y11,z11); if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then begin exit; end; dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10); end; end; function GetTimeFromPath(x1,y1,z1,x2,y2,z2:integer;keyword:string) : double; begin if (keyword='time') then result:=Round((sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))+((z2-z1)*(z2-z1)))) / Speed); if (keyword='path') then result:=Round((sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))+((z2-z1)*(z2-z1))))); end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin if FromServer and (ConnectName=Name) and (pck[1]=#$2F) and (ReadD(2)=ID) then begin timer.enabled:=false; ClearPath; //Say('Твой путь равен '+vartostr(GetTimeFromPath(ReadD(14),ReadD(18),ReadD(22),ReadD(2),ReadD(6),ReadD(10)))+'.'); Say('Вы пройдете этот путь за '+vartostr(GetTimeFromPath(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14),'time'))+' секунд.'); PaintMyWay(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14)); timer.interval:=(Round(GetTimeFromPath(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14),'time')))*1000; timer.enabled:=true; end; if FromServer and (ConnectName=Name) and (pck[1]=#$32) then begin ID:=ReadD(18); Speed:=(ReadD(470+(length(ReadS(22))*2+2)))*(ReadF(502+(length(ReadS(22))*2+2))); end; end.

Добавлено через 47 секунд
вот фул код смотри
__________________
Начало.

Последний раз редактировалось supernewbie, 20.09.2010 в 23:00. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием
Старый 20.09.2010, 23:39   #7
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Поставь не 100, а 10000000000 и будет идеальная линия
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 21.09.2010, 07:02   #8
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

не врубаешься ты)
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 21.09.2010, 10:45   #9
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

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

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 21.09.2010, 14:28   #10
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

Цитата:
Сообщение от supernewbie Посмотреть сообщение
dropitem - выброс вещи, который шлется на клиент.
НУ ЕШКИН КОТ...


А во вторых, вот ты зайди в игру и потести, выбрасывай в разные стороны и смотри кривизну.
__________________
Начало.

Последний раз редактировалось supernewbie, 21.09.2010 в 14:32.
supernewbie вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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