Перейти к контенту

Shoker Mod CS v[2.0]


*Shoker*

Рекомендуемые сообщения

Касательно мода - знаю что уже прошло очень много времени, и мод уже мало кому интересен

По моему это самый адекватный из модов на ЧН. Здоровье само восстанавливается, динамические аномалии, случайные монстры и случайные сталкеры, заполненные тайники.

Единственное, что не нравится - быстрый износ вещи, снятой с трупа. Я бы это вообще убрал: какая разница, каким образом добыт тот или иной предмет? Главное его состояние.

Но в принципе жить можно - эти вещи можно чинить ремнабором и продавать торговцам, хоть какой-то профит с них.

Аптечек и бинтов реально не хватает. Особенно бинтов. Но так, напротив, интереснее - перестаешь лезть на пролом, стараешься стрелять с дальних дистанций, и убегаешь при ранении: бинтов нет, нужно подождать, пока рана сама затянется, поэтому сейчас не до продолжения стрельбы, отлежаться бы где в безопасном месте.

 

Но с ремнабором есть баг:

Допустим у нас есть калаш с 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 файлов с одинаковым именем что делает.

Изменено пользователем monk

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...