options: AdminPermission: admin.rynek import: org.bukkit.persistence.PersistentDataType org.bukkit.NamespacedKey function addID(item: item, id: number, price: number, owner: text) :: item: set {_key} to new NamespacedKey("rynek", "rynekid") set {_meta} to {_item}.getItemMeta() set {_metaID} to "%{_id}% , %{_price}% , %{_owner}%" {_meta}.getPersistentDataContainer().set({_key}, PersistentDataType.STRING, "%{_metaID}%") {_item}.setItemMeta({_meta}) return {_item} function checkID(item: item) :: text: set {_meta} to {_item}.getItemMeta() set {_key} to new NamespacedKey("rynek", "rynekid") set {_id} to {_meta}.getPersistentDataContainer().get({_key}, PersistentDataType.STRING) return {_id} function removeID(item: item) :: item: set {_key} to new NamespacedKey("rynek", "rynekid") set {_meta} to {_item}.getItemMeta() {_meta}.getPersistentDataContainer().remove({_key}) {_item}.setItemMeta({_meta}) return {_item} on join: if {Balance::%player%} is not set: set {Balance::%player%} to 0 function SellItem(item: item, price: number, owner: text): add 1 to {GlobalRynekID} set {_item} to addID({_item}, {GlobalRynekID}, {_price}, {_owner}) add {_item} to {RynekItems::*} command /rynek [] []: trigger: if arg 1 is not set: RynekOpen(player, 1, "Wszystko", "Brak", false, "", "Od nazwy przedmiotu", false) else if arg 1 is "wystaw": if arg 2 is set: if player's tool is air: send "&cNie możesz wystawić powietrza na rynek!" stop if arg 2 > 999999999999: send "&cNie możesz wystawiać tak dużych cen!" stop if arg 2 <= 0: send "&cNie możesz wystawić poniżej zera monet!" stop SellItem(player's tool, arg 2, player's name) send "&aPomyślnie wystawiono item na rynek!" set player's tool to air reloadRynek() else: send "&cPoprawne użycie: /rynek wystaw " else if arg 1 is "wyczysc": if player have permission "*": clear {RynekItems::*} send "&aPoprawnie wyczyszczono rynek!" reloadRynek() else: send "&cPoprawne użycie: /rynek [] " function getSortedList(p: player, type: text, items: items, typeX: text) :: items: if {_type} is "Brak": return {_items::*} set {_aItems::*} to {_items::*} loop {_items::*}: set {_checkID::*} to split checkID(loop-value) at " , " set {_NewList::%loop-index%} to {_checkID::2} parsed as number set {_top::*} to sorted indices of {_NewList::*} in descending order if {_type} is "Down": set {_top::*} to reversed {_top::*} loop {_top::*}: set {_item} to {_aItems::%loop-value parsed as number%} add {_item} to {_return::*} return {_return::*} function getItemByID(p: player, id: number, type: text) :: item: if {_type} is "": set {_list::*} to {RynekItems::*} else if {_type} is "backed": set {_list::*} to {RynekBackedItems::%{_p}%::*} loop {_list::*}: set {_checkID::*} to split checkID(loop-value) at " , " if {_checkID::1} parsed as number = {_id}: return loop-value function getTypedList(p: player, sort: text, costsort: text, my: boolean, search: text, searchsort: text, backed: boolean, items: items) :: items: if {_backed} is true: if {_costsort} is "Od najniżeszej": set {_costsort} to "Down" if {_costsort} is "Od najwyższej": set {_costsort} to "Up" set {_list::*} to getSortedList({_p}, {_costsort}, {RynekBackedItems::%{_p}%::*}, "backed") else: set {_list::*} to {_items::*} clear {_items::*} if {_backed} is false: if {_my} is true: loop {_list::*}: set {_checkID::*} to split checkID(loop-value) at " , " if "%{_checkID::3}%" is "%{_p}%": add loop-value to {_items::*} else if {_my} is false: loop {_list::*}: set {_checkID::*} to split checkID(loop-value) at " , " if "%{_checkID::3}%" is not "%{_p}%": add loop-value to {_items::*} if {_backed} is true: set {_items::*} to {_list::*} if {_search} is not "": set {_list::*} to {_items::*} clear {_items::*} if {_searchsort} is "Od nazwy przedmiotu": loop {_list::*}: if name of loop-value contains {_search}: add loop-value to {_items::*} else if "%loop-value%" contains {_search}: add loop-value to {_items::*} else if {_searchsort} is "Od lore przedmiotu": loop {_list::*}: if uncolored lore of loop-value contains {_search}: add loop-value to {_items::*} else if "%uncolored lore of loop-value%" contains {_search}: add loop-value to {_items::*} else if {_searchsort} is "Od ceny przedmiotu": loop {_list::*}: set {_checkID::*} to split checkID(loop-value) at " , " if {_checkID::2} is {_search}: add loop-value to {_items::*} else if "%{_checkID::2}%$" is {_search}: add loop-value to {_items::*} else if {_searchsort} is "Od nazwy właściciela": loop {_list::*}: set {_checkID::*} to split checkID(loop-value) at " , " if {_checkID::3} contains {_search}: add loop-value to {_items::*} if {_sort} is "Wszystko": return {_items::*} else if {_sort} is "Bloki": loop {_items::*}: if "%loop-value%" parsed as item is a block: add loop-value to {_return::*} else if {_sort} is "Jedzenie": loop {_items::*}: if loop-value is edible: add loop-value to {_return::*} else if {_sort} is "Narzędzia i Uzbrojenie": loop {_items::*}: if loop-value is armour or shovel or axe or pickaxe or sword or hoe or shield or trident: add loop-value to {_return::*} else if {_sort} is "Inne": loop {_items::*}: if loop-value is not armour or shovel or axe or pickaxe or sword or hoe or shield or trident: if "%loop-value%" parsed as item is not a block: if loop-value is not edible: add loop-value to {_return::*} return {_return::*} function getItemLore(p: player, item: item) :: objects: set {_checkID::*} to split checkID({_item}) at " , " set {_price} to {_checkID::2} parsed as number set {_owner} to {_checkID::3} add "&8✕ &fSprzedający: &6%{_owner}%" to {_lore::*} add "&8✕ &fCena: &a%{_price}%$" to {_lore::*} add "" to {_lore::*} if {_owner} = "%{_p}%": add "&cNie możesz kupić tego produktu" and "&cponieważ jesteś właścicielem tego produktu!" and "" to {_lore::*} add "&7Klikinj &fSHIFT + RMB&7, aby usunąć produkt z rynku!" to {_lore::*} else if {_p} have permission "{@AdminPermission}": add "&eKliknij &fSHIFT + LMB&e, aby usunąć przedmiot z" and "&erynku jako administrator!" to {_lore::*} else if {Balance::%{_p}%} >= {_price}: add "&aStać cię na ten przedmiot!" to {_lore::*} add "&aZostanie ci: &f%{Balance::%{_p}%} - {_price}%$" to {_lore::*} else: add "&cNie stać cię na ten przedmiot!" to {_lore::*} add "&cBrakuje ci: &f%{_price} - {Balance::%{_p}%}%$" to {_lore::*} return {_lore::*} function getLore(type: text, var: text) :: objects: if {_type} is "backed": if {_var} is "true": add " &3» &eWłączone" to {_return::*} else: add " &3» &cWyłączone" to {_return::*} else if {_type} is "search": set {_list::*} to "Od nazwy przedmiotu" and "Od lore przedmiotu" and "Od nazwy właściciela" and "Od ceny przedmiotu" loop {_list::*}: if uncolored {_var} contains loop-value: add " &3» &a%loop-value%" to {_return::*} else: add " &3» &7%loop-value%" to {_return::*} else if {_type} is "my": if {_var} is "true": add " &3» &eWłączone" to {_return::*} if {_var} is "false": add " &3» &cWyłączone" to {_return::*} else if {_type} is "costsort": set {_list::*} to "Brak" and "Od najwyższej" and "Od najniżeszej" loop {_list::*}: if "%{_var}%" contains loop-value: add " &3» &a%loop-value%" to {_return::*} else: add " &3» &7%loop-value%" to {_return::*} else if {_type} is "sort": set {_list::*} to "Wszystko" and "Bloki" and "Jedzenie" and "Narzędzia i Uzbrojenie" and "Inne" loop {_list::*}: if {_var} contains loop-value: add " &3» &a%loop-value%" to {_return::*} else: add " &3» &7%loop-value%" to {_return::*} return {_return::*} function getMaxPage(list: items) :: number: set {_maxPage} to ceil(amount of {_list::*} / 45) if {_maxPage} is 0: set {_maxPage} to 1 return {_maxPage} function get(type: text, inv: inventory) :: text: if {_type} is "page": set {_split::*} to split uncolored name of {_inv} at "/" replace all "Rynek - (" with "" in {_split::1} return {_split::1} if {_type} is "sort": set {_sort} to uncolored name of slot 52 of {_inv} replace all "Sortuj według kategorii: " with "" in {_sort} return {_sort} if {_type} is "costsort": set {_costsort} to uncolored name of slot 51 of {_inv} replace all "Sortuj według ceny: " with "" in {_costsort} return {_costsort} if {_type} is "my": set {_my} to uncolored name of slot 49 of {_inv} replace all "Podgląd twoich przedmiotów: " with "" in {_my} if {_my} is "Wyłączono": set {_my} to "false" else if {_my} is "Włączono": set {_my} to "true" return {_my} if {_type} is "search": set {_search} to uncolored name of slot 47 of {_inv} replace all "Szukanie przedmiotów: " with "" in {_search} if {_search} is "Brak": set {_search} to "" return {_search} if {_type} is "searchsort": set {_lore::*} to lore of slot 47 of {_inv} loop {_lore::*}: if loop-value contains "&a": set {_searchsort} to uncolored loop-value replace all " » " with "" in {_searchsort} return {_searchsort} if {_type} is "backed": set {_backed} to uncolored name of slot 46 of {_inv} replace all "Itemy zwrócone: " with "" in {_backed} if {_backed} is "Wyłączono": set {_backed} to "false" else if {_backed} is "Włączono": set {_backed} to "true" return {_backed} command /givemoney [] []: permission: * permission message: &cBrak odpowiedniej permisji! trigger: if arg 1 or arg 2 is not set: send "&cPoprawne użycie: /givemoney " stop send "&aPoprawnie nadano pieniądze graczowi!" add arg 2 to {Balance::%arg 1%} reloadRynek() function RynekOpen(p: player, page: number, sort: text, costsort: text, my: boolean, search: text, searchsort: text, backed: boolean): set {_ItemList::*} to getSortedList({_p}, {_costsort}, {RynekItems::*}, "") set {_ItemList::*} to getTypedList({_p}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}, {_ItemList::*}) set {_maxPage} to getMaxPage({_ItemList::*}) if {_maxPage} < {_page}: set {_page} to {_maxPage} set {_gui} to chest inventory with 6 rows named "&8Rynek - (%{_page}%/%{_maxPage}%)" set slot (integers between 45 and 53) of {_gui} to gray stained glass pane named "&7" if {_ItemList::*} is not set: set slot 22 of {_gui} to barrier named "&cBrak przedmiotów na rynku!" else: loop 45 times: set {_index} to ({_page} - 1) * 45 + loop-number set slot (loop-number - 1) of {_gui} to {_ItemList::%{_index}%} with lore getItemLore({_p}, {_ItemList::%{_index}%}) if {_page} > 1: set slot 45 of {_gui} to arrow named "&7Wróć na stronę &6%{_page} - 1%" set {_nextPageIndex} to {_page} * 45 + 1 if {_ItemList::%{_nextPageIndex}%} is set: set slot 53 of {_gui} to arrow named "&7Przejdź na stronę &6%{_page} + 1%" if {_backed} is true: set {_backedFormat} to "&6&lWłączono" else: set {_backedFormat} to "&c&lWyłączono" set slot 46 of {_gui} to end portal frame named "&7Itemy zwrócone: %{_backedFormat}%" with lore getLore("backed", "%{_backed}%") and "" and "&eKliknij, aby zmienic!" if {_search} is "": set {_searchFormat} to "&7&lBrak" else: set {_searchFormat} to "&a&l%{_search}%" set slot 47 of {_gui} to name tag named "&7Szukanie przedmiotów: %{_searchFormat}%" with lore getLore("search", {_searchsort}) and "" and "&eKliknij &FLMB&e, aby zacząć wyszukiwać przedmioty!" and "&eKliknij &fSHIFT + LMB&e, aby zresetować wyszukiwanie!" and "&eKliknij &fSHIFT + RMB&e, aby zmienic!" if {_my} is true: set {_myFormat} to "&6&lWłączono" else if {_my} is false: set {_myFormat} to "&c&lWyłączono" set slot 49 of {_gui} to book named "&7Podgląd twoich przedmiotów: %{_myFormat}%" with lore getLore("my", "%{_my}%") and "" and "&eKliknij, aby zmienic!" and "" and "&8» &7Komenda do wystawiania przedmiotów: &f/rynek wystaw " and "&8» &7Twój aktualny stan konta: &f%{Balance::%{_p}%}%$" if {_costsort} is "Up": set {_costsortFormat} to "Od najwyższej" else if {_costsort} is "Down": set {_costsortFormat} to "Od najniżeszej" else: set {_costsortFormat} to "Brak" set slot 51 of {_gui} to gold nugget named "&7Sortuj według ceny: &6&l%{_costsortFormat}%" with lore getLore("costsort", {_costsortFormat}) and "" and "&eKliknij, aby zmienic!" set slot 52 of {_gui} to gold ingot named "&7Sortuj według kategorii: &6&l%{_sort}%" with lore getLore("sort", {_sort}) and "" and "&eKliknij, aby zmienic!" open {_gui} to {_p} function DeleteItemFromRynek(p: player, item: item, page: number, sort: text, costsort: text, my: boolean, search: text, searchsort: text, backed: boolean, type: text): set {_gui} to chest inventory named "&8Potwierdź zwrócenie przedmiotu!" set {_checkID::*} to split checkID({_item}) at " , " loop {RynekBackedItems::%{_p}%::*}: set {_getID::*} to split checkID(loop-value) at " , " if {_getID::1} parsed as number is {_checkID::1} parsed as number: set {_item} to loop-value set metadata tag "itemDeliton" of {_p} to "%{_page}% , %{_sort}% , %{_costsort}% , %{_my}% , %{_search}% , %{_searchsort}% , %{_backed}% , %{_checkID::1}% , %{_type}%" set slot 11 of {_gui} to red concrete named "&cAnuluj zabieranie przedmiotu z przedmiotów zwróconych!" with lore "&7Klikinj, aby wrócić do menu głównego rynku!" set slot 15 of {_gui} to green concrete named "&aPotwierdź zabieranie przedmiotu z przedmiotów zwróconych!" with lore "&7Kliknij, aby zabrać przedmiot z przedmiotów zwróconych!" set slot 13 of {_gui} to {_item} open {_gui} to {_p} function BuyItemFromRynek(p: player, item: item, page: number, sort: text, costsort: text, my: boolean, search: text, searchsort: text, backed: boolean): set {_gui} to chest inventory named "&8Potwierdź kupno przedmiotu!" set {_checkID::*} to split checkID({_item}) at " , " set {_item} to getItemByID({_p}, {_checkID::1} parsed as number, "") set metadata tag "itemBuy" of {_p} to "%{_page}% , %{_sort}% , %{_costsort}% , %{_my}% , %{_search}% , %{_searchsort}% , %{_backed}% , %{_checkID::1}%" set slot 11 of {_gui} to red concrete named "&cAnuluj kupno przedmiotu z rynku!" with lore "&7Klikinj, aby wrócić do menu głównego rynku!" set slot 15 of {_gui} to green concrete named "&aPotwierdź kupno przedmiotu z rynku!" with lore "&7Kliknij, aby usunąć dany item z rynku!" set slot 13 of {_gui} to {_item} with lore "" and "&8✕ &fSprzedający: &6%{_checkID::3}%" and "&8✕ &fCena: &a%{_checkID::2}%$" and "" and "&aStać cię na ten przedmiot!" and "&aZostanie ci: &f%{Balance::%{_p}%} - {_checkID::2} parsed as number%$" open {_gui} to {_p} on inventory click: if name of event-inventory is "&8Potwierdź zwrócenie przedmiotu!": cancel event clicked slot is not air set {_getAll::*} to split metadata tag "itemDeliton" of player at " , " if {_getAll::5} is not set: set {_getAll::5} to "" if {_getAll::3} is "Od najniżeszej": set {_getAll::3} to "Down" else if {_getAll::3} is "Od najwyższej": set {_getAll::3} to "Up" if clicked slot is 11: RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) else if clicked slot is 15: if {_getAll::7} parsed as boolean is true: loop {RynekBackedItems::%player%::*}: set {_getID::*} to split checkID(loop-value) at " , " if {_getID::1} parsed as number is {_getAll::8} parsed as number: set {_item} to loop-value remove {_item} from {RynekBackedItems::%player%::*} set {_item} to removeID({_item}) give {_item} to player send "&aPoprawnie odebrano przedmiot z przedmiotów zwróconych!" to player RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) stop set {_item} to getItemByID(player, {_getAll::8} parsed as number, "") remove {_item} from {RynekItems::*} set {_checkID::*} to split checkID({_item}) at " , " if {_getAll::9} is "admin": add {_item} to {RynekBackedItems::%{_checkID::3} parsed as player%::*} else: set {_item} to removeID({_item}) give {_item} to player send "&aPoprawnie zwrócono przedmiot z rynku!" to player RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) reloadRynek() if name of event-inventory is "&8Potwierdź kupno przedmiotu!": cancel event clicked slot is not air set {_getAll::*} to split metadata tag "itemBuy" of player at " , " if {_getAll::5} is not set: set {_getAll::5} to "" if {_getAll::3} is "Od najniżeszej": set {_getAll::3} to "Down" else if {_getAll::3} is "Od najwyższej": set {_getAll::3} to "Up" if clicked slot is 11: RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) else if clicked slot is 15: set {_item} to getItemByID(player, {_getAll::8} parsed as number, "") set {_checkID::*} to split checkID({_item}) at " , " if {Balance::%player%} < {_checkID::2} parsed as number: RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) send "&cNie masz wystarczająco funduszy!" stop remove {_item} from {RynekItems::*} add {_checkID::2} parsed as number to {Balance::%{_checkID::3} parsed as player%} remove {_checkID::2} parsed as number from {Balance::%player%} send "&aPoprawnie kupiono przedmiot z rynku!" send title "&6Rynek" with subtitle "&7Gracz &6&l%player%&7 kupił twój przedmiot za: &a%{_checkID::2}%$" to {_checkID::3} parsed as player RynekOpen(player, {_getAll::1} parsed as number, {_getAll::2}, {_getAll::3}, {_getAll::4} parsed as boolean, {_getAll::5}, {_getAll::6}, {_getAll::7} parsed as boolean) set {_item} to removeID({_item}) reloadRynek() give {_item} to player if name of event-inventory contains "&8Rynek - (": cancel event event-inventory is not player's inventory set {_page} to get("page", event-inventory) parsed as number set {_sort} to get("sort", event-inventory) set {_costsort} to get("costsort", event-inventory) set {_my} to get("my", event-inventory) parsed as boolean set {_search} to get("search", event-inventory) set {_searchsort} to get("searchsort", event-inventory) set {_backed} to get("backed", event-inventory) parsed as boolean if index of clicked slot is between 0 and 44: clicked slot is not air clicked slot is not barrier named "&cBrak przedmiotów na rynku!" clicked slot is not barrier named "&cNie masz wystarczająco funduszy!" if {_backed} is true: click type is right mouse button with shift DeleteItemFromRynek(player, clicked slot, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}, "") stop set {_checkID::*} to split checkID(clicked slot) at " , " if {_checkID::3} is "%player%": if click type is right mouse button with shift: DeleteItemFromRynek(player, clicked slot, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}, "") else if {_checkID::3} is not "%player%": if click type is left mouse button with shift: if player have permission "{@AdminPermission}": DeleteItemFromRynek(player, clicked slot, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}, "admin") stop if {Balance::%player%} >= {_checkID::2} parsed as number: BuyItemFromRynek(player, clicked slot, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) else: set {_x} to clicked slot set clicked slot to barrier named "&cNie masz wystarczająco funduszy!" wait 1 seconds set clicked slot to {_x} else: if {_costsort} is "Od najwyższej": set {_costsort} to "Up" if {_costsort} is "Od najniżeszej": set {_costsort} to "Down" if clicked slot is arrow: if clicked slot is 45: RynekOpen(player, {_page} - 1, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) else if clicked slot is 53: RynekOpen(player, {_page} + 1, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) if clicked slot is 46: if get("backed", event-inventory) is "true": RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, false) else: RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, true) if clicked slot is 47: if click type is right mouse button with shift: set {_lore::*} to lore of clicked slot set {_list::*} to "Od nazwy przedmiotu" and "Od lore przedmiotu" and "Od nazwy właściciela" and "Od ceny przedmiotu" loop {_lore::*}: if loop-value contains "&a": set {_loopindex} to loop-index parsed as number if {_list::%{_loopindex} + 1%} is set: RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_list::%{_loopindex} + 1%}, {_backed}) else: RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_list::1}, {_backed}) else if click type is left mouse button with shift: RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, "", {_searchsort}, {_backed}) else: set metadata tag "searchingRynek" of player to "%{_page}% , %{_sort}% , %{_costsort}% , %{_my}% , %{_search}% , %{_searchsort}% , %{_backed}%" close player's inventory StartSearching(player) if clicked slot is 49: if {_my} is true: RynekOpen(player, {_page}, {_sort}, {_costsort}, false, {_search}, {_searchsort}, {_backed}) else if {_my} is false: RynekOpen(player, {_page}, {_sort}, {_costsort}, true, {_search}, {_searchsort}, {_backed}) if clicked slot is 51: set {_lore::*} to lore of clicked slot set {_list::*} to "Brak" and "Od najwyższej" and "Od najniżeszej" loop {_lore::*}: if loop-value contains "&a": set {_loopindex} to loop-index parsed as number if {_list::%{_loopindex} + 1%} is set: if {_list::%{_loopindex} + 1%} is "Od najwyższej": set {_costsort} to "Up" if {_list::%{_loopindex} + 1%} is "Od najniżeszej": set {_costsort} to "Down" RynekOpen(player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) else: RynekOpen(player, {_page}, {_sort}, "Brak", {_my}, {_search}, {_searchsort}, {_backed}) if clicked slot is 52: set {_lore::*} to lore of clicked slot set {_list::*} to "Wszystko" and "Bloki" and "Jedzenie" and "Narzędzia i Uzbrojenie" and "Inne" loop {_lore::*}: if loop-value contains "&a": set {_loopindex} to loop-index parsed as number if {_list::%{_loopindex} + 1%} is set: RynekOpen(player, {_page}, {_list::%{_loopindex} + 1%}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) else: RynekOpen(player, {_page}, "Wszystko", {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) function StartSearching(p: player): while metadata tag "searchingRynek" of {_p} is set: send title "&6Szukanie przedmiotów!" with subtitle "&7Wpisz przedmiot na chacie, aby wyszukać! Aby anulować wpisz ""&canuluj&7""!" to {_p} wait 2 seconds on chat: if metadata tag "searchingRynek" of player is set: cancel event set {_meta::*} to split metadata tag "searchingRynek" of player at " , " if {_meta::5} is not set: set {_meta::5} to "" if {_meta::3} is "Od najniżeszej": set {_meta::3} to "Down" else if {_meta::3} is "Od najwyższej": set {_meta::3} to "Up" clear metadata tag "searchingRynek" of player if message is "anuluj": RynekOpen(player, {_meta::1} parsed as number, {_meta::2}, {_meta::3}, {_meta::4} parsed as boolean, "", {_meta::6}, {_meta::7} parsed as boolean) send "&aPomyślnie anulowano wyszukiwanie na rynku!" to player else: RynekOpen(player, 1, "Wszystko", "Brak", {_meta::4} parsed as boolean, message, {_meta::6}, {_meta::7} parsed as boolean) function reloadRynek(): loop all players: if name of loop-player's current inventory contains "&8Rynek - (": set {_inv} to loop-player's current inventory set {_page} to get("page", {_inv}) parsed as number set {_sort} to get("sort", {_inv}) set {_costsort} to get("costsort", {_inv}) set {_my} to get("my", {_inv}) parsed as boolean set {_search} to get("search", {_inv}) set {_searchsort} to get("searchsort", {_inv}) set {_backed} to get("backed", {_inv}) parsed as boolean RynekOpen(loop-player, {_page}, {_sort}, {_costsort}, {_my}, {_search}, {_searchsort}, {_backed}) on tab complete of "/rynek": set tab completions for position 1 to "wystaw" if player have permission "{@AdminPermission}": set tab completions for position 1 to "wystaw" and "wyczysc" if tab arg 1 is "wystaw": set tab completions for position 2 to ""