Делаю один проект , в нем я полностью отказался от стандартной функции нанесения урона и получается отказался от события получение урона. Я сделал собственную базу урона которая организована на потери жизни от всех мне нужных вычислений (брони, сопротивления и тд) но возникла проблема - допустим я создал какую не будь способность которая должна отловить урон , использовать событие на отлов урона я не могу уже - то есть надо делать что-то новое , подобие какой-то функции которая бы проверяла наличие нанесенного урона , но при этом функция могла работать при многократном использовании ( подобной событию отлова урона) . Помогите разобраться с проблемой

Принятый ответ

Как вариант, можно найти в системе действия, в которых триггерно наносится урон юниту (потеря жизней), и отлавливать уже оттуда.

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
7 лет назад
0
заноси свой урон в глобалку, и запускай триггер с названием допустим DamageResultEvent, где ты уже можешь узнать свой урон и запустить нужные тебе действия. На джассе было бы гораздо проще сделать свою систему урона и отлавливать ее
0
7
7 лет назад
0
Hate, я вообще то только jass-vjass и пользуюсь
0
26
7 лет назад
0
Sergey105:
Hate, я вообще то только jass-vjass и пользуюсь
папка Mechanics, триггер Events
в той же папке MainEngine, строка 548, функция PhysicalDamage
Загруженные файлы
0
7
7 лет назад
0
Hate, неплохие наработки плохо что все на cjass не очень люблю сильно путает меня он
0
30
7 лет назад
Отредактирован Clamp
0
Что-то типа такого
код
library DamageController {

    private struct damage {

        float common, fire, magic, world

        //constructor
        static damage new(float common, float fire, float magic, float world) {
            damage this = damage.create()
            this.common = common
            this.fire   = fire
            this.magic  = magic
            this.world  = world
            return this
        }
    }

    struct damageController {

        private damage instance
        private agent source, target  //here can be units instead of agents

        //constructor
        static void dealDamage(agent source, agent target, float common, float fire, float magic, float world) {
            damageController this = damageController.create()
            this.source = source
            this.target = target
            this.instance = damage.new(common, fire, magic, world)
            this.dealDamageEx()
        }

        private void dealDamageEx() {

            resist resistance  = target.getResist()

            float commonResist = resistance.common
            float fireResist   = resistance.fire
            float magicResist  = resistance.magic

            float commonDamage = instance.common
            float fireDamage   = instance.fire
            float magicDamage  = instance.magic
            float worldDamage  = instance.world         //world damage can't be resisted
            	//all checks, reductions and onDamage calls goes here, including any damage detection
            	//you can call here any related method or function from anywhere
                //you can send values from this.instance, this.source or this.target, but not themselves
            	//don't forget to deal damage here
            this.instance.destroy()
            this.destroy()
        }
    }
}

У меня так и сделано, собственно. Build-in нанесения урона вообще нет, за дамаг отвечает этот контроллер.
хотя у меня и юнитов в понимании варкрафта нету по сути...

Hate, ты же в курсе, что эта тема не работает?
    SetMaxHp(u,n) = SetUnitState(u, ConvertUnitState(1), n)
    SetMaxMp(u,n) = SetUnitState(u, ConvertUnitState(3), n)
Среди дефайнов в Main.
2
26
7 лет назад
2
Hate, ты же в курсе, что эта тема не работает?
незнаю под каким веществом и зачем я это дефайнил, на это есть отдельная наработка UnitsMaxState
4 комментария удалено
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.