Example #1
0
        public bool AttachEffect(Effect e, bool fireScriptAttachEvent = false)
        {
            if (e.Target == null)
            {
                return false;
            }

            if (e.TypeHash == 0)
            {
                return false;
            }

            if (AttachedEffects.ContainsKey(e.TypeHash))
            {
                return false;
            }

            if (!CanAttachEffect(e.Information.EffectKind))
            {
                return false;
            }

            if (e.EffectStart == 0)
            {
                e.EffectStart = DateTime.Now.ToUniversalTime().Ticks;
            }

            if (e.Information.DurationKind == EffectDurationType.Time)
            {
                e.TimeRemaining = TimeSpan.FromSeconds(e.Information.Duration).Ticks;
            }
            else if (e.TimeRemaining == 0)
            {
                e.TimeRemaining = e.Information.Duration;
            }

            if (e.LastTick == 0 && (e.Information.DurationKind == EffectDurationType.Time))
            {
                e.LastTick = e.EffectStart;
            }
            // Add it to the local effects list on the character object
            AttachedEffects.Add(e.TypeHash, e);

            if (fireScriptAttachEvent)
            {
                Dictionary<string, object> eargs = new Dictionary<string, object>();
                eargs.Add("Effect", e.TypeHash);
                GameEvents.FireEvent(GameEventType.EffectAttached, e.Target, null, eargs);
            }

            return true;
        }
Example #2
0
 public bool DetachEffect(Effect e, bool fireScriptDetachEvent = false)
 {
     if (AttachedEffects.Remove(e.TypeHash))
     {
         if (fireScriptDetachEvent)
         {
             Dictionary<string, object> args = new Dictionary<string, object>();
             args.Add("Effect", e.TypeHash);
             GameEvents.FireEvent(GameEventType.EffectDetached, OwningObject, null, args);
         }
         return true;
     }
     return false;
 }