|
Переполнение времени в игре
|
|
| Foxx |
Дата: Пятница, 03 Июля 2026, 06:35 | Сообщение # 1 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Mr-Stalin, тут опять вопрос времени вспомнили, в sFall не правилось ничего?
Вроде бы эту проблему до сих пор никто не решил. Даже через sfall (он только снимает общее ограничение на 13 лет).
Группа в VK: ReBuild By Foxx
|
| |
| |
| Mr-Stalin |
Дата: Пятница, 03 Июля 2026, 12:15 | Сообщение # 2 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
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
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
OffLine
|
Цитата Foxx (  ) Соноре сейчас так сделали: что-то очень страшное, наверное еще и взрывоопасное к использованию 
ИИ взамешательстве) говорит что проблему они не решили 
Цитата авторы пытались защититься от переполнения тремя способами: Сброс таймера при разнице > 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
OffLine
|
Foxx, ты у себя в шакалах тоже необновляемых торговцев сделал?) Вообще вроде как можно без этой всей херни с временем сделать обновляемый товар, используя количество дней сколько игрок не посещал карту, это самый простой вариант, незнаю чего все при цепились к этому времени.
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Пятница, 03 Июля 2026, 18:39 | Сообщение # 6 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
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
OffLine
|
Цитата Foxx (  ) Но тут как-то не однозначно. Если раньше на карту зайти, то вроде дни сбрасываются и по новой отсчитываются. Аккумулятор тут нужен. Добавляешь всегда в переменную сколько не было игрока, как только прошло количество дней сброс аккумулятора, обновление товара, итак по кругу. Минус только в том что пока игрок на карте обновления не будет.
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Mr-Stalin |
Дата: Пятница, 03 Июля 2026, 22:13 | Сообщение # 8 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
OffLine
|
Цитата Foxx (  ) я посмотрел, как в RPU и по подобию смастерил Нерабочий костыль.
Ниже они использовали новый беззнаковый подход.Цитата Foxx (  ) Из исходников RPU: Вот это правильно, исправляет отрицательное значение.
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Суббота, 04 Июля 2026, 09:54 | Сообщение # 9 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Цитата Mr-Stalin (  ) Нерабочий костыль. Так это декомпилированные данные из исходника про который ты пишешь:
Цитата Mr-Stalin (  ) Вот это правильно
Группа в VK: ReBuild By Foxx
|
| |
| |
| Mr-Stalin |
Дата: Суббота, 04 Июля 2026, 12:29 | Сообщение # 10 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
OffLine
|
Цитата Foxx (  ) Так это декомпилированные данные из исходника про который ты пишешь нет, это еще старый кривой костыль (вроде киллаповский).
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Суббота, 04 Июля 2026, 14:39 | Сообщение # 11 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Цитата Mr-Stalin (  ) нет, это еще старый кривой костыль (вроде киллаповский). Так я из последней версии RPU брал, скрипт NIELDBOX.ssl
Цитата Mr-Stalin (  ) что-то напутал по подобию Я просто время поменял на 12 дней, остальное оттуда.
Группа в VK: ReBuild By Foxx
|
| |
| |
| Mr-Stalin |
Дата: Воскресенье, 05 Июля 2026, 03:38 | Сообщение # 12 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
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
OffLine
|
Цитата Mr-Stalin (  ) вот самый надежный вариант, без косяков. У меня ругается. В .h sfall ничего редактировать не надо?
Группа в VK: ReBuild By Foxx
|
| |
| |
| Mr-Stalin |
Дата: Воскресенье, 05 Июля 2026, 16:22 | Сообщение # 14 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
OffLine
|
Цитата Foxx (  ) У меня ругается Обновить в редакторе файлы compile.exe + parser.dll и декомпилятор, закинуть в папку resources в редакторe, файлы взять из full архива sfall.
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Воскресенье, 05 Июля 2026, 17:48 | Сообщение # 15 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Mr-Stalin, я HEADERS оттуда брал, а сам компилятор ума не хватило перекинуть. Надо папку compiler_files в scripting перенести для тупых)))
Группа в VK: ReBuild By Foxx
|
| |
| |
| Foxx |
Дата: Суббота, 08 Августа 2026, 22:42 | Сообщение # 16 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
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
OffLine
|
тime_upd должна быть локальной переменной.
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Четверг, 13 Августа 2026, 19:17 | Сообщение # 18 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Mr-Stalin, я весь запутался. Ты пример давал, но тогда на локал вар ругается.
Сообщение отредактировал Foxx - Четверг, 13 Августа 2026, 19:21
Группа в VK: ReBuild By Foxx
|
| |
| |
| Mr-Stalin |
Дата: Пятница, 14 Августа 2026, 02:39 | Сообщение # 19 |
|
Мистер Сталин
Солдат братства
Сообщений: 988
OffLine
|
Цитата Foxx (  ) я весь запутался set_local_var
Fallout: sfall Projects Fallout: Mods and Tools
|
| |
| |
| Foxx |
Дата: Суббота, 15 Августа 2026, 08:44 | Сообщение # 20 |
|
Повелитель сборок
Автор темы
Рейнджер
Сообщений: 227
OffLine
|
Mr-Stalin, вроде разобрался.
Группа в VK: ReBuild By Foxx
|
| |
| |