Beispiel #1
0
 public static void UpdateGameStatusBanner(string message, IemGameBase.IemGame game)
 {
     foreach (IemGameBase.IemPlayer iemPlayer in game.Players.Values)
     {
         BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
         IemUI.CreateGameStatusBanner(player, message);
     }
 }
Beispiel #2
0
            public void ShowGameStatus()
            {
                string status = "";

                foreach (IemGameBase.IemTeam iemTeam in Teams.Values)
                {
                    status += iemTeam.Name + " (" + GetCountOfLivingPlayers(iemTeam) + ") ";
                }
                IemUI.UpdateGameStatusBanner(status, this);
            }
Beispiel #3
0
                public new void Exit(IemStateManager.StateManager sm)
                {
                    TargetPracticeStateManager gsm = (TargetPracticeStateManager)sm;

                    CuiHelper.DestroyUi(gsm.eg.player, "CreateFadeoutBanner");
                    foreach (IemGameBase.IemPlayer iemPlayer in gsm.eg.Players.Values)
                    {
                        BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
                        IemUI.CreateGameBanner(player, "");
                    }
                }
Beispiel #4
0
            public override IemUtils.IIemTeamPlayer AddPlayer(BasePlayer player)
            {
                if (!Players.ContainsKey(player.UserIDString))
                {
                    Players[player.UserIDString] = new IemEmbankmentPlayer(player, this);
                }
                IemUI.ShowTeamUiForPlayer(player, this);
                IemUtils.TeleportPlayerPosition(player, teamLobby.location);

                return((IemUtils.IIemTeamPlayer)Players[player.UserIDString]);
            }
Beispiel #5
0
            public override IemGameBase.IemGame CreateGame(BasePlayer player)
            {
                var newGame = new IemGameEmbankmentGame();

                newGame.Players[player.UserIDString] = new IemEmbankmentPlayer(player, newGame);
                IemUI.ShowTeamUiForPlayer(player, newGame);
                if (!newGame.CanStart())
                {
                    IemUI.CreateGameBanner(player, newGame.CanStartCriteria());
                }
                return(newGame);
            }
Beispiel #6
0
            public void ShowGameTimer(int countdown)
            {
                string status = "";

                foreach (IemGameBase.IemTeam iemTeam in Teams.Values)
                {
                    foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                    {
                        BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
                        IemUI.CreateGameTimer(player, countdown);
                    }
                }
            }
Beispiel #7
0
                public new void Enter(IemStateManager.StateManager sm)
                {
                    TargetPracticeStateManager gsm = (TargetPracticeStateManager)sm;

                    gsm.partition = new IemObjectPlacement.CopyPastePlacement(
                        "tp_v1_" + gsm.eg.difficultyLevel, gsm.location);

                    ResearchTable researchtable = IemUtils.FindComponentNearestToLocation <ResearchTable>(
                        gsm.location, 50);
                    Vector3 playerstart = researchtable.transform.position;

                    researchtable.Kill(BaseNetworkable.DestroyMode.None);
                    RepairBench repairbench = IemUtils.FindComponentNearestToLocation <RepairBench>(
                        gsm.location, 50);
                    Vector3 playerlook = repairbench.transform.position;

                    repairbench.Kill(BaseNetworkable.DestroyMode.None);

                    me.Puts("player start location is " + playerstart);
                    me.Puts("player look location is " + playerlook);
                    me.Puts("swutcged " + IemUtils.SwitchTypesToTarget <BaseOven>(gsm.location));

                    gsm.eg.player.inventory.Strip();

                    EntitiesTakingDamage += gsm.eg.PlayerImmortal;

                    IemUtils.MovePlayerToTeamLocation(gsm.eg.player,
                                                      playerstart);

                    Vector3    relativePos = playerstart - playerlook;
                    Quaternion rotation    = Quaternion.LookRotation(relativePos);

                    gsm.eg.player.transform.rotation = rotation;

                    IemUtils.SetMetabolismValues(gsm.eg.player);
                    IemUtils.ClearInventory(gsm.eg.player);

                    IemUI.CreateGameBanner(gsm.eg.player, "GAME LOBBY");

                    IemUtils.PlaySound(gsm.eg.player);

                    gsm.eg.returnZone = new IemUtils.ReturnZone(playerstart, gsm.eg.player);

                    IemUI.Confirm(gsm.eg.player, $"Weclome to target practice\n" +
                                  $"Knock down the targets to proceed to the next level.\n" +
                                  $"each level timer will start when you fire the first shot", "Start Shootin'",
                                  gsm.proceedAction);

                    gsm.eg.targets = IemUtils.FindComponentsNearToLocation <ReactiveTarget>(gsm.location, 50);
                    me.Puts("targets count is " + gsm.eg.targets.Count());
                }
Beispiel #8
0
                public new void Enter(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;

                    resultsTimer = IemUI.ShowResultsUiFor(
                        gsm.eg.Players.Select(d => d.Value).ToList(), gsm.eg, 8);

                    gsm.eg.EndGame();

                    completeTimer = me.timer.Once(10f, () =>
                    {
                        gsm.ChangeState(EmbankStateManager.CleanUp.Instance);
                    });
                }
Beispiel #9
0
                public new void Exit(IemStateManager.StateManager sm)
                {
                    TargetPracticeStateManager gsm = (TargetPracticeStateManager)sm;

                    RunWeaponFired -= gsm.eg.TPWeaponFired;

                    IemUI.CreateGameBanner(gsm.eg.player, "");

                    TPGameLevel gamelevel = gsm.eg.gamelevels[gsm.eg.level];

                    EntitiesTakingDamage -= gsm.eg.PlayerImmortal;
                    EntitiesTakingDamage -= gsm.eg.ScorePlayerHit;

                    IemUI.CreateGameBanner2(gsm.eg.player, "");


                    CuiHelper.DestroyUi(gsm.eg.player, "CreateFadeoutBanner");
                    IemUtils.GameTimer.Destroy(gsm.eg.player);
                }
Beispiel #10
0
                public new void Exit(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;

                    IemUI.UpdateGameStatusBanner("", gsm.eg);
                    IemUI.UpdateGameBanner("", gsm.eg);

                    // set the player status
                    PlayerDying -= gsm.eg.PlayerDied;
                    // log the score
                    PlayerDying -= gsm.eg.ScorePlayerKill;

                    // any damage is fatal
                    EntitiesTakingDamage -= gsm.eg.SuddenDeath;
                    // player can't be wounded in sudden death
                    EntitiesBeingWounded -= gsm.eg.SuddenDeathWounded;

                    suddenDeathTimer?.Destroy();
                    updatesTimer?.Destroy();
                }
Beispiel #11
0
                //private DateTime startTime = DateTime.UtcNow;
                //TimeSpan breakDuration = TimeSpan.FromSeconds(15);

                public new void Enter(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;

                    // change the player status
                    PlayerDying += gsm.eg.PlayerDied;
                    //log the score
                    PlayerDying += gsm.eg.ScorePlayerKill;

                    // any damage is fatal
                    EntitiesTakingDamage += gsm.eg.SuddenDeath;
                    // player can't be wounded in sudden death
                    EntitiesBeingWounded += gsm.eg.SuddenDeathWounded;

                    foreach (IemGameBase.IemTeam iemTeam in gsm.eg.Teams.Values)
                    {
                        foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                        {
                            BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);

                            IemUI.ShowGameTimer(player, gsm.eg.PartitionWait, "Sudden Death: ");
                        }
                    }


                    suddenDeathTimer = me.timer.Once(
                        gsm.eg.SuddenDeathPhaseWait, () =>
                    {
                        gsm.ChangeState(EmbankStateManager.GameComplete.Instance);
                    });
                    //}

                    IemUI.UpdateGameBanner("Sudden Death - all hits are fatal!!!", gsm.eg);


                    countdown    = gsm.eg.SuddenDeathPhaseWait;
                    updatesTimer = me.timer.Every(1f, () =>
                    {
                        gsm.Update();
                    });
                }
Beispiel #12
0
                //private DateTime startTime = DateTime.UtcNow;
                //TimeSpan breakDuration = TimeSpan.FromSeconds(15);

                public new void Enter(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;

                    me.Subscribe(nameof(OnRunPlayerMetabolism));

                    // nullify any damage
                    EntitiesTakingDamage += gsm.eg.PlayerImmortal;

                    foreach (IemGameBase.IemTeam iemTeam in gsm.eg.Teams.Values)
                    {
                        foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                        {
                            BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
                            //player.EndSleeping();

                            me.Kits?.Call("GiveKit", player, "embank_v1");
                            player.inventory.SendSnapshot();
                            IemUtils.PlaySound(player);
                            IemUI.CreateGameBanner(player, "Zone is Partitioned!");

                            IemUI.ShowGameTimer(player, gsm.eg.PartitionWait, "partion removed in: ");
                        }
                    }


                    updatesTimer = me.timer.Every(1f, () =>
                    {
                        gsm.Update();
                    });

                    countdown = gsm.eg.PartitionWait;

                    partitionTimer = me.timer.Once(
                        gsm.eg.PartitionWait, () =>
                    {
                        gsm.ChangeState(MainPhase.Instance);
                    });
                }
            void PlayerEnteredTeamZone(string ZoneID, BasePlayer player)
            {
                if (ZoneID.StartsWith("zone_team_"))
                {
                    //OnPlayerEnterTeamArea(player, GetTeamFromZone(ZoneID));
                    me.Puts("player is " + player.displayName + " has entered zone " + ZoneID);
                    var team = GetTeamFromZone(ZoneID);

                    if (teamGame.Players.ContainsKey(player.UserIDString))
                    {
                        var iemplayer = teamGame.Players[player.UserIDString];

                        if (iemplayer != null)
                        {
                            me.Puts("iemplayer is " + iemplayer.Name);
                        }


                        if (team == null)
                        {
                            me.Puts("team is null");
                        }

                        if (team != null && iemplayer != null)
                        {
                            team.AddPlayer((IemUtils.IIemTeamPlayer)iemplayer);
                            IemUI.UpdateUiForPlayers(teamGame);
                            me.Puts("can game start " + teamGame.CanStart());
                            if (teamGame.CanStart())
                            {
                                teamGame.StartGame();
                            }
                        }
                    }
                }
            }
Beispiel #14
0
                public new void Enter(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;

                    foreach (var partition in gsm.partitions)
                    {
                        partition?.Remove();
                    }
                    foreach (IemGameBase.IemTeam iemTeam in gsm.eg.Teams.Values)
                    {
                        foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                        {
                            BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);

                            IemUI.CreateGameBanner(player, "Main Phase, partition is removed!");
                            IemUI.ShowGameTimer(player, gsm.eg.PartitionWait, "Main Phase: ");
                        }
                    }

                    // change the player status
                    PlayerDying += gsm.eg.PlayerDied;

                    // log the score
                    PlayerDying += gsm.eg.ScorePlayerKill;

                    gameTimer = me.timer.Once(gsm.eg.MainPhaseWait, () =>
                    {
                        gsm.ChangeState(SuddenDeath.Instance);
                    });

                    countdown    = gsm.eg.MainPhaseWait;
                    updatesTimer = me.timer.Every(1f, () =>
                    {
                        gsm.Update();
                    });
                }
Beispiel #15
0
            public void GoNextLevel()
            {
                IemUI.CreateFadeoutBanner(player, "level complete");
                gamelevels[level].End();

                IemUI.CreateRightFadeout(player, "shots fired " + gamelevels[level].accuracy.ShotsFired
                                         + "\nshots hit " + gamelevels[level].accuracy.ShotsHit + "\naccuracy "
                                         + gamelevels[level].accuracy.GetAccuracyAsString());

                //me.Puts("level = " + level);
                //me.Puts("gamelevels.Count = " + gamelevels.Count);

                // level is indexed at 1 when game is in progress, 0 is pregame
                if (level == (gamelevels.Count - 1))
                {
                    //me.Puts("settig game complete");
                    gsm?.ChangeState(TargetPracticeStateManager.GameComplete.Instance);
                }
                else
                {
                    // me.Puts("going to next level");
                    gsm?.ChangeState(TargetPracticeStateManager.GameRunning.Instance);
                }
            }
Beispiel #16
0
                public new void Enter(IemStateManager.StateManager sm)
                {
                    EmbankStateManager gsm = (EmbankStateManager)sm;


                    EntitiesTakingDamage += gsm.eg.PlayerImmortal;

                    me.rust.RunServerCommand("env.time", "12");
                    for (int i = 0; i <= gsm.blockshigh; i++)
                    {
                        gsm.partitions.Add(new IemObjectPlacement.CopyPastePlacement(
                                               "base_partition_wall", new Vector3(-500, gsm.startheight + (gsm.wallheight * i), 10)));
                    }

                    // gsm.CreateGameBanner("GAME LOBBY");
                    gameLobbyWaitTimer = me.timer.Once(gsm.eg.GameLobbyWait, () =>
                    {
                        gsm.ChangeState(PartitionedPeriod.Instance);
                    });
                    // gsm.CreateGameBanner("GAME LOBBY");
                    gameLobbyBannerTimer = me.timer.Once(gsm.eg.GameLobbyWait - 3, () =>
                    {
                        foreach (IemGameBase.IemTeam iemTeam in gsm.eg.Teams.Values)
                        {
                            foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                            {
                                BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
                                CuiHelper.DestroyUi(player, "ShowIntroOverlay");
                            }
                        }
                    });

                    foreach (IemGameBase.IemTeam iemTeam in gsm.eg.Teams.Values)
                    {
                        foreach (IemGameBase.IemPlayer iemPlayer in iemTeam.Players.Values)
                        {
                            BasePlayer player = IemUtils.FindPlayerByID(iemPlayer.PlayerId);
                            IemUI.ShowGameTimer(player, gsm.eg.GameLobbyWait - 3, "starting in: ");

                            if (player.IsConnected())
                            {
                                if (player.IsDead())
                                {
                                    IemUtils.GLog("player is dead");
                                    player.Respawn();
                                }
                            }

                            player.EndSleeping();
                            gsm.eg.MovePlayerToTeamLocation(player, iemTeam.Location);

                            IemUtils.SetMetabolismValues(player);
                            IemUtils.ClearInventory(player);

                            IemUI.CreateGameBanner(player, "GAME LOBBY");
                            IemUI.ShowIntroOverlay(player,
                                                   $"The Game is Embankment\n" +
                                                   $"it is in 3 phases.\n" +
                                                   $"1) <color=green>The paritioned period</color> ({gsm.eg.PartitionWait}) a time for crafting and building\n" +
                                                   $"a wall separates the teams. Players are invulnerable\n" +
                                                   $"Once the first phase is finished, the wall comes down\n" +
                                                   $"2)  <color=blue>The main phase.</color> Players have 1 life. Attack and defend.\n" +
                                                   $"after {gsm.eg.MainPhaseWait} the games enters....\n" +
                                                   $"3) <color=red>Sudden Death</color>. All melle, weapon and explosion damage\n" +
                                                   $"is fatal. This period lasts for {gsm.eg.SuddenDeathPhaseWait}\n" +
                                                   $"if players remain after sudden death. The Winning team is the one\n" +
                                                   $"with the most total health points remaining.\n");

                            IemUtils.PlaySound(player);
                        }
                    }
                }
Beispiel #17
0
 public void wasConfirmed()
 {
     IemUI.CreateFadeoutBanner(player, "playing level again");
     gsm?.ChangeState(TargetPracticeStateManager.GameRunning.Instance);
 }
Beispiel #18
0
 public void wasCancelled()
 {
     me.Puts("was cancelled");
     IemUI.CreateFadeoutBanner(player, "cancelling");
     CancelGame();
 }
Beispiel #19
0
 public void playAgain()
 {
     //me.Puts("playing again");
     IemUI.CreateFadeoutBanner(player, "playing again");
     gsm?.ChangeState(TargetPracticeStateManager.GameComplete.Instance);
 }
Beispiel #20
0
 public void backToTheMap()
 {
     IemUI.CreateFadeoutBanner(player, "back to map");
     gsm?.ChangeState(TargetPracticeStateManager.CleanUp.Instance);
 }
Beispiel #21
0
 void Init()
 {
     iemUI = this;
     me    = this;
     IemUtils.LogL("IemUI: Init complete");
 }
Beispiel #22
0
                public new void Enter(IemStateManager.StateManager sm)
                {
                    TargetPracticeStateManager gsm = (TargetPracticeStateManager)sm;

                    // this is a fresh game at pregame
                    if (gsm.eg.level == -1)
                    {
                        gsm.eg.level++;
                    }
                    else
                    {
                        // level has already been started, and this is a rerun of the level
                        // reset level vals
                        if (gsm.eg.gamelevels[gsm.eg.level].Started &&
                            !gsm.eg.gamelevels[gsm.eg.level].Ended)
                        {
                            gsm.eg.gamelevels[gsm.eg.level].Reset();
                        }
                        else
                        {
                            // this is a new level
                            gsm.eg.level++;
                        }
                    }

                    // get the properties of this game level
                    TPGameLevel gamelevel = gsm.eg.gamelevels[gsm.eg.level];

                    EntitiesTakingDamage += gsm.eg.PlayerImmortal;

                    // reset the player score for this level
                    gsm.eg.iemPlayer.Score = 0;


                    IemUI.CreateGameBanner(gsm.eg.player, "Level " + (gsm.eg.level + 1) +
                                           " - targets remaining " + (gamelevel.Targets - gsm.eg.iemPlayer.Score));

                    IemUtils.GameTimer.CreateTimerPaused(gsm.eg.player, gamelevel.Timer, () =>
                    {
                        if (!gsm.eg.CheckLevelComplete())
                        {
                            IemUI.ConfirmCancel(gsm.eg.player,
                                                "Level was not completed!\nYou can play this level again, or return to the map", "Play Again", "Quit",
                                                gsm.eg.wasConfirmed,
                                                gsm.eg.wasCancelled);
                        }
                    });

                    // log the score
                    EntitiesTakingDamage += gsm.eg.ScorePlayerHit;

                    // refill magazines in weapons on belt container
                    IemUtils.RefillBeltMagazines(gsm.eg.player);

                    foreach (var target in gsm.eg.targets)
                    {
                        if (target != null)
                        {
                            target.ResetTarget();
                            var health = knockdownHealth.GetValue(target);
                            knockdownHealth.SetValue(target, 100f);
                        }
                    }

                    RunWeaponFired += gsm.eg.TPWeaponFired;
                    IemUtils.PlaySound(gsm.eg.player);
                }
Beispiel #23
0
            public void ScorePlayerHit(BaseCombatEntity entity, HitInfo hitinfo)
            {
                try
                {
                    if (entity is ReactiveTarget && hitinfo.Initiator is BasePlayer)
                    {
                        var target = (ReactiveTarget)entity;

                        if (!targets.Contains(target))
                        {
                            me.Puts("is not game target");
                            return;
                        }

                        var attacker = (BasePlayer)hitinfo.Initiator;
                        if (attacker.UserIDString != iemPlayer.AsBasePlayer().UserIDString)
                        {
                            me.Puts("is not game player");
                            return;
                        }

                        if (entity == null || attacker == null)
                        {
                            return;
                        }

                        // TODO resolve problem that the ReactiveTarget is squashing the HitInfo
                        //me.Puts("hitinfo.HitBone " + hitinfo.HitBone);
                        //me.Puts("target_collider_bullseye " + StringPool.Get("target_collider_bullseye"));
                        if (hitinfo.HitBone == StringPool.Get("target_collider_bullseye"))
                        {
                            IemUtils.DrawChatMessage(attacker, target, "Bullseye!!!!");
                        }

                        // hits on reactive targets tigger OnEntityTakeDamage twice
                        // this selects for the one created by on shared hit in ReactiveTarget
                        if (hitinfo.damageTypes.Total() != 1f)
                        {
                            return;
                        }

                        //this is the amount of damage done to the target by the hit
                        var health = knockdownHealth.GetValue(target);

                        TPGameLevel gamelevel = gamelevels[level];

                        if (!gamelevel.Started)
                        {
                            me.Puts("starting gamelevel " + (level));
                            gamelevel.Start();
                            IemUtils.GameTimer.Start(player);
                        }
                        else
                        {
                            me.Puts("gamelevel " + (level) + " is already started at " + gamelevel.StartTime);
                        }

                        gamelevel.accuracy.ShotsHit += 1;

                        if (target.IsKnockedDown())
                        {
                            iemPlayer.Score += 1;
                            IemUI.CreateGameBanner(attacker, "Level " + (level + 1) +
                                                   " - targets remaining " + (gamelevel.Targets - iemPlayer.Score));

                            if (CheckLevelComplete())
                            {
                                GoNextLevel();
                            }
                            else
                            {
                                target.CancelInvoke("ResetTarget");
                                target.health = target.MaxHealth();
                                target.SendNetworkUpdate();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    me.Puts("exception " + ex);
                }
            }