You are not logged in.
Pages: 1
Скажите пожалуйста есть ли ( должна быть ) camera rotation matrix наподобие player rotation matrix, что бы также синусы, косинусы и тд?
И еще вопрос в каких единицах измеряется поворот камеры по адресам 0xB6F248 и 0xB6F258 ?
Нашел на gtaforums.com "0xB6F99C to 0xB6F9DB = Camera Matrix (0xB6F99C + 0x30 = Xpos, etc...)" написано read only, а есть ли перезаписываемая ?
Last edited by DimP (12-01-2010 21:10)
Offline
Матрица точно такая же (и CEntity, и CCamera наследуются от CPlaceable)
Насчет read-only - попробуй. Возможно просто имелось в виду, что в следующем кадре позиция автоматически будет скорректирована (вообще, по внутренним структурам камеры не так много информации)
Offline
Я попробовал, если адреса заморозить то получается эффект копирования неба, или как объяснить не знаю Это не то. Мне нужно как-то сдвинуть камеру, на заданный синус и косинус (или на угол) относительно мировой системы координат. Может можно использовать значения в 0xB6F248 и 0xB6F258 ? , но я не понимаю что они вообще означают
Все дошло что это угол в радианах
Last edited by DimP (14-01-2010 12:56)
Offline
Где можно надыбать точные адреса памяти, используемые в опкодах санни билдера? Такая информация где-то вообще есть?
Хочется перенести пару скриптов на удобный мне Delphi.
Собственно, интересующие опкоды:
04C4:
86BD:
Нужны собственно адреса функций, то есть, такие, чтобы заново можно было создать эти функции в дельфях и использовать, как обычные функции дельфи (я видел, так делали и на дельфи, и на си).
Last edited by dragonforce (18-09-2010 10:22)
Offline
Где можно надыбать точные адреса памяти, используемые в опкодах санни билдера? Такая информация где-то вообще есть?
Открываем базу в IDA, при активной вкладке "IDA View_A" жмём Search - Text и вводим то, что надо найти: opcode_04C4 (или opcode_06BD)
Last edited by Den_spb (18-09-2010 17:38)
Offline
Зачем Search? У всех опкодов унифицированные имена:
@@opcode_%04X
Соответственно, достаточно нажать G, ввести @@opcode_04C4 и попадешь на нужный адрес.
Offline
Да, найти получается.
Теперь тогда ещё вопрос. В саннике используются хэндлы, т.е. переменные, могут хранить в себе игрока/машину/объект/любое значение. Подобный хэндл - просто число?
А то нужно передать теперь параметры в дельфях. Мне следует найти адрес начала струкруты этого игрока/машины/объекта?
var StoreActorPos: Procedure (player: dword; var x,y,z:single; _x,_y,_z: single);cdecl; ... var x,y,z : single; PLAYER_ACTOR: dword; begin GetWindowThreadProcessId(Wnd,@PId); //внедрение в процесс игры PHandle:=OpenProcess(PROCESS_ALL_ACCESS,false,PId); // <- ALL_ACCESS @StoreActorPos:=Ptr($0048BA97); //адрес процедуры ReadProcessMemory(PHandle,Ptr(CPed),@PLAYER_ACTOR,4,rw); //считываем указатель на адрес структуры игрока ReadProcessMemory(PHandle,Ptr(PLAYER_ACTOR),@PLAYER_ACTOR,4,rw); //читаем этот адрес If PLAYER_ACTOR<>0 Then Begin StoreActorPos(PLAYER_ACTOR,x,y,z,0.0,0.0,0.0); // <- здесь вылет Edit4.Text:=Format('%8.4f %8.4f %8.4f',[x,y,z]); End; Closehandle(PHandle); end;
AcessViolation при вызове процедуры. Разве что-то не так?
Last edited by dragonforce (18-09-2010 22:27)
Offline
Матрица точно такая же (и CEntity, и CCamera наследуются от CPlaceable)
Значит все субъекты игрового мира имеют след. иерархию:
CWorld->CPlaceable->CEntity-><класс>
Offline
@dragonforce - нельзя вызвать функцию чужого процесса.
@StoreActorPos:=Ptr($0048BA97); //адрес процедуры
@StoreActorPos будет указывать на нечто, находящееся в адресном пространстве твоего процесса, а не процесса игры.
Offline
Оу. А если делать в виде asi, то можно будет вызывать функцию процесса игры?
Offline
Pages: 1