You are not logged in.
Pages: 1
Добрый вечер.
Заранее прошу прощение за столь глупые для вас вопросы.
Можно ли этими функциями создать выстрелы в определённых координатах и с определённым направлением:
005D1140 CWeapon::FireInstantHit (( CEntity *, CVector *)) 005D0560 CWeapon::FireHeliGun (( CEntity *, CVector *, CVector *,float)) 005CCF90 CWeapon::FireProjectile (( CEntity *, CVector *,float))
Если да, то объясните пожалуйста каким образом?
И можно ли создать свечение на земле как от фонарных столбов, или как от фар мотоциклов, или же как от прожектора полицейского вертолёта, в указанных координатах? если да, то как?
Заранее благодарю.=) Я просто мало что понимаю в работе с памятью игры, но хочу заполнить эти пробелы.
З.Ы. Функции взяты вот отсюда.
Last edited by Pavlent (04-04-2012 16:20)
Offline
Помогут ли эти функции - не знаю, а как вызывать функции и методы в скриптах, написано тут: http://sannybuilder.com/forums/viewtopi … 046#p15046
Если рассматривать, например, 005D0560, то будут передаваться 4 параметра:
CEntity - указатель на структуру какого-то физического объекта (под этим понимается в т.ч. транспорт и педы) - в данном случае, возможно, это вертолёт, с которого открывается огонь.
CVector - адрес вектора (вектор - это набор из трёх координат). Можно записать координаты в три последовательные переменные, тогда адрес вектора - это адрес первой переменной.
В случае с данной функцией первый вектор, возможно, будет указывать на точку начала выстрела, а второй - на точку конца выстрела. И тогда векторы скорее всего будут локальными, т.е. координаты будут являться оффсетами относительно объекта (вертолёта).
float - какое-то дробное число, может быть энергия выстрела.
В общем, тут надо поэкспериментировать.
Световая проекция на земле в SA создаётся опкодом 016F, в gta_sa.exe за это отвечает функция 0x707390. В VC должна быть аналогичная функция, только её надо найти.
Offline
В СА у меня описаны некоторые процедуры
4A0DE0 ; void __stdcall CParticle_doGunEffects(CPed *Owner, RwV3D *pStartPoint, RwV3D *pTarget, char DoGunflash?)
Создаёт эффект вспышки и дыма (поинтлайт и проекцию надо создавать самому), Target - единичный вектор, DoGunflash - включить/отключить вспышку (для оружия, у которого есть дамми gunflash в иерархии, партикл-вспышка не создаётся), StartPoint - мировые координаты, Owner - только пед.
В СА и ВС есть опкод
058A: create_gun_flash_from -684.222 -1577.189 12.384 to -695.416 -1576.626 12.415
Для создания "пули" (СА)
73AF00 ; void __cdecl createBulletShot(RwV3D *pStartPoint, RwV3D *pEndPoint, int intensity)
Last edited by DK22Pac (06-04-2012 08:43)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Спасибо вам за предоставленную информацию
Den_spb, я читал это, даже по-моему сохранял куда-то, но к сожалению у меня не хватает знаний, что бы воспользоваться этой информацией... Как я не пробовал, так у меня ничего не получилось, просто вылетает и всё...
Пробовал найти аналог опкода 016F, найти нашёл, но вот в VC он не работает, хотя в VICESCM.INI он присутствует - это
0250: create_light_at 780.5 -942.8749 39.0 RGB_values 235 255 250
И ещё вот такую функцию нашёл на том же сайте
005D1140 No Category CWeapon::FireInstantHit (( CEntity *, CVector *))
Но когда я пытаюсь её вызвать (я на 100% уверен в том, что я делаю абсолютно не правильно, но не знаю как сделать по другому),
:1 wait 100 if and 05EE: key_pressed 72 Player.Defined($PLAYER_CHAR) jf @1 05E6: 0@ = actor $PLAYER_ACTOR struct 05E3: call_method 0x5D1140 struct 0@ num_params 2 pop 2 здесь пробовал указывать все возможные варианты (координаты игрока с оффсетом, просто числа, целые, дробные, и тд) но ничего не вышло... jump @1
то игра вылетает...=(
Подскажите пожалуйста, или приведите пример (желательно) как сделать правильно.
Offline
05E6: 0@ = actor $PLAYER_ACTOR struct 0@ += 0x504 05E0: 1@ = read_memory 1@ size 1 virtual_protect 0 1@ *= 0x18 1@ += 0x408 005A: 1@ += 0@ 0@ -= 0x504 04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 0.0 5.0 0.0 05F8: 2@ = var 3@ offset 05E3: call_method 0x5D1140 struct 1@ num_params 2 pop 0 2@ 0@
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Ого! спасибо большое!:^
DK22Pac , извини, а ты не мог бы прокомментировать сие творение?
Просто мне не очень понятны некоторые моменты, например, что означают смещения 0x504, 0x18, 0x408?
Я просто, мягко говоря, новичок в этом деле
Offline
Да вещь!
005D1140 No Category CWeapon::FireInstantHit (( CEntity *, CVector *))
Last edited by VintProg_Pro (07-04-2012 15:29)
Offline
FireInstantHit - метод класса CWeapon, чтобы его вызвать в CLEO, нам надо найти адрес структуры нужного оружия. Эти структуры начинаются с CPed+ 0x408, размер одной структуры - 0x18 байт.
CPed +0x504 - текущий слот оружия. Адрес структуры находится по формуле:
А = Стр + 0x408 + Сл * 0x18 А - адрес структуры Стр - адрес структуры игрока Сл - слот оружия (CPed+0x504)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
DK22Pac, спасибо большое!:^
Хотел ещё поинтересоваться, а можно в этой функции дальность стрельбы или тип изменить? просто максимальная дальность выстрела, примерно метра полтора, да и сила тоже слабовата...
И хотел ещё узнать почему, когда я пытаюсь вызвать функции,
005D45E0 CWeapon::Fire (( CEntity *, CVector *)) 005CCF90 CWeapon::FireProjectile (( CEntity *, CVector *,float)) 005CD340 CWeapon::FireShotgun (( CEntity *, CVector *))
таким же образом, то игра вылетает?
Offline
дальность стрельбы
Вектор пробовал менять? Попробуй увеличить 5.0 до 100.0, к примеру.
04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 0.0 5.0 0.0
таким же образом, то игра вылетает?
Параметры значит не те - возможно нужна какая-то другая структура.
но вот в VC он не работает, хотя в VICESCM.INI он присутствует - это
А как ты его вызывал? Источники света и тому подобные "одноразовые" объекты надо создавать в цикле с одним wait 0:
{$CLEO} 0000: while true wait 0 0250: create_light_at 780.5 -942.8749 39.0 RGB_values 235 255 250 end
П.С. Тут:
05E0: 1@ = read_memory 1@ size 1 virtual_protect 0
вроде 0@ должно быть.
Last edited by Den_spb (09-04-2012 04:56)
Offline
Вектор пробовал менять? Попробуй увеличить 5.0 до 100.0, к примеру.
Den_spb, пробовал, вот что выходит:
при 1.0
при 10.0
А как ты его вызывал?
Пробовал так:
{$CLEO} Thread 'light' while true if Player.Defined($PLAYER_CHAR) then wait 0 04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 0.0 0.0 0.0 0250: create_light_at 3@ 4@ 5@ RGB_values 235 255 250 end end
Пробовал делать, чтоб по нажатию кнопки, но всегда одно и то же - вылет.
П.С. Тут:
05E0: 1@ = read_memory 1@ size 1 virtual_protect 0
вроде 0@ должно быть.
Да, я заметил это с самого начала.
Last edited by Pavlent (09-04-2012 08:51)
Offline
Можно посмотреть как используется 0250: в main VC с помощью Поиска.
И wait 0 надо перенести сразу под while true, иначе если игрок не существует, то игра зависнет или вылетит.
Last edited by Den_spb (09-04-2012 10:13)
Offline
Там нет такого опкода, я смотрел информацию про него, в VC он не используется.. только в III и SA...
А на счёт дальности и типа стрельбы, больше нет вариантов? Просто хотелось бы в VC создать аналог опкода
06BC: create_M4_shoot_from 2193.268 -1165.441 1031.124 target $TEMPVAR_X_COORD $TEMPVAR_Y_COORD $TEMPVAR_Z_COORD energy 1
но к сожалению моих знаний на это вообще никак не хватает...
Offline
Узнал, как работает эта функция:
005D0560 CWeapon::FireHeliGun (( CEntity *, CVector *, CVector *,float))
Она создаёт гильзу, float - размер гильзы, один из векторов, как я понял, это расстояние, между гильзами.
Я делал так: получал оффсет от гг, первый на расстоянии 1.0, второй на расстоянии 20.0, по преодолению первой гильзы 20 метров, создавалась вторая и тд. Но есть одна странность - почему-то у меня не выходит изменить направление гильз, они все летят на запад, вроде как, и создаются только над водой...
Может это кому пригодится для чего-нибудь
Last edited by Pavlent (11-04-2012 04:13)
Offline
Начнём с того, что эти векторы - точки в локальной системе координат.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Допустим так, а что дальше?
Опять же извиняюсь за глупый вопрос, а в чём различия между локальными и глобальными системами?
Offline
Но есть одна странность - почему-то у меня не выходит изменить направление гильз, они все летят на запад
Код хорошо бы посмотреть, по описанию мало что понял.
Опять же извиняюсь за глупый вопрос, а в чём различия между локальными и глобальными системами?
Глобальная система - мировая, локальная - связанная с каким-то объектом. Локальные координаты ещё называют оффсетами. Например, в опкоде крепления объекта к машине (СА) указываются локальные координаты и углы (т.е. они отсчитываются в системе координат машины и показывают, как объект будет расположен относительно этой машины)
0681: attach_object 71@ to_car 60@ with_offset 0.5 0.3 0.3 rotation 0.0 0.0 0.0
Last edited by Den_spb (16-04-2012 14:25)
Offline
А, понятно, спасибо, с оффсетами я знаком более менее.
А вот с дальностью выстрела я так и не разобрался, но зато сделал по другому:
{$CLEO .cs} thread 'B6' :B6_0 wait 100 if Player.Defined($PLAYER_CHAR) jf @B6_0 :B6_1 wait 0 6@ = 0.0 if 05EE: key_pressed 69 jf @B6_1 :B6_1a 05E6: 0@ = actor $PLAYER_ACTOR struct 0@ += 0x504 05E3: call_method 0x5F9DA0 struct 0@ num_params 3 pop 0 100.0 10 54 05E0: 1@ = read_memory 0@ size 1 virtual_protect 0 1@ *= 0x18 1@ += 0x408 005A: 1@ += 0@ 0@ -= 0x504 :B6_2 04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 0.0 6@ 0.0 05F8: 2@ = var 3@ offset 05E3: call_method 0x5D1140 struct 1@ num_params 2 pop 0 2@ 0@ 6@ += 1.0 if 6@ >= 100.0 jf @B6_2 jump @B6_1
Надо теперь как-то звук выстрела создать, а вот не могу понять, как... Есть вот такая функция:
005F9DA0 cDMAudio::PlayOneShot (( int,ushort,float ))
Но я не могу что-то с ней разобраться, как я понимаю int - номер или ID звука, ushort - продолжительность, float - скорее всего громкость, но я в этом не очень уверен.
Offline
05E6: 0@ = actor $3 struct 0@ += 0x64 05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 05E4: call_function_method 0x5F9DA0 struct 0xA10B8A num_params 3 pop 0 1.0 54 0@ 1@
Last edited by DK22Pac (21-04-2012 09:57)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Спасибо!
Извини, а ты не мог бы объяснить, на что указывает это смещение
0@ += 0x64
и что это за структура?
0xA10B8A
Offline
0xA10B8A cDMAudio
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Pages: 1