1. Welcome to skUnity!

    Welcome to skUnity! This is a forum where members of the Skript community can communicate and interact. Skript Resource Creators can post their Resources for all to see and use.

    If you haven't done so already, feel free to join our official Discord server to expand your level of interaction with the comminuty!

    Now, what are you waiting for? Join the community now!

  2. LOOKING FOR A VERSION OF SKRIPT?

    You can always check out our Wiki for downloads and any other information about Skript!

Dismiss Notice
This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Solved Selectors and arg-1

Discussion in 'Skript' started by Vxnku, Nov 29, 2022.

Tags:
  1. Vxnku

    Vxnku Member

    Joined:
    Nov 29, 2022
    Messages:
    14
    Likes Received:
    0
    Script Version: 2.6.3
    BoringSK v2.0
    Skellett v2.0.3
    SkRayFall v1.9.27
    SkQuery v4.1.6
    SkBee v2.5.1
    Vault v1.7.3
    WorldGuard v7.0.7
    Script Author: Me (Vxnku)
    Minecraft Version: 1.18.1
    Full Code:
    command /Infect <text> <player>:
    permission: op
    trigger:
    if "%arg-1%" is "Zombie":
    if the player doesn't have the scoreboard tag "Z":
    send "Игрок %player% заражен Зомби Вирусом" to executor
    if the player have the scoreboard tag "Z":
    send "Игрок %player% уже Болеет Зомби вирусом" to executor
    add "Z" to the scoreboard tags of player
    1.#in this, i cant select a victim as subject for command, skript choose me

    2.#this i dont know how to create Ivent, i need to check "if the player have the scoreboard tag "Z":" any time, or every tick maybe?
    can i ask for help, i want to learn how to make, please help me

    command /Infectcheck:
    trigger:
    loop all players
    if the player have the scoreboard tag "Z":
    send "Игрок %player% заражен Зомби Вирусом" to Vxnku
    if player have {_Sick}:
    stop
    set {_Sick} to player
    3.#in this moment i try to make varriable {_Sick}, what stops next event on when event happening
    i want to add in end in the code remove {_Sick} from the player


     
    #1 Vxnku, Nov 29, 2022
    Last edited: Nov 30, 2022
    • Friendly Friendly x 1
  2. Best Answer:
    Post #4 by gangula, Nov 30, 2022
  3. Merrical

    Supporter

    Joined:
    Jul 27, 2020
    Messages:
    24
    Likes Received:
    3
    {_sick} is a local variable. it only exists in that command. The condition "if player have {_sick}:" won't work as {_sick} is not set to anything. you can't remove {_sick} from the player if it doesn't even contain anything.

    {_sick} — локальная переменная. он существует только в этой команде. Условие «если у игрока есть {_sick}:» не будет работать, так как {_sick} ничего не установлено. вы не можете удалить {_sick} из плеера, если он вообще ничего не содержит.
    (Google Translate lol)
     
    #2 Merrical, Nov 29, 2022
    Last edited: Nov 29, 2022
    • Like Like x 1
  4. Vxnku

    Vxnku Member

    Joined:
    Nov 29, 2022
    Messages:
    14
    Likes Received:
    0
    i need to create some thing for varriable?
     
  5. gangula

    gangula Member

    Joined:
    Jul 28, 2021
    Messages:
    15
    Likes Received:
    0
    Он говорит о том, что {_sick} это локальная переменная.
    Она действует только там, где ты её впервые использовал.
    Также локальная переменная {_Sick} не будет работать, если ты её ранее не установил.

    Для примера две команды:
    Code (Text):
    1. command heal:
    2.    trigger:
    3.        set {_player} to player #здесь мы установили локальную переменную {_player} на игрока
    4.        heal {_player} #похилили игрока
    5.    
    6. command reset: #неправильное использование
    7.    trigger:
    8.        kill {_player} #здесь мы не можем использовать локальную переменную {_player}, нам надо создать новую локальную переменную для этой команды. Так как локальные переменные могут действовать только в одной области использования
    9.  
    10. command reset: #правильное использование
    11.    trigger:
    12.        set {_player} to player #здесь мы установили локальную переменную {_player} на игрока
    13.        kill {_player} #убили игрока
    В твоем случае локальные переменные не помогут. Нужно использовать полноценные - глобальные.
    Также желательно, если у тебя if'ы связаны использовать else if
    Пример:

    Code (Text):
    1. on chat: #при использовании чата
    2.     if player is "Vxnku": #если игрок Vxnku
    3.         cancel event #отменить евент (проще говоря, запретить игроку написать сообщение)
    4.     else if player is not "Vxnku" #если игрок не Vxnku
    5.         broadcast "Ура, Vxnku написал в чат!"
    Пример правильного скрипта:
    Code (Text):
    1. command infect <text> <player>:
    2.     permission: op
    3.     trigger:
    4.         if "%arg-1%" is "Zombie":
    5.             if the player doesn't have the scoreboard tag "Z":
    6.                 send "Игрок %player% заражен Зомби Вирусом" to executor
    7.             else if the player have the scoreboard tag "Z":
    8.                 send "Игрок %player% уже Болеет Зомби вирусом" to executor
    9.                 add "Z" to the scoreboard tags of player
    10.  
    11. command infectcheck:
    12.     trigger:
    13.         loop all players
    14.             if the player have the scoreboard tag "Z":
    15.                 send "Игрок %player% заражен Зомби Вирусом" to player
     
    #4 gangula, Nov 30, 2022
    Last edited: Dec 1, 2022
    • Friendly Friendly x 1
  6. Vxnku

    Vxnku Member

    Joined:
    Nov 29, 2022
    Messages:
    14
    Likes Received:
    0
    Ввожу: /infect Zombie Kumiko
    Итог: "Игрок Vxnku заражен Зомби вирусом"
    Должно быть Kumiko
    Code (Text):
    1.  
    2. on consume:
    3.     if the player have the scoreboard tag "Z":
    4.         execute console command "/scoreboard players add %player% z.1 1"
    5.         execute player command "/me не усваивает пищу"
    6.         if scoreboard "z.1" bigger than 3 of player:
    7.             execute console command "/effect give Vxnku minecraft:hunger 2 99 true"
    8.             wait 5 seconds
    9.             execute console command "/effect give Vxnku minecraft:hunger 2 99 true"
    10.  
    11. command infect <text> <player>:
    12.     permission: op
    13.     trigger:
    14.         if "%arg-1%" is "Zombie":
    15.             if the player doesn't have the scoreboard tag "Z":
    16.                 send "Игрок %player% заражен Зомби Вирусом" to executor
    17.             else if the player have the scoreboard tag "Z":
    18.                 send "Игрок %player% уже Болеет Зомби вирусом" to executor
    19.                 add "Z" to the scoreboard tags of player
    20.  
    Этот плагин должен по нику <player>
    Давать заражение, и я не понял как вставить "%arg-2%"
    Хоть у меня в другом скрипте, это уже получалось
    И вторая команда должна точно так же проверять у одного игрока, факт заражения
     

    Attached Files:

    • Friendly Friendly x 1
  7. gangula

    gangula Member

    Joined:
    Jul 28, 2021
    Messages:
    15
    Likes Received:
    0
    К сожалению, за скоребоарды я не шарю.
    Для чего ты вообще используешь теги скоребоардов?

    Правильный пример твоей команды:

    Code (Text):
    1. command infect <text> <player>:
    2.     permission: op
    3.     trigger:
    4.         if "%arg-1%" is "Zombie":
    5.             if the player doesn't have the scoreboard tag "Z":
    6.                 send "Игрок %arg-2% заражен Зомби Вирусом" to executor #переменная <player> выражается в виде того, кто ввел саму команду. Для того, чтобы получить ник игрока из команды, надо использовать arg (аргумент).
    7.             else if the player have the scoreboard tag "Z":
    8.                 send "Игрок %arg-2% уже Болеет Зомби вирусом" to executor
    9.                 add "Z" to the scoreboard tags of player
    10.  
    11. command infectcheck:
    12.     trigger:
    13.         loop all players: #после лупа должно стоять двоеточие. Когда ты лупаешь игроков, исходная переменная игрока - loop-player, а не обычный player.
    14.             if the loop-player have the scoreboard tag "Z":
    15.                 send "Игрок %loop-player% заражен Зомби Вирусом" to player
    16.  
    17. Но лучше всего сделать так:
    18. command infectcheck:
    19.     trigger:
    20.         loop all players: #после лупа должно стоять двоеточие. Когда ты лупаешь игроков, исходная переменная игрока - loop-player, а не обычный player.
    21.             if the loop-player have the scoreboard tag "Z":
    22.                 add loop-player to {_lopped::*}
    23.                 send "Зараженные игроки: %{_lopped::*}%" to player
     
    #6 gangula, Dec 1, 2022
    Last edited: Dec 1, 2022
  8. Vxnku

    Vxnku Member

    Joined:
    Nov 29, 2022
    Messages:
    14
    Likes Received:
    0
    Теги скорбордов - часть работы моей комманды дата-пакеров, я реализую недостатки их датапаков, через скрипт, например
    использования /trigger spell1 при пкм с предметом, и тд.
    У меня РП Политический сервер с Магией, и вообще дикость
    Я придумываю фигню, и реализую, отдаю в эту душу, но чувствую себя максимально тупым в скрипте, вот и в первый раз обратился сюда
    Вот вчера, ты мне кинул проверку эффектов, а у меня не работало, и я начал орать и ныть, а после оказалось то что я был в /vanish
    Спасибо за помощь, я хочу научиться
    {_lopped::*} - ::* я вообще не понимаю что это
    самому loop-players и loop, хочу его как-то впихнуть сюда:
    Code (Text):
    1. command /secondmedhelp:
    2.     cooldown: 110 seconds
    3.     cooldown message: Ждите &4%remaining time% &f!
    4.     trigger:
    5.         if player has permission "group.medical":
    6.             execute console command "/effect give %player% minecraft:regeneration 7 1 true"
    7.             execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:instant_health 1 1 true"
    8.             execute player command "/me Лечит окружающих"
    9.         execute player command "/me Обработал раны спиртом"
    10.         execute console command "/effect give %player% minecraft:instant_health 1 1 true"
    11.         execute console command "/effect give %player% minecraft:nausea 2 5 true"
    12.         chance of 45%:
    13.             remove 1 water bottle with name "&6Спирт" from the player
    14.             remove 1 potion with name "&6Спирт" from the player
    15. on rightclick with a water bottle:
    16.     if name of event-item is "&6Спирт":
    17.         execute player command "/secondmedhelp"
    18. on rightclick with a potion:
    19.     if name of event-item is "&6Спирт":
    20.         execute player command "/secondmedhelp"
    21.        
    22. command /firstmedhelp:
    23.     cooldown: 32 seconds
    24.     cooldown message: Ждите &c%remaining time% &f!
    25.     trigger:
    26.         remove 1 paper named "Бинт" from the player
    27.         remove 1 paper named "Бинты" from the player
    28.         remove 1 paper named "БИНТ" from the player
    29.         remove 1 paper named "БИНТЫ" from the player
    30.         remove 1 paper named "БИНт" from the player
    31.         remove 1 paper named "БИНты" from the player
    32.         remove 1 paper named "БИнт" from the player
    33.         remove 1 paper named "БИнты" from the player
    34.         remove 1 paper named "бинт" from the player
    35.         remove 1 paper named "бинты" from the player
    36.         chance of 5%:
    37.             execute player command "/me Хорошо перевязал рану"
    38.             execute console command "/effect give %player% minecraft:regeneration 5 2 true"
    39.         chance of 70%:
    40.             execute player command "/me Перевязал рану"
    41.             execute console command "/effect give %player% minecraft:regeneration 5 1 true"
    42.             if player has permission "group.medical":
    43.                 execute console command "/effect give %player% minecraft:regeneration 7 1 true"
    44.                 execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:regeneration 5 1 true"
    45.                 execute player command "/me Лечит окружающих"
    46.         else:
    47.             execute player command "/me Неудачно перевязал рану"
    48.             if player has permission "group.medical":
    49.                 execute console command "/effect give %player% minecraft:regeneration 4 1 true"
    50.                 execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:regeneration 4 1 true"
    51. on rightclick with a paper:
    52.     if name of event-item is "Бинты":
    53.         execute player command "/firstmedhelp"
    54. on rightclick with a paper:
    55.     if name of event-item is "Бинт":
    56.         execute player command "/firstmedhelp"
    57.  
    58. command /firstmedhelp2:
    59.     cooldown: 30 seconds
    60.     cooldown message: Ждите &c%remaining time% &f!
    61.     trigger:
    62.         remove 1 paper named "&7Гипс" from the player
    63.         chance of 80%:
    64.             execute player command "/me Наложил гипс"
    65.             execute console command "/effect give %player% minecraft:regeneration 12 0 true"
    66.         else:
    67.             execute player command "/me Неудалось"
    68. on rightclick with a paper:
    69.     if name of event-item is "&7Гипс":
    70.         execute player command "/firstmedhelp2"
    71.  
    72. command /firstmedhelp3:
    73.     cooldown: 21 seconds
    74.     cooldown message: Ждите &c%remaining time% &f!
    75.     trigger:
    76.         remove 1 paper named "&8Шина" from the player
    77.         chance of 80%:
    78.             execute player command "/me Наложил шину"
    79.             execute console command "/effect give %player% minecraft:regeneration 24 0 true"
    80.             execute console command "/effect give %player% minecraft:slowness 12 0 true"
    81.         else:
    82.             execute player command "/me Неудалось"
    83. on rightclick with a paper:
    84.     if name of event-item is "&8Шина":
    85.         execute player command "/firstmedhelp3"
    86.  
    87. command /secondmedhelp2:
    88.     cooldown: 110 seconds
    89.     cooldown message: Ждите &4%remaining time% &f!
    90.     trigger:
    91.         if player has permission "group.medical":
    92.             execute console command "/effect give %player% minecraft:regeneration 7 1 true"
    93.             execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:instant_health 1 1 true"
    94.             execute player command "/me Лечит окружающих"
    95.         execute player command "/me Обработал раны этанолом"
    96.         execute console command "/effect give %player% minecraft:instant_health 1 1 true"
    97.         chance of 15%:
    98.             remove 1 water bottle with name "&cЭтанол" from the player
    99. on rightclick with a water bottle:
    100.     if name of event-item is "&cЭтанол":
    101.         execute player command "/secondmedhelp2"
    102.      
    103. command /secondmedhelp3:
    104.     cooldown: 110 seconds
    105.     cooldown message: Ждите &4%remaining time% &f!
    106.     trigger:
    107.         if player has permission "group.medical":
    108.             execute console command "/effect give %player% minecraft:regeneration 7 1 true"
    109.             execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:instant_health 1 1 true"
    110.             execute player command "/me Лечит окружающих"
    111.         execute player command "/me Обработал раны ацетилхолином"
    112.         execute console command "/effect give %player% minecraft:instant_health 1 1 true"
    113.         chance of 35%:
    114.             remove 1 water bottle with name "&2Ацетилхолин" from the player
    115. on rightclick with a water bottle:
    116.     if name of event-item is "&2Ацетилхолин":
    117.         execute player command "/secondmedhelp3"
    118.  
    И да, хочу спросить
    Как создать ивент?
    Вот я хочу чтобы в период времени, была проверка шанса на событие

    Code (Text):
    1. on consume:
    2.     if the player have the scoreboard tag "Z":
    3.         execute console command "/execute at @a[scores={z.1=37..}] run effect give @p minecraft:instant_damage"
    4.         execute console command "/scoreboard players add %player% z.1 1"
    5.         chance of 95%:
    6.             execute player command "/undig"
    7.             stop
    8.  
    9. command undig:
    10.     trigger:
    11.         execute player command "/me не усваивает пищу"
    12.         execute console command "/effect give %player% minecraft:hunger 2 99 true"
    13.         wait 100 ticks
    14.         execute console command "/effect give %player% minecraft:hunger 2 99 true"
    15.         wait 100 ticks
    16.         chance of 25%:
    17.             execute player command "/wommit"
    18.             stop
    19.  
    20. command wommit:
    21.     cooldown: 7 seconds
    22.     cooldown message: &4Вы рвёте...
    23.     trigger:
    24.         execute player command "/me вырвал пищу"
    25.         execute console command "/brew puke %player%"
    26.         wait 2 seconds
    27.         execute console command "/effect give %player% minecraft:hunger 4 99 true"
    28.         execute console command "/effect give %player% minecraft:nausea 4 99 true"
    Смог придумать только такое
     
  9. gangula

    gangula Member

    Joined:
    Jul 28, 2021
    Messages:
    15
    Likes Received:
    0
    Понимаю тебя, тоже чувствовал себя глупым когда пришел сюда)). Политический сервер звучит интересно, возможно я как-нибудь зайду к вам поиграть.
    Всегда пожалуйста.
    ::* - список
    Например создадим команду для выбора победителя.

    Code (Text):
    1. command winner:
    2.     trigger:
    3.         loop all players: #лопаем всех игроков сервера
    4.             add loop-player to {_CanWinner::*} #добавляем всех игроков в список возможных победителей
    5.             set {_winner} to random element out of {_CanWinner::*} #сетаем переменную {_winner} на рандомного игрока из списка {CanWinner::*}
    6.             broadcast "Победил - %{_winner}%" #отправляем сообщение о победителе
    7.  
    Легче использовать действия сразу в евентах, а не подключать евенты к командам. Также не использовать по триста евентов для одной и той же вещи. Ну и ещё хотел бы дополнить, использовать консольные команды не практично, ведь все совершаемые тобой действия (выдача эффектов) есть в самом скрипте.
    Версия твоего скрипта в моем видении:
    Code (Text):
    1.  
    2. on rightclick with a water bottle or potion: #вот это экономный способ использований евентов (бутылка с водой или зелье)
    3.    if name of event-item is "&6Спирт":
    4.        if {EthanolCooldown::%player%} is not set: #кулдаун можно сделать так
    5.            set {EthanolCooldown::%player%} to 110 #устанавливаем переменную кулдауна на 110
    6.            while {EthanolCooldown::%player%} is set: #пока переменная {EthanolCooldown::%player%} существует
    7.                wait 1 second #задержка для евента while
    8.                if {EthanolCooldown::%player%} > 0: #если переменная {EthanolCooldown::%player%} больше нуля
    9.                    remove 1 from {EthanolCooldown::%player%} #отнимает единицу от {EthanolCooldown::%player%}
    10.                else if {EthanolCooldown::%player%} = 0: #но если {EthanolCooldown::%player%} равна нулю
    11.                clear {EthanolCooldown::%player%} #очищаем переменную {EthanolCooldown::%player%}
    12.            if player has permission "group.medical":
    13.                loop all players in radius 10 of player: #проверяет всех игроков в радиусе 10 блоков от тебя (лупает)
    14.                    add loop-player to {_Healer::*} #добавляем их в список
    15.                    apply potion of regeneration 1 without particles to loop-player for 7 seconds #как я говорил, можно использовать зелья, но это не практично за счет возможных багов. Легче просто добавлять рандомное число сердечек (например от 3 до 6) игроку. В данном случае я выдаю лопнутым игрокам (которые в радиусе 10 блоков от меня) эффект регенерации без партиклов на 7 секунд
    16.                    loop 2 times: #повторить два раза
    17.                        set {_player} to random element out of {_Healer::*}
    18.                        heal {_player}
    19.                    execute player command "/me Лечит окружающих"
    20.            else if player don't have permission "group.medical": #как я говорил, желательно использовать else if, если if'ы связаны по смыслу.
    21.                execute player command "/me Обработал раны спиртом"
    22.                heal player
    23.                apply potion of nausea 5 without particles to player for 2 seconds
    24.                chance of 45%:
    25.                    remove 1 water bottle or potion with name "&6Спирт" from the player
    26.        else if {EthanolCooldown::%player%} is set: #кулдаун можно сделать так
    27.            send "Подождите %{EthanolCooldown::%player%}% сек. для использования спирта" to player
    28.  
    29. on rightclick with a paper: #здесь кулдаун ты можешь добавить сам
    30.     if name of event-item is "Бинты" or "Бинт":
    31.         remove 1 of paper named "Бинт" from the player #я без понятия, что у вас там с бинтами, раз ты их 300 раз удаляешь из инвентаря игрока меняя буквы
    32.         remove 1 of paper named "Бинты" from the player
    33.         chance of 5%:
    34.             execute player command "/me Хорошо перевязал рану"
    35.             apply potion of regeneration 5 without particles to player for 2 seconds
    36.         chance of 70%:
    37.             execute player command "/me Перевязал рану"
    38.             apply potion of regeneration 5 without particles to player for 1 seconds
    39.             if player has permission "group.medical":
    40.                 execute console command "/effect give %player% minecraft:regeneration 7 1 true"
    41.                 execute player command "/effect give @p[limit=2,sort=nearest,distance=0..3] minecraft:regeneration 5 1 true"
    42.                 execute player command "/me Лечит окружающих"
    43.         else: #без понятия к чему тут else, но если работает, то пусть будет так
    44.             execute player command "/me Неудачно перевязал рану"
    45.             if player has permission "group.medical":
    46.                 apply potion of regeneration 1 without particles to player for 4 seconds
    Все остальное ты сам сможешь изменить по моему примеру.
    Ивент можно сделать руками.
    У тебя во consume куча ненужных команд, все можно сделать по 1 ивент. У тебя тут и так стоит шанс события:
    Code (Text):
    1. on consume:
    2.     if the player have the scoreboard tag "Z":
    3.         execute console command "/execute at @a[scores={z.1=37..}] run effect give @p minecraft:instant_damage" #вообще сюда лезть не буду
    4.         execute console command "/scoreboard players add %player% z.1 1"
    5.         chance of 95%:
    6.             execute player command "/me не усваивает пищу"
    7.             execute console command "/effect give %player% minecraft:hunger 2 99 true"
    8.             wait 100 ticks
    9.             execute console command "/effect give %player% minecraft:hunger 2 99 true"
    10.             wait 100 ticks
    11.             chance of 25%:
    12.                 execute player command "/me вырвал пищу"
    13.                 execute console command "/brew puke %player%"
    14.                 wait 2 seconds
    15.                 apply potion of hunger 99 without particles to player for 4 seconds
    16.                 apply potion of nausea 99 without particles to player for 4 seconds
    17.                 stop #зачем тут стояло два стопа вообще не знаю
     

Share This Page

Loading...