Beispiel #1
0
 /// <summary>
 /// Notifies other players, that player changed attack/move speed.
 /// </summary>
 private void Character_OnAttackOrMoveChanged(IKillable sender)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendAttackAndMovementSpeed(player.Client, sender);
     }
 }
Beispiel #2
0
 private void Character_OnMaxSPChanged(IKillable sender, int maxSP)
 {
     if (Client != null)
     {
         SendMaxSP();
     }
 }
    private void OnSelectedDeath(IKillable deathSelected)
    {
        deathSelected.OnDeath -= OnSelectedDeath;

        DeselectCurrentSelected();
        SelectedHaveBeenUpdated(selected);
    }
Beispiel #4
0
    private IEnumerator LightAttack()
    {
        // Make light attack on CD
        m_canLightAttack = false;

        // Shoot out a ray infront of the player
        Ray attackRay = new Ray(this.transform.position, this.transform.forward);

        RaycastHit[] raycastHits;
        // Cast out the ray as a sphere shape in the attack range
        raycastHits =
            Physics.SphereCastAll(attackRay, AttackRadius, AttackRange, AttackingLayer, QueryTriggerInteraction.Ignore);
        Debug.DrawRay(transform.position, transform.forward * AttackRange, Color.blue, 2f, false);

        m_animator.SetBool("IsAttacking", true);
        yield return(new WaitForSeconds(0.5f));

        foreach (RaycastHit hitResult in raycastHits)
        {
            Debug.Log("Hit: " + hitResult.transform.gameObject.name);
            // Do whatever the other object needs to be react
            IKillable killableObj = hitResult.transform.GetComponent <IKillable>();
            if (killableObj != null)
            {
                killableObj.TakeDamage(AttackDmg);
                if (hitResult.transform.tag == "Enemy")
                {
                    killCount++;
                }
            }
        }
        //yield return new WaitForSeconds(0.5f);
        m_animator.SetBool("IsAttacking", false);
        m_canLightAttack = true;
    }
 public virtual void Shoot()
 {
     // Can Shoot?
     if (canShoot)
     {
         // Create a bullet ray from shot origin to forward
         Ray        bulletRay = new Ray(shotOrigin.position, shotOrigin.forward);
         RaycastHit hit;
         // Perform Raycast (Hit Scan)
         if (Physics.Raycast(bulletRay, out hit, range))
         {
             // Try getting enemy from hit
             IKillable killable = hit.collider.GetComponent <IKillable>();
             if (killable != null)
             {
                 // Deal tamage to enemy
                 killable.TakeDamage(damage);
             }
         }
         // Show Line
         StartCoroutine(ShowLine(bulletRay, lineDelay));
         // Reset timer
         shootTimer = 0;
         // Can't shoot anymore
         canShoot = false;
     }
 }
Beispiel #6
0
 private void Character_OnUsedRangeSkill(IKiller sender, IKillable target, Skill skill, AttackResult attackResult)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendUsedRangeSkill(player.Client, (Character)sender, target, skill, attackResult);
     }
 }
Beispiel #7
0
 private void Mob_OnRecover(IKillable sender)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendMobRecover(player.Client, sender);
     }
 }
Beispiel #8
0
 /// <summary>
 /// Notifies other players, that player starts casting.
 /// </summary>
 private void Character_OnSkillCastStarted(Character sender, IKillable target, Skill skill)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendSkillCastStarted(player.Client, sender, target, skill);
     }
 }
Beispiel #9
0
 private void Character_OnMaxHPChanged(IKillable sender, int maxHP)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.Send_Max_HP(player.Client, sender.Id, maxHP);
     }
 }
Beispiel #10
0
 public void AddListener(IKillable _iKillable)
 {
     if (_iKillable != null)
     {
         iKillableInterfaces.Add(_iKillable);
     }
 }
    private void OnStructureDeath(IKillable structure)
    {
        Debug.Assert(structure is Structure);

        allActiveStructures.Remove((Structure)structure);
        structure.OnDeath -= OnStructureDeath;
    }
Beispiel #12
0
 /// <summary>
 /// Notifies other players, that player starts casting.
 /// </summary>
 private void Character_OnSkillCastStarted(Character sender, IKillable target, Skill skill)
 {
     foreach (var player in Players)
     {
         _packetHelper.SendSkillCastStarted(player.Value.Client, sender, target, skill);
     }
 }
Beispiel #13
0
 internal void SendMobRecover(IWorldClient client, IKillable sender)
 {
     using var packet = new Packet(PacketType.MOB_RECOVER);
     packet.Write(sender.Id);
     packet.Write(sender.CurrentHP);
     client.SendPacket(packet);
 }
Beispiel #14
0
 /// <summary>
 /// Notifies other players, that player added buff to someone.
 /// </summary>
 private void Character_OnAddedBuff(Character sender, IKillable receiver, ActiveBuff buff)
 {
     foreach (var player in Players)
     {
         _packetHelper.SendCharacterAddedBuff(player.Value.Client, sender, receiver, buff);
     }
 }
Beispiel #15
0
 /// <summary>
 /// Notifies other players, that player is dead.
 /// </summary>
 private void Character_OnDead(IKillable sender, IKiller killer)
 {
     foreach (var player in Players)
     {
         _packetHelper.SendCharacterKilled(player.Value.Client, (Character)sender, killer);
     }
 }
Beispiel #16
0
 /// <summary>
 /// Notifies other players, that player used skill.
 /// </summary>
 private void Character_OnUsedSkill(Character sender, IKillable target, Skill skill, AttackResult attackResult)
 {
     foreach (var player in Players)
     {
         _packetHelper.SendCharacterUsedSkill(player.Value.Client, sender, target, skill, attackResult);
     }
 }
Beispiel #17
0
 private void Character_OnPeriodicalDamage(int senderId, IKillable target, Skill skill, AttackResult result)
 {
     foreach (var player in GetAllPlayers(true))
     {
         Map.PacketFactory.SendUsedRangeSkill(player.GameSession.Client, senderId, target, skill, result);
     }
 }
    public static void Main()
    {
        string kingName = Console.ReadLine();

        King king = new King(kingName);

        List <IKillable> personnel = Console.ReadLine()
                                     .Split()
                                     .Select(name => new RoyalGuard(name, king))
                                     .ToList <IKillable>();

        personnel.AddRange(Console.ReadLine()
                           .Split()
                           .Select(name => new Footman(name, king))
                           .ToList <IKillable>());

        string input = Console.ReadLine();

        while (input != "End")
        {
            if (input.StartsWith("Attack"))
            {
                king.UnderAttack();
            }
            else
            {
                string[]  data   = input.Split();
                string    name   = data[1];
                IKillable figure = personnel.First(f => f.Name == name);
                figure.Killed();
            }

            input = Console.ReadLine();
        }
    }
Beispiel #19
0
 /// <summary>
 /// Notifies other players, that player is dead.
 /// </summary>
 private void Character_OnDead(IKillable sender, IKiller killer)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendCharacterKilled(player.Client, (Character)sender, killer);
     }
 }
Beispiel #20
0
 public void Construct(IMovable movement, IRotatable rotatable, IWave wave, IKillable killable)
 {
     this.killable  = killable;
     this.movement  = movement;
     this.rotatable = rotatable;
     this.wave      = wave;
 }
Beispiel #21
0
 private void Character_OnRecover(IKillable sender, int hp, int mp, int sp)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendRecoverCharacter(player.Client, sender, hp, mp, sp);
     }
 }
Beispiel #22
0
 private void Character_OnFullRecover(IKillable sender)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendRecoverCharacter(player.Client, sender, sender.CurrentHP, sender.CurrentMP, sender.CurrentSP);
     }
 }
Beispiel #23
0
 private void Character_OnSkillKeep(IKillable sender, ActiveBuff buff, AttackResult result)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendSkillKeep(player.Client, sender.Id, buff.SkillId, buff.SkillLevel, result);
     }
 }
Beispiel #24
0
 /// <summary>
 /// Notifies other players that player's max HP, MP and SP changed
 /// </summary>
 private void Character_OnMax_HP_MP_SP_Changed(IKillable sender)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendMax_HP_MP_SP(player.Client, (Character)sender);
     }
 }
Beispiel #25
0
 private void Mob_OnUsedSkill(IKiller sender, IKillable target, Skill skill, AttackResult attackResult)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendMobUsedSkill(player.Client, (Mob)sender, target.Id, skill, attackResult);
     }
 }
Beispiel #26
0
        private void Mob_OnDead(IKillable sender, IKiller killer)
        {
            var mob = (Mob)sender;

            RemoveListeners(mob);
            Mobs.TryRemove(mob.Id, out var removedMob);

            foreach (var player in GetAllPlayers(true))
            {
                _packetsHelper.SendMobDead(player.Client, sender, killer);
            }

            // Add experience to killer character/party
            if (killer is Character killerCharacter)
            {
                if (killerCharacter.HasParty)
                {
                    killerCharacter.AddPartyMobExperience(mob.Level, (ushort)mob.Exp);
                }
                else
                {
                    killerCharacter.AddMobExperience(mob.Level, (ushort)mob.Exp);
                }
            }
        }
Beispiel #27
0
 /// <summary>
 /// Creates a Human
 /// </summary>
 /// <param name="name">The name to display for this character</param>
 /// <param name="x">The starting x position</param>
 /// <param name="y">The starting y position</param>
 public Human(string name, int x, int y)
 {
     this.name = name;
     health = 100;
     Killable = new BasicKillable(100);
     Movable = new BasicMovable(50, 50);
 }
Beispiel #28
0
        /// <summary>
        /// Gets enemies near target.
        /// </summary>
        public IEnumerable <IKillable> GetEnemies(Character sender, IKillable target, byte range)
        {
            IEnumerable <IKillable> mobs  = GetAllMobs(true).Where(m => !m.IsDead && MathExtensions.Distance(target.PosX, m.PosX, target.PosZ, m.PosZ) <= range);
            IEnumerable <IKillable> chars = GetAllPlayers(true).Where(p => !p.IsDead && p.Country != sender.Country && MathExtensions.Distance(target.PosX, p.PosX, target.PosZ, p.PosZ) <= range);

            return(mobs.Concat(chars));
        }
Beispiel #29
0
 /// <summary>
 /// Creates a Human
 /// </summary>
 /// <param name="name">The name to display for this character</param>
 /// <param name="x">The starting x position</param>
 /// <param name="y">The starting y position</param>
 public Human(string name, int x, int y)
 {
     this.name = name;
     health    = 100;
     Killable  = new BasicKillable(100);
     Movable   = new BasicMovable(50, 50);
 }
Beispiel #30
0
    public virtual void Shoot()
    {
        //Can shoot
        if (canShoot)
        {
            //create bullet ray
            Ray        bulletRay = new Ray(shotOrigin.position, shotOrigin.forward);
            RaycastHit hit;

            if (Physics.Raycast(bulletRay, out hit, range))
            {
                IKillable killable = hit.collider.GetComponent <IKillable>();
                if (killable != null)
                {
                    //deal damage to enemy
                    killable.TakeDamage(damage);
                }
            }

            StartCoroutine(ShotLine(bulletRay, lineDelay));

            shootTimer = 0;
            //Can't shoot anymore
            canShoot = false;
        }
    }
Beispiel #31
0
 /// <summary>
 /// Notifies other players, that player used auto attack.
 /// </summary>
 private void Character_OnAttack(IKiller sender, IKillable target, AttackResult attackResult)
 {
     foreach (var player in GetAllPlayers(true))
     {
         _packetsHelper.SendCharacterUsualAttack(player.Client, sender, target, attackResult);
     }
 }
 void p_Killed(IKillable killed, IGameObject source)
 {
     GameOver = true;
 }
 public void Character_Killed(IKillable killed, IGameObject source)
 {
     var s = source as Character;
     if (s.Experience != null) s.Experience.Add(ExperienceWhenKilled);
     Loot.Drop();
     GameWorld.Remove(this);
 }
 void target_Killed(IKillable killed, IGameObject source)
 {
     Player.Target = null;
 }