public bool CheckLevelComplete() { TPGameLevel gamelevel = gamelevels[level]; if (iemPlayer.Score >= gamelevel.Targets) { return(true); } return(false); }
internal void TPWeaponFired(BaseProjectile projectile, BasePlayer player, ItemModProjectile mod, ProtoBuf.ProjectileShoot projectiles) { //me.Puts("OnWeaponFired works!"); //var attacker = (BasePlayer)hitinfo.Initiator; if (player.UserIDString != iemPlayer.AsBasePlayer().UserIDString) { me.Puts("is not game player"); return; } else { TPGameLevel gamelevel = gamelevels[level]; gamelevel.accuracy.ShotsFired += 1; } }
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); }
public override IemGameBase.IemGame CreateGame(BasePlayer player, string level) { //me.Puts("in the tp game manager, creating new game"); var newGame = new IemGameTargetPracticeGame(player); foreach (TPGameLevel origlevel in difficultyModes[level].GameLevels .Cast <TPGameLevel>().ToList()) { TPGameLevel newLevel = new TPGameLevel() { Game = newGame, Targets = origlevel.Targets, Timer = origlevel.Timer, Player = player }; newGame.gamelevels.Add(newLevel); } newGame.difficultyLevel = level; newGame.StartGame(); return(newGame); }
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); }
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); } }