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); } }
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(); } }
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); }