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; } } } }
public EmbankStateManager(IemStateManager.IStateMachine initialState, IemGameEmbankmentGame newEg) : base(initialState) { IemUtils.GLog("eg is " + newEg); eg = newEg; }
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"); } } }
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); }
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); }
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; } }
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); }
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); }
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); } } }
void OnGameEnded(IemGameBase.IemGame endedGame) { IemUtils.GLog("Hook called to indicate game ended"); }
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); } } }