Автор Тема: Создание пикапа через Функцию  (Прочитано 2629 раз)

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Создание пикапа через Функцию
« : Январь 03, 2017, 11:56:25 am »
Я решил попробовать свои возможности в скриптинге и написать миссию через CLEO, для GTA Vice City и столкнулся с рядом проблем. Одной из такой проблем была нехватка переменных. Судя по всему, я достиг лимита использования глоб. переменных, т.к. после достижения этого лимита, после окончания миссии некоторые пикапы/объекты не хотят удаляться, хотя опкод на их удаление прописан. К сожалению, локальные переменные все заняты и так же нужны после окончания миссии. Я как мог уменьшил кол-во глоб. переменных, но этого всё равно недостаточно. Тогда я решил пойти через создание пикапов через функцию и увы, функцию создания пикапа я не нашёл, так что прошу помощи здесь.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 710
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Создание пикапа через Функцию
« Ответ #1 : Январь 03, 2017, 04:34:52 pm »
В CLEO лучше не использовать глобальные переменные вообще. Ты записываешь в глоб. переменную указатель на пикап, потом игра в scm записывает в эти же глобальные переменные свои значения и в результате в этой глобальной переменной перестает храниться указатель на пикап и ты из-за этого не можешь его удалить. Это меньшее из зол. Опаснее всего то, что код в scm не рассчитан на то, чтобы в его глобальные переменные велись какие-то записи, и в результате это может запороть нормальный ход выполнения кода scm, что приведет в дальнейшем к глюкам и багам.

Для экономии переменных лучше использовать скриптовые функции(как обычный gosub, только в каждой функции есть свой набор локальных переменных), а также скриптовый буфер памяти, в который можно записывать сколь угодно много информации(в зависимости от размера созданного буфера).

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Создание пикапа через Функцию
« Ответ #2 : Январь 03, 2017, 08:21:02 pm »
Лучше не буду с этим заморачиваться, а создам второй скрипт.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 599
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Создание пикапа через Функцию
« Ответ #3 : Январь 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);