LimeworkLanguages/code/!lang.sk

224 lines
8.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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}
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}
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::*}
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}
loop {_list::*}:
loop {_l::%loop-value%::*}:
if loop-value-1 is "en":
set {_index::%loop-index-2%} to loop-value-2
set {-langmsg::%loop-value-1%::%{_index::%loop-index-2%}%} to loop-value-2
on skript load:
if {langmsg::*} is set:
delete {langmsg::*}
on script load:
wait a tick
loadSQLLanguages()
function SQLtoYAML():
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"
delete {_list::en}
loop {_list::*}:
loop {_l::%loop-value%::*}:
if loop-value-1 is "en":
set {_index::%loop-index-2%} to loop-value-2
set yaml value "%{_index::%loop-index-2%}%" from "lang%loop-value-1%" to "%loop-value-2%"
save yaml "lang%loop-value%"
on script load:
send "LOADING GLOBAL LANGUAGE FILES" to console
set {_languages::*} to "EN", "LT", "RU", "ES", "DA", "PT", "CN_Simplified"
loop {_languages::*}:
set {languageslist::%loop-value%} to loop-value
expression:
patterns:
translate %string% [for %player/string%] [with variables %-strings%]
translate %string% [with variables %-strings%] [for %player/string%]
get:
if expressions 3 is not set:
return translate(expression 1, expression 2)
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}
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)
if {_variables::1} is not "null":
set {_msg} to {-langmsg::%{_lang}%::%{_m}%}
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)
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}
if last sql error is set:
send last sql error to console and ops
stop
set {-lastlanguagesave} to now
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
command /languages [<text>]:
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
#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} to getSlotFromLanguage(epic variable "%uuid of player%::language")
set {_item} to {_inventory}.getItem({_slot})
set lore of {_item} to "&a&lSELECTED"
set slot {_enchantslot} 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"
on inventory click:
inventory name of player's current inventory = "&6- &a&lSelect language &6-"
clicked inventory is not player's inventory
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
{_l} is not {_lang}:
set epic variable "%uuid of player%::language" to {_lang}
send "&eYou have selected &a%{_lang}% &elanguage!"
close inventory of player
on join:
{server} is not "gl"
epic variable "%uuid of player%::language" is not set:
set {_lang} to epic variable "%{_uuid}%::language"
if {languageslist::%{_lang}%} is not set:
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
if {forcedenglish::%uuid of player%} is true:
epic variable "%uuid of player%::language" is not "EN"
set epic variable "%uuid of player%::language" to "EN"
else:
set {_country} to epic variable "%uuid of player%::country"
if {_country} contains "Lithuania":
set {_lang} to "LT"
else if {_country} contains "Denmark":
set {_lang} to "DA"
else if {_country} contains "Russia":
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:
set epic variable "%uuid of player%::language" to {_default}