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