Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Как вы делаете предметы в играх?

 jamer 15/04/24 Пнд 01:22:23 #1 №945610 
изображение.png
Сап двач, делаю jrpg, естественно у меня должно быть куча предметов в игре. В чем собственно проблема, я не хочу делать предметы по общим шаблонам. Понятно, будут и такие, условно там маленькая и большая аптечка. Но хочется иметь возможность добавлять уникальный функционал. Думал, как это сделать, но на ум приходит только вызов коллбека вроде же это так называется?. После инициализации предмета я могу прописать ему функцию действия и потом ее вызывать. Вроде все круто, есть общий шаблон и при желании я могу добавлять уникальный функционал. Но возникает проблема, а как мне потом хранить эти предметы? Например при сейве игры. Я могу сериализовать свойства, окей, но что делать с функцией? Еще есть вариант держать файл в автозагрузке, где будут определяться все предметы, но это колхоз какой-то, держать все объекты в озу. Может я усложняю и есть варик сделать проще и эффективнее? Пока только такой вариант приходит на ум

Использую я godot если что, но по сути проблема более общая, так что жду советы от всех.
jamer OP 15/04/24 Пнд 01:23:42 #2 №945611 
Пока писал тред, понял, что можно хранить в сериализованном объекте уникальное имя функции, а потом доставать уже только функции из отдельного файла. Но тоже звучит как-то странно
Аноним 15/04/24 Пнд 11:19:52 #3 №945635 
Чет ты залупы намутил, делаешь ресурсовые айтемы, делаешь слоты инвенторя, делаешь инвентарь. Сам айтем только хранит базовые данные, по типу сколько в стаке может быть, стакается нет, иконка и т.п. Слот инвенторя отвечает за смену, добавление и удаления у себя айтема, если добавляемый айтем такой же, то просто добавляет количество этого айтема в слоте и т.п. Сам инвентарь уже отвечает за слоты, проверяет на наличие пустых слотов и т.п. Если тебе нужно заюзать айтем, то за это отвечает уже отдельный обработчик, как раз в нем и должна быть прописана вся логика для юзабельных айтемов, сначала запрашиваешь ид у айтема, потом матчишь его, и выполняешь то что нужно. Никая блядь лишняя логика не должна быть в слоте и тем более в айтеме.
Аноним 15/04/24 Пнд 11:46:46 #4 №945638 
>>945635
Инвентарь у меня так и работает, в каждый слот просто добавляется инфа из предмета. Вопрос в том, как организовать эти обработчики. То есть я правильно понял во втором после, что я должен по id предмета доставать нужную функцию из отдельного файла?
Аноним 15/04/24 Пнд 12:29:10 #5 №945647 
image.png
>>945638
У тебя должен быть один обработчик в котором и будут все функции.
Условно у тебя есть класс плеер, у него есть инвентарь, допустим по нажатию кнопки 1 у тебя должен юзаться предмет из первого слота, получается у тебя должна быть у плеер функция которая отследит нажатие, возьмет ид у предмета, заматчит его, и выполнит то что нужно. Вообще это не обязательно должен быть ид, скорее даже желательно что бы вместо него был тип предмета чтоб каждый айдишник не вписывать в матч. Короч что то наподобии пикрила должно получиться.
Аноним 15/04/24 Пнд 18:37:02 #6 №945686 
>>945611
Да, это самый простой вариант - к каждому предмету прикрепить скрипт с коллбэками типа on_use, on_examine, on_drop
Поумнее - разделить айтемы на классы (оружие, лекарства, квестовые предметы и т. п.) и хранить только данные для них
comments powered by Disqus