public override void Use(ICombatActor source)
        {
            this.source = source;
            this.source.GetShip.Energy.RemoveEnergyBuf(ID);

            if (this.toggled)
            {
                this.source.SendServiceMessage(ServiceMessageType.Info, "TOGGLE OFF");
                Release();
            }
            else
            {
                if (UseAllowed())
                {
                    this.toggled = true;
                    this.source.GetShip.GetBonuses()
                    .GetBonus(BonusType.increaseDamage)
                    .ReplaceBuff(this.source.Avatar.Id + ID,
                                 new Buff(effect, () => this.toggled));
                    this.source.GetShip.Energy.SetEnergyBuf(ID, -_energy);
                    this.StartClientEvent(this.source, new Hashtable()
                    {
                        { GenericEventProps.status, this.toggled }
                    });
                    this.source.SendServiceMessage(ServiceMessageType.Info, "TOGGLE ON");
                }
                else
                {
                    this.source.SendServiceMessage(ServiceMessageType.Warning, GetServiceMessage());
                }
            }
        }
Exemple #2
0
        public override void Use(ICombatActor source)
        {
            this.source = source;

            source.GetShip.Energy.RemoveEnergyBuf(ID);

            if (toggled)
            {
                Release();
                return;
            }
            else
            {
                if (ready)
                {
                    if (!source.ShipDestroyed)
                    {
                        if (source.GetShip.Energy.MaxEnergy > _energy)
                        {
                            if (source.GetTarget.TargetIsICombatActor(out target))
                            {
                                toggled = true;
                                target.GetShip.GetBonuses().GetBonus(BonusType.decreaseRange).ReplaceBuff(source.Avatar.Id + ID, new Buff(effect, () => toggled));
                                source.GetShip.Energy.SetEnergyBuf(ID, -_energy);
                                this.StartClientEvent(this.source, new Hashtable()
                                {
                                    { GenericEventProps.status, this.toggled }
                                });
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
        public virtual void StartClientEvent(ICombatActor actor, Hashtable additionalInfo)
        {
            Hashtable data = new Hashtable {
                { SkillProp.SKILL_ID, this.ID },
                { SkillProp.COOLDOWN, _cooldown },
                { SkillProp.ACTIVE_TIME, active_time },
                { SkillProp.SOURCE_ACTOR_ID, actor.Avatar.Id },
                { SkillProp.TARGET_ACTOR_ID, actor.GetTarget.TargetId },
                { SkillProp.ACTOR_TYPE, actor.Avatar.Type },
                { SkillProp.TARGET_TYPE, actor.GetTarget.Type },
                { SkillProp.ADDITIONAL_INFO, (additionalInfo != null) ? additionalInfo : new Hashtable() },
                { SkillProp.RETURN_CODE, (byte)ReturnCode.Ok }
            };

            SendParameters sendParameters = new SendParameters
            {
                Unreliable = true,
                ChannelId  = Settings.ItemEventChannel
            };

            UseSkillEventData evtInstance = new UseSkillEventData
            {
                Properties = data
            };

            EventData eventData = new EventData((byte)EventCode.UseSkill, evtInstance);
            var       message   = new ItemEventMessage(actor.Avatar, eventData, sendParameters);

            ((MmoItem)actor.Avatar).ReceiveEvent(eventData, sendParameters);
            actor.Avatar.EventChannel.Publish(message);
        }
Exemple #4
0
 public override void Use(ICombatActor actor)
 {
     if (ready)
     {
         if (!actor.ShipDestroyed)
         {
             ICombatActor targetActor = null;
             if (actor.GetTarget.TargetIsICombatActor(out targetActor))
             {
                 if (actor.GetShip.Energy.EnoughAdd(_energy))
                 {
                     UseTimeUpdate();
                     targetActor.GetShip.GetBonuses().GetBonus(BonusType.increaseCooldown).ReplaceBuff(actor.Avatar.Id + ID, new Buff(effect, () => { return(active); }));
                     StartClientEvent(actor, new Hashtable());
                 }
                 else
                 {
                     SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
                 }
             }
             else
             {
                 SendClientErrorEvent(actor, ReturnCode.Fatal, "Target not valid");
             }
         }
         else
         {
             SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
         }
     }
     else
     {
         SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
     }
 }
Exemple #5
0
 public override void Use(ICombatActor actor)
 {
     if (ready)
     {
         if (actor.ShipDestroyed == false)
         {
             if (actor.GetShip.Energy.EnoughAdd(_energy))
             {
                 UseTimeUpdate();
                 actor.GetShip.GetBonuses().GetBonus(BonusType.increaseDamage).ReplaceBuff(ID, new Buff(effect, () =>
                 {
                     return(active);
                 }));
                 StartClientEvent(actor, new Hashtable());
             }
             else
             {
                 SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
             }
         }
         else
         {
             SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
         }
     }
     else
     {
         SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
     }
 }
Exemple #6
0
 public override void updateCooldown(ICombatActor actor)
 {
     if (actor != null)
     {
         _cooldown = actor.GetShip.GetWeapon.Cooldown * 0.5f;
     }
     else
     {
         ConsoleLogging.Get.Print("actor null in skill");
     }
 }
Exemple #7
0
 public PlayerSkills(ICombatActor actor)
 {
     _owner    = actor;
     useSkills = new List <UseSkill>();
     for (int i = 0; i < 6; i++)
     {
         useSkills.Add(new EmptySkill());
     }
     //test
     //Parce();
     //
 }
 public override void Release()
 {
     target  = null;
     toggled = false;
     if (source != null)
     {
         source.GetShip.Energy.RemoveEnergyBuf(ID);
         this.StartClientEvent(this.source, new Hashtable()
         {
             { GenericEventProps.status, this.toggled }
         });
     }
 }
Exemple #9
0
        public override void Use(ICombatActor actor)
        {
            if (ready)
            {
                if (actor.ShipDestroyed == false)
                {
                    ICombatActor targetActor;
                    if (actor.GetTarget.TargetIsICombatActor(out targetActor))
                    {
                        if (actor.GetShip.Energy.EnoughAdd(_energy))
                        {
                            UseTimeUpdate();
                            bool  isHitted     = actor.GetShip.GetWeapon.TryHit();
                            float actualDamage = 0;

                            if (isHitted)
                            {
                                float damage = actor.GetMyWeaponDamage() * effect;
                                actualDamage = targetActor.ApplyDamageToMe(actor.Avatar.Type, actor.Avatar.Id, damage);
                                //actor.ApplyDamageToMe(actualDamage * 0.1f);
                            }
                            StartClientEvent(actor, new Hashtable()
                            {
                                { GenericEventProps.IsHItted, isHitted },
                                { GenericEventProps.actual_damage, actualDamage }
                            });
                        }
                        else
                        {
                            SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
                        }
                    }
                    else
                    {
                        SendClientErrorEvent(actor, ReturnCode.Fatal, "Target not valid");
                    }
                }
                else
                {
                    SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
                }
            }
            else
            {
                SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
            }
        }
Exemple #10
0
 public override void Use(ICombatActor actor)
 {
     if (ready && (actor.ShipDestroyed == false))
     {
         if (actor.GetShip.Energy.EnoughAdd(_energy))
         {
             UseTimeUpdate();
             StartClientEvent(actor, new Hashtable());
         }
         else
         {
             SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
         }
     }
     else
     {
         SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready or actor ship destroyed");
     }
 }
Exemple #11
0
        public override void Use(ICombatActor actor)
        {
            if (ready)
            {
                if (!actor.ShipDestroyed)
                {
                    if (actor.GetShip.Energy.EnoughAdd(_energy))
                    {
                        UseTimeUpdate();

                        /*
                         * actor.GetShip.GetBonuses().GetBonus(BonusType.decreaseCooldown).ReplaceBuff(ID + actor.Avatar.Id, new Buff(effect, () =>
                         * {
                         *  return active;
                         * }));
                         * actor.GetShip.GetBonuses().GetBonus(BonusType.decreaseResists).ReplaceBuff(ID + actor.Avatar.Id, new Buff(0.5f, () =>
                         * {
                         *  return active;
                         * }));*/

                        actor.GetShip.GetBonuses().GetBonus(BonusType.decreaseCooldown).ReplaceBuff(ID + actor.Avatar.Id, new Buff(effect, () => { return(active); }));
                        actor.GetShip.GetBonuses().GetBonus(BonusType.decreasePrecision).ReplaceBuff(ID + actor.Avatar.Id, new Buff(0.3f, () => { return(active); }));
                        StartClientEvent(actor, new Hashtable());
                    }
                    else
                    {
                        SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
                    }
                }
                else
                {
                    SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
                }
            }
            else
            {
                SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
            }
        }
Exemple #12
0
        public override void Use(ICombatActor actor)
        {
            this.actor = actor;
            actor.GetShip.Energy.RemoveEnergyBuf(ID);

            if (toggled)
            {
                toggled = false;
                target  = null;
                this.StartClientEvent(this.actor, new Hashtable()
                {
                    { GenericEventProps.status, this.toggled }
                });
                return;
            }
            else
            {
                if (ready)
                {
                    if (!actor.ShipDestroyed)
                    {
                        if (actor.GetShip.Energy.MaxEnergy > _energy)
                        {
                            if (actor.GetTarget.TargetIsICombatActor(out target))
                            {
                                ConsoleLogging.Get.Print("Apply SK0121 to obj {0}", (ItemType)target.Avatar.Type);
                                toggled = true;
                                target.GetShip.GetBonuses().GetBonus(BonusType.increaseCooldown).ReplaceBuff(actor.Avatar.Id + ID, new Buff(effect, () => { return(toggled); }));
                                actor.GetShip.Energy.SetEnergyBuf(ID, -_energy);
                                this.StartClientEvent(this.actor, new Hashtable()
                                {
                                    { GenericEventProps.status, this.toggled }
                                });
                            }
                        }
                    }
                }
            }
        }
Exemple #13
0
 public override void Use(ICombatActor actor)
 {
     if (ready)
     {
         if (actor.ShipDestroyed == false)
         {
             ICombatActor target = null;
             if (actor.GetTarget.TargetIsICombatActor(out target))
             {
                 if (actor.GetShip.Energy.EnoughAdd(_energy))
                 {
                     UseTimeUpdate();
                     ConsoleLogging.Get.Print("apply bonus from {0} to {1}", actor.Avatar.Id, target.Avatar.Id);
                     target.GetShip.GetBonuses().GetBonus(BonusType.decreasePrecision).ReplaceBuff(actor.Avatar.Id + ID, new Buff(effect, () =>
                     {
                         return(active);
                     }));
                     StartClientEvent(actor, new Hashtable());
                 }
                 else
                 {
                     SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
                 }
             }
             else
             {
                 SendClientErrorEvent(actor, ReturnCode.Fatal, "Target not valid");
             }
         }
         else
         {
             SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
         }
     }
     else
     {
         SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
     }
 }
Exemple #14
0
        public void SendClientErrorEvent(ICombatActor actor, ReturnCode code, string reason)
        {
            Hashtable data = new Hashtable {
                { SkillProp.RETURN_CODE, (byte)code },
                { SkillProp.REASON_MESSAGE, reason }
            };
            SendParameters sendParameters = new SendParameters
            {
                Unreliable = true,
                ChannelId  = Settings.ItemEventChannel
            };

            UseSkillEventData evtInstance = new UseSkillEventData
            {
                Properties = data
            };

            EventData eventData = new EventData((byte)EventCode.UseSkill, evtInstance);
            var       message   = new ItemEventMessage(actor.Avatar, eventData, sendParameters);

            ((MmoItem)actor.Avatar).ReceiveEvent(eventData, sendParameters);
            actor.Avatar.EventChannel.Publish(message);
        }
Exemple #15
0
        public override void Use(ICombatActor actor)
        {
            if (ready)
            {
                if (!actor.ShipDestroyed)
                {
                    if (actor.GetShip.Energy.EnoughAdd(_energy))
                    {
                        UseTimeUpdate();

                        //apply overheating status for player
                        actor.ApplyOverheatingGun();

                        //add such bonus to player with effect
                        actor.GetShip.GetBonuses().GetBonus(BonusType.overheatingGuns).ReplaceBuff(ID, new Buff(effect, () =>
                        {
                            return(actor.GetOverheatingStatus());
                        }));

                        StartClientEvent(actor, new Hashtable());
                    }
                    else
                    {
                        SendClientErrorEvent(actor, ReturnCode.Fatal, string.Format("source has {0} energy but need: {1}", actor.GetShip.Energy.Energy, _energy));
                    }
                }
                else
                {
                    SendClientErrorEvent(actor, ReturnCode.Fatal, "Actor ship destroyed");
                }
            }
            else
            {
                SendClientErrorEvent(actor, ReturnCode.Fatal, "Skill not ready");
            }
        }
Exemple #16
0
 public StandardAttackOperation(ICombatActor hunter, ICombatActor prey)
     : base(hunter, prey)
 {
 }
Exemple #17
0
 protected BaseAttackOperation(ICombatActor hunter, ICombatActor prey)
 {
     Attacker = hunter;
     Target   = prey;
 }
Exemple #18
0
 public virtual void updateCooldown(ICombatActor actor)
 {
 }
Exemple #19
0
 public override void Use(ICombatActor actor)
 {
     //Debug.Log("use Empty skill ");
 }
Exemple #20
0
 public abstract void Use(ICombatActor item);