diff --git a/LanguageCN_Simplified.yml b/LanguageCN_Simplified.yml old mode 100644 new mode 100755 diff --git a/LanguageDA.yml b/LanguageDA.yml old mode 100644 new mode 100755 diff --git a/LanguageEN.yml b/LanguageEN.yml old mode 100644 new mode 100755 diff --git a/LanguageES.yml b/LanguageES.yml old mode 100644 new mode 100755 diff --git a/LanguageLT.yml b/LanguageLT.yml old mode 100644 new mode 100755 diff --git a/LanguagePT.yml b/LanguagePT.yml old mode 100644 new mode 100755 diff --git a/LanguageRU.yml b/LanguageRU.yml old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/code/!lang.sk b/code/!lang.sk index b19c31a..bfd067e 100644 --- a/code/!lang.sk +++ b/code/!lang.sk @@ -1,26 +1,26 @@ -#structure of table `languages` -#`EN` = VARCHAR(333) -#`RU` = VARCHAR(333) +#structure of table languages +#EN = VARCHAR(333) +#RU = VARCHAR(333) #... and so on (for each language) function YAMLtoSQL(): loop {languageslist::*}: load yaml "plugins/Skript/scripts/languages/Language%loop-value in lowercase%.yml" as "lang%loop-value in lowercase%" - execute "TRUNCATE TABLE `languages`" in {-sql} + execute "TRUNCATE TABLE languages" in {-sql} send last sql error to console if last sql error is set wait a tick loop yaml nodes from "langen": loop {languageslist::*}: set {_list::%loop-value-2%} to yaml value loop-value-1 from "lang%loop-value-2 in lowercase%" - execute "INSERT INTO `languages` VALUES (%{_list::en}%, %{_list::lt}%, %{_list::ru}%, %{_list::es}%, %{_list::da}%, %{_list::pt}%, %{_list::CN_Simplified}%)" in {-sql} + execute "INSERT INTO languages VALUES (%{_list::en}%, %{_list::lt}%, %{_list::ru}%, %{_list::es}%, %{_list::da}%, %{_list::pt}%, %{_list::CN_Simplified}%)" in {-sql} if last sql error is set: send last sql error to console and ops if last sql error is set send "Error happened on %{_list::en}%" to console and ops #load languages from mysql function loadSQLLanguages(): - execute "SELECT * FROM `languages`" in {-sql} and store the result in {_l::*} + execute "SELECT * FROM languages" in {-sql} and store the result in {_l::*} loop indexes of {_l::*}: set {_list::%loop-value%} to loop-value - + #done to make it the first index set {_list::1} to "en" delete {_list::en} @@ -36,13 +36,13 @@ on script load: wait a tick loadSQLLanguages() function SQLtoYAML(): - execute "SELECT * FROM `languages`" in {-sql} and store the result in {_l::*} + execute "SELECT * FROM languages" in {-sql} and store the result in {_l::*} send last sql error to console if last sql error is set loop indexes of {_l::*}: unload yaml "lang%loop-value%" load yaml "plugins/Skript/scripts/languages/Language%loop-value%.yml" as "lang%loop-value%" set {_list::%loop-value%} to loop-value - + #done to make it the first index #TODO make it sorted on unedited vs edited, so unedited shows first set {_list::1} to "en" @@ -68,19 +68,19 @@ expression: else: return translate(expression 1, expression 2, expressions 3) function insertlater(m: text): - execute "INSERT INTO `languages` VALUES (%{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%)" in {-sql} + execute "INSERT INTO languages VALUES (%{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%, %{_m}%)" in {-sql} function translate(m: text, p: object, variables: strings = "null") :: text: #support both UUIDS and player names for getting language of the player - + set {_uuid} to {uuid::%{_p}%} if {name::%{_p}%} is not set else {_p} - + set {_lang} to (epic variable "%{_uuid}%::language") ? "EN" if {-langmsg::%{_lang}%::%{_m}%} is not set: - + set {-langmsg::%{_lang}%::%{_m}%} to {_m} insertlater({_m}) - + #useful for knowing when was last time this message was triggered, so we can later remove messages that are never used (possibly were removed from code) set {-langmsgusage::%{_m}%} to now #replace $1$, $2$, etc. stuff into proper values (function provides arguments for it) @@ -89,19 +89,19 @@ function translate(m: text, p: object, variables: strings = "null") :: text: loop {_variables::*}: replace "$%loop-index%$" with loop-value in {_msg} return {_msg} - + #Translation Mode 1, return the message (MOST USEFUL!) return {-langmsg::%{_lang}%::%{_m}%} - -#structure of table `languages_usage` -#`message` = VARCHAR(333) -#`lastused` = BIGINT(18) + +#structure of table languages_usage +#message = VARCHAR(333) +#lastused = BIGINT(18) function saveLastMessageUsageDate(): - + loop {-langmsgusage::*}: set {_msg} to {-langmsg::en::%loop-index%} unix timestamp of loop-value is higher than unix timestamp of {-lastlanguagesave} - execute "INSERT INTO `languages_usage` (`message`, `lastused`) VALUES (%{_msg}%, %unix timestamp of loop-value%) ON DUPLICATE KEY UPDATE `lastused`=VALUES(`lastused`)" in {-sql} + execute "INSERT INTO languages_usage (message, lastused) VALUES (%{_msg}%, %rounded unix timestamp of loop-value%) ON DUPLICATE KEY UPDATE lastused=VALUES(lastused)" in {-sql} if last sql error is set: send last sql error to console and ops stop @@ -109,83 +109,95 @@ function saveLastMessageUsageDate(): every 3 hours: send "Starting a every 3 hours task for saving last used dates of language messages to SQL." to console saveLastMessageUsageDate() + function getSlotFromLanguage(lang: text) :: number: - switch {_lang}: - case "EN": - return 0 - case "LT": - return 1 - case "RU": - return 2 - case "DA": - return 3 - case "PT": - return 4 - case "CN_Simplified": - return 5 + + if {_lang} is "EN": + return 0 + else if {_lang} is "LT": + return 1 + else if {_lang} is "RU": + return 2 + else if {_lang} is "DA": + return 3 + else if {_lang} is "PT": + return 4 + else if {_lang} is "CN_Simplified": + return 5 + else: + return 0 + command /languages []: description: Set your language usage: /languages trigger: wait a tick - open chest with 1 row named "&6- &a&lSelect language &6-" to player - set {_inventory} to player's current inventory - + set {_inventory} to chest inventory with 2 rows named "&6- &a&lSelect language &6-" + #diamond block is displayed if the banner variable isn't set - set slot 0 of {_inventory} to ({banners::english} ? diamond block) named "&aEnglish" with lore "&e&lCLICK TO SELECT" with no nbt - set slot 1 of {_inventory} to ({banners::lithuania} ? diamond block) named "&aLietuvių" with lore "&e&lCLICK TO SELECT" with no nbt - set slot 2 of {_inventory} to ({banners::russia} ? diamond block) named "&aРусский" with lore "&e&lCLICK TO SELECT" with no nbt - set slot 3 of {_inventory} to ({banners::denmark} ? diamond block) named "&aDansk" with lore "&e&lCLICK TO SELECT" with no nbt - set slot 4 of {_inventory} to ({banners::portugal} ? diamond block) named "&aPortuguês" with lore "&e&lCLICK TO SELECT" with no nbt - set slot 5 of {_inventory} to ({banners::china} ? diamond block) named "&aChinese (Simplified)" with lore "&e&lCLICK TO SELECT" with no nbt - + set slot 0 of {_inventory} to ({banners::english} ? diamond block) named "&aEnglish" with lore "&e&lCLICK TO SELECT" + set slot 1 of {_inventory} to ({banners::lithuania} ? diamond block) named "&aLietuvių" with lore "&e&lCLICK TO SELECT" + set slot 2 of {_inventory} to ({banners::russia} ? diamond block) named "&aРусский" with lore "&e&lCLICK TO SELECT" + set slot 3 of {_inventory} to ({banners::denmark} ? diamond block) named "&aDansk" with lore "&e&lCLICK TO SELECT" + set slot 4 of {_inventory} to ({banners::portugal} ? diamond block) named "&aPortuguês" with lore "&e&lCLICK TO SELECT" + set slot 5 of {_inventory} to ({banners::china} ? diamond block) named "&aChinese (Simplified)" with lore "&e&lCLICK TO SELECT" + set {_slot} to getSlotFromLanguage(epic variable "%uuid of player%::language") - set {_item} to {_inventory}.getItem({_slot}) - + set {_item} to slot {_slot} of {_inventory} + set lore of {_item} to "&a&lSELECTED" - - set slot {_enchantslot} of {_inventory} to {_item} - - - + + set slot {_slot} of {_inventory} to {_item} + + + set {_sp} to "Automatically detects your language based on your location." - + if {forcedenglish::%uuid of player%} is not set: set slot 8 of {_inventory} to glowing redstone dust named "&eAutomatic Language Detection &2[&a&lON&2]" with lore "&7%{_sp}%", "&7This is enabled by default.", "&a", "&a&lCLICK TO TOGGLE" else: set slot 8 of {_inventory} to redstone dust named "&eAutomatic Language Detection &2[&c&lOFF&2]" with lore "&7%{_sp}%", "&7This is enabled by default.", "&a", "&a&lCLICK TO TOGGLE" + set slot 9 of {_inventory} to arrow named "&a%translate("Go back", player)%" + open {_inventory} to player on inventory click: - inventory name of player's current inventory = "&6- &a&lSelect language &6-" + name of event-inventory = "&6- &a&lSelect language &6-" + cancel event clicked inventory is not player's inventory + + #Go back to Player Menu + if event-slot is arrow: + make player execute command "/playermenu" + stop + set {_l} to epic variable "%uuid of player%::language" - switch clicked slot: - case 0: - set {_lang} to "EN" - case 1: - set {_lang} to "LT" - case 2: - set {_lang} to "RU" - case 3: - set {_lang} to "DA" - case 4: - set {_lang} to "PT" - case 5: - set {_lang} to "CN_Simplified" - case 8: - {forcedenglish::%uuid of player%} is not set: - set {forcedenglish::%uuid of player%} to true - send "&cAutomatic language detection has been disabled." - else: - delete {forcedenglish::%uuid of player%} - send "&aAutomatic language detection has been enabled back." - stop + if event-slot's index is 0: + set {_lang} to "EN" + else if event-slot's index is 1: + set {_lang} to "LT" + else if event-slot's index is 2: + set {_lang} to "RU" + else if event-slot's index is 3: + set {_lang} to "DA" + else if event-slot's index is 4: + set {_lang} to "PT" + else if event-slot's index is 5: + set {_lang} to "CN_Simplified" + else if event-slot's index is 8: + {forcedenglish::%uuid of player%} is not set: + set {forcedenglish::%uuid of player%} to true + send "&cAutomatic language detection has been disabled." + else: + delete {forcedenglish::%uuid of player%} + send "&aAutomatic language detection has been enabled back." + stop {_l} is not {_lang}: set epic variable "%uuid of player%::language" to {_lang} send "&eYou have selected &a%{_lang}% &elanguage!" close inventory of player +# epic variable "%uuid of player%::country" is set by LimeworkProxy on join on join: {server} is not "gl" epic variable "%uuid of player%::language" is not set: @@ -195,11 +207,6 @@ on join: set {_default} to "EN" set {_p} to player set {_uuid} to uuid of player - - if epic variable "%uuid of player%::country" is not set: - create section stored in {_section}: - set epic variable "%{_uuid}%::country" to country of {_p} - run section {_section} async and wait @@ -216,7 +223,7 @@ on join: set {_lang} to "RU" else if {_country} contains "Portugal" or "Brazil": set {_lang} to "PT" - + {_lang} is not epic variable "%uuid of player%::language": set epic variable "%uuid of player%::language" to {_lang} else if {_default} is set: