diff --git a/GLOBAL/data/global/functions/__load__.mcfunction b/GLOBAL/data/global/functions/__load__.mcfunction index b462127..79c4611 100644 --- a/GLOBAL/data/global/functions/__load__.mcfunction +++ b/GLOBAL/data/global/functions/__load__.mcfunction @@ -14,7 +14,9 @@ gamerule fallDamage false # Common ---------------------------------------------------------------------- scoreboard objectives add data dummy -scoreboard objectives add tmp dummy +scoreboard objectives add input dummy +scoreboard objectives add output dummy +scoreboard objectives add ctx dummy function lib:constants # Continuous informations ----------------------------------------------------- diff --git a/GLOBAL/data/lib/functions/random_normal/interface.mcfunction b/GLOBAL/data/lib/functions/random_normal/interface.mcfunction index d0fde37..7934831 100644 --- a/GLOBAL/data/lib/functions/random_normal/interface.mcfunction +++ b/GLOBAL/data/lib/functions/random_normal/interface.mcfunction @@ -1,31 +1,29 @@ -scoreboard players operation #x tmp = #mean tmp -scoreboard players operation #delta tmp = #std tmp -scoreboard players operation #delta tmp *= 2 const -scoreboard players set #loop tmp 0 +scoreboard players operation #delta ctx = #std input +scoreboard players operation #delta ctx *= 2 const -scoreboard players set #x tmp 0 +scoreboard players set #x output 0 -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp -execute store result score #guess tmp run random value -500..500 -scoreboard players operation #x tmp += #guess tmp +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx +execute store result score #guess ctx run random value -500..500 +scoreboard players operation #x output += #guess ctx -scoreboard players operation #x tmp *= #std tmp -scoreboard players operation #x tmp /= 1000 const -scoreboard players operation #x tmp += #mean tmp +scoreboard players operation #x output *= #std input +scoreboard players operation #x output /= 1000 const +scoreboard players operation #x output += #mean input diff --git a/GLOBAL/data/lib/functions/utils/countdown.mcfunction b/GLOBAL/data/lib/functions/utils/countdown.mcfunction index 9ca1434..4558166 100644 --- a/GLOBAL/data/lib/functions/utils/countdown.mcfunction +++ b/GLOBAL/data/lib/functions/utils/countdown.mcfunction @@ -5,12 +5,12 @@ scoreboard objectives add countdown dummy execute as @a[scores={countdown=1..}] run title @s times 0 20 20 execute as @a[scores={countdown=1..}] run title @s title {"text":" "} execute as @a[scores={countdown=1}] run title @s subtitle {"text":" "} -execute as @a[scores={countdown=1..}] run scoreboard players operation @s tmp = @s countdown -execute as @a[scores={countdown=1..}] run scoreboard players operation @s tmp /= 20 const -execute as @a[scores={countdown=1..}] run scoreboard players add @s tmp 1 -execute as @a[scores={countdown=2..}] run title @s subtitle {"score":{"name":"@s","objective":"tmp"},"color":"yellow"} -execute as @a[scores={countdown=1..}] run scoreboard players operation @s tmp = @s countdown -execute as @a[scores={countdown=1..}] run scoreboard players operation @s tmp %= 20 const -execute as @a[scores={tmp=0,countdown=1..100}] run playsound minecraft:block.stone_button.click_off master @s ~ ~ ~ 2 1 1 +execute as @a[scores={countdown=1..}] run scoreboard players operation @s ctx = @s countdown +execute as @a[scores={countdown=1..}] run scoreboard players operation @s ctx /= 20 const +execute as @a[scores={countdown=1..}] run scoreboard players add @s ctx 1 +execute as @a[scores={countdown=2..}] run title @s subtitle {"score":{"name":"@s","objective":"ctx"},"color":"yellow"} +execute as @a[scores={countdown=1..}] run scoreboard players operation @s ctx = @s countdown +execute as @a[scores={countdown=1..}] run scoreboard players operation @s ctx %= 20 const +execute as @a[scores={ctx=0,countdown=1..100}] run playsound minecraft:block.stone_button.click_off master @s ~ ~ ~ 2 1 1 scoreboard players remove @a[scores={countdown=1..}] countdown 1 scoreboard players add @a[scores={countdown=..-1}] countdown 1 diff --git a/GLOBAL/data/lobby/functions/compass/main.mcfunction b/GLOBAL/data/lobby/functions/compass/main.mcfunction index de9a4a6..76034c3 100644 --- a/GLOBAL/data/lobby/functions/compass/main.mcfunction +++ b/GLOBAL/data/lobby/functions/compass/main.mcfunction @@ -1,21 +1,21 @@ # Count number of compass -execute as @a[team=lobby] store result score @s tmp run clear @s compass 0 +execute as @a[team=lobby] store result score @s ctx run clear @s compass 0 # If player dropped his compass -> cycle forward -scoreboard players add @a[team=lobby,scores={lobby.compass.drop_trigger=1..,tmp=0}] lobby.compass.select 1 -execute as @a[team=lobby,scores={lobby.compass.drop_trigger=1..,tmp=0}] at @s run playsound minecraft:block.stone_button.click_on master @s ~ ~ ~ 1 2 0 +scoreboard players add @a[team=lobby,scores={lobby.compass.drop_trigger=1..,ctx=0}] lobby.compass.select 1 +execute as @a[team=lobby,scores={lobby.compass.drop_trigger=1..,ctx=0}] at @s run playsound minecraft:block.stone_button.click_on master @s ~ ~ ~ 1 2 0 scoreboard players reset * lobby.compass.drop_trigger # If the player swapped it from hands -> cycle backward -scoreboard players remove @a[team=lobby,scores={tmp=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] lobby.compass.select 1 -execute as @a[team=lobby,scores={tmp=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] at @s run playsound minecraft:block.stone_button.click_off master @s ~ ~ ~ 1 2 0 -clear @a[team=lobby,scores={tmp=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] compass +scoreboard players remove @a[team=lobby,scores={ctx=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] lobby.compass.select 1 +execute as @a[team=lobby,scores={ctx=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] at @s run playsound minecraft:block.stone_button.click_off master @s ~ ~ ~ 1 2 0 +clear @a[team=lobby,scores={ctx=1},nbt={Inventory:[{Slot:-106b,id:"minecraft:compass"}]}] compass # Remove compass if duplicated -execute as @a[team=lobby,scores={tmp=2..}] run clear @s compass +execute as @a[team=lobby,scores={ctx=2..}] run clear @s compass # Recompute number of compass -execute as @a[team=lobby] store result score @s tmp run clear @s compass 0 +execute as @a[team=lobby] store result score @s ctx run clear @s compass 0 # Cycle limits scoreboard players set @a[team=lobby,scores={lobby.compass.select=6..}] lobby.compass.select 0 @@ -24,19 +24,19 @@ scoreboard players set @a[team=lobby,scores={lobby.compass.select=..-1}] lobby.c # Give compass ---------------------------------------------------------------- # Jump -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=0}] hotbar.8 with compass{display:{Name:'{"text":"JUMP","color":"dark_purple","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-311,Y:97,Z:19},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=0}] hotbar.8 with compass{display:{Name:'{"text":"JUMP","color":"dark_purple","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-311,Y:97,Z:19},HideFlags:255} # Magma run -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=1}] hotbar.8 with compass{display:{Name:'{"text":"MAGMA RUN","color":"gold","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-216,Y:100,Z:17},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=1}] hotbar.8 with compass{display:{Name:'{"text":"MAGMA RUN","color":"gold","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-216,Y:100,Z:17},HideFlags:255} # One in the chamber -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=2}] hotbar.8 with compass{display:{Name:'{"text":"ONE IN THE CHAMBER","color":"red","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-184,Y:97,Z:-97},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=2}] hotbar.8 with compass{display:{Name:'{"text":"ONE IN THE CHAMBER","color":"red","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-184,Y:97,Z:-97},HideFlags:255} # Prophunt -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=3}] hotbar.8 with compass{display:{Name:'{"text":"PROPHUNT","color":"blue","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:112,Y:82,Z:66},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=3}] hotbar.8 with compass{display:{Name:'{"text":"PROPHUNT","color":"blue","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:112,Y:82,Z:66},HideFlags:255} # Dropper -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=4}] hotbar.8 with compass{display:{Name:'{"text":"DROPPER","color":"green","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:123,Y:99,Z:9},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=4}] hotbar.8 with compass{display:{Name:'{"text":"DROPPER","color":"green","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:123,Y:99,Z:9},HideFlags:255} # Wallstreet -item replace entity @a[team=lobby,scores={tmp=0,lobby.compass.select=5}] hotbar.8 with compass{display:{Name:'{"text":"WALLSTREET","color":"yellow","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-115,Y:100,Z:107},HideFlags:255} +item replace entity @a[team=lobby,scores={ctx=0,lobby.compass.select=5}] hotbar.8 with compass{display:{Name:'{"text":"WALLSTREET","color":"yellow","bold":true,"italic":true}',Lore:['{"text":"This compass indicate the minigame location","color":"white","italic":false}','{"text":"Drop item to select the next minigame","color":"white","italic":false}','{"text":"Swap it from hands to select the previous one","color":"white","italic":false}']},LodestoneDimension:"minecraft:overworld",LodestoneTracked:0b,LodestonePos:{X:-115,Y:100,Z:107},HideFlags:255} diff --git a/GLOBAL/data/lobby/functions/horse/cooldown.mcfunction b/GLOBAL/data/lobby/functions/horse/cooldown.mcfunction index 229064f..298aaae 100644 --- a/GLOBAL/data/lobby/functions/horse/cooldown.mcfunction +++ b/GLOBAL/data/lobby/functions/horse/cooldown.mcfunction @@ -5,7 +5,7 @@ scoreboard players add #lobby.horse.cooldown.seconds data 1 item modify entity @s container.7 lobby:horse/cooldown -execute store result score @s tmp run clear @s ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'}} 0 -execute if score @s tmp > #lobby.horse.cooldown.seconds data run clear @s ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'}} +execute store result score @s ctx run clear @s ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'}} 0 +execute if score @s ctx > #lobby.horse.cooldown.seconds data run clear @s ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'}} scoreboard players remove @s lobby.horse.cooldown 1 \ No newline at end of file diff --git a/GLOBAL/data/lobby/functions/horse/main.mcfunction b/GLOBAL/data/lobby/functions/horse/main.mcfunction index c908d68..af8fe25 100644 --- a/GLOBAL/data/lobby/functions/horse/main.mcfunction +++ b/GLOBAL/data/lobby/functions/horse/main.mcfunction @@ -3,8 +3,8 @@ item replace entity @a[team=lobby,scores={lobby.horse.cooldown=0}] hotbar.7 with item replace entity @a[team=lobby,scores={lobby.horse.cooldown=1..}] hotbar.7 with minecraft:ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'},CustomModelData:1} -execute as @a[team=lobby] store result score @s tmp run clear @s horse_spawn_egg 0 -execute as @a[team=lobby] if score @s tmp matches 2.. run clear @s +execute as @a[team=lobby] store result score @s ctx run clear @s horse_spawn_egg 0 +execute as @a[team=lobby] if score @s ctx matches 2.. run clear @s clear @a[team=lobby,scores={lobby.horse.cooldown=0}] ghast_tear{display:{Name:'{"text":"Spawn horse (cooldown)","color":"red","bold":true,"italic":true}'},HideFlags:255} diff --git a/minigames/data/dropper/functions/jump/set_wool.mcfunction b/minigames/data/dropper/functions/jump/set_wool.mcfunction index fa30dce..fbf61d3 100644 --- a/minigames/data/dropper/functions/jump/set_wool.mcfunction +++ b/minigames/data/dropper/functions/jump/set_wool.mcfunction @@ -1,10 +1,10 @@ # Jump Complete -execute as @s store result score @s tmp run random value 0..6 -execute at @s[scores={tmp=0}] run setblock ~ 80 ~ black_wool -execute at @s[scores={tmp=1}] run setblock ~ 80 ~ white_wool -execute at @s[scores={tmp=2}] run setblock ~ 80 ~ red_wool -execute at @s[scores={tmp=3}] run setblock ~ 80 ~ lime_wool -execute at @s[scores={tmp=4}] run setblock ~ 80 ~ light_blue_wool -execute at @s[scores={tmp=5}] run setblock ~ 80 ~ magenta_wool -execute at @s[scores={tmp=6}] run setblock ~ 80 ~ yellow_wool +execute as @s store result score @s ctx run random value 0..6 +execute at @s[scores={ctx=0}] run setblock ~ 80 ~ black_wool +execute at @s[scores={ctx=1}] run setblock ~ 80 ~ white_wool +execute at @s[scores={ctx=2}] run setblock ~ 80 ~ red_wool +execute at @s[scores={ctx=3}] run setblock ~ 80 ~ lime_wool +execute at @s[scores={ctx=4}] run setblock ~ 80 ~ light_blue_wool +execute at @s[scores={ctx=5}] run setblock ~ 80 ~ magenta_wool +execute at @s[scores={ctx=6}] run setblock ~ 80 ~ yellow_wool diff --git a/minigames/data/dropper/functions/zone/refill-loop.mcfunction b/minigames/data/dropper/functions/zone/refill-loop.mcfunction index a81144a..fa1169e 100644 --- a/minigames/data/dropper/functions/zone/refill-loop.mcfunction +++ b/minigames/data/dropper/functions/zone/refill-loop.mcfunction @@ -3,13 +3,13 @@ summon marker 119 80 -9 {Tags:["dropper.zone.refill"]} # Random X pos execute as @e[tag=dropper.zone.refill] store result score @s data run data get entity @s Pos[0] 1 -execute as @e[tag=dropper.zone.refill] store result score @s tmp run random value 0..8 -execute as @e[tag=dropper.zone.refill] store result entity @s Pos[0] double 1 run scoreboard players operation @s data += @s tmp +execute as @e[tag=dropper.zone.refill] store result score @s ctx run random value 0..8 +execute as @e[tag=dropper.zone.refill] store result entity @s Pos[0] double 1 run scoreboard players operation @s data += @s ctx # Random Z pos execute as @e[tag=dropper.zone.refill] store result score @s data run data get entity @s Pos[2] 1 -execute as @e[tag=dropper.zone.refill] store result score @s tmp run random value 0..8 -execute as @e[tag=dropper.zone.refill] store result entity @s Pos[2] double 1 run scoreboard players operation @s data += @s tmp +execute as @e[tag=dropper.zone.refill] store result score @s ctx run random value 0..8 +execute as @e[tag=dropper.zone.refill] store result entity @s Pos[2] double 1 run scoreboard players operation @s data += @s ctx execute at @e[tag=dropper.zone.refill] run setblock ~ ~ ~ water destroy diff --git a/minigames/data/one_in_the_chamber/functions/respawn/respawn.mcfunction b/minigames/data/one_in_the_chamber/functions/respawn/respawn.mcfunction index daa8d2f..2e0f88a 100644 --- a/minigames/data/one_in_the_chamber/functions/respawn/respawn.mcfunction +++ b/minigames/data/one_in_the_chamber/functions/respawn/respawn.mcfunction @@ -12,22 +12,22 @@ loot give @s loot one_in_the_chamber:bow loot give @s loot one_in_the_chamber:sword loot give @s loot one_in_the_chamber:arrow -execute store result score @s tmp run random value 0..14 +execute store result score @s ctx run random value 0..14 -execute if score @s tmp matches 0 run tp @s -187 97 -110 45 0 -execute if score @s tmp matches 1 run tp @s -205 97 -113 -45 0 -execute if score @s tmp matches 2 run tp @s -205 102 -113 -45 0 -execute if score @s tmp matches 3 run tp @s -176 97 -113 -45 0 -execute if score @s tmp matches 4 run tp @s -176 100 -113 -45 0 -execute if score @s tmp matches 5 run tp @s -178 100 -75 0 0 -execute if score @s tmp matches 6 run tp @s -189 100 -75 0 0 -execute if score @s tmp matches 7 run tp @s -178 100 -58 180 0 -execute if score @s tmp matches 8 run tp @s -189 100 -58 180 0 -execute if score @s tmp matches 9 run tp @s -190 104 -67 -90 0 -execute if score @s tmp matches 10 run tp @s -177 104 -67 90 0 -execute if score @s tmp matches 11 run tp @s -196 97 -75 90 0 -execute if score @s tmp matches 12 run tp @s -211 97 -70 -135 0 -execute if score @s tmp matches 13 run tp @s -166 97 -90 0 0 -execute if score @s tmp matches 14 run tp @s -164 97 -76 180 0 +execute if score @s ctx matches 0 run tp @s -187 97 -110 45 0 +execute if score @s ctx matches 1 run tp @s -205 97 -113 -45 0 +execute if score @s ctx matches 2 run tp @s -205 102 -113 -45 0 +execute if score @s ctx matches 3 run tp @s -176 97 -113 -45 0 +execute if score @s ctx matches 4 run tp @s -176 100 -113 -45 0 +execute if score @s ctx matches 5 run tp @s -178 100 -75 0 0 +execute if score @s ctx matches 6 run tp @s -189 100 -75 0 0 +execute if score @s ctx matches 7 run tp @s -178 100 -58 180 0 +execute if score @s ctx matches 8 run tp @s -189 100 -58 180 0 +execute if score @s ctx matches 9 run tp @s -190 104 -67 -90 0 +execute if score @s ctx matches 10 run tp @s -177 104 -67 90 0 +execute if score @s ctx matches 11 run tp @s -196 97 -75 90 0 +execute if score @s ctx matches 12 run tp @s -211 97 -70 -135 0 +execute if score @s ctx matches 13 run tp @s -166 97 -90 0 0 +execute if score @s ctx matches 14 run tp @s -164 97 -76 180 0 effect give @s minecraft:instant_health 1 100 \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/__load__.mcfunction b/minigames/data/wallstreet/functions/__load__.mcfunction index 46b32e5..80bccb2 100644 --- a/minigames/data/wallstreet/functions/__load__.mcfunction +++ b/minigames/data/wallstreet/functions/__load__.mcfunction @@ -9,17 +9,17 @@ scoreboard objectives add wallstreet.leather_price dummy scoreboard objectives add wallstreet.iron_price dummy scoreboard objectives add wallstreet.diamond_price dummy -scoreboard objectives add wallstreet.wood_quantity dummy -scoreboard objectives add wallstreet.stone_quantity dummy -scoreboard objectives add wallstreet.leather_quantity dummy -scoreboard objectives add wallstreet.iron_quantity dummy -scoreboard objectives add wallstreet.diamond_quantity dummy - -scoreboard objectives add wallstreet.wood_max_quantity dummy -scoreboard objectives add wallstreet.stone_max_quantity dummy -scoreboard objectives add wallstreet.leather_max_quantity dummy -scoreboard objectives add wallstreet.iron_max_quantity dummy -scoreboard objectives add wallstreet.diamond_max_quantity dummy +scoreboard objectives add wallstreet.wood_current_stock dummy +scoreboard objectives add wallstreet.stone_current_stock dummy +scoreboard objectives add wallstreet.leather_current_stock dummy +scoreboard objectives add wallstreet.iron_current_stock dummy +scoreboard objectives add wallstreet.diamond_current_stock dummy + +scoreboard objectives add wallstreet.wood_max_stock dummy +scoreboard objectives add wallstreet.stone_max_stock dummy +scoreboard objectives add wallstreet.leather_max_stock dummy +scoreboard objectives add wallstreet.iron_max_stock dummy +scoreboard objectives add wallstreet.diamond_max_stock dummy scoreboard objectives add wallstreet.selected_quantity dummy scoreboard objectives add wallstreet.selected_resource dummy diff --git a/minigames/data/wallstreet/functions/config.mcfunction b/minigames/data/wallstreet/functions/config.mcfunction index 5956c38..523cbf0 100644 --- a/minigames/data/wallstreet/functions/config.mcfunction +++ b/minigames/data/wallstreet/functions/config.mcfunction @@ -1,4 +1,13 @@ scoreboard players set #wallstreet.game_time data 12000 scoreboard players set #wallstreet.villager.lock_time data 600 -scoreboard players set #wallstreet.villager.interaction_time data 300 \ No newline at end of file +scoreboard players set #wallstreet.villager.interaction_time data 300 + +scoreboard players set #wallstreet.model.starting_money data 5000 +scoreboard players set #wallstreet.model.buy_power data 500 + +scoreboard players set #wallstreet.model.wood.global_stock data 1500 +scoreboard players set #wallstreet.model.stone.global_stock data 1000 +scoreboard players set #wallstreet.model.leather.global_stock data 525 +scoreboard players set #wallstreet.model.iron.global_stock data 250 +scoreboard players set #wallstreet.model.diamond.global_stock data 50 \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/economy_model/get_global_data.mcfunction b/minigames/data/wallstreet/functions/economy_model/get_global_data.mcfunction new file mode 100644 index 0000000..81ba029 --- /dev/null +++ b/minigames/data/wallstreet/functions/economy_model/get_global_data.mcfunction @@ -0,0 +1,47 @@ +scoreboard players operation #wallstreet.model.total_resource_stock data = #wallstreet.model.wood.global_stock data +scoreboard players operation #wallstreet.model.total_resource_stock data += #wallstreet.model.stone.global_stock data +scoreboard players operation #wallstreet.model.total_resource_stock data += #wallstreet.model.leather.global_stock data +scoreboard players operation #wallstreet.model.total_resource_stock data += #wallstreet.model.iron.global_stock data +scoreboard players operation #wallstreet.model.total_resource_stock data += #wallstreet.model.diamond.global_stock data + +scoreboard players operation #wallstreet.model.wood.abundance_ratio(pcm) data = #wallstreet.model.wood.global_stock data +scoreboard players operation #wallstreet.model.stone.abundance_ratio(pcm) data = #wallstreet.model.stone.global_stock data +scoreboard players operation #wallstreet.model.leather.abundance_ratio(pcm) data = #wallstreet.model.leather.global_stock data +scoreboard players operation #wallstreet.model.iron.abundance_ratio(pcm) data = #wallstreet.model.iron.global_stock data +scoreboard players operation #wallstreet.model.diamond.abundance_ratio(pcm) data = #wallstreet.model.diamond.global_stock data + +scoreboard players operation #wallstreet.model.wood.abundance_ratio(pcm) data *= 1000 const +scoreboard players operation #wallstreet.model.stone.abundance_ratio(pcm) data *= 1000 const +scoreboard players operation #wallstreet.model.leather.abundance_ratio(pcm) data *= 1000 const +scoreboard players operation #wallstreet.model.iron.abundance_ratio(pcm) data *= 1000 const +scoreboard players operation #wallstreet.model.diamond.abundance_ratio(pcm) data *= 1000 const + +scoreboard players operation #wallstreet.model.wood.abundance_ratio(pcm) data /= #wallstreet.model.total_resource_stock data +scoreboard players operation #wallstreet.model.stone.abundance_ratio(pcm) data /= #wallstreet.model.total_resource_stock data +scoreboard players operation #wallstreet.model.leather.abundance_ratio(pcm) data /= #wallstreet.model.total_resource_stock data +scoreboard players operation #wallstreet.model.iron.abundance_ratio(pcm) data /= #wallstreet.model.total_resource_stock data +scoreboard players operation #wallstreet.model.diamond.abundance_ratio(pcm) data /= #wallstreet.model.total_resource_stock data + +scoreboard players operation #wallstreet.model.wood.price_index data = #wallstreet.model.starting_money data +scoreboard players operation #wallstreet.model.stone.price_index data = #wallstreet.model.starting_money data +scoreboard players operation #wallstreet.model.leather.price_index data = #wallstreet.model.starting_money data +scoreboard players operation #wallstreet.model.iron.price_index data = #wallstreet.model.starting_money data +scoreboard players operation #wallstreet.model.diamond.price_index data = #wallstreet.model.starting_money data + +scoreboard players operation #wallstreet.model.wood.price_index data *= 1000 const +scoreboard players operation #wallstreet.model.stone.price_index data *= 1000 const +scoreboard players operation #wallstreet.model.leather.price_index data *= 1000 const +scoreboard players operation #wallstreet.model.iron.price_index data *= 1000 const +scoreboard players operation #wallstreet.model.diamond.price_index data *= 1000 const + +scoreboard players operation #wallstreet.model.wood.price_index data /= #wallstreet.model.buy_power data +scoreboard players operation #wallstreet.model.stone.price_index data /= #wallstreet.model.buy_power data +scoreboard players operation #wallstreet.model.leather.price_index data /= #wallstreet.model.buy_power data +scoreboard players operation #wallstreet.model.iron.price_index data /= #wallstreet.model.buy_power data +scoreboard players operation #wallstreet.model.diamond.price_index data /= #wallstreet.model.buy_power data + +scoreboard players operation #wallstreet.model.wood.price_index data /= #wallstreet.model.wood.abundance_ratio(pcm) data +scoreboard players operation #wallstreet.model.stone.price_index data /= #wallstreet.model.stone.abundance_ratio(pcm) data +scoreboard players operation #wallstreet.model.leather.price_index data /= #wallstreet.model.leather.abundance_ratio(pcm) data +scoreboard players operation #wallstreet.model.iron.price_index data /= #wallstreet.model.iron.abundance_ratio(pcm) data +scoreboard players operation #wallstreet.model.diamond.price_index data /= #wallstreet.model.diamond.abundance_ratio(pcm) data diff --git a/minigames/data/wallstreet/functions/economy_model/get_global_prices.mcfunction b/minigames/data/wallstreet/functions/economy_model/get_global_prices.mcfunction deleted file mode 100644 index c4670e1..0000000 --- a/minigames/data/wallstreet/functions/economy_model/get_global_prices.mcfunction +++ /dev/null @@ -1,47 +0,0 @@ -scoreboard players operation #wallstreet.model.wood_global_ratio data = #wallstreet.model.wood_global_stock data -scoreboard players operation #wallstreet.model.stone_global_ratio data = #wallstreet.model.stone_global_stock data -scoreboard players operation #wallstreet.model.leather_global_ratio data = #wallstreet.model.leather_global_stock data -scoreboard players operation #wallstreet.model.iron_global_ratio data = #wallstreet.model.iron_global_stock data -scoreboard players operation #wallstreet.model.diamond_global_ratio data = #wallstreet.model.diamond_global_stock data - -scoreboard players operation #wallstreet.model.wood_global_ratio data *= 1000 const -scoreboard players operation #wallstreet.model.stone_global_ratio data *= 1000 const -scoreboard players operation #wallstreet.model.leather_global_ratio data *= 1000 const -scoreboard players operation #wallstreet.model.iron_global_ratio data *= 1000 const -scoreboard players operation #wallstreet.model.diamond_global_ratio data *= 1000 const - -scoreboard players operation #wallstreet.model.wood_global_ratio data /= #wallstreet.model.global_stock data -scoreboard players operation #wallstreet.model.stone_global_ratio data /= #wallstreet.model.global_stock data -scoreboard players operation #wallstreet.model.leather_global_ratio data /= #wallstreet.model.global_stock data -scoreboard players operation #wallstreet.model.iron_global_ratio data /= #wallstreet.model.global_stock data -scoreboard players operation #wallstreet.model.diamond_global_ratio data /= #wallstreet.model.global_stock data - -scoreboard players operation #wallstreet.model.wood_global_price data = #wallstreet.model.starting_money data -scoreboard players operation #wallstreet.model.stone_global_price data = #wallstreet.model.starting_money data -scoreboard players operation #wallstreet.model.leather_global_price data = #wallstreet.model.starting_money data -scoreboard players operation #wallstreet.model.iron_global_price data = #wallstreet.model.starting_money data -scoreboard players operation #wallstreet.model.diamond_global_price data = #wallstreet.model.starting_money data - -scoreboard players operation #wallstreet.model.wood_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.stone_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.leather_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.iron_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.diamond_global_price data *= 1000 const - -scoreboard players operation #wallstreet.model.wood_global_price data /= #wallstreet.model.buy_power data -scoreboard players operation #wallstreet.model.stone_global_price data /= #wallstreet.model.buy_power data -scoreboard players operation #wallstreet.model.leather_global_price data /= #wallstreet.model.buy_power data -scoreboard players operation #wallstreet.model.iron_global_price data /= #wallstreet.model.buy_power data -scoreboard players operation #wallstreet.model.diamond_global_price data /= #wallstreet.model.buy_power data - -scoreboard players operation #wallstreet.model.wood_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.stone_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.leather_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.iron_global_price data *= 1000 const -scoreboard players operation #wallstreet.model.diamond_global_price data *= 1000 const - -scoreboard players operation #wallstreet.model.wood_global_price data /= #wallstreet.model.wood_global_ratio data -scoreboard players operation #wallstreet.model.stone_global_price data /= #wallstreet.model.stone_global_ratio data -scoreboard players operation #wallstreet.model.leather_global_price data /= #wallstreet.model.leather_global_ratio data -scoreboard players operation #wallstreet.model.iron_global_price data /= #wallstreet.model.iron_global_ratio data -scoreboard players operation #wallstreet.model.diamond_global_price data /= #wallstreet.model.diamond_global_ratio data diff --git a/minigames/data/wallstreet/functions/economy_model/get_global_stocks.mcfunction b/minigames/data/wallstreet/functions/economy_model/get_global_stocks.mcfunction deleted file mode 100644 index d48eb9b..0000000 --- a/minigames/data/wallstreet/functions/economy_model/get_global_stocks.mcfunction +++ /dev/null @@ -1,15 +0,0 @@ - -scoreboard players set #wallstreet.model.starting_money data 5000 -scoreboard players set #wallstreet.model.buy_power data 500 - -scoreboard players set #wallstreet.model.wood_global_stock data 1500 -scoreboard players set #wallstreet.model.stone_global_stock data 1000 -scoreboard players set #wallstreet.model.leather_global_stock data 525 -scoreboard players set #wallstreet.model.iron_global_stock data 250 -scoreboard players set #wallstreet.model.diamond_global_stock data 50 - -scoreboard players operation #wallstreet.model.global_stock data = #wallstreet.model.wood_global_stock data -scoreboard players operation #wallstreet.model.global_stock data += #wallstreet.model.stone_global_stock data -scoreboard players operation #wallstreet.model.global_stock data += #wallstreet.model.leather_global_stock data -scoreboard players operation #wallstreet.model.global_stock data += #wallstreet.model.iron_global_stock data -scoreboard players operation #wallstreet.model.global_stock data += #wallstreet.model.diamond_global_stock data \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/economy_model/get_price.mcfunction b/minigames/data/wallstreet/functions/economy_model/get_price.mcfunction index e25e0b3..464d61d 100644 --- a/minigames/data/wallstreet/functions/economy_model/get_price.mcfunction +++ b/minigames/data/wallstreet/functions/economy_model/get_price.mcfunction @@ -1,49 +1,64 @@ -# price = global_price * (1 - 0.5*(quantity - average_quantity) / average_quantity) -# price = max(0.5 * global_price, price) -# price = min(1.5 * global_price, price) +# price = price_index * (1 - 0.5*(current_stock - max_stock) / max_stock) +# price = max(0.5 * price_index, price) +# price = min(1.5 * price_index, price) # Inputs: -# - #wallstreet.get_price.quantity data -# - #wallstreet.get_price.max_quantity data -# - #wallstreet.get_price.global_price +# - #current_stock input +# - #max_stock input +# - #price_index input # Outputs: -# - #wallstreet.get_price.price data +# - #price output + +# Define context +scoreboard players operation #stock_index ctx = #max_stock input +scoreboard players operation #stock_index ctx /= 2 const + +# tellraw @a [{"text":"stock index: "},{"score":{"name":"#stock_index","objective":"ctx"}}] # Apply model -scoreboard players operation #wallstreet.get_price.mid_quantity data = #wallstreet.get_price.max_quantity data -scoreboard players operation #wallstreet.get_price.mid_quantity data /= 2 const +scoreboard players operation #stock_diff(pcm) ctx = #current_stock input +scoreboard players operation #stock_diff(pcm) ctx -= #stock_index ctx + +# tellraw @a [{"text":"stock diff: "},{"score":{"name":"#stock_diff(pcm)","objective":"ctx"}}] + +scoreboard players operation #stock_diff(pcm) ctx *= 500 const +scoreboard players operation #stock_diff(pcm) ctx /= #stock_index ctx + +# tellraw @a [{"text":"stock diff (pcm): "},{"score":{"name":"#stock_diff(pcm)","objective":"ctx"}}] -scoreboard players operation #wallstreet.get_price.delta data = #wallstreet.get_price.quantity data -scoreboard players operation #wallstreet.get_price.delta data -= #wallstreet.get_price.mid_quantity data -scoreboard players operation #wallstreet.get_price.delta data *= 1000 const -scoreboard players operation #wallstreet.get_price.delta data /= #wallstreet.get_price.mid_quantity data +scoreboard players operation #1-stock_diff(pcm) ctx = 1000 const +scoreboard players operation #1-stock_diff(pcm) ctx -= #stock_diff(pcm) ctx -scoreboard players operation #wallstreet.get_price.x data = 1000 const -scoreboard players operation #wallstreet.get_price.x data -= #wallstreet.get_price.delta data +# tellraw @a [{"text":"1 - stock diff (pcm): "},{"score":{"name":"#1-stock_diff(pcm)","objective":"ctx"}}] -scoreboard players operation #wallstreet.get_price.price data = #wallstreet.get_price.global_price data -scoreboard players operation #wallstreet.get_price.price data *= #wallstreet.get_price.x data -scoreboard players operation #wallstreet.get_price.price data /= 1000 const -scoreboard players operation #wallstreet.get_price.price data /= 1000 const +scoreboard players operation #price output = #price_index input +scoreboard players operation #price output *= #1-stock_diff(pcm) ctx +scoreboard players operation #price output /= 1000 const + +# tellraw @a [{"text":"price unbounded: "},{"score":{"name":"#price","objective":"output"}}] # Apply limits -scoreboard players operation #wallstreet.get_price.max_price data = #wallstreet.get_price.global_price data -scoreboard players operation #wallstreet.get_price.max_price data *= 1500 const -scoreboard players operation #wallstreet.get_price.max_price data /= 1000 const -scoreboard players operation #wallstreet.get_price.max_price data /= 1000 const -scoreboard players operation #wallstreet.get_price.price data < #wallstreet.get_price.max_price data +scoreboard players operation #price_upper_limit ctx = #price_index input +scoreboard players operation #price_upper_limit ctx *= 1500 const +scoreboard players operation #price_upper_limit ctx /= 1000 const +scoreboard players operation #price output < #price_upper_limit ctx + +scoreboard players operation #price_lower_limit ctx = #price_index input +scoreboard players operation #price_lower_limit ctx /= 2 const +scoreboard players operation #price output > #price_lower_limit ctx -scoreboard players operation #wallstreet.get_price.min_price data = #wallstreet.get_price.global_price data -scoreboard players operation #wallstreet.get_price.min_price data /= 2 const -scoreboard players operation #wallstreet.get_price.min_price data /= 1000 const -scoreboard players operation #wallstreet.get_price.price data > #wallstreet.get_price.min_price data +# tellraw @a [{"text":"price bounded: "},{"score":{"name":"#price","objective":"output"}}] # Randomize -scoreboard players operation #mean tmp = #wallstreet.get_price.price data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #price output +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation #wallstreet.get_price.price data = #x tmp +scoreboard players operation #price output = #x output + +# tellraw @a [{"text":"price randomized: "},{"score":{"name":"#price","objective":"output"}}] + +scoreboard players operation #price output > 1 const -scoreboard players operation #wallstreet.get_price.price data > 1 const \ No newline at end of file +# tellraw @a [{"text":"price final: "},{"score":{"name":"#price","objective":"output"}}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/economy_model/initial_resources_supply.mcfunction b/minigames/data/wallstreet/functions/economy_model/initial_resources_supply.mcfunction index 51bfbba..40956ef 100644 --- a/minigames/data/wallstreet/functions/economy_model/initial_resources_supply.mcfunction +++ b/minigames/data/wallstreet/functions/economy_model/initial_resources_supply.mcfunction @@ -1,67 +1,67 @@ # Executed as & at villager marker # Wood -scoreboard players operation #mean tmp = #wallstreet.model.wood_global_stock data -scoreboard players operation #mean tmp /= #wallstreet.villager_count data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #wallstreet.model.wood.global_stock data +scoreboard players operation #mean input /= #wallstreet.villager_count data +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation @s wallstreet.wood_max_quantity = #x tmp -scoreboard players operation @s wallstreet.wood_max_quantity *= 2 const -scoreboard players operation @s wallstreet.wood_max_quantity > 2 const +scoreboard players operation @s wallstreet.wood_max_stock = #x output +scoreboard players operation @s wallstreet.wood_max_stock *= 2 const +scoreboard players operation @s wallstreet.wood_max_stock > 2 const function #lib:random_normal -scoreboard players operation @s wallstreet.wood_quantity = #x tmp -scoreboard players operation @s wallstreet.wood_quantity < @s wallstreet.wood_max_quantity +scoreboard players operation @s wallstreet.wood_current_stock = #x output +scoreboard players operation @s wallstreet.wood_current_stock < @s wallstreet.wood_max_stock # Stone -scoreboard players operation #mean tmp = #wallstreet.model.stone_global_stock data -scoreboard players operation #mean tmp /= #wallstreet.villager_count data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #wallstreet.model.stone.global_stock data +scoreboard players operation #mean input /= #wallstreet.villager_count data +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation @s wallstreet.stone_max_quantity = #x tmp -scoreboard players operation @s wallstreet.stone_max_quantity *= 2 const -scoreboard players operation @s wallstreet.stone_max_quantity > 2 const +scoreboard players operation @s wallstreet.stone_max_stock = #x output +scoreboard players operation @s wallstreet.stone_max_stock *= 2 const +scoreboard players operation @s wallstreet.stone_max_stock > 2 const function #lib:random_normal -scoreboard players operation @s wallstreet.stone_quantity = #x tmp -scoreboard players operation @s wallstreet.stone_quantity < @s wallstreet.stone_max_quantity +scoreboard players operation @s wallstreet.stone_current_stock = #x output +scoreboard players operation @s wallstreet.stone_current_stock < @s wallstreet.stone_max_stock # Leather -scoreboard players operation #mean tmp = #wallstreet.model.leather_global_stock data -scoreboard players operation #mean tmp /= #wallstreet.villager_count data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #wallstreet.model.leather.global_stock data +scoreboard players operation #mean input /= #wallstreet.villager_count data +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation @s wallstreet.leather_max_quantity = #x tmp -scoreboard players operation @s wallstreet.leather_max_quantity *= 2 const -scoreboard players operation @s wallstreet.leather_max_quantity > 2 const +scoreboard players operation @s wallstreet.leather_max_stock = #x output +scoreboard players operation @s wallstreet.leather_max_stock *= 2 const +scoreboard players operation @s wallstreet.leather_max_stock > 2 const function #lib:random_normal -scoreboard players operation @s wallstreet.leather_quantity = #x tmp -scoreboard players operation @s wallstreet.leather_quantity < @s wallstreet.leather_max_quantity +scoreboard players operation @s wallstreet.leather_current_stock = #x output +scoreboard players operation @s wallstreet.leather_current_stock < @s wallstreet.leather_max_stock # Iron -scoreboard players operation #mean tmp = #wallstreet.model.iron_global_stock data -scoreboard players operation #mean tmp /= #wallstreet.villager_count data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #wallstreet.model.iron.global_stock data +scoreboard players operation #mean input /= #wallstreet.villager_count data +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation @s wallstreet.iron_max_quantity = #x tmp -scoreboard players operation @s wallstreet.iron_max_quantity *= 2 const -scoreboard players operation @s wallstreet.iron_max_quantity > 2 const +scoreboard players operation @s wallstreet.iron_max_stock = #x output +scoreboard players operation @s wallstreet.iron_max_stock *= 2 const +scoreboard players operation @s wallstreet.iron_max_stock > 2 const function #lib:random_normal -scoreboard players operation @s wallstreet.iron_quantity = #x tmp -scoreboard players operation @s wallstreet.iron_quantity < @s wallstreet.iron_max_quantity +scoreboard players operation @s wallstreet.iron_current_stock = #x output +scoreboard players operation @s wallstreet.iron_current_stock < @s wallstreet.iron_max_stock # Diamond -scoreboard players operation #mean tmp = #wallstreet.model.diamond_global_stock data -scoreboard players operation #mean tmp /= #wallstreet.villager_count data -scoreboard players operation #std tmp = #mean tmp -scoreboard players operation #std tmp /= 10 const +scoreboard players operation #mean input = #wallstreet.model.diamond.global_stock data +scoreboard players operation #mean input /= #wallstreet.villager_count data +scoreboard players operation #std input = #mean input +scoreboard players operation #std input /= 10 const function #lib:random_normal -scoreboard players operation @s wallstreet.diamond_max_quantity = #x tmp -scoreboard players operation @s wallstreet.diamond_max_quantity *= 2 const -scoreboard players operation @s wallstreet.diamond_max_quantity > 2 const +scoreboard players operation @s wallstreet.diamond_max_stock = #x output +scoreboard players operation @s wallstreet.diamond_max_stock *= 2 const +scoreboard players operation @s wallstreet.diamond_max_stock > 2 const function #lib:random_normal -scoreboard players operation @s wallstreet.diamond_quantity = #x tmp -scoreboard players operation @s wallstreet.diamond_quantity < @s wallstreet.diamond_max_quantity +scoreboard players operation @s wallstreet.diamond_current_stock = #x output +scoreboard players operation @s wallstreet.diamond_current_stock < @s wallstreet.diamond_max_stock function wallstreet:villager/refresh_price/all \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/game_tick.mcfunction b/minigames/data/wallstreet/functions/game_tick.mcfunction index 829a2c3..f151510 100644 --- a/minigames/data/wallstreet/functions/game_tick.mcfunction +++ b/minigames/data/wallstreet/functions/game_tick.mcfunction @@ -33,11 +33,11 @@ execute if score #wallstreet.timer data matches 100 run function #bs.sidebar:cre '{"text":" "}', \ '{"text":" Market price index:","color":"white"}', \ '{"text":" "}', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.wood_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.stone_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.leather_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.iron_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.diamond_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.wood.price_index_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.stone.price_index_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.leather.price_index_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.iron.price_index_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.diamond.price_index_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ '{"text":" "}', \ '[{"text":" Time left: ","color":"red","bold":true,"italic":true},{"score":{"name":"#wallstreet.timer.minutes","objective":"data"},"color":"red","bold":true,"italic":true},{"text":"m ","color":"red","bold":true,"italic":true},{"score":{"name":"#wallstreet.timer.seconds","objective":"data"},"color":"red","bold":true,"italic":true},{"text":"s","color":"red","bold":true,"italic":true}]', \ '{"text":" "}' \ diff --git a/minigames/data/wallstreet/functions/inventory/compass/.mcfunction b/minigames/data/wallstreet/functions/inventory/compass/.mcfunction index e681b7d..fa82326 100644 --- a/minigames/data/wallstreet/functions/inventory/compass/.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/compass/.mcfunction @@ -16,9 +16,9 @@ execute as @a[team=wallstreet] if score @s wallstreet.compass.select > #wallstre execute as @a[team=wallstreet] if score @s wallstreet.compass.select matches ..0 run scoreboard players operation @s wallstreet.compass.select = #wallstreet.villager_count data # Count number of possessed compassed compass -scoreboard players set @a[team=wallstreet] tmp 0 -execute as @a[team=wallstreet] store result score @s tmp run clear @s compass 0 -tag @a[team=wallstreet,scores={tmp=0}] add wallstreet.compass.update +scoreboard players set @a[team=wallstreet] ctx 0 +execute as @a[team=wallstreet] store result score @s ctx run clear @s compass 0 +tag @a[team=wallstreet,scores={ctx=0}] add wallstreet.compass.update execute as @a[tag=wallstreet.compass.update] at @s run function wallstreet:inventory/compass/update diff --git a/minigames/data/wallstreet/functions/inventory/diamond.mcfunction b/minigames/data/wallstreet/functions/inventory/diamond.mcfunction index 8d9e560..2ec2def 100644 --- a/minigames/data/wallstreet/functions/inventory/diamond.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/diamond.mcfunction @@ -1,6 +1,6 @@ -scoreboard players operation #average_price_int tmp = @s wallstreet.diamond_price -scoreboard players operation #average_price_int tmp += 500 const -scoreboard players operation #average_price_int tmp /= 1000 const +scoreboard players operation #average_price_int ctx = @s wallstreet.diamond_price +scoreboard players operation #average_price_int ctx += 500 const +scoreboard players operation #average_price_int ctx /= 1000 const -title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.diamond_quantity"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file +title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.diamond_current_stock"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/inventory/iron.mcfunction b/minigames/data/wallstreet/functions/inventory/iron.mcfunction index a627f7c..cc45d0c 100644 --- a/minigames/data/wallstreet/functions/inventory/iron.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/iron.mcfunction @@ -1,6 +1,6 @@ -scoreboard players operation #average_price_int tmp = @s wallstreet.iron_price -scoreboard players operation #average_price_int tmp += 500 const -scoreboard players operation #average_price_int tmp /= 1000 const +scoreboard players operation #average_price_int ctx = @s wallstreet.iron_price +scoreboard players operation #average_price_int ctx += 500 const +scoreboard players operation #average_price_int ctx /= 1000 const -title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.iron_quantity"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file +title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.iron_current_stock"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/inventory/leather.mcfunction b/minigames/data/wallstreet/functions/inventory/leather.mcfunction index 07e1667..0a9ae69 100644 --- a/minigames/data/wallstreet/functions/inventory/leather.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/leather.mcfunction @@ -1,6 +1,6 @@ -scoreboard players operation #average_price_int tmp = @s wallstreet.leather_price -scoreboard players operation #average_price_int tmp += 500 const -scoreboard players operation #average_price_int tmp /= 1000 const +scoreboard players operation #average_price_int ctx = @s wallstreet.leather_price +scoreboard players operation #average_price_int ctx += 500 const +scoreboard players operation #average_price_int ctx /= 1000 const -title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.leather_quantity"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file +title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.leather_current_stock"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/inventory/stone.mcfunction b/minigames/data/wallstreet/functions/inventory/stone.mcfunction index 3bec8bd..46a8cec 100644 --- a/minigames/data/wallstreet/functions/inventory/stone.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/stone.mcfunction @@ -1,6 +1,6 @@ -scoreboard players operation #average_price_int tmp = @s wallstreet.stone_price -scoreboard players operation #average_price_int tmp += 500 const -scoreboard players operation #average_price_int tmp /= 1000 const +scoreboard players operation #average_price_int ctx = @s wallstreet.stone_price +scoreboard players operation #average_price_int ctx += 500 const +scoreboard players operation #average_price_int ctx /= 1000 const -title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.stone_quantity"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file +title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.stone_current_stock"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/inventory/wood.mcfunction b/minigames/data/wallstreet/functions/inventory/wood.mcfunction index a39c4a8..c546cff 100644 --- a/minigames/data/wallstreet/functions/inventory/wood.mcfunction +++ b/minigames/data/wallstreet/functions/inventory/wood.mcfunction @@ -1,6 +1,6 @@ -scoreboard players operation #average_price_int tmp = @s wallstreet.wood_price -scoreboard players operation #average_price_int tmp += 500 const -scoreboard players operation #average_price_int tmp /= 1000 const +scoreboard players operation #average_price_int ctx = @s wallstreet.wood_price +scoreboard players operation #average_price_int ctx += 500 const +scoreboard players operation #average_price_int ctx /= 1000 const -title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.wood_quantity"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file +title @s actionbar [{"score":{"name":"@s","objective":"wallstreet.wood_current_stock"},"color":"yellow","bold":true,"italic":true},{"text":" items bought at ","color":"gray","bold":false,"italic":false},{"score":{"name":"#average_price_int","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":"/item","color":"gray","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/start/start.mcfunction b/minigames/data/wallstreet/functions/start/start.mcfunction index 37c6225..49377d2 100644 --- a/minigames/data/wallstreet/functions/start/start.mcfunction +++ b/minigames/data/wallstreet/functions/start/start.mcfunction @@ -4,8 +4,7 @@ function wallstreet:start/load_config scoreboard players set #wallstreet.game_started data 1 scoreboard players operation #wallstreet.timer data = #wallstreet.game_time data -function wallstreet:economy_model/get_global_stocks -function wallstreet:economy_model/get_global_prices +function wallstreet:economy_model/get_global_data function wallstreet:villager/summon/all execute at @e[tag=lib.start_animation.wallstreet] run team join wallstreet @a[distance=..13] @@ -19,26 +18,14 @@ scoreboard players set @a[team=wallstreet] wallstreet.leather_price 0 scoreboard players set @a[team=wallstreet] wallstreet.iron_price 0 scoreboard players set @a[team=wallstreet] wallstreet.diamond_price 0 -scoreboard players set @a[team=wallstreet] wallstreet.wood_quantity 0 -scoreboard players set @a[team=wallstreet] wallstreet.stone_quantity 0 -scoreboard players set @a[team=wallstreet] wallstreet.leather_quantity 0 -scoreboard players set @a[team=wallstreet] wallstreet.iron_quantity 0 -scoreboard players set @a[team=wallstreet] wallstreet.diamond_quantity 0 +scoreboard players set @a[team=wallstreet] wallstreet.wood_current_stock 0 +scoreboard players set @a[team=wallstreet] wallstreet.stone_current_stock 0 +scoreboard players set @a[team=wallstreet] wallstreet.leather_current_stock 0 +scoreboard players set @a[team=wallstreet] wallstreet.iron_current_stock 0 +scoreboard players set @a[team=wallstreet] wallstreet.diamond_current_stock 0 execute as @a[team=wallstreet] run function #global:animated_title {type:"start"} -scoreboard players operation #wallstreet.model.wood_global_price_rounded data = #wallstreet.model.wood_global_price data -scoreboard players operation #wallstreet.model.stone_global_price_rounded data = #wallstreet.model.stone_global_price data -scoreboard players operation #wallstreet.model.leather_global_price_rounded data = #wallstreet.model.leather_global_price data -scoreboard players operation #wallstreet.model.iron_global_price_rounded data = #wallstreet.model.iron_global_price data -scoreboard players operation #wallstreet.model.diamond_global_price_rounded data = #wallstreet.model.diamond_global_price data - -scoreboard players operation #wallstreet.model.wood_global_price_rounded data /= 1000 const -scoreboard players operation #wallstreet.model.stone_global_price_rounded data /= 1000 const -scoreboard players operation #wallstreet.model.leather_global_price_rounded data /= 1000 const -scoreboard players operation #wallstreet.model.iron_global_price_rounded data /= 1000 const -scoreboard players operation #wallstreet.model.diamond_global_price_rounded data /= 1000 const - # Register a new sidebar function #bs.sidebar:create { \ id:"wallstreet", \ @@ -47,11 +34,11 @@ function #bs.sidebar:create { \ '{"text":" "}', \ '{"text":" Market price index:","color":"white"}', \ '{"text":" "}', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.wood_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.stone_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.leather_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.iron_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ - '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.diamond_global_price_rounded","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.wood.price_index","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.stone.price_index","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.leather.price_index","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.iron.price_index","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ + '[{"text":"  ","color":"white","bold":false},{"score":{"name":"#wallstreet.model.diamond.price_index","objective":"data"},"color":"yellow","bold":true},{"text":"","color":"white","bold":false},{"text":"/item","color":"gray","bold":false}]', \ '{"text":" "}', \ '[{"text":" Time left: ","color":"white"},{"score":{"name":"#wallstreet.timer.minutes","objective":"data"}},{"text":"m ","color":"white"},{"score":{"name":"#wallstreet.timer.seconds","objective":"data"}},{"text":"s","color":"white"}]', \ '{"text":" "}' \ diff --git a/minigames/data/wallstreet/functions/stop/end_game.mcfunction b/minigames/data/wallstreet/functions/stop/end_game.mcfunction index df8b020..f3b2407 100644 --- a/minigames/data/wallstreet/functions/stop/end_game.mcfunction +++ b/minigames/data/wallstreet/functions/stop/end_game.mcfunction @@ -1,10 +1,10 @@ -scoreboard players set #richest tmp 0 -scoreboard players operation #richest tmp > @a[team=wallstreet] wallstreet.budget +scoreboard players set #richest ctx 0 +scoreboard players operation #richest ctx > @a[team=wallstreet] wallstreet.budget -execute as @a[team=wallstreet] at @s if score @s wallstreet.budget >= #richest tmp run tag @s add wallstreet.winner +execute as @a[team=wallstreet] at @s if score @s wallstreet.budget >= #richest ctx run tag @s add wallstreet.winner execute as @a[tag=wallstreet.winner] at @s run function #global:animated_title {type:"victory"} -execute as @a[team=wallstreet] at @s if score @s wallstreet.budget < #richest tmp run function #global:animated_title {type:"defeat"} +execute as @a[team=wallstreet] at @s if score @s wallstreet.budget < #richest ctx run function #global:animated_title {type:"defeat"} function wallstreet:print_score/run diff --git a/minigames/data/wallstreet/functions/villager/gui/interact/.mcfunction b/minigames/data/wallstreet/functions/villager/gui/interact/.mcfunction index 0c7ec84..cb92234 100644 --- a/minigames/data/wallstreet/functions/villager/gui/interact/.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/interact/.mcfunction @@ -6,7 +6,7 @@ execute on target \ execute on target \ at @s \ if entity @s[tag=wallstreet.villager.client] \ - if score #lock_time tmp matches 0..300 \ + if score #lock_time ctx matches 0..300 \ run function wallstreet:villager/gui/interact/locked execute on target \ diff --git a/minigames/data/wallstreet/functions/villager/gui/interact/apply/max.mcfunction b/minigames/data/wallstreet/functions/villager/gui/interact/apply/max.mcfunction index 8542eb5..d00e8f4 100644 --- a/minigames/data/wallstreet/functions/villager/gui/interact/apply/max.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/interact/apply/max.mcfunction @@ -1,15 +1,15 @@ # Select max in buy mode -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 0 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.wood_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 1 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.stone_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 2 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.leather_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 3 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.iron_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 4 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.diamond_quantity +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 0 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.wood_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 1 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.stone_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 2 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.leather_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 3 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.iron_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] unless entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 4 run scoreboard players operation @s wallstreet.selected_quantity = @s wallstreet.diamond_current_stock # Select max in sell mode -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 0 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.wood_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 1 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.stone_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 2 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.leather_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 3 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.iron_quantity -execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 4 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.diamond_quantity +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 0 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.wood_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 1 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.stone_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 2 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.leather_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 3 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.iron_current_stock +execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] if entity @s[tag=wallstreet.villager.sell] if score @s wallstreet.selected_resource matches 4 run scoreboard players operation @s wallstreet.selected_quantity = @p[tag=wallstreet.villager.client] wallstreet.diamond_current_stock execute as @e[tag=wallstreet.villager_marker,limit=1,sort=nearest] run scoreboard players add @s wallstreet.selected_quantity 1 \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/gui/interact/not_the_client.mcfunction b/minigames/data/wallstreet/functions/villager/gui/interact/not_the_client.mcfunction index 00f6ad5..90a59ac 100644 --- a/minigames/data/wallstreet/functions/villager/gui/interact/not_the_client.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/interact/not_the_client.mcfunction @@ -2,8 +2,8 @@ playsound entity.villager.no master @s ~ ~ ~ 1 1 0 title @s times 0 40 20 title @s title {"text":" ","color":"red"} -execute store result score #random tmp run random value 0..3 -execute if score #random tmp matches 0 run title @s subtitle {"text":"Go disturb someone else!","color":"red","bold":true,"italic":true} -execute if score #random tmp matches 1 run title @s subtitle {"text":"I already have a client...","color":"red","bold":true,"italic":true} -execute if score #random tmp matches 2 run title @s subtitle {"text":"Wait for your turn.","color":"red","bold":true,"italic":true} -execute if score #random tmp matches 3 run title @s subtitle {"text":"Chhhht! I'm busy.","color":"red","bold":true,"italic":true} \ No newline at end of file +execute store result score #random ctx run random value 0..3 +execute if score #random ctx matches 0 run title @s subtitle {"text":"Go disturb someone else!","color":"red","bold":true,"italic":true} +execute if score #random ctx matches 1 run title @s subtitle {"text":"I already have a client...","color":"red","bold":true,"italic":true} +execute if score #random ctx matches 2 run title @s subtitle {"text":"Wait for your turn.","color":"red","bold":true,"italic":true} +execute if score #random ctx matches 3 run title @s subtitle {"text":"Chhhht! I'm busy.","color":"red","bold":true,"italic":true} \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/next_balance.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/next_balance.mcfunction index 04d0770..c3c196d 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/next_balance.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/next_balance.mcfunction @@ -1,20 +1,20 @@ -scoreboard players operation #next_balance tmp = @s wallstreet.selected_quantity +scoreboard players operation #next_balance ctx = @s wallstreet.selected_quantity -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #next_balance tmp *= @s wallstreet.wood_price -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #next_balance tmp *= @s wallstreet.stone_price -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #next_balance tmp *= @s wallstreet.leather_price -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #next_balance tmp *= @s wallstreet.iron_price -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #next_balance tmp *= @s wallstreet.diamond_price +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #next_balance ctx *= @s wallstreet.wood_price +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #next_balance ctx *= @s wallstreet.stone_price +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #next_balance ctx *= @s wallstreet.leather_price +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #next_balance ctx *= @s wallstreet.iron_price +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #next_balance ctx *= @s wallstreet.diamond_price -execute if entity @s[tag=!wallstreet.villager.sell] run scoreboard players operation #next_balance tmp *= -1 const -scoreboard players operation #next_balance tmp += @p[tag=wallstreet.villager.client] wallstreet.budget +execute if entity @s[tag=!wallstreet.villager.sell] run scoreboard players operation #next_balance ctx *= -1 const +scoreboard players operation #next_balance ctx += @p[tag=wallstreet.villager.client] wallstreet.budget execute \ if entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ run \ - data modify entity @e[tag=wallstreet.villager.gui.display.next_balance,sort=nearest,limit=1] text set value '[{"text":"Next balance: ","color":"white","bold":false,"italic":false},{"score":{"name":"#next_balance","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' + data modify entity @e[tag=wallstreet.villager.gui.display.next_balance,sort=nearest,limit=1] text set value '[{"text":"Next balance: ","color":"white","bold":false,"italic":false},{"score":{"name":"#next_balance","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' execute \ unless entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ run \ - data modify entity @e[tag=wallstreet.villager.gui.display.next_balance,sort=nearest,limit=1] text set value '[{"text":"Next balance: ","color":"white","bold":false,"italic":false},{"score":{"name":"#next_balance","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' + data modify entity @e[tag=wallstreet.villager.gui.display.next_balance,sort=nearest,limit=1] text set value '[{"text":"Next balance: ","color":"white","bold":false,"italic":false},{"score":{"name":"#next_balance","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/next_client.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/next_client.mcfunction index 44aef96..d5054ef 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/next_client.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/next_client.mcfunction @@ -1,17 +1,17 @@ # Executed as & at the villager marker -scoreboard players operation #wallstreet.next_client.seconds tmp = @e[tag=wallstreet.sit,limit=1,sort=nearest] living_time -scoreboard players operation #wallstreet.next_client.seconds tmp -= #wallstreet.villager.interaction_time data -scoreboard players operation #wallstreet.next_client.seconds tmp *= -1 const -scoreboard players operation #wallstreet.next_client.seconds tmp /= 20 const -scoreboard players operation #wallstreet.next_client.seconds tmp += 1 const +scoreboard players operation #seconds ctx = @e[tag=wallstreet.sit,limit=1,sort=nearest] living_time +scoreboard players operation #seconds ctx -= #wallstreet.villager.interaction_time data +scoreboard players operation #seconds ctx *= -1 const +scoreboard players operation #seconds ctx /= 20 const +scoreboard players operation #seconds ctx += 1 const -scoreboard players operation #wallstreet.next_client.modulo tmp = @e[tag=wallstreet.sit,limit=1,sort=nearest] living_time -scoreboard players operation #wallstreet.next_client.modulo tmp %= 20 const +scoreboard players operation #modulo ctx = @e[tag=wallstreet.sit,limit=1,sort=nearest] living_time +scoreboard players operation #modulo ctx %= 20 const -execute if score #wallstreet.next_client.modulo tmp matches 0 as @e[tag=wallstreet.sit,limit=1,sort=nearest] on passengers at @s run playsound block.stone_button.click_off master @s ~ ~ ~ 0.2 1 0 -execute if score #wallstreet.next_client.modulo tmp matches 0 if score #wallstreet.next_client.seconds tmp matches 1..5 as @e[tag=wallstreet.sit,limit=1,sort=nearest] on passengers at @s run playsound minecraft:block.note_block.flute master @s ~ ~ ~ 1 2 0 +execute if score #modulo ctx matches 0 as @e[tag=wallstreet.sit,limit=1,sort=nearest] on passengers at @s run playsound block.stone_button.click_off master @s ~ ~ ~ 0.2 1 0 +execute if score #modulo ctx matches 0 if score #seconds ctx matches 1..5 as @e[tag=wallstreet.sit,limit=1,sort=nearest] on passengers at @s run playsound minecraft:block.note_block.flute master @s ~ ~ ~ 1 2 0 -execute if score #wallstreet.next_client.modulo tmp matches 0 if score #wallstreet.next_client.seconds tmp matches 6.. run data modify entity @e[tag=wallstreet.villager.gui.display.next_client,sort=nearest,limit=1] text set value '[{"text":"I\'ll take the next client in ","color":"gray","bold":false,"italic":true},{"score":{"name":"#wallstreet.next_client.seconds","objective":"tmp"},"color":"white","bold":false,"italic":false},{"text":"s","color":"gray","bold":false,"italic":true}]' +execute if score #modulo ctx matches 0 if score #seconds ctx matches 6.. run data modify entity @e[tag=wallstreet.villager.gui.display.next_client,sort=nearest,limit=1] text set value '[{"text":"I\'ll take the next client in ","color":"gray","bold":false,"italic":true},{"score":{"name":"#seconds","objective":"ctx"},"color":"white","bold":false,"italic":false},{"text":"s","color":"gray","bold":false,"italic":true}]' -execute if score #wallstreet.next_client.modulo tmp matches 0 if score #wallstreet.next_client.seconds tmp matches ..5 run data modify entity @e[tag=wallstreet.villager.gui.display.next_client,sort=nearest,limit=1] text set value '[{"text":"I\'ll take the next client in ","color":"red","bold":false,"italic":true},{"score":{"name":"#wallstreet.next_client.seconds","objective":"tmp"},"color":"gold","bold":true,"italic":true},{"text":"s","color":"red","bold":false,"italic":true}]' \ No newline at end of file +execute if score #modulo ctx matches 0 if score #seconds ctx matches ..5 run data modify entity @e[tag=wallstreet.villager.gui.display.next_client,sort=nearest,limit=1] text set value '[{"text":"I\'ll take the next client in ","color":"red","bold":false,"italic":true},{"score":{"name":"#seconds","objective":"ctx"},"color":"gold","bold":true,"italic":true},{"text":"s","color":"red","bold":false,"italic":true}]' \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_buy.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_buy.mcfunction index 5ffa981..69f3f0e 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_buy.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_buy.mcfunction @@ -1,29 +1,29 @@ # Check if selected quantity exceed villager stock -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock tmp = @s wallstreet.wood_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock tmp = @s wallstreet.stone_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock tmp = @s wallstreet.leather_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock tmp = @s wallstreet.iron_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock tmp = @s wallstreet.diamond_quantity +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock ctx = @s wallstreet.wood_current_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock ctx = @s wallstreet.stone_current_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock ctx = @s wallstreet.leather_current_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock ctx = @s wallstreet.iron_current_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock ctx = @s wallstreet.diamond_current_stock # Check if selected quantity is above the buy power of the client -scoreboard players operation #buy_power tmp = @p[tag=wallstreet.villager.client] wallstreet.budget -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #buy_power tmp /= @s wallstreet.wood_price -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #buy_power tmp /= @s wallstreet.stone_price -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #buy_power tmp /= @s wallstreet.leather_price -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #buy_power tmp /= @s wallstreet.iron_price -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #buy_power tmp /= @s wallstreet.diamond_price +scoreboard players operation #buy_power ctx = @p[tag=wallstreet.villager.client] wallstreet.budget +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #buy_power ctx /= @s wallstreet.wood_price +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #buy_power ctx /= @s wallstreet.stone_price +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #buy_power ctx /= @s wallstreet.leather_price +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #buy_power ctx /= @s wallstreet.iron_price +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #buy_power ctx /= @s wallstreet.diamond_price -scoreboard players operation #limit tmp = #max_stock tmp -scoreboard players operation #limit tmp < #buy_power tmp +scoreboard players operation #limit ctx = #max_stock ctx +scoreboard players operation #limit ctx < #buy_power ctx -execute if score @s wallstreet.selected_quantity > #buy_power tmp run tag @s add wallstreet.villager.quantity.limited_by_client_budget -execute if score @s wallstreet.selected_quantity > #max_stock tmp unless entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] run tag @s add wallstreet.villager.quantity.limited_by_villager_stock +execute if score @s wallstreet.selected_quantity > #buy_power ctx run tag @s add wallstreet.villager.quantity.limited_by_client_budget +execute if score @s wallstreet.selected_quantity > #max_stock ctx unless entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] run tag @s add wallstreet.villager.quantity.limited_by_villager_stock -execute if score @s wallstreet.selected_quantity > #limit tmp run scoreboard players operation @s wallstreet.selected_quantity = #limit tmp +execute if score @s wallstreet.selected_quantity > #limit ctx run scoreboard players operation @s wallstreet.selected_quantity = #limit ctx -scoreboard players operation #can_increase tmp = #limit tmp -scoreboard players operation #can_increase tmp -= @s wallstreet.selected_quantity -scoreboard players operation #can_decrease tmp = @s wallstreet.selected_quantity \ No newline at end of file +scoreboard players operation #can_increase ctx = #limit ctx +scoreboard players operation #can_increase ctx -= @s wallstreet.selected_quantity +scoreboard players operation #can_decrease ctx = @s wallstreet.selected_quantity \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_sell.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_sell.mcfunction index 46d3067..4970e2c 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_sell.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_limit_sell.mcfunction @@ -1,31 +1,31 @@ # Check if selected quantity exceed player stock # Getting player stock -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #player_stock tmp = @p[tag=wallstreet.villager.client] wallstreet.wood_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #player_stock tmp = @p[tag=wallstreet.villager.client] wallstreet.stone_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #player_stock tmp = @p[tag=wallstreet.villager.client] wallstreet.leather_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #player_stock tmp = @p[tag=wallstreet.villager.client] wallstreet.iron_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #player_stock tmp = @p[tag=wallstreet.villager.client] wallstreet.diamond_quantity +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #player_stock ctx = @p[tag=wallstreet.villager.client] wallstreet.wood_current_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #player_stock ctx = @p[tag=wallstreet.villager.client] wallstreet.stone_current_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #player_stock ctx = @p[tag=wallstreet.villager.client] wallstreet.leather_current_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #player_stock ctx = @p[tag=wallstreet.villager.client] wallstreet.iron_current_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #player_stock ctx = @p[tag=wallstreet.villager.client] wallstreet.diamond_current_stock -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock tmp = @s wallstreet.wood_max_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock tmp = @s wallstreet.stone_max_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock tmp = @s wallstreet.leather_max_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock tmp = @s wallstreet.iron_max_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock tmp = @s wallstreet.diamond_max_quantity +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock ctx = @s wallstreet.wood_max_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock ctx = @s wallstreet.stone_max_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock ctx = @s wallstreet.leather_max_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock ctx = @s wallstreet.iron_max_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock ctx = @s wallstreet.diamond_max_stock -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock tmp -= @s wallstreet.wood_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock tmp -= @s wallstreet.stone_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock tmp -= @s wallstreet.leather_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock tmp -= @s wallstreet.iron_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock tmp -= @s wallstreet.diamond_quantity +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock ctx -= @s wallstreet.wood_current_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock ctx -= @s wallstreet.stone_current_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock ctx -= @s wallstreet.leather_current_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock ctx -= @s wallstreet.iron_current_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock ctx -= @s wallstreet.diamond_current_stock -execute if score @s wallstreet.selected_quantity > #player_stock tmp run tag @s add wallstreet.villager.quantity.limited_by_player_stock -execute if score @s wallstreet.selected_quantity > #max_stock tmp run tag @s add wallstreet.villager.quantity.limited_by_villager_max_stock +execute if score @s wallstreet.selected_quantity > #player_stock ctx run tag @s add wallstreet.villager.quantity.limited_by_player_stock +execute if score @s wallstreet.selected_quantity > #max_stock ctx run tag @s add wallstreet.villager.quantity.limited_by_villager_max_stock -scoreboard players operation @s wallstreet.selected_quantity < #max_stock tmp -scoreboard players operation @s wallstreet.selected_quantity < #player_stock tmp +scoreboard players operation @s wallstreet.selected_quantity < #max_stock ctx +scoreboard players operation @s wallstreet.selected_quantity < #player_stock ctx -scoreboard players operation #can_increase tmp = #player_stock tmp -scoreboard players operation #can_increase tmp < #max_stock tmp -scoreboard players operation #can_increase tmp -= @s wallstreet.selected_quantity -scoreboard players operation #can_decrease tmp = @s wallstreet.selected_quantity \ No newline at end of file +scoreboard players operation #can_increase ctx = #player_stock ctx +scoreboard players operation #can_increase ctx < #max_stock ctx +scoreboard players operation #can_increase ctx -= @s wallstreet.selected_quantity +scoreboard players operation #can_decrease ctx = @s wallstreet.selected_quantity \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_selection.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_selection.mcfunction index d7ee786..650de7b 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_selection.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/quantity_selection.mcfunction @@ -17,16 +17,16 @@ execute if entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] execute if entity @s[tag=wallstreet.villager.quantity.limited_by_villager_max_stock] run \ playsound minecraft:block.note_block.cow_bell master @p[tag=wallstreet.villager.client] ~ ~ ~ 1 2 0 -scoreboard players operation #quantity tmp = @s wallstreet.selected_quantity +scoreboard players operation #quantity ctx = @s wallstreet.selected_quantity -execute if entity @s[tag=wallstreet.villager.quantity.limited_by_player_stock] run data modify entity @e[tag=wallstreet.villager.gui.display.quantity_selection,sort=nearest,limit=1] text set value '[{"score":{"name":"#quantity","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' -execute unless entity @s[tag=wallstreet.villager.quantity.limited_by_player_stock] run data modify entity @e[tag=wallstreet.villager.gui.display.quantity_selection,sort=nearest,limit=1] text set value '[{"score":{"name":"#quantity","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' +execute if entity @s[tag=wallstreet.villager.quantity.limited_by_player_stock] run data modify entity @e[tag=wallstreet.villager.gui.display.quantity_selection,sort=nearest,limit=1] text set value '[{"score":{"name":"#quantity","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' +execute unless entity @s[tag=wallstreet.villager.quantity.limited_by_player_stock] run data modify entity @e[tag=wallstreet.villager.gui.display.quantity_selection,sort=nearest,limit=1] text set value '[{"score":{"name":"#quantity","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' # Increase -------------------------------------------------------------------- # 100.. execute \ - if score #can_increase tmp matches 100.. \ + if score #can_increase ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/add_1 \ unless predicate wallstreet:villager/gui/hover/add_10 \ @@ -37,7 +37,7 @@ run \ '[{"text":"+1 +10 +100 max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 100.. \ + if score #can_increase ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_1 \ run \ @@ -45,7 +45,7 @@ run \ '[{"text":"+1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" +10 +100 max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 100.. \ + if score #can_increase ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_10 \ run \ @@ -53,7 +53,7 @@ run \ '[{"text":"+1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"+10","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" +100 max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 100.. \ + if score #can_increase ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_100 \ run \ @@ -61,7 +61,7 @@ run \ '[{"text":"+1 +10 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"+100","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 100.. \ + if score #can_increase ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/max \ run \ @@ -70,7 +70,7 @@ run \ # 10..99 execute \ - if score #can_increase tmp matches 10..99 \ + if score #can_increase ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/add_1 \ unless predicate wallstreet:villager/gui/hover/add_10 \ @@ -81,7 +81,7 @@ run \ '[{"text":"+1 +10 ","color":"#3296fa","bold":false,"italic":false},{"text":"+100 ","color":"gray","bold":false,"italic":false},{"text":"max","color":"#3296fa","bold":false,"italic":false}]' execute \ - if score #can_increase tmp matches 10..99 \ + if score #can_increase ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_1 \ run \ @@ -89,7 +89,7 @@ run \ '[{"text":"+1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" +10 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"+100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 10..99 \ + if score #can_increase ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_10 \ run \ @@ -97,7 +97,7 @@ run \ '[{"text":"+1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"+10","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" +100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 10..99 \ + if score #can_increase ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/max \ run \ @@ -106,7 +106,7 @@ run \ # 1..0 execute \ - if score #can_increase tmp matches 1..9 \ + if score #can_increase ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/add_1 \ unless predicate wallstreet:villager/gui/hover/add_10 \ @@ -117,7 +117,7 @@ run \ '[{"text":"+1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"+10 +100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 1..9 \ + if score #can_increase ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/add_1 \ run \ @@ -125,7 +125,7 @@ run \ '[{"text":"+1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" +10 +100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"max","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_increase tmp matches 1..9 \ + if score #can_increase ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/max \ run \ @@ -133,7 +133,7 @@ run \ '[{"text":"+1","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":" +10 +100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"max","color":"#3296fa","bold":false,"italic":false,"underlined":true}]' # 0 -execute if score #can_increase tmp matches ..0 run \ +execute if score #can_increase ctx matches ..0 run \ data modify entity @e[tag=wallstreet.villager.gui.display.increase_quantity,sort=nearest,limit=1] text set value \ '[{"text":"+1 +10 +100 max","color":"gray","bold":false,"italic":false,"underlined":false}]' @@ -141,7 +141,7 @@ execute if score #can_increase tmp matches ..0 run \ # 100.. execute \ - if score #can_decrease tmp matches 100.. \ + if score #can_decrease ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/remove_1 \ unless predicate wallstreet:villager/gui/hover/remove_10 \ @@ -152,7 +152,7 @@ run \ '[{"text":"-1 -10 -100 0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 100.. \ + if score #can_decrease ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_1 \ run \ @@ -160,7 +160,7 @@ run \ '[{"text":"-1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" -10 -100 0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 100.. \ + if score #can_decrease ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_10 \ run \ @@ -168,7 +168,7 @@ run \ '[{"text":"-1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"-10","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" -100 0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 100.. \ + if score #can_decrease ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_100 \ run \ @@ -176,7 +176,7 @@ run \ '[{"text":"-1 -10 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"-100","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" 0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 100.. \ + if score #can_decrease ctx matches 100.. \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/0 \ run \ @@ -185,7 +185,7 @@ run \ # 10..99 execute \ - if score #can_decrease tmp matches 10..99 \ + if score #can_decrease ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/remove_1 \ unless predicate wallstreet:villager/gui/hover/remove_10 \ @@ -196,7 +196,7 @@ run \ '[{"text":"-1 -10 ","color":"#3296fa","bold":false,"italic":false},{"text":"-100 ","color":"gray","bold":false,"italic":false},{"text":"0","color":"#3296fa","bold":false,"italic":false}]' execute \ - if score #can_decrease tmp matches 10..99 \ + if score #can_decrease ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_1 \ run \ @@ -204,7 +204,7 @@ run \ '[{"text":"-1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" -10 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"-100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 10..99 \ + if score #can_decrease ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_10 \ run \ @@ -212,7 +212,7 @@ run \ '[{"text":"-1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"-10","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" -100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 10..99 \ + if score #can_decrease ctx matches 10..99 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/0 \ run \ @@ -221,7 +221,7 @@ run \ # 1..0 execute \ - if score #can_decrease tmp matches 1..9 \ + if score #can_decrease ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ unless predicate wallstreet:villager/gui/hover/remove_1 \ unless predicate wallstreet:villager/gui/hover/remove_10 \ @@ -232,7 +232,7 @@ run \ '[{"text":"-1 ","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":"-10 -100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 1..9 \ + if score #can_decrease ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/remove_1 \ run \ @@ -240,7 +240,7 @@ run \ '[{"text":"-1","color":"#3296fa","bold":false,"italic":false,"underlined":true},{"text":" -10 -100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"0","color":"#3296fa","bold":false,"italic":false,"underlined":false}]' execute \ - if score #can_decrease tmp matches 1..9 \ + if score #can_decrease ctx matches 1..9 \ as @p[tag=wallstreet.villager.client] \ if predicate wallstreet:villager/gui/hover/0 \ run \ @@ -248,6 +248,6 @@ run \ '[{"text":"-1","color":"#3296fa","bold":false,"italic":false,"underlined":false},{"text":" -10 -100 ","color":"gray","bold":false,"italic":false,"underlined":false},{"text":"0","color":"#3296fa","bold":false,"italic":false,"underlined":true}]' # 0 -execute if score #can_decrease tmp matches ..0 run \ +execute if score #can_decrease ctx matches ..0 run \ data modify entity @e[tag=wallstreet.villager.gui.display.decrease_quantity,sort=nearest,limit=1] text set value \ '[{"text":"-1 -10 -100 0","color":"gray","bold":false,"italic":false,"underlined":false}]' diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/transaction_value.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/transaction_value.mcfunction index d4bffa0..316ddea 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/transaction_value.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/transaction_value.mcfunction @@ -1,10 +1,10 @@ -scoreboard players operation #transaction_value tmp = #quantity tmp +scoreboard players operation #transaction_value ctx = #quantity ctx -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #transaction_value tmp *= @s wallstreet.wood_price -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #transaction_value tmp *= @s wallstreet.stone_price -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #transaction_value tmp *= @s wallstreet.leather_price -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #transaction_value tmp *= @s wallstreet.iron_price -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #transaction_value tmp *= @s wallstreet.diamond_price +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #transaction_value ctx *= @s wallstreet.wood_price +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #transaction_value ctx *= @s wallstreet.stone_price +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #transaction_value ctx *= @s wallstreet.leather_price +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #transaction_value ctx *= @s wallstreet.iron_price +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #transaction_value ctx *= @s wallstreet.diamond_price -data modify entity @e[tag=wallstreet.villager.gui.display.transaction_value,sort=nearest,limit=1] text set value '[{"score":{"name":"#transaction_value","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' +data modify entity @e[tag=wallstreet.villager.gui.display.transaction_value,sort=nearest,limit=1] text set value '[{"score":{"name":"#transaction_value","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false}]' diff --git a/minigames/data/wallstreet/functions/villager/gui/refresh/villager_info.mcfunction b/minigames/data/wallstreet/functions/villager/gui/refresh/villager_info.mcfunction index 84d9cf6..42e12be 100644 --- a/minigames/data/wallstreet/functions/villager/gui/refresh/villager_info.mcfunction +++ b/minigames/data/wallstreet/functions/villager/gui/refresh/villager_info.mcfunction @@ -1,47 +1,47 @@ -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #quantity tmp = @s wallstreet.wood_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #quantity tmp = @s wallstreet.stone_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #quantity tmp = @s wallstreet.leather_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #quantity tmp = @s wallstreet.iron_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #quantity tmp = @s wallstreet.diamond_quantity - -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock tmp = @s wallstreet.wood_max_quantity -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock tmp = @s wallstreet.stone_max_quantity -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock tmp = @s wallstreet.leather_max_quantity -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock tmp = @s wallstreet.iron_max_quantity -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock tmp = @s wallstreet.diamond_max_quantity - -execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #price tmp = @s wallstreet.wood_price -execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #price tmp = @s wallstreet.stone_price -execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #price tmp = @s wallstreet.leather_price -execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #price tmp = @s wallstreet.iron_price -execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #price tmp = @s wallstreet.diamond_price +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #quantity ctx = @s wallstreet.wood_current_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #quantity ctx = @s wallstreet.stone_current_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #quantity ctx = @s wallstreet.leather_current_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #quantity ctx = @s wallstreet.iron_current_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #quantity ctx = @s wallstreet.diamond_current_stock + +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock ctx = @s wallstreet.wood_max_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock ctx = @s wallstreet.stone_max_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock ctx = @s wallstreet.leather_max_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock ctx = @s wallstreet.iron_max_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock ctx = @s wallstreet.diamond_max_stock + +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #price ctx = @s wallstreet.wood_price +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #price ctx = @s wallstreet.stone_price +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #price ctx = @s wallstreet.leather_price +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #price ctx = @s wallstreet.iron_price +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #price ctx = @s wallstreet.diamond_price execute \ if entity @s[tag=wallstreet.villager.quantity.limited_by_villager_stock] \ unless entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ run \ - data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' + data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' execute \ unless entity @s[tag=wallstreet.villager.quantity.limited_by_villager_stock] \ if entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ run \ - data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' + data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' execute \ if entity @s[tag=wallstreet.villager.quantity.limited_by_villager_stock] \ if entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ run \ - data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' + data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' execute unless entity @s[tag=wallstreet.villager.quantity.limited_by_villager_stock] \ unless entity @s[tag=wallstreet.villager.quantity.limited_by_client_budget] \ - run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' + run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info,sort=nearest,limit=1] text set value '[{"score":{"name":"#price","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false},{"text":"/item\\n","color":"gray","bold":false},{"score":{"name":"#quantity","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false,"italic":false}]' # Max stock execute unless entity @s[tag=wallstreet.villager.quantity.limited_by_villager_max_stock] \ - run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info.max_stock,sort=nearest,limit=1] text set value '[{"text":"Max stock: ","color":"white","bold":false},{"score":{"name":"#max_stock","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false}]' + run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info.max_stock,sort=nearest,limit=1] text set value '[{"text":"Max stock: ","color":"white","bold":false},{"score":{"name":"#max_stock","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":" items","color":"gray","bold":false}]' execute if entity @s[tag=wallstreet.villager.quantity.limited_by_villager_max_stock] \ - run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info.max_stock,sort=nearest,limit=1] text set value '[{"text":"Max stock: ","color":"white","bold":false},{"score":{"name":"#max_stock","objective":"tmp"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false}]' \ No newline at end of file + run data modify entity @e[tag=wallstreet.villager.gui.display.villager_info.max_stock,sort=nearest,limit=1] text set value '[{"text":"Max stock: ","color":"white","bold":false},{"score":{"name":"#max_stock","objective":"ctx"},"color":"red","bold":true,"italic":true},{"text":" items","color":"gray","bold":false}]' \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/lock/check.mcfunction b/minigames/data/wallstreet/functions/villager/lock/check.mcfunction index 4eb8106..4aeab02 100644 --- a/minigames/data/wallstreet/functions/villager/lock/check.mcfunction +++ b/minigames/data/wallstreet/functions/villager/lock/check.mcfunction @@ -1,8 +1,8 @@ tag @s remove wallstreet.villager.locked -scoreboard players operation #lock_time tmp = #lock_date tmp -scoreboard players operation #lock_time tmp -= #wallstreet.timer data +scoreboard players operation #lock_time ctx = #lock_date ctx +scoreboard players operation #lock_time ctx -= #wallstreet.timer data -execute if score #lock_time tmp < #wallstreet.villager.lock_time data if score #lock_time tmp matches 0.. run tag @s add wallstreet.villager.locked +execute if score #lock_time ctx < #wallstreet.villager.lock_time data if score #lock_time ctx matches 0.. run tag @s add wallstreet.villager.locked execute if entity @s[tag=wallstreet.villager.locked] run function wallstreet:villager/lock/message diff --git a/minigames/data/wallstreet/functions/villager/lock/get.mcfunction b/minigames/data/wallstreet/functions/villager/lock/get.mcfunction index b9c4fcd..ceefed7 100644 --- a/minigames/data/wallstreet/functions/villager/lock/get.mcfunction +++ b/minigames/data/wallstreet/functions/villager/lock/get.mcfunction @@ -1,4 +1,4 @@ -scoreboard players set #lock_date tmp 0 -$execute store result score #lock_date tmp run data get entity @s data.wallstreet.locked_clients.$(user) 1 -execute if score #lock_date tmp matches 0 run scoreboard players set #lock_date tmp 2147483647 \ No newline at end of file +scoreboard players set #lock_date ctx 0 +$execute store result score #lock_date ctx run data get entity @s data.wallstreet.locked_clients.$(user) 1 +execute if score #lock_date ctx matches 0 run scoreboard players set #lock_date ctx 2147483647 \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/lock/message.mcfunction b/minigames/data/wallstreet/functions/villager/lock/message.mcfunction index ac68de6..a95aff5 100644 --- a/minigames/data/wallstreet/functions/villager/lock/message.mcfunction +++ b/minigames/data/wallstreet/functions/villager/lock/message.mcfunction @@ -1,5 +1,5 @@ -scoreboard players operation #lock_time tmp -= #wallstreet.villager.lock_time data -scoreboard players operation #lock_time tmp /= 20 const -scoreboard players operation #lock_time tmp *= -1 const +scoreboard players operation #lock_time ctx -= #wallstreet.villager.lock_time data +scoreboard players operation #lock_time ctx /= 20 const +scoreboard players operation #lock_time ctx *= -1 const -tellraw @s [{"text":"WALLSTREET > ","color":"yellow","bold":true,"italic":true},{"text":"Come back in ","color":"red","bold":false,"italic":false},{"score":{"name":"#lock_time","objective":"tmp"}},{"text":" seconds to talk again to ","color":"red","bold":false,"italic":false},{"selector":"@e[tag=wallstreet.villager,limit=1,sort=nearest]","color":"yellow","bold":false,"italic":false}] \ No newline at end of file +tellraw @s [{"text":"WALLSTREET > ","color":"yellow","bold":true,"italic":true},{"text":"Come back in ","color":"red","bold":false,"italic":false},{"score":{"name":"#lock_time","objective":"ctx"}},{"text":" seconds to talk again to ","color":"red","bold":false,"italic":false},{"selector":"@e[tag=wallstreet.villager,limit=1,sort=nearest]","color":"yellow","bold":false,"italic":false}] \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/refresh_price/all.mcfunction b/minigames/data/wallstreet/functions/villager/refresh_price/all.mcfunction index 00682bb..e995793 100644 --- a/minigames/data/wallstreet/functions/villager/refresh_price/all.mcfunction +++ b/minigames/data/wallstreet/functions/villager/refresh_price/all.mcfunction @@ -1,32 +1,32 @@ -scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.wood_quantity -scoreboard players operation #wallstreet.get_price.max_quantity data = @s wallstreet.wood_max_quantity -scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.wood_global_price data +scoreboard players operation #current_stock input = @s wallstreet.wood_current_stock +scoreboard players operation #max_stock input = @s wallstreet.wood_max_stock +scoreboard players operation #price_index input = #wallstreet.model.wood.price_index data function wallstreet:economy_model/get_price -scoreboard players operation @s wallstreet.wood_price = #wallstreet.get_price.price data +scoreboard players operation @s wallstreet.wood_price = #price output -scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.stone_quantity -scoreboard players operation #wallstreet.get_price.max_quantity data = @s wallstreet.stone_max_quantity -scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.stone_global_price data +scoreboard players operation #current_stock input = @s wallstreet.stone_current_stock +scoreboard players operation #max_stock input = @s wallstreet.stone_max_stock +scoreboard players operation #price_index input = #wallstreet.model.stone.price_index data function wallstreet:economy_model/get_price -scoreboard players operation @s wallstreet.stone_price = #wallstreet.get_price.price data +scoreboard players operation @s wallstreet.stone_price = #price output -scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.leather_quantity -scoreboard players operation #wallstreet.get_price.max_quantity data = @s wallstreet.leather_max_quantity -scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.leather_global_price data +scoreboard players operation #current_stock input = @s wallstreet.leather_current_stock +scoreboard players operation #max_stock input = @s wallstreet.leather_max_stock +scoreboard players operation #price_index input = #wallstreet.model.leather.price_index data function wallstreet:economy_model/get_price -scoreboard players operation @s wallstreet.leather_price = #wallstreet.get_price.price data +scoreboard players operation @s wallstreet.leather_price = #price output -scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.iron_quantity -scoreboard players operation #wallstreet.get_price.max_quantity data = @s wallstreet.iron_max_quantity -scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.iron_global_price data +scoreboard players operation #current_stock input = @s wallstreet.iron_current_stock +scoreboard players operation #max_stock input = @s wallstreet.iron_max_stock +scoreboard players operation #price_index input = #wallstreet.model.iron.price_index data function wallstreet:economy_model/get_price -scoreboard players operation @s wallstreet.iron_price = #wallstreet.get_price.price data +scoreboard players operation @s wallstreet.iron_price = #price output -scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.diamond_quantity -scoreboard players operation #wallstreet.get_price.max_quantity data = @s wallstreet.diamond_max_quantity -scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.diamond_global_price data +scoreboard players operation #current_stock input = @s wallstreet.diamond_current_stock +scoreboard players operation #max_stock input = @s wallstreet.diamond_max_stock +scoreboard players operation #price_index input = #wallstreet.model.diamond.price_index data function wallstreet:economy_model/get_price -scoreboard players operation @s wallstreet.diamond_price = #wallstreet.get_price.price data +scoreboard players operation @s wallstreet.diamond_price = #price output scoreboard players operation #wood_price data = @s wallstreet.wood_price scoreboard players operation #stone_price data = @s wallstreet.stone_price diff --git a/minigames/data/wallstreet/functions/villager/refresh_price/selected.mcfunction b/minigames/data/wallstreet/functions/villager/refresh_price/selected.mcfunction index 46e43fd..0f89d8d 100644 --- a/minigames/data/wallstreet/functions/villager/refresh_price/selected.mcfunction +++ b/minigames/data/wallstreet/functions/villager/refresh_price/selected.mcfunction @@ -1,51 +1,31 @@ -execute if score @s wallstreet.selected_resource matches 0 run \ - scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.wood_quantity -execute if score @s wallstreet.selected_resource matches 0 run \ - scoreboard players operation #wallstreet.get_price.global_quantity data = #wallstreet.model.wood_global_stock data -execute if score @s wallstreet.selected_resource matches 0 run \ - scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.wood_global_price data - -execute if score @s wallstreet.selected_resource matches 1 run \ - scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.stone_quantity -execute if score @s wallstreet.selected_resource matches 1 run \ - scoreboard players operation #wallstreet.get_price.global_quantity data = #wallstreet.model.stone_global_stock data -execute if score @s wallstreet.selected_resource matches 1 run \ - scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.stone_global_price data - -execute if score @s wallstreet.selected_resource matches 2 run \ - scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.leather_quantity -execute if score @s wallstreet.selected_resource matches 2 run \ - scoreboard players operation #wallstreet.get_price.global_quantity data = #wallstreet.model.leather_global_stock data -execute if score @s wallstreet.selected_resource matches 2 run \ - scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.leather_global_price data - -execute if score @s wallstreet.selected_resource matches 3 run \ - scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.iron_quantity -execute if score @s wallstreet.selected_resource matches 3 run \ - scoreboard players operation #wallstreet.get_price.global_quantity data = #wallstreet.model.iron_global_stock data -execute if score @s wallstreet.selected_resource matches 3 run \ - scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.iron_global_price data - -execute if score @s wallstreet.selected_resource matches 4 run \ - scoreboard players operation #wallstreet.get_price.quantity data = @s wallstreet.diamond_quantity -execute if score @s wallstreet.selected_resource matches 4 run \ - scoreboard players operation #wallstreet.get_price.global_quantity data = #wallstreet.model.diamond_global_stock data -execute if score @s wallstreet.selected_resource matches 4 run \ - scoreboard players operation #wallstreet.get_price.global_price data = #wallstreet.model.diamond_global_price data +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #current_stock input = @s wallstreet.wood_current_stock +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #max_stock input = @s wallstreet.wood_max_stock +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation #price_index input = #wallstreet.model.wood.price_index data + +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #current_stock input = @s wallstreet.stone_current_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #max_stock input = @s wallstreet.stone_max_stock +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation #price_index input = #wallstreet.model.stone.price_index data + +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #current_stock input = @s wallstreet.leather_current_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #max_stock input = @s wallstreet.leather_max_stock +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation #price_index input = #wallstreet.model.leather.price_index data + +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #current_stock input = @s wallstreet.iron_current_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #max_stock input = @s wallstreet.iron_max_stock +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation #price_index input = #wallstreet.model.iron.price_index data + +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #current_stock input = @s wallstreet.diamond_current_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #max_stock input = @s wallstreet.diamond_max_stock +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation #price_index input = #wallstreet.model.diamond.price_index data function wallstreet:economy_model/get_price -execute if score @s wallstreet.selected_resource matches 0 run \ - scoreboard players operation @s wallstreet.wood_price = #wallstreet.get_price.price data -execute if score @s wallstreet.selected_resource matches 1 run \ - scoreboard players operation @s wallstreet.stone_price = #wallstreet.get_price.price data -execute if score @s wallstreet.selected_resource matches 2 run \ - scoreboard players operation @s wallstreet.leather_price = #wallstreet.get_price.price data -execute if score @s wallstreet.selected_resource matches 3 run \ - scoreboard players operation @s wallstreet.iron_price = #wallstreet.get_price.price data -execute if score @s wallstreet.selected_resource matches 4 run \ - scoreboard players operation @s wallstreet.diamond_price = #wallstreet.get_price.price data +execute if score @s wallstreet.selected_resource matches 0 run scoreboard players operation @s wallstreet.wood_price = #price output +execute if score @s wallstreet.selected_resource matches 1 run scoreboard players operation @s wallstreet.stone_price = #price output +execute if score @s wallstreet.selected_resource matches 2 run scoreboard players operation @s wallstreet.leather_price = #price output +execute if score @s wallstreet.selected_resource matches 3 run scoreboard players operation @s wallstreet.iron_price = #price output +execute if score @s wallstreet.selected_resource matches 4 run scoreboard players operation @s wallstreet.diamond_price = #price output scoreboard players operation #wood_price data = @s wallstreet.wood_price scoreboard players operation #stone_price data = @s wallstreet.stone_price diff --git a/minigames/data/wallstreet/functions/villager/summon/all.mcfunction b/minigames/data/wallstreet/functions/villager/summon/all.mcfunction index 1e90605..dcab396 100644 --- a/minigames/data/wallstreet/functions/villager/summon/all.mcfunction +++ b/minigames/data/wallstreet/functions/villager/summon/all.mcfunction @@ -68,7 +68,5 @@ function wallstreet:villager/summon/one { \ chair_z: 141 \ } - - scoreboard players set #wallstreet.generate_all data 0 execute as @e[tag=wallstreet.villager_marker] at @s run function wallstreet:economy_model/initial_resources_supply \ No newline at end of file diff --git a/minigames/data/wallstreet/functions/villager/transaction/buy.mcfunction b/minigames/data/wallstreet/functions/villager/transaction/buy.mcfunction index f2f5d2f..3cdc543 100644 --- a/minigames/data/wallstreet/functions/villager/transaction/buy.mcfunction +++ b/minigames/data/wallstreet/functions/villager/transaction/buy.mcfunction @@ -1,72 +1,72 @@ # Old quantity -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #old_quantity tmp = @p[tag=wallstreet.villager.client] wallstreet.wood_quantity -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #old_quantity tmp = @p[tag=wallstreet.villager.client] wallstreet.stone_quantity -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #old_quantity tmp = @p[tag=wallstreet.villager.client] wallstreet.leather_quantity -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #old_quantity tmp = @p[tag=wallstreet.villager.client] wallstreet.iron_quantity -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #old_quantity tmp = @p[tag=wallstreet.villager.client] wallstreet.diamond_quantity +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #old_quantity ctx = @p[tag=wallstreet.villager.client] wallstreet.wood_current_stock +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #old_quantity ctx = @p[tag=wallstreet.villager.client] wallstreet.stone_current_stock +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #old_quantity ctx = @p[tag=wallstreet.villager.client] wallstreet.leather_current_stock +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #old_quantity ctx = @p[tag=wallstreet.villager.client] wallstreet.iron_current_stock +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #old_quantity ctx = @p[tag=wallstreet.villager.client] wallstreet.diamond_current_stock # Old price -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #old_price tmp = @p[tag=wallstreet.villager.client] wallstreet.wood_price -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #old_price tmp = @p[tag=wallstreet.villager.client] wallstreet.stone_price -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #old_price tmp = @p[tag=wallstreet.villager.client] wallstreet.leather_price -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #old_price tmp = @p[tag=wallstreet.villager.client] wallstreet.iron_price -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #old_price tmp = @p[tag=wallstreet.villager.client] wallstreet.diamond_price +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #old_price ctx = @p[tag=wallstreet.villager.client] wallstreet.wood_price +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #old_price ctx = @p[tag=wallstreet.villager.client] wallstreet.stone_price +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #old_price ctx = @p[tag=wallstreet.villager.client] wallstreet.leather_price +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #old_price ctx = @p[tag=wallstreet.villager.client] wallstreet.iron_price +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #old_price ctx = @p[tag=wallstreet.villager.client] wallstreet.diamond_price # New quantity -scoreboard players operation #new_quantity tmp = @s wallstreet.selected_quantity +scoreboard players operation #new_quantity ctx = @s wallstreet.selected_quantity # New price -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #new_price tmp = @s wallstreet.wood_price -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #new_price tmp = @s wallstreet.stone_price -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #new_price tmp = @s wallstreet.leather_price -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #new_price tmp = @s wallstreet.iron_price -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #new_price tmp = @s wallstreet.diamond_price +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #new_price ctx = @s wallstreet.wood_price +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #new_price ctx = @s wallstreet.stone_price +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #new_price ctx = @s wallstreet.leather_price +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #new_price ctx = @s wallstreet.iron_price +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #new_price ctx = @s wallstreet.diamond_price -scoreboard players operation #new_price tmp *= 1000 const +scoreboard players operation #new_price ctx *= 1000 const # Computing the new average price -scoreboard players operation #old tmp = #old_quantity tmp -scoreboard players operation #old tmp *= #old_price tmp +scoreboard players operation #old ctx = #old_quantity ctx +scoreboard players operation #old ctx *= #old_price ctx -scoreboard players operation #new tmp = #new_quantity tmp -scoreboard players operation #new tmp *= #new_price tmp +scoreboard players operation #new ctx = #new_quantity ctx +scoreboard players operation #new ctx *= #new_price ctx -scoreboard players operation #weighted_sum tmp = #old tmp -scoreboard players operation #weighted_sum tmp += #new tmp +scoreboard players operation #weighted_sum ctx = #old ctx +scoreboard players operation #weighted_sum ctx += #new ctx -scoreboard players operation #total_weights tmp = #old_quantity tmp -scoreboard players operation #total_weights tmp += #new_quantity tmp +scoreboard players operation #total_weights ctx = #old_quantity ctx +scoreboard players operation #total_weights ctx += #new_quantity ctx -scoreboard players operation #average_price tmp = #weighted_sum tmp -scoreboard players operation #average_price tmp /= #total_weights tmp +scoreboard players operation #average_price ctx = #weighted_sum ctx +scoreboard players operation #average_price ctx /= #total_weights ctx # Set the new player quantity -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_quantity += @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_quantity += @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_quantity += @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_quantity += @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_quantity += @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_current_stock += @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_current_stock += @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_current_stock += @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_current_stock += @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_current_stock += @s wallstreet.selected_quantity # Set the new player average resource price -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_price = #average_price tmp -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_price = #average_price tmp -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_price = #average_price tmp -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_price = #average_price tmp -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_price = #average_price tmp +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_price = #average_price ctx +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_price = #average_price ctx +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_price = #average_price ctx +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_price = #average_price ctx +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_price = #average_price ctx # Remove player coins -scoreboard players operation #billing tmp = #new_quantity tmp -scoreboard players operation #billing tmp *= #new_price tmp -scoreboard players operation #billing tmp /= 1000 const -scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.budget -= #billing tmp +scoreboard players operation #billing ctx = #new_quantity ctx +scoreboard players operation #billing ctx *= #new_price ctx +scoreboard players operation #billing ctx /= 1000 const +scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.budget -= #billing ctx # Remove villager quantity -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @s wallstreet.wood_quantity -= @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @s wallstreet.stone_quantity -= @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @s wallstreet.leather_quantity -= @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @s wallstreet.iron_quantity -= @s wallstreet.selected_quantity -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @s wallstreet.diamond_quantity -= @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @s wallstreet.wood_current_stock -= @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @s wallstreet.stone_current_stock -= @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @s wallstreet.leather_current_stock -= @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @s wallstreet.iron_current_stock -= @s wallstreet.selected_quantity +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @s wallstreet.diamond_current_stock -= @s wallstreet.selected_quantity execute as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^0.2 ^-0.3 ^2 run summon text_display ~ ~ ~ {text:'{"text":""}',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1.5f,1.5f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.give"],background:0,teleport_duration:1} diff --git a/minigames/data/wallstreet/functions/villager/transaction/sell.mcfunction b/minigames/data/wallstreet/functions/villager/transaction/sell.mcfunction index c5ae680..6974bb1 100644 --- a/minigames/data/wallstreet/functions/villager/transaction/sell.mcfunction +++ b/minigames/data/wallstreet/functions/villager/transaction/sell.mcfunction @@ -1,63 +1,63 @@ # Get price -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #price tmp = @s wallstreet.wood_price -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #price tmp = @s wallstreet.stone_price -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #price tmp = @s wallstreet.leather_price -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #price tmp = @s wallstreet.iron_price -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #price tmp = @s wallstreet.diamond_price -scoreboard players operation #price tmp *= 1000 const +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #price ctx = @s wallstreet.wood_price +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #price ctx = @s wallstreet.stone_price +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #price ctx = @s wallstreet.leather_price +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #price ctx = @s wallstreet.iron_price +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #price ctx = @s wallstreet.diamond_price +scoreboard players operation #price ctx *= 1000 const # Get quantity -scoreboard players operation #quantity tmp = @s wallstreet.selected_quantity +scoreboard players operation #quantity ctx = @s wallstreet.selected_quantity # Update villager quantity -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @s wallstreet.wood_quantity += #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @s wallstreet.stone_quantity += #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @s wallstreet.leather_quantity += #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @s wallstreet.iron_quantity += #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @s wallstreet.diamond_quantity += #quantity tmp +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @s wallstreet.wood_current_stock += #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @s wallstreet.stone_current_stock += #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @s wallstreet.leather_current_stock += #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @s wallstreet.iron_current_stock += #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @s wallstreet.diamond_current_stock += #quantity ctx # Get average bought price -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #average_value tmp = @p[tag=wallstreet.villager.client] wallstreet.wood_price -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #average_value tmp = @p[tag=wallstreet.villager.client] wallstreet.stone_price -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #average_value tmp = @p[tag=wallstreet.villager.client] wallstreet.leather_price -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #average_value tmp = @p[tag=wallstreet.villager.client] wallstreet.iron_price -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #average_value tmp = @p[tag=wallstreet.villager.client] wallstreet.diamond_price +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation #average_value ctx = @p[tag=wallstreet.villager.client] wallstreet.wood_price +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation #average_value ctx = @p[tag=wallstreet.villager.client] wallstreet.stone_price +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation #average_value ctx = @p[tag=wallstreet.villager.client] wallstreet.leather_price +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation #average_value ctx = @p[tag=wallstreet.villager.client] wallstreet.iron_price +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation #average_value ctx = @p[tag=wallstreet.villager.client] wallstreet.diamond_price # Update player quantity -execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_quantity -= #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_quantity -= #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_quantity -= #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_quantity -= #quantity tmp -execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_quantity -= #quantity tmp +execute if entity @s[scores={wallstreet.selected_resource=0}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.wood_current_stock -= #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=1}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.stone_current_stock -= #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=2}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.leather_current_stock -= #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=3}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.iron_current_stock -= #quantity ctx +execute if entity @s[scores={wallstreet.selected_resource=4}] run scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.diamond_current_stock -= #quantity ctx # Update player budget -scoreboard players operation #billing_3 tmp = #quantity tmp -scoreboard players operation #billing_3 tmp *= #price tmp -scoreboard players operation #billing tmp = #billing_3 tmp -scoreboard players operation #billing tmp /= 1000 const -scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.budget += #billing tmp - -scoreboard players operation #profit tmp = #quantity tmp -scoreboard players operation #profit tmp *= #average_value tmp -scoreboard players operation #profit tmp *= -1 const -scoreboard players operation #profit tmp /= 1000 const -scoreboard players operation #profit tmp += #billing tmp +scoreboard players operation #billing_3 ctx = #quantity ctx +scoreboard players operation #billing_3 ctx *= #price ctx +scoreboard players operation #billing ctx = #billing_3 ctx +scoreboard players operation #billing ctx /= 1000 const +scoreboard players operation @p[tag=wallstreet.villager.client] wallstreet.budget += #billing ctx + +scoreboard players operation #profit ctx = #quantity ctx +scoreboard players operation #profit ctx *= #average_value ctx +scoreboard players operation #profit ctx *= -1 const +scoreboard players operation #profit ctx /= 1000 const +scoreboard players operation #profit ctx += #billing ctx # Relative diff -scoreboard players operation #diff tmp = #billing_3 tmp -scoreboard players operation #diff tmp /= #quantity tmp -scoreboard players operation #diff tmp *= 100 const -scoreboard players operation #diff tmp /= #average_value tmp -scoreboard players operation #diff tmp -= 100 const +scoreboard players operation #diff ctx = #billing_3 ctx +scoreboard players operation #diff ctx /= #quantity ctx +scoreboard players operation #diff ctx *= 100 const +scoreboard players operation #diff ctx /= #average_value ctx +scoreboard players operation #diff ctx -= 100 const -scoreboard players operation #profit_abs tmp = #profit tmp -execute if score #profit tmp matches ..-1 run scoreboard players operation #profit_abs tmp *= -1 const +scoreboard players operation #profit_abs ctx = #profit ctx +execute if score #profit ctx matches ..-1 run scoreboard players operation #profit_abs ctx *= -1 const -execute if score #profit tmp matches 1.. at @p[tag=wallstreet.villager.client] run playsound entity.player.levelup master @a[distance=..10] ~ ~ ~ 1 1 0 -execute if score #profit tmp matches 1.. as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^ ^0.5 ^1.3 run summon text_display ~ ~ ~ {text:'[{"text":"YOU MADE ","color":"green","bold":true,"italic":true},{"score":{"name":"#profit","objective":"tmp"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":" PROFIT!","color":"green","bold":true,"italic":true},{"text":" (+","color":"green","bold":false,"italic":false},{"score":{"name":"#diff","objective":"tmp"},"color":"green","bold":false,"italic":false},{"text":"%)","color":"green","bold":false,"italic":false}]',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1f,1f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.benefits"],background:1677721600,teleport_duration:1} -execute if score #profit tmp matches ..-1 at @p[tag=wallstreet.villager.client] run playsound entity.villager.hurt master @a[distance=..10] ~ ~ ~ 1 1 0 -execute if score #profit tmp matches ..-1 as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^ ^0.5 ^1.3 run summon text_display ~ ~ ~ {text:'[{"text":"YOU LOST ","color":"red","bold":true,"italic":true},{"score":{"name":"#profit_abs","objective":"tmp"},"color":"tellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":" (","color":"red","bold":false,"italic":false},{"score":{"name":"#diff","objective":"tmp"},"color":"red","bold":false,"italic":false},{"text":"%)","color":"red","bold":false,"italic":false}]',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1f,1f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.benefits"],background:1677721600,teleport_duration:1} +execute if score #profit ctx matches 1.. at @p[tag=wallstreet.villager.client] run playsound entity.player.levelup master @a[distance=..10] ~ ~ ~ 1 1 0 +execute if score #profit ctx matches 1.. as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^ ^0.5 ^1.3 run summon text_display ~ ~ ~ {text:'[{"text":"YOU MADE ","color":"green","bold":true,"italic":true},{"score":{"name":"#profit","objective":"ctx"},"color":"yellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":" PROFIT!","color":"green","bold":true,"italic":true},{"text":" (+","color":"green","bold":false,"italic":false},{"score":{"name":"#diff","objective":"ctx"},"color":"green","bold":false,"italic":false},{"text":"%)","color":"green","bold":false,"italic":false}]',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1f,1f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.benefits"],background:1677721600,teleport_duration:1} +execute if score #profit ctx matches ..-1 at @p[tag=wallstreet.villager.client] run playsound entity.villager.hurt master @a[distance=..10] ~ ~ ~ 1 1 0 +execute if score #profit ctx matches ..-1 as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^ ^0.5 ^1.3 run summon text_display ~ ~ ~ {text:'[{"text":"YOU LOST ","color":"red","bold":true,"italic":true},{"score":{"name":"#profit_abs","objective":"ctx"},"color":"tellow","bold":true,"italic":true},{"text":"","color":"white","bold":false,"italic":false},{"text":" (","color":"red","bold":false,"italic":false},{"score":{"name":"#diff","objective":"ctx"},"color":"red","bold":false,"italic":false},{"text":"%)","color":"red","bold":false,"italic":false}]',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1f,1f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.benefits"],background:1677721600,teleport_duration:1} execute as @e[tag=wallstreet.villager.talking,limit=1,sort=nearest] at @s anchored eyes positioned ^-0.2 ^-0.3 ^1 run summon text_display ~ ~ ~ {text:'{"text":""}',transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1.5f,1.5f,1f]},Tags:["wallstreet.entity","wallstreet.villager.gui.new","wallstreet.villager.gui.get"],background:0,teleport_duration:1} @@ -119,26 +119,26 @@ execute if entity @s[scores={wallstreet.selected_resource=4}] run tellraw @a[tea {"selector":"@e[tag=wallstreet.villager,limit=1,sort=nearest]","color":"yellow","bold":false,"italic":false} \ ] -execute if score #profit tmp matches 1.. run tellraw @a[team=wallstreet] [ \ +execute if score #profit ctx matches 1.. run tellraw @a[team=wallstreet] [ \ {"text":"WALLSTREET > ","color":"yellow","bold":true,"italic":true}, \ {"selector":"@p[tag=wallstreet.villager.client]","color":"green","bold":false,"italic":false}, \ {"text":" made ","color":"green","bold":false,"italic":false}, \ - {"score":{"name":"#profit","objective":"tmp"},"color":"yellow","bold":true,"italic":true}, \ + {"score":{"name":"#profit","objective":"ctx"},"color":"yellow","bold":true,"italic":true}, \ {"text":" ","color":"white","bold":false,"italic":false}, \ {"text":"profit!","color":"green","bold":false,"italic":false}, \ {"text":" (+","color":"green","bold":false,"italic":false}, \ - {"score":{"name":"#diff","objective":"tmp"},"color":"green","bold":false,"italic":false}, \ + {"score":{"name":"#diff","objective":"ctx"},"color":"green","bold":false,"italic":false}, \ {"text":"%)","color":"green","bold":false,"italic":false} \ ] -execute if score #profit tmp matches ..-1 run tellraw @a[team=wallstreet] [ \ +execute if score #profit ctx matches ..-1 run tellraw @a[team=wallstreet] [ \ {"text":"WALLSTREET > ","color":"yellow","bold":true,"italic":true}, \ {"selector":"@p[tag=wallstreet.villager.client]","color":"red","bold":false,"italic":false}, \ {"text":" lost ","color":"red","bold":false,"italic":false}, \ - {"score":{"name":"#profit_abs","objective":"tmp"},"color":"yellow","bold":true,"italic":true}, \ + {"score":{"name":"#profit_abs","objective":"ctx"},"color":"yellow","bold":true,"italic":true}, \ {"text":"","color":"white","bold":false,"italic":false}, \ {"text":" (","color":"red","bold":false,"italic":false}, \ - {"score":{"name":"#diff","objective":"tmp"},"color":"red","bold":false,"italic":false}, \ + {"score":{"name":"#diff","objective":"ctx"},"color":"red","bold":false,"italic":false}, \ {"text":"%)","color":"red","bold":false,"italic":false} \ ] diff --git a/minigames/wolstreet_wolf.ipynb b/minigames/wolstreet_wolf.ipynb index cf0d1a4..6ba3034 100644 --- a/minigames/wolstreet_wolf.ipynb +++ b/minigames/wolstreet_wolf.ipynb @@ -333,7 +333,7 @@ "outputs": [ { "data": { - "image/png": "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PD09VfZbWFjA1dVVqvOg6OhoODk5SZtyEjkRERHVTWonREIIyGSyKuXZ2dmws7PTSFBKFRUV6NChAxYuXIj27dtj/PjxCA8Px9q1azV6ngfNmjULeXl50qacRE5ERER1U62X3b/44osAAJlMhrCwMFhZWUn7ysvLcerUKXTr1k2jwXl7e6NFixYqZYGBgfj1118BAF5eXgCAzMxMeHt7S3UyMzPRrl07qU5WVpbKMcrKypCTkyN9/kFWVlYq7SMiIqK6rdY9RMrhIyEEHBwcVIaUvLy8MH78eHz77bcaDS44OBgpKSkqZRcuXEDDhg0BAP7+/vDy8sKePXuk/fn5+UhKSkJQUBAAICgoCLm5uTh69KhUZ+/evaioqOB9k4iIiAiAGj1E69atAwD4+flh2rRpGh8eq87bb7+Nbt26YeHChRg2bBj+/PNPfPHFF/jiiy8A3OutmjJlChYsWICAgAD4+/tjzpw58PHxweDBgwHc61Hq27evNNRWWlqKiRMnYsSIEbVaYUZERER1n0Ye7qpN27Ztw6xZs5Camgp/f39MnToV4eHh0n4hBKKiovDFF18gNzcXTz/9NNasWaOy4i0nJwcTJ07Ef//7X5iZmWHo0KFYuXIl7O3taxUDl90TEREZH3V+v2uVEHXo0AF79uyBi4sL2rdvX+2kaqVjx46pH7GBY0JERERkfNT5/a7VkNmgQYOkScbKoSgiIiKiusLgh8wMAXuIiIiIjI9W71RNREREVNfUasjMxcXlofOGKqvuLtZEREREhqxWCdHy5cul19nZ2ViwYAFCQ0Ole/0kJiZi586dmDNnjlaCJCIiItImtecQDR06FL169cLEiRNVylevXo3du3dj8+bNmozPIHAOERERkfHR6hyinTt3om/fvlXK+/bti927d6t7OCIiIiK9UzshcnNzw5YtW6qUb9myBW5ubhoJioiIiEiXav3oDqX58+dj3LhxiIuLk54FlpSUhB07duDLL7/UeIBERERE2qZ2QhQWFobAwECsXLkSGzduBHDveWEHDhzgw1KJiIjIKPHGjLXASdVERETGR+s3Zrx06RJmz56NV155BVlZWQCA33//HWfPnn2cwxERERHpldoJUXx8PFq3bo2kpCT8+uuvKCgoAACcPHkSUVFRGg+QiIiISNvUTohmzpyJBQsWIDY2FnK5XCp/9tlncejQ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UpCeni7dNTsoKAgffvghsrKypEeOxMbGwtHRsdq5UERERGR61E6IgHuP6+jTpw/69Omj6XhUODg4oFWrVipldnZ2cHNzk8rHjh2LqVOnwtXVFY6Ojpg0aRKCgoLQtWtXAECfPn3QokUL/Pvf/8aSJUuQkZGB2bNnIyIiAlZWVlqNn4iIiIxDrRKilStXYvz48bC2tsbKlSsfWvett97SSGC19cknn8DMzAxDhw5FcXExQkNDsWbNGmm/ubk5tm3bhgkTJiAoKAh2dnYYPXo03n//fZ3GSURERIZLJoQQj6rk7++PI0eOwM3NDf7+/jUfTCardgWascvPz4eTkxPy8vI4n4iIiMhIqPP7XaseorS0tGpfExEREdUFaq0yKy0tRePGjZGcnKyteIiIiIh0Tq2EyNLSEkVFRdqKhYiIiEgv1L4PUUREBBYvXmxUT4snIiIiehi1l90fPnwYe/bswa5du9C6desqj+vYuHGjxoIjIiIi0gW1EyJnZ2fpJohEREREdYHaCdG6deu0EQcRERGR3tR6DlFFRQUWL16M4OBgPPXUU5g5cybu3r2rzdiIiIiIdKLWCdGHH36Id999F/b29qhXrx5WrFiBiIgIbcZGREREpBO1Toi++eYbrFmzBjt37sTmzZvx3//+F9999x0qKiq0GR8RERGR1tU6IUpPT0f//v2l9yEhIZDJZLh27ZpWAiMiIiLSlVonRGVlZbC2tlYps7S0RGlpqcaDIiIiItKlWq8yE0IgLCwMVlZWUllRURHeeOMNlXsR8T5EREREZGxqnRCNHj26Stmrr76q0WCIiIiI9KHWCRHvP0RERER1ldrPMiMiIiKqa5gQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJo8JEREREZk8JkRERERk8pgQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJo8JEREREZk8JkRERERk8pgQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJs+gE6Lo6Gg89dRTcHBwgKen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", + "image/png": "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PD09VfZbWFjA1dVVqvOg6OhoODk5SZtyEjkRERHVTWonREIIyGSyKuXZ2dmws7PTSFBKFRUV6NChAxYuXIj27dtj/PjxCA8Px9q1azV6ngfNmjULeXl50qacRE5ERER1U62X3b/44osAAJlMhrCwMFhZWUn7ysvLcerUKXTr1k2jwXl7e6NFixYqZYGBgfj1118BAF5eXgCAzMxMeHt7S3UyMzPRrl07qU5WVpbKMcrKypCTkyN9/kFWVlYq7SMiIqK6rdY9RMrhIyEEHBwcVIaUvLy8MH78eHz77bcaDS44OBgpKSkqZRcuXEDDhg0BAP7+/vDy8sKePXuk/fn5+UhKSkJQUBAAICgoCLm5uTh69KhUZ+/evaioqOB9k4iIiAiAGj1E69atAwD4+flh2rRpGh8eq87bb7+Nbt26YeHChRg2bBj+/PNPfPHFF/jiiy8A3OutmjJlChYsWICAgAD4+/tjzpw58PHxweDBgwHc61Hq27evNNRWWlqKiRMnYsSIEbVaYUZERER1n0Ye7qpN27Ztw6xZs5Camgp/f39MnToV4eHh0n4hBKKiovDFF18gNzcXTz/9NNasWaOy4i0nJwcTJ07Ef//7X5iZmWHo0KFYuXIl7O3taxUDl90TEREZH3V+v2uVEHXo0AF79uyBi4sL2rdvX+2kaqVjx46pH7GBY0JERERkfNT5/a7VkNmgQYOkScbKoSgiIiKiusLgh8wMAXuIiIiIjI9W71RNREREVNfUasjMxcXlofOGKqvuLtZEREREhqxWCdHy5cul19nZ2ViwYAFCQ0Ole/0kJiZi586dmDNnjlaCJCIiItImtecQDR06FL169cLEiRNVylevXo3du3dj8+bNmozPIHAOERERkfHR6hyinTt3om/fvlXK+/bti927d6t7OCIiIiK9UzshcnNzw5YtW6qUb9myBW5ubhoJioiIiEiXav3oDqX58+dj3LhxiIuLk54FlpSUhB07duDLL7/UeIBERERE2qZ2QhQWFobAwECsXLkSGzduBHDveWEHDhzgw1KJiIjIKPHGjLXASdVERETGR+s3Zrx06RJmz56NV155BVlZWQCA33//HWfPnn2cwxERERHpldoJUXx8PFq3bo2kpCT8+uuvKCgoAACcPHkSUVFRGg+QiIiISNvUTohmzpyJBQsWIDY2FnK5XCp/9tlncejQ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UpCeni7dNTsoKAgffvghsrKypEeOxMbGwtHRsdq5UERERGR61E6IgHuP6+jTpw/69Omj6XhUODg4oFWrVipldnZ2cHNzk8rHjh2LqVOnwtXVFY6Ojpg0aRKCgoLQtWtXAECfPn3QokUL/Pvf/8aSJUuQkZGB2bNnIyIiAlZWVlqNn4iIiIxDrRKilStXYvz48bC2tsbKlSsfWvett97SSGC19cknn8DMzAxDhw5FcXExQkNDsWbNGmm/ubk5tm3bhgkTJiAoKAh2dnYYPXo03n//fZ3GSURERIZLJoQQj6rk7++PI0eOwM3NDf7+/jUfTCardgWascvPz4eTkxPy8vI4n4iIiMhIqPP7XaseorS0tGpfExEREdUFaq0yKy0tRePGjZGcnKyteIiIiIh0Tq2EyNLSEkVFRdqKhYiIiEgv1L4PUUREBBYvXmxUT4snIiIiehi1l90fPnwYe/bswa5du9C6desqj+vYuHGjxoIjIiIi0gW1EyJnZ2fpJohEREREdYHaCdG6deu0EQcRERGR3tR6DlFFRQUWL16M4OBgPPXUU5g5cybu3r2rzdiIiIiIdKLWCdGHH36Id999F/b29qhXrx5WrFiBiIgIbcZGREREpBO1Toi++eYbrFmzBjt37sTmzZvx3//+F9999x0qKiq0GR8RERGR1tU6IUpPT0f//v2l9yEhIZDJZLh27ZpWAiMiIiLSlVonRGVlZbC2tlYps7S0RGlpqcaDIiIiItKlWq8yE0IgLCwMVlZWUllRURHeeOMNlXsR8T5EREREZGxqnRCNHj26Stmrr76q0WCIiIiI9KHWCRHvP0RERER1ldrPMiMiIiKqa5gQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJo8JEREREZk8JkRERERk8pgQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJo8JEREREZk8JkRERERk8pgQERERkcljQkREREQmjwkRERERmTwmRERERGTymBARERGRyWNCRERERCaPCRERERGZPCZEREREZPKYEBEREZHJY0JEREREJs+gE6Lo6Gg89dRTcHBwgKen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", "text/plain": [ "
" ]