Пример #1
0
        protected override void OnContact(List <Player> players, List <Obstacle> obstacles)
        {
            int   goldMade     = 0;
            float damageAmount = damage * (1 + RandomInstance.instance.Next(21) / 100f - 0.1f);  // random +- %10

            foreach (var p in players)
            {
                p.FlyRequest(p.position + ((p.position - position).normalized + movementDirection.normalized).normalized * 3); // ucus mesafesi 3 birim

                if (!p.effects.hasShield)
                {
                    p.DealDamage(damageAmount, senderPlayer);
                    OM_PlayerHealthInfo.SendMessage(senderPlayer.arena, p);

                    if (p != senderPlayer)
                    {
                        goldMade++;
                    }
                }
                else
                {
                    p.effects.hasShield = false;
                    OM_ShieldConsumed.SendMessage(p.arena, p);
                    p.UpdateGold(p.gold + 1);
                    OM_PlayerGoldInfo.SendMessage(p);
                }
            }

            foreach (var o in obstacles)
            {
                o.DealDamage(damageAmount);
                OM_ObstacleHealthInfo.SendMessage(arena, o, position);
            }

            OM_MissileExplode.SendMessage(senderPlayer.arena, this);
            awaitsDestruction = true;

            if (goldMade != 0 && senderPlayer != null)
            {
                arena.roundStats.PlayerHit(senderPlayer);
                senderPlayer.UpdateGold(senderPlayer.gold + goldMade);
                OM_PlayerGoldInfo.SendMessage(senderPlayer);
            }
        }
Пример #2
0
        public void DealDamage(float damage, Player lastHitStamp = null)
        {
            AssignLastHitStamp(lastHitStamp);

            if (health <= 0 || damage < health)
            {
                health -= damage;
            }
            else
            {
                health -= damage;

                // can ilk kez sifirin altina dusuyor.
                // mesajin ulastigina emin olalim, clientta 'NoKill' damage verenler sorun cikarmasin.
                OM_PlayerHealthInfo.SendMessage(this.arena, this);
                arena.roundStats.PlayerDied(this);
                OnDied();
            }
        }
Пример #3
0
        public void PlayerKick(Player player)
        {
            if (!players.Contains(player))
            {
                return;
            }

            if ((state == ArenaState.Battle || state == ArenaState.WaitingPlayersLoading) && player.IsAlive)
            {
                player.DealDamage(player.health);
                OM_PlayerHealthInfo.SendMessage(this, player);
            }

            player.user.state = User.UserState.Idle;
            player.Destroy();
            players.Remove(player);
            Game.clientPlayerMap.Remove(player.user.client);
            OM_PlayerExitGame.SendMessage(player);
        }