DeathDemona> что-то с спавном запорлся, в чём напутал ?
Где ошибка - попробую понять позже. Пока советы по мелочам.
DeathDemona> 0 value xM
Будь осторожнее, помни, что value переменные - глобальные. Если там пишет что-то один персонаж, то данные меняются у всех. Так что - не особо рекомендуется использовать без особой надобности. Можно - пользовательские uvalue, а лучше - прямо со стека брать, если что.
Вообще, чую, пора вводить локальные временные переменные слова
DeathDemona> player@ "X" p@ 100 + to xMDeathDemona> player@ "Y" p@ 100 + to yMDeathDemona> player@ "Z" p@ to zM
1. Есть слово
coords@ ( character -- x y z ), которое возвращает x, y и z указанного персонажа.
2. Есть слово
coords-randomize ( x y z delta -- x+/-delta y+/-delta z ). Т.е. можно написать:
code forth
self coords@ 100 coords-randomize to zM to yM to xM
DeathDemona> "{5122 [ xM ] [ yM ] [ zM ] [ HeadingM ] 60 false}" parse
Получилась
строка.
> fairys-spawned-list list+
Ты строку добавил к списку.
DeathDemona> fairys-spawnlist npc-list-spawn to fairys-spawned-list
Пытаешься отспавнить, и среди других данных - простая строка...
Варианты:
1. добавить
eval, чтобы просто вычислить строку:
"{ 5122 [ xM ] [ yM ] [ zM ] [ HeadingM ] 60 false }" parse eval.
2. Зачем вообще вычислять строку? Список можно итак сделать, фигурные скобки - это обычные слова. Открывающаяся запоминает уровень стека, закрывающая - снимает всё, что появилось с введения открывающейся и из добавленных элементов формирует список. Кстати, поэтому и не забывай фигурные скобки отделять пробелом или переводом строки от других слов.
code forth
{ 5122 xM yM zM HeadingM 60 false } fairys-spawned-list list+
Кстати, содержимое списка можно посмореть, распечатав. Или в клиенте, или в телнете:
code forth
fairys-spawned-list .
("точка" - печатает со стека одно значение).
Для отладки полезно также использовать ещё
.s (печатает весь стек, не трогая значений).