PDA

Просмотр полной версии : [Скрипт] Телепорт по локации + сохранение координат после релога


altairalentus
05.12.2011, 20:48
Добрый день всем. Даю мое творение на ваш суд.
Доступные команды:
.save - запись координат в буфер(при повторном использовании значение перезаписывается)
.tptosave - телепортация до точки сохраненной командой .save
.addtolist - добавления точки в буфере в список, после команды в общий чат надо написать имя точки
.showlist - показ списка сохраненных точек. Для выбора точки необходимо написать в общий чат порядковый номер точки и именно после команды. При телепортации убедитесь что точка с той локации в которой вы находитесь.
.chengelist - команда смены листа с координатами, выбор происходит так само как и точку телепортации.

сам код:
//by Alatair_Alentus
var
x,y,z,h,i,c,npc:integer;
pak,np,name,filename,tp:string;
s,n:tstringlist;
action:byte;

procedure init ;
begin
n:=tstringlist.create;
n.CommaText := 'Dange.txt, dange_point.txt, World_TP.txt, teleport.txt'; // - Имена тхт файлов
s:=tstringlist.create;
filename:='teleport.txt'; //- Файл по умолчанию
s.loadfromfile(filename);
end;

procedure Free ;
begin
s.savetofile(filename);
end;

procedure save;
begin
buf:=hstr('C9 57 66 04');
writed(x);
writed(y);
writed(z);
writec(h);
pak:=buf;
pck:='';
end;

procedure tptosave;
begin
buf:=pak;
sendtoserver;
pck:='';
end;

procedure addtolist;
begin
if pak='' then message('No point to save',8)
else
begin
message('Type name of point',8);
action:=1;
end;
pck:='';
end;

procedure showlist;

begin
for i:=0 to s.count-1 do
begin
np:=np+HStr('0D 0A')+inttostr(i+1)+' -- '+s.names[i];
end;
action:=2;
message(np,7);
np:='';
pck:='';
end;

procedure savename;
begin
s.add(reads(5)+'='+pak);
action:=0;
end;

procedure tpfromlist(tpid:byte);
begin
name:=s.names[tpid-1];
buf:=s.values[name];
sendtoserver;
action:=0;
end;

procedure message(msg:string;chatID:byte);
begin
buf:=HStr('17 54 D4 00 01 50 B5 2A 00 ');
writec(chatID,4);
WriteS('PHX');
WriteS(msg);
SendToClient;
end;

procedure chengelist;
begin
for i:=0 to n.count-1 do
begin
np:=np+HStr('0D 0A')+inttostr(i+1)+' -- '+n[i];
end;
action:=3;
message(np,7);
np:='';
pck:='';
end;
procedure list(lid:byte);
begin
pck:='';
s.savetofile(filename);
filename:=n[lid-1];
s.loadfromfile(filename);
end;


begin
if FromClient then
case pck[1] of
#$9e:
begin
x:=readD(4);
y:=readD(8);
z:=readD(12);
h:=readc(16);
end;
#$c9: if readh(4)in [24597..26645] then pck:='';
#$3a: tp:=pck;
#$b9:
begin
case reads(5) of
'.save': save;
'.addtolist': addtolist;
'.showlist': showlist;
'.tptosave': tptosave;
'.chengelist': chengelist;
else
begin
case action of
0: begin
buf:=pck;
sendtoserver;
end;
1: savename;
2: tpfromlist(strtoint(reads(5)));
3: list(strtoint(reads(5)));
end;

end;
end;
end;



end;




end.

Для работы скрипта необходимо создать txt файлы папке ПХ (там где exe лежит), например у меня Dange.txt, dange_point.txt, World_TP.txt, teleport.txt можете назвать на свой лад, но нужно сменить имена в скрипте.

Версия клиента 2,1-2,5 в зависимости от сервера потому что админы могут сменить ид пакетов.
Работает там где нет нормальной геодаты.
З.Ы. При сохранении точки желательно указать локацию потому что когда вы используете точку с другой локи вас забросить неведомо куда.

freshinin-aion
05.12.2011, 20:57
млин а это на 2.7 не робит?

altairalentus
05.12.2011, 21:04
млин а это на 2.7 не робит?
Хз давно не играл не знаю как 2,7 ид пакетов сменили или нет и это зависит от сервера админы могли и свои пакеты сделать. Короче надо тестиовать