Вопросы по созданию КЛЕО-скриптов
|
|
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, вот он: Неслабый скриптик
|
|
| |
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, а я советую тебе допилить эту функцию и не мучаться с обьектами. Если найдёться свободное время, попробую поэкспериментировать с ней в игре. Сейчас активно занимаюсь написанием длл-ок на С++ Добавлено (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, теперь понятно. Что-то я тупанул А еще можно ввести переменную, счетчик, которая будет увеличиваться при создании ракеты на один, а при взырве уменьшаться на один. Так правильно или я бред сказал насчет счетчика?
SCRIPTER
|
|
| |
DK22Pac | Дата: Среда, 29.06.2011, 20:55 | Сообщение # 705 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Нет, в этом случае это не нужно. Сомневаюсь, что тебе удасться создать такое число ракет, которое бы превысило лимит обьектов в игре.
|
|
| |