feature/effects #37

Manually merged
neckrat merged 64 commits from feature/effects into main 2026-05-06 10:19:49 +03:00
Showing only changes of commit d8a89ec24b - Show all commits

View File

@ -65,6 +65,18 @@ function behavior:addEffect(effect, stacks, intensity)
end
end
--- Удаляет один эффект по порядку
--- @param effect Effect
function behavior:deleteEffect(effect)
self.effectsProperties[effect] = nil
for i, ef in ipairs(self.effectsPriority) do
if ef == effect then
table.remove(self.effectsPriority, i)
return

ладно, это ужас, но не ужас-ужас

ладно, это ужас, но не ужас-ужас

по академически я должен был написать линейный поиск через цикл while, но я необучаемое быдло 🤡

по академически я должен был написать линейный поиск через цикл while, но я необучаемое быдло 🤡

академически у тебя не должно быть линейных поисков вообще, в этом-то и суть

академически у тебя не должно быть линейных поисков вообще, в этом-то и суть

а у тебя получается внутри линейного for i, ef in ipairs линейный table.remove. Это не ужас-ужас, потому что ты гарантируешь срабатывание table.remove не более одного раза

а у тебя получается внутри линейного `for i, ef in ipairs` линейный `table.remove`. Это не ужас-ужас, потому что ты гарантируешь срабатывание `table.remove` не более одного раза

этот моментик я бы тоже переписал

этот моментик я бы тоже переписал

типа красиво-алгоритмически - это все на тегах и все за O(1), кроме последовательного срабатывания всех эффектов (очевидно)

типа красиво-алгоритмически - это все на тегах и все за O(1), **кроме** последовательного срабатывания всех эффектов (очевидно)

думаю, хотя бы для этого система тэгов не пригодится (надеюсь)

думаю, хотя бы для этого система тэгов не пригодится (надеюсь)

ну если я правильно собираю в голове ход мыслей, то нужны адекватные теги (уникальные; один тег к одному эффекту), и отдельно группы тегов (один ко многим). Например, чтобы объединить 15 версий невидимости в одну группу "невидимость" и не давать выбрать таких персонажей в таргет

ну если я правильно собираю в голове ход мыслей, то нужны адекватные теги (уникальные; один тег к одному эффекту), и отдельно группы тегов (один ко многим). Например, чтобы объединить 15 версий невидимости в одну группу "невидимость" и не давать выбрать таких персонажей в таргет

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

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

нам же эти же тэги пригодятся для спеллов в конце концов, для их систематизации

нам же эти же тэги пригодятся для спеллов в конце концов, для их систематизации

не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов

не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов

не думаю, что это такое уж переусложнение, мы же не только ради эффектов это делаем в конце концов

не думаю, что это такое уж переусложнение, мы же не только ради эффектов это делаем в конце концов

не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов

типа можно, но пока не знаю, зачем

> не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов типа можно, но пока не знаю, зачем

вай нот? dry и всё такое

не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов

вай нот? dry и всё такое > не вижу необходимости иметь одну общую систему тегов для спеллов и для эффектов

тогда будет нейминг "spell_myspell" и "effect_myeffect"

тогда будет нейминг "spell_myspell" и "effect_myeffect"

так-то у нас не стоит задача по тегу понимать еще и тип объекта, у нас для этого инструменты языка есть, не на бейсике пишем

так-то у нас не стоит задача по тегу понимать еще и тип объекта, у нас для этого инструменты языка есть, не на бейсике пишем

справедливо

справедливо

фактически у нас как будто есть таблицы в реляционной СУБД Microsoft Access: spells и effects.
мы и так понимаем, что это разные таблицы. В рамках разных таблиц айдишники не обязаны быть уникальными

фактически у нас как будто есть таблицы в реляционной СУБД Microsoft Access: spells и effects. мы и так понимаем, что это разные таблицы. В рамках разных таблиц айдишники не обязаны быть уникальными

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

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

ну да, да, очевидно

ну да, да, очевидно

у нас персонажи вообще в роли энтити, там со строковыми тэгами не выйдет

у нас персонажи вообще в роли энтити, там со строковыми тэгами не выйдет

короче нормальная архитектура вроде

короче нормальная архитектура вроде
end
end
end
--- О ДААА ЭТА ФУНКЦИЯ МЕНЯЕТ СОСТОЯНИЕ О ДАААААА О ДАААААААААА
--- @param effect Effect
--- @param amount integer
@ -74,15 +86,10 @@ function behavior:deleteStacks(effect, amount)
amount -- !!!!!!!!!!!!!!!! <<<<< 21+ only
if self.effectsProperties[effect].stacks <= 0 then
print("[Effects]:", effect.tag, "ДОЛЖЕН БЫТЬ СТЁРТ")
self.effectsProperties[effect] = nil
for i, ef in ipairs(self.effectsPriority) do
if ef == effect then
table.remove(self.effectsPriority, i)
self:deleteEffect(effect)
print("[Effects]:", effect.tag, "СТЁРТ")
end
end
end
end
--- должна вызываться перед смертью персонажа;
---