Esempio n. 1
0
            public bool CheckLevelComplete()
            {
                TPGameLevel gamelevel = gamelevels[level];

                if (iemPlayer.Score >= gamelevel.Targets)
                {
                    return(true);
                }

                return(false);
            }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
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);
                }
Esempio n. 4
0
            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);
            }
Esempio n. 5
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);
                }
Esempio n. 6
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);
                }
            }