Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- options:
- #
- # _____ _ _ _ ______ _ _ ___
- # / ____| | (_) | | | ____| | | | | |__ \
- # | (___ | | ___ __ _ _ __ | |_| |__ _ __ | |__ __ _ _ __ ___ ___ __| | ) |
- # \___ \| |/ / '__| | '_ \| __| __| | '_ \| '_ \ / _` | '_ \ / __/ _ \/ _` | / /
- # ____) | <| | | | |_) | |_| |____| | | | | | | (_| | | | | (_| __/ (_| | / /_
- # |_____/|_|\_\_| |_| .__/ \__|______|_| |_|_| |_|\__,_|_| |_|\___\___|\__,_| |____|
- # | |
- # Adds many |_| useful features that enhance the usage of Skript.
- #
- #
- # Script: SkriptEnhanced2
- # Author: Duetro
- # Version: 2.07
- #
- #
- # Dependencies:
- # - Skript 2.3.1 (Bensku's Fork) # Download: https://github.com/SkriptLang/Skript/releases (use 2.3-alpha4 for 1.13)
- # - skript-mirror 0.19.1 # Download: https://skripttools.net/?q=skript-mirror
- # - MundoSK 1.8.6-BETA.55 # Download: https://skripttools.net/?q=MundoSK
- # - ProtocolLib # Download: https://www.spigotmc.org/resources/protocollib.1997/
- #
- # Settings:
- skript_prefix: &7[&bSkript&7] # Default: &7[&bSkript&7]
- skript_color: &6 # Default: &6
- preview_limit: 55 # Default: 55 | Limit of characters in one line while hovering the errors
- notify_ingame: true # Default: true
- check_update: true # Default: true
- metrics: true # Default: true | Please do NOT disable this. It will send only one single HTTP request. If you disable this, you won't get any updates.
- #
- # -> You should not change the code below unless you know what you are doing.
- # -> You should not change the code below unless you know what you are doing.
- # -> You should not change the code below unless you know what you are doing.
- #
- version: 2.07
- skunity: https://forums.skunity.com/resources/skriptenhanced.409/
- import:
- java.lang.System
- java.net.URL
- java.net.URLEncoder
- java.nio.file.Files
- java.io.File
- java.io.BufferedReader
- java.io.InputStream
- java.io.InputStreamReader
- java.io.FileWriter
- java.time.LocalDateTime
- org.apache.commons.io.FileUtils
- org.bukkit.Bukkit
- function SE2_fixPath(path: text) :: text:
- if System.getProperty("file.separator") is "/":
- return {_path}.replace("\", "/")
- return {_path}.replace("/", "\")
- function SE2_fileExists(path: text) :: boolean:
- return new File(SE2_fixPath({_path})).isFile()
- function SE2_fileContent(path: text) :: strings:
- return ...Files.readAllLines(new File(SE2_fixPath({_path})).toPath())
- function SE2_deleteFile(path: text) :: boolean:
- return new File(SE2_fixPath({_path})).delete()
- function SE2_downloadString(url: text) :: strings:
- set {_url} to new URL({_url})
- set {_in} to new BufferedReader(new InputStreamReader({_url}.openStream()))
- set {_count} to 0
- while true:
- set {_content::%{_count}%} to {_in}.readLine()
- if {_content::%{_count}%} isn't set:
- delete {_content::%{_count}%}
- exit loop
- add 1 to {_count}
- {_in}.close()
- return {_content::*}
- function SE2_NL(~:INT=0) :: text:
- return last character of System.getProperty("line.separator")
- function SE2_basename(path: text) :: text:
- if {_path} contains "/" or "\":
- return (last element out of ({_path}.replace("\", "/") split at "/"))
- return {_path}
- function SE2_GetFileList(path: text) :: texts:
- loop ...(new File({_path}).listFiles()):
- if loop-value.isDirectory():
- loop SE2_GetFileList(loop-value.toString()):
- add loop-value-2 to {_files::*}
- else:
- add loop-value.toString() to {_files::*}
- return {_files::*}
- function SE2_setLine(script: text, line: integer, content: text):
- if {_script} contains "..":
- exit
- set {_content::*} to SE2_fileContent(SE2_fixPath("plugins/Skript/scripts/%{_script}%.sk"))
- set {_line} to "%{_line}%"
- set {_fw} to try new FileWriter(SE2_fixPath("plugins/Skript/scripts/%{_script}%.sk") and false)
- loop {_content::*}:
- if loop-index is {_line}:
- {_fw}.write({_content})
- else:
- {_fw}.write(loop-value)
- {_fw}.write(System.getProperty("line.separator"))
- {_fw}.close()
- function SE2_SendMessage(p: player, type: text, message: text):
- if {_type} contains "se.":
- set {_prefix} to "&7[&bSkriptEnhanced&7]"
- replace all "se." in {_type} with ""
- else:
- set {_prefix} to "{@skript_prefix}"
- if {_type} is "error":
- set {_icon} to "&4&l✖&c "
- replace all "&r" in {_message} with "&c"
- else if {_type} is "success":
- set {_icon} to "&2&l✔&a "
- replace all "&r" in {_message} with "&a"
- else:
- set {_icon} to "&f"
- replace all "&r" in {_message} with "&f"
- send "%{_prefix}% %{_icon}%%{_message}%" to {_p}
- command /se2 [<text>] [<text>] [<integer>] [<text>]:
- aliases: /se, /skriptenhanced, /skriptenhanced2
- permission: skript.admin
- trigger:
- if arg-1 is "update":
- SE2_SendMessage(player, "se.info", "Checking for updates...")
- if {SkriptEnhanced::latestversion} isn't set:
- set {_dl::*} to SE2_downloadString("http://api.duetro.de/skriptenhanced/index.php?version={@version}")
- if {_dl::1} isn't set:
- SE2_SendMessage(player, "se.error", "An error as occurred while trying to to check for updates. Please check for Updates manually! Download: {@skunity}")
- exit
- set {SkriptEnhanced::latestversion} to {_dl::1}
- send " &7Current Version: v{@version} (Latest: v%{SkriptEnhanced::latestversion}%)"
- if {@metrics} isn't true:
- SE2_SendMessage(player, "se.error", "Please set 'metrics' to 'true' in the script options.")
- else if {@check_update} isn't true:
- SE2_SendMessage(player, "se.error", "Please set 'check_update' to 'true' in the script options.")
- else if {@notify_ingame} isn't true:
- SE2_SendMessage(player, "se.error", "Please set 'notify_ingame' to 'true' in the script options.")
- else if {SkriptEnhanced::latestversion} is "{@version}":
- SE2_SendMessage(player, "se.success", "You already have the latest Version of SkriptEnhanced!")
- else:
- SE2_SendMessage(player, "se.info", "Deleting SkriptEnhanced...")
- SE2_deleteFile("plugins/Skript/scripts/%script%.sk")
- if SE2_fileExists("plugins/Skript/scripts/%script%.sk"):
- SE2_SendMessage(player, "se.error", "An error as occurred while trying to delete SkriptEnhanced. Please update manually! Download: {@skunity}")
- exit
- SE2_SendMessage(player, "se.info", "Downloading SkriptEnhanced...")
- set {_fw} to try new FileWriter(SE2_fixPath("plugins/Skript/scripts/%script%.sk") and true)
- set {_contents::*} to SE2_downloadString("http://api.duetro.de/skriptenhanced/dl/SkriptEnhanced.sk")
- if {_contents::1} isn't "options:":
- SE2_SendMessage(player, "se.error", "An error as occurred while trying to download the script. Please update manually! Download: {@skunity}")
- exit
- loop {_contents::*}:
- {_fw}.write(loop-value)
- {_fw}.write(System.getProperty("line.separator"))
- {_fw}.close()
- if SE2_fileExists("plugins/Skript/scripts/%script%.sk") isn't true:
- SE2_SendMessage(player, "se.error", "An error as occurred while trying to download the script. Please update manually! Download: {@skunity}")
- exit
- SE2_SendMessage(player, "se.info", "Reloading SkriptEnhanced...")
- execute console command "/skript reload %script%"
- SE2_SendMessage(player, "se.success", "Successfully updated to SkriptEnhanced v%{SkriptEnhanced::latestversion}%!")
- else if arg-1 is "backup":
- SE2_SendMessage(player, "se.info", "Creating Backup of all scripts...")
- set {_} to System.currentTimeMillis()
- set {_ldt} to LocalDateTime.now()
- set {_date} to "%{_ldt}.getYear()%-%{_ldt}.getMonthValue()%-%{_ldt}.getDayOfMonth()%_%{_ldt}.getHour()%-%{_ldt}.getMinute()%-%{_ldt}.getSecond()%"
- set {_source} to new File(SE2_fixPath("plugins/Skript/scripts"))
- set {_destination} to new File(SE2_fixPath("plugins/Skript/backups/scripts_%{_date}%"))
- try FileUtils.copyDirectory({_source}, {_destination})
- if the last java exception is set:
- SE2_SendMessage(player, "se.error", "%the last java exception%")
- else:
- SE2_SendMessage(player, "se.success", "Successfully created a backup of all scripts. &7(%System.currentTimeMillis() - {_}%ms)")
- send " &8&l>&7 Destination: Skript/backups/scripts_%{_date}%/"
- else if arg-1 is "addons":
- SE2_SendMessage(player, "se.info", "Getting a list of latest Addons...")
- set {_json} to join SE2_downloadString("https://api.skripttools.net/v4/addons") by ""
- set {_jsonobject} to {_json} parsed as jsonobject
- put json {_jsonobject} in listvar {_parsedjson::*}
- loop tree of {_parsedjson::*}:
- set {_splitter1::*} to branch split at "::"
- {_splitter1::1} is "data"
- set {_splitter2::*} to loop-value.replace(".jar" and "") split at " "
- delete {_splitter2::1}
- set {_addons::%{_splitter1::2}%.ver} to join {_splitter2::*} by " "
- set {_addons::%{_splitter1::2}%.file} to loop-value
- SE2_SendMessage(player, "se.info", "Installed Addons: &7&o(Click to Download)")
- set {_counter::latest} to 0
- set {_counter::outdated} to 0
- loop ...Bukkit.getPluginManager().getPlugins():
- set {_plugin::lowercase} to loop-value.getName().toLowerCase()
- set {_plugin::name} to loop-value.getName()
- set {_plugin::version} to loop-value.getDescription().getVersion()
- # Fix for some Addons
- if {_plugin::lowercase} is "skquery":
- if "%...loop-value.getDescription().getAuthors()%" contains "LimeGlass":
- set {_plugin::lowercase} to "skquery-lime"
- set {_plugin::name} to "SkQuery-Lime"
- else if {_plugin::lowercase} is "tuske":
- if {_plugin::version} contains "Pikachu-Patch":
- set {_plugin::version} to {_plugin::version}.replace("-Pikachu-Patch-", "-PikachuPatch-v").replace("1.8.2", "1.8.3")
- {_addons::%{_plugin::lowercase}%.ver} is set
- if {_plugin::version} is {_addons::%{_plugin::lowercase}%.ver}:
- send "<command:/ver %{_plugin::name}%> &b%{_plugin::name}% &a&o(latest)<reset>"
- else:
- set {_known} to false
- loop {_parsedjson::data::%{_plugin::lowercase}%::*}:
- if loop-value-2 contains " %{_plugin::version}%.jar":
- set {_known} to true
- set {_current} to loop-index parsed as number
- set {_latest} to loop-index parsed as number
- set {_dlt} to "<tooltip:&9&nhttps://skripttools.net/addons?q=%URLEncoder.encode({_plugin::name})%%SE2_NL()%%SE2_NL()%&cThe new version of this addon &ocould&c break things.%SE2_NL()%&c&oYou should not update without checking for new errors.><url:https://skripttools.net/addons?q=%URLEncoder.encode({_plugin::name})%>"
- if {_known} is true:
- send "%{_dlt}% &b%{_plugin::name}% &c&o(outdated)<reset>"
- else:
- send "%{_dlt}% &b%{_plugin::name}% &c&o(probably outdated)<reset>"
- send "%{_dlt}% &8&l>&7 Installed Version: &e%{_plugin::version}%&7, Found Version: &e%{_addons::%{_plugin::lowercase}%.ver}%"
- if {_known} is true:
- send " &8&l>&7 &oYou are currently %{_latest}-{_current}% version(s) behind latest."
- set {_found} to true
- if {_found} isn't true:
- send " &cThere are no installed addons."
- else:
- if {SkriptEnhanced::latestversion} is "{@version}":
- set {_label} to "latest"
- else:
- set {_label} to "outdated"
- send "Usage: &7/&6se2&b ... &8&l|&7 SkriptEnhanced v{@version} &o(%{_label}%)"
- send " &bbackup &7- &fCreate a backup of the whole scripts folder"
- send " &bupdate &7- &fCheck for updates and download the latest version of SkriptEnhanced"
- send " &baddons &7- &fCheck for updates and download the latest version of any installed Addon"
- on load:
- wait 0.5 seconds
- if {@metrics} is true:
- set {_dl::*} to SE2_downloadString("http://api.duetro.de/skriptenhanced/index.php?version={@version}")
- if {_dl::1} isn't set:
- send "&7[&bSkriptEnhanced&7] &cAn error as occurred while trying to to check for updates. Please check for Updates manually!" to console
- else:
- set {SkriptEnhanced::latestversion} to {_dl::1}
- if {@check_update} is true:
- {SkriptEnhanced::latestversion} isn't "{@version}"
- send "&7[&bSkriptEnhanced&7] &fThere is already a new version of SkriptEnhanced! Please update to get the latest changes and fixes. Download: {@skunity} or use '/se2 update'" to console
- else:
- send "&7[&bSkriptEnhanced&7] &cThere might be a new version of SkriptEnhanced! Please enable 'check_update' or use '/se2 update' to check for updates." to console
- else:
- send "&7[&bSkriptEnhanced&7] &cThere might be a new version of SkriptEnhanced! Please enable 'metrics' or use '/se2 update' to check for updates." to console
- send "&7[&bSkriptEnhanced&7] &fSkriptEnhanced v{@version} by Duetro has been enabled and hooked into Skript!" to console
- on join:
- {@metrics} is true
- {@check_update} is true
- {@notify_ingame} is true
- player has permission "skript.admin"
- {SkriptEnhanced::latestversion} isn't "{@version}"
- wait 15 seconds
- SE2_SendMessage(player, "se.info", "There is already a new version of SkriptEnhanced! Please update to get the latest changes and fixes. <command:/se2 update>{@skript_color}&l× {@skript_color}Click to update {@skript_color}&l×<reset>")
- on tab complete:
- player has permission "skript.admin"
- set {_arg::*} to event-string split at " "
- if {_arg::1} is "/se2", "/skriptenhanced" or "/skriptenhanced2":
- delete completions
- if {_arg::2} is "":
- add "addons", "backup", "update" to completions
- else if {_arg::1} is "/skript" or "/sk":
- delete completions
- if {_arg::2} is "reload" or "disable":
- {_arg::3} is set
- {_arg::4} isn't set
- loop SE2_GetFileList(SE2_fixPath("plugins/Skript/scripts/")):
- set {_scriptpath} to loop-value.replace(SE2_fixPath("plugins/Skript/scripts/") and "").replace("\" and "/")
- set {_scriptname} to SE2_basename({_scriptpath})
- last element out of {_scriptname} split at "." is "sk"
- first character of {_scriptname} isn't "-"
- if length of {_arg::3} > 0:
- if {_arg::3} is the first (length of {_arg::3}) characters of {_scriptpath}:
- add {_scriptpath} to completions
- else if {_arg::3} is the first (length of {_arg::3}) characters of {_scriptname}:
- add {_scriptpath} to completions
- else:
- add {_scriptpath} to completions
- else if {_arg::2} is "enable":
- {_arg::3} is set
- {_arg::4} isn't set
- loop SE2_GetFileList(SE2_fixPath("plugins/Skript/scripts/")):
- set {_scriptpath} to loop-value.replace(SE2_fixPath("plugins/Skript/scripts/") and "").replace("\" and "/")
- set {_scriptname} to SE2_basename({_scriptpath})
- last element out of {_scriptname} split at "." is "sk"
- first character of {_scriptname} is "-"
- if length of {_arg::3} > 0:
- if {_arg::3} is the first (length of {_arg::3}) characters of {_scriptpath}:
- add {_scriptpath} to completions
- else if {_arg::3} is the first (length of {_arg::3}) characters of {_scriptname}:
- add {_scriptpath} to completions
- else:
- add {_scriptpath} to completions
- else if {_arg::2} is "update":
- add "check", "changes" and "download" to completions
- else if {_arg::2} is "":
- add "reload", "enable", "disable", "update" and "help" to completions
- on load:
- loop {SkriptEnhanced.catchErrors::*}:
- delete {SkriptEnhanced.errorLogger::%loop-index%::*}
- delete {SkriptEnhanced.catchErrors::*}
- on quit:
- delete {SkriptEnhanced.errorLogger::%player%::*}
- delete {SkriptEnhanced.catchErrors::%player%}
- function SE2_ChatComponentToText(json: jsonobject) :: text:
- {_json} is set
- put json {_json} in listvar {_json::*}
- loop tree of {_json::extra::*}:
- if branch contains "color":
- set {_color} to "%loop-value%"
- if {_color} contains "_":
- replace all "_" with " " in {_color}
- else if {_color} isn't "black", "white", "yellow" or "gold":
- set {_color} to "light %{_color}%"
- set {_color} to "<%{_color}%>"
- else if branch contains "text":
- if {_color} isn't set:
- set {_color} to "<white>"
- add "%{_color}%%loop-value%" to {_full-text::*}
- delete {_color}
- return join {_full-text::*} by ""
- on packet event play_server_chat:
- if {SkriptEnhanced.catchErrors::%player%} is true:
- set {_message} to SE2_ChatComponentToText("chatcomponent" pjson 0 of event-packet)
- set {_uncolored-message} to uncolored {_message}
- set {_parse::*} to {_uncolored-message} parsed as "%text% \(%text%.sk, line %integer%\: %text%'\)"
- if {_parse::1} is set:
- add {_uncolored-message} to {SkriptEnhanced.errorLogger::%player%::*}
- cancel event
- stop
- else:
- set {_parse::*} to {_uncolored-message} parsed as "A command with the name /%text% is already defined in %text%.sk"
- if {_parse::1} is set:
- add "%{_uncolored-message}% (unknown.sk, line 0: unknown')" to {SkriptEnhanced.errorLogger::%player%::*}
- cancel event
- stop
- else:
- System.currentTimeMillis() - {SkriptEnhanced.reloadTime::%player%} > 50
- delete {SkriptEnhanced.catchErrors::%player%}
- set {_chatcomponent} to "chatcomponent" pjson 0 of event-packet
- {_chatcomponent} is set
- "%{_chatcomponent}%".startsWith("{""extra"":[{""color"":""gray"",""text"":""[""},{""color"":""gold"",""text"":""Skript""},{""color"":""gray"",""text"":""]""}") is true
- cancel event
- set {_message} to SE2_ChatComponentToText("chatcomponent" pjson 0 of event-packet)
- set {_message} to {_message}.replace("&7[&6Skript&7]&f " and "")
- set {_uncolored-message} to uncolored {_message}
- set {_parse::*} to {_uncolored-message} parsed as "(Reloading|Enabling) %string%.sk..."
- if {_parse::1} is set:
- if {_uncolored-message} contains "Reloading":
- SE2_SendMessage(player, "info", "Reloading {@skript_color}%{_parse::1}%.sk&r...")
- else:
- SE2_SendMessage(player, "info", "Enabling {@skript_color}%{_parse::1}%.sk&r...")
- delete {SkriptEnhanced.errorLogger::%player%::*}
- set {SkriptEnhanced.catchErrors::%player%} to true
- set {SkriptEnhanced.reloadTime::%player%} to System.currentTimeMillis()
- stop
- set {_parse::*} to {_uncolored-message} parsed as "Successfully (reloaded|enabled & parsed) %string%.sk."
- if {_parse::1} is set:
- SE2_SendMessage(player, "success", "<tooltip:&7Reloading {@skript_color}%{_parse::1}%.sk&7 took {@skript_color}&l%System.currentTimeMillis()-{SkriptEnhanced.reloadTime::%player%}%ms&7!>Successfully reloaded {@skript_color}%{_parse::1}%.sk&r!<reset>")
- delete {SkriptEnhanced.errorLogger::%player%::*}
- delete {SkriptEnhanced.catchErrors::%player%}
- delete {SkriptEnhanced.reloadTime::%player%}
- stop
- set {_parse::*} to {_uncolored-message} parsed as "Encountered %integer% error[s] while (reloading|parsing) %text%.sk!"
- if {_parse::1} is set:
- delete {SkriptEnhanced.catchErrors::%player%}
- loop {SkriptEnhanced.errorLogger::%player%::*}:
- set {_temp::*} to loop-value parsed as "%text% \(%text%.sk, line %integer%\: %text%'\)"
- set {_filepath} to SE2_fixPath("plugins\Skript\scripts\%{_temp::2}%.sk")
- exit loop
- set {_lines} to 0
- if SE2_fileExists({_filepath}):
- set {_filecontent::*} to SE2_fileContent({_filepath})
- set {_lines} to (amount of {_filecontent::*})
- if {_lines} is 0:
- add "Sorry, the File couldn't be displayed." to {_filecontent::*}
- add "This can happen when Skript prints out errors weirdly." to {_filecontent::*}
- set {_filepath} to SE2_fixPath("plugins\Skript\scripts\unknown.sk")
- set {_lines} to 0
- send "&8&m--------------------------------------------------"
- send ""
- loop {SkriptEnhanced.errorLogger::%player%::*}:
- set {_errorparser::*} to loop-value parsed as "%text% \(%text%.sk, line %integer%\: %text%'\)"
- set {_tooltip} to "&6&lFile:&e /%{_filepath}.replace(""\"" and ""/"").replace(""plugins/Skript/scripts/"" and """")% &7&o(%{_lines}% lines)%SE2_NL()%&8&m-----------------------------------------------------%SE2_NL()%"
- if {_errorparser::1}.startsWith("Empty configuration section!"):
- set {_errorparser::1} to "Empty configuration section!"
- loop 7 times:
- set {_currentLogLine} to ({_errorparser::3}-4)+(loop-value-2)
- {_filecontent::%{_currentLogLine}%} is set
- set {_current-line} to {_filecontent::%{_currentLogLine}%}
- replace all " " and " " in {_current-line} with " "
- if {_currentLogLine} is {_errorparser::3}:
- replace all "&" in {_current-line} with "&&c"
- set {_tooltip} to "%{_tooltip}%&8%{_currentLogLine}%] &c%{_current-line}%%SE2_NL()%&r"
- else:
- replace all "&" in {_current-line} with "&&7"
- if length of {_current-line} > {@preview_limit}:
- set {_current-line} to "%first {@preview_limit}-3 characters of {_current-line}%..."
- set {_tooltip} to "%{_tooltip}%&8%{_currentLogLine}%] &7%{_current-line}%%SE2_NL()%&r"
- set {_tooltip} to "%{_tooltip}%&8&m-----------------------------------------------------%SE2_NL()%"
- set {_tooltip} to "%{_tooltip}%&c&o%{_errorparser::1}.replace(""&"" and ""&&c&o"")%%SE2_NL()%"
- set {_tooltip} to "%{_tooltip}%&8&m-----------------------------------------------------"
- replace all "<" and ">" in {_tooltip} with "?"
- send "<tooltip:%{_tooltip}%>&e&lLine %{_errorparser::3}%: <reset>"
- send "<tooltip:%{_tooltip}%>&7%{_errorparser::1}.replace(""&"" and ""&&7"")%<reset>"
- send ""
- send "&8&m--------------------------------------------------"
- set {_tooltip} to "&7Reloading {@skript_color}%{_parse::2}%.sk&7 took {@skript_color}&l%System.currentTimeMillis()-{SkriptEnhanced.reloadTime::%player%}%ms&7!"
- if {_parse::1} is 1:
- SE2_SendMessage(player, "error", "<tooltip:%{_tooltip}%>Encountered an error while reloading {@skript_color}%{_parse::2}%.sk&r!<reset>")
- else:
- SE2_SendMessage(player, "error", "<tooltip:%{_tooltip}%>Encountered %{_parse::1}% errors while reloading {@skript_color}%{_parse::2}%.sk&r!<reset>")
- delete {SkriptEnhanced.errorLogger::%player%::*}
- delete {SkriptEnhanced.catchErrors::%player%}
- delete {SkriptEnhanced.reloadTime::%player%}
- stop
- set {_message} to {_message}.replace("&6" and "{@skript_color}")
- if {_message} contains "&4":
- SE2_SendMessage(player, "error", {_message}.replace("&4", "&r").replace("&f", "&r"))
- else:
- if {_message} contains "successfully":
- set {_type} to "success"
- else if {_message} contains "is already":
- set {_type} to "error"
- else:
- set {_type} to "info"
- SE2_SendMessage(player, {_type}, {_message}.replace("&f", "&r"))
- # Formatted by https://skripttools.net/script-formatter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement