Exemple #1
0
        private static bool checkForPowerupCollection(Entity bonus)
        {
            if (!bonus.HasField("isPowerupDrop"))
            {
                return(false);
            }
            //if (!Utilities.isEntDefined(bonus)) return false;
            foreach (Entity players in Players)
            {
                if (!players.IsAlive || players.Origin.DistanceTo(bonus.Origin) > 65 || players.SessionTeam != "allies")
                {
                    continue;
                }
                if ((players.GetField <bool>("isDown") || AIZ.isWeaponDeathMachine(players.CurrentWeapon)) && bonus.GetField <string>("type") == "gun")
                {
                    continue;
                }

                activateBonusDrop(players, bonus);
                if (bonus.HasField("attachedFX"))
                {
                    Entity fx = bonus.GetField <Entity>("attachedFX");
                    fx.Delete();
                    bonus.ClearField("attachedFX");
                }
                bonus.ClearField("isPowerupDrop");
                if (bonus.GetField <string>("type") != "nuke" && bonus.GetField <string>("type") != "freeze")
                {
                    PlayFX(AIZ.fx_powerupCollect, bonus.Origin, Vector3.Zero, Vector3.Zero);
                    bonus.Delete();
                }
                return(false);
            }
            return(true);
        }
Exemple #2
0
        public static void nukeDetonation(Entity owner, bool isStreak)
        {
            nukeOffsetScalar = 1;//Reset the scalar
            if (isStreak && owner != null && AIZ.isPlayer(owner))
            {
                int total = botsInPlay.Count;
                owner.SetField("cash", owner.GetField <int>("cash") + (100 * total));
                hud.scorePopup(owner, 100 * total);
                hud.scoreMessage(owner, AIZ.gameStrings[208]);
            }
            if (isStreak)
            {
                nukeOffsetScalar = 0;
                //AfterDelay(50, () => nukeOffsetScalar = 1);
            }
            bonusDrops.onNuke();

            AfterDelay(500, () => killstreaks.nukeInbound = false);

            //Testing

            /*
             * SetDvar("fixedtime", 2);
             * SetSlowMotion(1, 0.5f, .4f);
             * AfterDelay(500, () => SetSlowMotion(.5f, 1, .5f));
             * AfterDelay(1000, () => SetDvar("fixedtime", 0));
             */
        }
Exemple #3
0
        private static IEnumerator giveDeathMachine(Entity player)
        {
            player.GiveWeapon("iw5_pecheneg_mp_thermal_rof");
            StartAsync(AIZ.switchToWeapon_delay(player, "iw5_pecheneg_mp_thermal_rof", .2f));
            player.DisableWeaponSwitch();
            player.AllowAds(false);
            player.SetPerk("specialty_rof", true, false);
            player.SetClientDvar("perk_weapRateMultiplier", "0.5");
            player.SetField("hasAlteredROF", true);
            //player.SetPerk("specialty_bulletaccuracy", true, false);
            //player.SetClientDvar("ui_drawCrosshair", "0");
            player.SetSpreadOverride(1);
            yield return(Wait(30));

            if (AIZ.isPlayer(player) && player.IsAlive)
            {
                if (!player.GetField <bool>("perk5bought"))
                {
                    player.UnSetPerk("specialty_rof", true);
                }
                //player.UnSetPerk("specialty_bulletaccuracy", true);
                //player.SetClientDvar("ui_drawCrosshair", "1");
                player.TakeWeapon("iw5_pecheneg_mp_thermal_rof");
                player.SwitchToWeapon(player.GetField <string>("lastDroppableWeapon"));
                player.EnableWeaponSwitch();
                player.AllowAds(true);
                player.ResetSpreadOverride();
            }
        }
Exemple #4
0
 public static void checkForEndRound()
 {
     if (botUtil.botsInPlay.Count == 0 && botUtil.botsForWave == botUtil.spawnedBots)
     {
         if (Wave == totalWaves)
         {
             AIZ.zState = "ended";
             StartAsync(hud.endGame(true));
             return;
         }
         //g_AIZ.zState = "intermission";
         AfterDelay(100, () => AIZ.startIntermission());
         foreach (Entity players in Players)
         {
             if (AIZ.isPlayer(players) && players.HasField("isDown") && !players.GetField <bool>("isDown") && (!AIZ.isHellMap || (AIZ.isHellMap && killstreaks.visionRestored)))
             {
                 players.VisionSetNakedForPlayer(AIZ.vision);
             }
             if (AIZ.isPlayer(players))
             {
                 players.PlayLocalSound("mp_bonus_start");
                 players.PlayLocalSound("US_1mc_encourage_win");
             }
             if (isCrawlerWave || isBossWave)
             {
                 AIZ.giveMaxAmmo(players);
             }
         }
     }
     //if (!e_hud.stringsCleared && !isBossWave && Wave > 4 && f_botUtil.botsInPlay.Count < 10 && f_botUtil.botsForWave - f_botUtil.spawnedBots == 0) StartAsync(e_hud.clearAllGameStrings());
     checkForCompass();
 }
Exemple #5
0
 private static void checkForHellMapVision()
 {
     if (AIZ.isHellMap)
     {
         foreach (Entity player in Players)
         {
             if (AIZ.isPlayer(player) && player.HasField("isDown") && !player.GetField <bool>("isDown") && !killstreaks.visionRestored)
             {
                 player.VisionSetNakedForPlayer(AIZ.hellVision);
             }
         }
     }
 }
Exemple #6
0
 private static void giveRandomPerkToAll()
 {
     foreach (Entity player in Players)
     {
         if (!AIZ.isPlayer(player) || !player.IsAlive || !player.HasField("isDown"))
         {
             continue;
         }
         int perk = AIZ.rng.Next(7);
         perk++;
         //Log.Write(LogLevel.All, "Giving perk {0}", perk);
         StartAsync(giveRandomPerk(player, perk));
     }
 }
Exemple #7
0
        public static IEnumerator doNuke(Entity bonus)
        {
            PhysicsExplosionSphere(bonus.Origin, 5000000, 5000000, 10);
            Entity fx = SpawnFX(AIZ.fx_nuke, bonus.Origin);

            TriggerFX(fx);
            AfterDelay(5000, () =>
                       fx.Delete());
            fx.PlaySound("exp_suitcase_bomb_main");
            botUtil.nukeDetonation(null, false);
            bonus.Delete();
            yield return(Wait(3.5f));

            foreach (Entity players in Players)
            {
                if (!AIZ.isPlayer(players) || !players.IsAlive || !players.HasField("cash"))
                {
                    continue;
                }
                if (botUtil.doublePointsTime > 0)
                {
                    players.SetField("cash", players.GetField <int>("cash") + 800);
                    hud.scorePopup(players, 800);
                }
                else
                {
                    players.SetField("cash", players.GetField <int>("cash") + 400);
                    hud.scorePopup(players, 400);
                }
                hud.scoreMessage(players, AIZ.gameStrings[208]);
            }

            //Testing
            //SetSlowMotion(1, 0.5f, .4f);
            //AfterDelay(1000, () => SetSlowMotion(.5f, 1, 1));
        }
Exemple #8
0
        public static bool botAI(Entity ai, Entity botHitbox, bool isCrawler, bool isBoss)
        {
            if (AIZ.gameEnded)
            {
                return(false);
            }
            if (!ai.HasField("isAlive"))
            {
                return(false);                        //Return if our bot isn't set up correctly
            }
            if (!ai.GetField <bool>("isAlive") || !botsInPlay.Contains(ai) || botHitbox.GetField <int>("currentHealth") <= botHitbox.GetField <int>("damageTaken"))
            {
                return(false);
            }
            killBotIfUnderMap(ai);
            if (!ai.GetField <bool>("isAlive"))
            {
                return(false);                              //Do another check after height check
            }
            //check time inactivity
            if (GetTime() > ai.GetField <int>("lastActiveTime") + 120000 && !isBoss && !freezerActivated)
            {
                killBotAndRespawn(ai);
                return(false);
            }

            Entity  target     = null;
            Vector3 botOrigin  = ai.Origin;
            Vector3 botHeadTag = ai.GetTagOrigin("j_head");// + new Vector3 (0, 0, 5);

            #region targeting
            if (glowsticks.Count != 0)//Find a glowstick first
            {
                foreach (Entity g in glowsticks)
                {
                    if (freezerActivated)
                    {
                        break;
                    }
                    if (AIZ.isGlowstick(ai.GetField <Entity>("currentWaypoint")))
                    {
                        target = ai.GetField <Entity>("currentWaypoint"); break;
                    }
                    if (botOrigin.DistanceTo(g.Origin) > 500)
                    {
                        continue;
                    }
                    if (SightTracePassed(botHeadTag, g.Origin, false, botHitbox))
                    {
                        target = g;
                        //ai.ClearField("currentWaypoint");
                        ai.SetField("currentWaypoint", g);
                        ai.ClearField("visibleWaypoints");
                        break;
                    }
                    //else
                    //{
                    //Log.Write(LogLevel.All, "No trace available");
                    //}
                }
            }
            if (target == null && !freezerActivated)//If we haven't found a glowstick, find a real target
            {
                float tempDist = 999999999;
                foreach (Entity p in Players)//Find a player
                {
                    if (!p.HasField("isDown"))
                    {
                        continue;                       //Skip this player if they're not initiated for aiz
                    }
                    if (p.SessionTeam != "allies" || !p.IsAlive || p.GetField <bool>("isDown"))
                    {
                        continue;
                    }
                    if (p.GetField <bool>("isInHeliSniper"))
                    {
                        continue;
                    }

                    Vector3 playerOrigin = p.Origin;
                    if (botOrigin.DistanceTo(playerOrigin) > 600)
                    {
                        continue;
                    }

                    Vector3 playerHeadTag = p.GetTagOrigin("j_head");
                    bool    trace;
                    if (!isCrawler && !isBoss)
                    {
                        trace = SightTracePassed(botHeadTag, playerHeadTag, false, botHitbox, ai.GetField <Entity>("head"), ai.GetField <Entity>("headHitbox"));
                    }
                    else
                    {
                        trace = SightTracePassed(botHeadTag, playerHeadTag, false, botHitbox);
                    }
                    if (trace)
                    {
                        //Log.Write(LogLevel.All, "Traced {0}", p.Name);
                        //if (target != null)
                        {
                            bool isCloser = playerOrigin.DistanceTo(botOrigin) < tempDist;//Closer(botHeadTag, playerHeadTag, targetHeadTag);
                            if (isCloser)
                            {
                                tempDist = playerOrigin.DistanceTo(botOrigin);
                                target   = p;
                                //ai.ClearField("currentWaypoint");
                                ai.SetField("currentWaypoint", ai);
                                ai.ClearField("visibleWaypoints");
                                //Log.Write(LogLevel.All, "{0} is closer", target.Name);
                            }
                        }

                        /*
                         * else
                         * {
                         *  target = p;
                         *  //ai.ClearField("currentWaypoint");
                         *  ai.SetField("currentWaypoint", ai);
                         *  ai.ClearField("visibleWaypoints");
                         *  //Log.Write(LogLevel.All, "Target is null");
                         * }
                         */
                    }
                    //Attacking players
                    if (botHitbox.Origin.DistanceTo(playerOrigin) <= 50 && !ai.GetField <bool>("isAttacking"))
                    {
                        StartAsync(ai_attackPlayer(ai, p, isCrawler, isBoss));
                    }
                    //End attacking
                }
                if (target == null)//No players, find a waypoint
                {
                    if (ai.HasField("currentWaypoint") && ai.HasField("visibleWaypoints"))
                    {
                        //Entity currentWaypoint = ai.GetField<Entity>("currentWaypoint");
                        //if (currentWaypoint.HasField("visiblePoints") && !ai.HasField("visibleWaypoints")) ai.SetField("visibleWaypoints", new Parameter(currentWaypoint.GetField<List<Entity>>("visiblePoints")));
                        if (ai.GetField <Entity>("currentWaypoint") == ai && ai.HasField("visibleWaypoints"))
                        {
                            List <Entity> visibleWaypoints = ai.GetField <List <Entity> >("visibleWaypoints");
                            ai.SetField("currentWaypoint", visibleWaypoints[AIZ.rng.Next(visibleWaypoints.Count)]);
                        }
                        else if (botOrigin.DistanceTo(ai.GetField <Entity>("currentWaypoint").Origin) < 50)
                        {
                            ai.SetField("visibleWaypoints", new Parameter(ai.GetField <Entity>("currentWaypoint").GetField <List <Entity> >("visiblePoints")));
                            ai.SetField("currentWaypoint", ai);
                            //visibleWaypoints.Clear();
                            return(true);
                        }
                    }
                    else if (!ai.HasField("currentWaypoint") || !ai.HasField("visibleWaypoints"))//Recalculate point
                    {
                        foreach (Entity v in mapEdit.waypoints)
                        {
                            //Check for waypoints
                            if (SightTracePassed(botHeadTag, v.Origin, false, botHitbox))
                            {
                                ai.SetField("currentWaypoint", v);//Set the first seen one as current
                                ai.SetField("visibleWaypoints", new Parameter(v.GetField <List <Entity> >("visiblePoints")));
                                break;
                            }
                        }
                    }
                    if (ai.HasField("currentWaypoint") && ai.GetField <Entity>("currentWaypoint") != ai)
                    {
                        target = ai.GetField <Entity>("currentWaypoint");
                    }
                }
            }
            #endregion
            //Now we are done targeting, do the action for the target

            #region motion
            if (ai.GetField <bool>("isAttacking"))
            {
                return(true);                                 //Stop moving to attack. Prevent bots getting stuck into players
            }

            /*
             * foreach (Entity bot in botsInPlay)//Prevent bots from combining into each other
             * {
             *  if (ai == bot) continue;
             *  Vector3 closeOrigin = bot.Origin;
             *  if (botOrigin.DistanceTo(closeOrigin) < 10)//Move away from the bot and recalc
             *  {
             *      Vector3 dir = VectorToAngles(closeOrigin - botOrigin);
             *      Vector3 awayPos = botOrigin - dir * 100;
             *      ai.MoveTo(awayPos, botOrigin.DistanceTo(awayPos) / 120);
             *      ai.RotateTo(new Vector3(0, -dir.Y, 0), .3f, .1f, .1f);
             *      return true;
             *  }
             * }
             */

            float Ground = GetGroundPosition(botOrigin, 12).Z;

            if (target != null && glowsticks.Count == 0)//Move to our target if there are no glowsticks
            {
                Vector3 targetOrigin = target.Origin;
                //if (target.AIZ.isPlayer) targetHeadTag = target.GetTagOrigin("j_head");
                //else targetHeadTag = target.Origin;
                float angleY = VectorToAngles(targetOrigin - botOrigin).Y;
                ai.RotateTo(new Vector3(0, angleY, 0), .3f, .1f, .1f);

                if (botOrigin.DistanceTo2D(targetOrigin) < 100 || Ground == botOrigin.Z)
                {
                    Ground = targetOrigin.Z;
                }

                int   speed    = 100;
                float distance = botOrigin.DistanceTo(targetOrigin);

                if (((isInPeril(botHitbox) && !ai.HasField("hasBeenCrippled")) && !ai.HasField("hasBeenCrippled")) || isBoss)
                {
                    speed = 170;
                }
                else if (ai.HasField("hasBeenCrippled"))
                {
                    speed = 30;
                }
                float groundDist = Ground - botOrigin.Z;
                groundDist *= 8;//Overcompansate to move faster and track along ground in a better way
                if (Ground == targetOrigin.Z)
                {
                    groundDist = 0;                          //Fix 'jumping bots'
                }
                ai.MoveTo(new Vector3(targetOrigin.X, targetOrigin.Y, Ground + groundDist), distance / speed);

                string state = ai.GetField <string>("state");
                if ((state == "post_hurt" || state == "idle" || state == "dancing") && state != "hurt" && state != "attacking")
                {
                    if (isCrawler || ai.HasField("hasBeenCrippled"))
                    {
                        playAnimOnBot(ai, crawlerAnim_walk);
                    }
                    else if (isBoss)
                    {
                        playAnimOnBot(ai, anim_run);
                    }
                    else
                    {
                        if (isInPeril(botHitbox))
                        {
                            playAnimOnBot(ai, anim_run);
                        }
                        else
                        {
                            playAnimOnBot(ai, anim_walk);
                        }
                    }
                    ai.SetField("state", "moving");
                }
            }
            else if (target != null && (glowsticks.Count > 0 && AIZ.isGlowstick(target)))//Move towards a glowstick and dance
            {
                Vector3 targetOrigin = target.Origin;
                if (Ground == botOrigin.Z)
                {
                    Ground = targetOrigin.Z;
                }
                float angleY = VectorToAngles(targetOrigin - botOrigin).Y;
                ai.RotateTo(new Vector3(0, angleY, 0), .3f, .1f, .1f);
                string state = ai.GetField <string>("state");

                if (botOrigin.DistanceTo(targetOrigin) > 50)
                {
                    int   speed    = 100;
                    float distance = botOrigin.DistanceTo(targetOrigin);

                    if (((isInPeril(botHitbox) && !ai.HasField("hasBeenCrippled")) && !ai.HasField("hasBeenCrippled")) || isBoss)
                    {
                        speed = 170;
                    }
                    else if (ai.HasField("hasBeenCrippled"))
                    {
                        speed = 30;
                    }
                    float groundDist = Ground - botOrigin.Z;
                    groundDist *= 8;//Overcompansate to move faster and track along ground in a better way
                    if (Ground == targetOrigin.Z)
                    {
                        groundDist = 0;                          //Fix 'jumping bots'
                    }
                    ai.MoveTo(new Vector3(targetOrigin.X, targetOrigin.Y, Ground + groundDist), distance / speed);
                }
                else if (state != "dancing")
                {
                    ai.Origin = botOrigin;
                    playAnimOnBot(ai, anim_lose);
                    ai.SetField("state", "dancing");
                    return(true);
                }
                if ((state == "post_hurt" || state == "idle") && state != "hurt" && state != "attacking")
                {
                    if (isCrawler)
                    {
                        playAnimOnBot(ai, crawlerAnim_walk);
                    }
                    else if (isBoss)
                    {
                        playAnimOnBot(ai, anim_run);
                    }
                    else
                    {
                        playAnimOnBot(ai, anim_walk);
                    }
                    ai.SetField("state", "moving");
                }
            }
            else if (target != null && (glowsticks.Count > 0 && !AIZ.isGlowstick(target)))//Move towards a player while a glowstick is out but not in sight
            {
                Vector3 targetOrigin = target.Origin;
                if (Ground == botOrigin.Z)
                {
                    Ground = targetOrigin.Z;
                }
                float angleY = VectorToAngles(targetOrigin - botOrigin).Y;
                ai.RotateTo(new Vector3(0, angleY, 0), .3f, .1f, .1f);

                int   speed    = 100;
                float distance = botOrigin.DistanceTo(targetOrigin);

                if (((isInPeril(botHitbox) && !ai.HasField("hasBeenCrippled")) && !ai.HasField("hasBeenCrippled")) || isBoss)
                {
                    speed = 170;
                }
                else if (ai.HasField("hasBeenCrippled"))
                {
                    speed = 30;
                }
                float groundDist = Ground - botOrigin.Z;
                groundDist *= 8;//Overcompansate to move faster and track along ground in a better way
                if (Ground == targetOrigin.Z)
                {
                    groundDist = 0;                          //Fix 'jumping bots'
                }
                ai.MoveTo(new Vector3(targetOrigin.X, targetOrigin.Y, Ground + groundDist), distance / speed);

                string state = ai.GetField <string>("state");
                if ((state == "post_hurt" || state == "idle" || state == "dancing") && state != "hurt" && state != "attacking")
                {
                    if (isCrawler || ai.HasField("hasBeenCrippled"))
                    {
                        playAnimOnBot(ai, crawlerAnim_walk);
                    }
                    else if (isBoss)
                    {
                        playAnimOnBot(ai, anim_run);
                    }
                    else
                    {
                        if (isInPeril(botHitbox))
                        {
                            playAnimOnBot(ai, anim_run);
                        }
                        else
                        {
                            playAnimOnBot(ai, anim_walk);
                        }
                    }
                    ai.SetField("state", "moving");
                }
            }
            else//failsafe, just stand still if there is no other options
            {
                ai.MoveTo(new Vector3(botOrigin.X, botOrigin.Y, Ground), 1);
                string state = ai.GetField <string>("state");
                if (state != "idle" && state != "hurt" && state != "attacking")
                {
                    if (isCrawler || ai.HasField("hasBeenCrippled"))
                    {
                        playAnimOnBot(ai, crawlerAnim_idle);
                    }
                    else
                    {
                        playAnimOnBot(ai, anim_idle);
                    }
                    ai.SetField("state", "idle");
                }
            }
            #endregion

            //Moving to standalone interval
            //ResetTimeout();
            return(true);
        }
Exemple #9
0
        public static void activateBonusDrop(Entity player, Entity bonus)
        {
            switch (bonus.GetField <string>("type"))
            {
            case "instaKill":
                botUtil.instaKillTime += 30;
                botUtil.startInstakill();
                bonus.PlaySound("mp_level_up");
                break;

            case "doublePoints":
                botUtil.doublePointsTime += 30;
                botUtil.startDoublePoints();
                bonus.PlaySound("mp_level_up");
                break;

            case "ammo":
                foreach (Entity players in Players)
                {
                    if (players.IsAlive)
                    {
                        AIZ.giveMaxAmmo(players);
                    }
                }
                break;

            case "nuke":
                StartAsync(doNuke(bonus));
                break;

            case "cash":
                bonus.PlaySound("mp_level_up");
                foreach (Entity players in Players)
                {
                    if (players.IsAlive && players.HasField("aizHud_created"))
                    {
                        players.SetField("cash", players.GetField <int>("cash") + 1000);
                        hud.scorePopup(players, 1000);
                        hud.scoreMessage(players, AIZ.gameStrings[97]);
                    }
                }
                break;

            case "points":
                bonus.PlaySound("mp_level_up");
                foreach (Entity players in Players)
                {
                    if (players.IsAlive && players.HasField("aizHud_created"))
                    {
                        int points = players.GetField <int>("points");
                        points += 10;
                        players.SetField("points", points);
                        //e_hud.scorePopup(players, 10);
                        hud.scoreMessage(players, AIZ.gameStrings[98]);
                        HudElem pointNumber = players.GetField <HudElem>("hud_pointNumber");
                        pointNumber.SetValue(points);
                    }
                }
                break;

            case "freeze":
                StartAsync(doFreezer(bonus));
                break;

            case "sale":
                mapEdit.startSale();
                mapEdit.sale = true;
                AfterDelay(30000, () => mapEdit.sale = false);
                break;

            case "perk":
                giveRandomPerkToAll();
                break;

            case "gun":
                player.PlayLocalSound("mp_level_up");
                StartAsync(giveDeathMachine(player));
                break;

            default:
                break;
            }
            hud.showPowerUpHud(bonus.GetField <string>("type"), player);
        }
Exemple #10
0
        public static void giveAllPerks(Entity player)
        {
            bool[] ownedPerks = AIZ.getOwnedPerks(player);
            if (!ownedPerks.Contains(false))
            {
                return;                             //Owns all perks, give up on life...
            }
            if (!ownedPerks[0])
            {
                player.MaxHealth = 250;
                player.Health    = player.MaxHealth;
                player.SetField("PerkBought", "cardicon_juggernaut_1");
                player.SetField("perk1bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[1])
            {
                player.SetPerk("specialty_lightweight", true, true);
                //player.SetPerk("specialty_marathon", true, true);
                player.SetPerk("specialty_longersprint", true, true);
                player.SetField("PerkBought", "specialty_longersprint_upgrade");
                player.SetField("perk2bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[2])
            {
                player.SetPerk("specialty_fastreload", true, true);
                //player.SetPerk("specialty_quickswap", true, true);
                player.SetPerk("specialty_quickdraw", true, true);
                player.SetField("PerkBought", "specialty_fastreload_upgrade");
                player.SetField("perk3bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[3])
            {
                player.SetField("NewGunReady", true);
                player.SetField("PerkBought", "specialty_twoprimaries_upgrade");
                player.SetField("perk4bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[4])
            {
                player.SetPerk("specialty_rof", true, true);
                player.SetField("PerkBought", "weapon_attachment_rof");
                player.SetField("perk5bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[5])
            {
                player.SetPerk("specialty_stalker", true, true);
                player.SetField("PerkBought", "specialty_stalker_upgrade");
                player.SetField("perk6bought", true);
                hud.updatePerksHud(player, false, true);
            }
            if (!ownedPerks[6])
            {
                player.SetField("autoRevive", true);
                player.SetField("PerkBought", "waypoint_revive");
                player.SetField("perk7bought", player.GetField <int>("perk7bought") + 1);
                hud.updatePerksHud(player, false, true);
            }

            HudElem perkIcon = NewClientHudElem(player);

            perkIcon.X         = 0;
            perkIcon.Y         = 0;
            perkIcon.AlignX    = HudElem.XAlignments.Center;
            perkIcon.AlignY    = HudElem.YAlignments.Middle;
            perkIcon.VertAlign = HudElem.VertAlignments.Middle;
            perkIcon.HorzAlign = HudElem.HorzAlignments.Center_Adjustable;
            perkIcon.SetShader("specialty_perks_all", 128, 128);
            perkIcon.Foreground     = true;
            perkIcon.HideWhenInMenu = true;
            perkIcon.Alpha          = 1;
            perkIcon.ScaleOverTime(1, 512, 512);
            perkIcon.FadeOverTime(1);
            perkIcon.Alpha = 0;

            player.PlayLocalSound("earn_superbonus");
            AfterDelay(1000, () =>
                       perkIcon.Destroy());
        }
Exemple #11
0
        public static IEnumerator giveRandomPerk(Entity player, int perk = -1)
        {
            bool[] ownedPerks = AIZ.getOwnedPerks(player);
            if (!ownedPerks.Contains(false))
            {
                yield break;                             //Owns all perks, give up on life...
            }
            if (perk == -1)
            {
                perk = AIZ.rng.Next(7);
                perk++;
            }

            if (ownedPerks[perk - 1])
            {
                //re-roll
                int randomPerk = AIZ.rng.Next(7);
                randomPerk++;
                StartAsync(giveRandomPerk(player, randomPerk));
                yield break;
            }

            hud.scoreMessage(player, AIZ.gameStrings[99]);

            switch (perk)
            {
            case 1:
                player.MaxHealth = 250;
                player.Health    = player.MaxHealth;
                player.SetField("PerkBought", "cardicon_juggernaut_1");
                break;

            case 2:
                player.SetPerk("specialty_lightweight", true, true);
                //player.SetPerk("specialty_marathon", true, true);
                player.SetPerk("specialty_longersprint", true, true);
                player.SetField("PerkBought", "specialty_longersprint_upgrade");
                break;

            case 3:
                player.SetPerk("specialty_fastreload", true, true);
                //player.SetPerk("specialty_quickswap", true, true);
                player.SetPerk("specialty_quickdraw", true, true);
                player.SetField("PerkBought", "specialty_fastreload_upgrade");
                break;

            case 4:
                player.SetField("NewGunReady", true);
                player.SetField("PerkBought", "specialty_twoprimaries_upgrade");
                break;

            case 5:
                player.SetPerk("specialty_rof", true, true);
                player.SetField("PerkBought", "weapon_attachment_rof");
                break;

            case 6:
                player.SetPerk("specialty_stalker", true, true);
                player.SetField("PerkBought", "specialty_stalker_upgrade");
                break;

            case 7:
                player.SetField("autoRevive", true);
                player.SetField("PerkBought", "waypoint_revive");
                break;

            case 8:
                player.SetPerk("specialty_scavenger", true, true);
                player.SetField("PerkBought", "specialty_scavenger_upgrade");
                break;
            }

            if (perk != 7)
            {
                player.SetField("perk" + perk + "bought", true);
            }
            else
            {
                player.SetField("perk7bought", player.GetField <int>("perk7bought") + 1);
            }

            HudElem perkIcon = NewClientHudElem(player);

            perkIcon.X         = 0 * (perk - 1);
            perkIcon.Y         = -54;
            perkIcon.AlignX    = HudElem.XAlignments.Left;
            perkIcon.AlignY    = HudElem.YAlignments.Bottom;
            perkIcon.VertAlign = HudElem.VertAlignments.Bottom_Adjustable;
            perkIcon.HorzAlign = HudElem.HorzAlignments.Left;
            perkIcon.SetShader(player.GetField <string>("perkBought"), 128, 128);
            perkIcon.Foreground     = true;
            perkIcon.HideWhenInMenu = true;
            perkIcon.Alpha          = 1;
            perkIcon.ScaleOverTime(1, 30, 30);

            player.PlayLocalSound("earn_perk");

            yield return(Wait(1));

            perkIcon.Destroy();
            hud.updatePerksHud(player, false, true);
        }
Exemple #12
0
        private static void doBotDamage(int damage, Entity player, string weapon, Entity botHitbox, string MOD, Vector3 point, bool skipFeedback = false)
        {
            int hitDamage;

            if (AIZ.weaponIsUpgrade(weapon))
            {
                hitDamage = damage / 2;                             //Base upgraded damage
            }
            else if (AIZ.isHellMap)
            {
                hitDamage = damage / 2;                    //Hellmap damage
            }
            else
            {
                hitDamage = damage / (1 + ((int)roundSystem.Wave / 2)); //Base damage
            }
            if (MOD == "MOD_MELEE")
            {
                hitDamage = damage / (((int)roundSystem.Wave + 1) / 2);                    //Melee damage
            }
            if (weapon == "iw5_p99_mp_tactical_xmags" && MOD == "MOD_MELEE")
            {
                hitDamage = 350;                                                             //P99 Upgraded damage
            }
            if (weapon == "iw5_riotshield_mp")
            {
                hitDamage = damage * 2;                             //Upgraded shield
            }
            if (AIZ.isWeaponDeathMachine(weapon))
            {
                hitDamage = damage * 4;
            }

            if (MOD != "MOD_MELEE")
            {
                if (weapon.Contains("iw5_deserteagle_mp") || weapon == "at4_mp" || weapon.Contains("iw5_44magnum_mp") || weapon.StartsWith("iw5_mp412"))
                {
                    hitDamage = damage;                                                                                                                                     //Specials damage
                }
                //Weapon tweaks
                if (AIZ.isSniper(weapon) || weapon.Contains("iw5_dragunov_mp"))
                {
                    hitDamage = (damage *= 2);                                                            //Sniper damage
                }
                if (AIZ.isShotgun(weapon))
                {
                    hitDamage = (int)(hitDamage * 4f);                       //Shotgun multiplier
                }
                if (weapon == "gl_mp")
                {
                    hitDamage = 10000;                   //GL
                }
                else if (weapon == "iw5_xm25_mp")
                {
                    hitDamage = damage;
                }
                else if (weapon == "xm25_mp")
                {
                    hitDamage = damage * 2;
                }
                else if (weapon == "iw5_mk14_mp")
                {
                    hitDamage *= 2;
                }
                else if (weapon.StartsWith("iw5_mk14_mp_reflex_xmags_camo11"))
                {
                    hitDamage *= 3;
                }
                else if (weapon == "iw5_1887_mp_camo11")
                {
                    hitDamage = 100;
                }
                else if (weapon == "iw5_mk12spr_mp_acog_xmags")
                {
                    hitDamage = 500;                                            //Heli Sniper damage
                }
                //if (weapon == "uav_strike_missile_mp") hitDamage = damage;//Thundergun
            }

            if (MOD == "MOD_HEADSHOT")
            {
                hitDamage *= 3;
            }

            else if (MOD == "MOD_PASSTHRU")
            {
                hitDamage = damage;                            //Script usage
            }
            else if ((MOD == "MOD_EXPLOSIVE" || MOD == "MOD_GRENADE_SPLASH") && botHitbox.GetField <int>("damageTaken") >= botHitbox.GetField <int>("currentHealth") * 0.7f && botHitbox.GetField <Entity>("parent").HasField("head"))
            {
                botToCrawler(botHitbox);
            }

            if (instaKillTime > 0 && !botHitbox.HasField("isBoss"))
            {
                botHitbox.SetField("damageTaken", botHitbox.GetField <int>("currentHealth"));
            }
            else
            {
                botHitbox.SetField("damageTaken", botHitbox.GetField <int>("damageTaken") + hitDamage);
            }

            if ((botHitbox.GetField <int>("damageTaken") >= botHitbox.GetField <int>("currentHealth") * 0.85f && MOD == "MOD_HEADSHOT" && botHitbox.GetField <Entity>("parent").HasField("head")) || (instaKillTime > 0 && botHitbox.GetField <Entity>("parent").HasField("head")))
            {
                Entity head = botHitbox.GetField <Entity>("parent").GetField <Entity>("head");
                head.Hide();
                botHitbox.GetField <Entity>("parent").GetField <Entity>("headHitbox").SetCanDamage(false);
                PlayFX(AIZ.fx_headshotBlood, head.Origin);
                if (instaKillTime == 0)
                {
                    OnInterval(1000, () => runBotBleedout(player, botHitbox));
                }
            }

            if (!AIZ.isPlayer(player) || !player.HasField("isDown"))
            {
                return;
            }

            if (!botHitbox.GetField <Entity>("parent").GetField <bool>("primedForNuke"))
            {
                int pointGain = 10;
                if (doublePointsTime > 0)
                {
                    pointGain *= 2;
                }

                if (MOD != "MOD_PASSTHRU")
                {
                    player.SetField("cash", player.GetField <int>("cash") + pointGain);
                    hud.scorePopup(player, pointGain);
                }
                AIZ.addRank(player, pointGain);
            }

            if (skipFeedback || !AIZ.isPlayer(player) || !player.HasField("hud_damageFeedback"))
            {
                return;
            }

            HudElem combatHighFeedback = player.GetField <HudElem>("hud_damageFeedback");

            combatHighFeedback.Alpha = 1;
            player.PlayLocalSound("MP_hit_alert");
            combatHighFeedback.FadeOverTime(1);
            combatHighFeedback.Alpha = 0;
        }
Exemple #13
0
        public static void onBotDamage(Entity hitbox, Parameter damage, Parameter attacker, Parameter direction_vec, Parameter point, Parameter meansOfDeath, Parameter modelName, Parameter partName, Parameter tagName, Parameter iDFlags, Parameter weapon, bool isCrawler, bool isBoss)
        {
            if ((string)weapon == "iw5_usp45_mp_akimbo_silencer02" || AIZ.isRayGun((string)weapon))
            {
                return;
            }

            Entity currentBot = hitbox.GetField <Entity>("parent");

            if (!botsInPlay.Contains(currentBot))
            {
                return;
            }
            Entity player = (Entity)attacker;

            if ((string)weapon == "remote_uav_weapon_mp" && attacker.As <Entity>().HasField("owner"))//UAV tweaks
            {
                player       = attacker.As <Entity>().GetField <Entity>("owner");
                meansOfDeath = "MOD_PASSTHRU";
                damage       = 50;
            }
            else if ((string)weapon == "sentry_minigun_mp")//Sentry tweaks
            {
                player       = attacker.As <Entity>().GetField <Entity>("owner");
                meansOfDeath = "MOD_PASSTHRU";
                damage       = 10;
            }
            else if ((string)weapon == "manned_gl_turret_mp")//Sentry tweaks
            {
                player       = attacker.As <Entity>().GetField <Entity>("owner");
                meansOfDeath = "MOD_PASSTHRU";
                damage       = 300;
            }
            else if ((string)weapon == "remote_tank_projectile_mp" || (string)weapon == "uav_strike_projectile_mp")
            {
                player       = attacker.As <Entity>().GetField <Entity>("owner");
                meansOfDeath = "MOD_PASSTHRU";
            }
            else if ((string)weapon == "ac130_25mm_mp")//A10 tweaks
            {
                //player = attacker.As<Entity>().GetField<Entity>("owner");
                meansOfDeath = "MOD_PASSTHRU";
            }

            //Utilities.PrintToConsole((string)meansOfDeath);

            if ((string)meansOfDeath == "MOD_BLEEDOUT")
            {
                Vector3 org = currentBot.GetTagOrigin("j_head");
                PlayFX(AIZ.fx_headshotBlood, org);
                doBotDamage((int)damage, player, (string)weapon, hitbox, (string)meansOfDeath, point.As <Vector3>(), true);
            }
            else
            {
                if ((string)weapon != "sentry_minigun_mp" && (string)weapon != "manned_gl_turret_mp" && (string)weapon != "remote_uav_weapon_mp" && (string)meansOfDeath != "MOD_EXPLOSIVE_BULLET")
                {
                    PlayFX(AIZ.fx_blood, point.As <Vector3>());                                                                                                                                                                               //Only play FX if the weapon isn't a script weapon
                }
                doBotDamage((int)damage, player, (string)weapon, hitbox, (string)meansOfDeath, point.As <Vector3>());
            }
            string botState = currentBot.GetField <string>("state");

            if (botState != "hurt" && botState != "attacking" && (string)meansOfDeath != "MOD_BLEEDOUT")
            {
                if (!isCrawler && !isBoss)
                {
                    playAnimOnBot(currentBot, getHurtAnim(hitbox));
                }
                else if (isBoss)
                {
                    playAnimOnBot(currentBot, anim_runHurt);
                }
                currentBot.SetField("state", "hurt");
                AfterDelay(500, () =>
                           currentBot.SetField("state", "post_hurt"));
            }

            updateBotLastActiveTime(currentBot);

            if (hitbox.GetField <int>("damageTaken") >= hitbox.GetField <int>("currentHealth"))
            {
                currentBot.SetField("isAlive", false);
                if (currentBot.HasField("isOnCompass") && currentBot.GetField <bool>("isOnCompass"))
                {
                    /*
                     * Objective_Delete(currentBot.GetField<int>("compassID"));
                     * h_mapEdit._objIDList[currentBot.GetField<int>("compassID")] = false;
                     * h_mapEdit._objIDs.Remove(currentBot);
                     * currentBot.ClearField("compassID");
                     */
                    mapEdit.removeObjID(currentBot);
                    currentBot.SetField("isOnCompass", false);
                }
                hitbox.SetCanDamage(false);
                hitbox.SetCanRadiusDamage(false);
                hitbox.SetModel("tag_origin");//Change model to avoid the dead bot's hitbox blocking shots
                //if (isBoss) hitbox.Delete();
                if (AIZ.isPlayer(player))
                {
                    if (currentBot.HasField("primedForNuke") && !currentBot.GetField <bool>("primedForNuke"))
                    {
                        int pointGain = 50;
                        if ((string)meansOfDeath == "MOD_HEADSHOT")
                        {
                            pointGain = 100;
                        }
                        if ((string)meansOfDeath == "MOD_MELEE")
                        {
                            pointGain = 130;
                        }

                        if (doublePointsTime > 0)
                        {
                            pointGain *= 2;
                        }

                        if ((string)meansOfDeath != "MOD_PASSTHRU")
                        {
                            player.SetField("cash", player.GetField <int>("cash") + pointGain);
                            hud.scorePopup(player, pointGain);
                        }
                        AIZ.addRank(player, pointGain);
                    }
                    player.Kills++;
                    if (player.HasField("aizHud_created"))
                    {
                        player.SetField("points", player.GetField <int>("points") + 1);
                        HudElem pointNumber = player.GetField <HudElem>("hud_pointNumber");
                        pointNumber.SetValue(player.GetField <int>("points"));
                    }
                    killstreaks.checkKillstreak(player);
                }
                currentBot.MoveTo(currentBot.Origin, 0.05f);

                if (isCrawler || currentBot.HasField("hasBeenCrippled"))
                {
                    playAnimOnBot(currentBot, crawlerAnim_death);
                }
                else
                {
                    //Log.Write(LogLevel.All, (string)meansOfDeath);

                    /*
                     * if ((string)meansOfDeath == "MOD_EXPLOSIVE" || (string)meansOfDeath == "MOD_GRENADE_SPLASH")
                     * {
                     *  currentBot.Angles = VectorToAngles(point.As<Vector3>() - currentBot.Origin);
                     *  int randomAnim = g_AIZ.rng.Next(anim_death_explode.Length);
                     *  currentplayAnimOnBot(bot, anim_death_explode[randomAnim]);
                     * }
                     * else
                     */
                    //{
                    int randomAnim = AIZ.rng.Next(anim_deaths.Length);
                    playAnimOnBot(currentBot, anim_deaths[randomAnim]);
                    //}
                }

                if (currentBot.HasField("hasBeenCrippled"))
                {
                    currentBot.ClearField("hasBeenCrippled");
                }

                if (isCrawler)
                {
                    AfterDelay(500, () => currentBot.MoveTo(currentBot.Origin + new Vector3(0, 0, 2500), 5));
                }

                AfterDelay(5000, () => despawnBot(currentBot, isCrawler, isBoss));
                botsInPlay.Remove(currentBot);
                onBotUpdate();
                roundSystem.checkForEndRound();
                if (isCrawler && roundSystem.isCrawlerWave && (botsInPlay.Count == 0 && botsForWave == spawnedBots) && perkDropsEnabled && AIZ.isHellMap)
                {
                    bonusDrops.spawnBonusDrop(bonusDrops.dropTypes.perk, currentBot.Origin); return;
                }
                if (!isBoss)
                {
                    bonusDrops.dropTypes bonusType = bonusDrops.checkForBonusDrop();
                    if (bonusType != bonusDrops.dropTypes.none)
                    {
                        bonusDrops.spawnBonusDrop(bonusType, currentBot.Origin);
                    }
                }
            }
        }
Exemple #14
0
        //private readonly static Entity level = Entity.GetEntity(2046);

        public static void startNextRound()
        {
            checkForEndGame();//Before we start, make sure there are players to start
            Wave++;

            //MakeDvarServerInfo("sv_privateClientsForClients", Wave);//Set round number to private client display

            //foreach (Entity players in Players)
            //if (AIZ.isPlayer(players) && players.HasField("isDown")) players.SetField("currentRound", Wave);
            //level.Notify("round_changed");
            botUtil.spawnedBots = 0;
            isCrawlerWave       = Wave % 5 == 0 && !isBossWave;
            isBossWave          = Wave % 10 == 0;
            if (isBossWave)
            {
                botUtil.botsForWave = bossCount;
                if (bossCount == 1)
                {
                    bossCount = 5;
                }
                else
                {
                    bossCount += 5;
                }
                foreach (Entity players in Players)
                {
                    if (AIZ.isPlayer(players) && players.HasField("isDown") && !players.GetField <bool>("isDown"))
                    {
                        players.VisionSetNakedForPlayer(AIZ.bossVision);
                    }
                }
            }
            else if (isCrawlerWave)
            {
                //e_hud.stringsCleared = false;
                botUtil.botsForWave = crawlerCount;
                crawlerCount       += 25;
                if (Wave != 5)
                {
                    botUtil.crawlerHealth += 250;
                }
            }
            else//isNormalWave
            {
                botUtil.botsForWave = 10 * Wave;
                if (Wave != 1)
                {
                    botUtil.health += botUtil.healthScalar;
                }
            }

            if (!isBossWave)
            {
                hud.stringsCleared = false;
            }

            checkForHellMapVision();
            OnInterval(500, botUtil.startBotSpawn);
            onRoundChange();
            AIZ.zState = "ingame";
            foreach (Entity players in Players)
            {
                if (AIZ.isPlayer(players) && players.HasField("isDown"))
                {
                    players.PlayLocalSound("mp_bonus_end");
                    int    randomStart = AIZ.rng.Next(8);
                    string sound       = "";
                    switch (randomStart)
                    {
                    case 0:
                        sound = "US_1mc_fightback";
                        break;

                    case 1:
                        sound = "US_1mc_goodtogo";
                        break;

                    case 2:
                        sound = "US_1mc_holddown";
                        break;

                    case 3:
                        sound = "US_1mc_keepfighting";
                        break;

                    case 4:
                        sound = "US_1mc_pushforward";
                        break;

                    case 5:
                        sound = "US_1mc_readytomove";
                        break;

                    case 6:
                        sound = "US_1mc_positions_lock";
                        break;

                    case 7:
                        sound = "US_1mc_security_complete";
                        break;
                    }
                    players.PlayLocalSound(sound);
                }
            }
        }