You are not logged in.
Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?
Вроде нужно искать в процессе gta_sa.exe, с того места, куда в него загрузилась samp.dll.
Дальше надо искать таблицу, которая вызывается на TAB.
Тут вроде то что надо: http://code.google.com/p/m0d-s0beit-sa/ … c/samp.cpp
Помогите пожалуйста с еще одной проблемой.
Как записать в переменную игрока под прицелом снайперской винтовки?
(только не переберая весь пул педов и высчитывая близость центра камеры к ним.)
Пишу в VC++, или они перепутаны в самой игре ?
Пробовал добавлять еще Z вектор(сPed + 0x52), думаю проблема не в этом. Вектора все равно как то скачут иногда. Теорему Пифагора я помню, но ведь x y z постоянные величины ?(не может быть такого, что при направлении в одну точку с разной скоростью, длина вектора будет меняться), там скорость и наверно еще что то добавлено.
Мне это нужно чтобы к X и Y позиции игрока прибавлять cos и sin угла направления его движения умноженные на изменяющуюся величину(только не скорость ,а например, временная задержка).
(Все опыты проводил на ровной поверхности, и Z ось не учитывал)
Вроде получается, но как то криво
Это учтено , если бы я этого не учел игра бы вылетала.
Еще попробовал делить вектора на текущую скорость, но получившийся результат все равно прыгает, хотя и не так сильно(просто мне нужно очень точно ).
У меня появился вопросик, может кто-нибудь поможет?
В гта по адресу сPed + 0x44 и сPed + 0x48 записываются векторы движения педа относительно мировой ск. Но они меняются при изменении скорости педа (скорость вроде по адресу сPed+0x4DC) , Короче, мне нужно найти точное отношение между векторами, принимая меньший вектор за 1(что бы они не изменялись вместе со скоростью персонажа).
(Пробовал делением большего вектора на меньший, сначала думал что получилось, но встречаются какие то левые значения, и чем ближе поворот игрока к полюсам(N S W E) тем больше неточность. )
Может есть более точный способ ?
Может они изменяются по какой то формуле ?
Спасибо Алиен.
Адреса разные для каждой анимационной группы или для всех можно использовать 0xC8A8A8+0xN ?
Кто нибудь знает точное смещение между центром камеры и прицелом? Пробовал подбирать, но не получается..все равно возникает небольшая разница...
Жаль что нету "set_camera_target_point"
Я попробовал, если адреса заморозить то получается эффект копирования неба, или как объяснить не знаю Это не то. Мне нужно как-то сдвинуть камеру, на заданный синус и косинус (или на угол) относительно мировой системы координат. Может можно использовать значения в 0xB6F248 и 0xB6F258 ? , но я не понимаю что они вообще означают
Все дошло что это угол в радианах
Скажите пожалуйста есть ли ( должна быть ) camera rotation matrix наподобие player rotation matrix, что бы также синусы, косинусы и тд?
И еще вопрос в каких единицах измеряется поворот камеры по адресам 0xB6F248 и 0xB6F258 ?
Нашел на gtaforums.com "0xB6F99C to 0xB6F9DB = Camera Matrix (0xB6F99C + 0x30 = Xpos, etc...)" написано read only, а есть ли перезаписываемая ?
Как stick в собейте ?
Просто все время нужно ставить игроку координаты объекта к которому прикрепляешься, и добавить смещение, если нужно быть не в центре объекта ,а рядом с ним.
Да я читал, Alien спасибо огромное
:crazy:...:^
указатель на вектор мировых координат, это структура из x y z или из матрицы вращения
или предварительно сосчитанное число a = sqrt((sqrt(x*x+y*y))^2+z*z) ,вроде так считается ?
dragonforce, если надо сделать айр брейк с вращением относительно Z ,то может поможет вот этот код, на delphi думаю не сложно перенести будет.
0000: NOP :NONAME_2 wait 1 if and Player.Defined($PLAYER_CHAR) //found not actor.dead($PLAYER_ACTOR) //notdead 004D: jump_if_false @NONAME_2 if 0AB0: key_pressed 16//activation/deactivation then if 22@ > 0 then if 26@ > 0 then 0A8D: 10@ = read_memory 1@ size 4 virtual_protect 0 10@ += 66 0A8D: 25@ = read_memory 10@ size 1 virtual_protect 0 25@ -= 3 0A8C: write_memory 10@ size 1 value 25@ virtual_protect 0 26@ = 0 end 22@ = 0 wait 700 else 22@ = 1 wait 700 end end if 22@ == 1 then 1@ = 0xB6F5F0 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 2@ += 0x14 0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0 0A8E: 4@ = 3@ + 0x30 0A8E: 5@ = 3@ + 0x34 0A8E: 6@ = 3@ + 0x38 0A8D: 7@ = read_memory 4@ size 4 virtual_protect 0 0A8D: 8@ = read_memory 5@ size 4 virtual_protect 0 0A8D: 9@ = read_memory 6@ size 4 virtual_protect 0 //--------------------------------------------------------- 0A8D: 10@ = read_memory 1@ size 4 virtual_protect 0 10@ += 1132 0A8C: write_memory 10@ size 1 value 3 virtual_protect 0 10@ -= 1132 10@ += 66 if 26@ < 1 then 0A8D: 25@ = read_memory 10@ size 1 virtual_protect 0 25@ += 3 0A8C: write_memory 10@ size 1 value 25@ virtual_protect 0 26@ = 1 end 10@ -= 66 10@ += 348 0A8C: write_memory 10@ size 1 value 205 virtual_protect 0 //--------------------------------------------------------- 0A8D: 11@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 12@ = read_memory 2@ size 4 virtual_protect 0 11@ += 0x10 12@ += 0x14 0A8D: 13@ = read_memory 11@ size 4 virtual_protect 0 0A8D: 14@ = read_memory 12@ size 4 virtual_protect 0 006B: 13@ *= 21@ 006B: 14@ *= 21@ if or 0AB0: key_pressed 87//W 0AB0: key_pressed 65//A 0AB0: key_pressed 83//S 0AB0: key_pressed 68//D then 005B: 7@ += 13@ 005B: 8@ += 14@ if 21@ <= 12.0 then 21@ += 0.12 end else 21@ = 0.0 end if 0AB0: key_pressed 90//down then 0063: 9@ -= 23@ if 23@ <= 12.0 then 23@ += 0.12 end else 23@ = 0.0 end if 0AB0: key_pressed 88//up then 005B: 9@ += 24@ if 24@ <= 12.0 then 24@ += 0.12 end else 24@ = 0.0 end //--------------------------------------------------------- 0A8C: write_memory 4@ size 4 value 7@ virtual_protect 0 0A8C: write_memory 5@ size 4 value 8@ virtual_protect 0 0A8C: write_memory 6@ size 4 value 9@ virtual_protect 0 end jump @NONAME_2
Просто получаем cos и sin из матрицы вращения, умножаем на какое нибудь число n(чем больше тем скорость выше) и прибавляем cos*n + x , sin*n+y. Для лица игрока читать вроде нужно из
0x10 и 0x14 ,хотя может это не так,но все работает.
И у меня вопрос, где находится матрица вращения камеры ?, что бы сделать движение по всем осям
Сложно , ну ничего буду разбираться как нибудь..., а в какие регистры записываются x y z и в какие возвращается w и h экрана ? Только не смейтесь над вопросом, потому что я ассемблер знаю только на уровне арифметических операций над числами.
Можно пожалуйста пример такого вызова
То есть функция берет x,y,z а возвращает x,y если координаты попадают в плоскость экрана ?
Можно ли при вызове функции, __thiscall заменить на что-нибудь другое? ,а то проблемы с компиляцией.
Карта уже сделана
А второе реально, GTASA спасибо большое, был бы этот огромный скрипт еще с коментариями
lstener,я прочитал ваш пост про системы координат, можно вопрос ?
Как перенести координаты объектов с игрового мира на экран (с 3d в 2d) ?
Например координаты педов ,я прохожусь циклом по пулу педов, записываю используемые элементы в массив.
Получаю их координаты, матрицы вращения, углы поворота... а что дальше делать я не знаю.
Нужно как то трансформировать координаты, я читал что способ трансформации различается в разных играх.
listener Спасибо огромное за объяснение
А какие ограничения размера у пула, ведь он когда то должен закончится ?, вроде написано что там может быть 140 элементов, что будет если места от последнего элемента не будет хватать для записи нового ?
Покопался в исходниках одного трейнера для гта, и нашел записи
CarPointer+216 size 20, "Collision related(?)"
CarPointer+236 size 20, "Last collision coordinates"
0x00B744A4, 48, "col model pool"
И еще меня очень удивило в этом же коде:
0x00B74498, 56, "buildings", "buildings pool",
buildings+20, 4, "Pointer to transformation matrix",
Получается все дома, так же как педы и машины имеют координаты..тд ? 0o
И еще вопрос, чтобы тему не создавать,
почему элементы Ped pool постепенно в процессе игры,начиная с первого становятся нулями, а остальные сдвигаются? Объясните пожалуйста.
У меня такой вопрос, помогите пожалуйста если знаете.
Как,если это вообще возможно, отключить коллизию машины через память,подобно отключению коллизии у игрока ?
Вот нашел кое что, но не могу понять что Cveh + 216 и Cveh + 220 изменяется когда машина сталкивается с чем либо,
Cveh + 232 изменяется если машина врезалась в пешехода или в машину.
Пробовал изменять значения, но игра вылетает
Алиен, спасибо Вам, вы гений
Все работает отлично, а я даже не верил что так возможно сделать
через directx можно убрать освещение целиком, но в san andreas не проверял.