Суббота, 27.04.2024, 07:53
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Вопросы по созданию КЛЕО-скриптов
DK22PacДата: Суббота, 25.06.2011, 20:04 | Сообщение # 691
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Нет. Я посмотрел в майне ВС. Это просто новый обьект создаётся с этой текстурой(
 
VitalДата: Вторник, 28.06.2011, 22:12 | Сообщение # 692
Группа: Проверенные
Сообщений: 206
Статус: Offline
Вот видел одну штуку во многих скриптах, но не могу разобраться. Как делать ракеты? Именно ракеты, чтобы с ними возился движок игры, а не скрипт, в котором создается объект, пуляется далеко, проверяется столкновение и т.п. Ракеты такие же, которыми стреляет вертолет Хантер и Гидра. Скорее всего как-то через память, т.к. опкодов таких я не видел.
P.S. Только что посмотрел в адресах памяти. Есть адреса для работы с ракетами, но создания ракеты там не вижу.
http://gtamodding.ru/wiki/Заглавная_страница


SCRIPTER

Сообщение отредактировал Vital - Вторник, 28.06.2011, 22:17
 
Den_spbДата: Вторник, 28.06.2011, 22:38 | Сообщение # 693
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Надо исследовать процедуры, обращающиеся к массиву ракет (0xC891A8). Запуском ракет, вероятно, занимается процедура _?LaunchSamRocket (0x737C80).
 
VitalДата: Вторник, 28.06.2011, 22:51 | Сообщение # 694
Группа: Проверенные
Сообщений: 206
Статус: Offline
А какой опкод использовать и как передать параметры, которые будут нужны при запуске (координаты, тип ракеты и т.п.)?

SCRIPTER
 
Den_spbДата: Вторник, 28.06.2011, 23:15 | Сообщение # 695
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Как правильно вызвать функцию или метод и как определить количество передаваемых параметров, разъяснено здесь: http://sannybuilder.com/forums/viewtopic.php?id=941
Какие параметры должны передаваться в данном случае - можно ответить только после исследования кода, но это - не пятиминутное дело.
 
DK22PacДата: Вторник, 28.06.2011, 23:42 | Сообщение # 696
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Vital, даже Ryosuke в своих missile-модах создавал обьекты - псевдо-ракеты.
Quote (Den_spb)
_?LaunchSamRocket

Посмотрю.
Хотя у меня сейчас мало интереса к стандартным ракетам. Они сильно примитивные. Летят из точки в точку по прямой. Я вот уже давно думал, чтобы придать им реалистичную траекторию полёта. Хотя с этим
Code
+20 = [float] X-axis position   
+24 = [float] Y-axis position   
+28 = [float] Z-axis position

надо попробовать поработать. Что если считать эти координаты, поставить задержку, опять считать? Получим вектор движения ракеты. Далее, думаю, можно будет изменить траекторию? Надо какую-то закрученную замутить. Что думаете?
Quote
но создания ракеты там не вижу

А чего ты ожидал? Что кто-нибудь возьмет и напишет такое? Ну уж нет... Сейчас те, кто контроллирует этот сайт, массивно перешли на моддинг гта4, на СА им уже давно ... паралелльно в общем, я уже не говорю об олд-ГТА. Да и ещё влепили кнопку своего опен4, пиарщики, млин.


Сообщение отредактировал DK22Pac - Вторник, 28.06.2011, 23:44
 
Den_spbДата: Среда, 29.06.2011, 00:59 | Сообщение # 697
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
надо попробовать поработать. Что если считать эти координаты, поставить задержку, опять считать? Получим вектор движения ракеты. Далее, думаю, можно будет изменить траекторию? Надо какую-то закрученную замутить. Что думаете?
Вектор у ракеты и так где-то должен быть, иначе бы она "не знала", куда ей лететь.
 
DK22PacДата: Среда, 29.06.2011, 01:25 | Сообщение # 698
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Code
0x737C80 _?LaunchSamRocket

В исходниках MTA эта функция называется AddProjectile. Вот её описание на C++.
Code
bool CPedSA::AddProjectile ( eWeaponType eWeapon, CVector vecOrigin, float fForce, CVector * target, CEntity * targetEntity )
{
       return ((CProjectileInfoSA*)pGame->GetProjectileInfo())->AddProjectile ( (CEntitySA*)this, eWeapon, vecOrigin, fForce, target, targetEntity );
}

Осталось только разобрать параметры.
eWeaponType eWeapon - тип оружия? Не знаю что это, возможно, тип ракеты?
CVector vecOrigin - точка создания?
float fForce - Мощность (сила?), скорость?
CVector * target - указатель на конечную точку? Возможно, просто единичный вектор (направление полёта)?
CEntity * targetEntity - указатель на педа/автомобиль (для тепловых ракет)?

Один из вызовов в ASM:
Code
push    0
...
push    ecx
push    3F800000h
...
push    13h
push    edi
...
call    _?LaunchSamRocket


Вот ещё по теме
0x5C69D0 RemoveAllProjectiles
Code
void RemoveAllProjectiles ( )

0x7388F0 RemoveProjectile
Code
void RemoveProjectile ( CProjectileInfo * pProjectileInfo, CProjectile * pProjectile )

0x73A360 CheckRocketsForCollisions
Code
void CheckRocketsForCollisions ( )

Ноп. Ракеты не реагируют на преграды:
Code
0A8C: write_memory 0x53C05C size 5 value 0x90 virtual_protect 1

Добавлено (29.06.2011, 01:20)
---------------------------------------------

Code
0xC89110 массив структур CProjectile
0xC891A8 массив структур CProjectileInfo

Я посмотрел скрипт Ryosuke - missile, вот он:
http://hotmist.ddo.jp/cleo_cs/missile_090601/missile_090601.txt
Там встречаются эти адресса. Но сами структуры на его сайте не расписанны.

Добавлено (29.06.2011, 01:25)
---------------------------------------------
Ахх, чё-то я туплю, структура CProjectileInfo расписанна на gtamodding.ru, и названа там CRockets.
Странно, но в IDA эти структуры не описаны. Хотя, мб, у меня версия устаревшая.

Сообщение отредактировал DK22Pac - Среда, 29.06.2011, 01:15
 
Den_spbДата: Среда, 29.06.2011, 01:53 | Сообщение # 699
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Я посмотрел скрипт Ryosuke - missile, вот он:
Неслабый скриптик surprised
 
VitalДата: Среда, 29.06.2011, 17:57 | Сообщение # 700
Группа: Проверенные
Сообщений: 206
Статус: Offline
DK22Pac, Den_spb, спасибо большое. Я, конечно, посмотрю, попробую что-нибудь понять, но, думаю, лучше мне пока попробовать сделать объект, который летит как ракета. С этим я уже работал, но я делал бомбу, которая летит и потом падает. Два вопроса по этому поводу: как сделать так, чтобы объект летел вперед и не падал после непродолжительного полета? (команда Throw швыряет объект так, что на него действует гравитация, а это больше подходит для мячей). И еще: как правильно составить массив, чтобы запускать несколько ракет сразу? Заранее спасибо.
Quote (DK22Pac)
Сейчас те, кто контроллирует этот сайт, массивно перешли на моддинг гта4

Эх, ГТА4 есть (на средних настройках нормально идет), и я бы хотел что-нибудь для четверки напрограммировать, только сколько не пробовал ставить чужие скрипты, ничего не шло, абсолютно не хотело работать.
P.S. Сейчас скачаю скрипты Ryosuke, где есть ракеты и массивы, попробую научиться.


SCRIPTER

Сообщение отредактировал Vital - Среда, 29.06.2011, 17:59
 
DK22PacДата: Среда, 29.06.2011, 19:10 | Сообщение # 701
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Vital, а я советую тебе допилить эту функцию и не мучаться с обьектами. Если найдёться свободное время, попробую поэкспериментировать с ней в игре. Сейчас активно занимаюсь написанием длл-ок на С++ biggrin

Добавлено (29.06.2011, 19:10)
---------------------------------------------

Quote (Vital)
ак сделать так, чтобы объект летел вперед и не падал после непродолжительного полета?

Изменять в цикле его позицию.
Quote (Vital)
как правильно составить массив, чтобы запускать несколько ракет сразу?

Не советую в таких ситуациях использовать массив. Хотя мне доводилось идти таким путём, когда надо было держать в памяти несколько десятков хендлов загруженных аудиофайлов, и при этом не упустить ни один из них...
Лучше присвоить создаваемоему обьекту какой-то уникальны флаг (например, поставить turn-mass на 1111.0), а дальше в цикле находить эти обьекты, и проверять, столкнулись ли они с чем-либо, или нет.
 
VitalДата: Среда, 29.06.2011, 19:52 | Сообщение # 702
Группа: Проверенные
Сообщений: 206
Статус: Offline
DK22Pac, спасибо, еще просьба, если найдется свободное время, сможете подробнее немного об этом рассказать, а именно:
Quote (DK22Pac)
Изменять в цикле его позицию.

А для запуска использовать тот же object.throw?
А если поставить нулевую массу, то объект также будет падать? Ведь если сделать самолетик из бумаги, он пролетит гораздо дольше, чем такой же, сделанный из титана. Другими словами, можно ли сделать объект, который не подчинялся бы гравитации?

Quote (DK22Pac)
Лучше присвоить создаваемоему обьекту какой-то уникальны флаг (например, поставить turn-mass на 1111.0), а дальше в цикле находить эти обьекты, и проверять, столкнулись ли они с чем-либо, или нет.

Для поиска случайного объекта, если не ошибаюсь, есть всего два опкода, но ни один из них не может найти объект с определенной моделью или другим флагом. Как тогда искать такие "особенные" объекты?

Вообще я подумал, что если бы можно было сделать объект наподобие красной взрывной бочки, только чтобы он был невидим и взрывался при контакте с чем-либо, а не при повреждении. Тогда можно было бы просто создать объект-ракету и прицепить к ней этот новый объект. Игра тогда сама бы высчитывала все, что нужно, и создать таких ракет можно было бы много и без массивов.


SCRIPTER
 
DK22PacДата: Среда, 29.06.2011, 20:09 | Сообщение # 703
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Vital,
Code
while true

     .....................................
      
     068D: get_camera_position_to 0@ 1@ 2@
     if
         0AE3: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 1000.0 find_next false
     then
         repeat
             if and                 
                 object.Model(3@) == ROCKET_ID
                 04DA: object 3@ collided
             then
                 object.StorePos(3@, 4@, 5@, 6@)
                 0565: create_soundless_explosion_at 4@ 5@ 6@ type 2
                 object.Destroy(3@)
             end                 
         until 8AE3: not 3@ = random_object_near_point 0@ 1@ 2@ in_radius 1000.0 find_next true
     end
     003D:
end


Сообщение отредактировал DK22Pac - Среда, 29.06.2011, 20:09
 
VitalДата: Среда, 29.06.2011, 20:12 | Сообщение # 704
Группа: Проверенные
Сообщений: 206
Статус: Offline
DK22Pac, теперь понятно. Что-то я тупанул biggrin А еще можно ввести переменную, счетчик, которая будет увеличиваться при создании ракеты на один, а при взырве уменьшаться на один. Так правильно или я бред сказал насчет счетчика?

SCRIPTER
 
DK22PacДата: Среда, 29.06.2011, 20:55 | Сообщение # 705
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Нет, в этом случае это не нужно. Сомневаюсь, что тебе удасться создать такое число ракет, которое бы превысило лимит обьектов в игре.
 
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Поиск: