UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

QED Random Weapon Power-Up

broken avatar :(
Created 9 months ago
by marinescdude
0 Members and 1 Guest are viewing this topic.
515 views
broken avatar :(
×
broken avatar :(
Location: gb
Date Registered: 1 January 2016
Last active: 4 days ago
Posts
11
Respect
Forum Rank
Legless Crawler
Primary Group
Member
My Contact & Social Links
More
 

QED Random Weapon Power-Up

China Lake from Skye's Weapon Ports for example only
www.mediafire.com

To-Do:
  • Make weapon-giving power-up specific rather than globally set
  • Add second weaponmodel to dual-wield weapon power-ups
  • Apply PaP camo to weapon models
Credits
Serious for decompiled scripts: https://github.com/shiversoftdev/t7-source
TescoFresco for reference on how to init power-up scripts: https://github.com/tescfresc/TFs-Zombie-Options
 
Quick Reference
Code Snippet
cpp
//_zm_weap_quantum_bomb.gsc

function init()
{
    ...
    quantum_bomb_register_result("random_weapon_powerup", &quantum_bomb_random_weapon_powerup_result, 60);
    ...
}

function quantum_bomb_random_weapon_powerup_result(position, player)
{
    keys = array::randomize( GetArrayKeys( level.zombie_weapons ) );
    if (IsDefined(level.CustomRandomWeaponWeights))
    {
        keys = player [[level.CustomRandomWeaponWeights]](keys);
    }
    w_weapon = keys[0];
    for ( i = 0; i < keys.size; i++ )
    {
        if ( zm_weapons::get_is_in_box( keys[i] ) )
        {
            w_weapon = keys[i];
            break;
        }
    }

    if(zm_weapons::can_upgrade_weapon(w_weapon) && !RandomInt(4))
        w_weapon = zm_weapons::get_upgrade_weapon(w_weapon);
   
    level.zombie_powerups["random_weapon"].weapon = w_weapon;
   
    dw_weapon = w_weapon.dualWieldWeapon;
    if ( dw_weapon != level.weaponNone )
        level.zombie_powerups["random_weapon"].model_name = dw_weapon.worldmodel;
    else
        level.zombie_powerups["random_weapon"].model_name = w_weapon.worldmodel;

    level thread zm_powerups::specific_powerup_drop("random_weapon", position);
}
Code Snippet
cpp
//_zm_powerup_random_weapon.gsc

#using scripts\codescripts\struct;
#using scripts\shared\ai\zombie_death;
#using scripts\shared\array_shared;
#using scripts\shared\clientfield_shared;
#using scripts\shared\flag_shared;
#using scripts\shared\flagsys_shared;
#using scripts\shared\laststand_shared;
#using scripts\shared\system_shared;
#using scripts\shared\util_shared;
#using scripts\zm\_zm_blockers;
#using scripts\zm\_zm_devgui;
#using scripts\zm\_zm_magicbox;
#using scripts\zm\_zm_melee_weapon;
#using scripts\zm\_zm_pers_upgrades;
#using scripts\zm\_zm_pers_upgrades_functions;
#using scripts\zm\_zm_powerups;
#using scripts\zm\_zm_score;
#using scripts\zm\_zm_spawner;
#using scripts\zm\_zm_utility;
#using scripts\zm\_zm_weapons;

#namespace zm_powerup_random_weapon;

//REGISTER_SYSTEM( "zm_powerup_random_weapon", &__init__, undefined )

/*function autoexec __init__sytem__()
{
    system::register("zm_powerup_random_weapon", &__init__, undefined, undefined);
}*/

function init()
{
    zm_powerups::register_powerup("random_weapon", &give_random_weapon, &setup_random_weapon);
    if(tolower(getdvarstring("g_gametype")) != "zcleansed")
    {
        zm_powerups::add_zombie_powerup("random_weapon", "zombie_pickup_minigun", &"", &zm_powerups::func_should_never_drop, 1, 0, 0);
        zm_powerups::powerup_set_statless_powerup("random_weapon");
        zm_powerups::powerup_set_player_specific("random_weapon", 1);
    }
}

function give_random_weapon(e_player)
{
    w_weapon = level.zombie_powerups["random_weapon"].weapon;
    e_player notify(#"hash_31471387");
    e_player zm_weapons::weapon_give(w_weapon, 0, 0, 1);
    wait(0.1);
}

//make sure no missing tags on weapon models
function setup_random_weapon()
{
    self useweaponmodel( level.zombie_powerups["random_weapon"].weapon, level.zombie_powerups["random_weapon"].model_name );
}

Code Snippet
cpp
//_zm_powerup_random_weapon.csc

#using scripts\codescripts\struct;
#using scripts\shared\clientfield_shared;
#using scripts\shared\system_shared;
#using scripts\zm\_zm_powerups;

#insert scripts\shared\shared.gsh;

#namespace zm_powerup_random_weapon;

REGISTER_SYSTEM( "zm_powerup_random_weapon", &__init__, undefined )

/*function autoexec __init__sytem__()
{
    system::register("zm_powerup_random_weapon", &__init__, undefined, undefined);
}*/

function __init__()
{
    zm_powerups::include_zombie_powerup("random_weapon");
    zm_powerups::add_zombie_powerup("random_weapon");
}

broken avatar :(
×
broken avatar :(
Location: gb
Date Registered: 1 January 2016
Last active: 4 days ago
Posts
11
Respect
Forum Rank
Legless Crawler
Primary Group
Member
My Contact & Social Links
More
Okay good to see there have indeed been random weapon power-ups publicly available for use, still some changes from natesmithzombies' version (download from KillJoy's megathread) that are required:
 
Code Snippet
cpp
//nsz_powerup_weapon.csc/zm_powerup_random_weapon.csc

//change "weapon" with "random_weapon" so hacker scripts know it's not hackable

function __init__()
{
    zm_powerups::include_zombie_powerup( "random_weapon" );
    zm_powerups::add_zombie_powerup( "random_weapon" );
}
Code Snippet
cpp
//nsz_powerup_weapon.gsc/zm_powerup_random_weapon.gsc

zm_powerups::register_powerup( "random_weapon", &grab_weapon, &setup_weapon );
if( ToLower( GetDvarString( "g_gametype" ) ) != "zcleansed" )
{
    zm_powerups::add_zombie_powerup( "random_weapon", "tag_origin", "", &zm_powerups::func_should_never_drop, POWERUP_ONLY_AFFECTS_GRABBER, !POWERUP_ANY_TEAM, !POWERUP_ZOMBIE_GRABBABLE );
    zm_powerups::powerup_set_statless_powerup("random_weapon");
    zm_powerups::powerup_set_player_specific("random_weapon", 1);
}
Code Snippet
cpp
//nsz_powerup_weapon.gsc/zm_powerup_random_weapon.gsc

//remove weapon_lookup_table function above this, func_should_drop_weapon below this

function setup_weapon( player )
{
    //level.weapon_lookup_table = array::randomize( level.weapon_lookup_table );
    keys = array::randomize( GetArrayKeys( level.zombie_weapons ) );
    if (IsDefined(level.CustomRandomWeaponWeights))
    {
        keys = player [[level.CustomRandomWeaponWeights]](keys);
    }
    weapon_to_give = keys[0];
    //pap_triggers = zm_pap_util::get_triggers();
    for ( i = 0; i < keys.size; i++ )
    {
        if ( zm_weapons::get_is_in_box( keys[i] ) )
        //if ( zm_magicbox::treasure_chest_CanPlayerReceiveWeapon( player, keys[i], pap_triggers ) )
        {
            weapon_to_give = keys[i];
            break;
        }
    }

    //w_weapon = zm_magicbox::treasure_chest_ChooseWeightedRandomWeapon();
    if(zm_weapons::can_upgrade_weapon(weapon_to_give) && !RandomInt(4))
        weapon_to_give = zm_weapons::get_upgrade_weapon(weapon_to_give);
   
    //weapon_to_give = level.weapon_lookup_table[0];
    world_gun = GetWeaponWorldModel(weapon_to_give);
    //self SetModel( world_gun );
    self useweaponmodel( weapon_to_give, world_gun );
    self.weapon_to_give = weapon_to_give;
)
Code Snippet
cpp
//nsz_powerup_weapon.gsc/zm_powerup_random_weapon.gsc

//replace GiveWeapon call with zm_weapons::weapon_give, other no. of weapons/Mule Kick checks are unnecessary

function grab_weapon( player )
{
    weaps = player getweaponslistprimaries();
    gun = self.weapon_to_give;
   
    if( player does_player_have(gun) )
        return;
   
    player zm_weapons::weapon_give( gun, zm_weapons::is_weapon_upgraded(gun) );
}

 
 
 

 
Loading ...