public override void OnPlayerKilled(ServerMPPlayer killer, NetworkPlayer killerNetPlayer, ServerMPPlayer assistant, NetworkPlayer assistantNetPlayer, ServerMPPlayer killed, NetworkPlayer killedNetPlayer, string item) { // Update scores if (killer == null) { // Update killed score killedNetPlayer.Score += SCORE_SUICIDE_PENALTY; } else { // Update killer score if (killer.Team == killed.Team) { killerNetPlayer.Score += SCORE_TEAMKILL_PENALTY; } else { killerNetPlayer.Score += SCORE_KILL; } // Update assistant score if (assistant != null) { if (assistant.Team == killed.Team) { assistantNetPlayer.Score += SCORE_ASSIST_TEAMKILL_PENALTY; } else { assistantNetPlayer.Score += SCORE_ASSIST; } } // Update team scores if (killer.Team != killed.Team) { if (killer.Team == Team.A) { teamAScore++; } else if (killer.Team == Team.B) { teamBScore++; } } // Announce score change NetChannel.FireEventForAllConnections("Client_UpdateScores", RemoteFlag.None, NetDeliveryMethod.ReliableOrdered, (short)teamAScore, (short)teamBScore); } base.OnPlayerKilled(killer, killerNetPlayer, assistant, assistantNetPlayer, killed, killedNetPlayer, item); // Add player to the respawn list AddRespawn(killed.StateInfo.Owner, RESPAWN_TIME); }
void CaptureIntel(ServerMPPlayer player, Intel intel) { intel.Return(); string team = intel.Team == Team.A ? "Red" : "Blue"; Screen.Chat(string.Format("The {0} intel has been captured!", team)); if (player != null) { player.DropIntel(); NetworkPlayer netPlayer; if (NetPlayerComponent.TryGetPlayer(player.StateInfo.Owner, out netPlayer)) { netPlayer.Score += SCORE_CAPTURE; Screen.AddFeedItem(netPlayer.Name, "", World.GetTeamColor(player.Team), "Captured", "Intel", World.GetTeamColor(player.Team == Team.A ? Team.B : Team.A)); } } else { Screen.AddFeedItem("?", null, World.GetTeamColor(intel.Team == Team.A ? Team.B : Team.A), "Captured", "Intel", World.GetTeamColor(intel.Team)); } if (intel.Team == Team.B) { teamAScore++; } else { teamBScore++; } if (teamAScore < SCORE_CAP && teamBScore < SCORE_CAP) { NetChannel.FireEventForAllConnections("Client_IntelCaptured", (byte)intel.Team); } NetChannel.FireEventForAllConnections("Client_UpdateScores", (short)teamAScore, (short)teamBScore); }
private void Intel_OnDropped(object sender, Player _player) { Intel intel = (Intel)sender; ServerMPPlayer player = (ServerMPPlayer)_player; string team = intel.Team == Team.A ? "Red" : "Blue"; Screen.Chat(string.Format("The {0} intel has been dropped!", team)); NetworkPlayer netPlayer; if (NetPlayerComponent.TryGetPlayer(player.StateInfo.Owner, out netPlayer)) { Screen.AddFeedItem(netPlayer.Name, "", World.GetTeamColor(player.Team), "Dropped", "Intel", World.GetTeamColor(intel.Team)); } NetChannel.FireEventForAllConnections("Client_IntelDropped", (byte)intel.Team); }
protected override void OnStarted() { Server.OnUserDisconnected += Server_OnUserDisconnected; // Send gamemode info NetChannel.FireEventForAllConnections("Client_GamemodeInfo", (ushort)SCORE_CAP); var commandposts = World.Description.GetObjectsByTag("CommandPost"); if (commandposts.Count == 2) { // Load command posts foreach (WorldObjectDescription ob in commandposts) { Vector3 position = ob.GetVector3("Position"); Team team = (Team)(ob.GetField <byte>("Team") ?? 0); CommandPost post = new CommandPost(position, team); if (team == Team.A) { redPost = post; } else { bluePost = post; } post.PhysicsBody.OnCollision += Post_OnCollision; objectComponent.NetworkInstantiate(post, "Client_CreateCommandPost", null, position.X, position.Y, position.Z, (byte)team); } } else { DashCMD.WriteWarning("[TDMGamemode] Current world does not have a proper gameobject setup! Falling back to default."); LoadFallbackGameObjects(); } base.OnStarted(); }