PDA

Просмотр полной версии : скрипт "бег за лидером"


Breadfan
24.07.2010, 20:27
У кого-нибуть есть скрипт\процедура готовая бега за лидером, использующая координаты приходящие от сервера\или идущие от клиента, а не как где-то описан вариант был - тыканье по персонажу...вобщем нужен бег без смены таргета
Свое написал, но чето он у меня периодически координаты прекращает верно обрабатывать, и голова не работает уже :(

J-Fobos
24.07.2010, 22:46
if FromServer and pck[1]=#$2F{MoveToLocation} and CharID=ReadD(2); then
begin
x:=ReadD(6);
y:=ReadD(10);
z:=ReadD(14);
buf:=#$0F; //MoveBackwardToLocation
WriteD(x+rand(-100,100));
WriteD(y+rand(-100,100));
WriteD(z);
WriteD(OriginX);
WriteD(OriginY);
WriteD(OriginZ);
WriteD(1);
SendToServerEx(name);
end;

Процедура rand генерирует рандомное число от -100 до 100, ее отдельно надо писать(если надо могу выложить ее, но я думаю вы с ней знакомы :) ). CharID - id чара за которым будем бежать, можно задать жестко в скрипте (этот ид не меняется даже после рестарта сервера), а можно и вытащить из некоторых пакетов.

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

Не гарантирую работоспособности, это просто идея :)

Breadfan
24.07.2010, 22:51
Идеи мне вполне хватит :) Спасибо. Главное ночью особо не писать, иначе утром разгребать кучу бреда периодически приходится)

J-Fobos
24.07.2010, 23:10
Function Rand(LowBorder, UpBorder: Integer): Integer;
Begin
Rand := LowBorder + Random(UpBorder - LowBorder + 1);
End;

Var
X: Integer;

begin
Randomize;
X := Rand(-100, 100);
end.

Вроде так можно делать :)

зы: а вообще надо у алекстим уточнить, я не помню как в фастскрипт рандомные числа генерируется по правильному.

Breadfan
24.07.2010, 23:36
Not enough actual parameters :D видать на коленке писал)) а у меня отношения с функциями - както не сложились...)

Да то сам уже посмотрю)

J-Fobos
25.07.2010, 00:06
У нас в стране на коленке атомную бомбу собрать можно :prankster2:
В делфи эта функция работает, а пх под рукой нету сейчас, так лениво смотреть смотреть документацию к фастскрипту :)

Breadfan
25.07.2010, 02:11
Обалдеть - оно работает! :D
var
x,y,z:integer;
function Rnd(min,max:integer): integer;
var
i: extended;
begin
i:=Random;
result:=min+int((max-min)*i);
end;
procedure Init;
begin
end;
procedure Free;
begin
end;
begin
Randomize;
x:=Rnd(-100,100);
y:=Rnd(50,500);
z:=Rnd(-1500,-1000);
sendmsg ('Число x: '+Inttostr(x));
sendmsg ('Число y: '+Inttostr(y));
sendmsg ('Число z: '+Inttostr(z));
end.

Добавлено через 38 минут
Вылилось в такое (скрипт сырой, в частности нет блока считывающего Origin-координаты):
const
Name='Begun';
var
multt,multh,multl:string;
CharID,x,y,z,mult:integer;
OriginX,OriginY,OriginZ:integer;
function Rand(min,max:integer): integer;
var
i: extended;
begin
i:=Random;
result:=min+int((max-min)*i);
end;
procedure Init; //Вызывается при включении скрипта
begin
mult:=99; //стартовое значение разброса
CharID:=268535632; //OID ведущего - может выясняться в процессе работы
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (connectname=name) and (pck[1]=#$2F) and (CharID=ReadD(2)) then begin
x:=ReadD(6);
y:=ReadD(10);
z:=ReadD(14);
buf:=#$0F;
WriteMask('ddddddd',[(x+rand(-mult,mult)),(y+rand(-mult,mult)),z,OriginX,OriginY,OriginZ,1]);
SendToServerEx(name);
end;

if Fromserver and (connectname=name) and (pck[1]=#$4a) and (ReadD(2)=CharID) and (Copy(ReadS(24),1,5)='mult ') then begin
multh:=Copy(ReadS(24),6,1);
multl:=Copy(ReadS(24),7,1);
if (multh<'0') or (multh>'9') then multh:=''; //проверки на опечатку в чате
if (multl<'0') or (multl>'9') then multl:=''; // если введено не число - то сброс в 99
multt:=multh+multl;
if (multt='') then multt:='99';
mult:=Strtoint(multt);
end;
end.
При команде в чат от главного "mult XX" - меняет значение min\max (-+mult) на введенное (число от 0 до 99 - в скрипте так же есть проверка на верность введенного), для случаев бега по мостикам всяким.
PS: оптимизация - приветствуется :D