#1 04-04-2012 16:17

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Помогите пожалуйста! (VC)

Добрый вечер. smile
Заранее прошу прощение за столь глупые для вас вопросы.
Можно ли этими функциями создать выстрелы в определённых координатах и с определённым направлением:

005D1140 	CWeapon::FireInstantHit (( CEntity *, CVector *)) 	
005D0560 	CWeapon::FireHeliGun (( CEntity *, CVector *, CVector *,float))
005CCF90 	CWeapon::FireProjectile (( CEntity *, CVector *,float))

Если да, то объясните пожалуйста каким образом?
И можно ли создать свечение на земле как от фонарных столбов, или как от фар мотоциклов, или же как от прожектора полицейского вертолёта, в указанных координатах? если да, то как?

Заранее благодарю.=) Я просто мало что понимаю в работе с памятью игры, но хочу заполнить эти пробелы. smile

З.Ы. Функции взяты вот отсюда.

Last edited by Pavlent (04-04-2012 16:20)

Offline

#2 06-04-2012 02:35

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Помогите пожалуйста! (VC)

Помогут ли эти функции - не знаю, а как вызывать функции и методы в скриптах, написано тут: http://sannybuilder.com/forums/viewtopi … 046#p15046
Если рассматривать, например, 005D0560, то будут передаваться 4 параметра:
CEntity - указатель на структуру какого-то физического объекта (под этим понимается в т.ч. транспорт и педы) - в данном случае, возможно, это вертолёт, с которого открывается огонь.
CVector - адрес вектора (вектор - это набор из трёх координат). Можно записать координаты в три последовательные переменные, тогда адрес вектора - это адрес первой переменной.
В случае с данной функцией первый вектор, возможно, будет указывать на точку начала выстрела, а второй - на точку конца выстрела. И тогда векторы скорее всего будут локальными, т.е. координаты будут являться оффсетами относительно объекта (вертолёта).
float - какое-то дробное число, может быть энергия выстрела.
В общем, тут надо поэкспериментировать.

Световая проекция на земле в SA создаётся опкодом 016F, в gta_sa.exe за это отвечает функция 0x707390. В VC должна быть аналогичная функция, только её надо найти.

Offline

#3 06-04-2012 08:39

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

В СА у меня описаны некоторые процедуры

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

#4 07-04-2012 07:05

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Спасибо вам за предоставленную информацию smile
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

#5 07-04-2012 12:04

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

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

#6 07-04-2012 12:29

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Ого! спасибо большое!:^
DK22Pac , извини, а ты не мог бы прокомментировать сие творение? smile
Просто мне не очень понятны некоторые моменты, например, что означают смещения 0x504, 0x18, 0x408?
Я просто, мягко говоря, новичок в этом деле smile

Offline

#7 07-04-2012 15:21

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Помогите пожалуйста! (VC)

Да вещь!

005D1140   No Category   CWeapon::FireInstantHit (( CEntity *, CVector *))

Last edited by VintProg_Pro (07-04-2012 15:29)

Offline

#8 08-04-2012 07:41

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

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

#9 08-04-2012 19:24

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

DK22Pac, спасибо большое!:^
Хотел ещё поинтересоваться, а можно в этой функции дальность стрельбы или тип изменить? просто максимальная дальность выстрела, примерно метра полтора, да и сила тоже слабовата...
И хотел ещё узнать почему, когда я пытаюсь вызвать функции,

005D45E0 	CWeapon::Fire (( CEntity *, CVector *))
005CCF90         CWeapon::FireProjectile (( CEntity *, CVector *,float)) 	
005CD340 	CWeapon::FireShotgun (( CEntity *, CVector *))

таким же образом, то игра вылетает?

Offline

#10 09-04-2012 04:43

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Помогите пожалуйста! (VC)

Pavlent wrote:

дальность стрельбы

Вектор пробовал менять? Попробуй увеличить 5.0 до 100.0, к примеру.

04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 0.0 5.0 0.0

Pavlent wrote:

таким же образом, то игра вылетает?

Параметры значит не те - возможно нужна какая-то другая структура.

Pavlent wrote:

но вот в 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

#11 09-04-2012 08:36

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Вектор пробовал менять? Попробуй увеличить 5.0 до 100.0, к примеру.

Den_spb, пробовал, вот что выходит:
при 1.0
9c8b2efadeaae291ba8bb77232efc187.jpeg 131a185fbc2493783388337974425c20.jpeg
при 10.0
cb0b2bf4815ec48d12fb017ceeec9035.jpeg 618cf61a0b85965f0ae9a85ab25e780d.jpeg

А как ты его вызывал?

Пробовал так:

{$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@ должно быть.

Да, я заметил это с самого начала. smile

Last edited by Pavlent (09-04-2012 08:51)

Offline

#12 09-04-2012 10:11

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Помогите пожалуйста! (VC)

Можно посмотреть как используется 0250: в main VC с помощью Поиска.
И wait 0 надо перенести сразу под while true, иначе если игрок не существует, то игра зависнет или вылетит.

Last edited by Den_spb (09-04-2012 10:13)

Offline

#13 09-04-2012 10:40

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Там нет такого опкода, я смотрел информацию про него, в 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

#14 11-04-2012 04:11

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Узнал, как работает эта функция:

005D0560   CWeapon::FireHeliGun (( CEntity *, CVector *, CVector *,float))

Она создаёт гильзу, float - размер гильзы, один из векторов, как я понял, это расстояние, между гильзами.
Я делал так: получал оффсет от гг, первый на расстоянии 1.0, второй на расстоянии 20.0, по преодолению первой гильзы 20 метров, создавалась вторая и тд. Но есть одна странность - почему-то у меня не выходит изменить направление гильз, они все летят на запад, вроде как, и создаются только над водой...
Может это кому пригодится для чего-нибудь smile

Last edited by Pavlent (11-04-2012 04:13)

Offline

#15 11-04-2012 12:34

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

Начнём с того, что эти векторы - точки в локальной системе координат.


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#16 16-04-2012 12:12

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Допустим так, а что дальше?
Опять же извиняюсь за глупый вопрос, а в чём различия между локальными и глобальными системами?

Offline

#17 16-04-2012 14:16

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Помогите пожалуйста! (VC)

Но есть одна странность - почему-то у меня не выходит изменить направление гильз, они все летят на запад

Код хорошо бы посмотреть, по описанию мало что понял.

Опять же извиняюсь за глупый вопрос, а в чём различия между локальными и глобальными системами?

Глобальная система - мировая, локальная - связанная с каким-то объектом. Локальные координаты ещё называют оффсетами. Например, в опкоде крепления объекта к машине (СА) указываются локальные координаты и углы (т.е. они отсчитываются в системе координат машины и показывают, как объект будет расположен относительно этой машины)
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

#18 16-04-2012 20:14

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

А, понятно, спасибо, с оффсетами я знаком более менее.
А вот с дальностью выстрела я так и не разобрался, но зато сделал по другому:

{$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

#19 21-04-2012 09:56

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

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

#20 22-04-2012 04:03

Pavlent
From: Златоуст
Registered: 06-11-2011
Posts: 12

Re: Помогите пожалуйста! (VC)

Спасибо!
Извини, а ты не мог бы объяснить, на что указывает это смещение

0@ += 0x64

и что это за структура?

0xA10B8A

Offline

#21 26-04-2012 20:46

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Помогите пожалуйста! (VC)

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

Board footer

Powered by FluxBB