tarik 0 Опубликовано 6 Апреля 2013 (изменено) Касательно мода - знаю что уже прошло очень много времени, и мод уже мало кому интересен По моему это самый адекватный из модов на ЧН. Здоровье само восстанавливается, динамические аномалии, случайные монстры и случайные сталкеры, заполненные тайники. Единственное, что не нравится - быстрый износ вещи, снятой с трупа. Я бы это вообще убрал: какая разница, каким образом добыт тот или иной предмет? Главное его состояние. Но в принципе жить можно - эти вещи можно чинить ремнабором и продавать торговцам, хоть какой-то профит с них. Аптечек и бинтов реально не хватает. Особенно бинтов. Но так, напротив, интереснее - перестаешь лезть на пролом, стараешься стрелять с дальних дистанций, и убегаешь при ранении: бинтов нет, нужно подождать, пока рана сама затянется, поэтому сейчас не до продолжения стрельбы, отлежаться бы где в безопасном месте. Но с ремнабором есть баг: Допустим у нас есть калаш с 80% жизней и 30 запчастей к нему. По идее после починки у нас должен остаться калаш со 100% жизней и 10 лишних запчастей (80+30=110; 110-100=10). Но в игре у нас вместо этого остается калаш со 100% жизней и -70 (минус!) запчастей. Это баг. Суть бага: Скрипт рассчитывает, сколько запчастей необходимо для починки: 100-80(жизни калаша)=20. Но вместо того, чтобы от имеющегося (30) количества запчастей отнять необходимое для ремонта (20) количество запчастей, он всегда отнимает 100 запчастей. В итоге вместо 30-20=10 мы получаем 30-100=-70. Исправление простое: нужно 100 заменить на соответствующую переменную, содержащую необходимое для ремонта количество запчастей. Взял на себя смелость исправить этот баг - ссылки ниже. Плюс от себя добавил автофикс, специально для тех игроков, которые уже столкнулись с багом, очень желают его исправить, но не хотят ради этого жертвовать текущим прогрессом и начинать новую игру: теперь если скрипт при пополнении списка рембокса увидит где-то отрицательное количество запчастей, он автоматически исправит это число на ноль, и тут же выдаст недостающее количество запчастей (разница между -100 и текущим отрицательным значением), если игрок пытался самостоятельно вывести баланс в ноль, выкидывая на ветер десятки единиц данного вида оружия. В коде это выглядит просто: к отрицательному количеству (-70) прибавляется 100, и итог выводится в списке (-70+100=30) и тут же сохраняется в игровой базе данных. Зачем нужен автофикс: 1 - при разборке новых вещей отрицательное значение уменьшалось, т.е. чтобы снова можно было ремонтировать вещь того же типа, приходилось выбрасывать в трубу эти 70 деталей, чтобы вывести количество запчастей в ноль. Поэтому чем больше разница между -100 и текущим значением, тем больше деталей игрок выкинул в трубу, и тем больше ему нужно их вернуть, например при количестве деталей -2 игрок выбросил почти сотню (98) деталей: [-100 - -2] = 98. Именно столько деталей ему и возвращается: -2+100=98 2 - без автофикса приходилось бы начинать новую игру. С автофиксом этого не требуется. Но автофикс по сути является лишним кодом, не нужным для игры, поэтому в первой же очередной версии мода или фикса, которые потребуют начала новой игры, код автофикса можно смело убрать из скрипта. Прикладываю две версии исправленного скрипта: 1 - если не хотите начинать новую игру, качайте эту: тыц 2 - если вы только что установили мод, и еще не успели начать новую игру, качайте эту: тыц Различие между этими версиями: в первой есть код автофикса, во второй нету. Но в обоих есть исправление бага с ремонтом. Автофикс срабатывает ровно один раз на каждый предмет с отрицательным количеством запчастей, и после этого автоматически отключается на всю оставшуюся игру. Поэтому если у вас, допустим, было всего два предмета с таким багом (число запчастей меньше нуля), и все они уже исправлены (число для них больше либо равно нулю), перед очередным запуском игры смело можно скачать вторую версию скрипта (ту, что без автофикса), и заменить ей ту версию, что установлена сейчас. При этом начинать новую игру не нужно: автофикс уже отработал и исправил отрицательное количество запчастей. Также сразу ставить вторую версию можно тем, кто уже начал игру, но еще не столкнулся с данным багом(не чинил ничего рембоксом), либо столкнулся, но уже самостоятельно исправил все предметы (убрал отрицательное количество запчастей). Но знайте: автофикс срабатывает только на те предметы, что сейчас отображаются в списке рембокса. Поэтому возможна ситуация, когда вы поставите вторую версию скрипта, при этом часть предметов так и не будет исправлена, поскольку за время работы скрипта с автофиксом они ни разу не отображались в списке рембокса (не были в инвентаре в момент использования рембокса). Для исправления таких предметов вы можете либо самостоятельно вывести их баланс в ноль, либо временно перезагрузить игру со скриптом с автофиксом, положить эти предметы в инвентарь, использовать рембокс (достаточно, чтобы он вывел список предметов, можно даже ничего не чинить), закрыть игру и опять поставить вторую версию скрипта. Либо же просто играйте с первой версией скрипта - код автофикса никак не влияет на производительность, поскольку отрабатывает ровно один раз на бажный предмет за всю игру, а в остальное время выдает всего одно лишнее сравнение на каждый предмет в списке рембокса на каждое использование рембокса (когда вы открываете рембокс). В остальное время скрипт не работает, потому даже теоретически не может внести какие-либо тормоза в игру. Доступны в течении 30 дней (до 06.05.13) - переложите куда нужно. Если не успеете, тогда исправляйте вручную: А теперь резервный вариант ручного исправления бага с ремонтом, если вышеприведенные ссылки умрут: 1 - блокнотом открыть файл gamedata\scripts\m_remkit.script 2 - найти строку return 100, 100 и заменить ее на строку return 100, needp 3 - сохранить файл, закрыть блокнот Если не хотите начинать новую игру, помимо бага с ремонтом нужно добавить код автофикса: 1 - найти строку local cond = math.modf(item:condition()*100) и заменить ее на следующий код local parts = getParts(item:section()) if parts<0 then incParts(item:section(), 100) parts = parts + 100 end local cond = math.modf(item:condition()*100) 2 - найти строку ("..tostring(getParts(item:section()))..") и заменить ее на строку ("..tostring(parts)..") Скрипт ставится поверх чистого мода, либо поверх мода с mini_fix1. Для установки достаточно распаковать файл в папку gamedata\scripts\ и согласиться на замену файла. Для авторов мода: в будущие фиксы следует включить только вторую версию скрипта, без автофикса - он абсолютно лишний, если баг исправлен (а он исправлен). И маленький совет: я бы на вашем месте давно ввел в шапку каждого скрипта (там где сейчас красуется автор скрипта) его номер версии, который бы увеличивал при каждой правке, и привязывал к этому номеру все исправления в данном скрипте. И ввел бы историю правок. Просто чтобы перестать путаться, какой из 200 файлов с одинаковым именем что делает. Изменено 6 Апреля 2013 пользователем monk Поделиться этим сообщением Ссылка на сообщение