Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Туториал Skript - легкий и понятный скриптовый язык

попробуй заменить
Этой ошибки уже нет. Она была когда я поднимал блок. Возможно когда я менял строку о зачислении денег (деньги кст не зачисляет).

А эти строки он не понимает, не в этом проблема:
Код:
if event-entity is gold block:
        if event-entity's name contains "$":

Какой у тебя стоит mirror и версия ядра, попробую протестить всё это у себя и начну подбирать версию mirror под своё ядро, если не найду, видимо нужно апать версию ядра

Ещё хотел узнать как сделать, чтобы любой золотой блок не запускал скрипт или проще запретить выбрасывать и ставить их.
 
Последнее редактирование:
Этой ошибки уже нет. Она была когда я поднимал блок. Возможно когда я менял строку о зачислении денег (деньги кст не зачисляет).

А эти строки он не понимает, не в этом проблема:
Код:
if event-entity is gold block:
        if event-entity's name contains "$":

Какой у тебя стоит mirror и версия ядра, попробую протестить всё это у себя и начну подбирать версию mirror под своё ядро, если не найду, видимо нужно апать версию ядра



Код:
on break:
    chance of 100%:
        set {_number} to random integer between 1 and 10 #получаем рандом значение
        drop gold block named "&2%{_number}% $" at location of event-block

#При подбирании золотого блока
on pick up of gold block:
    set {_number} to first element out of (split name of item at " ") #чекаем название нашего предмета, которое состоит из двух элементов: числа и $, получаем число и идем дальше
    add {_number} to player's balance #прибавляем полученное число к балансу игрока
    send "Вы получили %{_number}% баксов" to player
    delete item  #удаляем предмет
    cancel event
on item spawn: #это не трогать))
    if event-item is gold block:
        if event-item's name contains "&2$":
            event-entity.setCustomNameVisible(true)
            event-entity.setCustomName(event-entity.getItemStack().getItemMeta().getDisplayName() ? "%event-entity.getItemStack()%")

Собстна мой код, который я протестил, все работает, версия PaperSpigot 1.12.2, самая последняя версия skript mirror 1.0.0.
 
Ещё хотел узнать как сделать, чтобы любой золотой блок не запускал скрипт или проще запретить выбрасывать и ставить их.


Добавил в описание предмета $$$ и потом просто проверяю.
Код:
on break:
    chance of 100%:
        set {_number} to random integer between 1 and 10 #получаем рандом значение
        drop gold block named "%{_number}% $" with lore "$$$" at location of event-block

#При подбирании золотого блока
on pick up of gold block:
    if event-item's lore contains "$$$":
        set {_number} to first element out of (split name of item at " ") #чекаем название нашего предмета, которое состоит из двух элементов: числа и $, получаем число и идем дальше
        add {_number} to player's balance #прибавляем полученное число к балансу игрока
        send "Вы получили %{_number}% баксов" to player
        delete item  #удаляем предмет
        cancel event
on item spawn: #это не трогать))
    if event-item is gold block:
        if event-item's name contains "$":
            if event-item's lore contains "$$$":
                event-entity.setCustomNameVisible(true)
                event-entity.setCustomName(event-entity.getItemStack().getItemMeta().getDisplayName() ? "%event-entity.getItemStack()%")
 
Вот такая ещё проблема с сообщениями в чате

Ещё траблы были и с самим плагином skript, поставил последнюю версию и спигот 1.12.2 (кст почему именно эта версия? :))
 

Вложения:

  • 2019-07-21_17.08.26.png
    2019-07-21_17.08.26.png
    Размер файла
    8,1 КБ
    Просмотров
    11
Код:
on break:
    chance of 100%:
        set {_number} to random integer between 1 and 10 #получаем рандом значение
        drop gold block named "%{_number}% $" with lore "$$$" at location of event-block

#При подбирании золотого блока
on pick up of gold block:
    if event-item's lore contains "$$$":
        set {_number} to first element out of (split name of item at " ") #чекаем название нашего предмета, которое состоит из двух элементов: числа и $, получаем число и идем дальше
        add {_number} to player's balance #прибавляем полученное число к балансу игрока
        send "Вы получили %{_number}% баксов" to player
        delete item  #удаляем предмет
        cancel event
on item spawn: #это не трогать))
    if event-item is gold block:
        if event-item's name contains "$":
            if event-item's lore contains "$$$":
                event-entity.setCustomNameVisible(true)
                event-entity.setCustomName(event-entity.getItemStack().getItemMeta().getDisplayName() ? "%event-entity.getItemStack()%")

Я просто тестил и взял твой код, даже не делал ничего с ним
 
Код:
on break:
    chance of 100%:
        set {_number} to random integer between 1 and 10 #получаем рандом значение
        drop gold block named "%{_number}% $" with lore "$$$" at location of event-block

#При подбирании золотого блока
on pick up of gold block:
    if event-item's lore contains "$$$":
       set {_number} to first element out of (split name of item at " ") #чекаем название нашего предмета, которое состоит из двух элементов: числа и $, получаем число и идем дальше
        add {_number} to player's balance #прибавляем полученное число к балансу игрока
        send "Вы получили %{_number}% баксов" to player
        delete item  #удаляем предмет
        cancel event
on item spawn: #это не трогать))
    if event-item is gold block:
        if event-item's name contains "$":
            if event-item's lore contains "$$$":
                event-entity.setCustomNameVisible(true)
                event-entity.setCustomName(event-entity.getItemStack().getItemMeta().getDisplayName() ? "%event-entity.getItemStack()%")

Я просто тестил и взял твой код, даже не делал ничего с ним

да ну я хз, у меня все ворк.
 

Вложения:

  • 2019-07-21_17.34.34.png
    2019-07-21_17.34.34.png
    Размер файла
    189,1 КБ
    Просмотров
    16
  • 2019-07-21_17.34.25.png
    2019-07-21_17.34.25.png
    Размер файла
    291,7 КБ
    Просмотров
    17
Мейби скинь свой скрипт jar
И я думаю это можно публиковать отдельно как полноценный плагин :) получилась годная штука
 
Воу..) крута расписал)
set {_nbt} to {_item}.getTag() if {_item}.hasTag() is true, else new NBTTagCompound()
return {_nbt}
[/CODE]

Пытался найти плагин для манипуляций с NBT. Нашел SkStuff и Sk-NBeet, но на версии 1.7.10 они оба отказываются работать, ругаются, что устарела. А код который ты запостил нужен был тееб именно для этого, чтобы работать с NBT на 1.7.10 ? Насколько эта рефлексия медленна? =)
 
Пытался найти плагин для манипуляций с NBT. Нашел SkStuff и Sk-NBeet, но на версии 1.7.10 они оба отказываются работать, ругаются, что устарела. А код который ты запостил нужен был тееб именно для этого, чтобы работать с NBT на 1.7.10 ? Насколько эта рефлексия медленна? =)
Нет, не для 1.7.10, а просто для личных целей.
Не знаю, будет ли он работать на 1.7.10, но вот фулл версия кода, если надо. Он чуток отличается от той первой.

Код:
import:
    java.lang.Object
    java.util.List
    java.util.Arrays
    java.util.ArrayList
    org.*********ventory.ItemFlag
    org.bukkit.enchantments.Enchantment
    org.*********ventory.meta.ItemMeta

import:
 
    java.lang.String
    java.util.regex.Pattern
 
    org.bukkit.Bukkit
    org.bukkit.entity.Entity
    org.*********ventory.ItemStack
 
    ch.njol.skript.Skript
    ch.njol.skript.util.Version
    ch.njol.skript.aliases.ItemType


option nms-version:
    get:
        return Bukkit.getServer().getClass().getPackage().getName().split("\.")[3]


import:
   
    org.bukkit.craftbukkit.{@nms-version}.inventory.CraftItemStack
    org.bukkit.craftbukkit.{@nms-version}.block.CraftBlock
   
    net.minecraft.server.{@nms-version}.ItemStack as NMSItemStack
    net.minecraft.server.{@nms-version}.NBTTagCompound
    net.minecraft.server.{@nms-version}.NBTTagList
    net.minecraft.server.{@nms-version}.MojangsonParser
    net.minecraft.server.{@nms-version}.BlockPosition
    net.minecraft.server.{@nms-version}.NBTTagString
    net.minecraft.server.{@nms-version}.Item
    net.minecraft.server.{@nms-version}.Items  
 
local itemtypes property item NBT:
    get:
        set {_item} to CraftItemStack.asNMSCopy(expression-1.getRandom())
        set {_nbt} to {_item}.getTag() if {_item}.hasTag() is true, else new NBTTagCompound()
        return {_nbt}

    add string:
        set {_appended-nbt} to MojangsonParser.parse(change value)
   
        loop expressions-1:
            set {_item} to CraftItemStack.asNMSCopy(loop-value.getRandom())
   
            if {_appended-nbt} is set:

                if {_item}.hasTag() is true:
                    {_item}.a({_appended-nbt})        
                else:
                    {_item}.setTag({_appended-nbt})

                set {_meta} to CraftItemStack.getItemMeta({_item})
                loop-value.setItemMeta({_meta})
     
    remove string:
        set {_removed-nbt} to MojangsonParser.parse(change value)
   
        loop expressions-1:
            set {_item} to CraftItemStack.asNMSCopy(expression-1.getRandom())

            if {_removed-nbt} is set:
                {_item}.hasTag() is true
                {_item}.remove({_removed-nbt})

                set {_meta} to CraftItemStack.getItemMeta({_item})
                loop-value.setItemMeta({_meta})

    set string:
        set {_new-nbt} to MojangsonParser.parse(change value)
   
        loop expressions-1:
            set {_item} to CraftItemStack.asNMSCopy(loop-value.getRandom())

            if {_new-nbt} is set:
                {_item}.setTag({_new-nbt})

                set {_meta} to CraftItemStack.getItemMeta({_item})
                loop-value.setItemMeta({_meta})



blocks, itemtypes property NBT:
  get:
    if expression-1 is an instance of ItemType:
      return item nbt of expression-1
 
  set string:
    if expressions-1 are an instance of ItemType:
      set item nbt of expressions-1 to change value

  add string:
    if expressions-1 are an instance of ItemType:
      add change value to item nbt of expressions-1

  remove string:
    if expressions-1 are an instance of ItemType:
      remove change value from item nbt of expressions-1
               
expression %itemtype% with nbt %string%:
    get:
        set {_item} to expression-1
        set item nbt of {_item} to expression-2
        return {_item}

command /adt:
    permission: admin.admin
    trigger:
        add "{AttributeModifiers:[{Slot:""mainhand"", AttributeName:""generic.attackDamage"", Name:""generic.attackDamage"", Amount:20, Operation:0, UUIDLeast:1, UUIDMost:1}]}" to item nbt of player's tool


Насколько эта рефлексия медленна? =)
Хз
 
Пытаюсь создать основную часть своей экономики на проекте, суть в точках генерации определенного типа ресурса - железо, дерево, алмазы итд, они генерируются только если игрок рядом, необходимо чтобы они генерировались постоянно. Саму генерацию ресурсов любого типа можно сделать через спавнеры в ванилле и якоря, но дальше встает проблема организации контроля этой точки. Мне необходимо сделать так, чтобы игрок мог контроллировать точку и получать с нее ресурсы, чтобы одновременно с этим у других игроков была возможность ее захватить. Пытался сделать через плагины ворлдэдит, ареашоп и лакипермс, но в голову так ничего и не пришло. Есть ли возможность реализовать это с помощью скрипта? И тот же вопрос про генерацию ресурсов. Я недавно узнал про этот язык, да и в целом не очень разбираюсь. Заранее спасибо.
 
Можете сказать мне как сделать вот что:

1 скрипт. Пример. Если блок сломан с помощью взрыва (ID блока: 9999 к примеру), то: установить на его предыдущие координаты блок (ID: 10000, к примеру)

2 скрипт. Пример. Если игрок вводит команду (/craftaxe к примеру), то: проверить есть ли у игрока в инвентаре ЖЕЛЕЗНЫЙ_СЛИТОК - 3; ПАЛКА - 2 (3 и 2 - это количество) и если проверка была успешна - удалить/изъять эти предметы и выдать игроку ЖЕЛЕЗНЫЙ_ТОПОР.

Пожалуйста, если не очень трудно, ответьте мне. Заранее спасибо .
 
Можете сказать мне как сделать вот что:

1 скрипт. Пример. Если блок сломан с помощью взрыва (ID блока: 9999 к примеру), то: установить на его предыдущие координаты блок (ID: 10000, к примеру)
Не за пк - протестить не могу, но чекни:
Код:
on explosion:
    loop exploded blocks:
        if loop-block is glass:
            set loop-block to stone
 
2 скрипт. Пример. Если игрок вводит команду (/craftaxe к примеру), то: проверить есть ли у игрока в инвентаре ЖЕЛЕЗНЫЙ_СЛИТОК - 3; ПАЛКА - 2 (3 и 2 - это количество) и если проверка была успешна - удалить/изъять эти предметы и выдать игроку ЖЕЛЕЗНЫЙ_ТОПОР.
Код:
command /craftaxe:
    trigger:
        if player's inventory contains "3 of iron ingot" parsed as itemtype:
            if player's inventory contains "2 of stick" parsed as itemtype:
                remove 3 of iron ingot from player
                remove 2 of stick from player
                give iron axe to player
Чекни
 
Код:
command /craftaxe:
    trigger:
        if player's inventory contains "3 of iron ingot" parsed as itemtype:
            if player's inventory contains "2 of stick" parsed as itemtype:
                remove 3 of iron ingot from player
                remove 2 of stick from player
                give iron axe to player
Чекни
А если я буду делать много событий такого "крафта" мне придется каждый раз создавать новый скрипт файл или можно поместить все в один?
 

Поделиться этой страницей

Назад
Верх