questmanager: type: world events: on server starts: - inject locally loadYAML 'def:quests|quests on player clicks sign: - define quest '' - if .is[==].to[]> { - if { - narrate "you have completed %quest% quest" - foreach { - define reward - if %value% == 'drpg_xp' { - flag player drpg_xp:++:%reward% - queue clear } - if %value% == 'gold' { - flag player drpg_gold:++:%reward% - queue clear } - narrate "here is %reward% %value% as a reward" - give %value% qty:%reward% } - flag player active_quests:<-:%quest% - flag player %quest%_complete:! - flag player %quest%_wait duration:24h - queue clear } - if { - narrate "you can repeat this quest in " - queue clear } - if { - narrate "you already have this quest" - queue clear } - if ! { - narrate "click again to accept the %quest% quest" - flag player %quest%_confirm duration:120 - queue clear } - flag player %quest%_confirm:! - inject locally start_quest } on player kills entity: - if ! { - queue clear } - define entity - foreach { - define possible_flag '%value%_%entity%_count' - if ! { - foreach next } - define flag '%value%_%entity%_count' - player flag %flag%:++:1 - if =].to[quests.%value%.type.kill_list.%entity%]> { - flag player %flag%:! - if { - if { - define msg 'the quest_sign' } - if { - define msg '' } - narrate "go back to %msg% to get your reward" - flag player %1%_complete } else { - define quest '%value%' - foreach { - define reward - if %value% == 'drpg_xp' { - flag player drpg_xp:++:%reward% - queue clear } - if %value% == 'gold' { - flag player drpg_gold:++:%reward% - queue clear } - narrate "here is %reward% %value% as a reward" - give %value% qty:%reward% } } } } on player picks up item: - if ! { - queue clear } - define item - foreach { - define possible_flag '%value%_%item%_count' - if ! { - foreach next } - define flag '%value%_%item%_count' - player flag %flag%:++:1 - if =].to[quests.%value%.type.gather_list.%item%]> { - flag player %flag%:! - if { - if { - define msg 'the quest_sign' } - if { - define msg '' } - narrate "go back to %msg% to get your reward" - flag player %1%_complete } else { - define quest '%value%' - foreach { - define reward - if %value% == 'drpg_xp' { - flag player drpg_xp:++:%reward% - queue clear } - if %value% == 'gold' { - flag player drpg_gold:++:%reward% - queue clear } - narrate "here is %reward% %value% as a reward" - give %value% qty:%reward% } } } } on player enters notable cuboid: - if ! { - queue clear } - define cuboid '' - foreach { - if ! { - foreach next } - define flag '%value%' - if - player flag %flag%:! - if { - if { - define msg 'the quest_sign' } - if { - define msg '' } - narrate "go back to %msg% to get your reward" - flag player %1%_complete } else { - define quest '%value%' - foreach { - define reward - if %value% == 'drpg_xp' { - flag player drpg_xp:++:%reward% - queue clear } - if %value% == 'gold' { - flag player drpg_gold:++:%reward% - queue clear } - narrate "here is %reward% %value% as a reward" - give %value% qty:%reward% } } } on player flag cleared: - define flag '' - foreach { - if .is[==].to[auto]> { - if ]> { - inject locally start_quest } } } start_quest: - flag player active_quests:->:%quest% - define type - if %type% == goto { - define loc '' - note cu@| 'as:%quest%_cu' - flag player %quest%:'%quest%_cu' - queue clear } - foreach { - flag player %quest%_%value%_count:0 } loadYAML: - if ! { - if ! { - yaml create 'id:quests' - yaml 'savefile:drpg/quests/quests.yml' 'id:quests' } else { - yaml 'load:drpg/quests/quests.yml' 'id:quests' } }