Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
-
Объявления
-
⚙️ Новые онлайн-инструменты для DayZ 07/26/26
-
- 0

Вечер добрый, установлен серверный мод VehicleActivityLogs, логи ведутся, с машинами все хорошо, но в crash логе пишет ошибку:
NULL pointer to instance Class: 'CarScript' Entity id:2929119 Function: '~CarScript@1729#1' Stack trace: VehicleActivityLogs/scripts/4_World/entities\vehicles\moddedcarscript.c:1515 строка, как понимаю деструктор void ~CarScript().
moddedcarscript.c:
modded class CarScript { PluginVehicleLogs m_VehicleLogger = PluginVehicleLogs.Cast(GetPlugin(PluginVehicleLogs)); void CarScript() { if (GetGame().IsServer()) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.LogPosition, 3, false, true); } } void ~CarScript() { if (GetGame().IsServer()) LogPosition(false); } void LogPosition(bool init) { string msg = "initialized"; if (!init) msg = "closed or destroyed"; PluginVehicleLogs m_VehicleLogger = PluginVehicleLogs.Cast(GetPlugin(PluginVehicleLogs)); m_VehicleLogger.Log(GetDisplayName() + " (" + this + " - pos " + GetPosition() + ") " + msg); } }При создании экземпляра класса, выполнится конструктор:
void CarScript() { if (GetGame().IsServer()) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.LogPosition, 3, false, true); } }и через 3 секунды вызовет функцию void LogPosition(bool init), со значение init = true, что отразится в логе файле.
void LogPosition(bool init) { string msg = "initialized"; if (!init) msg = "closed or destroyed"; PluginVehicleLogs m_VehicleLogger = PluginVehicleLogs.Cast(GetPlugin(PluginVehicleLogs)); m_VehicleLogger.Log(GetDisplayName() + " (" + this + " - pos " + GetPosition() + ") " + msg); }Ошибка получается возникает при вызове деструктора, который выполняется при корректном завершении работы сервера или уничтожении класса( верно?) и вызовет void LogPosition(bool init), со значение init = false, что отразится в логе файле.
void ~CarScript() { if (GetGame().IsServer()) LogPosition(false); }В чем здесь загвоздка? Помогите разобраться.
Мои познания очень ограничены, может и глупость конечно, но в деструкторе, по условию - if (GetGame().IsServer()) - если игра запущена как сервер, то LogPosition(false);.
Но это выполнится если уничтожение экземпляра класса произойдет при работающем сервере, а если он выключается? проверка - if (GetGame().IsServer()) - вернет null(ничего), так как сервер уже выключился.
Может и бред сморозил, но хочется разобраться, вроде все работает, все хорошо, но при выключении(перезагрузке сервера), в логе выпадает бяка эта((((((((
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах