Example #1
0
        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();
        }
Example #2
0
        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.");
                }
            }
        }
Example #3
0
        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");
            }));
        }
Example #4
0
        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");
            }));
        }
Example #5
0
        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");
            }));
        }