Test
{
int First = 0;
}
Я получаю ссылку на First:
auto& PointerToFirst = *(int*)((std::uint32_t)(Test));
И передаю его в луа, как я понимаю луа получает значение по ссылке, и сохраняет в инт:
lua["TestReference"] = PointerToFirst;
Поэтому, когда я пытаюсь прочитать значение по TestReference спустя время, то там остается старое, и при попытке записать что-то тоже самое ( TestReference = 606 )
Поэтомв вопрос:
Возможно ли как-то передать именно ссылку в луа?
Ссылку передать ты можешь только в виде юзердаты, других вариантов нет
Я просто видел получение референса в одном апи для моддинга Условно у игры есть класс class C_Player { int iHealth = 0; } В апи есть метод: player.Health = 0; value = player.Health
то есть он в любом случае не мог передавать как юзер дату, еще возможно ставит свои кастомные сеттеры и геттеры как прокси над луа?
Не знаю, может SOL и имеет какие-то приколы для этого, но чистый луа именно что не умеет получать числа из сишных ссылок. И я очень сильно сомневаюсь, что SOL умеет.
Понял, спасибо за ответ
А что говорит type() на этот объект? Может там кодеры суровые и дублируют все изменения классов где-нибудь в луёвом стейте?
Сейчас проверю, не додумался до этого.
if type(obj) == "userdata" and getmetatable(obj) == myclassmt then print("Это мой мальчик") end
Ну так да. Просто если тип был бы "table", значит кодеры создали глобальную переменную и в сеттерах/геттерах и остальных функциональных частях кода просто переписывают значения в этой самой глобальной таблице.
А если userdata, значит кодеры поступили проще - реализовали юзердату класса и метатаблицу к нему.
В месте получения ссылки на First можно поподробнее? Что за лютый код написан?
Обсуждают сегодня