You are not logged in.
Подскажите. Как добавить на карту дискетку сохранения и чтобы сохранялось?
я вот иконку для радара нашёл :
0570: $ICON = create_asset_radar_marker_with_icon 35 at 0.0 0.0 0.0
Offline
В хэлпе санника всё есть, статья "пикапы".
Offline
080E: get_actor $Player_Actor ped_event_to 0@ if 0@==9 {EVENT_DAMAGE} then {...} end
Пля... чёт даже не догадался использовать PEvents)
Наводящий вопрос: а будет ли работать с ГГ? Должно. Проверим.
@3Doomer, да, точно. Чёт я затестился, щас посмотрел скрипт проверки, оказывается я не написал перевод в интегер. А я думал, что написал. :wow:
Offline
А как в GTA3 и VC можно получить хэндл педа, на которого наведён прицел игрока?
Offline
Offline
ещё вопрос) почему у меня не работает такая конструкция:
0A97: 29@ = car 2@ struct 29@ += 20 0A8D: 10@ = read_memory 29@ size 4 virtual_protect 0
на выходе получается 0
прочитал, что:
Для каждой машины в пуле:
+20 содержит указатель матрицы поворота/позиции (84 Bytes).
+0 [Float] = поворот по оси X (Grad)
+4 [Float] = поворот по оси Y (Grad)
+8 [Float] = поворот по оси Z (Grad)
Offline
Offline
Offline
Ну так 84 байта же
хмм...непонял что это значит) я в работе с памятью можно сказать новичок....не объяснишь, как же всё-таки это юзать? Как мне например получить поворот по оси Y?
Это не сойдёт?
077D: 1@ = car 0@ y_ angle
PS просто чтением адресса угол в градусах не узнать, ибо в матрице угол определяется по трём единичных векторах.
sannybuilder.com/forums/viewtopic.php?pid=3276
Пост #174.
И ещё, кажется, есть метод getRotation, применяемый к Placeаble.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Добавлю, что для чтения (или записи) элемента матрицы, команду 0A8D(0A8C) надо применить дважды:
0A97: 29@ = car 2@ struct 29@ += 20 0A8D: 10@ = read_memory 29@ size 4 virtual_protect 0 // получили указатель на матрицу (адрес 1-го элемента) 0A8D: 10@ = read_memory 10@ size 4 virtual_protect 0 // читаем значение элемента матрицы
Offline
Можно-ли как-нибудь узнать что пед находится рядом с entrance маркером? Проверку на нахождение рядом с объектом "дверь", не предлагать
Offline
Вообще идея такая, надо найти пулы всех элементов и по ним проходиться.
Нужно в CLEO 4 добавить поиск пикапов, маркеров итд.
Вот тогда таких проблем не будет. Но в силу занятости Alien я думаю это будет очень даже не скоро.
Ищите сами (что делать?) эти пулы...
I know everything and nothing...
Offline
Знать бы, найти ентот "пул всех элементов". Для этих маркеров наверняка есть отдельные функции в exe.
Offline
если прикрепить объект к кости игрока, а к этому объекту прикрепить машину, то при быстром перемещении, будь то бег либо падение с большой высоты, машина двигается дёрганно, не одновременно с объектом. Будет то же самое, если я буду считывать координаты объекта и ставить туда машину в цикле, и там будет присутствовать wait 0. Как я понимаю тут wait 0 пропустить нельзя?) Причём, если объект не крепить к костям а просто, например опкодом 069B, то машина будет двигаться нормально...что делать?)
P.S. делаю скрипт, вид от первого лица, получается неплохо, однако при разбеге появляется вот эта проблема. Т.е. камеру я креплю к машине, а машина двигается рывками и при разбеге камера не успевает за головой) и я вижу затылок....надо бы как-то исправить)
Offline
Будет то же самое, если я буду считывать координаты объекта и ставить туда машину в цикле, и там будет присутствовать wait 0.
Попробуй, но я предполагаю что это будет ещё менее эффективно, чем существующий вариант.
Дёрганье присутствует из-за того, что получается слишком длинная цепочка (актёр-объект-машина). Если прицепить машину сразу к актёру, то можно было бы избежать данное явление, но соответствующего опкода вроде нет.
Как я понимаю тут wait 0 пропустить нельзя?
Команду wait исключать из цикла нельзя - игра зависнет, т.к. не будут работать нескриптовые процессы. Да и смысла в этом нет, так как наряду с другими нескриптовыми процессами не будет работать и отрисовка - в игре результаты изменения положения объекта скриптом не будут видны.
Offline
Машину к актёру прицепить можно, для этого в опкоде 069B заменяем следующее:
.text:00495C79 0F8 mov ecx, _ObjectPool .text:00495C7F 0F8 push edx ; handle .text:00495C80 0FC call _CPool_CObject__atHandle
на
.text:00495C79 0F8 mov ecx, _VehiclePool .text:00495C7F 0F8 push edx ; handle .text:00495C80 0FC call _CPool_CVehicle__atHandle
Теперь используем отредактированный опкод для крепления машины, после чего сразу восстанавливаем прежний код.
В скрипте это применяется так:
0A8C: write_memory 0x495C7B size 1 value 0x94 virtual_protect 1 0A8C: write_memory 0x495C81 size 4 value 0xFFF6EC5B virtual_protect 1 069B: attach_car 0@ to_actor $player_actor with_offset 3.0 3.0 0.0 rotation 0.0 0.0 0.0 0A8C: write_memory 0x495C7B size 1 value 0x9C virtual_protect 1 0A8C: write_memory 0x495C81 size 4 value 0xFFFCF3BB virtual_protect 1
Offline
хмм...это хорошо, но мне нужно сделать это с опкодом 070A...или исправить опкод 067B под объект...если такое возможно, то пожалуйста напиши как это сделать очень надо. Заранее спасибо!)
------------------------------
Кстати, в игре ведь отсчитываются число, месяц и год, помимо дня недели? Если да, то какие адреса в памяти за это отвечают?
------------------------------
Ещё вопрос : можно ли как-то воспроизводить свои видеофайлы в игре, как когда игру запускаешь?
Last edited by Voron295 (20-02-2011 17:17)
Offline
Использование опкода 067B для объекта:
0A8C: write_memory 0x4951DE size 1 value 0x9C virtual_protect 1 0A8C: write_memory 0x4951E3 size 4 value 0xFFFCFE59 virtual_protect 1 067B: put_camera_on_object 0@ with_offset 0.0 1.5 1.5 point_to_actor 1@ tilt 6.0 2 0A8C: write_memory 0x4951DE size 1 value 0x94 virtual_protect 1 0A8C: write_memory 0x4951E3 size 4 value 0xFFF6F6F9 virtual_protect 1
Last edited by Den_spb (21-02-2011 22:13)
Offline
Меня все волнует элементарный ответ на вопрос, как, допустим, сохранить скорость и направление авто в одной точке, а потом воспроизвести ее в любой другой, т.е., например, тачка едет со скоростью 60 км/ч и на юго-восток, а теперь я ей меняю угол и при этом она как ни в чем не бывало едет в другом направлении с данной скоростью, или скажем я телепортировал авто и хочу вернуть ей направление движения скорости итд.
Как это сделать, кто знает, а то я уже запарился морочиться с опкодом 04BA. Он работает только в направление вперед т.е по оси Y.
I know everything and nothing...
Offline
Если я правильно понял вопрос, то задача сводится к пересчёту компонентов вектора скорости - сначала из глобальной системы координат в локальную (связанную с машиной), а затем наоборот - из локальной в глобальную.
1.Пересчёт компонентов вектора из глобальной СК (на север,на восток,вверх) в локальную (вперёд,вбок,вверх):
03C0: 29@ = actor $PLAYER_ACTOR car 0AC7: 3@ = var 0@ offset // Компоненты вектора будут записаны в трёх последовательных переменных (0@, 1@, 2@) 0A97: 28@ = car 29@ struct 0A8E: 25@ = 28@ + 68 // int - указатель на вектор скорости машины в глобальной СК 0A8E: 24@ = 28@ + 20 // int 0A8D: 24@ = read_memory 24@ size 4 virtual_protect 0 // указатель на матрицу поворота машины 0AC6: 15@ = label @inverse_matrix offset // указатель на буфер, куда запишем обратную матрицу 0AA5: call 0x7F2070 num_params 2 pop 2 24@ 15@ // Нахождение обратной матрицы 0AA5: call 0x59C790 num_params 3 pop 3 25@ 15@ 3@ // Пересчёт координат из одной системы в другую // после этих операций в переменныt 0@, 1@, 2@ записались проекции вектора скорости на локальную СК .... :inverse_matrix // буфер (чтобы сэкономить 16 локальных переменных) hex 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 end
2.Пересчёт компонентов вектора из локальной системы в глобальную:
03C0: 29@ = actor $PLAYER_ACTOR car 0AC7: 3@ = var 0@ offset // в переменных 0@-2@ должны быть записаны проекции вектора скорости на локальную СК 0A97: 28@ = car 29@ struct 0A8E: 25@ = 28@ + 68 // int 0A8E: 24@ = 28@ + 20 // int matrix 0A8D: 24@ = read_memory 24@ size 4 virtual_protect 0 0AA5: call 0x59C790 num_params 3 pop 3 3@ 24@ 25@ // Пересчёт координат из одной системы в другую // после этих операций машине будет присвоена скорость в соответствии со значениями 0@ - 2@
Last edited by Den_spb (22-02-2011 03:29)
Offline
Использование опкода 067B для объекта:
0A8C: write_memory 0x4951DE size 1 value 0x9C virtual_protect 1 0A8C: write_memory 0x4951E3 size 4 value 0xFFFCFE59 virtual_protect 1 067B: put_camera_on_object 0@ with_offset 0.0 1.5 1.5 point_to_actor 1@ tilt 6.0 2 0A8C: write_memory 0x4951DE size 1 value 0x94 virtual_protect 1 0A8C: write_memory 0x4951E3 size 4 value 0xFFF6F6F9 virtual_protect 1
спасибо, работает, правда небольшое дёргание всё равно наблюдается, однако оно заметно лишь при большой скорости...видимо без рывков можно сделать, только если крепить камеру к кости и чтоб она смотрела на актёра...ну ничего, и так сойдёт, только вот тут почему-то оффсеты не работают...
Offline
Ну ты, Дениска, молодец. Вообще супер!
Т.е нсколько я понял, можно машину телепортировать, поменять угол, и она поедет точно также как она ехала до телепорта, но уже в новом направлении?
I know everything and nothing...
Offline