Вопрос MyCommand - Разбираемся с говнокодом

Ядро
Paper

spakevsky

Пользователь
Сообщения
3
Плагин
MyCommand
Ядро сервера
  1. Paper
Версия сервера
  1. 1.21
Память сервера ОЗУ
4Gb
Ссылка
https://www.spigotmc.org/resources/mycommand.22272/

История:​

Решил я значит написать небольшую систему уровней. Референс я брал с сампа и мне в принципе даже было понятно как это сделать. Есть 3 переменные: stats_exp, stats_exp_needed и stats_level. Всё это нужно чтобы нубасы не могли пользоваться вещами до определённого уровня, вступать в кланы и чтобы добавить смысл в прохождение начальных квестов. Так вот, суть была в том, чтобы каждую секунду команда проверяла сколько у игрока stats_exp, сколько у игрока stats_exp_needed и если stats_exp равен stats_exp_needed добавляла к stats_exp_needed stats_level и после stats_level увеличивала на 1. Так вот суть проблемы... Команда от консоли вообще никак не может проверять переменную игрока напрямую ($Playerdata%<var>%), тогда я решил использовать как бы сам плейсхолдер mycommand (%mycommand_playerdata_<var>%), но она сука тоже не работает и причём что я заметил так если выполнить команду
YAML:
mycmd tellto $player %mycommand_playerdata_stats_exp%
то она напишет игроку (который выполнил эту команду от имени консоли) %mycommand_playerdata_NoData%, что говорит о последней стадии критинизма у автора плагина, я промолчу про обычный плейсхолдер papi (%parseother_{$player(или player_name, который так же не работает в mycmd)}_{<var>}%), который КАК НЕОЖИДАННО не работает в mycmd и в теории мог бы помочь с определением переменной игрока именно спросив у игрока. Так вот... %mycommand_playerdata_NoData% выводится именно потому, что %mycommand_playerdata% это невыполненный плейсхолдер, а NoData это как раз переменная, так вы спросите, что такого в том что выводит null, а я скажу: проблема в том что у игрока есть переменная stats_exp и она равна 0, а NoData (null) выводится именно потому, что у КОНСОЛИ нет такой переменной и хранить её по понятным причинам не может.

Я бы хотел просветления от таких же обывателей как и я.

JavaScript:
// Псевдокод MyCommand (как я это представляю):
public String getPlaceholder(String placeholder) {
    // Если placeholder содержит "mycommand_playerdata_"
    if (placeholder.startsWith("mycommand_playerdata_")) {
        String varName = placeholder.replace("mycommand_playerdata_", "");
        // НЕТ ПРОВЕРКИ КОНТЕКСТА ИГРОКА!
        return getConsolePlayerData(varName); // Всегда у консоли!
    }
}

Вот примерный код, который должен работать, но почему-то не работает (executefor: ONLINE_PLAYERS и execute_mode: CONSOLE_ONLY и всё вместе тоже пробовал)

YAML:
experience_system:
  type: RUN_COMMAND_TASK
  command: /experiencesystem
  permission-required: true
  permission-node: admin.ga
  permission-error: "&l&5   ABYSSAL | Что-то вы не похожи на ГА))"
  register: true
  task_repeat_every_sec: 1
  task_run_n_times: -1
  runcmd:
  - '$Script$%if%$mycommand_playerdata_stats_exp$==$mycommand_playerdata_stats_exp_needed$'
  - '$Script$%if%$mycommand_playerdata_stats_level$==10'
  - '$broadcasttext$ '
  - "$broadcasttext$ &l&5ABYSSAL | LEVEL"
  - "$broadcasttext$ &l&5Мы с уверенностью можем поздравить $player!"
  - "$broadcasttext$ &l&5Ведь он получил 10-й уровень!"
  - '$broadcasttext$ '
  - '$Script$%elseif%$mycommand_playerdata_stats_level$==50'
  - '$broadcasttext$ '
  - "$broadcasttext$ &l&5ABYSSAL | LEVEL"
  - "$broadcasttext$ &l&5Мы с уверенностью можем поздравить $player!"
  - "$broadcasttext$ &l&5Ведь он получил 50-й уровень!"
  - '$broadcasttext$ '
  - '$Script$%elseif%$mycommand_playerdata_stats_level$==100'
  - '$broadcasttext$ '
  - "$broadcasttext$ &l&5ABYSSAL | LEVEL"
  - "$broadcasttext$ &l&5Мы с уверенностью можем поздравить $player!"
  - "$broadcasttext$ &l&5Ведь он получил 100-й уровень!"
  - '$broadcasttext$ '
  - '$Script$%endif%'
  - '/mycmd-playedata add $player stats_level 1'
  - '/mycmd-playerdata set $player stats_exp 0'
  - '/mycmd-playerdata add $player stats_needed $mycommand_playerdata_stats_level$'
  - '$Script$%endif%'

Итог такой, либо я дегенерат, либо дегенерат именно автор плагина.
В этом экземпляре кода могут быть ошибки, которые на тот момент я не убрал, но я исправил всё что могло мешать и команда спокойно вставала не вызывая никаких ошибок. Переписывал этот код я раз 10 и в итоге просто удалил, нашёл 1 экземпляр, который я скинул другу и именно его сюда вставил.
 
Назад
Сверху Снизу