Всякая эвентовая всячина

 
+
-
edit
 

Balancer

администратор
★★★★★
Это всякие админские фишки, которые использовались во вчерашнем эвенте на моём сервере.

: st 3000 3000 player@ dup target@ MAGIC-SKILL-TARGET ;

Воспроизвести скилловый эффект на выбранную цель. Например:
//do 1016 st

code forth
  1. : so player@ PLAY-SOUND ;
  2. : s3 "ItemSound.quest_fanfare_1" so ;
  3. : s4 "ItemSound.quest_fanfare_2" so ;
  4. : s5 "ItemSound.quest_finish" so ;

и т.п.

В игре:
//do "s4" do-players - воспроизвести звук фанфар для всех игроков сервера

code forth
  1. 4442 CONSTANT Lottery_Ticket
  2.  
  3. : give-ticket  ( -- )
  4.     Lottery_Ticket player@ inventory?
  5.     0 > if
  6.         "You already have ticket" .
  7.         exit
  8.     then
  9.  
  10.     Lottery_Ticket 1 player@ inventory+!
  11. ;


Выдать лоттерейный билет (признак участия в эвента) через NPC. Выдать не более одного. Вызов выдачи в духе:
code html4strict
  1. <a action="bypass -h forth give-ticket">Give ticket to EVENT!</a>


В принципе, были ещё отлажены слова для автоматической выдачи призов, но вчера не были использованы, т.к. призы выдавались вручную:
code forth
  1.  
  2.  
  3. : adena?  ( n -- n f )
  4.  Возвращаем истину, если есть n адены и ложь - иначе
  5. player@ adena@ over >=
  6. ;
  7.  
  8. variable sword
  9.  
  10. : award?  ( to from -- )
  11.     dup player@ inventory? 0 > if
  12.         1 player@ inventory-! drop
  13.         1 player@ inventory+!
  14.         "ItemSound.quest_finish" player@ play-sound
  15.         -1
  16.     else
  17.         2drop
  18.         0
  19.     then
  20. ;
  21.  
  22. : check-event  ( -- )
  23.     Lottery_Ticket player@ inventory? 1 < if
  24.         "You have not ticket!" .
  25.         exit
  26.     then
  27.    
  28.     sword @ not if   2545 65 award? if -1 sword ! then   then
  29.  
  30.     Lottery_Ticket 1 player@ inventory-! drop
  31. ;


Выдать один дуал взамен итема 65 при наличии лоттерейного билета :)

...

Да, ещё на недавно введённых покатушках на страйдерах/вайвернах, появилась шкала остатка времени (аналогичная как при стрельбе из лука и т.п.)

В Форте вызывается просто:
время(мс) цвет(0..3) игрок GAUGE

Т.е., например, 3000 3 player@ gauge - для текущего игрока нарисовать шкалу жёлто-зелёного (лайм?) цвета на 3 секунды.

...

Вообще, по мере насыщения словаря, работать дальше всё легче и легче :D

Всё вышеперечисленное вчера вводилось в игру и тестировалось без перезагрузки сервера :)

В планах - нужно сделать, чтобы админ-команды, при ненахождении в стандартных обрабочиках, целиком обрабатывались как Форт-команды. Тогда не нужно будет постоянно эти "do " писать :) Сразу:

//"s4" do-players - и у всех звучат фанфары :D

Или даже, чтобы совсем упростить жизнь:
code text
  1. //: s   "s4" do-players ;"
  2. //s
  3. //s
  4. ...
  5. //s


Т.е. вызываем каждый раз одну только "s" для этой озвучки.

Напомню, что доступ к Форт-системе из админ-меню полноценный, можно прямо во время игры программировать систему :)
 
+
-
edit
 

Balancer

администратор
★★★★★
Чисто на уровне примеров, куски кода из реальных эвентов :)

code forth
  1. 991 constant royen's_key
  2.  
  3. variable to_king_transferred
  4. variable king_ring_given
  5.  
  6. : check-event  ( -- )
  7.     royen's_key player@ inventory? 1 < if
  8.     "You have not key!" .
  9.     exit
  10.     then
  11.  
  12.     to_king_transferred @ not if
  13.         -1 to_king_transferred !
  14.         player@ 83914 36230 -1833 teleport_player_to
  15.     then
  16.  
  17.     royen's_key 1 player@ inventory-! drop
  18. ;
  19.  
  20. : event-check:king  ( -- )
  21.      king_ring_given @ 0= if
  22.         1509 1 player@ inventory+!
  23.         "However, run faster after the reward!" .
  24.      then
  25.      -1 king_ring_given !
  26. ;


check-event проверяет, есть ли у игрока ключ (код 991) и, если есть, перекидывает игрока в заданные координаты (ключ добывается из дропа эвентового NPC). Перекидывает только одного (глобальная переменная to_king_transferred).

event-check:king - выдаёт награду в виде перстня, тоже только один раз (игрок, телепортируемый первым NPC - хранителем врат, переносится к королю, выдающему свой перстень). Выдаёт тоже только один раз. Тоже через флаг в глобальной переменной.

code forth
  1. : reset
  2.     0 to_king_transferred !
  3.     0 king_ring_given !
  4. ;


Это слово для тестов - обнуляет переменные, чтобы события снова могли сработать.

...

Вообще, надо будет продумать систему диалогов, так, чтобы и все диалоги и скриптовые файлы лежали в одном каталоге - тогда готовые полностью автоматические эвенты можно будет распространять отдельными пакетами :)

...

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

iRUS

новичок
Выложил бы хоть пакетики, уж очень зочется на рабочем поковырять =) А то как-то сам фигню делаю, хочется интересного че-нить...
 
+
-
edit
 

masterXL

разработчик OpenWorlds
: sb1 "'etcsound.battle' so" do-players ;
cool ;)
Трудно быть богом... Не веришь? Спроси любого админа! можешь спросить у меня 175506816 ServerIP=193.41.172.19 Перенос доступен  
+
-
edit
 

Balancer

администратор
★★★★★
Выложил бы хоть пакетики, уж очень зочется на рабочем поковырять =) А то как-то сам фигню делаю, хочется интересного че-нить...
 


Так всё, что тут описано, было сделано ещё в открытой сборке. И она до сих пор доступна на скачивание. Там и можно смотреть.
 

Murkt

Pythoneer

Balancer, ты фтыкнул, этому вопросу уже месяцев 9 :)
[team Їжачки - сумні падлюки]  
+
-
edit
 

Balancer

администратор
★★★★★
Balancer, ты фтыкнул, этому вопросу уже месяцев 9 :)
 


Ну так, родился, значит :D
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru