GTA Builder Форум

GTA Vice City => Скриптинг => Тема начата: SpitFire от Январь 03, 2017, 11:56:25 am

Название: Создание пикапа через Функцию
Отправлено: SpitFire от Январь 03, 2017, 11:56:25 am
Я решил попробовать свои возможности в скриптинге и написать миссию через CLEO, для GTA Vice City и столкнулся с рядом проблем. Одной из такой проблем была нехватка переменных. Судя по всему, я достиг лимита использования глоб. переменных, т.к. после достижения этого лимита, после окончания миссии некоторые пикапы/объекты не хотят удаляться, хотя опкод на их удаление прописан. К сожалению, локальные переменные все заняты и так же нужны после окончания миссии. Я как мог уменьшил кол-во глоб. переменных, но этого всё равно недостаточно. Тогда я решил пойти через создание пикапов через функцию и увы, функцию создания пикапа я не нашёл, так что прошу помощи здесь.
Название: Re: Создание пикапа через Функцию
Отправлено: Shagg_E от Январь 03, 2017, 04:34:52 pm
В CLEO лучше не использовать глобальные переменные вообще. Ты записываешь в глоб. переменную указатель на пикап, потом игра в scm записывает в эти же глобальные переменные свои значения и в результате в этой глобальной переменной перестает храниться указатель на пикап и ты из-за этого не можешь его удалить. Это меньшее из зол. Опаснее всего то, что код в scm не рассчитан на то, чтобы в его глобальные переменные велись какие-то записи, и в результате это может запороть нормальный ход выполнения кода scm, что приведет в дальнейшем к глюкам и багам.

Для экономии переменных лучше использовать скриптовые функции (http://forum.gtabuilder.ru/index.php?topic=271.msg1689#msg1689)(как обычный gosub, только в каждой функции есть свой набор локальных переменных), а также скриптовый буфер памяти (http://forum.gtabuilder.ru/index.php?topic=279.msg1771#msg1771), в который можно записывать сколь угодно много информации(в зависимости от размера созданного буфера).
Название: Re: Создание пикапа через Функцию
Отправлено: SpitFire от Январь 03, 2017, 08:21:02 pm
Лучше не буду с этим заморачиваться, а создам второй скрипт.
Название: Re: Создание пикапа через Функцию
Отправлено: xanser от Январь 04, 2017, 10:58:56 am
Вот пример:
Код: C++
  1. auto CreatePickup = (int (__cdecl *)(RwV3d pos, int id, int type, int ammo, int, char, int)) 0x4418C0;
  2. CreatePickup(Pos,284,2,100,0,0,0);

Для скриптового случая наверное в таком виде:
Код: C++
  1. auto CreatePickup = (int (__cdecl *)(float x, float y, float z, int id, int type, int ammo, int, char, int)) 0x4418C0;
  2. CreatePickup(x,y,z,284,2,100,0,0,0);