When I restart the server. gen skript won't start. I have to write sk reload.
How to fix it ?
Writes to the console:
Invalid function call to a function that does not exist yet. Be careful when using functions in 'script load' events!
#
# IMPORTANT:
# max gens: 54
# any more will not be loaded in
#
options:
dropdelay: 3 seconds
sellwanditem: blaze rod
name: &9&lSellwand
prefix: [server]
on load:
reset()
#
# LOAD GENS CONFIG HERE ↓
#
#
# format:
# loadgen( gen block item, gen drops item, level, upgrade price, sell price of drops)
#
# gens are upgraded based on level: 1,2,3,4 etc.
#
# the gen block item cannot be named as
# the name will be the name of the drop item
# eg. loadgen(diamond block, diamond named "crystal", 1, 100, 1)
# will be named "crystal gen" and is level 1 which will be auto given
# to new players and diamond named "crystal" sells for 1
# and gen costs 100 to upgrade to next
loadgen(white terracotta, ghast spawn egg named "&f1", 1, 1000, 50)
loadgen(Light Gray terracotta, panda spawn egg named "&f2", 2, 5000, 100)
loadgen(Gray terracotta, evoker spawn egg named "&73", 3, 10000, 150)
loadgen(lime terracotta, creeper spawn egg named "&84", 4, 20000, 200)
loadgen(green terracotta, slime spawn egg named "&a5", 5, 30000, 300)
loadgen(light blue terracotta, vex spawn egg named "&26", 6, 40000, 400)
loadgen(cyan terracotta, drowned spawn egg named "&b7", 7, 50000, 500)
loadgen(blue terracotta, squid spawn egg named "&38", 8, 100000, 600)
loadgen(pink terracotta, fox spawn egg named "&99", 9, 150000, 700)
loadgen(magenta terracotta, pig spawn egg named "&110", 10, 200000, 800)
loadgen(purple terracotta, shulker spawn egg named "&d11", 11, 250000, 900)
loadgen(yellow terracotta, blaze spawn egg named "&512", 12, 350000, 1000)
loadgen(orange terracotta, tropical fish spawn egg named "&c13", 13, 400000, 1500)
loadgen(red terracotta, mooshroom spawn egg named "&414", 14, 450000, 2000)
loadgen(brown terracotta, hoglin spawn egg named "&e15", 15, 500000, 2500)
loadgen(black terracotta, enderman spawn egg named "&616", 16, 1000000, 3000)
loadgen(white concrete, skeleton spawn egg named "&f&l17", 17, 1500000, 3500)
loadgen(Light Gray concrete, sheep spawn egg named "&f&l18", 18, 2000000, 4000)
loadgen(Gray concrete, turtle spawn egg named "&7&l19", 19, 2500000, 4500)
loadgen(lime concrete, parrot spawn egg named "&8&l20", 20, 3000000, 5000)
loadgen(green concrete, phantom spawn egg named "&a&l21", 21, 3500000, 6000)
loadgen(light blue concrete, cat spawn egg named "&2&l22", 22, 4000000, 7000)
loadgen(cyan concrete, trader llama spawn egg named "&b&l23", 23, 4500000, 8000)
loadgen(blue concrete, silverfish spawn egg named "&3&l24", 24, 5000000, 9000)
loadgen(pink concrete, pufferfish spawn egg named "&9&l25", 25, 10000000, 10000)
loadgen(magenta concrete, horse spawn egg named "&1&l26", 26, 15000000, 15000)
loadgen(purple concrete, husk spawn egg named "&d&l27", 27, 20000000, 20000)
loadgen(yellow concrete, llama spawn egg named "&5&l28", 28, 25000000, 25000)
loadgen(orange concrete, cod spawn egg named "&c&l29", 29, 30000000, 30000)
loadgen(red concrete, strider spawn egg named "&4&l30", 30, 35000000, 35000)
loadgen(brown concrete, spider spawn egg named "&e&l31", 31, 40000000, 40000)
loadgen(black concrete, endermite spawn egg named "&6&l32", 32, 45000000, 45000)
#
# LOAD GENS CONFIG HERE ↑
#
#
# GEN CAP CONFIG HERE ↓
#
# format:
# setcap(group, cap)
# eg. setcap("default", 25) players with default group cannot place more than 25 gens
# players with permission gen.admin bypass the limit
# groups with no cap specified set will not be allowed to place gens unless they have permission gen.admin
# extra gen slots per player can be set via /gen cap in game
setcap("Member", 25)
setcap("vip", 30)
#
# GEN CAP CONFIG HERE ↑
#
#
# END OF CONFIG
#
send "&b%size of {gentype::*}% gens loaded" to all players where [input is op]
function loadgen(i: itemtype, drops: item, id: integer, up: number, sp: number):
size of {genlevel::*} <= 54
set {gentype::%{_id}%} to {_drops}
set {genlevel::%{_id}%} to {_i}
set {uprice::%{_id}%} to {_up}
set {worth::%{_drops}%} to {_sp}
function setcap(group: text, cap: integer):
set {gencap::%{_group}%} to {_cap}
function reset():
delete {gentype::*}
delete {genlevel::*}
delete {uprice::*}
delete {worth::*}
delete {gencap::*}
function toRoman(n: number) :: string:
set {_r::*} to split "33,33|32,32|31,31|30,30|29,29|28,28|27,27|26,26|25,25|24,24|23,23|22,22|21,21|20,20|19,19|18,18|17,17|16,16|15,15|14,14|13,13|12,12|11,11|10,10|9,9|8,8|7,7|6,6|5,5|4,4|3,3|2,2|1,1" at "|"
loop {_r::*}:
set {_d::*} to loop-value parsed as "%string%,%int%"
while {_n} >= {_d::2}:
remove {_d::2} from {_n}
set {_result::*} to {_result::*} and {_d::1}
return (join {_result::*} with "") ? ""
function toNumber(s: string) :: number:
set {_r::*} to split "33,33|32,32|31,31|30,30|29,29|28,28|27,27|26,26|25,25|24,24|23,23|22,22|21,21|20,20|19,19|18,18|17,17|16,16|15,15|14,14|13,13|12,12|11,11|10,10|9,9|8,8|7,7|6,6|5,5|4,4|3,3|2,2|1,1" at "|"
while length of {_s} > 0:
set {_l} to length of {_s}
loop {_r::*}:
set {_d::*} to loop-value parsed as "%string%,%int%"
if {_s} starts with {_d::1}:
add {_d::2} to {_n}
replace first {_d::1} in {_s} with ""
length of {_s} = {_l}
stop
return {_n} ? 0
on first join:
give {genlevel::1} named "&f%genname(1)%" with lore "&7lvl &a%toRoman(1)% &7gen" to player
on place of white terracotta or Light Gray terracotta or Gray terracotta or lime terracotta or green terracotta or light blue terracotta or cyan terracotta or blue terracotta or pink terracotta or magenta terracotta or purple terracotta or yellow terracotta or orange terracotta or red terracotta or brown terracotta or black terracotta or white concrete or Light Gray concrete or Gray concrete or lime concrete or green concrete or light blue concrete or cyan concrete or blue concrete or pink concrete or magenta concrete or purple concrete or yellow concrete or orange concrete or red concrete or brown concrete or black concrete:
if player does not have permission "gen.admin":
if searchcap(player) <= gensize(player):
cancel event
send "&cYou cannot place more than %searchcap(player)% &cgens" to player
event is not cancelled
set {_n::*} to split (uncoloured line 1 of lore of tool of player) at " "
set {_n} to toNumber({_n::2})
{_n} is set
set {gen::%player's uuid%::%{_n}%::*} to {gen::%player's uuid%::%{_n}%::*} and location of event-block
every {@dropdelay}:
loop all players:
set {_u} to loop-player's uuid
loop indices of {gen::%{_u}%::*}:
loop {gen::%{_u}%::%loop-value-2%::*}:
if {genlevel::%loop-value-2%} != type of (block at loop-value-3):
remove loop-value-3 from {gen::%loop-value-1%::%loop-value-2%::*}
else:
drop {gentype::%loop-value-2%} at block 1 above loop-value-3 without velocity
on block damage:
event is not cancelled
loop indices of {gen::*}:
loop indices of {gen::%loop-value-1%::*}:
{gen::%loop-value-1%::%loop-value-2%::*} contains location of event-block
type of event-block = {genlevel::%loop-value-2%}
cancel event
set {_n} to loop-value-2 parsed as integer
{_n} is set
if player's uuid = loop-value-1:
if player is sneaking:
remove location of event-block from {gen::%loop-value-1%::%loop-value-2%::*}
set event-block to air
give 1 of ({genlevel::%{_n}%} named "&f%genname({_n})%" with lore "&7lvl &a%toRoman({_n})% &7gen") to player
else:
send title "" with subtitle "&cCrouch to remove" to player
else:
if player has permission "gen.admin":
remove location of event-block from {gen::%loop-value-1%::%loop-value-2%::*}
set event-block to air
give 1 of ({genlevel::%{_n}%} named "&f%genname({_n})%" with lore "&7lvl &a%toRoman({_n})% &7gen") to player
else:
send "&cyou cannot break %loop-value-1 parsed as offline player%&c's gen" to player
stop
on right click:
player is sneaking
loop indices of {gen::%player's uuid%::*}:
{gen::%player's uuid%::%loop-value%::*} contains location of clicked block
type of clicked block = {genlevel::%loop-value%}
cancel event
set {_n} to loop-value parsed as integer + 1
if balance of player >= {uprice::%loop-value%}:
if {genlevel::%{_n}%} is set:
set clicked block to {genlevel::%{_n}%}
remove location of clicked block from {gen::%player's uuid%::%loop-value%::*}
set {gen::%player's uuid%::%{_n}%::*} to {gen::%player's uuid%::%{_n}%::*} and location of clicked block
remove {uprice::%loop-value%} from balance of player
set {_nn} to {_n} + 1
if {genlevel::%{_nn}%} is set:
play large explosion at event-block to player
else:
play huge explosion at event-block to player
send coloured "&at1 &f%genname({_n})%" to player
else:
send "&ct2" to player
else:
send "&ct3 $%{uprice::%loop-value%}% &ct4" to player
stop
command /sell:
trigger:
sell(player, inventory of player)
function sell(p: player, c: inventory):
set {_u} to {_p}'s uuid
loop all items in {_c}:
set {_i} to 1 of loop-item
if {worth::%{_i}%} is set:
add ((item amount of loop-value) * {worth::%{_i}%} * {multiplier::%{_u}%}) to {_total}
remove loop-item from {_c}
if {_total} > 0:
send "&e$%{_total}%" to {_p}
add {_total} to balance of {_p}
add {_total} to {totalsold::%{_u}%}
if {totalsold::%{_u}%} >= 1000:
money2XP({_p})
else:
send "&cno" to {_p}
command /generator [<text>] [<offline player>] [<integer>]:
aliases: generators, gen, gens, genlist
trigger:
if player has permission "gen.admin":
if arg-1 is not set:
open genlist() to player
set {inv::%player's uuid%} to "genlist"
else if arg-1 is "admin":
open genlist() to player
set {inv::%player's uuid%} to "genadmin"
else if arg-1 is "unbin":
if arg-2 is set:
loop indices of {gen::%arg-2's uuid%::*}:
loop {gen::%arg-2's uuid%::%loop-value%::*}:
set block at loop-value-2 to air
delete {gen::%arg-2's uuid%::*}
send "all gens of %arg-2% have been removed" to player
else:
send "specify a player" to player
else if arg-1 is "cap":
set {_p} to (arg-2 ? player)
set {_u} to {_p}'s uuid
if arg-3 is set:
set {gencap::%{_u}%} to arg-3
send "&7Set &6%{_p}%&7's gen cap to &6%arg-3%&7%nl%&7New gen cap of %{_p}%&7: &b%gensize({_p})% &7/ &b%searchcap({_p})%" to player
else:
send "&7%{_p}%&7's Gen slots: &b%gensize({_p})% &7/ &b%searchcap({_p})%" to player
else if arg-1 is "purge":
reset()
delete {gen::*}
send "all gens purged" to player
else if arg-1 is "stats", "stat" or "info":
set {inv::%player's uuid%} to "display"
open statsgui(arg-2 ? player) to player
else:
open genlist() to player
set {inv::%player's uuid%} to "genlist"
else:
if arg-1 is "stats", "stat" or "info":
set {inv::%player's uuid%} to "display"
open statsgui(arg-2 ? player) to player
else if arg-1 is "cap":
set {_p} to (arg-2 ? player)
send "&b%{_p}%&b's &7Gen slots: &9%gensize({_p})% &7/ &9%searchcap({_p})%" to player
else:
open genlist() to player
set {inv::%player's uuid%} to "genlist"
function gensize(p: offline player) :: integer:
set {_u} to {_p}'s uuid
loop indices of {gen::%{_u}%::*}:
set {_n} to size of {gen::%{_u}%::%loop-value%::*}
add {_n} to {_i}
return "%{_i}%" parsed as integer ? 0
function searchcap(p: offline player) :: integer:
set {_u} to {_p}'s uuid
set {_maxcap} to 0
loop groups of {_p}:
set {_maxcap} to {gencap::%loop-value%} if {gencap::%loop-value%} > {_maxcap}
add {gencap::%{_u}%} to {_maxcap}
return "%{_maxcap}%" parsed as integer ? 0
function genlist() :: inventory:
set {_n} to ceil(size of {genlevel::*}/9)
set {_c} to chest inventory with {_n} rows named "Genlist"
set slot (integers between 0 and ((9 * {_n}) - 1)) of {_c} to black stained glass pane named ""
loop {genlevel::*}:
set slot (loop-index parsed as number - 1) of {_c} to loop-value named "&f%genname(loop-index parsed as integer)%" with lore "&7Лвл &a%toRoman(loop-index parsed as integer)% &7Генератор"
return {_c}
function geninfo(id: integer) :: inventory:
set {_c} to chest inventory with 1 row named "&f%genname({_id})%"
set slot (integers between 0 and 9) of {_c} to black stained glass pane named ""
set slot 2 of {_c} to {genlevel::%{_id}%} named "&f%genname({_id})%" with lore "&7price up: &c$%{uprice::%{_id}%}%"
set slot 6 of {_c} to {gentype::%{_id}%} with lore "&7prise sell: &a$%{worth::%{gentype::%{_id}%}%}%"
return {_c}
function genname(id: integer) :: text:
return ((name of {gentype::%{_id}%}) ? "%type of {gentype::%{_id}%}%")
function statsgui(p: offline player) :: inventory:
set {_u} to {_p}'s uuid
set {_c} to chest inventory with 1 row named "&b%{_p}% gen stats"
set slot (integers between 0 and 8) of {_c} to black stained glass pane named " "
loop {genlevel::*}:
set {_s::*} to {_s::*} and coloured "&7%uncoloured genname(loop-index parsed as integer)%: &9%size of {gen::%{_u}%::%loop-index parsed as integer%::*}%"
set slot 4 of {_c} to skull of {_p} named "&b&l%{_p}%" with lore "&7Gen cap: &9%gensize({_p})%&7 / &9%searchcap({_p})%" and {_s::*}
return {_c}
function bulk(i: item) :: inventory:
set {_c} to chest inventory with 4 rows named "&r"
set slot (integers between 0 and 35) of {_c} to black stained glass pane named "&r"
set slot 13 of {_c} to 1 of {_i}
set slot 9 of {_c} to red stained glass pane named "&fRemove 32"
set slot 10 of {_c} to red stained glass pane named "&fRemove 16"
set slot 11 of {_c} to red stained glass pane named "&fRemove 1"
set slot 15 of {_c} to lime stained glass pane named "&fAdd 1"
set slot 16 of {_c} to lime stained glass pane named "&fAdd 16"
set slot 17 of {_c} to lime stained glass pane named "&fAdd 32"
set slot 30 of {_c} to barrier named "&c&lCancel"
set slot 31 of {_c} to chest named "&b&lBulk"
set slot 32 of {_c} to nether star named "&a&lConfirm"
return {_c}
function bulk2(i: item) :: inventory:
set {_c} to chest inventory with 1 row named "&r"
loop 9 times:
set slot (loop-number -1) of {_c} to loop-number of {_i}
return {_c}
on inventory close:
delete {inv::%player's uuid%}
on tab complete:
event-string = "/gen" or "/generator" or "/gens" or "/generators"
if player has permission "gen.admin":
set tab completions for position 1 to "admin", "cap", "list", "purge", "stats" and "unbin"
else:
set tab completions for position 1 to "cap", "list" and "stats"
on inventory click:
if {inv::%player's uuid%} = "display" or "genlist" or "genadmin" or "bulk" or "bulk2" or "geninfo":
cancel event
event-inventory != inventory of player
if {inv::%player's uuid%} = "genlist":
event-slot is not black glass pane
open geninfo(index of event-slot + 1) to player
set {inv::%player's uuid%} to "display"
else if {inv::%player's uuid%} = "genadmin":
event-slot is not black glass pane
open bulk(event-slot) to player
set {inv::%player's uuid%} to "bulk"
else if {inv::%player's uuid%} = "bulk":
set {_n} to (last element of (split uncoloured name of event-slot at " ")) parsed as integer
if index of event-slot = 9 or 10 or 11:
set {_n} to item amount of slot 13 of top inventory of player - {_n}
set {_n} to 64 if {_n} > 64
set {_n} to 1 if {_n} < 1
set slot 13 of top inventory of player to {_n} of slot 13 of top inventory of player
else if index of event-slot = 15 or 16 or 17:
add item amount of slot 13 of top inventory of player to {_n}
set {_n} to 64 if {_n} > 64
set {_n} to 1 if {_n} < 1
set slot 13 of top inventory of player to {_n} of slot 13 of top inventory of player
else if index of event-slot = 30:
close inventory of player
else if index of event-slot = 31:
open bulk2(slot 13 of top inventory of player) to player
set {inv::%player's uuid%} to "bulk2"
else if index of event-slot = 32:
give slot 13 of top inventory of player to player
close inventory of player
else if {inv::%player's uuid%} = "bulk2":
give ((item amount of event-slot) * 64) of event-slot to player
close inventory of player