Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.11.2007, 19:34   #31
Гость
 
Сообщений: n/a
По умолчанию хотя мб тут я ошибаюсь....

Хотя возможно всё проще - 10.7.1 бот изначально работающий на ц4. Возможно это связано с этим, т.к. сейчас на ии стоит полноценное ц4 ядро.
  Ответить с цитированием
Старый 22.11.2007, 13:02   #32
Новичок
 
Регистрация: 05.11.2007
Сообщений: 10
Сказал Спасибо: 2
Имеет 5 спасибок в 2 сообщенях
OlegDX
По умолчанию Ну блин скоко воды а зачем ....... знает (сотрите)

Скрипт преследования таргета на растояни (H)

//////////////ОlegDX by USES.txt//////////////////////////////////////////////////////
Код:
//*****************************************************************
Procedure MoveXYZ(X1,Y1,Z1,X2,Y2,Z2:Integer);
Begin
  IF (X1=X2)and(Y1=Y2)and(Z1=Z2) Then Exit;
  buf:=#$01;
  WriteD(X1);WriteD(Y1);WriteD(Z1);
  WriteD(X2);WriteD(Y2);WriteD(Z2);
  WriteD(01);
  SendToServer
End;
//******************************************************************************
//                            /---|H|---\
// [  >>>|1|_______________|3|___________|2|>>  ]
Function GetMoveXYZ(X1,Y1,Z1,X2,Y2,Z2,H:Integer; var X,Y,Z:Integer):Boolean;
var AB:Double;
Begin
  Result:=False;
  AB:=Sqrt(sqr(X2-X1)+sqr(Y2-Y1)+sqr(Z2-Z1));
  IF abs(AB)<=H THEN EXIT;
  X:=X2-round(((X2-X1)*H)/AB);
  Y:=Y2-round(((Y2-Y1)*H)/AB);
  Z:=Z2-round(((Z2-Z1)*H)/AB);
  Result:=True;
End;
//******************************************************************************

Код:
///////////////////////////////////////////////////////////////////////////////////////////
Uses '.\Scripts\OlegDX by USES.txt';
Const ID=0;Xnow=1;Ynow=2;Znow=3;Xold=4;Yold=5;Zold=6;
var TargetID: Integer;
    MyObject: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd
    MyTarget: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd

//*** Вызывается при включении скрипта *****************************************
procedure Init;
begin
  MyObject[ID]:=0;
  MyTarget[ID]:=0;
end;
//*** Вызывается при выключении скрипта ****************************************
procedure Free;
begin
  //
end;
//*** Oсновная часть скрипта вызывается при приходе каждого пакета *************
Var  PosIndex,ObjectID,X,Y,Z,W:Integer;
     MesageStrg:String;
     MesageType:Integer;
begin
  if FromServer Then Begin
     case pck[1] of
     #$03:Begin //CharInfo
            PosIndex:=2;
            X:=ReadD(PosIndex);
            Y:=ReadD(PosIndex);
            Z:=ReadD(PosIndex);
            W:=ReadD(PosIndex);
            ObjectID:=ReadD(PosIndex);
            If ObjectID = MyTarget[ID] Then Begin
               SendMSGClient('CharInfo MyTarget');
               MyTarget[Xold]:=X; MyTarget[Xnow]:=MyTarget[Xold];
               MyTarget[Yold]:=Y; MyTarget[Xnow]:=MyTarget[Yold];
               MyTarget[Zold]:=Z; MyTarget[Xnow]:=MyTarget[Zold];
               MyTarget[  ID]:=ObjectID;
            End;
          End;
     #$04:Begin //UsrInfo
            SendMSGClient('UsrInfo');
            PosIndex:=2;
            MyObject[Xold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Xold];
            MyObject[Yold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Yold];
            MyObject[Zold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Zold];
            W:=ReadD(PosIndex);
            MyObject[  ID]:=ReadD(PosIndex);
          End;
     #$01:Begin //MoveToLocation
            PosIndex:=2; ObjectID:=ReadD(PosIndex);
            If ObjectID = MyObject[ID] Then Begin
               //SendMSGClient('MoveToLocation MyObject');
               MyObject[  ID]:=ObjectID;
               MyObject[Xnow]:=ReadD(PosIndex);
               MyObject[Ynow]:=ReadD(PosIndex);
               MyObject[Znow]:=ReadD(PosIndex);
               MyObject[Xold]:=ReadD(PosIndex);
               MyObject[Yold]:=ReadD(PosIndex);
               MyObject[Zold]:=ReadD(PosIndex);
            End Else
            If ObjectID = MyTarget[ID] Then Begin
               SendMSGClient('MoveToLocation MyTarget');
               MyTarget[  ID]:=ObjectID;
               MyTarget[Xnow]:=ReadD(PosIndex);
               MyTarget[Ynow]:=ReadD(PosIndex);
               MyTarget[Znow]:=ReadD(PosIndex);
               MyTarget[Xold]:=ReadD(PosIndex);
               MyTarget[Yold]:=ReadD(PosIndex);
               MyTarget[Zold]:=ReadD(PosIndex);
               IF (MyObject[ID]<>0)and GetMoveXYZ(
                  //MyTarget[Xold],MyTarget[Yold],MyTarget[Zold],
                  MyObject[Xnow],MyObject[Ynow],MyObject[Znow],
                  MyTarget[Xnow],MyTarget[Ynow],MyTarget[Znow],130,
                  MyObject[Xnow],MyObject[Ynow],MyObject[Znow])
               THEN Begin
                  SendMSGClient('GetMoveXYZ MyTarget');
                  MoveXYZ(MyObject[Xnow],MyObject[Ynow],MyObject[Znow],
                          MyObject[Xold],MyObject[Yold],MyObject[Zold]);
               END;
            End Else;
          End;
     end;
  End Else
  IF FromClient Then begin
     Case pck[1] of
     //-------------------------------------------------------------------------
     #$04: TargetID:=ReadD(02);
     //-------------------------------------------------------------------------
     #$38:Begin
           PosIndex:=02;
           MesageStrg:=ReadS(PosIndex);
           MesageType:=ReadD(PosIndex);
           Case MesageType of
           0:Begin //Обычный чат
             End;
           1:Begin //Крик чат
             End;
           8:Begin //торговый чат
             End;
           3:Begin //Пати чат
               If (Length(MesageStrg)=1) and ((MesageStrg[1]='L')or(MesageStrg[1]='l')) Then begin
                  pck:='';
                  MyTarget[ID]:=TargetID;
               End Else
               If (Length(MesageStrg)=1) and ((MesageStrg[1]='M')or(MesageStrg[1]='m')) Then begin
                  pck:='';
                  MyTarget[ID]:=0;
               End Else
             End;
           Else End;
         End;
     //-------------------------------------------------------------------------
     end;
     //-------------------------------------------------------------------------
  End Else;
end.

И не нужно раздувать из ничего тему :(
__________________
[ HIGHLIGHT="delphi" ]ваш скрипт[ /HIGHLIGHT ]
OlegDX вне форума   Ответить с цитированием
Старый 22.11.2007, 18:08   #33
Пользователь
 
Регистрация: 21.10.2007
Сообщений: 42
Сказал Спасибо: 5
Имеет 2 спасибок в 2 сообщенях
Cucumber
По умолчанию

Ни слова не нашел в этом скрипте о ValidatePostion($48)...
Cucumber вне форума   Ответить с цитированием
Старый 23.11.2007, 14:03   #34
Пользователь
 
Регистрация: 14.11.2007
Адрес: Silent Hill
Сообщений: 38
Сказал Спасибо: 4
Имеет 13 спасибок в 4 сообщенях
BotLegacy пока неопределено
По умолчанию

Цитата:
Ни слова не нашел в этом скрипте о ValidatePostion($48)...
Скрипт о движении вообще, а не о нашем диалоге о вечном) Так что я например и не искал)
BotLegacy вне форума   Ответить с цитированием
Старый 23.11.2007, 14:53   #35
Новичок
 
Регистрация: 05.11.2007
Сообщений: 10
Сказал Спасибо: 2
Имеет 5 спасибок в 2 сообщенях
OlegDX
По умолчанию

а никто и неговорил что серверу даная команда критична ,
Эта команда просто проверить дествительно ли ты там де должен быть

Короче всё ясно тя не перемещение чара итересовало а непонятно что :( :fool:
__________________
[ HIGHLIGHT="delphi" ]ваш скрипт[ /HIGHLIGHT ]
OlegDX вне форума   Ответить с цитированием
Старый 17.12.2007, 13:49   #36
Новичок
 
Регистрация: 17.12.2007
Сообщений: 22
Сказал Спасибо: 7
Имеет 4 спасибок в 4 сообщенях
Aniks
По умолчанию

Пишут тут чтоб неоткрывать новую тему. Тем более это вопрос косвенно относится к перемешению.
Хочу сделать карту наподобии той, что у xkorа в боте. Т.е. есть карта в формате картинок 900*900. Собственно хотел посоветоваться как лучше реализовать.

Я себе это так представляю: по своим координатам высчитываешь активный квадрат. Делаешь bitmap, туда загружаешь его и три ближайших (т.е. четыре всего, так как чар может находится на границе квадратов). Потом копируешь нужную область себе на форму - все готово.

Вопрос такой: по какой формуле расчитать из координат активный квадрат и положение в нём? Если не секрет, поделитесь пожалуйста!
Aniks вне форума   Ответить с цитированием
Старый 18.12.2007, 21:43   #37
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Код:
const
  // размер одного блока карты:
  blockSize=32768; // что равно сдвигу в лево на 15 бит

var
  xbn,ybn,x,y,bx,by,xb,yb: integer;

begin
  // зависимость номера блока от координат:
  xbn:=(x div blockSize - x shr 31) + 20;
  ybn:=(y div blockSize - y shr 31) + 18;

  // расчет координат блока:
  bx:=(x div blockSize - x shr 31) * blockSize;
  by:=(y div blockSize - y shr 31) * blockSize;

  // расчет координат внутри блока:
  xb:=x - bx;
  yb:=y - by;
end;
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.02.2008, 22:39   #38
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

вы хоть раз пытались вытянуть экран через потолок в катах :) и шлёпнуть на землю там :) я часто так делаю и смотрю что происходит с пакетами чар начинает движение по х у а вот по Z сервер правит сам, но клиент отображает

бежим на крышу здания $01
d X: -88418
d Y: 141365
d Z: -3554
d OriginX: -87890
d OriginY: 142498
d OriginZ: -3647

от клиента последний пакет бега $48
d X: -88243
d Y: 141761
d Z: -3647
d Heading: 43873
d Data: 0
от сервера $48
h ObjectID: 0x48601D89
d CurX: -88246
d CurY: 141756
d CurZ: -3640
d DestX: -88221
d DestY: 141814
d DestZ: -3640

и в чём разница кто то видит клиент всегда не правельно видит координаты вероятно кривая геодата, но хз

Добавлено спустя 36 минут 28 секунд:
а и кстате тут закономерность есть сделал так взял пакет от клиента и местами поменял координаты ходьбы :)
в итоге получил что направление бега вперёт равно 16385 назад 49152 в сумме если в 16чную перевести FF FF +2 баг округления в большую корейцы :)

Добавлено спустя 6 часов 55 минут 46 секунд:
зы есть предположение что Z сервер нам шлёт сам куча непонятных пакетов осталось покрайней мере в моём пакет ини и идут же клиенту и клиент их обрабатывает наверное возможно и Z вычисляет :)

Добавлено спустя 55 минут 43 секунды:
ЗЫ тестил движение из клиента по пакетам, есть идея, но мне паляна нужна в гору пустая :) без мобов и народу нет чистоты эксперимента а скрипт писать влом :) закономерность походу есть геодата клиента расходится с сервером в любом случаее т.е. клиент походу сам коректирует место положение перса появляются просто от клиента промежуточные точки, а перс двигется дальше и что б вычислить Z в макете надо взять угол наклона между промежуточными точкми.
НО это моё наблюдения критика уместна :) 8)
Grinch вне форума   Ответить с цитированием
Старый 15.02.2008, 02:13   #39
Гость
 
Сообщений: n/a
По умолчанию

function HeadingToDegree(Heading: integer): Extended;
begin
Result:=(heading - 32768) / (32768/pi)*(180 / pi);
if Result<=0 then Result:=Result+360;
end;

Ну или если упростить:
function HeadingToDegree(Heading: integer): Extended;
begin
Result:=((heading - 32768) / 32768)*180;
if Result<=0 then Result:=Result+360;
end;

Последний раз редактировалось NLObP, 09.08.2009 в 19:20.
  Ответить с цитированием
Старый 15.02.2008, 22:59   #40
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

мм а почему в градусах и чем плохи отрицательные значения?, мне так бы больше понравилось
Код:
function HeadingToRadian(Heading: integer): Double;
begin
  Result:=(heading - 32768) / 32768 * pi;
end;
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


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

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

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