# # ____ __ __ _ _____ __ # / _/___ / /____ _________ ______/ /_(_) _____ / ___// /_ ____ ____ # / // __ \/ __/ _ \/ ___/ __ `/ ___/ __/ / | / / _ \ \__ \/ __ \/ __ \/ __ \ # _/ // / / / /_/ __/ / / /_/ / /__/ /_/ /| |/ / __/ __/ / / / / /_/ / /_/ / # /___/_/ /_/\__/\___/_/ \__,_/\___/\__/_/ |___/\___/ /____/_/ /_/\____/.___/ # Author: TrademarkTM (EWS) /_/ # # This is a paid resource. # Redistribution is not allowed. # You can by it in https://forums.skunity.com/resources/interactiveshop-easily-configurable-shops.364/. # # TERMS OF USE # 1. All pucharses are final. Once given the access to this file, you cannot ask for a refund. # 2. Reselling is strictly prohibited. # 3. You're not allowed to redistribute this script resource. # 4. You're free to edit the code, but not to remove the credits (as they're only in the file). # 5. It's my responsibility to fix any bugs reported by the user. # 6. I don't have to do any huge functionality changes for free. Small ones are acceptable. # 7. You may use the functions inside this script, but they cannot be moved to your own script or be redistributed. # # SUPPORT # Discord: EWS#5810 # Email: ewsjogos@gmail.com # # # Configuration area # All messages have been added in v1.1.1. # options: # The no permission message. P: &cⓧ &7You don't have the &crequired permission&7. # The time you have to wait when opening another shop. shop.cooldown.open: 3 seconds # The time you have to wait to buy another item shop.cooldown.interact: 0.5 seconds shop.regex: \W- # # Messages # Note: you CAN add new lines in shops using: # 'Message here||New line'. The numbers are there to keep it more organized. # # ------------------------------------------------------------------------------- # This only appears if the item has a lore, under the buy and sell stuff. # %lore of loop-value% = the lore of the item shop.lore: "||||&6&lLORE:||%lore of loop-value%" # ------------------------------------------------------------------------------- # ------------------------------------------------------------------------------- # EDIT SHOP TEXT # /shop edit [name] # Name of the empty slot item. # %loop-number% = slot ID shop.edit.empty: &fFree slot &a(%loop-number%) # Lore of the empty slot item. shop.edit.empty.lore.1: &7Click &a&non the slot&7 to change it. Afterwards... shop.edit.empty.lore.2: &f(1) &7Throw the item &a(Q) &7to make it cosmetic. shop.edit.empty.lore.3: &f(2) &7Use &a/shop add [buyprice] [sellprice] shop.edit.empty.lore.4: &7to create a price for it. shop.edit.empty.lore.5: &f(3) &7Use &a/shop command [command] &7to make shop.edit.empty.lore.6: &7it run a custom command. # Lore of an item being sold in edit shop. # {_bp} = buy price # {_m} = max stack price (x64) # {_lore} = adds an extra space and the lore if it exists shop.edit.sell.lore.1: &6Buy: &f\$%{_bp}% &7(\$%{_bp} * {_m}% x%{_m}%) shop.edit.sell.lore.2: &6Sell: &f\$%{_sp}% &7(\$%{_sp} * {_m}% x%{_m}%)%{_lore}% shop.edit.sell.lore.3: &f&lCLICK HERE TO REMOVE # Lore of a decorative item in the shop. # {_lore} = adds an extra space and the lore if it exists shop.edit.decorative.1: &7Decorative item.%{_lore}% shop.edit.decorative.2: &f&lCLICK HERE TO REMOVE # Lore of an item which runs a command in the edit shop. # {_cmd} = the command which will be run. # {_lore} = adds an extra space and the lore if it exists shop.edit.cmd.1: &7Command item. shop.edit.cmd.2: &7Runs &a/%{_cmd}%%{_lore}% shop.edit.cmd.3: &f&lCLICK HERE TO REMOVE # ------------------------------------------------------------------------------- # -------------------------------------------------------------------------------- # DETAILED ITEM TEXT # [middle button on item] # The center head's name shop.detailed.head: &f&lBUY / SELL # The center's head lore shop.detailed.lore.1: &7In this part of the shop shop.detailed.lore.2: &7you can buy or sell items in shop.detailed.lore.3: &7exact quantities. # The lore of an item being sold in detailed shop. shop.detailedbuy.lore.1: &6Buy: &f\$%{_bp} * {_m}% x%{_m}% shop.detailedbuy.lore.2: &6Sell: &f\$%{_sp} * {_m}% x%{_m}%&aRightclick &7to buy &a\$%{_m}%&7. shop.detailedbuy.lore.3: &aLeftclick &7to sell &ax%{_m}%&7. # ------------------------------------------------------------------------------- # ------------------------------------------------------------------------------- # DEFAULT SHOP TEXT # /shop open [shop] # The shop's main lore. # {_lore} = adds an extra space and the lore if it exists # Use \$ instead of just $, otherwise your server will crash. shop.normal.buy.1: &6Buy: &f\$%{_bp}% &7(\$%{_bp} * {_m}% x%{_m}%) shop.normal.buy.2: &6Sell: &f\$%{_sp}% &7(\$%{_sp} * {_m}% x%{_m}%) shop.normal.buy.3: &aShift + rightclick &7to buy &ax%{_m}%&7. shop.normal.buy.4: &aMiddle button &7to show quantities.%{_lore}% # ------------------------------------------------------------------------------- # ------------------------------------------------------------------------------- # BUY & SELL MESSAGES # Shows up when you have not enough money to buy something. # {_c} = cost of one unit # {_n} = number of items you're buying # {_c} * {_n} = the total value of all the items you are buying shop.buy.nomoney: &fYou don't have &c\$%{_c} * {_n}% &fto buy this! # Shows up when you have no space in inventory. shop.buy.nospace: &fYou don't have &cspace in inventory&f! # Shows up when you successfully buy something. # {_n} = number of items you've bought # type of {_i} = the type of the item you're buying (stone, diamond_sword...) # {_price} = you know what it is shop.buy.success: &fYou bought &ax%{_n}% %type of {_i}% &ffor &a\$%{_price}%&f. # Shows up when you have no items to sell. # {_n} = number of items you're trying to sell. # type of {_i} = the type of the item you're selling (stone, diamond_sword...) shop.sell.noitem: &fVocê não tem &cx%{_n}% %type of {_i}%&f. shop.sell.success: &fYou sold &ax%{_a}% %type of {_i}% &ffor &a\$%{_a} * {_c}%&f. # ------------------------------------------------------------------------------- # ------------------------------------------------------------------------------- # COMMAND MESSAGES # You're holding nothing in your hand and uses /rename. cmd.rename.hold: &3ⒸⓂⒹ &cHold the item &7you want to rename. # Pops up when you successfully rename an item. # %colored arg 1% = item's new name cmd.rename.success: &3ⒸⓂⒹ &7Your item's name has been changed to &a'%colored arg 1%'&7. # You're not holding anything and uses /lore. cmd.setlore.hold: &3ⒸⓂⒹ &cHold the item &7which you want to change the lore. # Shows up when you use /lore wrongly. cmd.setlore.usage: &3ⒸⓂⒹ &7Usage: &c/lore [line] [lore]&7. # The line number is not valid. # %arg 1% = the lore line cmd.setlore.notnumber: &3ⒸⓂⒹ &c%arg 1% &7is not a valid number! # You successfully set the lore of an item. # %arg 1 parsed as integer% = the lore line # %arg 2% = the text that it has been changed to cmd.setlore.success: &3ⒸⓂⒹ &7The line &a%arg 1 parsed as integer%&7 has been changed to &a%arg 2%&7. cmd.shop.open.usage: &7Usage: &c/shop open [shop]&7. # %arg 2% = the name of the shop you're trying to open cmd.shop.open.notfound: &7The shop &c%arg 2% &7does not exist! cmd.shop.create.usage: &7Usage: &c/shop create [size] [name]&7. cmd.shop.create.integer: &7The &csize &7must be an &cinteger&7. cmd.shop.create.number: &7The size must be between &c1 &7and &c6&7! cmd.shop.create.notinregex: &7You can only use &cletters &7e &cnumbers&7. # %arg 2% = the shop that already exists cmd.shop.create.exists: &7The shop &c%arg 2% &7already &cexists&7! cmd.shop.create.success: &7You created the shop &a%arg 3%&7. cmd.shop.edit.usage: &7Usage: &c/shop edit [shop]&7. cmd.shop.edit.notfound: &7The shop &c%arg 2% &7doesn't exist! cmd.shop.add.usage: &7Usage: &c/shop add [buy price] [sell price]&7. cmd.shop.add.hold: &cHold an item &7to add! cmd.shop.add.priceerror: &7You've specified &cinvalid prices&7! cmd.shop.add.noslot: &7Select a shop slot first! # %{_s::1} parsed as number + 1% = the slot number # {_s::2} = the name of the shop # %arg 2 parsed as number% = buy price # %arg 3 parsed as number% = sell price cmd.shop.add.success: &7You've edited the slot &a%{_s::1} parsed as number + 1% &7of the shop &a%{_s::2}% &7with &a%type of tool% &7with the prices &a%arg 2 parsed as number% (buy) &7and &a%arg 3 parsed as number% (sell)&7. cmd.shop.delete.notfound: &7This shop &cdoes not exist&7! # %arg 2% = the shop that has been deleted cmd.shop.delete.success: &7You removed the shop &a%arg 2% permanently&7. cmd.shop.setsize.notfound: &7The shop &c%arg 1% &7does not exist! # %arg 3% = the size number cmd.shop.setsize.notnumber: &c%arg 3% &7is not a number! cmd.shop.setsize.number: &7The number must be between &c1 &7and &c6&7! # %arg 2% = the shop name # %arg 3 parsed as number% the new shop size cmd.shop.setsize.success: &7You've changed the size of the shop &a%arg 2% &7to &a%arg 3 parsed as number%&7! cmd.shop.cmd.hold: &cHold an item &7to add! cmd.shop.cmd.noslot: &7Select a shop slot first! # %{_s::1} parsed as number + 1% = the slot that has been edited # {_s::2} = the shop name # {_cmd} = the command added cmd.shop.cmd.success: &7You've edited the slot &a%{_s::1} parsed as number + 1% &7of the shop &a%{_s::2}% &7to run the command &a%{_cmd}%&7. cmd.shop.clone.usage.1: &fUsage: &c/shop clone [shop] [new shop] [%%buy] [%%sell]. cmd.shop.clone.usage.2: &fNote: &7the percentage means how bigger or smaller the prices will be compared to the cloned shop. 100 = same price, 50 = half the price. cmd.shop.clone.notfound: &7The shop &c%arg 1% &7does not exist! cmd.shop.clone.notnumber: &c%arg 4% &7or &c%arg 5% &7are not numbers! # %arg 4% = the first percentage (buy) # %arg 5% = the second percentage (sell) cmd.shop.clone.number: &c%arg 4% &7and &c%arg 5% &7must be between 0 and 1000 (%%). cmd.shop.clone.notinregex: &3ⓉⓅ &7You can only use &cletters &7and &anumbers&7. # %arg 2% = the shop name # %arg 3% = the cloned shop name # %arg 4 parsed as number% = the buy value modifier in % # %arg 5 parsed as number% = the sell value modifier in % cmd.shop.clone.success: &7You've cloned the shop &a%arg 2% &7to &a%arg 3% &7with price modifier of &a%arg 4 parsed as number%%% &7on pucharse and &a%arg 5 parsed as number%%% &7on sale. cmd.shop.deleteall.success: &cWarning: &7all shops have been deleted. # Here you can create a special help command. # To add new lines, use %nl% # DO NOT ADD NEW LINES BY USING NUMBERS, IT WON'T WORK! cmd.shop.usage: &7Incorrect command usage. # ------------------------------------------------------------------------------- # Saves which slot the player is currently editing. function sloteditor(n: number, s: text, p: player): set {ishop::editslot::%{_p}%} to "%{_n} - 1%;%{_s}%" send "&7You're changing the slot &a%{_n}% &7of the shop. Throw an item using &aQ &7to add it." to {_p} # Deletes a slot. function slotremove(n: number, s: text, p: player): clear {ishop::%{_s}%::items::%{_n}%} clear {ishop::%{_s}%::buyprice::%{_n}%} clear {ishop::%{_s}%::sellprice::%{_n}%} execute {_p} command "shop edit %{_s}%" # Opens the shop editing GUI to the admin. function openeditshop(s: text, p: player): create gui with virtual chest inventory with size {ishop::%{_s}%::size} named "%{_s}%": loop {ishop::%{_s}%::size} * 9 times: set {_number} to loop-number make gui slot loop-number - 1 with loop-number of light gray glass named "{@shop.edit.empty}" with lore "{@shop.edit.empty.lore.1}||{@shop.edit.empty.lore.2}||{@shop.edit.empty.lore.3}||{@shop.edit.empty.lore.4}||{@shop.edit.empty.lore.5}||{@shop.edit.empty.lore.6}": sloteditor(({_number}), {_s}, {_p}) close {_p}'s inventory loop {ishop::%{_s}%::items::*}: set {_lore} to "||||%lore of loop-value%" if lore of loop-value is "": set {_lore} to "" set {_n} to loop-index parsed as number if {ishop::%{_s}%::buyprice::%loop-index%} is set: set {_m} to max stack size of loop-value set {_bp} to {ishop::%{_s}%::buyprice::%loop-index%} set {_sp} to {ishop::%{_s}%::sellprice::%loop-index%} make gui slot loop-index parsed as number with ({_n} + 1 of loop-value) with lore "{@shop.edit.sell.lore.1}||{@shop.edit.sell.lore.2}||||{@shop.edit.sell.lore.3}": slotremove({_n}, {_s}, {_p}) else if {ishop::%{_s}%::command::%loop-index%} is not set: make gui slot loop-index parsed as number with ({_n} + 1 of loop-value) with lore "{@shop.edit.decorative.1}||||{@shop.edit.decorative.2}": slotremove({_n}, {_s}, {_p}) else: set {_cmd} to {ishop::%{_s}%::command::%loop-index%} make gui slot loop-index parsed as number with ({_n} + 1 of loop-value) with lore "{@shop.edit.cmd.1}||{@shop.edit.cmd.2}||||{@shop.edit.cmd.3}": slotremove({_n}, {_s}, {_p}) open last gui to {_p} # Shows all the quantities for the item and their prices. function detaileditem(i: item, s: text, p: player, bp: number, sp: number): create gui with virtual chest inventory with size 1 named "%{_s}%": make gui slot 0 with {_p}'s skull named "{@shop.detailed.head}" with lore "{@shop.detailed.lore.1}||{@shop.detailed.lore.2}||{@shop.detailed.lore.3}" loop 1, 4, 8, 16, 32, 64, 256 and 1024: add 1 to {_n} set {_m} to loop-number set {_a} to loop-number if {_a} > 64: set {_a} to 64 make gui slot {_n} with {_a} of {_i} with lore "{@shop.detailedbuy.lore.1}||{@shop.detailedbuy.lore.2}||||{@shop.detailedbuy.lore.3}.": if difference between now and {ishop::clickcooldown::%{_p}%} is less than 0.5 seconds: stop set {ishop::clickcooldown::%{_p}%} to now if gui-click-type = left mouse button or left mouse button with shift: buyitem({_m}, {_i}, {_p}, {_bp}) else if gui-click-type = right mouse button or right mouse button with shift: sellitem({_m}, {_i}, {_p}, {_sp}) open last gui to {_p} # Executed when someone buys an item. You can use it to make your own buying methods. function buyitem(n: number, i: item, p: player, c: number): {_c} > 0 set {_price} to {_c} * {_n} if {_p}'s balance < {_price}: play better BLOCK_NOTE_PLING at {_p} at volume 1 and pitch 0.01 send actionbar with "{@shop.buy.nomoney}" to {_p} else if {_p} can't hold {_n} of {_i}: play better BLOCK_NOTE_PLING at {_p} at volume 1 and pitch 0.01 send actionbar with "{@shop.buy.nospace}" to {_p} else: give {_n} of {_i} to {_p} remove {_price} from {_p}'s balance set {_pitch} to 8 / {_n} play better ENTITY_HORSE_ARMOR at {_p} at volume 1 and pitch {_pitch} send actionbar with "{@shop.buy.success}" to {_p} # Executed when someone sells an item. You can use it to make your own selling methods. function sellitem(n: number, i: item, p: player, c: number): {_c} > 0 set {_a} to number of {_i} in {_p}'s inventory if {_a} = 0: play better BLOCK_NOTE_PLING at {_p} at volume 1 and pitch 0.01 send actionbar with "{@shop.sell.noitem}" to {_p} else: if {_a} > {_n}: set {_a} to {_n} remove {_a} of {_i} from {_p} add {_c} * {_a} to {_p}'s balance set {_pitch} to 8 / {_a} play better ENTITY_EXPERIENCE_ORB_PICKUP at {_p} at volume 0.5 and pitch {_pitch} send actionbar with "{@shop.sell.success}" to {_p} # Most important part of the script. Opens the shop GUI. function openshop(s: text, p: player): if difference between {ishop::cooldown::%{_p}%} and now < {@shop.cooldown.open}: stop set {ishop::cooldown::%{_p}%} to now create gui with virtual chest inventory with size {ishop::%{_s}%::size} named "%{_s}%": loop {ishop::%{_s}%::items::*}: if {ishop::%{_s}%::buyprice::%loop-index%} is set: set {_i} to loop-value set {_m} to max stack of loop-value if {_m} = 1: set {_m} to 4 set {_bp} to {ishop::%{_s}%::buyprice::%loop-index%} set {_sp} to {ishop::%{_s}%::sellprice::%loop-index%} set {_lore} to {@shop.lore} if lore of loop-value is "": set {_lore} to "" make gui slot loop-index parsed as number with loop-value with lore "{@shop.normal.buy.1}||{@shop.normal.buy.2}||||{@shop.normal.buy.3}||{@shop.normal.buy.4}": if difference between now and {ishop::clickcooldown::%{_p}%} is less than {@shop.cooldown.interact}: stop set {ishop::clickcooldown::%{_p}%} to now if gui-click-type = left mouse button or right mouse button: set {_m} to 1 else if gui-click-type = left mouse button with shift or right mouse button with shift: set {_m} to max stack of {_i} if {_m} = 1: set {_m} to 4 if gui-click-type = middle mouse button: detaileditem({_i}, {_s}, {_p}, {_bp}, {_sp}) else if gui-click-type is left mouse button or left mouse button with shift: buyitem({_m}, {_i}, {_p}, {_bp}) else if gui-click-type is right mouse button or right mouse button with shift: sellitem({_m}, {_i}, {_p}, {_sp}) set {_m} to max stack of {_i} else if {ishop::%{_s}%::command::%loop-index%} is not set: make gui slot loop-index parsed as number with loop-value else: set {_cmd} to {ishop::%{_s}%::command::%loop-index%} make gui slot (loop-index parsed as number) with loop-value: clear {ishop::cooldown::%{_p}%} make {_p} execute command "%{_cmd}%" open last gui to {_p} # Main command, I don't recommend editing here. command /shop [] [] [] [] []: aliases: cs, ic permission: ic.shop permission message: {@P} trigger: if arg 1 is "open" or "abrir": if arg 2 is not set: send "{@cmd.shop.open.usage}" else if {ishop::%arg 2%::size} is not set: send "{@cmd.shop.open.notfound}" else if player doesn't have permission "ic.open.%arg 2%": send "{@P}" else: openshop(arg 2 in upper case, player) else if player doesn't have permission "ic.admin": send "{@P}" else if arg 1 = "create" or "make": if arg 3 is not set: send "{@cmd.shop.create.usage}" else if arg 2 parsed as integer is not set: send "{@cmd.shop.create.integer}" else if arg 2 parsed as integer isn't between 1 and 6: send "{@cmd.shop.create.number}" else if groups 0 of "%arg 3%" matched to "{@shop.regex}" is set: send "{@cmd.shop.create.notinregex}" else if {ishop::%arg 2%::size} is set: send "{@cmd.shop.create.exists}" else: set {ishop::%arg 3%::size} to arg 2 parsed as number send "{@cmd.shop.create.success}" else if arg 1 is "edit": if arg 2 is not set: send "{@cmd.shop.edit.usage}" else if {ishop::%arg 2%::size} is not set: send "{@cmd.shop.edit.notfound}" else: openeditshop(arg 2 in upper case, player) else if arg 1 is "add": if arg 3 is not set: send "{@cmd.shop.add.usage}" else if tool = air: send "{@cmd.shop.add.hold}" else if (arg 2 parsed as number) or (arg 3 parsed as number) is not set: send "{@cmd.shop.add.priceerror}" else if (arg 2 parsed as number) or (arg 3 parsed as number) < 0: send "&7You've specified &cinvalid prices&7!" else if {ishop::editslot::%player%} is not set: send "{@cmd.shop.add.noslot}" else: set {_s::*} to split {ishop::editslot::%player%} at ";" set {ishop::%{_s::2}%::items::%{_s::1}%} to 1 of tool set {ishop::%{_s::2}%::buyprice::%{_s::1}%} to arg 2 parsed as number set {ishop::%{_s::2}%::sellprice::%{_s::1}%} to arg 3 parsed as number clear {ishop::editslot::%player%} openeditshop({_s::2}, player) send "{@cmd.shop.add.success}" else if arg 1 = "delete" or "remove" or "del": if {ishop::%arg 2%::size} is not set: send "{@cmd.shop.delete.notfound}" else: clear {ishop::%arg 2%::*} send "{@cmd.shop.delete.success}" else if arg 1 = "setsize" or "sizeset": if {ishop::%arg 2%::size} is not set: send "{@cmd.shop.setsize.notfound}" else if arg 3 parsed as number is not set: send "{@cmd.shop.setsize.notnumber}" else if arg 3 parsed as number is not between 1 and 6: send "{@cmd.shop.setsize.number}" else: set {ishop::%arg 2%::size} to arg 3 parsed as number send "{@cmd.shop.setsize.success}" else if arg 1 = "command" or "cmd": if tool = air: send "{@cmd.shop.cmd.hold}" else if {ishop::editslot::%player%} is not set: send "{@cmd.shop.cmd.noslot}" else: set {_s::*} to split {ishop::editslot::%player%} at ";" clear {ishop::editslot::%player%} set {_cmd} to "%arg 2% %arg 3% %arg 4% %arg 5%" replace all " " or "" with "" in {_cmd} set {ishop::%{_s::2}%::items::%{_s::1}%} to 1 of tool set {ishop::%{_s::2}%::command::%{_s::1}%} to {_cmd} openeditshop({_s::2}, player) send "{@cmd.shop.cmd.success}" else if arg 1 = "clone": if arg 5 is not set: send "{@cmd.shop.clone.usage.1}" send "{@cmd.shop.clone.usage.2}" else if {ishop::%arg 2%::size} is not set: send "{@cmd.shop.clone.notfound}" else if arg 4 parsed as number or arg 5 parsed as number is not set: send "{@cmd.shop.clone.notnumber}" else if arg 4 parsed as number or arg 5 parsed as number aren't between 0 and 1000: send "{@cmd.shop.clone.number}" else if groups 0 of "%arg 3%" matched to "\W" is set: send "{@cmd.shop.clone.notinregex}" else: set {ishop::%arg 3%::size} to {ishop::%arg 2%::size} loop {ishop::%arg 2%::items::*}: set {ishop::%arg 3%::items::%{_n}%} to loop-value set {ishop::%arg 3%::sellprice::%loop-index%} to {ishop::%arg 2%::sellprice::%loop-index%} * (arg 5 parsed as number / 100) send "{@cmd.shop.clone.success}" else if arg 1 is "clearall" or "deleteall": send "{@cmd.shop.deleteall.success}" clear {ishop::*} else: send "{@cmd.shop.usage}" command /rename []: aliases: changename, name, rn permission: e.rename permission message: {@P} trigger: if tool = air: send "{@cmd.rename.hold}" else: set name of tool to colored arg 1 send "{@cmd.rename.success}" command /setlore [] []: aliases: loreset, lore, sl permission: e.lore permission message: {@P} trigger: if tool = air: send "{@cmd.setlore.hold}" else if arg 2 is not set: send "{@cmd.setlore.usage}" else if arg 1 parsed as integer is not set: send "{@cmd.setlore.notnumber}" else: set line arg 1 parsed as number of lore of player's tool to "%colored arg 2%" send "{@cmd.setlore.success}" # Detects drops to add cosmetics items in the GUI. on drop: {ishop::editslot::%player%} is set cancel event set {_s::*} to split {ishop::editslot::%player%} at ";" set {ishop::%{_s::2}%::items::%{_s::1}%} to item openeditshop({_s::2} in upper case, player) clear {ishop::editslot::%player%} # Variable cleaning, to avoid excess and possibly lag. every 10 minutes: clear {ishop::cooldown::*} clear {ishop::clickcooldown::*} clear {ishop::editslot::*} # Same thing as above, but when the script is unloaded. on unload: clear {ishop::cooldown::*} clear {ishop::clickcooldown::*} clear {ishop::editslot::*}