PDA

Просмотр полной версии : Скрипт


pmen
08.06.2009, 16:31
Скрипт

HORSE
08.06.2009, 18:53
у меня не пашет...Сервер Грация Парт 2...
Там по ходу какие то системный сообщения должны приходить в игру???
И может что то ещё надо вписывать кроме ника чара??

pmen
08.06.2009, 20:49
Для грации парт 2 нужно изменить пакеты


#$04
#$28
#$48
6D 00 00 00 00

HORSE
08.06.2009, 20:51
а де их взять?
или как посмотреть?

pmen
08.06.2009, 21:39
Щас тебе перепишу для грации парт 2

8tomat8
08.06.2009, 21:47
pmen, за скрипт спасибо, конечно долго будет но лучше чем заново топать)

pmen
08.06.2009, 21:52
Вот для Парт 2

//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор pmen ICQ - 479917081
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='Qwertyuio'; //<-----Ник Персонажа
//======================================
var
a:integer;x:integer;MyID:string;
y:integer;z:integer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
SendMsc('Возьми себя в таргет'); //Системное сообщение
b:=false; //Условие b первоночально False
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$1F) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('7D 00 00 00 00')) then
if FromClient and (ConnectName=Name) and (pck[1]=#$59) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$22) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$22;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
end;
end;
end.




Долго может быть в первый раз...а так дальше норм =)

HORSE
08.06.2009, 23:24
скрипт сработал но...сначало Пакетник выдал ошибку,затем Л2 щависла и выдала крит...-(((

guplen
08.06.2009, 23:37
Попробувал на шоке, вроде бы не пашет... или это для самых наикривейших яв?

HORSE
09.06.2009, 00:11
нее....не пашет скрипт у меня....выдает ошибку пакетника и Тпшит в город...

pmen
09.06.2009, 01:50
Значит какой-то пакет неправильно вписал...Я думаю шифрация паетов на Парт 2 Парт1 и камаельке одинаковая ....Понятн что на шоке работать нбудет..так же как и на руофе и Аббисе.=) На многих явах работает..на серверах где по 1 к онлайна

HORSE
09.06.2009, 01:56
оно иногда ресает...но ты стоишь 1-2 сек и сразу оказываешся в городе...

pmen
09.06.2009, 02:02
вот дам сервер где я щас играю =) Там пользуюсь скриптом во всю!
Lineagetwo.ru

Добавлено через 2 минуты
Понял твою проблему :( Увы но там где ты играешь стоит хорошая геодата...Я обязательно попробую решить проблему с геодатой и выложу переписанный скрипт.У меня уже есть идеи =)

оно иногда ресает...но ты стоишь 1-2 сек и сразу оказываешся в городе...

HORSE
09.06.2009, 10:58
вот дам сервер где я щас играю =) Там пользуюсь скриптом во всю!
Lineagetwo.ru

Добавлено через 2 минуты
Понял твою проблему :( Увы но там где ты играешь стоит хорошая геодата...Я обязательно попробую решить проблему с геодатой и выложу переписанный скрипт.У меня уже есть идеи =)
Буду очень благодарен=)))

pmen
09.06.2009, 17:31
Вот 8tomat8 предлогал хорошую идею....но мне нужна помощь конечно ) Вот когда ты нажал в город,когда ты втаешь,в это время будет посылться Validate Position каждые 0.1,а ValidatePosition нужно брать с того места где ты понастоящему должен встать и до того где ты встал на самом деле....Тогда думаю проблем не будет..Нужно написать процедуру тамера и вычисления ValidatePosition..и тогда думаю будет работать и с хорошей геодатой

Добавлено через 1 минуту
Админы а вы как думаете сработает?

HORSE
09.06.2009, 17:40
Вот 8tomat8 предлогал хорошую идею....но мне нужна помощь конечно ) Вот когда ты нажал в город,когда ты втаешь,в это время будет посылться Validate Position каждые 0.1,а ValidatePosition нужно брать с того места где ты понастоящему должен встать и до того где ты встал на самом деле....Тогда думаю проблем не будет..Нужно написать процедуру тамера и вычисления ValidatePosition..и тогда думаю будет работать и с хорошей геодатой

Добавлено через 1 минуту
Админы а вы как думаете сработает?

хммм....идею я почти понял...она со смыслом...и тоже думаю сработает....но как это всё написать на деле я не наю:cray:

pmen
09.06.2009, 17:41
Сделаем :) Но работка тут большая.....

HORSE
09.06.2009, 18:13
Но скрипт то прикольный будет)))
Прикинь так бишем бесконечно вставать))))

pmen
09.06.2009, 19:14
;)

Добавлено через 15 минут
Кто хорошо разбирается в Таймерах....Посмотрите не накуралесил ли я тут случайно :)


//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор Crazy$
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='Qwertyuio'; //**<-----Ник Персонажа-=
//======================================
var
a:integer;x:integer;MyID:string;s:integer;
y:integer;z:integer;TimerRes:TTimer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
timerRes:=TTimer.Create(nil); //Задаем настройки тамера
timerRes.OnTimer:=@OnTimer;
timerRes.enabled:=false; //Таймер выключен
timerRes.interval:=10; //интервал 10 милисекунд
s:=0;
end;

procedure OnTimer;
begin
buf:=#$48; //Тут нужно будет возиться с координатами..Вычислять для каждого места где обычно происходит REVIVE
inc(s);
SendToServerEX(Name);
end;
// и Т.Д

procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
procedure Free; //Вызывается при выключении скрипта
begin
timerRes.free; //Освобождаем память таймера
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('6D 00 00 00 00')) then //Если от клиента идет пакет RequestRestartPoint то
begin
TimerRes.Enabled := True; //Таймер включен
end;
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$28) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$28;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
timerRes.enabled:=false; // Таймер выклюяен
exit;
end;
end;
end.


Добавлено через 43 минуты
Правильно ли написана сама процедура таймера?

alexteam
09.06.2009, 19:17
SendToServerEx(name)

pmen
09.06.2009, 19:24
Теперь осталось сделать процедуру +-к координатам

Добавлено через 4 минуты
alexteam Как ты думаешь..Это реально сделать?

8tomat8
09.06.2009, 20:30
не +- тебе надо или + или - в зависимости от того какая координата больше, первая или вторая...
вот
http://img196.imageshack.us/img196/1695/valiade.gif

pmen
09.06.2009, 20:32
Ыч) Обьяснение в аблице это хорошо)! Нехочешь вместе со мной делать этот скрипт? А то сам я врядли справлюсь!:eek:

Smertonosec
09.06.2009, 20:36
Кто бы мог подумать но на мелке не робит)Дохну врубаю скрипт(с таргетом на ся) встаю, тутже все нпц пропадают(ну и народ тоже) дисконект, захожу в городе

pmen
09.06.2009, 20:38
Мы решаем эту проблему...это связано с геодатой.

8tomat8
09.06.2009, 20:39
pmen, мне чесно так впадлу)))) лучше спрашивай что не ясно)

pmen
09.06.2009, 20:41
:p Ок))))

Добавлено через 51 секунду
Я вот просто недогоняю..как правильно оформить эту процедуру...сам смысл понятен

Smertonosec
09.06.2009, 20:50
пмка клянись что не сделаешь как хинт если сделаешь обход везде? Хинт сначала муднул хлап потом сам фикс и придумал...а некто ведь не мог да и до этог овремени врятли бы кто нибудь смог...

pmen
09.06.2009, 20:52
:rolleyes: Ок...Клянусь : D

Smertonosec
09.06.2009, 20:54
))ща манорку сдам возможно помогу както с геодатой...при тп таже проблема...если на мелке пашет мультик и фиксануть не могут ток мультов банят то не думаю что составит труда обойти их геодату, возможно проще сначала попробовать на стороне клиентской части?

pmen
09.06.2009, 21:02
Еще кроме X,Y,Z нужно посылать Heading и Data.Для каждого места Heading разный..Data всегда 00

Добавлено через 3 минуты
8tomat8 Извини за наглость...но не мог бы ты примерно расписать процедуру?...:blush:

8tomat8
09.06.2009, 21:15
Муфлон пишет .gludio
ловиш свои координаты допустим пусть будут "аа аа аа аа 00 00 00 00 11 11 11 11"
считываеш (ReadD(1,2 или 3)) х у и z (x1=aa aa aa aa, у1=00 00 00 00...)
потом береш координаты глудио(там будут пускай х2 у2 z2)
Делаеш не хитрые действия Xc:=х1-х2 Ус:=у1-у2.....(Xc Yc Zc это разница межды значениями координат)
Тут кусок ты поймеш из таблицы...

и говориш для каждой переменной к примеру для X

For x1:=aa aa aa aa until x1:<>=x2 //я сомневаюсь с командой FOR на ней постоянно PHX зависает, походу надо repeat until но я не помню....
begin
x1:=x1+5;
end;

Право писание у меня тут хана как хромает)) Все из головы)
И так для трех значений(х,у и z)

Добавлено через 2 минуты
на.... брал все из головы так что правте если чо там не так

pmen
09.06.2009, 21:41
Спасиб =) ЩАс я уже написал запоминаие координат того места куда должен телепортироваться после смерти (Стандартные,не то что я задаю)

Добавлено через 24 минуты
XPos YPos Zpos - Сложенная координата
X1 Y1 Z1 - Координаты куда должен был телепортаться чар (В город)
X Y Z - Координаты смерти и возрождения
Вот в X1 Y1 Z1 выдает ошибка
Repeat X1:=X1 until X1:<>=X;
Repeat Y1:=Y1 until Y1:<>=Y;
Repeat Z1:=Z1 until Z1:<>=Z;
begin
XPos:=X1+5;
YPos:=X1+5:
ZPos:=X1+5;
end;

В чем проблема?...никак недойдет

8tomat8
09.06.2009, 22:05
чувак
1) XPos YPos и ZPos должны вычислятся отдельно и проверятся тоже отдельно, поскольку растояние между Хми Уми и Zми разное, а у тебя получается что когда одна из координат совпала то все остальные тоже перестают менятся...
2)"<>=" тут должно быть или "<=" или ">="...
3)XPos:=X1+5;
YPos:=X1+5:
ZPos:=X1+5;
Могут менятся как +5 так и -5 это можно узнать из моего пункта "2)"
4)repeat until помоему выглядит так

Repeat
begin
X1:=X1+5;
end;
Until X1:=X2;
5)XPos:=X1+5;
YPos:=X1+5:
ZPos:=X1+5;
Они не будут меняться))) и почему они все равны x1+5 ?Оо
надо
X1:=X1+5;
y1:=y1+5;
z1:=z1+5;

мммм что то еще забыл, вспомню напишу...
Те кто хорошо розбираются напомните плиз как выглядит repeat until и надо ли оно вообще тут))
не посылайте в гуугл... лучше промолчите

NLObP
09.06.2009, 22:09
Пользуйтесь гуглом, там всё есть!

8tomat8
09.06.2009, 22:11
Пользуйтесь гуглом, там всё есть!

я ж просил.....

HORSE
09.06.2009, 22:27
Пользуйтесь гуглом, там всё есть!
Да Боже мой, пусть тут разбираються, мне как новичку в этом деле будет так сказать "Учебное пособие"=))

NLObP
09.06.2009, 22:32
HORSE, я говорил про конструкции repeat ... until (http://www.delphi.int.ru/articles/117/)

pmen
09.06.2009, 23:43
спасиб NLObP, как раз то что мне нужно!

Добавлено через 55 минут
Я попробывал сделать вручную на Lineage-game.ru 1 Просто со скриптом мне выбило дисконнект(я даже неуспел встать). 2 Запомнил каждый ValidatePosition до места смерти..поставил на отсылку каждые 10 милисекунд.(Я только встал и меня в дисконнект) Вывод...может то что я собрался сделать бесмысленно?

8tomat8
10.06.2009, 00:53
Вывод...может то что я собрался сделать бесмысленно?

возможно) но практика замечательная))) может ты что то не то в скрипте накрутил? выложи щас глянем

pmen
10.06.2009, 01:00
Я использовал первый скрипт....чисто проверял

8tomat8
10.06.2009, 02:16
слу вопрос) А не легче в телепортере сделать функцию запоминания положения что бы потом после появления в городе куда надо лететь?) Просто а Ресом надо очень много проверок впихивать и сильно может сбоить если ты вдруг к примеру не 1 раз а 2 по кнопке клацнул, если случайно пробежался после респа или во время... и тд и тп

pmen
10.06.2009, 04:28
Это будет намного легче..Ну нужно будет ждать пока тебя тпанет в город..потом будешь лететь на место смерти...Очень долгий процесс =)

HORSE
10.06.2009, 10:57
Это будет намного легче..Ну нужно будет ждать пока тебя тпанет в город..потом будешь лететь на место смерти...Очень долгий процесс =)
А если ты умер на РБ????ТО тебя тоже ТПшнет???...имхо Призыв и Телепорт там не пашет....или просто по прошлым координатам тебя туда кинет??

pmen
10.06.2009, 13:19
просто убьет старый пакет TeleportToLocation и задаст новый с нужными координатами

CapsLock
10.06.2009, 15:02
pmen, а ты не мог бы написать тот же скрипт на рес, но чтобы в сообщениях не было:возьми себя в таргет.
а то все видят, гм вдруг спалит(мало ли чё).:)
просто убери это сообщение из скрипта плз

HORSE
10.06.2009, 15:11
сам убери...там никаких трудностей нету...просто удали пару строк и всё...=))

8tomat8
10.06.2009, 15:42
CapsLock, а ничего что эти сообщения приходят только клиенту? и ни кто больше их не видит

pmen
10.06.2009, 17:05
:D CapsLock Эти сообщения видишь только ты один

MaDFish
10.06.2009, 21:54
Зделал Все как написано но после нажатия в город просто продолжаю лежать на месте табличка пропадает и все во круг) cервер интерлюд

pmen
10.06.2009, 22:03
Ты взял случаем не скрипт для Парт 2 ??

MaDFish
11.06.2009, 00:32
Первый скрипт из твоево поста

pmen
11.06.2009, 00:36
дай сайт серва

kittyhell
25.06.2009, 22:13
нихт пахать( ШОК -100

Smertonosec
26.06.2009, 10:36
Ну дак там геодата, ща решают этот вопрос.

pascalpwnz
05.07.2009, 19:38
Его никак не решить. Геодата есть геодата. Сервер отправляет при ресе вас в город и ему все равно, что клиент сообщает о местонахождении в другом месте, он(сервер) обратно вас все равно не отправит.

Yegor
05.07.2009, 19:56
Ну дак там геодата, ща решают этот вопрос.

На шоке решают скорее когда его закрыть :p.

z0mbie
30.07.2009, 17:43
для интерлюдии выложите кто нить

Imperial2008
17.08.2009, 15:49
Вы видите, в начальном посте скрипт не наблюдается. Выложите его еще раз, пожалуйста.

SyMaSvoD
29.08.2009, 14:00
выложите скрипт плиз на возрождение для интерлюдии)

SexGuru
19.09.2009, 19:15
выложите для интерлюда плз