示例#1
0
 public override bool Equals(object obj)
 {
     if (obj is AdditionState)
     {
         AdditionState obj2 = obj as AdditionState;
         return(obj2.Addition == this.Addition);
     }
     else if (obj is uint)
     {
         return(this.Addition == Convert.ToUInt32(obj, NumberFormatInfo.InvariantInfo));
     }
     return(false);
 }
示例#2
0
 /// <summary>
 /// Creates a new addition which is a timed addition
 /// </summary>
 /// <param name="target">Target on which the addition is casted</param>
 /// <param name="addition">Addition which is casted</param>
 /// <param name="duration">How long the addition lasts (ms)</param>
 public static void CreateAddition(Actor target, uint addition, uint duration)
 {
     Saga.Factory.Additions.Info info;
     if (Singleton.Additions.TryGetAddition(addition, out info))
     {
         target._additions._skipcheck = true;
         Singleton.Additions.ApplyAddition(addition, target);
         AdditionState state = new AdditionState(addition, duration, info);
         state.canexpire = true;
         target._additions.timed_additions.Add(state);
         SendExchangeStatus(target, addition, duration);
         target._additions._skipcheck = false;
     }
 }
            bool IDataAdditionCollection.Create(uint addition, uint duration)
            {
                Saga.Factory.Additions.Info info;
                if (Singleton.Additions.TryGetAddition(addition, out info))
                {
                    if (duration > 0)
                    {
                        AdditionState state = new AdditionState(addition, duration, info);
                        state.canexpire = true;
                        additions.timed_additions.Add(state);
                    }
                    else
                    {
                        AdditionState state = new AdditionState(addition, duration, info);
                        additions.additions.Add(state);
                    }

                    return true;
                }

                return false;
            }
示例#4
0
        /// <summary>
        ///Updates a existing addition or removes the old addition to replace it
        ///by the new one (static).
        /// </summary>
        /// <param name="target">Target on which the addition is casted</param>
        /// <param name="Addition">Addition which is casted</param>
        /// <param name="Duration">How long the addition lasts (ms)</param>
        public static void UpdateAddition(Actor target, uint addition)
        {
            Saga.Factory.Additions.Info info;
            if (Singleton.Additions.TryGetAddition(addition, out info))
            {
                Predicate<AdditionState> c = delegate(AdditionState state)
                {
                    return state.Addition == addition;
                };

                target._additions._skipcheck = true;
                int index = target._additions.additions.FindIndex(c);
                if (index > -1) //reset lifetime
                {
                    AdditionState state = target._additions.timed_additions[index];
                    state.Lifetime = info.EffectDuration;
                    SendDeleteStatus(target, addition);
                    SendExchangeStatus(target, addition, info.EffectDuration);
                }
                else //add new
                {
                    Singleton.Additions.ApplyAddition(addition, target);
                    AdditionState state = new AdditionState(addition, info.EffectDuration, info);
                    state.canexpire = true;
                    target._additions.timed_additions.Add(state);
                    SendExchangeStatus(target, addition, info.EffectDuration);
                }
                //if (index < 0) //reset lifetime
                //{
                //    Singleton.Additions.ApplyAddition(addition, target);
                //    AdditionState state = new AdditionState(addition, 0, info);
                //    state.canexpire = false;
                //    target._additions.additions.Add(state);
                //    SendExchangeStatus(target, addition, 0);
                //}
                target._additions._skipcheck = false;
            }
        }