Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Продавец Пятёрочки:
- /* isA - массив; список товаров в каждой ячейке GUI. (оставляйте "0", если ячейка должна быть пустой);
- isA.buy - цена за покупку игроком товара у npc (учитывается как за стак из ячейки);
- isA.sale - цена за продажу игроком товара для npc (-.-.-.-.-);
- isA.amount - [текущее кол-во товара, минимальное кол-во товара, максимальное кол-во товара] ; каждый новый игровой день уснанавливает рандомно;
- isA.nbt - тэг в виде строки, для создания предмета;
- isA.item - предмет для манипуляций покупки/продажи (оставить "0", код сам его создаёт).
- */
- var isA = [0,
- {buy:1.936,sale:0.484,amount:[10,8,15],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:cooked_porkchop",Count:4b,tag:{},Damage:0s}',item:0}, // жар. свинина
- {buy:1.452,sale:0.363,amount:[10,8,15],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:cooked_mutton",Count:4b,tag:{},Damage:0s}',item:0}, // жар. баранина
- {buy:1.452,sale:0.363,amount:[12,10,17],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:cooked_chicken",Count:4b,tag:{},Damage:0s}',item:0}, // жар. курятина
- {buy:1.210,sale:0.302,amount:[8,6,12],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:cooked_fish",Count:4b,tag:{},Damage:0s}',item:0}, // жар. треска
- 0,0,0,0,0,0,0,0,
- {buy:0.726,sale:0.181,amount:[10,8,15],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:carrot",Count:4b,tag:{},Damage:0s}',item:0}, // морковь
- {buy:0.968,sale:0.242,amount:[10,8,15],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:potato",Count:16b,tag:{},Damage:0s}',item:0}, // картофель
- {buy:0.968,sale:0.242,amount:[12,10,17],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:apple",Count:4b,tag:{},Damage:0s}',item:0}, // яблоки
- {buy:1.210,sale:0.302,amount:[8,6,12],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:bread",Count:4b,tag:{},Damage:0s}',item:0}, // хлеб
- 0,0,
- {buy:0.35,sale:0.088,amount:[16,16,24],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:potion",Count:1b,tag:{Potion:"minecraft:water",display:{Name:"Аартезианская вода"},quest:1b},Damage:0s}',item:0},
- 0,
- {buy:10,sale:2.5,amount:[10,8,15],nbt:'{ForgeCaps:{"customnpcs:itemscripteddata":{}},id:"minecraft:potion",Count:1b,tag:{Potion:"minecraft:slowness",display:{Name:"Тормазное пойло"},quest:1b},Damage:0s}',item:0}];
- // money - [текущее кол-во денег у NPC, минимальное кол-во денег, максимальное кол-во денег] ; каждый новый игровой день уснанавливает рандомно
- // shop - кол-во слотов магазина ( = shop*9)
- var money = [250,225.500,285.450] ,shop=3 ,day ,ilA ,npcID, playerID, bpData;
- var home=[22,4,23,14,4,29]; // позиции npc днём и ночью
- function tick(event) {
- npcID = event.npc;
- if (npcID.world.getTime() <= 1000 || npcID.world.getTime() >= 16000) { // ночь
- if (day==undefined || day==true) {
- day = false;
- try {npcID.getAdvanced().setLine(0,0,"Z…z…z…z",null)} catch (err) {}
- try {npcID.getAdvanced().setLine(0,1,"Z…z…z…z.",null)} catch (err) {}
- try {npcID.getAdvanced().setLine(0,2,"Ночью все спят! Я ничего не продаю ночью!",null)} catch (err) {}
- npcID.say('Магазин закрывается. Пошли все вон!');
- npcID.getAi().setAnimation(2); // лежать
- // npcID.setHome(home[3],home[4],home[5]); // позиция ночью
- tpAll(npcID);
- }
- } else if (day==undefined || day==false) { // день
- day = true;
- try {npcID.getAdvanced().setLine(0,0,"Всегда свежие товары!",null)} catch (err) {}
- try {npcID.getAdvanced().setLine(0,1,"В Пятёрочке тебе всегда будут рады.",null)} catch (err) {}
- try {npcID.getAdvanced().setLine(0,2,"Вы уже определились с покупкой?",null)} catch (err) {}
- npcID.getAi().setAnimation(0); // нормально
- // npcID.setHome(home[0],home[1],home[2]); // позиция днём
- // пересоздание магазина
- money[0]=Math.round((money[1]+Math.random()*(money[2]-money[1]))*1000)/1000; // установить случайное кол-во денег от min до max
- for (var i=0;i<isA.length;i++) {
- if (isA[i]) {
- isA[i].amount[0]=Math.round(isA[i].amount[1]+Math.random()*(isA[i].amount[2]-isA[i].amount[1])); // установить случайное кол-во товаров от min до max
- }
- }
- }
- if (npcID.world.getTime() >= 14995 && npcID.world.getTime() <= 15005) { // говорит перед закрытием магазина
- npcID.say('Через час магазин закрывается! Оплачиваем покупки и по домам.')
- }
- }
- function interact(event) {
- playerID=event.player, npcID = event.npc;
- if (npcID.world.getTime() <= 1000 || npcID.world.getTime() >= 16000) {return} // ночь
- playerID.closeGui();
- var name=playerID.getName(),item,lore,temp=[],s; // переменные для работы с массивом
- var dPlArr = eval('JSON.parse(playerID.world.getStoreddata().get("data_'+name.toLowerCase()+'"))'); // данные игрока
- if (!dPlArr) { // Магазин использует электронную валюту. Пример её сосздания:
- dPlArr = {mana:0,money:150,key:[],spell:[[]],job:[0,0,[38]],lang:'ru',bonus:{addDamage:0,addProtect:0,manaCost:0,manaReg:0,maxLv:0}}; // создать пустую базу данных
- eval('playerID.world.getStoreddata().put("data_'+name.toLowerCase()+'", JSON.stringify(dPlArr))'); // сохранить базу в мире
- }
- bpData = playerID.showChestGui(shop);
- bpData.setName('Товары Пятёрочки:');
- ilA = [0,0,0,0,0,0,0,0,0, // массив для дополнительных подписей, если подписи не нужны оставляйте "0"
- 0,0,0,0,0,0,0,0,0, // lore - как массив строк:
- 0,['§f§oОбычный, §f§oУровень'+1,'§7§oИз чистых горных источников.§r'],0,['§f§oОбычный, §f§oУровень'+5,'§7§oСильно ударяет по голове, и вы не чувствуете своих ног.§r']];
- bpData;
- // основные подписи:
- for (var i=36;i<(36+shop*9);i++) { // расстановка предметов:
- s=i-36;
- if (isA[s]) {
- if (isA[s].item) { // создание или выбор товара
- item = isA[s].item.copy();
- } else {
- item = playerID.world.createItemFromNbt(event.API.stringToNbt(isA[s].nbt));
- isA[s].item = item.copy();
- }
- lore=loreSet(item.copy(),isA[s],ilA[s],dPlArr.money); // Изменение подписи
- item.setLore(lore);
- bpData.setSlot(i,item);
- lore=[];
- }
- }
- }
- function customChestClicked(event){ // управление магазином
- var name = playerID.getName(), dPlArr = eval('JSON.parse(playerID.world.getStoreddata().get("data_'+name.toLowerCase()+'"))');
- var i = event.slot,s = i-36,item,lore,temp=[false,0,0];
- if (isA[s] && event.heldItem.getName() == 'minecraft:air') { // покупка
- if (dPlArr.money < isA[s].buy) { // нехватает денег:
- playerID.message('§c§oУ вас не хватает денег для покупки!§r');
- return;
- }
- if (!isA[s].amount[0]) { // товара нет в наличии:
- playerID.message('§e§oТовар закончился, попробуйте прийти завтра.§r');
- return;
- }
- item = isA[s].item.copy();
- for (var inv=0;inv<(playerID.getInventory().getSize()-5);inv++) { // поиск свободного места:
- if (playerID.getInventory().getSlot(inv).getName()=='minecraft:air') {
- temp[0]=true;
- break;
- }
- if (playerID.getInventory().getSlot(inv).getName()==item.getName()) { // поиск подобного предмета
- temp[1] = playerID.getInventory().getSlot(inv).copy();
- temp[2] = item.copy();
- temp[1].setStackSize(1); // игнорировать кол-во
- temp[1].setCustomName(temp[1].getItemName()); // игнорировать имя предмета
- temp[2].setStackSize(1);
- temp[2].setCustomName(temp[2].getItemName());
- if (String(temp[1].getItemNbt().getMCNBT())==String(temp[2].getItemNbt().getMCNBT()) && (playerID.getInventory().getSlot(inv).getStackSize()+item.getStackSize()) <= item.getMaxStackSize()) { // сверка их сходства
- temp[0]=true;
- break;
- }
- }
- }
- if (temp[0]) { // выдать предмет
- playerID.giveItem(item);
- dPlArr.money = Math.round((dPlArr.money-isA[s].buy)*1000)/1000; // изменить монеты игрока
- eval('playerID.world.getStoreddata().put("data_'+name.toLowerCase()+'", JSON.stringify(dPlArr))');
- money[0] = Math.round((money[0]+isA[s].buy)*1000)/1000; // изменить монеты npc
- isA[s].amount[0]=isA[s].amount[0]-1; // изменить кол-во товаров в магазине
- playerID.message('§7Вы успешно купили: §r'+item.getDisplayName()+' §7- §f'+item.getStackSize()+' §7шт.');
- lore=loreSet(item.copy(),isA[s],ilA[s],dPlArr.money); // Изменение подписи
- event.slotItem.setLore(lore);
- } else { // нет места
- playerID.message('§cВ вашем инвентаре нет свободного места!');
- }
- return;
- }
- if (event.heldItem.getName() !== 'minecraft:air') { // продажа
- var held = event.heldItem.copy();
- for (var t=0;t<isA.length;t++) {
- if (isA[t] && event.heldItem.getName()==isA[t].item.getName()) { // поиск подобного предмета в магазине
- temp[1] = event.heldItem.copy();
- temp[2] = isA[t].item.copy();
- temp[1].setStackSize(1); // игнорировать кол-во
- temp[1].setCustomName(isA[t].item.getItemName()); // игнорировать имя предмета
- temp[2].setStackSize(1);
- temp[2].setCustomName(isA[t].item.getItemName());
- if (String(temp[1].getItemNbt().getMCNBT())==String(temp[2].getItemNbt().getMCNBT()) && held.getStackSize() >= isA[t].item.getStackSize()) {
- held.setStackSize(held.getStackSize()-isA[t].item.getStackSize()); // убавить кол-во предметов в руке/мышке
- event.heldItem = held; // изменить предмет руки/мышки
- dPlArr.money = Math.round((dPlArr.money+isA[t].sale)*1000)/1000; // изменить монеты игрока
- eval('playerID.world.getStoreddata().put("data_'+name.toLowerCase()+'", JSON.stringify(dPlArr))');
- money[0] = Math.round((money[0]-isA[t].sale)*1000)/1000; // изменить монеты npc
- isA[t].amount[0]=isA[t].amount[0]+1; // изменить кол-во товаров в магазине
- playerID.message('§7Вы успешно продали: §r'+isA[t].item.getDisplayName()+' §7- §f'+isA[t].item.getStackSize()+' §7шт.; за §2'+isA[t].buy+'§7$, теперь у вас: §2'+dPlArr.money+'§7$.');
- lore=loreSet(isA[t].item.copy(),isA[t],ilA[t],dPlArr.money); // Изменение подписи
- bpData.getSlot(t+36).setLore(lore);
- }
- }
- }
- }
- }
- function tpAll(npcID) { // телепортация всех игроков из магазина за входную дверь
- var playerArr = npcID.world.getNearbyEntities(-455, 64, -48, 4, EntityType_PLAYER), plX, plY, plZ;
- for (var i=0; i<playerArr.length;i++) {
- if (!playerArr[i].hasActiveQuest(42)) { // если у игрока не активен квест
- plX = playerArr[i].getBlockX();
- plY = playerArr[i].getBlockY();
- plZ = playerArr[i].getBlockZ();
- if (plX>=-457&&plX<=-453&&plY>=63&&plY<=67&&plZ>=-52&&plZ<=-44) { // если игрок в магазине
- npcID.executeCommand('/teleport '+playerArr[i].getName()+' -450 64 -51 270'); // tp за дверь, ко входу в магазин
- }
- }
- }
- }
- function loreSet(item,isA,ilA,mPl) { // пересоздаёт подпись предмета
- var lore=[], temp;
- // сбор подписей с предмета
- if (item.getLore().length) {for (var itemLore=0;itemLore<item.getLore().length;itemLore++) {if (temp) {temp.push(item.getLore()[itemLore])} else {temp = [item.getLore(itemLore)]}}}
- // добавление спец подписей
- if (ilA) {for (var j=0;j<ilA.length;j++) {if (lore.length) {lore.push(ilA[j])} else {lore = [ilA[j]]}}}
- // подписи цены покупки/продажи и инфо:
- if (isA.amount[0]) {
- temp = '§2§oКупить за: §r§f'+String(isA.buy).replace('.',',')+'§2§o$; §7§o(ЛКМ)§r'; // покупка
- if (lore.length) {lore.push(temp)} else {lore = [temp]}
- lore.push('§c§oПродать за: §r§f'+String(isA.sale).replace('.',',')+'§c§o$.§r'); // продажа
- lore.push('§3§oВ наличии ещё: §r§f'+isA.amount[0]+' §3§oшт.§r'); // ещё в наличии
- } else {
- temp = '§c§oПродать за: §r§f'+String(isA.sale).replace('.',',')+'§c§o$.§r'; // продажа
- if (lore.length) {lore.push(temp)} else {lore = [temp]}
- lore.push('§e§oТовар закончился, попробуйте прийти завтра.§r'); // нет в наличии
- }
- lore.push('§7§oЧтобы продать предмет, возьмите его, перенесите на магазин и нажмите ЛКМ.§r'); // инфо как продать
- lore.push('§7§oДенег у NPC: §r'+money[0]+'§7§o$; Денег у вас: §2'+mPl+'§7§o$'); // инфо по деньгам
- return lore;
- }
Add Comment
Please, Sign In to add comment