Переполнение времени в игре - Nuclear Grot: Форум
Информация о новых релизах
📡 24.06.2026 - Выпущен релиз sfall версии 5.1.6.0.
📡 03.08.2026 - Выпущено исправление sfall 5.1.6.1 к релизной версии.

🔥 Новые сообщенияОбновленные темы 🔎 Поиск по форуму
  • Страница 1 из 1
  • 1
Переполнение времени в игре
Foxx Дата: Пятница, 03 Июля 2026, 06:35 | Сообщение # 1
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, тут опять вопрос времени вспомнили, в sFall не правилось ничего?

Вроде бы эту проблему до сих пор никто не решил. Даже через sfall (он только снимает общее ограничение на 13 лет).

Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Пятница, 03 Июля 2026, 12:15 | Сообщение # 2
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
тут опять вопрос времени вспомнили, в sFall не правилось ничего?
ничего.
обновление товаров это все лежит на том кто делает торговца, т.е. на авторе скрипта.

Цитата
Из-за него в частности перестаёт обновляться товар у торговцев. Это очень старая проблема оригинального движка.
так что это заявление ошибочно.
не обновляется товар потому, что в скрипте не учтено переполнение счетчика времени через ноль и отрицательного значения (как написали в посте) но
для этого в sfall (это делается и без него) добавлены макросы для беззнаковых проверок, чтобы учитывать весь диапазон 32-битного значения (0...4294967295).
Пример использования.
Код
unsigned_compare(a, b)       (if (a == b) 0 : 1 if ((a bwxor 0x80000000) > (b bwxor 0x80000000)) else -1)

   variable diff = time - time_upd;  // Знаковая разница
   if (unsigned_compare(diff, next) >= 0) then begin
       time_upd = time;
       // ДЕЙСТВИЕ для обновление товара
   end

Цитата
Вроде бы эту проблему до сих пор никто не решил.

решали в модах, в RP например.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Пятница, 03 Июля 2026, 13:35 | Сообщение # 3
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, в Соноре сейчас так сделали:
Код
#define set_BarterBoxLvar(time)              if ( ((game_time - local_var(LVAR_Barter_Timer)) < -25920000) or ((game_time - local_var(LVAR_Barter_Timer)) > 25920000) ) then begin \
                    set_local_var(LVAR_Barter_Timer, game_time);   \
                    end                    \
                    if (local_var(LVAR_Barter_Timer) <= game_time) then begin \
                    call setBarterA;                    \
                    if (get_BarterDopusk != 0) then begin          \
                    call setBarterB;                    \
                    end                    \
                    set_local_var(LVAR_Barter_Timer, time + game_time); \
                    end


Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Пятница, 03 Июля 2026, 13:54 | Сообщение # 4
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
Соноре сейчас так сделали:
что-то очень страшное, наверное еще и взрывоопасное к использованию  ninja

ИИ взамешательстве) говорит что проблему они не решили biggrin
Цитата
авторы пытались защититься от переполнения тремя способами:
Сброс таймера при разнице > 30 дней
Идея: если прошло много времени, просто сбросить таймер на текущее время
Это ДОЛЖНО предотвратить накопление большой разницы
Проверка в обе стороны (< -30 дней или > 30 дней)

Идея: учесть переполнение через 0
Использование констант для ограничения периода
Но этого НЕДОСТАТОЧНО!
Почему:
Сброс при разнице > 30 дней — это ХОРОШАЯ идея, но:
Она не сработает, если разница переполнилась и стала маленькой
Пример: реальная разница = 2,000,000,000 дней, но из-за переполнения показывает 100 дней
Сравнение <= — всё ещё ломается при отрицательных значениях
Сложение time + game_time — может переполниться в любой момент

Удалось ли им обойти проблемы?
❌ НЕТ!

Их попытки:
✅ Частично работают в нормальном диапазоне (до переполнения)

❌ Полностью ломаются при:
Отрицательных значениях (после 6.8 игровых лет)
Переполнении разницы или суммы
Сравнении чисел с разными знаками
Они знали о проблеме, но не решили её правильно.

хз может это все и работает корректно просто невидно весь код, но конструкция очень страшная.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Mr-Stalin Дата: Пятница, 03 Июля 2026, 15:58 | Сообщение # 5
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Foxx, ты у себя в шакалах тоже необновляемых торговцев сделал?)
Вообще вроде как можно без этой всей херни с временем сделать обновляемый товар, используя количество дней сколько игрок не посещал карту, это самый простой вариант, незнаю чего все при цепились к этому времени.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Пятница, 03 Июля 2026, 18:39 | Сообщение # 6
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, я посмотрел, как в RPU и по подобию смастерил:
Код
if ((game_time < 0) and (local_var(1) == 0)) then begin
   set_local_var(0, game_time - 1);
   set_local_var(1, 1);
end
if (local_var(0) < game_time) then begin
   бла-бла-бла товар
   set_local_var(0, (12 * (24 * (60 * (60 * 10)))) + game_time);
end

Из исходников RPU:
Код
if (unsigned_int_compare(local_var(LVAR_Restock_Time), game_time) < 0) then begin
   бла-бла-бла товар
   set_local_var(LVAR_Restock_Time, (random(1,3) * ONE_GAME_DAY) + game_time);
end

Иногда использую:
Код
if (days_since_visited > 12) then begin
   бла-бла-бла
end

Но тут как-то не однозначно. Если раньше на карту зайти, то вроде дни сбрасываются и по новой отсчитываются.

Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Пятница, 03 Июля 2026, 21:06 | Сообщение # 7
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
Но тут как-то не однозначно. Если раньше на карту зайти, то вроде дни сбрасываются и по новой отсчитываются.
Аккумулятор тут нужен. Добавляешь всегда в переменную сколько не было игрока, как только прошло количество дней сброс аккумулятора, обновление товара, итак по кругу.
Минус только в том что пока игрок на карте  обновления не будет.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Mr-Stalin Дата: Пятница, 03 Июля 2026, 22:13 | Сообщение # 8
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
я посмотрел, как в RPU и по подобию смастерил
Нерабочий костыль.

Ниже они использовали новый беззнаковый подход.
Цитата Foxx ()
Из исходников RPU:
Вот это правильно, исправляет отрицательное значение.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Суббота, 04 Июля 2026, 09:54 | Сообщение # 9
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Цитата Mr-Stalin ()
Нерабочий костыль.
Так это декомпилированные данные из исходника про который ты пишешь:

Цитата Mr-Stalin ()
Вот это правильно


Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Суббота, 04 Июля 2026, 12:29 | Сообщение # 10
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
Так это декомпилированные данные из исходника про который ты пишешь
нет, это еще старый кривой костыль (вроде киллаповский).

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Суббота, 04 Июля 2026, 14:39 | Сообщение # 11
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Цитата Mr-Stalin ()
нет, это еще старый кривой костыль (вроде киллаповский).
Так я из последней версии RPU брал, скрипт NIELDBOX.ssl

Цитата Mr-Stalin ()
что-то напутал по подобию
Я просто время поменял на 12 дней, остальное оттуда.

Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Воскресенье, 05 Июля 2026, 03:38 | Сообщение # 12
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
Я просто время поменял на 12 дней, остальное оттуда.
ясно.
но этот вариант очень нестабилен, товары могут перестать обновляться (вероятность очень маленькая).
к тому же через ~20 игровых лет обновления опять остановятся на 7 лет.
ИИ эти косяки расписывает. все это из-за неправильной проверки времени.

вот самый надежный вариант, без косяков.
Код
#define unsigned_compare(a, b)       (if (a == b) 0 : 1 if ((a bwxor 0x80000000) > (b bwxor 0x80000000)) else -1)

variable diff = game_time - local_var(0) ;
   if (unsigned_compare(diff, (12 * ONE_GAME_DAY)) >= 0) then begin
       local_var(0) = game_time ;
       // ДЕЙСТВИЕ для обновление товара
end


Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Воскресенье, 05 Июля 2026, 11:38 | Сообщение # 13
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Цитата Mr-Stalin ()
вот самый надежный вариант, без косяков.
У меня ругается. В .h sfall ничего редактировать не надо?



Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Воскресенье, 05 Июля 2026, 16:22 | Сообщение # 14
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
У меня ругается
Обновить в редакторе файлы compile.exe + parser.dll  и декомпилятор, закинуть в папку resources в редакторe, файлы взять из full архива sfall.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Воскресенье, 05 Июля 2026, 17:48 | Сообщение # 15
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, я HEADERS оттуда брал, а сам компилятор ума не хватило перекинуть. Надо папку compiler_files в scripting перенести для тупых)))

Группа в VK: ReBuild By Foxx
 
Foxx Дата: Суббота, 08 Августа 2026, 22:42 | Сообщение # 16
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Цитата Mr-Stalin ()
Код
#define unsigned_compare(a, b)       (if (a == b) 0 : 1 if ((a bwxor 0x80000000) > (b bwxor 0x80000000)) else -1)

variable diff = game_time - local_var(0) ;
   if (unsigned_compare(diff, (12 * ONE_GAME_DAY)) >= 0) then begin
       local_var(0) = game_time ;
       // ДЕЙСТВИЕ для обновление товара
end
Сделал вот так, не работает. В пределах карты всё нормально с таймерами, но стоит выйти и зайти в локацию. То 12 дней не отсчитывает, а сразу обновляет товар.


Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Воскресенье, 09 Августа 2026, 19:45 | Сообщение # 17
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
тime_upd должна быть локальной переменной.

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Четверг, 13 Августа 2026, 19:17 | Сообщение # 18
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, я весь запутался. Ты пример давал, но тогда на локал вар ругается.

Сообщение отредактировал Foxx - Четверг, 13 Августа 2026, 19:21

Группа в VK: ReBuild By Foxx
 
Mr-Stalin Дата: Пятница, 14 Августа 2026, 02:39 | Сообщение # 19
Мистер Сталин
Солдат братства
Сообщений: 988
Награды: 48
OffLine
Цитата Foxx ()
я весь запутался
set_local_var

Fallout: sfall Projects
Fallout: Mods and Tools
 
Foxx Дата: Суббота, 15 Августа 2026, 08:44 | Сообщение # 20
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
Награды: 12
OffLine
Mr-Stalin, вроде разобрался.

Группа в VK: ReBuild By Foxx
 
  • Страница 1 из 1
  • 1
Поиск: