Exemple #1
0
            public void ScorePlayerKill(BasePlayer victim, HitInfo hitInfo)
            {
                IemUtils.GLog("player died in game phase, calculate new score");

                if (victim.ToPlayer() != null)
                {
                    IemUtils.GLog("player died - hook called");
                    BasePlayer player = victim.ToPlayer();

                    if (hitInfo?.Initiator != null &&
                        hitInfo?.Initiator?.ToPlayer() != null &&
                        victim.ToPlayer() != null)
                    {
                        IemUtils.GLog("found player hit, found player scoring kill");
                        //       PlayerDying(player, info);
                        IemUtils.IIemTeamPlayer iemTeamPlayer = GetIemPlayerById(victim.UserIDString);
                        if (iemTeamPlayer != null)
                        {
                            IemUtils.GLog("incrementing score");
                            GetIemPlayerById(hitInfo?.Initiator?.ToPlayer().UserIDString).Score      += 1;
                            GetIemPlayerById(hitInfo?.Initiator?.ToPlayer().UserIDString).Team.Score += 1;
                        }
                    }
                }
            }
Exemple #2
0
 public EmbankStateManager(IemStateManager.IStateMachine initialState,
                           IemGameEmbankmentGame newEg)
     : base(initialState)
 {
     IemUtils.GLog("eg is " + newEg);
     eg = newEg;
 }
Exemple #3
0
            public void SuddenDeath(BaseCombatEntity entity, HitInfo hitInfo)
            {
                if (entity as BasePlayer == null || hitInfo == null)
                {
                    return;
                }

                if (entity.ToPlayer() != null)
                {
                    IemUtils.DLog("player died");
                    BasePlayer player = entity.ToPlayer();

                    if (GetIemPlayerById(player.UserIDString) != null)
                    {
                        IemUtils.GLog("scaling damage");
                        hitInfo.damageTypes.Scale(DamageType.Bullet, 1000f);
                        hitInfo.damageTypes.Scale(DamageType.Arrow, 1000f);
                        hitInfo.damageTypes.Scale(DamageType.Blunt, 1000f);
                        hitInfo.damageTypes.Scale(DamageType.Explosion, 1000f);
                        hitInfo.damageTypes.Scale(DamageType.Stab, 1000f);
                        //hitInfo.damageTypes.Scale(DamageType., 1000f);
                    }
                    else
                    {
                        IemUtils.GLog("not found player");
                    }
                }
            }
Exemple #4
0
 public override bool StartGame()
 {
     IemUtils.GLog("calling StartGame in IemGameEmbankmentGame");
     if (gsm == null)
     {
         base.StartGame();
         gsm = new EmbankStateManager(EmbankStateManager.Created.Instance, this);
         gsm.ChangeState(EmbankStateManager.GameLobby.Instance);
     }
     return(true);
 }
Exemple #5
0
            public bool MovePlayerToTeamLocation(BasePlayer player, Vector3 location)
            {
                IemUtils.GLog("moving players to game");

                if (!IemUtils.CheckPointNearToLocation(
                        player.transform.position, location, 2))
                {
                    IemUtils.TeleportPlayerPosition(player, location);
                }

                return(true);
            }
Exemple #6
0
            public void PlayerDied(BasePlayer victim, HitInfo info)
            {
                IemUtils.GLog("player died in one life phase");


                if (victim.ToPlayer() != null)
                {
                    IemUtils.GLog("player died - setting player dead");
                    BasePlayer player = victim.ToPlayer();

                    GetIemPlayerById(victim.UserIDString).PlayerState =
                        IemUtils.PlayerState.Dead;
                }
            }
Exemple #7
0
            public override IemUtils.IIemTeam Winner()
            {
                IemUtils.IIemTeam team = null;
                int bestscore          = 0;

                foreach (var iemTeam in Teams.Values)
                {
                    if (iemTeam.Score > bestscore)
                    {
                        bestscore = iemTeam.Score;
                        team      = iemTeam;
                    }
                    IemUtils.GLog("best score is " + bestscore);
                }
                return(team);
            }
Exemple #8
0
 public override bool StartGame()
 {
     IemUtils.GLog("calling StartGame in IemGameTargetPracticeGame");
     if (gsm.IsAny(TargetPracticeStateManager.Created.Instance))
     {
         base.StartGame();
         gsm.ChangeState(TargetPracticeStateManager.GameLobby.Instance);
     }
     else if (gsm.IsAny(TargetPracticeStateManager.GameLobby.Instance,
                        TargetPracticeStateManager.GameRunning.Instance
                        ))
     {
         IemUtils.GLog("gsm already created");
     }
     return(true);
 }
Exemple #9
0
            public void PlayerImmortal(BaseCombatEntity entity, HitInfo hitInfo)
            {
                IemUtils.GLog("calling immortality check");
                if (entity as BasePlayer == null || hitInfo == null)
                {
                    IemUtils.GLog("was null");
                    return;
                }

                if (entity.ToPlayer() != null)
                {
                    IemUtils.GLog("scaling player damage to zero");
                    BasePlayer player = entity.ToPlayer();

                    if (GetIemPlayerById(player.UserIDString) != null)
                    {
                        // TODO probably better way to scale this damage
                        //hitInfo.damageTypes.Scale(DamageType.Bullet, 0f);
                        IemUtils.NullifyDamage(ref hitInfo);
                    }
                }
            }
Exemple #10
0
 void OnGameEnded(IemGameBase.IemGame endedGame)
 {
     IemUtils.GLog("Hook called to indicate game ended");
 }
Exemple #11
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);
                        }
                    }
                }