options: #--------------------------------------------------------------------- #Internal configurations: command: /vandal aliases: /van, /vandalcheat #The location were Vandal saves data. FileLoc: plugins/Vandal/ ConsolePrefix: &7[&eVandal&7] &r #--------------------------------------------------------------------- #!Don't touch the options below unless you know what you're doing. #VarPrefix is the prefix placed before the variable. {HERE::*} #SKRIPT DEVELOPERS: #Recommened that you delete the list variable of the existing variable #before changing this variable name, Example: #!delete {Vandal::*}) VarPrefix: Vandal version: 1.0.1 function VandalYMLSave(file: text = "none", empty: integer = 0): if {_file} is "config" or "menu": set {_nodes::*} to yaml nodes with keys "%{_file}%" from file "{@FileLoc}%{_file}%.yml" loop {_nodes::*}: set {{@VarPrefix}::%{_file}%::%loop-value%} to yaml value "%{_file}%.%loop-value%" from file "{@FileLoc}%{_file}%.yml" else: add "config" and "menu" to {_files::*} loop {_files::*}: set {_nodes::*} to yaml nodes with keys "%loop-value%" from file "{@FileLoc}%loop-value%.yml" loop {_nodes::*}: set {{@VarPrefix}::%loop-value-1%::%loop-value-2%} to yaml value "%loop-value-1%.%loop-value-2%" from file "{@FileLoc}%loop-value-1%.yml" function VandalYML(file: text, data: text, node: text = "empty", object: text = "empty") :: text: if {_file} is "config" or "menu": if {_data} is "write" or "set": set yaml value "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml" to "%{_object}%" VandalYMLSave("%{_file}%") exit if {_data} is "listadd": add "%{_object}%" to yaml list "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml" VandalYMLSave("%{_file}%") exit if {_data} is "listremove": remove "%{_object}%" from yaml list "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml" VandalYMLSave("%{_file}%") exit else if {_data} is "read" or "get": VandalYMLSave("%{_file}%") return "%{{@VarPrefix}::%{_file}%::%{_node}%}%" function VandalYMLKeys(file: text, data: text, node: text = "empty", object: text = "empty") :: objects: if {_file} is "config" or "menu": if {_data} is "keys": return yaml nodes with keys "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml" else if {_data} is "keynumbers": loop yaml nodes with keys "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml": set {_object} to the first 2 characters of "%loop-value%" if {_object} doesn't contain ".": if {_numbers::*} is not set: add "%{_object}%" parsed as integer to {_numbers::*} else if {_numbers::*} doesn't contain {_object}: add "%{_object}%" parsed as integer to {_numbers::*} return {_numbers::*} else if {_data} is "readlist": return yaml list "%{_file}%.%{_node}%" from file "{@FileLoc}%{_file}%.yml" function VandalOpenMenu(menu: text, p: player): if VandalYML("menu", "read", "Menus") doesn't contain "%{_menu}%": message "{@ConsolePrefix}&cMenu %{_menu}% doesn't exist. If you have a configuration setup for it, add it to the menus list in the menu.yml" to console stop set {_num} to "%{{@VarPrefix}::menu::%{_menu}%.size}%" parsed as integer if {_num} > 6: set {_num} to 6 if {_num} <= 0: set {_num} to 1 loop VandalYMLKeys("menu", "keynumbers", "%{_menu}%.items"): set {_slot} to {{@VarPrefix}::menu::%{_menu}%.items.%loop-value%.slot} parsed as integer set {_data::%{_slot}%} to {{@VarPrefix}::menu::%{_menu}%.items.%loop-value%.item} parsed as itemtype set {_name::%{_slot}%} to {{@VarPrefix}::menu::%{_menu}%.items.%loop-value%.name} set {_lore::%{_slot}%} to {{@VarPrefix}::menu::%{_menu}%.items.%loop-value%.lore} open "%{{@VarPrefix}::menu::%{_menu}%.type}%" with {_num} rows named "%{{@VarPrefix}::menu::%{_menu}%.name}%" to {_p} loop {_data::*}: set {_item} to "%loop-value%" parsed as itemtype set {_slot} to "%loop-index%" parsed as integer if {_lore::%{_slot}%} is not "": set slot {_slot} of {_p}'s current inventory to {_item} named {_name::%{_slot}%} with lore {_lore::%{_slot}%} else: set slot {_slot} of {_p}'s current inventory to {_item} named {_name::%{_slot}%} function VandalPremadeMenu(menu: text, p: player): if {_menu} is not "Toggles": message "{@ConsolePrefix}&cPremade Menu %{_menu}% doesn't exist." to console stop if {_menu} is "Toggles": open "CHEST" with 1 row named "%{{@VarPrefix}::menu::PremadeMenus.%{_menu}%.name}%" to {_p} set {_slot} to 0 loop {{@VarPrefix}::temp::hacks::*}: if {{@VarPrefix}::config::Hacks.%loop-value%.Enabled} is "true": set {_item} to "%{{@VarPrefix}::menu::PremadeMenus.%{_menu}%.enabledItem.item}%" parsed as item set {_name} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.enabledItem.name} set {_lore} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.enabledItem.lore} else: set {_item} to "%{{@VarPrefix}::menu::PremadeMenus.%{_menu}%.disabledItem.item}%" parsed as item set {_name} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.disabledItem.name} set {_lore} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.disabledItem.lore} set {_name} to join VandalPlaceholder({_name}, {_p}, loop-value) with "Functions are stupid sometimes" set {_lore} to join VandalPlaceholder({_lore}, {_p}, loop-value) with "Functions are stupid sometimes" if {_lore} is not "": set slot {_slot} of {_p}'s current inventory to {_item} named {_name} with lore {_lore} else: set slot {_slot} of {_p}'s current inventory to {_item} named {_name} set {_item} to "%{{@VarPrefix}::menu::PremadeMenus.%{_menu}%.back.item}%" parsed as item set {_name} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.back.name} set {_lore} to {{@VarPrefix}::menu::PremadeMenus.%{_menu}%.back.lore} set {_name} to join VandalPlaceholder({_name}, {_p}) with "Functions are stupid sometimes" set {_lore} to join VandalPlaceholder({_lore}, {_p}) with "Functions are stupid sometimes" if {_lore} is not "": set slot 8 of {_p}'s current inventory to {_item} named {_name} with lore {_lore} else: set slot 8 of {_p}'s current inventory to {_item} named {_name} function VandalPlaceholder(msg: text, p: player, hack: text = "none") :: string: replace all "{PLAYER}" with "%{_p}%" in {_msg} replace all "{PING}" with "%ping of {_p}%" in {_msg} if {{@VarPrefix}::temp::player::%{_p}%::hacks::killaura} is set: replace all "{KILLAURA_CPS}" with "%{{@VarPrefix}::temp::player::%{_p}%::hacks::killaura}%" in {_msg} if {{@VarPrefix}::temp::player::%{_p}%::cheat::packets} is set: replace all "{PACKETS}" with "%{{@VarPrefix}::temp::player::%{_p}%::cheat::packets}%" in {_msg} if {{@VarPrefix}::temp::player::%{_p}%::cheat::highestPacket::*} is set: loop {{@VarPrefix}::temp::player::%{_p}%::cheat::highestPacket::*}: set {_packet} to loop-index set {_value} to loop-value exit loop replace all "{HIGHEST_PACKET}" with "%{_packet}%" in {_msg} replace all "{HIGHEST_VALUE}" with "%{_value}%" in {_msg} if {_hack} is not "none": replace all "{HACK}" with "%{_hack}%" in {_msg} replace all "{HACKSTATE}" with "%{{@VarPrefix}::config::Hacks.%{_hack}%.Enabled}%" in {_msg} if {{@VarPrefix}::config::Hacks.%{_hack}%.Enabled} is "true": replace all "{ANTIHACKSTATE}" with "false" in {_msg} replace all "{ANTIHACKSTATECOLOUR}" and "{ANTIHACKSTATECOLOR}" with "&c" in {_msg} replace all "{HACKSTATECOLOUR}" and "{HACKSTATECOLOR}" with "&a" in {_msg} else: replace all "{ANTIHACKSTATE}" with "true" in {_msg} replace all "{ANTIHACKSTATECOLOUR}" and "{ANTIHACKSTATECOLOR}" with "&a" in {_msg} replace all "{HACKSTATECOLOUR}" and "{HACKSTATECOLOR}" with "&c" in {_msg} return "%{_msg}%" function VandalKillauraTest(empty: text = "none"): loop all players: if {{@VarPrefix}::temp::player::%loop-player%::testing::killaura} is not set: clear {_npc} clear {_entity} set {{@VarPrefix}::temp::player::%loop-player%::testing::killaura} to true VandalKillauraTest() set {_npc} to a npc with name "%random player out of all players%" and entity type "PLAYER" spawn npc {_npc} at location of loop-player set the protected state of npc {_npc} to false set {_entity} to entity from npc {_npc} set {_armour::*} to all diamond armour, all gold armour, all iron armour and all leather armour loop random integer between 1 and 6 times: equip {_entity} with random item out of {_armour::*} give {_entity} a sword set {_time} to 0 ticks while {_time} <= "%{{@VarPrefix}::config::Hacks.Killaura.TestTimeLength}%" parsed as timespan: add 1 tick to {_time} set {_loc} to location 2 blocks behind loop-player add 1.5 to y-coordinate of {_loc} if {_loc} is not location of npc {_npc}: teleport npc {_npc} to {_loc} make npc {_npc} look at loop-player wait a tick if {{@VarPrefix}::temp::player::%loop-player%::hacks::killaura} >= "%{{@VarPrefix}::config::Hacks.Killaura.MaxNpcHits}%" parsed as number: if {_time} <= "%{{@VarPrefix}::config::Hacks.Killaura.MaxNpcHitsTime}%" parsed as timespan: if {{@VarPrefix}::config::Hacks.Killaura.Action} is "Kick": kick loop-player due to VandalPlaceholder({{@VarPrefix}::config::Hacks.Killaura.KickMsg}, loop-player, "Killaura") else if {{@VarPrefix}::config::Hacks.Killaura.Action} is "Ban": ban loop-player due to VandalPlaceholder({{@VarPrefix}::config::Hacks.Killaura.BanMsg}, loop-player, "Killaura") else if {{@VarPrefix}::config::Hacks.Killaura.Action} is "Evaluate": evaluate VandalPlaceholder({{@VarPrefix}::config::Hacks.Killaura.Evaluate}, loop-player, "Killaura") add 1000 seconds to {_time} hackMessage("Killaura", loop-player) else: set {_time} to 0 ticks unregister npc {_npc} delete {{@VarPrefix}::temp::player::%loop-player%::hacks::killaura} delete {{@VarPrefix}::temp::player::%loop-player%::testing::killaura} on npc damage by entity: cancel event add 1 to {{@VarPrefix}::temp::player::%player%::hacks::killaura} on quit: delete {{@VarPrefix}::temp::player::%player%::*} on script load: delete {{@VarPrefix}::temp::*} set {{@VarPrefix}::temp::hacks::*} to "Killaura" if file exists at "{@FileLoc}config.yml" is false: message "{@ConsolePrefix}&cGenerating config.yml" to console if {{@VarPrefix}::config::saveFiles} is "true": loop {{@VarPrefix}::config::*}: set yaml value "%loop-index%" from file "{@FileLoc}config.yml" to "%loop-value%" else: delete {{@VarPrefix}::config::*} VandalYML("config", "write", "version", "{@version}") VandalYML("config", "write", "saveFiles", "false") VandalYML("config", "write", "accessMode", "permissions") VandalYML("config", "write", "prefix", "&8[&6&lVandal&8] &r") VandalYML("config", "write", "prefix", "&8[&6&lVandal&8] &r") VandalYML("config", "write", "permissions.gui", "vandal.gui") VandalYML("config", "write", "permissions.staff", "vandal.staff") VandalYML("config", "listadd", "vandalManagers", "LimeGlass") VandalYML("config", "write", "MaxTimeout", "1000 seconds") VandalYML("config", "write", "Hacks.Killaura.Enabled", "true") VandalYML("config", "write", "Hacks.Killaura.TestEvery", "3 minutes") VandalYML("config", "write", "Hacks.Killaura.TestTimeLength", "15 seconds") VandalYML("config", "write", "Hacks.Killaura.MaxNpcHits", "25") VandalYML("config", "write", "Hacks.Killaura.MaxNpcHitsTime", "1.5 seconds") VandalYML("config", "write", "Hacks.Killaura.Action", "Kick") VandalYML("config", "write", "Hacks.Killaura.KickMsg", "&cKillaura is not allowed on this server {PLAYER}") VandalYML("config", "write", "Hacks.Killaura.BanMsg", "&cKillaura is not allowed on this server {PLAYER}") VandalYML("config", "write", "Hacks.Killaura.Evaluate", "staffWarn(""Killaura"", {PLAYER})") VandalYML("config", "write", "Hacks.Killaura.MessageStaff", "true") VandalYML("config", "write", "Hacks.Killaura.Message", "&c{PLAYER} &7suspected of Killaura! (CPS: {KILLAURA_CPS})") VandalYML("config", "write", "Hacks.TooManyPackets.Enabled", "true") VandalYML("config", "write", "Hacks.TooManyPackets.MaxPackets", "2500") VandalYML("config", "write", "Hacks.TooManyPackets.Action", "Kick") VandalYML("config", "write", "Hacks.TooManyPackets.KickMsg", "&cYou are sending too many packets!") VandalYML("config", "write", "Hacks.TooManyPackets.BanMsg", "&cYou have been banned for sending too many packets!") VandalYML("config", "write", "Hacks.TooManyPackets.Evaluate", "staffWarn(""TooManyPackets"", {PLAYER})") VandalYML("config", "write", "Hacks.TooManyPackets.MessageStaff", "true") VandalYML("config", "write", "Hacks.TooManyPackets.Message", "&c{PLAYER} &7suspected of TooManyPackets! Most sent packet: {HIGHEST_PACKET} ({HIGHEST_VALUE})") if file exists at "{@FileLoc}menu.yml" is false: message "{@ConsolePrefix}&cGenerating menu.yml" to console if {{@VarPrefix}::config::saveFiles} is "true": loop {{@VarPrefix}::menu::*}: set yaml value "%loop-index%" from file "{@FileLoc}menu.yml" to "%loop-value%" else: delete {{@VarPrefix}::menu::*} VandalYML("menu", "listadd", "Menus", "mainmenu") VandalYML("menu", "write", "mainmenu.type", "HOPPER") VandalYML("menu", "write", "mainmenu.size", "3") VandalYML("menu", "write", "mainmenu.name", " &4&l&nVandal Menu") VandalYML("menu", "write", "mainmenu.items.1.slot", "0") VandalYML("menu", "write", "mainmenu.items.1.item", "beacon") VandalYML("menu", "write", "mainmenu.items.1.name", "&6&lHack toggles") VandalYML("menu", "write", "mainmenu.items.1.lore", "&7You can toggle any||&7tracked hacked here.") VandalYML("menu", "write", "mainmenu.items.1.evaluate", "{PREMADEGUI} toggles") VandalYML("menu", "write", "mainmenu.items.2.slot", "2") VandalYML("menu", "write", "mainmenu.items.2.item", "command block") VandalYML("menu", "write", "mainmenu.items.2.name", "&6&lSystem settings") VandalYML("menu", "write", "mainmenu.items.2.lore", "&7You can toggle any||&7system settings here.||&4&lComing soon!") VandalYML("menu", "write", "mainmenu.items.3.slot", "4") VandalYML("menu", "write", "mainmenu.items.3.item", "chest minecart") VandalYML("menu", "write", "mainmenu.items.3.name", "&6&lVersion and developer") VandalYML("menu", "write", "mainmenu.items.3.evaluate", "message ""&a&l-------------------------------------"" to player;message centered "" "", ""&6&l&nVandal Anti-Cheat&r"", "" "", ""&fDeveloped by: &a&lLimeGlass"" and ""&fVersion: &6&l{@version}"" to player;message ""&a&l-------------------------------------"" to player") VandalYML("menu", "write", "PremadeMenus.Toggles.name", " &4&l&nVandal Toggles") VandalYML("menu", "write", "PremadeMenus.Toggles.enabledItem.item", "light green stained clay") VandalYML("menu", "write", "PremadeMenus.Toggles.enabledItem.name", "&a&l{HACK}") VandalYML("menu", "write", "PremadeMenus.Toggles.enabledItem.lore", "&7{HACK} is currently {HACKSTATECOLOUR}{HACKSTATE}||&7Click to {ANTIHACKSTATECOLOUR}{ANTIHACKSTATE} &r&7{HACK} checking.") VandalYML("menu", "write", "PremadeMenus.Toggles.disabledItem.item", "red stained clay") VandalYML("menu", "write", "PremadeMenus.Toggles.disabledItem.name", "&c&l{HACK}") VandalYML("menu", "write", "PremadeMenus.Toggles.disabledItem.lore", "&7{HACK} is currently {HACKSTATECOLOUR}{HACKSTATE}||&7Click to {ANTIHACKSTATECOLOUR}{ANTIHACKSTATE} &r&7{HACK} checking.") VandalYML("menu", "write", "PremadeMenus.Toggles.back.item", "nether star") VandalYML("menu", "write", "PremadeMenus.Toggles.back.name", "&6&lBack") VandalYML("menu", "write", "PremadeMenus.Toggles.back.lore", "&7Go back to mainmenu.") VandalYMLSave() wait 2 seconds set {{@VarPrefix}::temp::running} to true while {{@VarPrefix}::temp::running} is set: add 1 tick to {{@VarPrefix}::temp::time} wait a tick if {{@VarPrefix}::config::Hacks.Killaura.Enabled} is "true": if {{@VarPrefix}::temp::time} >= "%{{@VarPrefix}::config::Hacks.Killaura.TestEvery}%" parsed as timespan: VandalKillauraTest() clear {{@VarPrefix}::temp::time} if {{@VarPrefix}::temp::time} >= "%{{@VarPrefix}::config::MaxTimeout}%" parsed as timespan: clear {{@VarPrefix}::temp::time} on script unload: delete {{@VarPrefix}::temp::*} command {@command}: trigger: if {{@VarPrefix}::config::accessMode} is "permissions" or "permission": if player doesn't have permission "%{{@VarPrefix}::config::permissions.gui}%": stop else if {{@VarPrefix}::config::accessMode} is "yaml" or "yml": if VandalYML("config", "read", "vandalManagers") doesn't contain "%player%": stop VandalOpenMenu("mainmenu", player) on inventory click: loop VandalYMLKeys("menu", "readlist", "Menus"): if inventory name of player's current inventory is "%{{@VarPrefix}::menu::%loop-value%.name}%": if "%inventory type of clicked inventory%" is "%{{@VarPrefix}::menu::%loop-value%.type}%": cancel event loop VandalYMLKeys("menu", "keynumbers", "%loop-value%.items"): if clicked item is VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.item") parsed as itemtype: if VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") is not "": if VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") contains "{OPENGUI}" or "{GUI}": set {_menu} to VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") replace all "{OPENGUI} ", "{OPENGUI}", "{GUI} " and "{GUI}" with "" in {_menu} VandalOpenMenu({_menu}, player) else if VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") contains "{PREMADEGUI}" or "{OPENPREMADEGUI}": set {_menu} to VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") replace all "{PREMADEGUI} ", "{PREMADEGUI}", "{OPENPREMADEGUI} " and "{OPENPREMADEGUI}" with "" in {_menu} VandalPremadeMenu({_menu}, player) loop VandalYML("menu", "read", "%loop-value-1%.items.%loop-value-2%.evaluate") split at ";": evaluate loop-value-3 #loop premade menus once there are more: if inventory name of player's current inventory is "%{{@VarPrefix}::menu::PremadeMenus.Toggles.name}%": if "%inventory type of clicked inventory%" is "CHEST": cancel event if clicked slot is 0: if {{@VarPrefix}::config::Hacks.Killaura.Enabled} is "true": set {{@VarPrefix}::config::Hacks.Killaura.Enabled} to "false" else: set {{@VarPrefix}::config::Hacks.Killaura.Enabled} to "true" VandalPremadeMenu("Toggles", player) VandalYML("config", "write", "Hacks.Killaura.Enabled", "%{{@VarPrefix}::config::Hacks.Killaura.Enabled}%") else if clicked slot is 8: VandalOpenMenu("mainmenu", player) function hackMessage(hack: text, user: player): {{@VarPrefix}::config::Hacks.%{_hack}%.MessageStaff} is "true" loop all players: clear {_true} if {{@VarPrefix}::config::accessMode} is "permissions" or "permission": if loop-player has permission "%{{@VarPrefix}::config::permissions.staff}%": set {_true} to true else if {{@VarPrefix}::config::accessMode} is "yaml" or "yml": if VandalYML("config", "read", "vandalManagers") doesn't contain "%loop-player%": set {_true} to true if {_true} is true: set {_msg} to VandalPlaceholder({{@VarPrefix}::config::Hacks.%{_hack}%.Message}, {_user}, {_hack}) message "%{{@VarPrefix}::config::prefix}%%{_msg}%" to loop-player on join: delete {{@VarPrefix}::temp::player::%player%::cheat::*} on script load: wait 2 seconds set {{@VarPrefix}::temp::running} to true if {{@VarPrefix}::config::Hacks.TooManyPackets.MaxPackets} is not set: set {{@VarPrefix}::config::Hacks.TooManyPackets.MaxPackets} to 2500 while {{@VarPrefix}::temp::running} is set: loop all players: if {{@VarPrefix}::temp::player::%loop-player%::cheat::packets} > "%{{@VarPrefix}::config::Hacks.TooManyPackets.MaxPackets}%" parsed as number: loop {{@VarPrefix}::temp::player::%loop-player%::cheat::packets::*}: if {_value} is not set: set {_value} to loop-value-2 set {_packet} to loop-index else if loop-value-2 > {_value}: set {_value} to loop-value-2 set {_packet} to loop-index clear {{@VarPrefix}::temp::player::%loop-player%::cheat::highestPacket::*} set {{@VarPrefix}::temp::player::%loop-player%::cheat::highestPacket::%{_packet}%} to {_value} hackMessage("TooManyPackets", loop-player) if {{@VarPrefix}::config::Hacks.TooManyPackets.Action} is "Kick": kick loop-player due to VandalPlaceholder({{@VarPrefix}::config::Hacks.TooManyPackets.KickMsg}, loop-player, "TooManyPackets") else if {{@VarPrefix}::config::Hacks.TooManyPackets.Action} is "Ban": ban loop-player due to VandalPlaceholder({{@VarPrefix}::config::Hacks.TooManyPackets.BanMsg}, loop-player, "TooManyPackets") else if {{@VarPrefix}::config::Hacks.TooManyPackets.Action} is "Evaluate": evaluate VandalPlaceholder({{@VarPrefix}::config::Hacks.TooManyPackets.Evaluate}, loop-player, "TooManyPackets") clear {{@VarPrefix}::temp::player::%loop-player%::cheat::packets::*} clear {{@VarPrefix}::temp::player::%loop-player%::cheat::packets} wait a second on packet: wait a tick add 1 to {{@VarPrefix}::temp::player::%player%::cheat::packets} add 1 to {{@VarPrefix}::temp::player::%player%::cheat::packets::%event-string%}