Зачисление "монет" тому, кто убил игрока с помощью ТНТ.

MagicMan_Rostov

Эксперт
Регистрация
2 Май 2023
Сообщения
24
Всем добрейших вечерков, пытался сделать систему определения того, кто "выстрелил" из тнт-пушки путем установления соответственному имени динамиту %player%. В мои мозги пришла идея не пытаться найти игрока с ником как у динамита, а зачислять самому "динамиту", я в коде его обозначил как %killer%. В плейсхолдере %killer% хранится, я так понимаю, по сути имя (например, сущности) кто убил игрока, а не какое-то особое значение. Я попытался устанавливать глобальной переменной (наверное, фатальная ошибка) "last_killer" после события смерти значение имени динамита (%killer%). Однако у меня вышла проблема, я не понимаю как выбирать игрока как объект, чтобы позже начислить ему монеты. Есть ли какие нибудь альтернативы или какие-то костыльные методы для такого действия? В мою голову ничего не приходит.
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
357
Всем добрейших вечерков, пытался сделать систему определения того, кто "выстрелил" из тнт-пушки путем установления соответственному имени динамиту %player%. В мои мозги пришла идея не пытаться найти игрока с ником как у динамита, а зачислять самому "динамиту", я в коде его обозначил как %killer%. В плейсхолдере %killer% хранится, я так понимаю, по сути имя (например, сущности) кто убил игрока, а не какое-то особое значение. Я попытался устанавливать глобальной переменной (наверное, фатальная ошибка) "last_killer" после события смерти значение имени динамита (%killer%). Однако у меня вышла проблема, я не понимаю как выбирать игрока как объект, чтобы позже начислить ему монеты. Есть ли какие нибудь альтернативы или какие-то костыльные методы для такого действия? В мою голову ничего не приходит.
Один раз объяснял челу механику данную в лс, теперь поведую тебе :)

Как работает код: у тнт есть уникальный айди, и есть переменная для тнт: %selected%.exists (exists в переводе с английского - существует)
Как только спавнится тнт - мы ему даём уникальное имя, выбираем его, ставим %selected%.exists = "да" (или 1, или true, что угодно), и %selected%.player = Текущее имя (яблочко) - игрок, который запустил тнт
Дальше идёт очень убогий костыль: мы должны в тнт-шке заспавнить моба с практически таким-же именем как у тнт, и тепать циклом на корды тнт, только в имя ставим какой-то отличительный символ (например # перед номером моба). Например, у меня это будет летучая мышь
Окей, пол дела есть
Теперь мы должны сделать выборку летучих мышей, и записать айдишки в массив (делается это так: выбрать случайного игрока, создать пустой массив, выбрать летущих мышей, затем ПРИСВ переменную - заменить символы, и удаляем "#", добавить в конец массива получившиеся имена без решётки)
Отключаем выборку
Теперь очень-очень быстрой функцией проходимся по всему списку (можно использовать ансинк функции, либо чередующиеся мгновенные запуски функции)
Делаем мы это для того, чтобы проверить, существует ли тнт на карте. Ставим в переменную "mob_exist" = 0, Выбираем моба с именем айди, который мы записали, проверяем если %selected%.exists = "да" - устанавливаем "mob_exist" = 1 (типа моб ещё существует), выбираем опять случайного игрока, если "mob_exist" = 0 (то есть условие выше не сработало, и моба нет) - мы детонируем тнт. Корды у нас есть, т.к. в живых ещё осталась летучая мышь, которая тепалась.
Теперь дело за малым, спавним взрыв и наносим дамаг. Тем, кто в радиусе взрыва, ставим переменную %selected%-damaged-by-tnt = имя моба, затем где-то в прогружаемом месте мы спавним такого моба, дабы из %selected%.player извлечь имя пусковика.
По событию дамага игрока проверяем, если %player%-damaged-by-tnt != 0 (предварительно при входе ставим 0) - отменяем дамаг, тепаем на спавн "как-бы отменяя смерть", и отправляем пусковика тнт (чтобы извлечь имя где-то в прогружаемом месте мы спавним такого моба, дабы из %selected%.player извлечь имя пусковика. )

ФУУх
на деле код проще
Если есть вопросы по реализации - спрашивайте
Сохраняйте в закладки, вдруг пригодится
А, и да, я это не реализовывал, но я думаю что сработать должно, тут нечему "не работать"
 

thykto

Участник
Регистрация
31 Мар 2024
Сообщения
7
Привет. Если у тебя работает весь описанный выше код (а у меня подобное обычно не работает :)), то просто ставь выборку по имени, потом прибавить переменная и вместо %player% поставь %selected%
Сообщение объединено:

Привет. Если у тебя работает весь описанный выше код (а у меня подобное обычно не работает :)), то просто ставь выборку по имени, потом прибавить переменная и вместо %player% поставь %selected%
не уверен, что это работает. в сообщении выше моего лучше описано, хоть и больше кода
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
357
Привет. Если у тебя работает весь описанный выше код (а у меня подобное обычно не работает :)), то просто ставь выборку по имени, потом прибавить переменная и вместо %player% поставь %selected%
Сообщение объединено:


не уверен, что это работает. в сообщении выше моего лучше описано, хоть и больше кода
чек мой ответ выше твоего
 

MagicMan_Rostov

Эксперт
Регистрация
2 Май 2023
Сообщения
24
Один раз объяснял челу механику данную в лс, теперь поведую тебе :)

Как работает код: у тнт есть уникальный айди, и есть переменная для тнт: %selected%.exists (exists в переводе с английского - существует)
Как только спавнится тнт - мы ему даём уникальное имя, выбираем его, ставим %selected%.exists = "да" (или 1, или true, что угодно), и %selected%.player = Текущее имя (яблочко) - игрок, который запустил тнт
Дальше идёт очень убогий костыль: мы должны в тнт-шке заспавнить моба с практически таким-же именем как у тнт, и тепать циклом на корды тнт, только в имя ставим какой-то отличительный символ (например # перед номером моба). Например, у меня это будет летучая мышь
Окей, пол дела есть
Теперь мы должны сделать выборку летучих мышей, и записать айдишки в массив (делается это так: выбрать случайного игрока, создать пустой массив, выбрать летущих мышей, затем ПРИСВ переменную - заменить символы, и удаляем "#", добавить в конец массива получившиеся имена без решётки)
Отключаем выборку
Теперь очень-очень быстрой функцией проходимся по всему списку (можно использовать ансинк функции, либо чередующиеся мгновенные запуски функции)
Делаем мы это для того, чтобы проверить, существует ли тнт на карте. Ставим в переменную "mob_exist" = 0, Выбираем моба с именем айди, который мы записали, проверяем если %selected%.exists = "да" - устанавливаем "mob_exist" = 1 (типа моб ещё существует), выбираем опять случайного игрока, если "mob_exist" = 0 (то есть условие выше не сработало, и моба нет) - мы детонируем тнт. Корды у нас есть, т.к. в живых ещё осталась летучая мышь, которая тепалась.
Теперь дело за малым, спавним взрыв и наносим дамаг. Тем, кто в радиусе взрыва, ставим переменную %selected%-damaged-by-tnt = имя моба, затем где-то в прогружаемом месте мы спавним такого моба, дабы из %selected%.player извлечь имя пусковика.
По событию дамага игрока проверяем, если %player%-damaged-by-tnt != 0 (предварительно при входе ставим 0) - отменяем дамаг, тепаем на спавн "как-бы отменяя смерть", и отправляем пусковика тнт (чтобы извлечь имя где-то в прогружаемом месте мы спавним такого моба, дабы из %selected%.player извлечь имя пусковика. )

ФУУх
на деле код проще
Если есть вопросы по реализации - спрашивайте
Сохраняйте в закладки, вдруг пригодится
А, и да, я это не реализовывал, но я думаю что сработать должно, тут нечему "не работать"
Привет, долго переписывал код и читал его.

На деле все работает как нужно, в будущем использую это для своих режимов, спасибо.
Возникла проблема при чтении кода в моменте определения существования тнт на карте, однако все сработало, даже с условием, что код переписывал несколько раз, потому-что ничего не получалось либо выходила критическая ошибка.

Спасибо.
 
Сверху