Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MESSAGE:
- initiate:
- source: CHAT_INPUT
- type: START
- mask: ''
- actions:
- # 0) Стандартный формат.
- # Ловим любой меседж игрока. Oтменяем. Перенаправляем.
- - 'CANCEL_EVENT=true'
- - 'MSG=player:{loc:%player_loc% radius:30} &7 %player_display%: %message%'
- # 1) Создаём 3 переменных которые будут хранить X,Y,Z игрока что отправил данный меседж.
- - 'VAR_PLAYER_SET=id:loca_X value:%Player_x%'
- - 'VAR_PLAYER_SET=id:loca_Y value:%Player_y%'
- - 'VAR_PLAYER_SET=id:loca_Z value:%Player_z%'
- # 2) Извлекаем список игроков, имеющих указаный пермишен.
- # Т.к. текст списка изначально в неподходящем для ReActions виде, и нам надо загнать каждого игрока из списка в отдельный плейсхолдер,
- # мы фильтруем его через регулярное выражение...
- - 'REGEX=input:{%listPlayers_with_perm_PERMISSION%} regex:{(§f)([\w]{3,16})([§a,\s]{0,4})}'
- # 3) В этом акте создаем 3 таких же персональных переменных с X,Y,Z, но уже не для игрока-инициатора, а для первого игрока из списка.
- # Прикол в том, что ник игрока нам изначально неизвестен.
- - 'EXECUTE=activator:setLocaValues_for_1st-onlinePlayerWithPerm player:%group:0:2%'
- # 4) То же самое, только со вторым неизвестным игроком из списка.
- - 'EXECUTE=activator:setLocaValues_for_2nd-onlinePlayerWithPerm player:%group:1:2%'
- # - 'Тут можна создать ещё подобных активаторов ("резерваций"), если "список" потенциально может состоять из больше, чем двух игроков.'
- # И это наверное сильный недостаток, т.к. если недобрать - алгоритм не учтет последних игроков из списка. А если перебрать, будет
- # много лишнего мусора и действий с переменными (надо придумать как их чистить)...
- # 5) Этот активатор, прибегая к ранее созданным переменным, хранящим координаты игрока-инициатора и первого игрока из списка
- # вычисляет дистанцию между ними. Если эта дистанция окажется больше 29.99 блоков, запустится наше ключевое дополнительное действие.
- - 'EXECUTE=activator:exe1'
- # 6) То же самое, только дистанция со вторым игроком из списка.
- - 'EXECUTE=activator:exe2'
- # - 'Тут аналогично...'
- # Если мы создали "резервацию" для учтения 3-го игрока, который потенциально может быть в списке, то
- # значит и создаем для него такой же активатор "exe3".
- EXEC:
- setLocaValues_for_1st-onlinePlayerWithPerm:
- actions:
- - 'VAR_PLAYER_SET=id:loca_X value:%Player_x%'
- - 'VAR_PLAYER_SET=id:loca_Y value:%Player_y%'
- - 'VAR_PLAYER_SET=id:loca_Z value:%Player_z%'
- setLocaValues_for_2nd-onlinePlayerWithPerm:
- actions:
- - 'VAR_PLAYER_SET=id:loca_X value:%Player_x%'
- - 'VAR_PLAYER_SET=id:loca_Y value:%Player_y%'
- - 'VAR_PLAYER_SET=id:loca_Z value:%Player_z%'
- # P.S. Tут можна было бы сократить, не создавая лишнюю переменную, если б существовал флаг вроде "COMPARE_GREATER".
- exe1:
- actions: # v-- Теорема Пифагора.
- - 'VAR_PLAYER_SET=id:distance_betweenPlayer-%group:0:2% value:{%CALC:sqrt((%var:%group:0:2%.loca_X%-%var:%player%.loca_X%)^2+(%var:%group:0:2%.loca_Y%-%var:%player%.loca_Y%)^2+(%var:%group:0:2%.loca_Z%-%var:%player%.loca_Z%)^2)%}'
- - 'EXECUTE=activator:exe1+'
- exe1+:
- flags:
- - 'VAR_PLAYER_GREATER=id:distance_betweenPlayer-%group:0:2% value:29.99'
- actions:
- # Формат меседжа №2, который будет отправлен первому игроку из списка.
- - 'MSG=player:%group:0:2% &c %player_display%: %message%'
- exe2: # Аналогично...
- actions: # v-- Теорема Пифагора.
- - 'VAR_PLAYER_SET=id:distance_betweenPlayer-%group:1:2% value:{%CALC:sqrt((%var:%group:1:2%.loca_X%-%var:%player%.loca_X%)^2+(%var:%group:1:2%.loca_Y%-%var:%player%.loca_Y%)^2+(%var:%group:1:2%.loca_Z%-%var:%player%.loca_Z%)^2)%}'
- - 'EXECUTE=activator:exe2+'
- exe2+:
- flags:
- - 'VAR_PLAYER_GREATER=id:distance_betweenPlayer-%group:1:2% value:29.99'
- actions:
- # Аналогично, только по отношению к игроку №2 из списка.
- - 'MSG=player:%group:1:2% &c %player_display%: %message%'
- # ЧТО МОЖНА/ЖЕЛАТЕЛЬНО БЫ УЛУЧШИТЬ:
- # 1. (В инициативе разработчиков) Добавить флаг COMPARE_GREATER/LOWER, что бы не создавать попусту дополнительные переменные и
- # не запускать лишние акты.
- # 2. Решить на каком етапе и в какую милисекунду чистить переменные, что бы их не накапливалось очень много после каждого
- # меседжа игрока. Может негативно повлиять на производительность...
- # 3. Решить как сделать что б когда у тебя "резервация" учтена для 15+ игроков, что б алгоритм не розворачивался до exe15+,
- # если список выдаст нам к примеру только 5 игроков онлайн. (Сильно секономит ресурсы)
- # 4. Вероятны несостыковки в Пифагоре, если игроки будут в разных
- # мирах (надо как то со старта обозначить такие отправки как "за радиусом").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement