123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- event.load("snuvi_click");
- event.load("inv_close");
- event.load("block_click");
- prefix_shop = "§6Shop";
- invid_to_sign_block = map.new();
- msg.string("dev", "§bChestShops §rloaded.");
- @main
- wait();
- ignoreGoto(event);
- goto("main");
- @snuvi_click
- title_string = string.removeFormat(string.text(inv_title));
- if(!string.startsWith(title_string, "ChestShop", 0)) {
- goto("main");
- }
- cancel = true;
- inv_id = inv.getId(inv);
- if(inv_slot == 17) {
- map.remove(invid_to_sign_block, inv_id);
- inv.close(player);
- goto("main");
- }
- sign_block = map.get(invid_to_sign_block, inv_id);
- if(sign_block == null) {
- inv.close(player);
- msg.prefix(player, prefix_shop, "Defect shop.");
- goto("main");
- }
- if(!block.isWallSign(sign_block)) {
- map.remove(invid_to_sign_block, inv_id);
- inv.close(player);
- msg.prefix(player, prefix_shop, "No longer a shop.");
- goto("main");
- }
- factor = 1;
- chest_block = block.getShopChest(sign_block);
- if(!block.isChest(chest_block)) {
- map.remove(invid_to_sign_block, inv_id);
- inv.close(player);
- msg.prefix(player, prefix_shop, "No longer a shop.");
- goto("main");
- }
- block_inv = block.getInventory(chest_block);
- if(inv_slot == 3) { //Buy
- itemstack = inv.getItem(inv, 4);
- if(click == "SHIFT_LEFT") {
- factor = math.roundDown(item.getMaxAmount(itemstack) / item.getAmount(itemstack));
- }
- buy_price = shop.getBuyPrice(inv) * factor;
- item.removeFlag(itemstack, "HIDE_DESTROYS");
- itemstack_2 = item.clone(itemstack);
- if(click == "SHIFT_LEFT") {
- item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
- }
- //Check players money
- if(!hasEnoughMoney(player, buy_price)) {
- msg.prefix(player, prefix_shop, "You do not have enough money.");
- goto("main");
- }
- itemamount = inv.getItemAmount(block_inv, itemstack);
- if(itemamount < item.getAmount(itemstack_2)) {
- msg.prefix(player, prefix_shop, "Not enough items in chest.");
- goto("main");
- }
- player.splitGiveItem(player, itemstack_2, true);
- inv.removeItem(block_inv, itemstack_2);
- owner_player_id = read.number(sign.getString(sign_block, "FRONT", 3));
- if(!isDouble(owner_player_id)) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- if(player.getNameFromId(owner_player_id) == null) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- money.add(owner_player_id, buy_price);
- money.sub(player, buy_price);
- } elseif(inv_slot == 12) { //Sell
- itemstack = inv.getItem(inv, 11);
- if(click == "SHIFT_LEFT") {
- factor = math.roundDown(item.getMaxAmount(itemstack) / item.getAmount(itemstack));
- }
- sell_price = shop.getSellPrice(inv) * factor;
- item.removeFlag(itemstack, "HIDE_DESTROYS");
- itemstack_2 = item.clone(itemstack);
- if(click == "SHIFT_LEFT") {
- item.setAmount(itemstack_2, item.getAmount(itemstack_2) * factor);
- }
- owner_player_id = read.number(sign.getString(sign_block, "FRONT", 3));
- if(!isDouble(owner_player_id)) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- if(player.getNameFromId(owner_player_id) == null) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- if(!hasEnoughMoney(owner_player_id, sell_price)) {
- msg.prefix(player, prefix_shop, "Shop owner does not have enough money.");
- goto("main");
- }
- //Items des Spielers checken
- if(player.getItemAmount(player, itemstack) < item.getAmount(itemstack_2)) {
- msg.prefix(player, prefix_shop, "You do not have enough items.");
- goto("main");
- }
- //Items in der Kiste unterbringen, ansonsten wieder entfernen, wenn kein Platz ist
- not_added = inv.addItem(block_inv, itemstack_2);
- if(not_added != 0) {
- msg.prefix(player, prefix_shop, "Not enough space in chest.");
- item.setAmount(itemstack_2, item.getAmount(itemstack_2) - not_added);
- inv.removeItem(block_inv, itemstack_2);
- goto("main");
- }
- money.sub(owner_player_id, sell_price);
- money.add(player, sell_price);
- player.removeItem(player, itemstack_2);
- }
- goto("main");
- @inv_close
- map.remove(invid_to_sign_block, inv.getId(inv));
- goto("main");
- @block_click
- if(block == null) {
- goto("main");
- }
- if(block.isWallSign(block)) {
- if(!block.isShopSign(block)) {
- goto("main");
- }
- chest_block = block.getShopChest(block);
- if(chest_block == null) {
- goto("main");
- }
- world = loc.getWorld(entity.getLocation(player));
- world_name = world.getName(world);
- if(!world.isSurvName(world_name)) {
- goto("main");
- }
- owner_id = shop.getOwner(block);
- if(owner_id == null) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- owner_name = player.getNameFromId(owner_id);
- if(owner_name == null) {
- msg.prefix(player, prefix_shop, "Invalid shop owner.");
- goto("main");
- }
- item_stack = shop.getItem(chest_block);
- if(item_stack == null) {
- msg.prefix(player, prefix_shop, "No item in chest.");
- goto("main");
- }
- inv = inv.new("000200000000200002", text.new(string.concat("§8ChestShop of ", owner_name)));
- shop.setBuyElement(block, inv, item.clone(item_stack));
- shop.setSellElement(block, inv, item.clone(item_stack));
- inv.setItem(inv, 17, customitem.create("CROSS_RED", 1, "§fClose", null));
- inv.open(inv, player);
- map.add(invid_to_sign_block, inv.getId(inv), block);
- }
- goto("main");
- function shop.setBuyElement(sign_block, inv, item_stack) {
- buy_line = sign.getString(sign_block, "FRONT", 1);
- split_array = string.split(" ", buy_line);
- if(array.getSize(split_array) < 4) {
- return;
- }
- buy_amount = read.number(split_array[1]);
- if(!isDouble(buy_amount)) {
- return;
- }
- buy_price = read.number(split_array[3]);
- if(!isDouble(buy_price)) {
- return;
- }
- item.setAmount(item_stack, buy_amount);
- a = money.splitCap(buy_price);
- gold = a[0];
- silver = a[1];
- bronze = a[2];
- index = 2;
- if(bronze != 0) {
- inv.setItem(inv, index--, customitem.create("COPPER_COIN", bronze, null, null));
- }
- if(silver != 0) {
- inv.setItem(inv, index--, customitem.create("SILVER_COIN", silver, null, null));
- }
- if(gold != 0) {
- inv.setItem(inv, index, customitem.create("GOLD_COIN", gold, null, null));
- }
- inv.setItem(inv, 3, customitem.create("ARROW_RIGHT", 1, "§fBuy", null));
- inv.setItem(inv, 4, item_stack);
- }
- function shop.setSellElement(sign_block, inv, item_stack) {
- sell_line = sign.getString(sign_block, "FRONT", 2);
- split_array = string.split(" ", sell_line);
- if(array.getSize(split_array) < 4) {
- return;
- }
- sell_amount = read.number(split_array[1]);
- if(!isDouble(sell_amount)) {
- return;
- }
- sell_price = read.number(split_array[3]);
- if(!isDouble(sell_price)) {
- return;
- }
- sell_stack = item.clone(item_stack);
- item.setAmount(sell_stack, sell_amount);
- a = money.splitCap(sell_price);
- gold = a[0];
- silver = a[1];
- bronze = a[2];
- index = 13;
- if(bronze != 0) {
- inv.setItem(inv, index++, customitem.create("COPPER_COIN", bronze, null, null));
- }
- if(silver != 0) {
- inv.setItem(inv, index++, customitem.create("SILVER_COIN", silver, null, null));
- }
- if(gold != 0) {
- inv.setItem(inv, index, customitem.create("GOLD_COIN", gold, null, null));
- }
- inv.setItem(inv, 11, sell_stack);
- inv.setItem(inv, 12, customitem.create("ARROW_RIGHT", 1, "§fSell", null));
- }
- function shop.getItem(chest_block) {
- inv = block.getInventory(chest_block);
- for(i = 0; i < inv.getSize(inv); i++) {
- item_stack = inv.getItem(inv, i);
- if(!item.isAir(item_stack)) {
- return item.clone(item_stack);
- }
- }
- return null;
- }
- function block.getShopChest(sign_block) {
- chest_block = block.mod(sign_block, 0, -1, 0);
- if(block.isChest(chest_block)) {
- return chest_block;
- }
- return null;
- }
- function block.isShopSign(sign_block) {
- line0 = sign.getString(sign_block, "FRONT", 0);
- if(line0 == "[Shop]") {
- return true;
- }
- return false;
- }
- function shop.getItemAmount(inv, slot) {
- item = inv.getItem(inv, slot);
- if(item == null) {
- return 0;
- }
- if(customitem.isGoldCoin(item)) {
- return item.getAmount(item) * 64 * 64;
- }
- if(customitem.isSilverCoin(item)) {
- return item.getAmount(item) * 64;
- }
- if(customitem.isCopperCoin(item)) {
- return item.getAmount(item);
- }
- return 0;
- }
- function shop.getBuyPrice(inv) {
- snuvis = 0;
- snuvis += shop.getItemAmount(inv, 0);
- snuvis += shop.getItemAmount(inv, 1);
- snuvis += shop.getItemAmount(inv, 2);
- return snuvis;
- }
- function shop.getSellPrice(inv) {
- snuvis = 0;
- snuvis += shop.getItemAmount(inv, 13);
- snuvis += shop.getItemAmount(inv, 14);
- snuvis += shop.getItemAmount(inv, 15);
- return snuvis;
- }
|