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

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - alaurenc9

After working as much as possible for the past year, dealing with the shit going on in school and my life, I am finally glad to release

xSanchez78's Der Riese Mod

MOD NEEDS T4M TO PLAY: http://ugx-mods.com/forum/index.php/topic,8092.0.html

MEGA:

Mediafire:

Some Images:
Spoiler: click to open...
Some Electrical Weapons:







Hell's Retriever/Redeemer:








Check Out The Hacker From Moon:












Check Out This Sweet Electric Pap Camo:




Weapons List:
World at War
- PPSH
Black Ops 1
- CZ75 Dual Wield
- Spas 12
- Famas
- HK21
- AUG
- M72 Law
- Crossbow Explosive Tip
- MPL
- Stakeout
- L96A1
Black Ops 2
- Executioner
- M1911
- Ballista
- M14
- B23R
- Five Seven Dual Wield
- PDW57
- AN94
- M1927
- MP5
- RPD
- Galil
- M16
- Scorpion Evo
- Ray Gun
- MTAR
- DSR50
- Python
- Ray Gun Mark 2
- M27
- FN FAL
- HAMR
- S12
- SVU

Features:
- Black Ops 1/2/3 perks ( no Vulture Aid :( )
- Hacker
- Dive To Prone
- Black Ops 2 HUD
- A Main Easter Egg To Beat The Game
- Hell's Retriever/Redeemer
- Black Ops 1/2 Powerups
- A Second Pack-A-Punch That Makes Guns Shoot Electric Rounds
- Black Ops 2 Perma Perks ( Saves Over Games )

Easter Egg Steps:
Spoiler: click to open...
- Step 1: Link all teleporters
   - If you don't know how to do this....

- Step 2: Get Monkeys
   - Get monkeys from the mystery box

- Step 3: Get Hacker
   - The hacker is in one of the three teleporter rooms
   - It is on the table next to grenades in the MP5 room
   - It is on the shelf left to the AN94 in the AN94 room
   - It is on the animal cages to the right when entering PDW room
   - The hacker can only be picked up by one player, and can only be lost when spectating

- Step 4: Obtain The Retriever
   - After linking teleporters, throw one into the fire pit by the thompson
   - After samantha is done being pissed at you, hack the panel next to the mainframe
   - The retriever should spawn at the mainframe, free to pick up

- Step 5: Find The Secret Room
   - Shoot the flytrap panel ( everyone should know where this is ) with a pack-a-punched gun
   - Collect the three hidden items ( everyone should know where these are ) with the Hell's Retriever
   - Stand infront of each teleporter and press [USE] to place each hidden item
   - Once all three have been placed infront of each teleporter, all teleporters will activate 3 seconds later
   - Any player standing in one of the three teleporters will be teleported to the secret room for 30 seconds
   - The flytrap resets after the round you return to the mainframe, and the process can be repeated

- Step 6: Charge The Teleporters
   - To continue to this step, you must visit the secret room three times
   - Each teleporter must be charged to escape
   - To charge a teleporter, have all players stand inside the teleporter room
   - The player with the hacker must hack the teleporter for 10,000 points
   - This cannot be done if a player is not inside the room, between rounds, or during dog rounds
   - Once hacked, the door to the room will close, trapping the players inside
   - A nuke will set off, killing all the zombies
   - Zombies will start rapidly spawning from within the room, all sprinters no matter what round
   - They will have round 30 health if you are on a round below 30, otherwise they will retain their current health
   - A certain amount of zombies must be killed with ELECTRIC weapons, otherwise the soul will not count
   - If you come unprepared, you can press [USE] on the door to cancel the charge, but you will have to wait until the next round to try again
   - Once you kill enough zombies with electric weapons, a second nuke will set off, killing everything, then the door will open
   - You must do this to each teleporter, and every time you start a charge, the number of zombies needed will be greater

- Step 7: Escape
   - To escape, you must repeat the flytrap step. Place all three items.
   - Once you place all three items, and ALL players are inside any teleporter, the game will be beaten

Credits:
WARDOGSK93 - Ported pretty much ALL my xmodels
Partisan Executioner - Major weapon file/sound finding help
HarryBo21 - Origins Pack-A-Punch Animations + Mustang & Sally + Widow's Wine FX
lilrifa - Widow's Wine Grenade Models + MP5 Models
BluntStuffy - Ray Gun Mark II FX + Soul Trail FX
Scobalula - Five Seven + CZ75 Dual Wields
NateSmithZombies - Scrolling Electric Pap Camo + AN94/MTAR/S12/M27/Executioner Models ( No Holes )
Khel Mho - DSR/B23R/PDW/Scorpion Evo Models ( No Holes ) + Minigun Fire Anim
Tom-BMX - Awesome tools to get models/anims from BO1/BO2

Known Bugs/Things I Didn't Finish
- Zombie Blood has no fx
- Widow's Wine does not add a green trail fx to the knife
- If you get 'Unknown Function' or any other script error when loading, keep trying
- If you get 'server command overflow' at the start of a game, keep trying
- Sometimes the game crashes early on ( round 5-ish ) in solo, just restart game
- Laststand third person animation system is glitchy
To Those Who Wish To Decompile My FF/IWD For My Assets/Scripts
Go ahead and look and take whatever, just please do credit me if you use something, or learn something from my scripts

Enjoy ;)

Update v1.0.1
- Changed pack-a-punch camo layouts for some weapons

Update v1.0.2
- Fixed tombstone bug where death machine was saved
- Fixed jugg bug where health would not set immediately after maxhealth was set ( noticed that in relaxingend's game )
- Fixed multiple mistakes in weapon files such as recoils/sprint loop times/etc thanks to Partisan Executioner

Update v1.0.3
- Fixed PDW/B23R/Scorpion Evo holes thanks to Khel Mho

Update v1.0.4
- Fixed DSR holes thanks to Khel Mho again
- Fixed MTAR prone position, spotted by wundrweapon

Update v1.0.5
- Added minigun barrel spin fire animation thanks to Khel Mho

Update v1.0.6
- Changed a few more pack-a-punch camo layouts
- Changed electric alt camo from origins metal to BO1 pap camo
- Fixed random CSC-played fx from playing instead of zombie eyes
8 years ago
I made a custom reticle image, and even the old one I was using had this problem. I used a BO2 reticle image and these asset manager settings:



It works fine on the BO2 reflex



but not a BO1 reflex



Is it not a good idea to use same reticle for BO1/BO2 reflex's? How do I make BO1's work?

Double Post Merge: August 10, 2016, 01:21:55 am
Anyone?
8 years ago
This is a notify in BO1 and so on that notifies like "grenade_fired", but for projectiles. I figured out that I could define projectile ent's by using the classname 'rocket', and I just looked at the birth time of the projectiles compared to the time if notifies "weapon_fired" and found you can match the times together. This should never glitch or break because even if two or more players managed to shoot the projectile guns in the exact same frame of time in the game, it will notify the one closest to the player that fired, so it should never be a problem. And there is a while loop that lasts for ten seconds, just incase the projectile didn't spawn immediately, and it also times out after 10 seconds just incase WaW failed again and the projectile didn't actually spawn.

Just call this function on player connect and it should work. Enjoy.
Code Snippet
Plaintext
notify_missile_fired()
{
self endon( "disconnect" );
while( true )
{
self waittill( "weapon_fired" );
weapon = self GetCurrentWeapon();
if( WeaponType( weapon ) == "projectile" )
{
self thread watch_missile_spawn( weapon, self GetEye(), GetTime() );
}
}
}

watch_missile_spawn( weapon, fire_origin, fire_time )
{
watcher_begin_time = GetTime();
while( GetTime() - watcher_begin_time < 10000 )
{
missile = GetEntArray( "rocket", "classname" );
missile = get_array_of_closest( fire_origin, missile );
for( i = 0; i < missile.size; i ++ )
{
if( ( fire_time - 50 ) == missile[i].birthtime )
{
self notify( "missile_fire", missile[i], weapon );
return;
}
}
wait 0.05;
}
}
8 years ago
Does the sound limit of 1600 ( 2400 with T4M ) limit the amount of sound alias lines you have or amount of sound files you have?
8 years ago
Hey guys I've been getting the error in the title that has to do with sounds.
I read the UGX wiki page that covers this, and it explained how it works, but nothing useful towards how to fix it. I also checked 'configstrings' in console and apparently I can only play 191 unique sounds by script, and then it crashes. I get this error usually around 30-35 with two players, and I could just imagine how devastating this would be 4 players, with two times all the VO. Is there anyway to help this?
8 years ago
Open maps\_zombiemode_powerups.gsc and find nuke_powerup(), replace that function with this:
Code Snippet
Plaintext
nuke_powerup( drop_item )
{
zombies = GetAISpeciesArray( "axis", "all" );
location = drop_item.origin;
PlayFX( drop_item.fx, location );
level thread nuke_flash();
wait 0.5;
zombies = get_array_of_closest( location, zombies );
zombies_nuked = [];
for( i = 0; i < zombies.size; i ++ )
{
if( IsDefined( zombies[i].marked_for_death ) && zombies[i].marked_for_death )
{
continue;
}
if( IsDefined( zombies[i].nuke_damage_func ) )
{
zombies[i] thread [[ zombies[i].nuke_damage_func ]]();
continue;
}
if( is_magic_bullet_shield_enabled( zombies[i] ) )
{
continue;
}
zombies[i].marked_for_death = true;
zombies[i].nuked = true;
zombies_nuked[ zombies_nuked.size ] = zombies[i];
}
for( i = 0; i < zombies_nuked.size; i ++ )
{
wait RandomFloatRange( 0.1, 0.7 );
if( !IsDefined( zombies_nuked[i] ) )
{
continue;
}
if( is_magic_bullet_shield_enabled( zombies_nuked[i] ) )
{
continue;
}
if( i < 5 && !zombies[i] enemy_is_dog() )
{
zombies_nuked[i] thread animscripts\death::flame_death_fx();
zombies_nuked[i] PlaySound( "nuked" );
}
if( !zombies[i] enemy_is_dog() )
{
if( !IsDefined( zombies_nuked[i].no_gib ) || !zombies_nuked[i].no_gib )
{
zombies_nuked[i] maps\_zombiemode_spawner::zombie_head_gib();
}
zombies_nuked[i] PlaySound( "nuked" );
}
zombies_nuked[i] DoDamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin );
}
players = GetPlayers();
for( i = 0; i < players.size; i ++ )
{
players[i] maps\_zombiemode_score::player_add_points( "nuke_powerup", 400 );
}
}
Open animscripts\_melee.gsc and find the function MeleeCombat(). Inside the for statement, above this:
Code Snippet
Plaintext
		// first, charge forward if we need to; get into place to play the melee animation
if ( !PrepareToMelee() )
{
// if we couldn't get in place to melee, don't melee.
// remember that we couldn't get in place so that we don't try again for a while.
self.lastMeleeGiveUpTime = gettime();
break;
}
Add this:
Code Snippet
Plaintext
		if( IsDefined( self.marked_for_death ) )
{
return;
}
Open maps\_zombiemode_score.gsc and find the player_add_points() function. Inside the switch statement, underneath this:
Code Snippet
Plaintext
		case "damage_ads":
points = Int( level.zombie_vars[ "zombie_score_damage" ] * 1.25 );
break;
add this:
Code Snippet
Plaintext
		case "nuke_powerup":
points = mod;
break;
That should be it, enjoy. Let me know if you find any problems.
8 years ago
So I was looking though my scripts and I noticed the functions zombie_damage() and zombie_damage_ads() come from _zombiemode.gsc where they are defined as level.global_damage_func and level.global_damage_func_ads. But where in WaW scripts do those get called?
8 years ago
Hey guys today I'm releasing my black ops 2 HUD that I've been using for awhile in my der riese mod. Lately I've been seeing HUD in new advanced maps that was from awhile ago and wasn't very up to date in perfection. So I decided to release mine because I think mine does look perfect. Here are some screenshots:

Mob of the Dead:


Buried:


Origins:


First thing you need to do is get this: http://ugx-mods.com/forum/index.php/topic,11593.0.html

Just follow the tutorial included in the download below and everything should work. I do have it set up in a unique way, for those wondering. I have the HUD info being determined in GSC and send over to CSC to loop the dvars constantly so that they can't get overwritten in game. I could have looped the dvars in GSC but I used to get an error in my mod called "Server Command Overflow" because there were too many dvars being set in GSC on a loop. So that is why I moved everything to CSC, for those wondering.

Please bear with me if stuff is missing or does not work because a lot of the stuff I had to re-write because a lot of it uses stuff in my utilities or systems I have set up only in my mod. Please do let me know of any bugs or problems and I will get to it right away.

Special thanks to DidUKnowIPwn for the cleaned up hud.menu I used as a template.
8 years ago
Hey guys today I'm going to release something that I've been using for awhile in my der riese mod and thought it would probably help other people who use CSC. Today I'm releasing my fake client systems, which basically use one WaW engine client system to pass info in other "fake" systems.

This solves two problems that I have noticed with WaW client systems:

1. There is a limit of 8 in WaW, and 7 are used by default
2. When a player is spectating and you call a client system callback on them, it does not actually thread to them. Basically I use a separate way to specify which player you are threading to in CSC.

The setup is pretty simple.
First create a GSC script called _xS78_fake_clientsystems.gsc Put this into the script:
Code Snippet
Plaintext
#include maps\_utility;
#include common_scripts\utility;
#include maps\_zombiemode_utility;

init()
{
registerClientSys( "fake_client_systems" );
level thread onPlayerConnect();
}

onPlayerConnect()
{
while( true )
{
level waittill( "connecting", player );
setClientSysState( "levelNotify", "set_client_id_" + player GetEntityNumber(), player );
}
}
Next create a CSC script called _xS78_fake_clientsystems.csc Put this into the script:
Code Snippet
Plaintext
#include clientscripts\_utility;
#include clientscripts\_music;

init()
{
level.player_id_number = [];
level.fake_client_system_callbacks = [];
level thread set_client_id( 0 );
level thread set_client_id( 1 );
level thread set_client_id( 2 );
level thread set_client_id( 3 );
registerSystem( "fake_client_systems", ::fake_client_systems );
}

set_client_id( id )
{
level waittill( "set_client_id_" + id, localclientnum );
level.player_id_number[ localclientnum ] = id;
}

fake_client_systems( localclientnum, state )
{
tokens = StrTok( state, "|" );
system_info = StrTok( tokens[0], "," );
if( system_info[0] == "all" || system_info[0] == string( level.player_id_number[ localclientnum ] ) )
{
system_name_and_state = GetSubStr( state, tokens[0].size + 1, state.size );
system_name = GetSubStr( system_name_and_state, 0, Int( system_info[1] ) );
system_state = GetSubStr( system_name_and_state, system_name.size, system_name_and_state.size );
if( IsDefined( level.fake_client_system_callbacks ) && IsDefined( level.fake_client_system_callbacks[ system_name ] ) )
{
level thread [[ level.fake_client_system_callbacks[ system_name ] ]]( localclientnum, system_state );
}
}
}
Now open a utility file in GSC ( preferably _zombiemode_utility.gsc ) and place this function at the bottom:
Code Snippet
Plaintext
set_client_system_state( system_name, system_state, player )
{
if( IsDefined( player ) )
{
player_num = string( player GetEntityNumber() );
}
else
{
player_num = "all";
}
state = player_num + "," + string( system_name.size ) + "|" + system_name + system_state;
setClientSysState( "fake_client_systems", state );
}
For the next part, you will need to add stuff to _utility.csc Thanks to my friend I found out that this script is not in raw or included with the script placer or anything so here is one:
Code Snippet
Plaintext
#include clientscripts\_utility_code; 
#include clientscripts\_fx;

/*
=============
///ScriptDocBegin
"Name: getstructarray( <name> , <type )"
"Summary: gets an array of script_structs"
"Module: Array"
"CallOn: An entity"
"MandatoryArg: <name>: "
"MandatoryArg: <type>: "
"Example: fxemitters = getstructarray( "streetlights" , "targetname" )"
"SPMP: singleplayer"
///ScriptDocEnd
=============
*/

error( message )
{
println( "^c * ERROR * ", message );
wait 0.05;
 }

// fancy quicker struct array handling, assumes array elements are objects with which an index can be asigned to( IE: can't do 5.struct_array_index )
// also have to be sure that objects can't be a part of another structarray setup as the index position is asigned to the object



getstruct( name, type )
{
if(!IsDefined( level.struct_class_names ) )
return undefined;

array = level.struct_class_names[ type ][ name ];
if( !IsDefined( array ) )
{
println("**** Getstruct returns undefined on " + name + " : " + " type.");
return undefined;
}

if( array.size > 1 )
{
assertMsg( "getstruct used for more than one struct of type " + type + " called " + name + "." );
return undefined;
}
return array[ 0 ];
}

getstructarray( name, type )
{
assertEx( IsDefined( level.struct_class_names ), "Tried to getstruct before the structs were init" );

array = level.struct_class_names[type][name];
if(!IsDefined( array ) )
{
return [];
}
else
{
return array;
}
}

 /*
 =============
///ScriptDocBegin
"Name: play_sound_in_space( <clientNum>, <alias> , <origin>  )"
"Summary: Stop playing the the loop sound alias on an entity"
"Module: Sound"
"CallOn: Level"
"MandatoryArg: <clientNum> : local client to hear the sound."
"MandatoryArg: <alias> : Sound alias to play"
"MandatoryArg: <origin> : Origin of the sound"
"Example: play_sound_in_space( "siren", level.speaker.origin );"
"SPMP: singleplayer"
///ScriptDocEnd
 =============
 */
play_sound_in_space( localClientNum, alias, origin)
{
PlaySound( localClientNum, alias, origin);
}

vectorScale( vector, scale )
{
vector = (vector[0] * scale, vector[1] * scale, vector[2] * scale);
return vector;
}

vector_multiply( vec, dif )
{
vec = ( vec[ 0 ] * dif, vec[ 1 ] * dif, vec[ 2 ] * dif );
return vec;
}

/*
 =============
///ScriptDocBegin
"Name: array_thread( <entities> , <process> , <var1> , <var2> , <var3> )"
"Summary: Threads the < process > function on every entity in the < entities > array. The entity will become "self" in the specified function."
"Module: Array"
"CallOn: "
"MandatoryArg: <entities> : array of entities to thread the process"
"MandatoryArg: <process> : pointer to a script function"
"OptionalArg: <var1> : parameter 1 to pass to the process"
"OptionalArg: <var2> : parameter 2 to pass to the process"
"OptionalArg: <var3> : parameter 3 to pass to the process"
"Example: array_thread( getaiarray( "allies" ), ::set_ignoreme, false );"
"SPMP: both"
///ScriptDocEnd
 =============
*/
array_thread( entities, process, var1, var2, var3 )
{
keys = getArrayKeys( entities );

if ( IsDefined( var3 ) )
{
for( i = 0 ; i < keys.size ; i ++ )
entities[ keys[ i ] ] thread [[ process ]]( var1, var2, var3 );

return;
}

if ( IsDefined( var2 ) )
{
for( i = 0 ; i < keys.size ; i ++ )
entities[ keys[ i ] ] thread [[ process ]]( var1, var2 );

return;
}

if ( IsDefined( var1 ) )
{
for( i = 0 ; i < keys.size ; i ++ )
entities[ keys[ i ] ] thread [[ process ]]( var1 );

return;
}

for( i = 0 ; i < keys.size ; i ++ )
entities[ keys[ i ] ] thread [[ process ]]();
}

registerSystem(sSysName, cbFunc)
{
if(!IsDefined(level._systemStates))
{
level._systemStates = [];
}

if(level._systemStates.size >= 32)
{
error("Max num client systems exceeded.");
return;
}

if(IsDefined(level._systemStates[sSysName]))
{
error("Attempt to re-register client system : " + sSysName);
return;
}
else
{
level._systemStates[sSysName] = spawnstruct();
level._systemStates[sSysName].callback = cbFunc;
}
}

loop_sound_Delete( ender, entId )
{
// ent endon( "death" );
self waittill( ender );
deletefakeent(0, entId);
}

loop_fx_sound( clientNum, alias, origin, ender )
{
entId = spawnfakeent(clientNum);

if( IsDefined( ender ) )
{
thread loop_sound_Delete( ender, entId );
self endon( ender );
}

setfakeentorg(clientNum, entId, origin);
playloopsound( clientNum, entId, alias );
}

waitforclient(client)
{
while(!clienthassnapshot(client))
{
wait(0.01);
}
syncsystemstates(client);
}

/*
 =============
///CScriptDocBegin
"Name: within_fov( <start_origin> , <start_angles> , <end_origin> , <fov> )"
"Summary: Returns true if < end_origin > is within the players field of view, otherwise returns false."
"Module: Vector"
"CallOn: "
"MandatoryArg: <start_origin> : starting origin for FOV check( usually the players origin )"
"MandatoryArg: <start_angles> : angles to specify facing direction( usually the players angles )"
"MandatoryArg: <end_origin> : origin to check if it's in the FOV"
"MandatoryArg: <fov> : cosine of the FOV angle to use"
"Example: qBool = within_fov( level.player.origin, level.player.angles, target1.origin, cos( 45 ) );"
"SPMP: singleplayer"
///CScriptDocEnd
 =============
 */
within_fov( start_origin, start_angles, end_origin, fov )
{
normal = VectorNormalize( end_origin - start_origin );
forward = AnglesToForward( start_angles );
dot = VectorDot( forward, normal );

return dot >= fov;
}


/*
=============
///CScriptDocBegin
"Name: add_to_array( <array> , <ent> )"
"Summary: Adds < ent > to < array > and returns the new array."
"Module: Array"
"CallOn: "
"MandatoryArg: <array> : The array to add < ent > to."
"MandatoryArg: <ent> : The entity to be added."
"Example: nodes = add_to_array( nodes, new_node );"
"SPMP: singleplayer"
///CScriptDocEnd
=============
*/
add_to_array( array, ent )
{
if( !IsDefined( ent ) )
return array;

if( !IsDefined( array ) )
array[ 0 ] = ent;
else
array[ array.size ] = ent;

return array;
}

setFootstepEffect(name, fx)
{
assertEx(IsDefined(name), "Need to define the footstep surface type.");
assertEx(IsDefined(fx), "Need to define the mud footstep effect.");
if (!IsDefined(level._optionalStepEffects))
level._optionalStepEffects = [];
level._optionalStepEffects[level._optionalStepEffects.size] = name;
level._effect["step_" + name] = fx;
}

getExploderId( ent )
{
if(!IsDefined(level._exploder_ids))
{
level._exploder_ids = [];
level._exploder_id = 1;
}

if(!IsDefined(level._exploder_ids[ent.v["exploder"]]))
{
level._exploder_ids[ent.v["exploder"]] = level._exploder_id;
level._exploder_id ++;
}

return level._exploder_ids[ent.v["exploder"]];
}

reportExploderIds()
{
if(!IsDefined(level._exploder_ids))
return;

keys = GetArrayKeys( level._exploder_ids );

println("Client Exploder dictionary : ");

for( i = 0; i < keys.size; i++ )
{
println(keys[i] + " : " + level._exploder_ids[keys[i]]);
}

}

init_exploders()
{
println("*** Init exploders...");
script_exploders = [];

ents = GetStructArray( "script_brushmodel", "classname" );
println("Client : s_bm " + ents.size);

smodels = GetStructArray( "script_model", "classname" );
println("Client : sm " + smodels.size);

for( i = 0; i < smodels.size; i++ )
{
ents[ents.size] = smodels[i];
}

for( i = 0; i < ents.size; i++ )
{
if( IsDefined( ents[i].script_prefab_exploder ) )
{
ents[i].script_exploder = ents[i].script_prefab_exploder;
}
}

potentialExploders = GetStructArray( "script_brushmodel", "classname" );
println("Client : Potential exploders from script_brushmodel " + potentialExploders.size);

for( i = 0; i < potentialExploders.size; i++ )
{
if( IsDefined( potentialExploders[i].script_prefab_exploder ) )
{
potentialExploders[i].script_exploder = potentialExploders[i].script_prefab_exploder;
}

if( IsDefined( potentialExploders[i].script_exploder ) )
{
script_exploders[script_exploders.size] = potentialExploders[i];
}
}

potentialExploders = GetStructArray( "script_model", "classname" );
println("Client : Potential exploders from script_model " + potentialExploders.size);

for( i = 0; i < potentialExploders.size; i++ )
{
if( IsDefined( potentialExploders[i].script_prefab_exploder ) )
{
potentialExploders[i].script_exploder = potentialExploders[i].script_prefab_exploder;
}

if( IsDefined( potentialExploders[i].script_exploder ) )
{
script_exploders[script_exploders.size] = potentialExploders[i];
}
}

// Also support script_structs to work as exploders
for( i = 0; i < level.struct.size; i++ )
{
if( IsDefined( level.struct[i].script_prefab_exploder ) )
{
level.struct[i].script_exploder = level.struct[i].script_prefab_exploder;
}

if( IsDefined( level.struct[i].script_exploder ) )
{
script_exploders[script_exploders.size] = level.struct[i];
}
}

if( !IsDefined( level.createFXent ) )
{
level.createFXent = [];
}

acceptableTargetnames = [];
acceptableTargetnames["exploderchunk visible"] = true;
acceptableTargetnames["exploderchunk"] = true;
acceptableTargetnames["exploder"] = true;

exploder_id = 1;

for( i = 0; i < script_exploders.size; i++ )
{
exploder = script_exploders[i];
ent = createExploder( exploder.script_fxid );
ent.v = [];
if(!IsDefined(exploder.origin))
{
println("************** NO EXPLODER ORIGIN." + i);
}
ent.v["origin"] = exploder.origin;
ent.v["angles"] = exploder.angles;
ent.v["delay"] = exploder.script_delay;
ent.v["firefx"] = exploder.script_firefx;
ent.v["firefxdelay"] = exploder.script_firefxdelay;
ent.v["firefxsound"] = exploder.script_firefxsound;
ent.v["firefxtimeout"] = exploder.script_firefxtimeout;
ent.v["trailfx"] = exploder.script_trailfx;
ent.v["trailfxtag"] = exploder.script_trailfxtag;
ent.v["trailfxdelay"] = exploder.script_trailfxdelay;
ent.v["trailfxsound"] = exploder.script_trailfxsound;
ent.v["trailfxtimeout"] = exploder.script_firefxtimeout;
ent.v["earthquake"] = exploder.script_earthquake;
ent.v["rumble"] = exploder.script_rumble;
ent.v["damage"] = exploder.script_damage;
ent.v["damage_radius"] = exploder.script_radius;
ent.v["repeat"] = exploder.script_repeat;
ent.v["delay_min"] = exploder.script_delay_min;
ent.v["delay_max"] = exploder.script_delay_max;
ent.v["target"] = exploder.target;
ent.v["ender"] = exploder.script_ender;
ent.v["physics"] = exploder.script_physics;
ent.v["type"] = "exploder";
// ent.v["worldfx"] = true;

if( !IsDefined( exploder.script_fxid ) )
{
ent.v["fxid"] = "No FX";
}
else
{
ent.v["fxid"] = exploder.script_fxid;
}
ent.v["exploder"] = exploder.script_exploder;
// assertex( IsDefined( exploder.script_exploder ), "Exploder at origin " + exploder.origin + " has no script_exploder" );

if( !IsDefined( ent.v["delay"] ) )
{
ent.v["delay"] = 0;
}

// MikeD( 4/14/2008 ): Attempt to use the fxid as the sound reference, this way Sound can add sounds to anything
// without the scripter needing to modify the map
if( IsDefined( exploder.script_sound ) )
{
ent.v["soundalias"] = exploder.script_sound;
}
else if( ent.v["fxid"] != "No FX"  )
{
if( IsDefined( level.scr_sound ) && IsDefined( level.scr_sound[ent.v["fxid"]] ) )
{
ent.v["soundalias"] = level.scr_sound[ent.v["fxid"]];
}
}

fixup_set = false;

if(IsDefined(ent.v["target"]))
{
ent.needs_fixup = exploder_id;
exploder_id++;
fixup_set = true;

/* temp_ent = GetEnt(0, ent.v["target"], "targetname" );
if( IsDefined( temp_ent ) )
{
org = temp_ent.origin;
}
else */
{
temp_ent = GetStruct( ent.v["target"], "targetname" );
org = temp_ent.origin;
}

if(IsDefined(org))
{
ent.v["angles"] = VectorToAngles( org - ent.v["origin"] );
}
else
{
println("*** Client : Exploder " + exploder.script_fxid + " Failed to find target ");
}

if(IsDefined(ent.v["angles"]))
{
ent set_forward_and_up_vectors();
}
else
{
println("*** Client " + exploder.script_fxid + " has no angles.");
}

}


// this basically determines if its a brush/model exploder or not
if( exploder.classname == "script_brushmodel" || IsDefined( exploder.model ) )
{
if(IsDefined(exploder.model))
{
println("*** exploder " + exploder_id + " model " + exploder.model);
}
ent.model = exploder;
//ent.model.disconnect_paths = exploder.script_disconnectpaths;
if(fixup_set == false)
{
ent.needs_fixup = exploder_id;
exploder_id++;
}
}

if( IsDefined( exploder.targetname ) && IsDefined( acceptableTargetnames[exploder.targetname] ) )
{
ent.v["exploder_type"] = exploder.targetname;
}
else
{
ent.v["exploder_type"] = "normal";
}
}

for(i = 0; i < level.createFXent.size;i ++ )
{
ent = level.createFXent[i];

if(ent.v["type"] != "exploder")
continue;

ent.v["exploder_id"] = getExploderId( ent );

}

reportExploderIds();


println("*** Client : " + script_exploders.size + " exploders.");

}


playfx_for_all_local_clients( fx_id, pos, forward_vec, up_vec )
{

localPlayers = getlocalplayers();

if( IsDefined( up_vec ) )
{
for(i = 0; i < localPlayers.size; i ++)
{
playfx( i, fx_id, pos, forward_vec, up_vec );
}
}
else if( IsDefined( forward_vec ) )
{
for(i = 0; i < localPlayers.size; i ++)
{
playfx( i, fx_id, pos, forward_vec );
}
}
else
{
for(i = 0; i < localPlayers.size; i ++)
{
playfx( i, fx_id, pos );
}
}
}

play_sound_on_client( sound_alias )
{
players = GetLocalPlayers();

PlaySound( 0, sound_alias, players[0].origin );
}

loop_sound_on_client( sound_alias, min_delay, max_delay, end_on )
{
players = GetLocalPlayers();

if( IsDefined( end_on ) )
{
level endon( end_on );
}

for( ;; )
{
play_sound_on_client( sound_alias );
wait( min_delay + RandomFloat( max_delay ) );
}
}

add_listen_thread( wait_till, func, param1, param2, param3, param4, param5 )
{
level thread add_listen_thread_internal( wait_till, func, param1, param2, param3, param4, param5 );
}

add_listen_thread_internal( wait_till, func, param1, param2, param3, param4, param5 )
{
for( ;; )
{
level waittill( wait_till );

if( IsDefined( param5 ) )
{
level thread [[ func ]]( param1, param2, param3, param4, param5 );
}
else if( IsDefined( param4 ) )
{
level thread [[ func ]]( param1, param2, param3, param4 );
}
else if( IsDefined( param3 ) )
{
level thread [[ func ]]( param1, param2, param3 );
}
else if( IsDefined( param2 ) )
{
level thread [[ func ]]( param1, param2 );
}
else if( IsDefined( param1 ) )
{
level thread [[ func ]]( param1 );
}
else
{
level thread [[ func ]]();
}
}
}

addLightningExploder(num)
{
if (!isdefined(level.lightningExploder))
{
level.lightningExploder = [];
level.lightningExploderIndex = 0;
}

level.lightningExploder[level.lightningExploder.size] = num;
}


/*
 =============
///CScriptDocBegin
"Name: splitscreen_populate_dvars( <clientNum> )"
"Summary: Populates profile dvars with settings read from clientNum's profile data."
"Module: System"
"MandatoryArg: <clientNum> : the local client num of the profile to be read"
"Example: splitscreen_populate_dvars( 1 );"
"SPMP: singleplayer"
///CScriptDocEnd
 =============
 */
splitscreen_populate_dvars( clientNum )
{
if ( getlocalplayers().size <= 1 )
{
return;
}

UpdateDvarsFromProfile( clientNum );
}


/*
 =============
///CScriptDocBegin
"Name: splitscreen_restore_dvars()"
"Summary: Restores profile dvars with settings read from client 0's profile data."
"Module: System"
"Example: splitscreen_restore_dvars();"
"SPMP: singleplayer"
///CScriptDocEnd
 =============
 */
splitscreen_restore_dvars()
{
if ( getlocalplayers().size <= 1 )
{
return;
}

splitscreen_populate_dvars( 0 );
}



Place these functions at the bottom of that file:
Code Snippet
Plaintext
register_client_system( system_name, callback_func )
{
level.fake_client_system_callbacks[ system_name ] = callback_func;
}

StrTok( string, delimiter )
{
tokens = [];
next_token = "";
for( i = 0; i < string.size; i ++ )
{
if( string[i] == delimiter )
{
tokens[ tokens.size ] = next_token;
next_token = "";
}
else
{
next_token = next_token + string[i];
}
}
tokens[ tokens.size ] = next_token;
return tokens;
}

string( num )
{
return "" + num;
}
Now open maps\_zombiemode.gsc and look at the top function called main(). Under this:
Code Snippet
Plaintext
maps\_zombiemode_auto_turret::init();
Place this:
Code Snippet
Plaintext
maps\_xS78_fake_clientsystems::init();
Now open clientscripts\{MAPNAME}.csc and look at the function called main(). Under this:
Code Snippet
Plaintext
clientscripts\_load::main();
Place this:
Code Snippet
Plaintext
clientscripts\_xS78_fake_clientsystems::init();

That should be it. Remember to tick those new scripts in mod builder.

Now you can use set_client_system_state in GSC the same way you could use the original, if you don't know how I'm sure there are tutorials somewhere. And you no longer have to register new client systems in the GSC, you can just immediately call them from where ever you want. And in CSC you can use register_client_system the same way you could use the origins ( again, find you own tutorial ).
8 years ago
OK guys so I have been making this mod for about a year now: http://ugx-mods.com/forum/index.php/topic,6763.0.html

It is almost finished. I have a todo list here: http://ugx-mods.com/forum/index.php/topic,6763.msg121910.html#msg121910

The things that just require porting, or in other words already have a plan, are easy to get done. What isn't easy is coming up with the easter egg ideas. That might be the hardest feature to add believe it or not. I need a good, long easter egg that isn't full of pointless crap. And remember, I do have monkeys, the wunder waffe, the hacker, and the retriever to work with here, to use in easter egg steps.
8 years ago
I was wondering if I could put floated numbers ( decimals ) into something like this:
Code Snippet
Plaintext
exp rect X DvarFloat( "x_align" );
to make something slide smoothly across the screen.
I also was wondering, I know you can do
Code Snippet
Plaintext
exp rect X
but can you do
Code Snippet
Plaintext
exp rect Y

Also, how do "if" statements in menu work? I have seen #ifdef but that is basically "if defined", which I can't force something to be defined or undefined based on a dvar like I want in menu, or at least I don't think I can. Is there another way I can use "if" statements in menu?
Also, can I resize shaders in menu? I know ScaleOverTime exists in GSC script for HUD, but how can I, if I even can, change the size of a shader in menu?
8 years ago
I need HidePart() to work for a couple things I am doing but I don't know if it works. I remember my friend trying to use it and it wasn't working so I thought I might ask UGX. I'm not at the point where I have what I need to try it myself yet so that's why I cannot figure this out myself.
8 years ago
Is there a list of sound alias names with their corresponding file names for black ops 2? I am trying to get the exact weapon sounds for some of my guns and cannot figure out which they are. I can find the alias name in the notetrack but I don't know what sound file it is. Is there a tool to get sound aliases or something? I did find a list but they don't have some sounds I need.

http://pastebin.com/raw/Q3Ea54Bq

Does anyone know how this was dumped?
8 years ago
Panthers or Broncos?
8 years ago
Loading ...