public override void Alert() { Player p = Player.GetInstance(); string m = ""; switch (p.Level) { case 2: m = "You have survived my underlings well. Continue forward."; break; case 4: m = "You're still alive? Excellent..."; break; case 6: m = "Yes...Take another step forward to your doom."; break; case 8: m = "So close...Just a few more steps to your doom."; break; case 10: m = "Welcome to my lair. Prepare to die."; break; } if (m != "") { CommandPost.GetInstance().AddCommand(new BossProclamationCommand(m)); } }
protected override void OnStopped() { NetChannel.RemoveRemoteEvent("Client_GamemodeInfo"); NetChannel.RemoveRemoteEvent("Client_UpdateScores"); NetChannel.RemoveRemoteEvent("Client_IntelPickedUp"); NetChannel.RemoveRemoteEvent("Client_IntelDropped"); NetChannel.RemoveRemoteEvent("Client_IntelCaptured"); NetChannel.RemoveRemoteEvent("Client_IntelReturned"); objectComponent.RemoveInstantiationEvent("Client_CreateIntel"); objectComponent.RemoveInstantiationEvent("Client_CreateCommandPost"); redIntel = null; blueIntel = null; redPost = null; bluePost = null; TeamAScore = 0; TeamBScore = 0; ScoreCap = 3; OurPlayerHasIntel = false; intelAudioSource?.Dispose(); base.OnStopped(); }
private void CharacterController_OnCollision(object sender, PhysicsBodyComponent e) { if (this.intel == null) { Intel intel = e.GameObject as Intel; if (intel != null) { if (intel.RequestOwnership(this)) { DashCMD.WriteLine("[SPPlayer] Picked up the intel", ConsoleColor.Green); this.intel = intel; intel.IsIconVisible = false; } } } CommandPost commandPost = e.GameObject as CommandPost; if (commandPost != null) { if (commandPost.Team == Team) { Refresh(); if (intel != null) { intel.Return(); intel.IsIconVisible = true; intel = null; } } } }
private void Post_OnCollision(object sender, PhysicsBodyComponent e) { ServerMPPlayer player = e.GameObject as ServerMPPlayer; if (player != null) { CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost; if (post.Team == player.Team) { player.Refresh(); if (player.HasIntel) { CaptureIntel(player, player.Intel); } } } else if (e.GameObject is Intel intel) { if (intel.Holder == null) { CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost; if (post.Team != intel.Team) { CaptureIntel(intel.LastHolder as ServerMPPlayer, intel); } } } }
void LoadFallbackGameObjects() { Vector3 blueTeamOrigin = World.Terrain.Chunks[new IndexPosition(World.Terrain.Width - 1, 0, World.Terrain.Depth - 1)].Position; redIntel = new Intel(GetSpawnLocation(200, 200, Block.CUBE_SIZE * 1.5f), Team.A); blueIntel = new Intel(GetSpawnLocation(blueTeamOrigin.X - 200, blueTeamOrigin.Z - 200, Block.CUBE_SIZE * 1.5f), Team.B); redPost = new CommandPost(GetSpawnLocation(100, 100, Block.CUBE_SIZE * 3), Team.A); bluePost = new CommandPost(GetSpawnLocation(blueTeamOrigin.X - 75, blueTeamOrigin.Z - 75, Block.CUBE_SIZE * 3), Team.B); redIntel.OnPickedUp += Intel_OnPickedUp; redIntel.OnDropped += Intel_OnDropped; redIntel.OnReturned += Intel_OnReturned; blueIntel.OnPickedUp += Intel_OnPickedUp; blueIntel.OnDropped += Intel_OnDropped; blueIntel.OnReturned += Intel_OnReturned; redPost.PhysicsBody.OnCollision += Post_OnCollision; bluePost.PhysicsBody.OnCollision += Post_OnCollision; // Instantiate intels over network objectComponent.NetworkInstantiate(redIntel, "Client_CreateIntel", null, redIntel.Transform.Position.X, redIntel.Transform.Position.Y, redIntel.Transform.Position.Z, (byte)redIntel.Team); objectComponent.NetworkInstantiate(blueIntel, "Client_CreateIntel", null, blueIntel.Transform.Position.X, blueIntel.Transform.Position.Y, blueIntel.Transform.Position.Z, (byte)blueIntel.Team); objectComponent.NetworkInstantiate(redPost, "Client_CreateCommandPost", null, redPost.Transform.Position.X, redPost.Transform.Position.Y, redPost.Transform.Position.Z, (byte)redPost.Team); objectComponent.NetworkInstantiate(bluePost, "Client_CreateCommandPost", null, bluePost.Transform.Position.X, bluePost.Transform.Position.Y, bluePost.Transform.Position.Z, (byte)bluePost.Team); }
private void Post_OnCollision(object sender, PhysicsBodyComponent e) { ServerMPPlayer player = e.GameObject as ServerMPPlayer; if (player != null) { CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost; if (post.Team == player.Team) { player.Refresh(); } } }
protected override void OnStopped() { NetChannel.RemoveRemoteEvent("Client_GamemodeInfo"); NetChannel.RemoveRemoteEvent("Client_UpdateScores"); objectComponent.RemoveInstantiationEvent("Client_CreateCommandPost"); redPost = null; bluePost = null; TeamAScore = 0; TeamBScore = 0; ScoreCap = 100; base.OnStopped(); }
void LoadFallbackGameObjects() { Vector3 blueTeamOrigin = World.Terrain.Chunks[new IndexPosition(World.Terrain.Width - 1, 0, World.Terrain.Depth - 1)].Position; redPost = new CommandPost(GetSpawnLocation(100, 100, Block.CUBE_SIZE * 3), Team.A); bluePost = new CommandPost(GetSpawnLocation(blueTeamOrigin.X - 75, blueTeamOrigin.Z - 75, Block.CUBE_SIZE * 3), Team.B); redPost.PhysicsBody.OnCollision += Post_OnCollision; bluePost.PhysicsBody.OnCollision += Post_OnCollision; objectComponent.NetworkInstantiate(redPost, "Client_CreateCommandPost", null, redPost.Transform.Position.X, redPost.Transform.Position.Y, redPost.Transform.Position.Z, (byte)redPost.Team); objectComponent.NetworkInstantiate(bluePost, "Client_CreateCommandPost", null, bluePost.Transform.Position.X, bluePost.Transform.Position.Y, bluePost.Transform.Position.Z, (byte)bluePost.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(); }
public SPWorld(MasterRenderer renderer) : base(renderer) { WorldDescription desc = LoadFromFile(Program.GetConfigString("Singleplayer/world")); spawnPos = new Vector3(100, 400, 100); var commandposts = desc.GetObjectsByTag("CommandPost"); foreach (WorldObjectDescription ob in commandposts) { Vector3 position = ob.GetVector3("Position"); Team team = (Team)(ob.GetField <byte>("Team") ?? 0); CommandPost commandPost = new CommandPost(position, team); AddGameObject(commandPost); if (team == Team.A) { spawnPos = position; } } var intels = desc.GetObjectsByTag("Intel"); foreach (WorldObjectDescription ob in intels) { Vector3 position = ob.GetVector3("Position"); Team team = (Team)(ob.GetField <byte>("Team") ?? 0); Intel editorIntel = new Intel(position, team); AddGameObject(editorIntel); } Player = new SPPlayer(Renderer, this, Camera.Active, spawnPos, Team.A); AddGameObject(Player); hud = new HUD(Renderer); hud.Player = Player; hud.ShowCharacterInformation = true; hud.Enable(); Player.AttachCamera(); }
INetCreatable I_CreateCommandPost(ushort id, bool isAppOwner, NetBuffer data) { // Read the packet float x = data.ReadFloat(); float y = data.ReadFloat(); float z = data.ReadFloat(); Team team = (Team)data.ReadByte(); CommandPost post = new CommandPost(new Vector3(x, y, z), team); if (team == Team.A) { redPost = post; } else { bluePost = post; } return(post); }
protected override void OnStarted() { Server.OnUserDisconnected += Server_OnUserDisconnected; var commandposts = World.Description.GetObjectsByTag("CommandPost"); var intels = World.Description.GetObjectsByTag("Intel"); if (commandposts.Count == 2 && intels.Count == 2) { // Load intel foreach (WorldObjectDescription ob in intels) { Vector3 position = ob.GetVector3("Position"); Team team = (Team)(ob.GetField <byte>("Team") ?? 0); Intel intel = new Intel(position, team); if (team == Team.A) { redIntel = intel; } else { blueIntel = intel; } intel.OnPickedUp += Intel_OnPickedUp; intel.OnDropped += Intel_OnDropped; intel.OnReturned += Intel_OnReturned; objectComponent.NetworkInstantiate(intel, "Client_CreateIntel", null, position.X, position.Y, position.Z, (byte)team); } // 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("[CTFGamemode] Current world does not have a proper gameobject setup! Falling back to default."); LoadFallbackGameObjects(); } base.OnStarted(); }
void FixedUpdate() { int layerMask = LayerMask.GetMask(mask, "Ground"); if (!hasHit) { RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, speed, layerMask)) { hasHit = true; transform.Translate(transform.forward * hit.distance, Space.World); Rigidbody rb = hit.transform.root.GetComponent <Rigidbody>(); if (rb != null) { rb.AddForceAtPosition(transform.forward * force, hit.point, ForceMode.Impulse); } Enemy enemy = hit.transform.root.GetComponentInChildren <Enemy>(); if (enemy != null) { enemy.DeliverDamage(damage, shooter); if (enemy.HasShield() && enemy.GetComponent <ActorCommons>().HasShield()) { hasHit = false; Vector3 reflected = Vector3.Reflect(transform.forward, hit.normal); transform.rotation = Quaternion.LookRotation(reflected, Vector3.up); transform.Translate(transform.forward * (speed - hit.distance), Space.World); } else { if (turrFrom != null) { // Vampirism works only on health, not shields turrFrom.ConfirmHit(); } } } else if (hit.transform.tag == "Player") { CommandPost cp = hit.transform.root.GetComponent <CommandPost>(); if (cp != null) { cp.DeliverDamage(damage); } else { hit.transform.root.GetComponent <Turret>().DeliverDamage(damage); } } GameObject spks = Instantiate(sparks, hit.point, Quaternion.identity); if (shooter == 1) { if (isFireworks) { spks.transform.localScale *= 3.0f; } } } else { transform.Translate(transform.forward * speed, Space.World); } if (hasHit) { transform.GetChild(0).gameObject.SetActive(false); } } }