Сделал фонарик в игре. И обнаружил удивительную вещь.
Если фонарик хотя бы один раз включить в темной комнате, потом его можно спокойно выключать. Комната остается освещенной! Это ж обалдеть какая дырка!
Стал смотреть advr.t - там метода doTurnOff
для источника света вообще не предусмотрено!
Это надо исправлять. А то фигня какая-то выходит. Я у себя поправлю, конечно, но в новую версию библиотеки это исправление должно войти обязательно!
Неактивен
Залечил вот так (добавил код в class lightsource):
doTurnoff(actor) = { local waslit := actor.location.islit; // turn off the light self.isActive := nil; self.islit := nil; "<<ZAG(parserGetMe(),&sdesc)>> выключ<<ok(parserGetMe(), 'или', 'ил', 'ило', 'ила')>> <<self.vdesc>>"; // если комната была освещена, а теперь - нет, то это надо обозначить... if (!actor.location.islit and waslit) { ", и все вокруг погрузилось во тьму.\b"; actor.location.enterRoom(actor); } else ". "; }
Неактивен
Необходимо использовать класс darkroom, у которого свойство islit вычислимо. Если источник света больше не islit, то комната должна без вопросов погрузиться в темноту. Правда, описание этого события целиком на совести автора.
Неактивен
Конечно, я использую darkroom
.
В том то и дело, что в неисправленнои варианте islit
у источника света никогда не становится nil
, если он был однажды включен. Фонарик у меня отнаследован от lightsource, switchItem
. Так вот, doTurnon
- берется от lightsource
, а doTurnoff
в lightsource
нет, поэтому берется от switchItem
, который про islit
- ни ухом, ни рылом. Вот и получается, что если фонарик включить, то он остается гореть даже, если его выключать потом.
Неактивен
Этот патч подойдет для случая lightsource, switchItem. Если прописать doTurnoff только для lightsource, то и свечку и банку со светлячком можно будет "выключать". Поэтому нужен патч, который для darkroom будет проверять что источник света ещё и включён.
Обновление: Верификация включения/выключения в lightsource не прописана и doTurnoff по умолчанию не будет доступен. Так что ставлю исправление Антона.
Отредактировано GrAndrey (17.07.2008 10:00)
Неактивен