Skip to content
  • 0 Unread 0
  • Recent
  • Popular
  • Users
  • Donate
Collapse

Plutonium

  1. Home
  2. BO2 Modding Releases & Resources
  3. [GSC Release] Ultimate T6 Zombies Overhaul: Modern HUD, Hitmarkers, Auto-Reload & Advanced Commands

[GSC Release] Ultimate T6 Zombies Overhaul: Modern HUD, Hitmarkers, Auto-Reload & Advanced Commands

Scheduled Pinned Locked Moved BO2 Modding Releases & Resources
bo2zombiesgschudcommandsoriginsscript
36 Posts 16 Posters 15.7k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Keyhart1997 Keyhart1997

    trying this out, it looks quite well! i rewrote some code for myself to move the health hud to the bottom left instead of the middle. if you wanna test it out overwrite lines 625 to 676 with the following

    self endon("disconnect");
        flag_wait("initial_blackscreen_passed");
    
        bar_width = 130;
        hp_height = 6;
        shield_height = 3;  
        bg_padding = 4;
        y_bottom_anchor = 20; 
    
        self.hp_text = newClientHudElem(self);
        self.hp_text.alignX = "left";
        self.hp_text.alignY = "bottom";
        self.hp_text.horzAlign = "left";
        self.hp_text.vertAlign = "bottom";
        self.hp_text.x = 0;
        self.hp_text.y = y_bottom_anchor - hp_height - shield_height - bg_padding - 2; 
        self.hp_text.fontscale = 1.1;
        self.hp_text.label = &"^5Health";
        self.hp_text.sort = 2;
    
        self.hp_bg = newClientHudElem(self);
        self.hp_bg.alignX = "left";
        self.hp_bg.alignY = "bottom";
        self.hp_bg.horzAlign = "left";
        self.hp_bg.vertAlign = "bottom";
        self.hp_bg.x = 0;
        self.hp_bg.y = y_bottom_anchor;
        self.hp_bg setShader("white", bar_width + bg_padding, hp_height + shield_height + bg_padding);
        self.hp_bg.color = (0, 0, 0);
        self.hp_bg.alpha = 0.6;
        self.hp_bg.sort = 1;
    
        self.hp_bar = newClientHudElem(self);
        self.hp_bar.alignX = "left";
        self.hp_bar.alignY = "bottom";
        self.hp_bar.horzAlign = "left";
        self.hp_bar.vertAlign = "bottom";
        self.hp_bar.x = (bg_padding/2);
        self.hp_bar.y = y_bottom_anchor - (bg_padding/2); 
        self.hp_bar setShader("white", bar_width, hp_height);
        self.hp_bar.sort = 3;
    
        self.shield_bar = newClientHudElem(self);
        self.shield_bar.alignX = "left";
        self.shield_bar.alignY = "bottom";
        self.shield_bar.horzAlign = "left";
        self.shield_bar.vertAlign = "bottom";
        self.shield_bar.x = (bg_padding/2);
        self.shield_bar.y = y_bottom_anchor - (bg_padding/2) - hp_height; 
        self.shield_bar setShader("white", bar_width, shield_height);
        self.shield_bar.color = (0, 0.6, 1); 
        self.shield_bar.sort = 4;
    
    Keyhart1997 Offline
    Keyhart1997 Offline
    Keyhart1997
    wrote on last edited by
    #27

    i made a mistake in this post, it is from lines 614 to 665. the code is supposed to override the initalization of ezz_bars_hud().

    1 Reply Last reply
    0
    • GuardYaGrill Offline
      GuardYaGrill Offline
      GuardYaGrill
      wrote on last edited by GuardYaGrill
      #28

      Hm, i am not all too familiar with .gsc (C++) how could i have this define the host manually? Currently running this on a separate machine in a (docker) server environment, it currently does not check the "true" host correctly.

              // ------------------------------------------
              // HOST PERMISSION CHECK
              // ------------------------------------------
              if ( level.host_only_commands && !player isHost() )
              {
                  player iprintln("^1Error: Only the Server Host can use these commands.");
                  continue;
              }
      

      Perhaps check players usernames upon joining to determine the host or verify with iw4xadmin who server owner is?

      Apologies if this is a dumb question, probably been answered all over the Plutonium forums.

      1 Reply Last reply
      0
      • GuardYaGrill Offline
        GuardYaGrill Offline
        GuardYaGrill
        wrote on last edited by GuardYaGrill
        #29

        This has probably already been fixed but i re-positioned the HUD so that it sits in-between pop-ups in game, such as on Origins picking up the Gramophone/CD will no longer overlap. Small an minor change.

        // ==========================================
        // UNIFIED MODERN HUD
        // ==========================================
        
        modern_counters_hud()
        {
            self endon("disconnect");
            flag_wait("initial_blackscreen_passed");
        
            self.panel_bg = newClientHudElem(self);
            self.panel_bg.alignX = "left";
            self.panel_bg.alignY = "top";
            self.panel_bg.horzAlign = "user_left";
            self.panel_bg.vertAlign = "user_top";
            self.panel_bg.x = 5;
            self.panel_bg.y = 55;
            self.panel_bg setShader("white", 100, 52); 
            self.panel_bg.color = (0, 0, 0);
            self.panel_bg.alpha = 0.6;
            self.panel_bg.sort = 1;
        
            self.panel_line = newClientHudElem(self);
            self.panel_line.alignX = "left";
            self.panel_line.alignY = "top";
            self.panel_line.horzAlign = "user_left";
            self.panel_line.vertAlign = "user_top";
            self.panel_line.x = 5;
            self.panel_line.y = 55;
            self.panel_line setShader("white", 3, 52); 
            self.panel_line.color = (0, 0.6, 1);
            self.panel_line.alpha = 1;
            self.panel_line.sort = 2;
        
            self.zombie_text = newClientHudElem(self);
            self.zombie_text.alignX = "left";
            self.zombie_text.alignY = "top";
            self.zombie_text.horzAlign = "user_left";
            self.zombie_text.vertAlign = "user_top";
            self.zombie_text.x = 12;
            self.zombie_text.y = 58;
            self.zombie_text.fontscale = 1.2;
            self.zombie_text.color = (1, 1, 1);
            self.zombie_text.label = &"Zombies: ^5"; 
            self.zombie_text.sort = 3;
        
            self.round_time_text = newClientHudElem(self);
            self.round_time_text.alignX = "left";
            self.round_time_text.alignY = "top";
            self.round_time_text.horzAlign = "user_left";
            self.round_time_text.vertAlign = "user_top";
            self.round_time_text.x = 12;
            self.round_time_text.y = 73;
            self.round_time_text.fontscale = 1.2;
            self.round_time_text.color = (1, 1, 1);
            self.round_time_text.label = &"Round: ^5";
            self.round_time_text.sort = 3;
        
            self.game_time_text = newClientHudElem(self);
            self.game_time_text.alignX = "left";
            self.game_time_text.alignY = "top";
            self.game_time_text.horzAlign = "user_left";
            self.game_time_text.vertAlign = "user_top";
            self.game_time_text.x = 12;
            self.game_time_text.y = 88;
            self.game_time_text.fontscale = 1.2;
            self.game_time_text.color = (1, 1, 1);
            self.game_time_text.label = &"Game: ^5";
            self.game_time_text.sort = 3;
        
            self.game_time_text setTimerUp(0);
            self thread update_zombie_counter_modern();
            self thread update_round_timer_modern();
        }
        

        Lines 512-584
        Edit: perhaps my 1440p monitor caused this and wasn't an issue for 1080p monitors?

        1 Reply Last reply
        0
        • Shedletsky03 Offline
          Shedletsky03 Offline
          Shedletsky03
          wrote on last edited by Shedletsky03
          #30

          so uhh im the same Shedletsky_12 guy but i lost my account for like the 50th time and i finally got it to work

          1 Reply Last reply
          0
          • Erkik Erkik

            Hello everyone!

            After a lot of coding and testing (especially fighting with the Origins weapon mechanics lol), I am releasing a comprehensive GSC script designed to upgrade your Plutonium T6 Zombies server.

            This script transforms the vanilla BO2 experience into a more modern, smooth, and feature-rich game, perfect for playing with friends or hosting public lobbies. It features a custom UI, huge Quality of Life (QoL) improvements, and a robust chat command system that doesn't break the game.

            🌟 Key Features

            1. Modern Custom HUD (Warzone / Apex Style)

            • Replaces the old basic text counters with a sleek, unified dark panel.
            • Dynamic HP & Shield Bars: Features a dynamic health bar that changes color based on your HP. If you equip a shield, a slim cyan blue bar attaches directly on top of your health bar. If the shield breaks, the bar disappears seamlessly.
            • Unified Stats: Modernized Round Time, Game Time, and Zombie Remaining counters in the top left corner.

            2. Quality of Life (QoL) & Gameplay

            • Hitmarkers: Added satisfying multiplayer hitmarkers with sound (mpl_hit_alert) for every zombie hit.
            • BO3-Style Max Ammo: Grabbing a Max Ammo drop now instantly refills your current magazine too. No more reloading mid-panic!
            • Economy System: Players can share points using the !pay <name> <amount> command.

            3. Smart Scripting & Crash Prevention

            • Smart Shield Giver: The !shield command automatically detects the map you are playing on (Origins, Mob of the Dead, Tranzit) and gives you the correct shield to your D-pad without breaking your weapon inventory.
            • Origins Staff Bypass: The !staff <type> command safely gives you the upgraded staff of your choice. It correctly injects the hidden "Sekhmet's Vigor" melee weapon so the animations don't crash or bug your hands.

            💬 Chat Commands

            Public Commands:

            • !help - Displays available commands.
            • !pay <player> <amount> - Transfer points to another player (e.g., !pay juan 1000).

            Host / Utility Commands:

            • !god / !ignore (Invisibility) / !speed
            • !puntos / !ammo / !perks / !allperks
            • !pap - Instantly Pack-a-Punches the weapon in your hands.
            • !drop <ammo/nuke/insta/fire/blood> - Spawns a specific power-up.
            • !shield - Gives the map-specific shield.

            Admin / Easter Egg Tools:

            • !bring - Teleports all players to your exact location.
            • !killall - Wipes all alive zombies instantly.
            • !round <number> - Force skips the game to a specific round.

            Weapon Spawns:

            • !mk2, !galil, !an94, !ms (Mustang & Sally), !monkeys
            • Origins Exclusives: !staff <fire/ice/lightning/wind>

            ⚙️ How to Install

            Simply compile or drop the .gsc file into your C:\Users\USER\AppData\Local\Plutonium\storage\t6\raw\scripts\zm folder and start your server. Ensure you are the host to use the restricted commands!

            Enjoy, and let me know if you find any bugs or have suggestions for future updates!

            💻 Source Code & Installation

            How to Install:

            1. Click the link above to view the code. You can copy it or click the "Download ZIP" button.
            2. Save the code as a .gsc file (for example, _ezz_server.gsc).
            3. Place the file inside your C:\Users\USER\AppData\Local\Plutonium\storage\t6\raw\scripts\zm folder.
            4. Start your server! (Remember, you need to be the Host to use the admin/cheat commands).

            💻 Full Source Code

            Copy the code below and save it as a .gsc file (for example, _ezz_server.gsc) inside your C:\Users\USER\AppData\Local\Plutonium\storage\t6\raw\scripts\zm folder.

            #include maps\mp\_utility;
            #include common_scripts\utility;
            #include maps\mp\gametypes_zm\_hud_util;
            #include maps\mp\gametypes_zm\_hud_message;
            #include maps\mp\zombies\_zm_utility;
            #include maps\mp\zombies\_zm_score;
            #include maps\mp\zombies\_zm_perks;
            #include maps\mp\zombies\_zm_weapons;
            #include maps\mp\zombies\_zm_powerups;
            
            init()
            {
                // ==========================================
                // PRECACHE TEXTURES (Prevents crashing)
                // ==========================================
                PrecacheShader("white");
                PrecacheShader("damage_feedback"); 
            
                // ==========================================
                // SERVER CONFIGURATION
                // ==========================================
                level.perk_purchase_limit = 10; 
                level.host_only_commands = true; // true = Host Only, false = Everyone
            
                level thread onPlayerConnect();
                level thread chat_command_listener();
                level thread remove_quick_revive_limit(); 
                level thread global_hitmarker_manager(); 
            }
            
            onPlayerConnect()
            {
                for (;;)
                {
                    level waittill("connecting", player);
                    player thread onplayerspawned();
                }
            }
            
            onplayerspawned()
            {
                self endon("disconnect");
                
                // Initialize HUD and monitors only on the first spawn
                if(!isDefined(self.hud_initiated))
                {
                    self thread modern_counters_hud(); 
                    self thread ezz_bars_hud();        
                    self thread auto_reload_monitor(); 
                    self.hud_initiated = true;
                }
                
                for (;;)
                {
                    self waittill("spawned_player");
                    
                    self iprintln("^6[EZZ Server] ^7Welcome, ^2" + self.name);
                    self iprintln("Type ^3!help ^7in chat to see the commands.");
            
                    if(!isDefined(self.speed_buff_active) || self.speed_buff_active == false)
                    {
                        self setMoveSpeedScale(1.0); 
                    }
                }
            }
            
            // ==========================================
            // CHAT COMMAND SYSTEM
            // ==========================================
            chat_command_listener()
            {
                level endon("end_game");
            
                for(;;)
                {
                    level waittill("say", message, player);
                    message = tolower(message);
                    args = strtok(message, " ");
                    if (args.size == 0) continue;
                    command = args[0];
            
                    // ------------------------------------------
                    // PUBLIC COMMANDS
                    // ------------------------------------------
                    if(command == "!help" || command == "!cmds")
                    {
                        player iprintln("^3Public: ^7!pay <player> <points>");
                        player iprintln("^3Cheats: ^7!god, !ammo, !perks, !allperks, !points, !ignore");
                        player iprintln("^3Utility: ^7!pap, !drop, !shield, !bring, !round <n>, !killall");
                        player iprintln("^3Weapons: ^7!mk2, !galil, !an94, !ms, !monkeys");
                        player iprintln("^3Origins: ^7!staff <fire/ice/lightning/wind>");
                        continue;
                    }
            
                    if(command == "!pay" || command == "!dar")
                    {
                        if(args.size >= 3)
                        {
                            target_name = args[1];
                            amount = int(args[2]);
                            if(amount > 0 && player.score >= amount)
                            {
                                target = get_player_by_name(target_name);
                                if(isDefined(target) && target != player)
                                {
                                    player maps\mp\zombies\_zm_score::minus_to_player_score(amount);
                                    target maps\mp\zombies\_zm_score::add_to_player_score(amount);
                                    player iprintln("^2You sent " + amount + " points to " + target.name);
                                    target iprintln("^2You received " + amount + " points from " + player.name + "!");
                                }
                                else { player iprintln("^1Error: Player not found."); }
                            }
                            else { player iprintln("^1Error: Not enough points."); }
                        }
                        continue;
                    }
            
                    // ------------------------------------------
                    // HOST PERMISSION CHECK
                    // ------------------------------------------
                    if ( level.host_only_commands && !player isHost() )
                    {
                        player iprintln("^1Error: Only the Server Host can use these commands.");
                        continue;
                    }
            
                    // ------------------------------------------
                    // ORIGINS STAFFS FIX
                    // ------------------------------------------
                    if(command == "!staff" || command == "!baston")
                    {
                        if ( level.script != "zm_tomb" )
                        {
                            player iprintln("^1Error: Staffs are only available in Origins.");
                            continue;
                        }
            
                        if(args.size < 2)
                        {
                            player iprintln("^3Usage: ^7!staff <fire/ice/lightning/wind>");
                            continue;
                        }
            
                        staff_type = tolower(args[1]);
                        weapon_to_give = "none";
            
                        // Treyarch internal names mapped
                        if(staff_type == "fire" || staff_type == "fuego") weapon_to_give = "staff_fire_upgraded_zm";
                        else if(staff_type == "ice" || staff_type == "water" || staff_type == "hielo") weapon_to_give = "staff_water_upgraded_zm";
                        else if(staff_type == "lightning" || staff_type == "rayo") weapon_to_give = "staff_lightning_upgraded_zm";
                        else if(staff_type == "wind" || staff_type == "air" || staff_type == "viento") weapon_to_give = "staff_air_upgraded_zm";
            
                        if(weapon_to_give != "none")
                        {
                            // SECRET FIX: Give the revive weapon to prevent animation crash
                            if ( !player HasWeapon("staff_revive_zm") )
                            {
                                player GiveWeapon("staff_revive_zm");
                            }
                            
                            // Safe native method for weapon swap
                            player maps\mp\zombies\_zm_weapons::weapon_give(weapon_to_give);
                            player SwitchToWeapon(weapon_to_give);
                            
                            player iprintln("^2Upgraded Staff equipped instantly!");
                        }
                        else
                        {
                            player iprintln("^1Error: Invalid type. Use: fire, ice, lightning, or wind.");
                        }
                    }
            
                    // ------------------------------------------
                    // OTHER COMMANDS
                    // ------------------------------------------
                    else if(command == "!mk2" || command == "!mark2")
                    {
                        if ( isDefined( level.zombie_weapons["raygun_mark2_zm"] ) || isDefined( level.zombie_weapons["raygun_mark2_upgraded_zm"] ) || level.script == "zm_tomb" )
                        {
                            player maps\mp\zombies\_zm_weapons::weapon_give("raygun_mark2_zm");
                            player SwitchToWeapon("raygun_mark2_zm");
                            player iprintln("^2Ray Gun Mark II equipped!");
                        } else { player iprintln("^1Error: Mark II is not available on this map."); }
                    }
                    else if(command == "!bring" || command == "!traer")
                    {
                        players = get_players();
                        foreach(p in players)
                        {
                            if(p != player)
                            {
                                p SetOrigin(player.origin);
                                p SetPlayerAngles(player.angles);
                            }
                        }
                        player iprintln("^2All players teleported to your position!");
                    }
                    else if(command == "!killall" || command == "!matar")
                    {
                        zombies = GetAiSpeciesArray( "axis", "all" );
                        if(isDefined(zombies))
                        {
                            foreach(z in zombies) { z DoDamage(z.health + 666, z.origin, player); }
                        }
                        player iprintln("^2All zombies eliminated!");
                    }
                    else if(command == "!round" || command == "!ronda")
                    {
                        if(args.size > 1)
                        {
                            new_round = int(args[1]);
                            if(new_round > 0)
                            {
                                level.zombie_total = 0;
                                level.round_number = new_round - 1; 
                                zombies = GetAiSpeciesArray( "axis", "all" );
                                if(isDefined(zombies))
                                {
                                    foreach(z in zombies) { z DoDamage(z.health + 666, z.origin, player); }
                                }
                                player iprintln("^2Forcing skip to round " + new_round + "!");
                            }
                        }
                    }
                    else if(command == "!shield" || command == "!escudo")
                    {
                        shield_name = "none";
                        if ( level.script == "zm_tomb" ) shield_name = "tomb_shield_zm";           
                        else if ( level.script == "zm_prison" ) shield_name = "alcatraz_shield_zm"; 
                        else if ( level.script == "zm_transit" ) shield_name = "riotshield_zm";     
            
                        if(shield_name != "none")
                        {
                            player GiveWeapon( shield_name );
                            player SetActionSlot( 3, "weapon", shield_name ); 
                            player iprintln("^2Shield equipped instantly!");
                        }
                        else { player iprintln("^1Error: No shields available on this map."); }
                    }
                    else if(command == "!galil")
                    {
                        player maps\mp\zombies\_zm_weapons::weapon_give("galil_zm");
                        player SwitchToWeapon("galil_zm");
                        player iprintln("^2Galil equipped!");
                    }
                    else if(command == "!an94")
                    {
                        player maps\mp\zombies\_zm_weapons::weapon_give("an94_zm");
                        player SwitchToWeapon("an94_zm");
                        player iprintln("^2AN-94 equipped!");
                    }
                    else if(command == "!ms" || command == "!mustang")
                    {
                        player maps\mp\zombies\_zm_weapons::weapon_give("m1911_upgraded_zm");
                        player SwitchToWeapon("m1911_upgraded_zm");
                        player iprintln("^2Mustang & Sally ready!");
                    }
                    else if(command == "!monkeys" || command == "!monos")
                    {
                        player maps\mp\zombies\_zm_weapons::weapon_give("cymbal_monkey_zm");
                        player iprintln("^2Space Monkeys received!");
                    }
                    else if(command == "!raygun")
                    {
                        player maps\mp\zombies\_zm_weapons::weapon_give("ray_gun_zm");
                        player SwitchToWeapon("ray_gun_zm");
                        player iprintln("^2Ray Gun equipped!");
                    }
                    else if(command == "!pap")
                    {
                        current_weapon = player GetCurrentWeapon();
                        if(current_weapon != "none" && current_weapon != "knife_zm")
                        {
                            upgraded_weapon = player maps\mp\zombies\_zm_weapons::get_upgrade_weapon( current_weapon );
                            if(isDefined(upgraded_weapon))
                            {
                                player TakeWeapon(current_weapon);
                                player maps\mp\zombies\_zm_weapons::weapon_give(upgraded_weapon);
                                player iprintln("^2Weapon upgraded instantly!");
                            } else { player iprintln("^1This weapon cannot be upgraded."); }
                        }
                    }
                    else if(command == "!drop")
                    {
                        drop_type = "full_ammo"; 
                        if (args.size > 1)
                        {
                            if(args[1] == "ammo") drop_type = "full_ammo";
                            else if(args[1] == "nuke") drop_type = "nuke";
                            else if(args[1] == "insta") drop_type = "insta_kill";
                            else if(args[1] == "fire") drop_type = "fire_sale";
                            else if(args[1] == "blood") drop_type = "zombie_blood";
                        }
                        if ( isDefined( level.zombie_powerups ) && isDefined( level.zombie_powerups[drop_type] ) )
                        {
                            maps\mp\zombies\_zm_powerups::specific_powerup_drop( drop_type, player.origin );
                            player iprintln("^2Spawning Drop: " + drop_type);
                        } else { player iprintln("^1Drop not supported on this map."); }
                    }
                    else if(command == "!ignore")
                    {
                        if(!isDefined(player.ignoreme) || player.ignoreme == false) {
                            player.ignoreme = true;
                            player iprintln("^2Invisibility ENABLED.");
                        } else {
                            player.ignoreme = false;
                            player iprintln("^1Invisibility DISABLED.");
                        }
                    }
                    else if(command == "!speed")
                    {
                        if(!isDefined(player.speed_buff_active) || player.speed_buff_active == false)
                        {
                            player.speed_buff_active = true;
                            player thread maintain_speed(); 
                            player iprintln("^2Extra Speed ENABLED!");
                        } else {
                            player notify("stop_speed_buff"); 
                            player.speed_buff_active = false;
                            player setMoveSpeedScale(1.0);
                            player iprintln("^1Extra Speed DISABLED.");
                        }
                    }
                    else if(command == "!god")
                    {
                        if(!isDefined(player.godmode_active) || player.godmode_active == false) 
                        {
                            player.godmode_active = true;
                            player EnableInvulnerability(); 
                            player thread brute_force_godmode(); 
                            player iprintln("^2Godmode ENABLED!");
                        } else {
                            player notify("stop_godmode"); 
                            player.godmode_active = false;
                            player DisableInvulnerability();
                            player iprintln("^1Godmode DISABLED.");
                        }
                    }
                    else if(command == "!points" || command == "!puntos")
                    {
                        points_to_give = 50000; 
                        if (args.size > 1) { points_to_give = int(args[1]); }
                        player maps\mp\zombies\_zm_score::add_to_player_score( points_to_give );
                        player iprintln("^2You received " + points_to_give + " points!");
                    }
                    else if(command == "!ammo")
                    {
                        weapons = player GetWeaponsList( true );
                        foreach ( weapon in weapons )
                        {
                            player GiveMaxAmmo( weapon );
                            player SetWeaponAmmoClip( weapon, WeaponClipSize( weapon ) );
                        }
                        player iprintln("^2Max Ammo received!");
                    }
                    else if(command == "!perks")
                    {
                        player maps\mp\zombies\_zm_perks::give_perk( "specialty_armorvest", false );   
                        player maps\mp\zombies\_zm_perks::give_perk( "specialty_longersprint", false ); 
                        player maps\mp\zombies\_zm_perks::give_perk( "specialty_fastreload", false );   
                        player maps\mp\zombies\_zm_perks::give_perk( "specialty_quickrevive", false );  
                        player iprintln("^24 Basic Perks received!");
                    }
                    else if(command == "!allperks")
                    {
                        lista_perks = [];
                        lista_perks[0] = "specialty_armorvest";               
                        lista_perks[1] = "specialty_quickrevive";             
                        lista_perks[2] = "specialty_fastreload";              
                        lista_perks[3] = "specialty_rof";                     
                        lista_perks[4] = "specialty_longersprint";            
                        lista_perks[5] = "specialty_flakjacket";              
                        lista_perks[6] = "specialty_deadshot";                
                        lista_perks[7] = "specialty_additionalprimaryweapon"; 
                        lista_perks[8] = "specialty_grenadepulldeath";        
                        
                        for ( i = 0; i < lista_perks.size; i++ )
                        {
                            if ( !player hasPerk( lista_perks[i] ) )
                            {
                                player maps\mp\zombies\_zm_perks::give_perk( lista_perks[i], false );
                                wait 0.1; 
                            }
                        }
                        player iprintln("^2Full Perk arsenal received!");
                    }
                }
            }
            
            // ==========================================
            // QoL FEATURES & UTILITIES
            // ==========================================
            
            // Get player by name (For !pay command)
            get_player_by_name(name)
            {
                players = get_players();
                foreach(p in players)
                {
                    if(issubstr(tolower(p.name), tolower(name))) return p;
                }
                return undefined;
            }
            
            // Auto-Reload on Max Ammo pickup
            auto_reload_monitor()
            {
                self endon("disconnect");
                for(;;)
                {
                    self waittill( "zmb_max_ammo" ); 
                    weapons = self GetWeaponsList(true);
                    foreach(weapon in weapons)
                    {
                        self SetWeaponAmmoClip(weapon, WeaponClipSize(weapon));
                    }
                }
            }
            
            // Global Hitmarker Manager
            global_hitmarker_manager()
            {
                level endon("end_game");
                for(;;)
                {
                    zombies = GetAiSpeciesArray("axis", "all");
                    foreach(z in zombies)
                    {
                        if(!isDefined(z.has_hitmarker_monitor))
                        {
                            z.has_hitmarker_monitor = true;
                            z thread monitor_zombie_damage();
                        }
                    }
                    wait 1; 
                }
            }
            
            // Monitor damage for each zombie
            monitor_zombie_damage()
            {
                self endon("death");
                for(;;)
                {
                    self waittill("damage", amount, attacker, dir, point, type);
                    if(isDefined(attacker) && isPlayer(attacker))
                    {
                        attacker thread show_hitmarker();
                    }
                }
            }
            
            // Display hitmarker and play sound
            show_hitmarker()
            {
                if(!isDefined(self.hitmarker_hud))
                {
                    self.hitmarker_hud = newClientHudElem(self);
                    self.hitmarker_hud.alignX = "center";
                    self.hitmarker_hud.alignY = "middle";
                    self.hitmarker_hud.horzAlign = "center";
                    self.hitmarker_hud.vertAlign = "middle";
                    self.hitmarker_hud.alpha = 0;
                    self.hitmarker_hud setShader("damage_feedback", 24, 48);
                }
                
                self.hitmarker_hud.alpha = 1;
                self playlocalsound("mpl_hit_alert"); 
                self.hitmarker_hud fadeOverTime(0.5);
                self.hitmarker_hud.alpha = 0;
            }
            
            // ==========================================
            // BACKGROUND FUNCTIONS
            // ==========================================
            brute_force_godmode()
            {
                self endon("disconnect");
                self endon("stop_godmode");
                level endon("end_game");
            
                for(;;)
                {
                    self.health = self.maxhealth;
                    wait 0.05; 
                }
            }
            
            remove_quick_revive_limit()
            {
                level endon("end_game");
                for(;;)
                {
                    if ( isDefined( level.solo_lives_given ) ) { level.solo_lives_given = 0; }
                    wait 1; 
                }
            }
            
            maintain_speed()
            {
                self endon("disconnect");
                self endon("stop_speed_buff"); 
                level endon("end_game");
            
                for(;;)
                {
                    if(self getMoveSpeedScale() < 1.5) { self setMoveSpeedScale(1.5); }
                    wait 0.1; 
                }
            }
            
            // ==========================================
            // UNIFIED MODERN HUD
            // ==========================================
            
            modern_counters_hud()
            {
                self endon("disconnect");
                flag_wait("initial_blackscreen_passed");
            
                self.panel_bg = newClientHudElem(self);
                self.panel_bg.alignX = "left";
                self.panel_bg.alignY = "top";
                self.panel_bg.horzAlign = "user_left";
                self.panel_bg.vertAlign = "user_top";
                self.panel_bg.x = 5;
                self.panel_bg.y = 5;
                self.panel_bg setShader("white", 100, 52); 
                self.panel_bg.color = (0, 0, 0);
                self.panel_bg.alpha = 0.6;
                self.panel_bg.sort = 1;
            
                self.panel_line = newClientHudElem(self);
                self.panel_line.alignX = "left";
                self.panel_line.alignY = "top";
                self.panel_line.horzAlign = "user_left";
                self.panel_line.vertAlign = "user_top";
                self.panel_line.x = 5;
                self.panel_line.y = 5;
                self.panel_line setShader("white", 3, 52); 
                self.panel_line.color = (0, 0.6, 1);
                self.panel_line.alpha = 1;
                self.panel_line.sort = 2;
            
                self.zombie_text = newClientHudElem(self);
                self.zombie_text.alignX = "left";
                self.zombie_text.alignY = "top";
                self.zombie_text.horzAlign = "user_left";
                self.zombie_text.vertAlign = "user_top";
                self.zombie_text.x = 12;
                self.zombie_text.y = 8;
                self.zombie_text.fontscale = 1.2;
                self.zombie_text.color = (1, 1, 1);
                self.zombie_text.label = &"Zombies: ^5"; 
                self.zombie_text.sort = 3;
            
                self.round_time_text = newClientHudElem(self);
                self.round_time_text.alignX = "left";
                self.round_time_text.alignY = "top";
                self.round_time_text.horzAlign = "user_left";
                self.round_time_text.vertAlign = "user_top";
                self.round_time_text.x = 12;
                self.round_time_text.y = 23;
                self.round_time_text.fontscale = 1.2;
                self.round_time_text.color = (1, 1, 1);
                self.round_time_text.label = &"Round: ^5";
                self.round_time_text.sort = 3;
            
                self.game_time_text = newClientHudElem(self);
                self.game_time_text.alignX = "left";
                self.game_time_text.alignY = "top";
                self.game_time_text.horzAlign = "user_left";
                self.game_time_text.vertAlign = "user_top";
                self.game_time_text.x = 12;
                self.game_time_text.y = 38;
                self.game_time_text.fontscale = 1.2;
                self.game_time_text.color = (1, 1, 1);
                self.game_time_text.label = &"Game: ^5";
                self.game_time_text.sort = 3;
            
                self.game_time_text setTimerUp(0);
                self thread update_zombie_counter_modern();
                self thread update_round_timer_modern();
            }
            
            update_zombie_counter_modern()
            {
                self endon("disconnect");
                for (;;)
                {
                    self.zombie_text setvalue(level.zombie_total + get_current_zombie_count());
                    wait 0.05;
                }
            }
            
            update_round_timer_modern()
            {
                self endon("disconnect");
                for (;;)
                {
                    self.round_time_text setTimerUp(0);
                    start_time = GetTime() / 1000;
                    level waittill("end_of_round");
            
                    end_time = GetTime() / 1000;
                    time_elapsed = end_time - start_time;
            
                    self.round_time_text setTimer(time_elapsed);
                }
            }
            
            ezz_bars_hud()
            {
                self endon("disconnect");
                flag_wait("initial_blackscreen_passed");
            
                bar_width = 130;
                hp_height = 8;
                shield_height = 3;  
                bg_padding = 4;
                y_bottom_anchor = -40; 
            
                self.hp_text = newClientHudElem(self);
                self.hp_text.alignX = "center";
                self.hp_text.alignY = "bottom";
                self.hp_text.horzAlign = "center";
                self.hp_text.vertAlign = "bottom";
                self.hp_text.x = 0;
                self.hp_text.y = y_bottom_anchor - hp_height - shield_height - bg_padding - 2; 
                self.hp_text.fontscale = 1.1;
                self.hp_text.label = &"^5HP / SHIELD";
                self.hp_text.sort = 2;
            
                self.hp_bg = newClientHudElem(self);
                self.hp_bg.alignX = "center";
                self.hp_bg.alignY = "bottom";
                self.hp_bg.horzAlign = "center";
                self.hp_bg.vertAlign = "bottom";
                self.hp_bg.x = 0;
                self.hp_bg.y = y_bottom_anchor;
                self.hp_bg setShader("white", bar_width + bg_padding, hp_height + shield_height + bg_padding);
                self.hp_bg.color = (0, 0, 0);
                self.hp_bg.alpha = 0.6;
                self.hp_bg.sort = 1;
            
                self.hp_bar = newClientHudElem(self);
                self.hp_bar.alignX = "left";
                self.hp_bar.alignY = "bottom";
                self.hp_bar.horzAlign = "center";
                self.hp_bar.vertAlign = "bottom";
                self.hp_bar.x = -(bar_width/2);
                self.hp_bar.y = y_bottom_anchor - (bg_padding/2); 
                self.hp_bar setShader("white", bar_width, hp_height);
                self.hp_bar.sort = 3;
            
                self.shield_bar = newClientHudElem(self);
                self.shield_bar.alignX = "left";
                self.shield_bar.alignY = "bottom";
                self.shield_bar.horzAlign = "center";
                self.shield_bar.vertAlign = "bottom";
                self.shield_bar.x = -(bar_width/2);
                self.shield_bar.y = y_bottom_anchor - (bg_padding/2) - hp_height; 
                self.shield_bar setShader("white", bar_width, shield_height);
                self.shield_bar.color = (0, 0.6, 1); 
                self.shield_bar.sort = 4;
            
                for(;;)
                {
                    current_health = self.health;
                    max_health = self.maxhealth;
                    
                    if(max_health <= 0) max_health = 100;
                    health_percent = current_health / max_health;
                    
                    hp_visual_width = int(bar_width * health_percent);
                    if(hp_visual_width < 1) hp_visual_width = 1; 
            
                    if (health_percent >= 1.0) {
                        self.hp_bar.color = (0, 1, 0); 
                        self.hp_bar.alpha = 1;
                    } else if (health_percent > 0.4) {
                        self.hp_bar.color = (1, 1, 0); 
                        self.hp_bar.alpha = 1;
                    } else {
                        self.hp_bar.color = (1, 0, 0); 
                        self.hp_bar.alpha = (int(GetTime() / 250) % 2) ? 0.3 : 1; 
                    }
            
                    self.hp_bar setShader("white", hp_visual_width, hp_height);
            
                    if ( self HasWeapon("riotshield_zm") || self HasWeapon("alcatraz_shield_zm") || self HasWeapon("tomb_shield_zm") )
                    {
                        self.shield_bar.alpha = 1;
                    }
                    else
                    {
                        self.shield_bar.alpha = 0;
                    }
            
                    wait 0.05; 
                }
            }
            
            Tercius Offline
            Tercius Offline
            Tercius
            wrote on last edited by
            #31
            This post is deleted!
            1 Reply Last reply
            0
            • DA663R Offline
              DA663R Offline
              DA663R
              wrote on last edited by
              #32
              This post is deleted!
              1 Reply Last reply
              0
              • Erkik Erkik

                The link is not avaible now, i dont have enought reputation, but guys you have the full source code.

                Dutch828 Offline
                Dutch828 Offline
                Dutch828
                wrote on last edited by
                #33

                Erkik If the link is not available how do I download it and put it in the directory so I can play with it?

                1 Reply Last reply
                0
                • DA663R Offline
                  DA663R Offline
                  DA663R
                  wrote on last edited by DA663R
                  #34
                  This post is deleted!
                  1 Reply Last reply
                  0
                  • thekingfunk Offline
                    thekingfunk Offline
                    thekingfunk
                    wrote last edited by
                    #35

                    I have the bar and the timer and all that, but the commands don't appear to be working, am i typing them in wrong? eg. both !ammo and ammo dont work

                    1 Reply Last reply
                    0
                    • byW4Ve Offline
                      byW4Ve Offline
                      byW4Ve
                      wrote last edited by
                      #36

                      Erkik sagte:

                      !god

                      Commands are not working even when i enable cheats 😞

                      1 Reply Last reply
                      0

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • 1
                      • 2
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Unread 0
                      • Recent
                      • Popular
                      • Users
                      • Donate