Пример #1
0
        internal static void Init(BattleCore _battleCore, Unit _unit, int _auraID, AuraRegisterType _registerType, int _nowTime)
        {
            IAuraSDS sds = BattleCore.GetAuraData(_auraID);

            List <int> ids = new List <int>();

            int id = RegisterAura(_battleCore, _unit, sds, _registerType);

            ids.Add(id);

            SuperEventListener.SuperFunctionCallBack3 <Unit, Unit, int> dele = delegate(int _index, Unit _triggerUnit, Unit _otherUnit, int _time)
            {
                if (_triggerUnit == _unit)
                {
                    for (int i = 0; i < ids.Count; i++)
                    {
                        _battleCore.eventListener.RemoveListener(ids[i]);
                    }
                }
            };

            id = _battleCore.eventListener.AddListener(BattleConst.DIE, dele);

            ids.Add(id);

            if (_registerType == AuraRegisterType.EFFECT)
            {
                id = _battleCore.eventListener.AddListener(BattleConst.BE_CLEAN, dele);

                ids.Add(id);
            }

            if (sds.GetTime() > 0)
            {
                int overTime = _nowTime + sds.GetTime();

                SuperEventListener.SuperFunctionCallBack1 <int> dele2 = delegate(int _index, int _time)
                {
                    if (_time >= overTime)
                    {
                        for (int i = 0; i < ids.Count; i++)
                        {
                            _battleCore.eventListener.RemoveListener(ids[i]);
                        }
                    }
                };

                id = _battleCore.eventListener.AddListener(BattleConst.TIME_OVER, dele2);

                ids.Add(id);
            }

            for (int i = 0; i < sds.GetRemoveEventNames().Length; i++)
            {
                id = _battleCore.eventListener.AddListener(sds.GetRemoveEventNames()[i], dele);

                ids.Add(id);
            }
        }
Пример #2
0
        private static int RegisterAura(BattleCore _battleCore, Unit _unit, IAuraSDS _sds, AuraRegisterType _registerType)
        {
            int result;

            switch (_sds.GetAuraType())
            {
            case AuraType.ADD_INT:

                SuperEventListener.SuperFunctionCallBackV2 <int, Unit, Unit> dele1 = delegate(int _index, ref int _result, Unit _triggerUnit, Unit _otherUnit)
                {
                    if (CheckAuraIsBeSilenced(_battleCore, _unit, _registerType) && CheckAuraTrigger(_battleCore, _unit, _triggerUnit, _sds))
                    {
                        _result += _sds.GetEffectData()[0];
                    }
                };

                result = _battleCore.eventListener.AddListener(_sds.GetEventName(), dele1, _sds.GetPriority());

                break;

            case AuraType.SET_INT:

                SuperEventListener.SuperFunctionCallBackV2 <int, Unit, Unit> dele3 = delegate(int _index, ref int _result, Unit _triggerHero, Unit _otherUnit)
                {
                    if (CheckAuraIsBeSilenced(_battleCore, _unit, _registerType) && CheckAuraTrigger(_battleCore, _unit, _triggerHero, _sds))
                    {
                        _result = _sds.GetEffectData()[0];
                    }
                };

                result = _battleCore.eventListener.AddListener(_sds.GetEventName(), dele3, _sds.GetPriority());

                break;

            case AuraType.MULTI_INT:

                SuperEventListener.SuperFunctionCallBackV2 <int, Unit, Unit> dele4 = delegate(int _index, ref int _result, Unit _triggerHero, Unit _otherUnit)
                {
                    if (CheckAuraIsBeSilenced(_battleCore, _unit, _registerType) && CheckAuraTrigger(_battleCore, _unit, _triggerHero, _sds))
                    {
                        _result = (int)(0.001f * _sds.GetEffectData()[0] * _result);
                    }
                };

                result = _battleCore.eventListener.AddListener(_sds.GetEventName(), dele4, _sds.GetPriority());

                break;

            case AuraType.CAST_SKILL:

                SuperEventListener.SuperFunctionCallBack3 <Unit, Unit, int> dele2 = delegate(int _index, Unit _triggerUnit, Unit _otherUnit, int _time)
                {
                    if (CheckAuraIsBeSilenced(_battleCore, _unit, _registerType) && CheckAuraTrigger(_battleCore, _unit, _triggerUnit, _sds))
                    {
                        switch (_sds.GetEffectTarget())
                        {
                        case AuraTarget.OWNER:

                            Effect.UnitTakeEffect(_battleCore, _unit, _sds.GetEffectData(), _time);

                            break;

                        case AuraTarget.TRIGGER:

                            Effect.UnitTakeEffect(_battleCore, _triggerUnit, _sds.GetEffectData(), _time);

                            break;

                        case AuraTarget.OTHER:

                            if (_otherUnit != null)
                            {
                                Effect.UnitTakeEffect(_battleCore, _otherUnit, _sds.GetEffectData(), _time);
                            }

                            break;
                        }
                    }
                };

                result = _battleCore.eventListener.AddListener(_sds.GetEventName(), dele2);

                break;

            default:

                throw new Exception("Unknown AuraType:" + _sds.GetAuraType().ToString());
            }

            return(result);
        }