42 Кб, 682x522
Сап двач, делаю jrpg, естественно у меня должно быть куча предметов в игре. В чем собственно проблема, я не хочу делать предметы по общим шаблонам. Понятно, будут и такие, условно там маленькая и большая аптечка. Но хочется иметь возможность добавлять уникальный функционал. Думал, как это сделать, но на ум приходит только вызов коллбека вроде же это так называется?. После инициализации предмета я могу прописать ему функцию действия и потом ее вызывать. Вроде все круто, есть общий шаблон и при желании я могу добавлять уникальный функционал. Но возникает проблема, а как мне потом хранить эти предметы? Например при сейве игры. Я могу сериализовать свойства, окей, но что делать с функцией? Еще есть вариант держать файл в автозагрузке, где будут определяться все предметы, но это колхоз какой-то, держать все объекты в озу. Может я усложняю и есть варик сделать проще и эффективнее? Пока только такой вариант приходит на ум
Использую я godot если что, но по сути проблема более общая, так что жду советы от всех.
Использую я godot если что, но по сути проблема более общая, так что жду советы от всех.
Пока писал тред, понял, что можно хранить в сериализованном объекте уникальное имя функции, а потом доставать уже только функции из отдельного файла. Но тоже звучит как-то странно
Чет ты залупы намутил, делаешь ресурсовые айтемы, делаешь слоты инвенторя, делаешь инвентарь. Сам айтем только хранит базовые данные, по типу сколько в стаке может быть, стакается нет, иконка и т.п. Слот инвенторя отвечает за смену, добавление и удаления у себя айтема, если добавляемый айтем такой же, то просто добавляет количество этого айтема в слоте и т.п. Сам инвентарь уже отвечает за слоты, проверяет на наличие пустых слотов и т.п. Если тебе нужно заюзать айтем, то за это отвечает уже отдельный обработчик, как раз в нем и должна быть прописана вся логика для юзабельных айтемов, сначала запрашиваешь ид у айтема, потом матчишь его, и выполняешь то что нужно. Никая блядь лишняя логика не должна быть в слоте и тем более в айтеме.
>>635
Инвентарь у меня так и работает, в каждый слот просто добавляется инфа из предмета. Вопрос в том, как организовать эти обработчики. То есть я правильно понял во втором после, что я должен по id предмета доставать нужную функцию из отдельного файла?
Инвентарь у меня так и работает, в каждый слот просто добавляется инфа из предмета. Вопрос в том, как организовать эти обработчики. То есть я правильно понял во втором после, что я должен по id предмета доставать нужную функцию из отдельного файла?
51 Кб, 460x565
>>638
У тебя должен быть один обработчик в котором и будут все функции.
Условно у тебя есть класс плеер, у него есть инвентарь, допустим по нажатию кнопки 1 у тебя должен юзаться предмет из первого слота, получается у тебя должна быть у плеер функция которая отследит нажатие, возьмет ид у предмета, заматчит его, и выполнит то что нужно. Вообще это не обязательно должен быть ид, скорее даже желательно что бы вместо него был тип предмета чтоб каждый айдишник не вписывать в матч. Короч что то наподобии пикрила должно получиться.
У тебя должен быть один обработчик в котором и будут все функции.
Условно у тебя есть класс плеер, у него есть инвентарь, допустим по нажатию кнопки 1 у тебя должен юзаться предмет из первого слота, получается у тебя должна быть у плеер функция которая отследит нажатие, возьмет ид у предмета, заматчит его, и выполнит то что нужно. Вообще это не обязательно должен быть ид, скорее даже желательно что бы вместо него был тип предмета чтоб каждый айдишник не вписывать в матч. Короч что то наподобии пикрила должно получиться.
>>611
Да, это самый простой вариант - к каждому предмету прикрепить скрипт с коллбэками типа on_use, on_examine, on_drop
Поумнее - разделить айтемы на классы (оружие, лекарства, квестовые предметы и т. п.) и хранить только данные для них
Да, это самый простой вариант - к каждому предмету прикрепить скрипт с коллбэками типа on_use, on_examine, on_drop
Поумнее - разделить айтемы на классы (оружие, лекарства, квестовые предметы и т. п.) и хранить только данные для них