Запись объекта в сейв при сохранении игры - Форум
Вторник, 06.12.2016, 11:10
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Игры серии ГТА » Скриптинг » Запись объекта в сейв при сохранении игры
Запись объекта в сейв при сохранении игры
Den_spbДата: Вторник, 28.08.2012, 23:19 | Сообщение # 1
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Сообщения перенесены в отдельную тему.
 
VitalДата: Вторник, 28.08.2012, 23:19 | Сообщение # 2
Группа: Проверенные
Сообщений: 206
Статус: Offline
Хотел спросить, давно уже думал над одним вопросом:
Вот код
Code
:Fence
wait 0
if
player.Defined(0)
jf @Fence
if and
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
0AB0:  key_pressed 0x33
jf @Fence
model.Load(1468)
038B: load_requested_models
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 3.0 0.0
02CE: 3@ = ground_z_at 1@ 2@ 3@  
object.Create(4@,1468,1@,2@,3@)
model.Destroy(1468)
5@ = actor.Angle($PLAYER_ACTOR)
object.Angle(4@) = 5@
object.KeepInMemory(4@,1)
wait 500
jump @Fence
end_thread


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


SCRIPTER
 
Den_spbДата: Вторник, 28.08.2012, 23:19 | Сообщение # 3
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (Vital)
Если я оставляю объект в памяти и затем создаю новый с такой же переменной, не будет ли это ошибкой? Не вылетит ли от этого игра?
Хэндл объекта записывается в переменную только "для справки". Если хэндл не нужен (над объектом не будут производиться действия), то в переменную можно спокойно записать любое другое число.
А что значит "сохранить объект в памяти"? Зачем ты это делаешь?
 
VitalДата: Вторник, 28.08.2012, 23:20 | Сообщение # 4
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, насколько я знаю (и пару раз пробовал), это значит, что объект будет оставаться на месте, как было бы при создании объекта в Map Editor. В коде разных скриптов по созданию объектов (где можно установить позицию, угол поворота и т.д. и сохранить объект на месте) присутствует этот опкод. Я опробовал его с объектом 1468: он сохраняется, даже если отойти далеко, но пока я ещё не проверял, появляется ли он после загрузки сохранения (если сохранить игру, когда объект создан). Но когда он разрушен (это ограда), то он больше не появляется, что странно.
Дополняю: объект сохраняется вместе с игрой. Если сохранить игру, когда создан объект, а затем загрузить её, объект остаётся на своём месте.
P.S. Хочу знать лишь, не будет ли конфликтов с переменными, потому как игра оставляет в памяти объект, но затем создаёт ещё объекты с такими же переменными, что и первый, и каждый из них остаётся в памяти.


SCRIPTER

Сообщение отредактировал Vital - Вторник, 28.08.2012, 22:29
 
Den_spbДата: Вторник, 28.08.2012, 23:20 | Сообщение # 5
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
По идее объект и так должен оставаться на месте, если только не была выполнена команда снятия флага уникальности (remove references). Также объекты, созданные скриптом, записываются в сейв при сохранении игры. Если удалить скрипт и запустить сохранение, то объект всё равно появится на соответствующем месте.
 
VitalДата: Вторник, 28.08.2012, 23:20 | Сообщение # 6
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, то есть использование keep in memory необязательно? Значит, можно перезаписывать объект (точнее, его переменную) каждый раз, когда мы создаём новый объект, и всё останется на своих местах? Хм...зачем же тогда этот опкод... Я сейчас попробую полазить в интернете, посмотрю, что же всё-таки даёт этот опкод (0550). Спасибо за ответ.

SCRIPTER
 
Den_spbДата: Вторник, 28.08.2012, 23:20 | Сообщение # 7
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (Vital)
P.S. Хочу знать лишь, не будет ли конфликтов с переменными, потому как игра оставляет в памяти объект, но затем создаёт ещё объекты с такими же переменными, что и первый, и каждый из них остаётся в памяти.
Переменные не связаны с физическими объектами - это всего лишь ячейки памяти для хранения чисел (хэндл объекта - это тоже число). Поэтому снова повторяю - никаких конфликтов здесь быть не может.
Единственное, что следует учитывать - так как объекты записываются в сейв, то в скриптах перед созданием объекта нужно проверять, не был ли создан данный объект ранее. Иначе при каждом сохранении игры объект будет клонироваться.
 
VitalДата: Вторник, 28.08.2012, 23:20 | Сообщение # 8
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, объект создаёт сам игрок, он не появляется автоматически, поэтому клонирование невозможно. По крайней мере, проверка показала, что при загрузке игры, где был создана одна ограда (т.е., объект) у неё не наблюдается признаков клонирования, а разбивание ограды только подтверждает это (кол-во обломков соответствует разбиванию единичного экземпляра). Попробую что-нибудь раскопать относительно 0550.

SCRIPTER
 
Den_spbДата: Вторник, 28.08.2012, 23:20 | Сообщение # 9
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Насколько помню, с ломающимися объектами история другая. Если сломать ломающийся объект и сохранить игру, то в сейв он записан не будет. А может быть и целые ломающиеся объекты в сейв не записываются, не только сломанные. Это можно проверить экспериментами.

Сообщение отредактировал Den_spb - Вторник, 28.08.2012, 22:52
 
VitalДата: Вторник, 28.08.2012, 23:21 | Сообщение # 10
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, это так, сломанный объект не сохраняется (что, кстати, даёт возможность сделать прикольные вещи в миссиях).
Провёл эксперимент: если не использовать keep in memory, то объект сохраняется с сейвом и остаётся после загрузки (и как обычно, не остаётся сломанный объект). Странно, в чём же тогда разница...


SCRIPTER

Сообщение отредактировал Vital - Вторник, 28.08.2012, 22:54
 
Den_spbДата: Вторник, 28.08.2012, 23:21 | Сообщение # 11
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Глянул устройство 0550 - опкод работает с иммунитетами объекта.
 
VitalДата: Вторник, 28.08.2012, 23:21 | Сообщение # 12
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, спасибо, что посмотрел, а то у меня IDA не хотел работать, да и знаний в этой программе у меня, честно говоря, ноль. Но в интернете пусто, если и есть что, то говорится о том, что опкод якобы сохраняет объект в памяти. Никаких иммунитетов у объекта я не заметил, он так же ломается, как и обычный объект. Возможно, описание опкода неверное.

SCRIPTER
 
Форум » Игры серии ГТА » Скриптинг » Запись объекта в сейв при сохранении игры
Страница 1 из 11
Поиск: