options: gameName: stats function kGame_stats_update(nameGame: text, p: player, nameStat: text, newValue: object, if: text = "smaller than"): if {_newValue} is instance of time span: set {_newValue} to {_newValue}.getMilliSeconds() if {kGame::statistics::%{_nameGame}%::%{_nameStat}%} is not set: set {kGame::statistics::%{_nameGame}%::%{_nameStat}%} to true set {_path} to kGame_getPath("kGame_Stats", "statistics") set {_value} to yaml value "statistic.%{_nameGame}%.%{_p}%.%{_nameStat}%" from {_path} if {_value} is not set: set yaml value "statistic.%{_nameGame}%.%{_p}%.%{_nameStat}%" from {_path} to {_newValue} set {kGame::statistics::%{_nameGame}%::%{_nameStat}%::%{_p}%} to {_newValue} stop evaluate "set {_b} to true if {_newValue} is %{_if}% %{_value}% else false" if {_b} is true: set yaml value "statistic.%{_nameGame}%.%{_p}%.%{_nameStat}%" from {_path} to {_newValue} set {kGame::statistics::%{_nameGame}%::%{_nameStat}%::%{_p}%} to {_newValue} stop function kGame_stats_playGame(nameGame: text, p: player): kGame_stats_add({_nameGame}, {_p}) function kGame_stats_add(nameGame: text, p: player, nameStat: text = "played", i: integer=1): if {kGame::statistics::%{_nameGame}%::%{_nameStat}%} is not set: set {kGame::statistics::%{_nameGame}%::%{_nameStat}%} to true set {_path} to kGame_getPath("kGame_Stats", "statistics") set {_games} to yaml value "statistic.%{_nameGame}%.%{_p}%.%{_nameStat}%" from {_path} replace all "" with "0" in {_games} #set {_games} to {_games} parsed as integer add {_i} to {_games} set yaml value "statistic.%{_nameGame}%.%{_p}%.%{_nameStat}%" from {_path} to {_games} set {kGame::statistics::%{_nameGame}%::%{_nameStat}%::%{_p}%} to {_games} function kGame_stats_reloadYaml(t: text) :: boolean: if {_t} is not "stats" or "statistics": return false stop if {_t} is "stats": set {_node} to "inventory" set {_config} to "mainInventory" clear {kGame::stats::mainInventory::inventory::*} else: set {_node} to "statistic" set {_config} to "statistics" set {_path} to kGame_getPath("kGame_Stats", {_config}) set {_nodes::*} to yaml nodes "%{_node}%" from {_path} loop {_nodes::*}: clear {_check} set {_check} to yaml value "%{_node}%.%loop-value%" from {_path} if "%{_check}%" doesn't contain "MemorySection": remove loop-value from {_nodes::*} if {_t} is "stats": set {kGame::stats::mainInventory::inventory::%loop-value%} to {_check} else: set {kGame::statistics::%loop-value%} to {_check} loop {_nodes::*}: set {_nodes.%loop-value%::*} to yaml nodes "%{_node}%.%loop-value%" from {_path} loop {_nodes.%loop-value%::*}: clear {_check} set {_check} to yaml value "%{_node}%.%loop-value-1%.%loop-value-2%" from {_path} if "%{_check}%" doesn't contain "MemorySection": remove loop-value-2 from {_nodes.%loop-value-1%::*} if {_t} is "stats": set {kGame::stats::mainInventory::inventory::%loop-value-1%.%loop-value-2%} to {_check} else: set {kGame::statistics::%loop-value-1%::%loop-value-2%} to {_check} loop {_nodes::*}: loop {_nodes.%loop-value%::*}: set {_nodes.%loop-value-1%.%loop-value-2%::*} to yaml nodes "%{_node}%.%loop-value-1%.%loop-value-2%" from {_path} loop {_nodes.%loop-value-1%.%loop-value-2%::*}: clear {_check} set {_check} to yaml value "%{_node}%.%loop-value-1%.%loop-value-2%.%loop-value-3%" from {_path} if "%{_check}%" doesn't contain "MemorySection": remove loop-value-3 from {_nodes.%loop-value-1%.%loop-value-2%::*} if {_t} is "stats": set {kGame::stats::mainInventory::inventory::%loop-value-1%.%loop-value-2%.%loop-value-3%} to {_check} else: set {kGame::statistics::%loop-value-1%::%loop-value-3%::%loop-value-2%} to {_check} loop {_nodes::*}: loop {_nodes.%loop-value%::*}: loop {_nodes.%loop-value-1%.%loop-value-2%::*}: set {_nodes.%loop-value-1%.%loop-value-2%.%loop-value-3%::*} to yaml nodes "%{_node}%.%loop-value-1%.%loop-value-2%.%loop-value-3%" from {_path} loop {_nodes.%loop-value-1%.%loop-value-2%.%loop-value-3%::*}: clear {_check} set {_check} to yaml value "%{_node}%.%loop-value-1%.%loop-value-2%.%loop-value-3%.%loop-value-4%" from {_path} if "%{_check}%" doesn't contain "MemorySection": remove loop-value-4 from {_nodes.%loop-value-1%.%loop-value-2%.%loop-value-3%::*} if {_t} is "stats": set {kGame::stats::mainInventory::inventory::%loop-value-1%.%loop-value-2%.%loop-value-3%} to {_check} else: set {kGame::statistics::%loop-value-1%.%loop-value-2%::%loop-value-4%::%loop-value-3%} to {_check} return true function kGame_stats_registerGame(nameGame: text, slot: integer, item: item): set {_path} to kGame_getPath("kGame_Stats", "mainInventory") if yaml value "inventory.slot.%{_nameGame}%" from {_path} is not set: set yaml value "inventory.slot.%{_nameGame}%" from {_path} to {_slot} if yaml value "inventory.item.%{_nameGame}%" from {_path} is not set: set yaml value "inventory.item.%{_nameGame}%" from {_path} to kGame_getTextFromItem({_item}) kGame_stats_reloadYaml("stats") function kGame_stats_setLore(nameGame: text, loreItem: text): set {_path} to kGame_getPath("kGame_Stats", "mainInventory") if yaml value "inventory.loreItem.%{_nameGame}%" from {_path} is not set: set yaml value "inventory.loreItem.%{_nameGame}%" from {_path} to {_loreItem} kGame_stats_reloadYaml("stats") on script load: set {_path} to kGame_getPath("kGame_Stats", "mainInventory") if {_path} is not set: send "[Error] PATH kGame_getPath in %script% doesn't exists!" to console stop if yaml value "inventory.name" from {_path} is not set: set yaml value "inventory.name" from {_path} to "&9Statystyki" set yaml value "inventory.rows" from {_path} to 3 set yaml value "inventory.item.exit" from {_path} to "iron door named ""&6Powrot do gier"" with lore ""null""" set yaml value "inventory.slot.exit" from {_path} to 26 if yaml value "inventory.slot.17" from kGame_getPath("kGame_Util", "mainInventory") is not set: set yaml value "inventory.slot.17" from kGame_getPath("kGame_Util", "mainInventory") to "paper named ""&9Statystyki""" kGame_stats_reloadYaml("stats") if {kGame::statistics::*} is not set: kGame_stats_reloadYaml("statistics") kGame_registerGame("{@gameName}", 17, (paper named "&9Statystyki")) on script unload: kGame_unregisterGame("{@gameName}") function kGame_stats_getTop(gameName: text, nameStat: text, sizeOfTop: integer, nameTop: text = "&cTop {_sizeOfTop}") :: string: evaluate "set {_perception} to ""smaller"" if {_sizeOfTop} is smaller than 0 else ""larger""" if {_sizeOfTop} is smaller than 0: set {_sizeOfTop} to "%{_sizeOfTop}%" replace all "-" with "" in {_sizeOfTop} set {_sizeOfTop} to {_sizeOfTop} parsed as integer replace all "{_sizeOfTop}" in {_nameTop} with "%{_sizeOfTop}%:" loop {kGame::statistics::%{_gameName}%::%{_nameStat}%::*}: set {_top::%loop-index%} to loop-value set {_lore} to "&f&n ||||%{_nameTop}%" replace all "{nameStat}" with {_nameStat} in {_lore} replace all "{nameGame}" with {_nameGame} in {_lore} set {_size} to size of {_top::*} loop {_size} times: loop {_top::*}: if {_v.%loop-number%} is not set: set {_v.%loop-number%} to loop-value-2 set {_n.%loop-number%} to loop-index set {_x} to loop-value-2 evaluate "set {_per} to true if {_x} is %{_perception}% than {_v.%loop-number%} else false" if {_per} is true: set {_v.%loop-number%} to loop-value-2 set {_n.%loop-number%} to loop-index clear {_top::%{_n.%loop-number%}%} loop {_sizeOfTop} times: if {_v.%loop-number%} is set: if {_nameStat} contains "time": set {_v.%loop-number%} to kGame_getTime(new Timespan({_v.%loop-number%})) set {_lore} to "%{_lore}%||&c%loop-number%. &f%{_n.%loop-number%}%: &e%{_v.%loop-number%}%" else: set {_lore} to "%{_lore}%||&c%loop-number%. &fBrak" return {_lore} function kGame_stats_getLore(gameName: text, lore: text, p: player) :: string: #Wystąpienia '*topINT:{VAR};NAME' LUB '*top-INT:{VAR};NAME' #Wystąpienia '{var}' if {_lore} contains "*top": set {_isTop} to true set {_firstIndex} to first index of "*top" in {_lore} set {_lastIndex} to last index of "*top" in {_lore} if {_firstIndex} is {_lastIndex}: #Jedno top set {_sizeOfTop} to subtext of {_lore} between index {_firstIndex} + 4 and index index of ":{" in {_lore}-1 set {_sizeOfTop} to {_sizeOfTop} parsed as integer if {_lore} contains "}*": set {_var} to subtext of {_lore} between index {_firstIndex} and index index of "}*" in {_lore}+1 replace all "*" and "top%{_sizeOfTop}%:" and "{" and "}" with "" in {_var} replace all "*top%{_sizeOfTop}%:{%{_var}%}*" in {_lore} with kGame_stats_getTop({_gameName}, {_var}, {_sizeOfTop}) else: set {_var} to subtext of {_lore} between index {_firstIndex} and length of {_lore} set {_nameLore} to subtext of {_var} between index index of ";" in {_var} + 1 and last index of "*" in {_var} - 1 replace all ";%{_nameLore}%*" and "*top%{_sizeOfTop}%:" and "{" and "}" with "" in {_var} replace all "*top%{_sizeOfTop}%:{%{_var}%};%{_nameLore}%*" in {_lore} with kGame_stats_getTop({_gameName}, {_var}, {_sizeOfTop}, {_nameLore}) else: #Więcej topek loop length of {_lore} times: if subtext of {_lore} between index loop-number and (loop-number)+3 is "*top": add loop-number to {_iST::*} else if subtext of {_lore} between index loop-number and loop-number is "*": add loop-number to {_iSP::*} if size of {_iST::*} is size of {_iSP::*}: #Zmiana na: ~ ???????? loop size of {_iST::*} times: set {_tops::%loop-number%} to subtext of {_lore} between index {_iST::%loop-number%} and {_iSP::%loop-number%} loop {_tops::*}: clear {_sizeOfTop}, {_var} and {_nameLore} set {_sizeOfTop} to subtext of loop-value between index 5 and index index of ":{" in (loop-value)-1 set {_sizeOfTop} to {_sizeOfTop} parsed as integer if loop-value contains "}*": set {_var} to subtext of loop-value between index index of ":{" in loop-value + 2 and index index of "}*" in (loop-value) - 1 replace all "*top%{_sizeOfTop}%:{%{_var}%}*" in {_lore} with kGame_stats_getTop({_gameName}, {_var}, {_sizeOfTop}) else: set {_var} to subtext of loop-value between index index of ":{" in (loop-value)+2 and index index of "};" in (loop-value)-1 set {_nameLore} to subtext of loop-value between index index of "};" in (loop-value)+2 and length of (loop-value)-1 replace all "*top%{_sizeOfTop}%:{%{_var}%};%{_nameLore}%*" in {_lore} with kGame_stats_getTop({_gameName}, {_var}, {_sizeOfTop}, {_nameLore}) loop length of {_lore} times: if subtext of {_lore} between index loop-number and loop-number is "{": add loop-number to {_indexStarts::*} if subtext of {_lore} between index loop-number and loop-number is "}": add loop-number to {_indexStops::*} if size of {_indexStarts::*} is size of {_indexStops::*}: loop size of {_indexStarts::*} times: set {_vars::%loop-number%} to subtext of {_lore} between index {_indexStarts::%loop-number%}+1 and {_indexStops::%loop-number%}-1 loop {_vars::*}: if "%loop-value%" contains "time": if {kGame::statistics::%{_gameName}%::%loop-value%::%{_p}%} is set: replace all "{%loop-value%}" with kGame_getTime(new Timespan({kGame::statistics::%{_gameName}%::%loop-value%::%{_p}%})) in {_lore} replace all "{%loop-value%}" with "%{kGame::statistics::%{_gameName}%::%loop-value%::%{_p}%}%" in {_lore} replace all "" with "Brak danych" in {_lore} #Idę zapalić return {_lore} function kGame_stats_getInventory(p: player) :: inventory: set {_rows} to {kGame::stats::mainInventory::inventory::rows} set {_x} to chest with {_rows} rows named coloured {kGame::stats::mainInventory::inventory::name} set {_empty} to kGame_getItemFromText({kGame::mainInventory::inventory::item::empty}) loop {_rows}*9 times: set slot (loop-number) - 1 of {_x} to {_empty} set {_size} to size of {kGame::stats::mainInventory::inventory::*} set {_i} to 0 loop {kGame::stats::mainInventory::inventory::*}: add 1 to {_i} if {_i} is larger than ({_size}/2): exit loop clear {_it} and {_lore} and {_slot} set {_index} to loop-index-1 replace all "item." and "slot." with "" in {_index} set {_it} to kGame_getItemFromText({kGame::stats::mainInventory::inventory::item.%{_index}%}) set {_slot} to {kGame::stats::mainInventory::inventory::slot.%{_index}%} if {_index} contains ".": set {_indexLore} to subtext of {_index} between index 0 and index (index of "." in {_index})-1 else: set {_indexLore} to {_index} if {kGame::stats::mainInventory::inventory::loreItem.%{_indexLore}%} is set: set {_lore} to kGame_stats_getLore({_index}, {kGame::stats::mainInventory::inventory::loreItem.%{_indexLore}%}, {_p}) replace all "||" with nl in {_lore} if "%lore of {_it}%" is "null": set {_itType} to "%type of {_it}%" parsed as item type set {_itName} to name of {_it} set slot "%{_slot}%" parsed as integer of {_x} to {_itType} named {_itName} else: set slot "%{_slot}%" parsed as integer of {_x} to {_it} with lore {_lore} return {_x} on inventory click: if name of player's current inventory is "&9Statystyki": if clicked slot is smaller than 0: stop cancel event if clicked slot is {kGame::stats::mainInventory::inventory::slot.exit}: close player's inventory wait 2 tick open kGame_getInventory(player) to player stop