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

Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 01.09.2011, 20:40   #421
Новичок
 
Регистрация: 11.05.2010
Сообщений: 19
Сказал Спасибо: 0
Имеет 10 спасибок в 6 сообщенях
Эдвадко пока неопределено
По умолчанию

Направление камеры -

Перехватываю ALineagePlayerController_PlayerCalcView
Запоминаю адрес класса
Перехват убираю
Угол поворота камеры получаю по по смещению 0x1C4 в классе

Кто-бы придумал, как вообще без перехвата этот угол получать.
Да и смещение может смениться...

Код:
void ALineagePlayerController_PlayerCalcView_hook(ALineagePlayerController *This, int /*edx*/, int Actor, FVector *Vector, FRotator *CameraRotation)
{
  ALineagePlayerControllerThis = This;

  ALineagePlayerController_PlayerCalcView(This, 0, Actor, Vector, CameraRotation);

Убираю перехват....
}

      if (ALineagePlayerControllerThis) {
        CameraYaw = *(PDWORD)((PBYTE)ALineagePlayerControllerThis+0x1C4);  //это работает Yaw тут
Эдвадко вне форума   Ответить с цитированием
За это сообщение Эдвадко нажился 3 спасибками от:
Старый 02.09.2011, 10:56   #422
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

ну вот так и думал что какоенеть View )

Добавлено через 10 часов 33 минуты
А не пробывал взять в хуке сразу из rotator? В нем мб нече кроме yaw.pitch.roll кватерниона и нет нефига. А с таким смещением в контроллере тема не очень нравитса...
__________________
читернуть бы ништяг

Последний раз редактировалось mira, 02.09.2011 в 10:56. Причина: Добавлено сообщение
mira вне форума   Ответить с цитированием
Старый 02.09.2011, 18:35   #423
Новичок
 
Регистрация: 11.05.2010
Сообщений: 19
Сказал Спасибо: 0
Имеет 10 спасибок в 6 сообщенях
Эдвадко пока неопределено
По умолчанию

Так и делал раньше. Но хочется избавиться от хуков...


void __fastcall ALineagePlayerController_PlayerCalcView_hook(ALine agePlayerController *This, int /*edx*/, int Actor, FVector *Vector, FRotator *CameraRotation)
{
static int OldYaw;
ALineagePlayerController_PlayerCalcView(This, 0, Actor, Vector, CameraRotation);
if (CameraRotation->Yaw != OldYaw) {
OldYaw=CameraRotation->Yaw;

Отсылаем Yaw в модуль отрисовки радара..
}
}
Эдвадко вне форума   Ответить с цитированием
За это сообщение Эдвадко нажился спасибкой от:
Старый 10.09.2011, 16:03   #424
Пользователь
 
Регистрация: 11.03.2011
Сообщений: 73
Сказал Спасибо: 4
Имеет 8 спасибок в 4 сообщенях
Anfet пока неопределено
По умолчанию

удалил. тупые вопросы.

Последний раз редактировалось Anfet, 10.09.2011 в 17:05.
Anfet вне форума   Ответить с цитированием
Старый 20.09.2011, 15:46   #425
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
maxilam пока неопределено
По умолчанию

в клиенте ГоД в некоторые функции добавили параметры. к примеру:
было
Код:
OnUserInfo(struct User *, class FVector, int, int, int, char, char)
стало
Код:
OnUserInfo(struct User *, class FVector, int, int, int, char, char, __int64 const &)
Как правильно передавать последний параметр (__int64 const &) из функции-ловушки в функцию-обработчик и потом в оригинальную функцию?

Старый кусок кода:
Код:
procedure OnUserInfo_Call(user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
asm
  push s2;
  push s1;
  push u3;
  push u2;
  push u1;
  push z;
  push y;
  push x;
  push user;
  mov ecx, geh;
  mov esp, ebp;
  pop ebp;
  jmp [OnUserInfo_Original];
end;

procedure OnUserInfo_New(h: integer; user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
begin
  ...
  //делаем свои делишки
  ...
  OnUserInfo_Call(user, x,y,z, u1,u2,u3, s1,s2);
end;

procedure OnUserInfo_Hook(user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
asm
  push s2;
  push s1;
  push u3;
  push u2;
  push u1;
  push z;
  push y;
  push x;
  push user;
  push ecx;
  call OnUserInfo_New;
end;
Как теперь передавать этот последний параметр? Я просто не пойму синтаксис Си, что означает этот параметр? Если бы был простой int, char или pointer то вопросов не было бы. А вот с этим, яхз...
maxilam вне форума   Ответить с цитированием
Старый 20.09.2011, 20:15   #426
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

maxilam, а в чем проблема то int - 32битное целое, __int64 - 64битное. следовательно новое значение либо как два int передаёшь либо собсно сразу как int64, в дельфи int64 есть, правда не помню с какой версии начиная
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 21.09.2011, 08:07   #427
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
maxilam пока неопределено
По умолчанию

ассемблер дельфийский не понимает int64 (Дельфи2010). при
push u; где u: int64 ругается Invalid combination of opcode and operands. Двумя интами пробовал передавать, клиент критует при вызове оригинальной функции.
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка? Альтернативой в дельфи вижу pointer, но однако с поинтером тоже критует при вызове оригинальной функции.
Вот уже третий день ломаю голову. может просто кто нибудь уже сталкивался с int64 в хуках функций, ведь в клиенте она не одна такая функция.
maxilam вне форума   Ответить с цитированием
Старый 21.09.2011, 09:08   #428
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

вот так робит , но это явно какое-то извращение

delphi Код:
procedure Test(const i:Int64); stdcall; begin   ShowMessage(inttostr(i)); end; var   i:Int64;   a:array [0..1] of integer;   i1,i2:integer; begin   i:=874987897987;   Move(i,a,8);   i1:=a[0];   i2:=a[1];   asm   push i2   push i1   call test   end; end.
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 21.09.2011, 12:13   #429
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от maxilam Посмотреть сообщение
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка?
Да.Это ссылка)
Попробуй к примеру это значение принять и передать как DWORD (нам похрену сколько разрядов, передаем то только адрес значения)...
Aries вне форума   Ответить с цитированием
Старый 21.09.2011, 12:33   #430
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Вот не понятно только зачем по ссылке передавать константу
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Полезности



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

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


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

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

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