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); } }
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); }