From 7a2377fd9fc5ebea465b9fddd97586f684bebfc0 Mon Sep 17 00:00:00 2001 From: Afro Date: Fri, 25 Oct 2024 01:06:51 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=88=20add=20telemetry=20pagination=20(?= =?UTF-8?q?#250)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 📈 add pagination to booth telemetry - keeps track of length of each page (character count) - cuts it off at some value that is still exportable by chat (max 300,000 chars in minecraft, we'll set it lower for safety: 250,000 chars) - starts a new page once we surpass this max value - converted `show` trigger command to iterate through each page instead of showing booth telemetry all at once - `pop` now clears all but the latest page * 📈 dont show player ID map if there are too many entries * 📈 add rudimentary high-level telemetry stats to view immediately - so we dont NEED to process all the data to get this info currently tracking (total and distinct players): - booth visitors - parkour finishes - times joined queue - fights started - fight wins - fight deaths * 🥅 error when booth tag is being called by non-players * 🐛 fix telemetry ID being reset on joining bossfight - this was causing the player ID map to balloon in size very fast * 📈 add exit tags for `back_cave` and `waterfall_secret` rooms * 🐛 fix booth pages not being initialized if `data.booth` was an empty array * 🔊 add explicit log for if there is no booth page data to show * ♻️ rename `telemetry.temp ` -> `telemetry temp.` * 🐛 fix bossfight telemetry tags not working - at some point the tick field was initializing AFTER the rest, and we had a hard-to-see `temp set value {}` command that cleared the tick field - so the string would never set * 📈 add pagination to bossfight telemetry - mostly same as booth - only difference is bossfight root.start tags are the only ones that can start a new page * 🐛 fix damage tag not working * 🐛 fix schema/get always clearing entire `temp` telemetry storage * 📈 use player ID map for bossfight player ID in root tag - saves 14 characters (20 - ~6) per bossfight * 📈 add schema for and minify damage tag's damage source * 🐛 fix scheduled functions breaking with some telemetry data - e.g. relative tick, since it can't store the relative time in its `@s omegaflowey.math.0` score (since it's from the server, not an entity) * 🐛 fix accidental removal of bossfight instance ID * 🐛 ♻️ move all active player root tag info under single execution instance * ⚡️ remove unnecessary extra semicolon `;` separator from all telemetry tags * ⚰️ remove nonfunctional "0 pages" log - this never ran because of us initiailizing at least 1 page always in the data * 🔊 show total telemetry pages in `stats` trigger - for quick viewing * 🔊 add player ID map to bossfight show trigger --- .../boss_fight/shared/stop.mcfunction | 2 +- .../stop/as_active_player/won.mcfunction | 8 ++- .../summit/phase/attack/initialize.mcfunction | 4 +- .../phase/cutscene/initialize.mcfunction | 4 +- .../summit/phase/soul/initialize.mcfunction | 4 +- .../summit/phase/warn/initialize.mcfunction | 4 +- .../summit/player/join_bossfight.mcfunction | 9 +++ .../summit/player/queue/join.mcfunction | 5 ++ .../player/rejoin/check/success.mcfunction | 3 +- .../function/player/room/enter.mcfunction | 5 ++ .../underground/back_cave/exit.mcfunction | 2 +- .../waterfall_secret/exit.mcfunction | 2 +- .../parkour/finish/enter.mcfunction | 4 ++ .../soul_5/healer/heal/as_player.mcfunction | 2 +- .../utils/damage/as_player.mcfunction | 21 +------ .../utils/damage/as_player/died.mcfunction | 24 ++++++++ .../function/setup/const.mcfunction | 28 +++++++++ .../function/setup/objectives.mcfunction | 7 +++ .../function/telemetry/admin/help.mcfunction | 10 ++++ .../telemetry/admin/pop/booth.mcfunction | 5 +- .../telemetry/admin/pop/bossfight.mcfunction | 10 ++-- .../telemetry/admin/reset_triggers.mcfunction | 2 + .../telemetry/admin/show/booth.mcfunction | 10 +++- .../admin/show/booth/get_page.mcfunction | 1 + .../admin/show/booth/iterate.mcfunction | 16 +++++ .../telemetry/admin/show/bossfight.mcfunction | 11 +++- .../admin/show/bossfight/get_page.mcfunction | 1 + .../admin/show/bossfight/iterate.mcfunction | 16 +++++ .../admin/show/player_id_map.mcfunction | 13 +++++ .../function/telemetry/admin/stats.mcfunction | 58 +++++++++++++++++++ .../function/telemetry/admin/tick.mcfunction | 2 + .../telemetry/booth/add_tag.mcfunction | 10 ++++ .../add_tag/check_page_length.mcfunction | 14 +++++ .../booth/add_tag/new_page.mcfunction | 3 + .../booth/add_tag/to_string.mcfunction | 3 +- .../telemetry/booth/schema/get.mcfunction | 2 +- .../telemetry/booth/schema/setup.mcfunction | 2 + .../schema/error/damage_source.mcfunction | 6 ++ .../schema/get/damage_source.mcfunction | 3 + .../{get.mcfunction => get/name.mcfunction} | 2 +- .../bossfight/schema/setup.mcfunction | 11 ++++ .../telemetry/bossfight/tag/end.mcfunction | 2 +- .../bossfight/tag/instant.mcfunction | 2 +- .../bossfight/tag/root/end.mcfunction | 2 +- .../bossfight/tag/root/start.mcfunction | 23 +++++--- .../root/start/as_active_player.mcfunction | 7 ++- .../root/start/check_if_new_page.mcfunction | 6 ++ .../tag/root/start/generate_uuid.mcfunction | 2 +- .../tag/root/start/get_player_id.mcfunction | 4 ++ .../tag/root/start/new_page.mcfunction | 3 + .../tag/root/start/to_string.mcfunction | 7 +++ .../bossfight/tag/root/to_string.mcfunction | 7 --- .../telemetry/bossfight/tag/shared.mcfunction | 30 ++++++---- .../bossfight/tag/shared/to_string.mcfunction | 6 ++ .../telemetry/bossfight/tag/start.mcfunction | 2 +- .../bossfight/tag/to_string.mcfunction | 5 -- .../tag/update_page_length.mcfunction | 7 +++ .../bossfight_hit_count.mcfunction | 2 +- .../data/active_player/gamemode.mcfunction | 9 +-- .../gamemode/as_active_player.mcfunction | 8 +++ .../data/minify_damage_source.mcfunction | 5 ++ .../function/telemetry/data/shared.mcfunction | 4 +- .../function/telemetry/setup.mcfunction | 3 +- .../function/telemetry/setup/pages.mcfunction | 7 +++ 64 files changed, 403 insertions(+), 99 deletions(-) create mode 100644 datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player/died.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/get_page.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/iterate.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/get_page.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/iterate.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/player_id_map.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/stats.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/check_page_length.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/new_page.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/error/damage_source.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/damage_source.mcfunction rename datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/{get.mcfunction => get/name.mcfunction} (67%) create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/check_if_new_page.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/get_player_id.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/new_page.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/to_string.mcfunction delete mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/to_string.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared/to_string.mcfunction delete mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/to_string.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/update_page_length.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode/as_active_player.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/minify_damage_source.mcfunction create mode 100644 datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup/pages.mcfunction diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop.mcfunction index 630585ab4..f17224dc0 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop.mcfunction @@ -1,6 +1,6 @@ function omegaflowey.main:telemetry/data/active_player/bossfight_hit_count function omegaflowey.main:telemetry/data/active_player/gamemode with storage omegaflowey:bossfight -execute store result storage omegaflowey:telemetry.temp data.s int 1 run \ +execute store result storage omegaflowey:telemetry temp.data.s int 1 run \ scoreboard players get #omegaflowey.bossfight.stop_reason omegaflowey.global.flag function omegaflowey.main:telemetry/bossfight/tag/end { name: "bossfight.summit" } function omegaflowey.main:telemetry/bossfight/tag/root/end diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop/as_active_player/won.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop/as_active_player/won.mcfunction index f878bca40..8c8f1a731 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop/as_active_player/won.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/shared/stop/as_active_player/won.mcfunction @@ -1,3 +1,7 @@ +scoreboard players add #omegaflowey.telemetry.stats.total_wins omegaflowey.global.flag 1 +execute unless score @s omegaflowey.player.summit.has_survived_flowey matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_wins omegaflowey.global.flag 1 + # Split rewards based on how many hits the player took execute if score #omegaflowey.bossfight.player_hit_count omegaflowey.global.flag matches ..3 run \ function omegaflowey.entity:directorial/boss_fight/shared/stop/as_active_player/won/give_reward_hat_low_hits @@ -10,7 +14,7 @@ stopsound @s player minecraft:entity.item.pickup playsound omega-flowey:player.get-item player @s ~ ~ ~ 10 # Show feedback link, but only the first time they beat it -execute unless entity @s[tag=omegaflowey.player.survived_flowey] run \ +execute unless entity @s[scores={omegaflowey.player.summit.has_survived_flowey=1}] run \ function omegaflowey.entity:directorial/boss_fight/shared/stop/as_active_player/won/log_thanks_for_playing -tag @s add omegaflowey.player.survived_flowey +scoreboard players set @s omegaflowey.player.summit.has_survived_flowey 1 diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/attack/initialize.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/attack/initialize.mcfunction index 0ce57e8ae..a43b1f59a 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/attack/initialize.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/attack/initialize.mcfunction @@ -1,5 +1,5 @@ -data modify storage omegaflowey:telemetry.temp data set value {} -execute store result storage omegaflowey:telemetry.temp data.i int 1 run \ +data modify storage omegaflowey:telemetry temp.data set value {} +execute store result storage omegaflowey:telemetry temp.data.i int 1 run \ scoreboard players get @s omegaflowey.boss-fight.attack.phase.i function omegaflowey.main:telemetry/bossfight/tag/start { name: "bossfight.phase.attack" } diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/cutscene/initialize.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/cutscene/initialize.mcfunction index ca4f16a38..c5fb96084 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/cutscene/initialize.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/cutscene/initialize.mcfunction @@ -1,5 +1,5 @@ -data modify storage omegaflowey:telemetry.temp data set value {} -execute store result storage omegaflowey:telemetry.temp data.i int 1 run \ +data modify storage omegaflowey:telemetry temp.data set value {} +execute store result storage omegaflowey:telemetry temp.data.i int 1 run \ scoreboard players get @s omegaflowey.boss-fight.cutscene.phase.i function omegaflowey.main:telemetry/bossfight/tag/start { name: "bossfight.phase.cutscene" } diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/soul/initialize.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/soul/initialize.mcfunction index 37dfce3ad..32ba33ad8 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/soul/initialize.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/soul/initialize.mcfunction @@ -1,5 +1,5 @@ -data modify storage omegaflowey:telemetry.temp data set value {} -execute store result storage omegaflowey:telemetry.temp data.i int 1 run \ +data modify storage omegaflowey:telemetry temp.data set value {} +execute store result storage omegaflowey:telemetry temp.data.i int 1 run \ scoreboard players get @s omegaflowey.boss-fight.progress.phase.i function omegaflowey.main:telemetry/bossfight/tag/start { name: "bossfight.phase.soul" } diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/warn/initialize.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/warn/initialize.mcfunction index 0181333fb..8c979a68e 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/warn/initialize.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/phase/warn/initialize.mcfunction @@ -1,5 +1,5 @@ -data modify storage omegaflowey:telemetry.temp data set value {} -execute store result storage omegaflowey:telemetry.temp data.i int 1 run \ +data modify storage omegaflowey:telemetry temp.data set value {} +execute store result storage omegaflowey:telemetry temp.data.i int 1 run \ scoreboard players get @s omegaflowey.boss-fight.progress.phase.i function omegaflowey.main:telemetry/bossfight/tag/start { name: "bossfight.phase.warn" } diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/join_bossfight.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/join_bossfight.mcfunction index acffb8865..6f50f7f8b 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/join_bossfight.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/join_bossfight.mcfunction @@ -1,4 +1,13 @@ +# We need to reset the player, but if they are joining the fight we don't want to +# reset their Flowey telemetry ID too +scoreboard players set #omegaflowey.bossfight.skip_reset_telemetry_id omegaflowey.global.flag 1 function #summit:join_server +scoreboard players set #omegaflowey.bossfight.skip_reset_telemetry_id omegaflowey.global.flag 0 + +scoreboard players add #omegaflowey.telemetry.stats.total_fights omegaflowey.global.flag 1 +execute unless score @s omegaflowey.player.summit.has_fought_flowey matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_fights omegaflowey.global.flag 1 +scoreboard players set @s omegaflowey.player.summit.has_fought_flowey 1 tag @s add omegaflowey.player.fighting_flowey diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/queue/join.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/queue/join.mcfunction index de7c1e9ee..cc08741f0 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/queue/join.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/directorial/boss_fight/summit/player/queue/join.mcfunction @@ -1,6 +1,11 @@ # if already in queue (or in bossfight somehow), do nothing execute unless entity @s[tag=!omegaflowey.player.in_queue, tag=!omegaflowey.player.fighting_flowey] run return 0 +scoreboard players add #omegaflowey.telemetry.stats.total_queue_joins omegaflowey.global.flag 1 +execute unless score @s omegaflowey.player.summit.has_joined_queue_before matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_queue_joins omegaflowey.global.flag 1 +scoreboard players set @s omegaflowey.player.summit.has_joined_queue_before 1 + function omegaflowey.main:telemetry/booth/add_tag { name: "player.queue.join" } # Play select sound if this was called from the interaction (and not manually) diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/rejoin/check/success.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/rejoin/check/success.mcfunction index f722360d1..d26d010f9 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/rejoin/check/success.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/rejoin/check/success.mcfunction @@ -1,4 +1,5 @@ -scoreboard players reset @s omegaflowey.player.telemetry.id +execute unless score #omegaflowey.bossfight.skip_reset_telemetry_id omegaflowey.global.flag matches 1 run \ + scoreboard players reset @s omegaflowey.player.telemetry.id execute if entity @s[tag=omegaflowey.player.fighting_flowey] run function omegaflowey.entity:directorial/boss_fight/summit/player/active/leave_and_rejoin execute if entity @s[tag=omegaflowey.player.in_queue] run function omegaflowey.entity:directorial/boss_fight/summit/player/queue/leave_and_rejoin diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/enter.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/enter.mcfunction index 1f893ab86..5266e9344 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/enter.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/enter.mcfunction @@ -1,2 +1,7 @@ +scoreboard players add #omegaflowey.telemetry.stats.total_visitors omegaflowey.global.flag 1 +execute unless score @s omegaflowey.player.summit.has_visited_booth matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_visitors omegaflowey.global.flag 1 +scoreboard players set @s omegaflowey.player.summit.has_visited_booth 1 + function omegaflowey.main:telemetry/booth/add_tag { name: "root.enter" } tag @s add omegaflowey.player diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/exit.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/exit.mcfunction index 423a63089..0fb21ece9 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/exit.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/exit.mcfunction @@ -1,2 +1,2 @@ -# function omegaflowey.main:telemetry/booth/add_tag { name: "room.underground.back_cave.exit" } +function omegaflowey.main:telemetry/booth/add_tag { name: "room.underground.back_cave.exit" } tag @s remove omegaflowey.player.room.back_cave diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/waterfall_secret/exit.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/waterfall_secret/exit.mcfunction index 41c9c50ef..ef2214ee7 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/waterfall_secret/exit.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/back_cave/waterfall_secret/exit.mcfunction @@ -1,2 +1,2 @@ -# function omegaflowey.main:telemetry/booth/add_tag { name: "room.underground.back_cave.waterfall_secret.exit" } +function omegaflowey.main:telemetry/booth/add_tag { name: "room.underground.back_cave.waterfall_secret.exit" } tag @s remove omegaflowey.player.room.back_cave.waterfall_secret diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/parkour/finish/enter.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/parkour/finish/enter.mcfunction index e584f6804..0131c705f 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/parkour/finish/enter.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/player/room/underground/parkour/finish/enter.mcfunction @@ -1,2 +1,6 @@ +execute unless score @s omegaflowey.player.summit.has_finished_parkour matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_parkour_finishes omegaflowey.global.flag 1 +scoreboard players set @s omegaflowey.player.summit.has_finished_parkour 1 + function omegaflowey.main:telemetry/booth/add_tag { name: "room.underground.parkour.finish.enter" } tag @s add omegaflowey.player.room.parkour.finish diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/soul/soul_5/healer/heal/as_player.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/soul/soul_5/healer/heal/as_player.mcfunction index 18b267cfb..1da7e107c 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/soul/soul_5/healer/heal/as_player.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/soul/soul_5/healer/heal/as_player.mcfunction @@ -1,4 +1,4 @@ -data modify storage omegaflowey:telemetry.temp data set value { a: 4 } +data modify storage omegaflowey:telemetry temp.data set value { a: 4 } function omegaflowey.main:telemetry/bossfight/tag/instant { name: "player.heal" } effect give @s minecraft:instant_health 1 1 true diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player.mcfunction index a2b626c00..9323fec70 100644 --- a/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player.mcfunction @@ -1,5 +1,5 @@ -$data modify storage omegaflowey:telemetry.temp data set value { d: $(damage) } -data modify storage omegaflowey:telemetry.temp data.s set from storage omegaflowey:utils.damage source +$data modify storage omegaflowey:telemetry temp.data set value { d: $(damage) } +function omegaflowey.main:telemetry/data/minify_damage_source with storage omegaflowey:utils.damage function omegaflowey.main:telemetry/data/active_player/gamemode with storage omegaflowey:bossfight function omegaflowey.main:telemetry/bossfight/tag/instant { name: "player.damage" } @@ -44,19 +44,4 @@ schedule function omegaflowey.entity:utils/damage/reset_immunity_flag 10t replac # Show custom death message # TAG_SUMMIT_HARDCODED_GLOBAL_VOLUME execute if score #omegaflowey.bossfight.player_died omegaflowey.global.flag matches 1 run \ - tellraw @a[ \ - x=-186, dx=91, y=10, dy=95, z=12, dz=95, \ - tag=omegaflowey.player \ - ] [ \ - { "selector": "@s"}, \ - " was slain by ", \ - { "text": "Omega Flowey", "color": "green" } \ - ] - -# Run outside tvscreen death animation -execute if score #omegaflowey.bossfight.player_died omegaflowey.global.flag matches 1 run \ - function omegaflowey.main:summit/room/outside/setup/tv_screen/death_animation with storage omegaflowey:decorative - -# Re-enable `showDeathMessages` if it was enabled previously -execute if score #omegaflowey.bossfight.player_died omegaflowey.global.flag matches 1 \ - if score @s omegaflowey.math.0 matches 1 run gamerule showDeathMessages true + function omegaflowey.entity:utils/damage/as_player/died diff --git a/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player/died.mcfunction b/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player/died.mcfunction new file mode 100644 index 000000000..52e968cd6 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.entity/function/utils/damage/as_player/died.mcfunction @@ -0,0 +1,24 @@ +## The active player died after being damaged by a Flowey attack + +# Show custom death message +# TAG_SUMMIT_HARDCODED_GLOBAL_VOLUME +tellraw @a[ \ + x=-186, dx=91, y=10, dy=95, z=12, dz=95, \ + tag=omegaflowey.player \ +] [ \ + { "selector": "@s"}, \ + " was slain by ", \ + { "text": "Omega Flowey", "color": "green" } \ +] + +# Run outside tvscreen death animation +function omegaflowey.main:summit/room/outside/setup/tv_screen/death_animation with storage omegaflowey:decorative + +# Re-enable `showDeathMessages` if it was enabled previously +execute if score @s omegaflowey.math.0 matches 1 run gamerule showDeathMessages true + +# Summit stats +scoreboard players add #omegaflowey.telemetry.stats.total_deaths omegaflowey.global.flag 1 +execute unless score @s omegaflowey.player.summit.has_died_to_flowey matches 1 run \ + scoreboard players add #omegaflowey.telemetry.stats.total_distinct_deaths omegaflowey.global.flag 1 +scoreboard players set @s omegaflowey.player.summit.has_died_to_flowey 1 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/setup/const.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/setup/const.mcfunction index f93916380..4050c15f6 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/setup/const.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/setup/const.mcfunction @@ -7,3 +7,31 @@ scoreboard players set #omegaflowey.const.180 omegaflowey.math.const 180 execute unless score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag matches 0.. run \ scoreboard players set #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag -1 + +execute unless score #omegaflowey.telemetry.stats.total_deaths omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_deaths omegaflowey.global.flag 0 +execute unless score #omegaflowey.telemetry.stats.total_distinct_deaths omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_deaths omegaflowey.global.flag 0 + +execute unless score #omegaflowey.telemetry.stats.total_fights omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_fights omegaflowey.global.flag 0 +execute unless score #omegaflowey.telemetry.stats.total_distinct_fights omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_fights omegaflowey.global.flag 0 + +execute unless score #omegaflowey.telemetry.stats.total_queue_joins omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_queue_joins omegaflowey.global.flag 0 +execute unless score #omegaflowey.telemetry.stats.total_distinct_queue_joins omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_queue_joins omegaflowey.global.flag 0 + +execute unless score #omegaflowey.telemetry.stats.total_distinct_parkour_finishes omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_parkour_finishes omegaflowey.global.flag 0 + +execute unless score #omegaflowey.telemetry.stats.total_visitors omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_visitors omegaflowey.global.flag 0 +execute unless score #omegaflowey.telemetry.stats.total_distinct_visitors omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_visitors omegaflowey.global.flag 0 + +execute unless score #omegaflowey.telemetry.stats.total_wins omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_wins omegaflowey.global.flag 0 +execute unless score #omegaflowey.telemetry.stats.total_distinct_wins omegaflowey.global.flag matches 0.. run \ + scoreboard players set #omegaflowey.telemetry.stats.total_distinct_wins omegaflowey.global.flag 0 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/setup/objectives.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/setup/objectives.mcfunction index 03de3e14f..8a243c57d 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/setup/objectives.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/setup/objectives.mcfunction @@ -112,6 +112,12 @@ scoreboard objectives add omegaflowey.player.leave.previous dummy scoreboard objectives add omegaflowey.player.health health scoreboard objectives add omegaflowey.player.shake.pitch dummy scoreboard objectives add omegaflowey.player.shake.yaw dummy +scoreboard objectives add omegaflowey.player.summit.has_died_to_flowey dummy +scoreboard objectives add omegaflowey.player.summit.has_fought_flowey dummy +scoreboard objectives add omegaflowey.player.summit.has_finished_parkour dummy +scoreboard objectives add omegaflowey.player.summit.has_joined_queue_before dummy +scoreboard objectives add omegaflowey.player.summit.has_survived_flowey dummy +scoreboard objectives add omegaflowey.player.summit.has_visited_booth dummy scoreboard objectives add omegaflowey.player.telemetry.id dummy scoreboard objectives add omegaflowey.player.telemetry.trigger.disable trigger scoreboard objectives add omegaflowey.player.telemetry.trigger.enable trigger @@ -120,6 +126,7 @@ scoreboard objectives add omegaflowey.player.telemetry.trigger.pop.booth trigger scoreboard objectives add omegaflowey.player.telemetry.trigger.pop.bossfight trigger scoreboard objectives add omegaflowey.player.telemetry.trigger.show.booth trigger scoreboard objectives add omegaflowey.player.telemetry.trigger.show.bossfight trigger +scoreboard objectives add omegaflowey.player.telemetry.trigger.stats trigger scoreboard objectives add omegaflowey.player.trigger.bossfight.confirm trigger scoreboard objectives add omegaflowey.player.trigger.bossfight.deny trigger diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/help.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/help.mcfunction index 5923a2443..c738f5fd1 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/help.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/help.mcfunction @@ -43,6 +43,16 @@ function omegaflowey.utils:log/self { text_component: '[ \ }, \ "\\n", \ "\\n", \ + { \ + "text": "stats", \ + "color": "yellow", \ + "clickEvent": { \ + "action": "suggest_command", \ + "value": "/trigger omegaflowey.player.telemetry.trigger.stats" \ + } \ + }, \ + "\\n", \ + "\\n", \ { \ "text": "enable", \ "color": "yellow", \ diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/booth.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/booth.mcfunction index 8105cb1bd..ca5f0a259 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/booth.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/booth.mcfunction @@ -6,11 +6,14 @@ execute if entity @s[name=!TheAfroOfDoom] run return run function omegaflowey.ut { "text": "can clear the telemetry buffer", "color": "red" } \ ]'} +# Don't clear the latest page to avoid coding fancy logic around page stats and stuff +data modify storage omegaflowey:telemetry temp.latest_page set from storage omegaflowey:telemetry data.booth[-1] data modify storage omegaflowey:telemetry data.booth set value [] +data modify storage omegaflowey:telemetry data.booth append from storage omegaflowey:telemetry temp.latest_page function omegaflowey.main:telemetry/setup/initialize_booth_data function omegaflowey.utils:log/self { text_component: '[ \ "", \ { "text": "Cleared ", "color": "red" }, \ - { "text": "current booth telemetry", "color": "yellow" } \ + { "text": "current booth telemetry (except the latest page)", "color": "yellow" } \ ]'} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/bossfight.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/bossfight.mcfunction index 448726f86..f50302847 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/bossfight.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/pop/bossfight.mcfunction @@ -6,15 +6,13 @@ execute if entity @s[name=!TheAfroOfDoom] run return run function omegaflowey.ut { "text": "can clear the telemetry buffer", "color": "red" } \ ]'} -# Don't clear the latest running fight in case it's still running, -# since bossfight telemetry data needs the root tag to be identifiable -data remove storage omegaflowey:telemetry temp.latest_bossfight -data modify storage omegaflowey:telemetry temp.latest_bossfight set from storage omegaflowey:telemetry data.bossfight[-1] +# Don't clear the latest page to avoid coding fancy logic around page stats and stuff +data modify storage omegaflowey:telemetry temp.latest_page set from storage omegaflowey:telemetry data.bossfight[-1] data modify storage omegaflowey:telemetry data.bossfight set value [] -data modify storage omegaflowey:telemetry data.bossfight append from storage omegaflowey:telemetry temp.latest_bossfight +data modify storage omegaflowey:telemetry data.bossfight append from storage omegaflowey:telemetry temp.latest_page function omegaflowey.utils:log/self { text_component: '[ \ "", \ { "text": "Cleared ", "color": "red" }, \ - { "text": "current bossfight telemetry (except the latest bossfight array entry, if it exists)", "color": "yellow" } \ + { "text": "current bossfight telemetry (except the latest page)", "color": "yellow" } \ ]'} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/reset_triggers.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/reset_triggers.mcfunction index d32e6003d..c08f1166c 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/reset_triggers.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/reset_triggers.mcfunction @@ -5,6 +5,7 @@ scoreboard players enable @s omegaflowey.player.telemetry.trigger.pop.booth scoreboard players enable @s omegaflowey.player.telemetry.trigger.pop.bossfight scoreboard players enable @s omegaflowey.player.telemetry.trigger.show.booth scoreboard players enable @s omegaflowey.player.telemetry.trigger.show.bossfight +scoreboard players enable @s omegaflowey.player.telemetry.trigger.stats scoreboard players set @s omegaflowey.player.telemetry.trigger.disable 0 scoreboard players set @s omegaflowey.player.telemetry.trigger.enable 0 @@ -13,3 +14,4 @@ scoreboard players set @s omegaflowey.player.telemetry.trigger.pop.booth 0 scoreboard players set @s omegaflowey.player.telemetry.trigger.pop.bossfight 0 scoreboard players set @s omegaflowey.player.telemetry.trigger.show.booth 0 scoreboard players set @s omegaflowey.player.telemetry.trigger.show.bossfight 0 +scoreboard players set @s omegaflowey.player.telemetry.trigger.stats 0 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth.mcfunction index 757577b6c..417bb1fdf 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth.mcfunction @@ -12,10 +12,14 @@ tellraw @s [ { "text": "\nversion", "color": "yellow", "underlined": true } ] tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.version" } ] tellraw @s [ { "text": "\nplayer_id_map", "color": "yellow", "underlined": true } ] -tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.player_id_map" } ] +function omegaflowey.main:telemetry/admin/show/player_id_map tellraw @s [ { "text": "\nbooth_basetick", "color": "yellow", "underlined": true } ] tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.booth_basetick" } ] -tellraw @s [ { "text": "\nbooth", "color": "yellow", "underlined": true } ] -tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.booth" } ] +# math.0 = total page count +execute store result score @s omegaflowey.math.0 run data get storage omegaflowey:telemetry data.booth + +# math.1 = current page index +scoreboard players set @s omegaflowey.math.1 0 +function omegaflowey.main:telemetry/admin/show/booth/iterate diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/get_page.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/get_page.mcfunction new file mode 100644 index 000000000..c12c74751 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/get_page.mcfunction @@ -0,0 +1 @@ +$tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.booth[$(page_index)]" } ] diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/iterate.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/iterate.mcfunction new file mode 100644 index 000000000..8f9a196a7 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/booth/iterate.mcfunction @@ -0,0 +1,16 @@ +execute if score @s omegaflowey.math.1 >= @s omegaflowey.math.0 run return 0 + +tellraw @s [ \ + "", \ + { "text": "\npage:", "color": "yellow", "underlined": true }, \ + " ", \ + { "score": { "name": "@s", "objective": "omegaflowey.math.1" }, "color": "aqua" } \ +] + +execute store result storage omegaflowey:telemetry temp.page_index int 1 run \ + scoreboard players get @s omegaflowey.math.1 +function omegaflowey.main:telemetry/admin/show/booth/get_page with storage omegaflowey:telemetry temp + +scoreboard players add @s omegaflowey.math.1 1 + +function omegaflowey.main:telemetry/admin/show/booth/iterate diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight.mcfunction index 648e2288c..936fb47bc 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight.mcfunction @@ -11,5 +11,12 @@ tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.server_id" } ] tellraw @s [ { "text": "\nversion", "color": "yellow", "underlined": true } ] tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.version" } ] -tellraw @s [ { "text": "\nbossfight", "color": "yellow", "underlined": true } ] -tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.bossfight" } ] +tellraw @s [ { "text": "\nplayer_id_map", "color": "yellow", "underlined": true } ] +function omegaflowey.main:telemetry/admin/show/player_id_map + +# math.0 = total page count +execute store result score @s omegaflowey.math.0 run data get storage omegaflowey:telemetry data.bossfight + +# math.1 = current page index +scoreboard players set @s omegaflowey.math.1 0 +function omegaflowey.main:telemetry/admin/show/bossfight/iterate diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/get_page.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/get_page.mcfunction new file mode 100644 index 000000000..174bbb732 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/get_page.mcfunction @@ -0,0 +1 @@ +$tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.bossfight[$(page_index)]" } ] diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/iterate.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/iterate.mcfunction new file mode 100644 index 000000000..347040c9a --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/bossfight/iterate.mcfunction @@ -0,0 +1,16 @@ +execute if score @s omegaflowey.math.1 >= @s omegaflowey.math.0 run return 0 + +tellraw @s [ \ + "", \ + { "text": "\npage:", "color": "yellow", "underlined": true }, \ + " ", \ + { "score": { "name": "@s", "objective": "omegaflowey.math.1" }, "color": "aqua" } \ +] + +execute store result storage omegaflowey:telemetry temp.page_index int 1 run \ + scoreboard players get @s omegaflowey.math.1 +function omegaflowey.main:telemetry/admin/show/bossfight/get_page with storage omegaflowey:telemetry temp + +scoreboard players add @s omegaflowey.math.1 1 + +function omegaflowey.main:telemetry/admin/show/bossfight/iterate diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/player_id_map.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/player_id_map.mcfunction new file mode 100644 index 000000000..6392e9eff --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/show/player_id_map.mcfunction @@ -0,0 +1,13 @@ +# get total number of players in map +execute store result score @s omegaflowey.math.0 run data get storage omegaflowey:telemetry data.player_id_map + +# if over 6000, we can't display the map in chat +# (actual limit is closer to 7000, we cut off early to be safe) +execute if score @s omegaflowey.math.0 matches 6000.. run return run tellraw @s [ \ + { "text": "Too many entries to display ", "color": "red" }, \ + { "text": "(", "color": "gold" }, \ + { "score": {"name": "@s", "objective": "omegaflowey.math.0"}, "color": "aqua" }, \ + { "text": ")", "color": "gold" } \ +] + +tellraw @s [ { "storage": "omegaflowey:telemetry", "nbt": "data.player_id_map" } ] diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/stats.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/stats.mcfunction new file mode 100644 index 000000000..de19ba1e1 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/stats.mcfunction @@ -0,0 +1,58 @@ +execute store result score @s omegaflowey.math.0 run data get storage omegaflowey:telemetry data.booth +execute store result score @s omegaflowey.math.1 run data get storage omegaflowey:telemetry data.bossfight + +function omegaflowey.utils:log/self { text_component: '[ \ + { "text": "", "color": "aqua" }, \ + { "text": "Booth statistics:", "color": "light_purple", "bold": true }, \ + "\\n", \ +\ + { "text": "entered booth: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_visitors", "objective": "omegaflowey.global.flag" } }, \ + { "text": " (distinct players: ", "color": "gold" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_visitors", "objective": "omegaflowey.global.flag" } }, \ + { "text": ")", "color": "gold" }, \ + "\\n", \ +\ + { "text": "times joined queue: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_queue_joins", "objective": "omegaflowey.global.flag" } }, \ + { "text": " (distinct players: ", "color": "gold" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_queue_joins", "objective": "omegaflowey.global.flag" } }, \ + { "text": ")", "color": "gold" }, \ + "\\n", \ +\ + { "text": "fights: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_fights", "objective": "omegaflowey.global.flag" } }, \ + { "text": " (distinct players: ", "color": "gold" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_fights", "objective": "omegaflowey.global.flag" } }, \ + { "text": ")", "color": "gold" }, \ + "\\n", \ +\ + { "text": "wins: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_wins", "objective": "omegaflowey.global.flag" } }, \ + { "text": " (distinct players: ", "color": "gold" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_wins", "objective": "omegaflowey.global.flag" } }, \ + { "text": ")", "color": "gold" }, \ + "\\n", \ +\ + { "text": "deaths: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_deaths", "objective": "omegaflowey.global.flag" } }, \ + { "text": " (distinct players: ", "color": "gold" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_deaths", "objective": "omegaflowey.global.flag" } }, \ + { "text": ")", "color": "gold" }, \ + "\\n", \ +\ + { "text": "parkour finishes: ", "color": "yellow" }, \ + { "score": { "name": "#omegaflowey.telemetry.stats.total_distinct_parkour_finishes", "objective": "omegaflowey.global.flag" } }, \ + "\\n", \ +\ + "\\n", \ +\ + { "text": "booth telemetry pages: ", "color": "green" }, \ + { "score": { "name": "@s", "objective": "omegaflowey.math.0" } }, \ + "\\n", \ +\ + { "text": "bossfight telemetry pages: ", "color": "green" }, \ + { "score": { "name": "@s", "objective": "omegaflowey.math.1" } }, \ +\ + "" \ +]'} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/tick.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/tick.mcfunction index cba916f3d..0ebccd944 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/tick.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/admin/tick.mcfunction @@ -12,5 +12,7 @@ execute if score @s omegaflowey.player.telemetry.trigger.show.booth matches 1 ru function omegaflowey.main:telemetry/admin/show/booth execute if score @s omegaflowey.player.telemetry.trigger.show.bossfight matches 1 run \ function omegaflowey.main:telemetry/admin/show/bossfight +execute if score @s omegaflowey.player.telemetry.trigger.stats matches 1 run \ + function omegaflowey.main:telemetry/admin/stats function omegaflowey.main:telemetry/admin/reset_triggers diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag.mcfunction index bdb665e16..67eb8d149 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag.mcfunction @@ -1,5 +1,11 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matches 1 run return 0 +$execute unless entity @s[type=player] run return run function omegaflowey.utils:error { error: '[ \ + { "text": "Booth tags must be added as a player entity (name: " }, \ + { "text": "$(name)", "color": "aqua" }, \ + { "text": ")" } \ +]'} + # Ensure numeric player ID is set execute unless score @s omegaflowey.player.telemetry.id matches 0.. run function omegaflowey.main:telemetry/booth/enter @@ -22,3 +28,7 @@ execute store result storage omegaflowey:telemetry temp.booth_next.t int 1 run s execute store result storage omegaflowey:telemetry temp.booth_next.u int 1 run scoreboard players get @s omegaflowey.player.telemetry.id function omegaflowey.main:telemetry/booth/add_tag/to_string with storage omegaflowey:telemetry temp.booth_next +function omegaflowey.main:telemetry/booth/add_tag/check_page_length + +# add data to latest page +data modify storage omegaflowey:telemetry data.booth[-1] append from storage omegaflowey:telemetry temp.booth_next_str diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/check_page_length.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/check_page_length.mcfunction new file mode 100644 index 000000000..9094f489a --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/check_page_length.mcfunction @@ -0,0 +1,14 @@ +# add current data string length to total page length +execute store result score @s omegaflowey.math.0 run data get storage omegaflowey:telemetry temp.booth_next_str +scoreboard players operation \ + #omegaflowey.telemetry.booth.page.length omegaflowey.global.flag += @s omegaflowey.math.0 + +# add 3 characters for the surrounding quotes + comma separator +scoreboard players add #omegaflowey.telemetry.booth.page.length omegaflowey.global.flag 3 + +# start new page when current page is long enough +execute \ + if score \ + #omegaflowey.telemetry.booth.page.length omegaflowey.global.flag >= \ + #omegaflowey.telemetry.page.max_length omegaflowey.global.flag \ +run function omegaflowey.main:telemetry/booth/add_tag/new_page diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/new_page.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/new_page.mcfunction new file mode 100644 index 000000000..45df5a9fa --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/new_page.mcfunction @@ -0,0 +1,3 @@ +data modify storage omegaflowey:telemetry data.booth append value [] +# initial length is 2 brackets - 1 extra comma that is assumed by the first `add_tag` call on a page +scoreboard players set #omegaflowey.telemetry.booth.page.length omegaflowey.global.flag 1 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/to_string.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/to_string.mcfunction index 64d59bc1d..c71868ef7 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/to_string.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/add_tag/to_string.mcfunction @@ -1,3 +1,2 @@ -$data modify storage omegaflowey:telemetry data.booth append value "$(n);$(t);$(u);" - # see `schema/setup` function for what these letters mean +$data modify storage omegaflowey:telemetry temp.booth_next_str set value '$(n);$(t);$(u)' diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/get.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/get.mcfunction index e278dd552..fdf0fd735 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/get.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/get.mcfunction @@ -1,2 +1,2 @@ -data modify storage omegaflowey:telemetry temp set value {} +data remove storage omegaflowey:telemetry temp.n $data modify storage omegaflowey:telemetry temp.n set from storage omegaflowey:telemetry schema_booth_n."$(n)" diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/setup.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/setup.mcfunction index 5f60316d7..37c58e0b8 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/setup.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/booth/schema/setup.mcfunction @@ -35,4 +35,6 @@ data modify storage omegaflowey:telemetry schema_booth_n set value { \ 'player.shown_feedback_link.won_fight': 29, \ 'room.underground.back_cave.enter': 30, \ 'room.underground.back_cave.waterfall_secret.enter': 31, \ + 'room.underground.back_cave.exit': 32, \ + 'room.underground.back_cave.waterfall_secret.exit': 33, \ } diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/error/damage_source.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/error/damage_source.mcfunction new file mode 100644 index 000000000..328978cf6 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/error/damage_source.mcfunction @@ -0,0 +1,6 @@ +$function omegaflowey.utils:error { error: '[ \ + { "text": "Damage source not found in ", "color": "yellow" }, \ + { "text": "bossfight ", "color": "red" }, \ + { "text": "schema: ", "color": "yellow" }, \ + { "text": "$(source)", "color": "aqua" } \ +]'} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/damage_source.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/damage_source.mcfunction new file mode 100644 index 000000000..7f8f8d27d --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/damage_source.mcfunction @@ -0,0 +1,3 @@ +data remove storage omegaflowey:telemetry temp.damage_source +$data modify storage omegaflowey:telemetry temp.damage_source set from \ + storage omegaflowey:telemetry schema_bossfight_damage_source."$(source)" diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/name.mcfunction similarity index 67% rename from datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get.mcfunction rename to datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/name.mcfunction index 143c4d673..51ab0cb49 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/get/name.mcfunction @@ -1,2 +1,2 @@ -data modify storage omegaflowey:telemetry temp set value {} +data remove storage omegaflowey:telemetry temp.name $data modify storage omegaflowey:telemetry temp.name set from storage omegaflowey:telemetry schema_bossfight_name."$(name)" diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/setup.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/setup.mcfunction index 62c88feac..5d2ce0b42 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/setup.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/schema/setup.mcfunction @@ -61,3 +61,14 @@ data modify storage omegaflowey:telemetry schema_bossfight_name set value { \ ## player.heal data # a: amount + +data modify storage omegaflowey:telemetry schema_bossfight_damage_source set value { \ + "x_bullets_lower.bullet": 0, \ + "x_bullets_upper.bullet": 1, \ + "homing_vines.bullet": 2, \ + "friendliness_pellets.bullet": 3, \ + "bomb.bullet": 4, \ + "dentata_snakes.bullet": 5, \ + "finger_guns.bullet": 6, \ + "soul.5.bullet": 7, \ +} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/end.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/end.mcfunction index aff564129..9fc7a4a61 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/end.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/end.mcfunction @@ -2,5 +2,5 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matc execute if score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag matches -1 run return 0 -$data modify storage omegaflowey:telemetry.temp bossfight_next set value { name: "$(name).end" } +$data modify storage omegaflowey:telemetry temp.bossfight_next set value { name: "$(name).end" } function omegaflowey.main:telemetry/bossfight/tag/shared diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/instant.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/instant.mcfunction index 40106a370..27a116d63 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/instant.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/instant.mcfunction @@ -2,5 +2,5 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matc execute if score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag matches -1 run return 0 -$data modify storage omegaflowey:telemetry.temp bossfight_next set value { name: "$(name)" } +$data modify storage omegaflowey:telemetry temp.bossfight_next set value { name: "$(name)" } function omegaflowey.main:telemetry/bossfight/tag/shared diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/end.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/end.mcfunction index 16648796d..aa87055e9 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/end.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/end.mcfunction @@ -2,7 +2,7 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matc execute if score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag matches -1 run return 0 -data modify storage omegaflowey:telemetry.temp bossfight_next set value { name: "root.end" } +data modify storage omegaflowey:telemetry temp.bossfight_next set value { name: "root.end" } function omegaflowey.main:telemetry/bossfight/tag/shared scoreboard players set #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag -1 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start.mcfunction index 049535196..303ad41b9 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start.mcfunction @@ -1,19 +1,26 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matches 1 run return 0 +# if the current page is too long, start a new one +# (only bossfight root.start tags can start a new page, since a set of bossfight tags +# needs to be kept on the same page) +function omegaflowey.main:telemetry/bossfight/tag/root/start/check_if_new_page + # this isn't checked in the schema, but `name:0` represents `root.start` -data modify storage omegaflowey:telemetry.temp bossfight_root_next set value { name: 0 } +data modify storage omegaflowey:telemetry temp.bossfight_root_next set value { name: 0 } execute store result score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag run time query gametime -execute store result storage omegaflowey:telemetry.temp bossfight_root_next.tick int 1 run \ +execute store result storage omegaflowey:telemetry temp.bossfight_root_next.tick int 1 run \ scoreboard players get #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag execute summon marker run function omegaflowey.main:telemetry/bossfight/tag/root/start/generate_uuid -data modify storage omegaflowey:telemetry.temp bossfight_root_next.player_id set from storage omegaflowey:bossfight active_player_uuid - function omegaflowey.main:telemetry/bossfight/tag/root/start/macro with storage omegaflowey:bossfight -function omegaflowey.main:telemetry/data/active_player/gamemode with storage omegaflowey:bossfight -data modify storage omegaflowey:telemetry.temp bossfight_root_next.player_gamemode set from storage omegaflowey:telemetry.temp data.player_gamemode -data modify storage omegaflowey:telemetry data.bossfight append value [] -function omegaflowey.main:telemetry/bossfight/tag/root/to_string with storage omegaflowey:telemetry.temp bossfight_root_next +function omegaflowey.main:telemetry/bossfight/tag/root/start/to_string with storage omegaflowey:telemetry temp.bossfight_root_next +function omegaflowey.main:telemetry/bossfight/tag/update_page_length + +# start new bossfight section on latest page +data modify storage omegaflowey:telemetry data.bossfight[-1] append value [] + +# add data to latest page +data modify storage omegaflowey:telemetry data.bossfight[-1][-1] append from storage omegaflowey:telemetry temp.bossfight_next_str diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/as_active_player.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/as_active_player.mcfunction index 98e1246c9..2cb3b779a 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/as_active_player.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/as_active_player.mcfunction @@ -1 +1,6 @@ -data modify storage omegaflowey:telemetry.temp bossfight_root_next.player_health set from entity @s Health +function omegaflowey.main:telemetry/bossfight/tag/root/start/get_player_id + +data modify storage omegaflowey:telemetry temp.bossfight_root_next.player_health set from entity @s Health + +function omegaflowey.main:telemetry/data/active_player/gamemode/as_active_player +data modify storage omegaflowey:telemetry temp.bossfight_root_next.player_gamemode set from storage omegaflowey:telemetry temp.data.g diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/check_if_new_page.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/check_if_new_page.mcfunction new file mode 100644 index 000000000..757378f40 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/check_if_new_page.mcfunction @@ -0,0 +1,6 @@ +# start new page when current page is long enough +execute \ + if score \ + #omegaflowey.telemetry.bossfight.page.length omegaflowey.global.flag >= \ + #omegaflowey.telemetry.page.max_length omegaflowey.global.flag \ +run function omegaflowey.main:telemetry/bossfight/tag/root/start/new_page diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/generate_uuid.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/generate_uuid.mcfunction index 734015be2..dcaef60fc 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/generate_uuid.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/generate_uuid.mcfunction @@ -1,3 +1,3 @@ function gu:generate -data modify storage omegaflowey:telemetry.temp bossfight_root_next.id set from storage gu:main out +data modify storage omegaflowey:telemetry temp.bossfight_root_next.id set from storage gu:main out kill @s diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/get_player_id.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/get_player_id.mcfunction new file mode 100644 index 000000000..b39bc512a --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/get_player_id.mcfunction @@ -0,0 +1,4 @@ +# Ensure numeric player ID is set and stored in player ID map +execute unless score @s omegaflowey.player.telemetry.id matches 0.. run function omegaflowey.main:telemetry/booth/enter +execute store result storage omegaflowey:telemetry temp.bossfight_root_next.player_id int 1 run \ + scoreboard players get @s omegaflowey.player.telemetry.id diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/new_page.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/new_page.mcfunction new file mode 100644 index 000000000..3cf34359b --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/new_page.mcfunction @@ -0,0 +1,3 @@ +data modify storage omegaflowey:telemetry data.bossfight append value [] +# initial length is 2 brackets - 1 extra comma that is assumed by the first `add_tag` call on a page +scoreboard players set #omegaflowey.telemetry.bossfight.page.length omegaflowey.global.flag 1 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/to_string.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/to_string.mcfunction new file mode 100644 index 000000000..488cdfe29 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/start/to_string.mcfunction @@ -0,0 +1,7 @@ +$data modify storage omegaflowey:telemetry temp.bossfight_next_str set value '\ + $(name);\ + $(tick);\ + $(player_id);\ + $(player_gamemode);\ + $(player_health)\ +' diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/to_string.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/to_string.mcfunction deleted file mode 100644 index f108d83cf..000000000 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/root/to_string.mcfunction +++ /dev/null @@ -1,7 +0,0 @@ -$data modify storage omegaflowey:telemetry data.bossfight[-1] append value "\ - $(name);\ - $(tick);\ - $(player_id);\ - $(player_gamemode);\ - $(player_health);\ -" diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared.mcfunction index 4a6c48aeb..cc7ffd9d6 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared.mcfunction @@ -1,19 +1,25 @@ +function omegaflowey.main:telemetry/bossfight/schema/get/name with storage omegaflowey:telemetry temp.bossfight_next +execute unless data storage omegaflowey:telemetry temp.name run return run \ + function omegaflowey.main:telemetry/bossfight/tag/shared/error with storage omegaflowey:telemetry temp.bossfight_next + # relative gametime -execute store result score @s omegaflowey.math.0 run time query gametime -scoreboard players operation @s omegaflowey.math.0 -= #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag -execute store result storage omegaflowey:telemetry.temp bossfight_next.tick int 1 run scoreboard players get @s omegaflowey.math.0 +execute store result score #omegaflowey.telemetry.math.entry_length omegaflowey.math.0 run time query gametime +scoreboard players operation #omegaflowey.telemetry.math.entry_length omegaflowey.math.0 -= \ + #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag +execute store result storage omegaflowey:telemetry temp.bossfight_next.tick int 1 run \ + scoreboard players get #omegaflowey.telemetry.math.entry_length omegaflowey.math.0 -function omegaflowey.main:telemetry/bossfight/schema/get with storage omegaflowey:telemetry.temp bossfight_next -execute unless data storage omegaflowey:telemetry temp.name run return run \ - function omegaflowey.main:telemetry/bossfight/tag/shared/error with storage omegaflowey:telemetry.temp bossfight_next +data modify storage omegaflowey:telemetry temp.bossfight_next.name set from storage omegaflowey:telemetry temp.name -data modify storage omegaflowey:telemetry.temp bossfight_next.name set from storage omegaflowey:telemetry temp.name +data modify storage omegaflowey:telemetry temp.bossfight_next.data set value "" +execute if data storage omegaflowey:telemetry temp.data run \ + data modify storage omegaflowey:telemetry temp.bossfight_next.data set from storage omegaflowey:telemetry temp.data -data modify storage omegaflowey:telemetry.temp bossfight_next.data set value "" -execute if data storage omegaflowey:telemetry.temp data run \ - data modify storage omegaflowey:telemetry.temp bossfight_next.data set from storage omegaflowey:telemetry.temp data +function omegaflowey.main:telemetry/bossfight/tag/shared/to_string with storage omegaflowey:telemetry temp.bossfight_next +function omegaflowey.main:telemetry/bossfight/tag/update_page_length -function omegaflowey.main:telemetry/bossfight/tag/to_string with storage omegaflowey:telemetry.temp bossfight_next +# add data to latest bossfight on latest page +data modify storage omegaflowey:telemetry data.bossfight[-1][-1] append from storage omegaflowey:telemetry temp.bossfight_next_str # reset extra data -data remove storage omegaflowey:telemetry.temp data +data remove storage omegaflowey:telemetry temp.data diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared/to_string.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared/to_string.mcfunction new file mode 100644 index 000000000..48e075089 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/shared/to_string.mcfunction @@ -0,0 +1,6 @@ +# see `schema/setup` function for what these letters mean +$data modify storage omegaflowey:telemetry temp.bossfight_next_str set value '\ + $(name);\ + $(tick);\ + $(data)\ +' diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/start.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/start.mcfunction index f39059790..ed7d673df 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/start.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/start.mcfunction @@ -2,5 +2,5 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matc execute if score #omegaflowey.telemetry.bossfight.basetime omegaflowey.global.flag matches -1 run return 0 -$data modify storage omegaflowey:telemetry.temp bossfight_next set value { name: "$(name).start" } +$data modify storage omegaflowey:telemetry temp.bossfight_next set value { name: "$(name).start" } function omegaflowey.main:telemetry/bossfight/tag/shared diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/to_string.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/to_string.mcfunction deleted file mode 100644 index c0c87bcb8..000000000 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/to_string.mcfunction +++ /dev/null @@ -1,5 +0,0 @@ -$data modify storage omegaflowey:telemetry data.bossfight[-1] append value "\ - $(name);\ - $(tick);\ - $(data);\ -" diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/update_page_length.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/update_page_length.mcfunction new file mode 100644 index 000000000..5bb85f7c0 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/bossfight/tag/update_page_length.mcfunction @@ -0,0 +1,7 @@ +# add current data string length to total page length +execute store result score #omegaflowey.telemetry.math.entry_length omegaflowey.math.0 run data get storage omegaflowey:telemetry temp.bossfight_next_str +scoreboard players operation \ + #omegaflowey.telemetry.bossfight.page.length omegaflowey.global.flag += #omegaflowey.telemetry.math.entry_length omegaflowey.math.0 + +# add 3 characters for the surrounding quotes + comma separator +scoreboard players add #omegaflowey.telemetry.bossfight.page.length omegaflowey.global.flag 3 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/bossfight_hit_count.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/bossfight_hit_count.mcfunction index e2fe78f4d..34bf6fc3d 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/bossfight_hit_count.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/bossfight_hit_count.mcfunction @@ -1,4 +1,4 @@ function omegaflowey.main:telemetry/data/shared -execute store result storage omegaflowey:telemetry.temp data.h int 1 run \ +execute store result storage omegaflowey:telemetry temp.data.h int 1 run \ scoreboard players get #omegaflowey.bossfight.player_hit_count omegaflowey.global.flag diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode.mcfunction index 5e7847acf..369d4ec50 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode.mcfunction @@ -1,10 +1,3 @@ function omegaflowey.main:telemetry/data/shared -$execute as $(active_player_uuid) if entity @s[gamemode=survival] run \ - data modify storage omegaflowey:telemetry.temp data.g set value 0 -$execute as $(active_player_uuid) if entity @s[gamemode=creative] run \ - data modify storage omegaflowey:telemetry.temp data.g set value 1 -$execute as $(active_player_uuid) if entity @s[gamemode=adventure] run \ - data modify storage omegaflowey:telemetry.temp data.g set value 2 -$execute as $(active_player_uuid) if entity @s[gamemode=spectator] run \ - data modify storage omegaflowey:telemetry.temp data.g set value 3 +$execute as $(active_player_uuid) run function omegaflowey.main:telemetry/data/active_player/gamemode/as_active_player diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode/as_active_player.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode/as_active_player.mcfunction new file mode 100644 index 000000000..dc9a7ca9a --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/active_player/gamemode/as_active_player.mcfunction @@ -0,0 +1,8 @@ +execute if entity @s[gamemode=survival] run return run \ + data modify storage omegaflowey:telemetry temp.data.g set value 0 +execute if entity @s[gamemode=creative] run return run \ + data modify storage omegaflowey:telemetry temp.data.g set value 1 +execute if entity @s[gamemode=adventure] run return run \ + data modify storage omegaflowey:telemetry temp.data.g set value 2 +execute if entity @s[gamemode=spectator] run return run \ + data modify storage omegaflowey:telemetry temp.data.g set value 3 diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/minify_damage_source.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/minify_damage_source.mcfunction new file mode 100644 index 000000000..baafa693e --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/minify_damage_source.mcfunction @@ -0,0 +1,5 @@ +$function omegaflowey.main:telemetry/bossfight/schema/get/damage_source { source: "$(source)" } +$execute unless data storage omegaflowey:telemetry temp.damage_source run return run \ + function omegaflowey.main:telemetry/bossfight/schema/error/damage_source { source: "$(source)" } + +data modify storage omegaflowey:telemetry temp.data.s set from storage omegaflowey:telemetry temp.damage_source diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/shared.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/shared.mcfunction index a54b0c132..fa0796ba7 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/shared.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/data/shared.mcfunction @@ -1,2 +1,2 @@ -execute unless data storage omegaflowey:telemetry.temp data run \ - data modify storage omegaflowey:telemetry.temp data set value {} +execute unless data storage omegaflowey:telemetry temp.data run \ + data modify storage omegaflowey:telemetry temp.data set value {} diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup.mcfunction index 4e83f73b2..9243ea895 100644 --- a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup.mcfunction +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup.mcfunction @@ -8,7 +8,7 @@ execute unless data storage omegaflowey:telemetry data.booth run \ data modify storage omegaflowey:telemetry data.booth set value [] execute unless data storage omegaflowey:telemetry data.bossfight run \ data modify storage omegaflowey:telemetry data.bossfight set value [] -data modify storage omegaflowey:telemetry data.version set value "0.1.0" +data modify storage omegaflowey:telemetry data.version set value "0.2.0" execute unless data storage omegaflowey:telemetry temp run \ data modify storage omegaflowey:telemetry temp set value {} @@ -19,5 +19,6 @@ execute unless score #omegaflowey.telemetry.enabled omegaflowey.global.flag matc scoreboard players set #omegaflowey.telemetry.enabled omegaflowey.global.flag 1 function omegaflowey.main:telemetry/setup/initialize_booth_data +function omegaflowey.main:telemetry/setup/pages function omegaflowey.main:telemetry/booth/schema/setup function omegaflowey.main:telemetry/bossfight/schema/setup diff --git a/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup/pages.mcfunction b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup/pages.mcfunction new file mode 100644 index 000000000..1dbdd8001 --- /dev/null +++ b/datapacks/omegaflowey/data/omegaflowey.main/function/telemetry/setup/pages.mcfunction @@ -0,0 +1,7 @@ +## telemetry pagination logic +# a page can be max 100 characters once stringified +scoreboard players set #omegaflowey.telemetry.page.max_length omegaflowey.global.flag 250000 + +# initialize first page if data is empty +execute unless data storage omegaflowey:telemetry data.booth[0] run function omegaflowey.main:telemetry/booth/add_tag/new_page +execute unless data storage omegaflowey:telemetry data.bossfight[0] run function omegaflowey.main:telemetry/bossfight/tag/root/start/new_page