Работает так.
Выбираем игрока целью. Пишем "//jail". Игрок садится в тюрьму на выбивание 100 предметов. Или "//jail <число_предметов>".
Координаты места для тюрьмы записаны в service/jail.f - естественно, их можно поменять на другую закрытую область.
Мобов пока скрипт тюрьмы сам по себе не спавнит. Наспавньте там мобов 172 и 653. Немного позже сделаю возможность задачи "тюремных" мобов списком. Их нужно убивать. Вероятность дропа "тюремного" предмета с них - level_моба/level_игрока. Т.е. на 50м уровне при убийстве мобов 10-го уровня, вероятность дропа 1/5, а всего убийств на стандартной отсидке - около 500. Это примерно полная ночь игры
При заключении происходит перехват респавна после смерти (кстати, за смерть можно будет один предмет давать... или даже десяток
- мысль) и по /unstuck. Остальные виды телепорта работают, например, в .to-event пришлось специальную проверку вводить.
У заключённых безвозвратно удаляются скроллы escape: 736 1538 1829 1830 3958 4677 5858 5859
...
Когда заключённый выполнит свою работу, он автоматически освобождается с переносом в координаты, откуда был посажен. можно освободить досрочно по "
//unjail".
...
Можно пытаться посадить в тюрьму игрока, когда он в офлайне, введя нужную проверку в on-player-start.f Скажем, так (напомню, что условия if .. then могут использоваться только внутри компилируемых слов, но не в ручном режиме):
В конце Jail.f (допишу)
code forth
: jail-by-name
player@ "Name" p@ jailed? not and if
100 gm_jail
then
;
on-player-start.f:
code text
"vasya" jail-by-name