async void tagged_runner_handler([FromSource] Player source, int runnerServerId) { log("message from source: " + source.Name + " handle: " + source.Handle + " tagged: " + runnerServerId + " runner: " + runner.Name); //avoid tag-backs if (isRecentlyTagged) { return; } if (runnerServerId < 1) { TriggerClientEvent("sth:new_runner", runner.player.Handle); log($"^4Got invalid runnerServerId: {runnerServerId} in tagged_runner_handler from player {source.Name}."); return; } if (runnerServerId != int.Parse(runner.player.Handle)) { TriggerClientEvent("sth:new_runner", runner.player.Handle); log($"^4Player {source.Name} sent tagged runner with serverid {runnerServerId} but current runner's server id is {runner.player.Handle}."); return; } isRecentlyTagged = true; //assign new runner log("new runner serverid: " + source + " " + source.Name); runner = new SthvPlayer(source); log("new runner: " + runner.Name); TriggerClientEvent("sthv:no_tagback_time_ms", noTagbackTimeMS); await Delay(noTagbackTimeMS); isRecentlyTagged = false; Server.refreshscoreboard(); }
void runner_not_in_car_too_long([FromSource] Player source) { //checks if (source.Handle != runner.player.Handle) { log("Player " + source.Name + " " + source.Handle + " triggered sth:player_not_in_car_too_long but isn't runner:" + runner.player.Handle + ". Exceptional."); source.TriggerEvent("sth:new_runner", runner.player.Handle); return; } else //assign new runner { var potential_runners = sthvLobbyManager.GetPlayersInTeam(THunter); if (potential_runners.Count > 0) //usually means everyones dead and gamemode is about to end. { log("Runner should be removed for being out of car too long but are no hunters to make runners."); var new_runner_index = rand.Next(0, potential_runners.Count); runner = potential_runners[new_runner_index]; Server.SendChatMessage("Inverse Tag", $"Runner " + source.Name + " was not in a car for too long. " + runner.Name + " was randomly chosen as next runner."); } } }
override public void CreateEvents() { AddTimeEvent(0, new Action(() => { Tick += runnerHintHandler; if (GamemodeConfig.huntNextMapIndex > 0) { currentmapid = GamemodeConfig.huntNextMapIndex; } else { //pick random playarea currentmapid = rand.Next(0, Shared.sthvMaps.Maps.Length); } Server.currentMap = Shared.sthvMaps.Maps[currentmapid]; map = Shared.sthvMaps.Maps[currentmapid]; TriggerClientEvent("sthv:sendChosenMap", currentmapid); log("current map index: " + currentmapid); //Assigning teams. //Framework assures all dead players are ready for next hunt. Non-ready players could be loading, not authenticated, etc. var readyPlayers = sthvLobbyManager.GetPlayersOfState(playerState.ready); log(readyPlayers.Count + " ready players in this game."); //picking and assigning runner int runnerindex = rand.Next(0, readyPlayers.Count - 1); runner = readyPlayers[runnerindex]; log("RUNNER SET TO " + runner.player.Handle + " and has teamname: " + runner.teamname); //assigning everyone else hunter team foreach (var p in readyPlayers) { if (p.teamname != TRunner) { p.teamname = THunter; } } //announce teams to clients log($"^2runner handle is now: {runner.player.Handle}^7"); TriggerClientEvent("sth:updateRunnerHandle", int.Parse(runner.player.Handle)); Server.SendChatMessage("^2HUNT", $"Runner is:{runner.Name}", 255, 255, 255); Server.SendToastNotif($"InverseTag starting with runner: {runner.Name}", 3000); //spawn runner runner.Spawn(map.RunnerSpawn, true, playerState.alive); runner.player.TriggerEvent("sthv:spectate", false); Server.refreshscoreboard(); })); AddTimeEvent(5, new Action(async() => { log("spawning hunters after 5 seconds."); var hunters = sthvLobbyManager.GetPlayersInTeam(THunter); foreach (var h in hunters) { h.Spawn(map.HunterSpawn, false, playerState.alive); } await Delay(1000); if (hunters.Count > 0) { hunters[0].player.TriggerEvent("sthv:spawnhuntercars", currentmapid); } TriggerClientEvent("sth:new_runner", runner.player.Handle); log("setting runner to: " + runner.player.Handle); })); AddFinalizerEvent(new Action(() => { TriggerClientEvent("sth:updateRunnerHandle", -1); TriggerClientEvent("removeveh"); })); }
public override void CreateEvents() { AddTimeEvent(0, new Action(async() => { Tick += runnerHintHandler; Random rand = new Random(); if (GamemodeConfig.huntNextMapIndex > 0) { currentmapid = GamemodeConfig.huntNextMapIndex; } else { //pick random playarea currentmapid = rand.Next(0, Shared.sthvMaps.Maps.Length); } Server.currentMap = Shared.sthvMaps.Maps[currentmapid]; map = Shared.sthvMaps.Maps[currentmapid]; TriggerClientEvent("sthv:sendChosenMap", currentmapid); log("current map index: " + currentmapid); //Assigning teams. //Framework assures all dead players are ready for next hunt. Non-ready players could be loading, not authenticated, etc. var readyPlayers = sthvLobbyManager.GetPlayersOfState(playerState.ready); log(readyPlayers.Count + " ready players in this hunt."); //picking and assigning runner int runnerindex = rand.Next(0, readyPlayers.Count); log("picked runner index: " + runnerindex); readyPlayers[runnerindex].teamname = TRunner; //assigning everyone else hunter team foreach (var p in readyPlayers) { if (p.teamname != TRunner) { p.teamname = THunter; } } runner = sthvLobbyManager.GetPlayersInTeam(TRunner)[0]; if (sthvLobbyManager.GetPlayersInTeam("runner").Count != 1) { throw new Exception("Unexpected number of runners were assigned in ClassicHunt"); } runnerServerId = runner.player.Handle; log($"^2runner handle is now: {runnerServerId}^7"); TriggerClientEvent("sth:updateRunnerHandle", int.Parse(runnerServerId)); Server.SendChatMessage("^2HUNT", $"Runner is:{runner.Name}", 255, 255, 255); Server.SendToastNotif($"Hunt starting with runner: {runner.Name}", 3000); await Delay(100); #if DEBUG runner.Spawn(map.HunterSpawn, true, playerState.alive); #else runner.Spawn(map.RunnerSpawn, true, playerState.alive); #endif //offer hunters to opt into runner ? TriggerClientEvent("removeveh"); await Delay(3000); runner.player.TriggerEvent("sthv:spectate", false); Server.refreshscoreboard(); })); AddTimeEvent(5, new Action(async() => { log("spawning hunters after 5 seconds."); var hunters = sthvLobbyManager.GetPlayersInTeam(THunter); foreach (var h in hunters) { h.Spawn(map.HunterSpawn, false, playerState.alive); } await Delay(1000); if (hunters.Count > 0) { hunters[0].player.TriggerEvent("sthv:spawnhuntercars", currentmapid); } })); AddTimeEvent(30, new Action(() => { log("Giving weapons after 30 seconds"); runner.player.TriggerEvent("sth:updateRunnerHandle", runnerServerId); //incase runner has wrong clothes TriggerClientEvent("sth:setguns", true); TriggerClientEvent("sth:setcops", GamemodeConfig.isPoliceEnabled); Server.SendChatMessage("^5HUNT", "You now have guns"); Server.SendToastNotif("You now have weapons!"); })); AddFinalizerEvent(new Action(() => { TriggerClientEvent("sth:updateRunnerHandle", -1); foreach (var p in sthvLobbyManager.GetPlayersOfState(playerState.alive, playerState.ready)) { p.Spawn(map.HunterSpawn, false, playerState.ready); } TriggerClientEvent("removeveh"); })); }
public override void CreateEvents() { AddTimeEvent(0, new Action(async() => { Tick += CheckpointHandler; UncapturedCheckpoints.AddRange(checkpointPositions); var cpoint_index = rand.Next(0, UncapturedCheckpoints.Count); var pos = UncapturedCheckpoints[cpoint_index]; TriggerClientEvent("createcheckpoint", cpoint_index, check_radius, pos); //Assigning teams. //Framework assures all dead players are ready for next hunt. Non-ready players could be loading, not authenticated, etc. var readyPlayers = sthvLobbyManager.GetPlayersOfState(playerState.ready); log(readyPlayers.Count + " ready players in this hunt."); //picking and assigning runner int runnerindex = rand.Next(0, readyPlayers.Count); Debug.WriteLine("Choosing runner index: " + runnerindex, "readyPlayers size: " + readyPlayers.Count); readyPlayers[runnerindex].teamname = TRunner; //assigning everyone else hunter team foreach (var p in readyPlayers) { if (p.teamname != TRunner) { p.teamname = THunter; } } //BaseGamemode picks runner already. runner = sthvLobbyManager.GetPlayersInTeam(TRunner)[0]; if (sthvLobbyManager.GetPlayersInTeam("runner").Count != 1) { throw new Exception("Unexpected number of runners were assigned in ClassicHunt"); } runnerServerId = runner.player.Handle; log($"^2runner handle is now: {runnerServerId}^7"); TriggerClientEvent("sth:updateRunnerHandle", int.Parse(runnerServerId)); Server.SendChatMessage("^CheckpointHunt", $"Runner is:{runner.Name}", 255, 255, 255); Server.SendToastNotif($"CheckpointHunt starting with runner: {runner.Name}", 3000); await Delay(100); #if DEBUG runner.Spawn(map.HunterSpawn, true, playerState.alive); #else runner.Spawn(map.RunnerSpawn, true, playerState.alive); #endif //offer hunters to opt into runner ? TriggerClientEvent("removeveh"); await Delay(3000); runner.player.TriggerEvent("sthv:spawnhuntercars", currentmapid); runner.player.TriggerEvent("sthv:spectate", false); Server.refreshscoreboard(); })); AddTimeEvent(5, new Action(async() => { log("spawning hunters after 5 seconds."); var hunters = sthvLobbyManager.GetPlayersInTeam(THunter); foreach (var h in hunters) { h.Spawn(map.HunterSpawn, false, playerState.alive); } await Delay(1000); if (hunters.Count > 0) { hunters[0].player.TriggerEvent("sthv:spawnhuntercars", currentmapid); } #if DEBUG TriggerClientEvent("sth:setguns", true); #endif })); AddTimeEvent(30, new Action(() => { log("Giving weapons after 30 seconds"); runner.player.TriggerEvent("sth:updateRunnerHandle", runnerServerId); //incase runner has wrong clothes TriggerClientEvent("sth:setguns", true); TriggerClientEvent("sth:setcops", GamemodeConfig.isPoliceEnabled); Server.SendChatMessage("^5HUNT", "You now have guns"); Server.SendToastNotif("You now have weapons!"); Server.SendToastNotif("You now have weapons!"); })); AddFinalizerEvent(new Action(() => { TriggerClientEvent("sth:updateRunnerHandle", -1); foreach (var p in sthvLobbyManager.GetPlayersOfState(playerState.alive, playerState.ready)) { p.Spawn(map.HunterSpawn, true, playerState.ready); } UncapturedCheckpoints.Clear(); TriggerClientEvent("removeveh"); })); }