/// <summary> /// Removes a status flag from the client. /// </summary> /// <param name="effect">The effect.</param> public void RemoveStatusFlag(Enums.StatusFlag effect) { if (ContainsStatusFlag(effect)) { MapObject.StatusFlag &= ~(ulong)effect; } }
/// <summary> /// Checks whether the status flag already contains an effect.. /// </summary> /// <param name="effect">The effect</param> /// <returns>Returns true if the status flag contains the effect.</returns> public bool ContainsStatusFlag(Enums.StatusFlag effect) { ulong aux = MapObject.StatusFlag; aux &= ~(ulong)effect; return(!(aux == MapObject.StatusFlag)); }
/// <summary> /// Sets a status flag. /// </summary> /// <param name="effect">The effect.</param> /// <param name="time">Milliseconds to wait before remove. 0 = never remove.</param> public void SetStatusFlag(Enums.StatusFlag effect, int time = 0) { MapObject.StatusFlag = (ulong)effect; var player = MapObject as Models.Entities.Player; if (player != null && player.StaticStatusFlag != Enums.StatusFlag.None) { AddStatusFlag(player.StaticStatusFlag); } if (time > 0) { Task.Run(async() => await RemoveStatusFlagAsync(time, effect)); } }
/// <summary> /// Adds a status flag. /// </summary> /// <param name="effect">The effect.</param> /// <param name="time">Milliseconds to wait before remove. 0 = never remove.</param> public void AddStatusFlag(Enums.StatusFlag effect, int time = 0) { if (!ContainsStatusFlag(effect)) { if (!ContainsStatusFlag(Enums.StatusFlag.Dead) && !ContainsStatusFlag(Enums.StatusFlag.Ghost) || effect == Enums.StatusFlag.TeamLeader) { MapObject.StatusFlag |= (ulong)effect; if (time > 0) { Task.Run(async() => await RemoveStatusFlagAsync(time, effect)); } } } }
/// <summary> /// Removes a status flag asynchronously. /// </summary> /// <param name="time">The time to wait before removing the flag.</param> /// <param name="effect">The effect to remove.</param> private async Task RemoveStatusFlagAsync(int time, Enums.StatusFlag effect) { await Task.Delay(time); try { RemoveStatusFlag(effect); } catch (Exception e) { Drivers.Global.RaiseException(e); var player = MapObject as Models.Entities.Player; if (player != null) { player.ClientSocket.LastException = e; player.ClientSocket.Disconnect(Drivers.Messages.Errors.FATAL_ERROR_TITLE); } } }