Это всякие админские фишки, которые использовались во вчерашнем эвенте на моём сервере.
: st 3000 3000 player@ dup target@ MAGIC-SKILL-TARGET ;
Воспроизвести скилловый эффект на выбранную цель. Например:
//do 1016 stcode forth
: so player@ PLAY-SOUND ;
: s3 "ItemSound.quest_fanfare_1" so ;
: s4 "ItemSound.quest_fanfare_2" so ;
: s5 "ItemSound.quest_finish" so ;
и т.п.
В игре:
//do "s4" do-players - воспроизвести звук фанфар для всех игроков сервера
code forth
4442 CONSTANT Lottery_Ticket
: give-ticket ( -- )
Lottery_Ticket player@ inventory?
0 > if
"You already have ticket" .
exit
then
Lottery_Ticket 1 player@ inventory+!
;
Выдать лоттерейный билет (признак участия в эвента) через NPC. Выдать не более одного. Вызов выдачи в духе:
code html4strict
<a action="bypass -h forth give-ticket">Give ticket to EVENT!
</a>
В принципе, были ещё отлажены слова для автоматической выдачи призов, но вчера не были использованы, т.к. призы выдавались вручную:
code forth
: adena? ( n -- n f )
Возвращаем истину, если есть n адены и ложь - иначе
player@ adena@ over >=
;
variable sword
: award? ( to from -- )
dup player@ inventory? 0 > if
1 player@ inventory-! drop
1 player@ inventory+!
"ItemSound.quest_finish" player@ play-sound
-1
else
2drop
0
then
;
: check-event ( -- )
Lottery_Ticket player@ inventory? 1 < if
"You have not ticket!" .
exit
then
sword @ not if 2545 65 award? if -1 sword ! then then
Lottery_Ticket 1 player@ inventory-! drop
;
Выдать один дуал взамен итема 65 при наличии лоттерейного билета
...
Да, ещё на недавно введённых покатушках на страйдерах/вайвернах, появилась шкала остатка времени (аналогичная как при стрельбе из лука и т.п.)
В Форте вызывается просто:
время(мс) цвет(0..3) игрок GAUGE
Т.е., например,
3000 3 player@ gauge - для текущего игрока нарисовать шкалу жёлто-зелёного (лайм?) цвета на 3 секунды.
...
Вообще, по мере насыщения словаря, работать дальше всё легче и легче
Всё вышеперечисленное вчера вводилось в игру и тестировалось без перезагрузки сервера
В планах - нужно сделать, чтобы админ-команды, при ненахождении в стандартных обрабочиках, целиком обрабатывались как Форт-команды. Тогда не нужно будет постоянно эти "do " писать
Сразу:
//"s4" do-players - и у всех звучат фанфары
Или даже, чтобы совсем упростить жизнь:
code text
//: s "s4" do-players ;"
//s
//s
...
//s
Т.е. вызываем каждый раз одну только "s" для этой озвучки.
Напомню, что доступ к Форт-системе из админ-меню полноценный, можно прямо во время игры программировать систему