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 - AlecKeaneDUB

I was deleting lines of code to reduce my loaded_sounds due to an exceeded 1600 limit and I believe I deleted a line that supplied my upgraded weapons sounds. The normal, un-upgraded sounds work just fine but can someone find the lines I need and paste them so I can copy them?
8 years ago
If I have multiple zones with the same name, all adjacent to each other, will they act as ONE zone? Will selecting all of them and pressing 'W' connect them as one zone? How might I go about that being that my map doesn't have zones that can just be covered with a single volume? I apologize if this is a stupid question but I haven't really grasped the whole zone concept yet. I am getting better though but just need and answer to this.

Thanks! :D
8 years ago
On two maps i've been working on, I get the classic, annoying error. I've deleted/commented out tons and TONS of sounds but the problem persists. I've even resorted to taking weapons out of my map in attempt to fix this :(
8 years ago
I've never had this problem before on this or any maps :(

my console:
Code Snippet
Plaintext
Copying  C:\Program Files (x86)\Activision\Call of Duty - World at War\mods\nazi_zombie_114cabin\mod.csv
     to  C:\Program Files (x86)\Activision\Call of Duty - World at War\zone_source\mod.csv
args: -nopause -language english -moddir nazi_zombie_114cabin mod

********************************************************************************
UNRECOVERABLE ERROR:
  EXE_ERR_HUNK_ALLOC_FAILED256

Linker will now terminate.
********************************************************************************

==================================================
Linker summary:

There were 0 warnings and 1 error.

Errors:
  (!) UNRECOVERABLE ERROR: EXE_ERR_HUNK_ALLOC_FAILED256
Arguments passed to linker:
  -nopause -language english -moddir nazi_zombie_114cabin mod

==================================================
Any help would be very appreciated
8 years ago
I made this buildables script for my first map release: The Outpost. This script works great on solo (with one exception which I'll explain soon), but on Co-Op it does not work, ruling the map broken and unbeatable.

The issue people have had is that they can pick up the first buildable part and add it to the work bench, but then they(or any of the other players) aren't able to pick up either of the other two. Now, the one exception when playing on solo, is that you must pick up the three parts in a certain order. I'm not sure why this happens, but this was all scripted by me so it doesn't surprise me that it has bugs.

I didn't want to use others' pre-made buildable scripts, because I wanted to take on the challenge of making my own, and not waste time failing at trying to figure out others'. I believe that when I made it, I both succeeded and failed. So I'd love someone to tell me where I went wrong, and maybe help me fix this.

I already know that there are probably things that don't need to be in there, don't make sense, or in the wrong place. So I'd really love help on what I can do to make my map enjoyable to play on Co-Op.

Here's the script:
Code Snippet
Plaintext
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_hud_util;

Precache_buildables()
{
PrecacheModel( "zombie_sumpf_zipcage_switch" );
PrecacheModel( "zombie_sumpf_zipcage_box" );
PrecacheModel( "zombie_modular_wires_single" );
}

main()
{
players = get_players();
for(i=0;i<players.size;i++)
{
players[i].hasAPart = false;
players[i].hasSwitch = false;
players[i].hasWires = false;
players[i].hasBox = false;
}

level.buildTime = 2.5;
level.buildCompleted = false;
level.switchAdded = false;
level.wiresAdded = false;
level.boxAdded = false;

thread init_parts();
thread init_work_bench();
thread init_end_trigger();
}

init_parts(part)
{
//sets up the switch part and trigger
switch_part = getent("switch_part","targetname");
switch_trig = getent("switch_trig","targetname");

switch_trig SetCursorHint("HINT_NOICON");
switch_trig UseTriggerRequireLookAt();
switch_trig SetHintString("Press &&1 To Pick Up Switch");

//sets up the wires part and trigger
wires_part = getent("wires_part","targetname");
wires_trig = getent("wires_trig","targetname");

wires_trig SetCursorHint("HINT_NOICON");
wires_trig UseTriggerRequireLookAt();
wires_trig SetHintString("Press &&1 To Pick Up Wires");

//sets up the box part and trigger
box_part = getent("box_part","targetname");
box_trig = getent("box_trig","targetname");

box_trig SetCursorHint("HINT_NOICON");
box_trig UseTriggerRequireLookAt();
box_trig SetHintString("Press &&1 To Pick Up Electrical Box");

while(isDefined(wires_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
wires_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the wires" );
players[i].hasAPart = true;
players[i].hasWires = true;

wires_trig delete();
wires_part delete();
}
}
}
wait 0.05;
}

while(isDefined(switch_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
switch_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the switch" );
players[i].hasAPart = true;
players[i].hasSwitch = true;

switch_trig delete();
switch_part delete();
}
}
}
wait 0.05;
}

while(isDefined(box_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
box_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the electric box" );
players[i].hasAPart = true;
players[i].hasBox = true;

box_trig delete();
box_part delete();
}
}
}
wait 0.05;
}
}

init_work_bench()
{
bench_trig = getent("add_part_trig","targetname");

bench_trig SetCursorHint("HINT_NOICON");
bench_trig UseTriggerRequireLookAt();
bench_trig SetHintString("Press &&1 To Replace Part");

while(level.buildCompleted == false)
{
players = get_players();
for(i=0;i<players.size;i++)
{
bench_trig waittill("trigger",player);

if(players[i].hasAPart == true && players[i].hasSwitch == true && level.switchAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing switch..." );
wait(level.buildTime);
players[i] iprintln( "A new switch has been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasSwitch = false;
level.switchAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == true && players[i].hasWires == true && level.wiresAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing wires..." );
wait(level.buildTime);
players[i] iprintln( "Some new wires have been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasWires = false;
level.wiresAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == true && players[i].hasBox == true && level.boxAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing electrical box..." );
wait(level.buildTime);
players[i] iprintln( "A new electrical box has been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasbox = false;
level.boxAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == false)
{
players[i] iprintln( "You don't have a part..." );
}
}

if(level.switchAdded == true && level.wiresAdded == true && level.boxAdded == true)
{
bench_trig delete();
level.buildCompleted = true;
level notify( "all_parts_added" );
wait 0.2;
iprintlnbold( "All parts fixed" );
}
}
}

do_knuckle_crack()
{
self DisableOffhandWeapons();
self DisableWeaponCycling();

self AllowLean(false);
self AllowAds(false);
self AllowSprint(false);
self AllowProne(false);
self AllowMelee(false);

if( self GetStance() == "prone" )
self SetStance("crouch");

gun = self GetCurrentWeapon();
self GiveWeapon( "zombie_knuckle_crack" );
self SwitchToWeapon( "zombie_knuckle_crack" );
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete", "buildable_complete" );

self EnableOffhandWeapons();
self EnableWeaponCycling();
self TakeWeapon( "zombie_knuckle_crack" );
self SwitchToWeapon( gun );

self AllowLean(true);
self AllowAds(true);
self AllowSprint(true);
self AllowProne(true);
self AllowMelee(true);
self notify("knuckle_crack_done");
}

init_end_trigger()
{
end_game = getent("end_game","targetname");
end_game SetCursorHint("HINT_NOICON");
end_game UseTriggerRequireLookAt();
end_game SetHintString("This switch seems to be broken...");

self waittill( "all_parts_added" );

end_game SetHintString("You need a source of energy...");
//thread init_shoot_trig();

}

I really hope someone can help me, so thanks in advance.
9 years ago
Script Tutorial: Spawning A Random Weapon In Your Map
In this thread, I'll be showing you how to spawn a randomly selected weapon into your map. You can have as many weapons to be possibly selected as you want, as long as you aren't too lazy to change a couple things (but if you suck at scripting, don't stress - for I shall show you how). This isn't a huge, complicated script...because it isn't necessary to be. It's very simple, and shouldn't be too difficult for newbies to add to their maps. Let's get started!

Step 1: Adding The Entity
The first thing you need, is a simple 'trigger_use' placed in your map.

- To create a trigger_use entity, right-click on the 2-D view side of you map and go to --> trigger > use
- The entity must have the following dimensions:      x: 40, y: 40, z: 8
- For newbies, those dimensions mean that the trigger_use should be 40 units in length and width, and 8 units in
  height.

Next, place the trigger flat on the floor (or table, box, shelf, etc.)
PLEASE NOTE: The location that you place this trigger_use is where the weapon will spawn.

- Now save your map and open up your map's .GSC file (nazi_zombie_yourmapname.gsc)

Step 2: Scripting
Now that we have the entity placed in our map, we can get to the fun stuff.

- In your map's .gsc file, find this:
Code Snippet
Plaintext
maps\_zombiemode::main();
and directly underneath, put this:
Code Snippet
Plaintext
thread random_gun();
- Now scroll down to the very bottom and paste this there:
Code Snippet
Plaintext
random_gun()
{
rand = randomintrange( 1, 10 );

// thead pick_up_gun( "weapon model, hint string, weapon file, message" );

if(rand >= 1 && rand <= 6) // 60% chance of this weapon spawning
{
thread pick_up_gun( "weapon_usp", "Press &&1 for weapon", "usp", "You found a USP.45" );
}
else if(rand >= 7 && rand <= 9) // 30% chance of this weapon spawning
{
thread pick_up_gun( "weapon_desert_eagle_silver", "Press &&1 for weapon", "desert_eagle", "You found a Desert Eagle" );
}
else if(rand == 10) // 10% chance of this weapon spawning
{
thread pick_up_gun( "weapon_desert_eagle_gold", "Press &&1 for weapon", "desert_eagle_gold", "You found a Desert Eagle" );
}
}
*BE SURE TO CHANGE THE WEAPON MODEL AND FILE TO THE ONES THAT MATCH YOUR WEAPON*

Now, right under that thread, add this:
Code Snippet
Plaintext
pick_up_gun( model, string, weapon, message )
{
player = undefined;
gun_spawn = getEnt( "gun_spawn" , "targetname" );

r_angle = randomintrange( 1, 361 );
gun_model = Spawn( "script_model" , gun_spawn.origin -(0,0,3) );
gun_model.angles = ( 0,r_angle,90 );
gun_model SetModel( model );
gun_spawn usetriggerrequirelookat();
gun_spawn setCursorHint("HINT_NOICON");
gun_spawn sethintstring( string );

gun_spawn waittill( "trigger" , player );

old_gun = player getcurrentweapon();
weaplist = player GetWeaponsListPrimaries();
for(i=0;i<weaplist.size;i++)
{

}
if(weaplist.size <= 1)
{
player giveweapon( weapon );
player switchtoweapon( weapon );
player playsound( "weap_pickup_plr" );
}
else if(weaplist.size >= 2)
{
player takeweapon( old_gun );
player giveweapon( weapon );
player switchtoweapon( weapon );
player playsound( "weap_pickup_plr" );
}

player iprintlnbold( message );

gun_model delete();
gun_spawn delete();
}
- The purpose of the 'random_gun()' thread is briefly explained in the commented out line at the beginning of the
  thread. The 'weapon model' is the weapon's world model name, which can be found in Asset Viewer. The 'hint
  string' is what will be displayed to players who walk up to the weapon (feel free to customize the hint to your   
  liking). The 'weapon file' is the name of the weapon's file, which contains it's damage settings, camo, clip size, etc.,
  and can be found in mods > your_map_name > weapons > sp. Finally, the 'message' is what the game will display
  on-screen when a player picks up the weapon (this isn't a necessity and can be edited to your liking or removed).

Sub-step 1: Adding More Weapons To Be Randomly Selected
Adding a larger variety of weapons that can possibly be chosen from the script can make your map more fun and add to the replayablilty factor by leaving players eager to see which weapon(s) have spawned for them each time. Doing this may be confusing for those who are new to this, but I will do my best to explain it.

- The two main things we must worry about when adding additional weapons, are these two lines:
Code Snippet
Plaintext
rand = randomintrange( 1, 10 ); <----


if(rand >= 1 && rand <= 6) /* 60% chance of this weapon spawning*/ <----
{
thread pick_up_gun( "weapon_usp", "Press &&1 for weapon", "usp", "You found a USP.45" );
}
To be able to understand this simplicity, you had to have passed atleast 5th grade math. If you have not, then this is not the place for you. Go play some Mario Kart or something.

- What we are looking at is percentages. Now, in case you haven't noticed, I have different weapons set at different
  percentages (or 'chances') of spawning. You know what, nevermind - I'm not going to 9/11 my brain attempting to
  explain this. Here's a brief, simple explanation: change the random_int_range if necessary and adjust the
  percentages to your liking. It isn't difficult once you mess around and get the hang of it. Use the commented out
  template to add more weapons, but be sure to add the correct model and weapon file. Feel free to ask me
  questions.

Overview:
I'm very tired at the moment and may have left out explanations or something. Just be sure to rebuild your mod after adding these scripts and make sure to recompile your map. If anyone suspects something is missing, just comment below, ask me a question, or PM me. I'll check back tomorrow.

Hope this helped!   ;)
9 years ago
Could not find label 'main' in script 'animscripts/traverse/jump_up_96'

Thats the error i get after adding that traverse to my map. I guess i could delete it, but i shouldnt have to. This traverse is needed in my map unless anyone knows of an alternative. I've tried doing multiple full recompiles(map itself aswell as the patch) and rebuilding the mod. Anyone know what i should/can do?

Thanks
9 years ago
I have things in my map that you can search (kind of like dig sites) and each one has a 10% chance of giving you a weapon refill (max ammo for the weapon you are holding). Now this is the part i have for the max ammo:
Code Snippet
Plaintext
player = undefined;
current_gun = player getcurrentweapon();
player GiveMaxAmmo( current_gun );
Now i dont just have those thrown together in my actual script, they are in the correct places. But why doesnt this work? I'm curious about what im missing or why the game wont read this. Does anyone know what i could use instead?
9 years ago
I remember seeing a thread or something about this but I couldnt find it so I'll just post this again. How would I go about having lights that are off to start with, but then turn on when the power is activated or some other event happens? This would really give my map a better effect so I was wondering if anyone knows how to do this.

Thanks
9 years ago
I released my map (The Outpost - Challenge Map) like a month ago and I've gotten feedback about a major bug in this script that keeps you from completing the easteregg/beating the map when playing Co-op. It works great on solo but i dont know what the problem is on Co-op and I really dont have time to look through every bit of my code to try and test things until i fix it. So any scripters, if you can please help me out I'd really appreciate it

I have not personally played my map on co-op, but people say that you cant pickup certain parts or something? I'm not entirely sure but you can play the map with a friend or two yourself or you can check the comments on the map's thread:
http://ugx-mods.com/forum/index.php?topic=6733.0

Here's my entire buildables script: (I know its probably very poorly written and sloppy but this was my first large script)
Code Snippet
Plaintext
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_hud_util;

Precache_buildables()
{
PrecacheModel( "zombie_sumpf_zipcage_switch" );
PrecacheModel( "zombie_sumpf_zipcage_box" );
PrecacheModel( "zombie_modular_wires_single" );
}

main()
{
players = get_players();
for(i=0;i<players.size;i++)
{
players[i].hasAPart = false;
players[i].hasSwitch = false;
players[i].hasWires = false;
players[i].hasBox = false;
}

level.buildTime = 2.5;
level.buildCompleted = false;
level.switchAdded = false;
level.wiresAdded = false;
level.boxAdded = false;

thread init_parts();
thread init_work_bench();
thread init_end_trigger();
}

init_parts(part)
{
//sets up the switch part and trigger
switch_part = getent("switch_part","targetname");
switch_trig = getent("switch_trig","targetname");

switch_trig SetCursorHint("HINT_NOICON");
switch_trig UseTriggerRequireLookAt();
switch_trig SetHintString("Press &&1 To Pick Up Switch");

//sets up the wires part and trigger
wires_part = getent("wires_part","targetname");
wires_trig = getent("wires_trig","targetname");

wires_trig SetCursorHint("HINT_NOICON");
wires_trig UseTriggerRequireLookAt();
wires_trig SetHintString("Press &&1 To Pick Up Wires");

//sets up the box part and trigger
box_part = getent("box_part","targetname");
box_trig = getent("box_trig","targetname");

box_trig SetCursorHint("HINT_NOICON");
box_trig UseTriggerRequireLookAt();
box_trig SetHintString("Press &&1 To Pick Up Electrical Box");

while(isDefined(wires_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
wires_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the wires" );
players[i].hasAPart = true;
players[i].hasWires = true;

wires_trig delete();
wires_part delete();
}
}
}
wait 0.05;
}

while(isDefined(switch_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
switch_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the switch" );
players[i].hasAPart = true;
players[i].hasSwitch = true;

switch_trig delete();
switch_part delete();
}
}
}
wait 0.05;
}

while(isDefined(box_trig))
{
players = get_players(); // Get all player entities
for(i=0;i<players.size;i++)
{
box_trig waittill("trigger",player);

if(!players[i] maps\_laststand::player_is_in_laststand() && !players[i].being_revived)
{
if(players[i].hasAPart == true)
{
players[i] iprintln( "You are already carrying a part" );
}

else
{
players[i] iprintln( "You picked up the electric box" );
players[i].hasAPart = true;
players[i].hasBox = true;

box_trig delete();
box_part delete();
}
}
}
wait 0.05;
}
}

init_work_bench()
{
bench_trig = getent("add_part_trig","targetname");

bench_trig SetCursorHint("HINT_NOICON");
bench_trig UseTriggerRequireLookAt();
bench_trig SetHintString("Press &&1 To Replace Part");

while(level.buildCompleted == false)
{
players = get_players();
for(i=0;i<players.size;i++)
{
bench_trig waittill("trigger",player);

if(players[i].hasAPart == true && players[i].hasSwitch == true && level.switchAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing switch..." );
wait(level.buildTime);
players[i] iprintln( "A new switch has been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasSwitch = false;
level.switchAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == true && players[i].hasWires == true && level.wiresAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing wires..." );
wait(level.buildTime);
players[i] iprintln( "Some new wires have been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasWires = false;
level.wiresAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == true && players[i].hasBox == true && level.boxAdded == false)
{
players[i] thread do_knuckle_crack();

players[i] iprintln( "Replacing electrical box..." );
wait(level.buildTime);
players[i] iprintln( "A new electrical box has been added!" );
level notify( "buildable_complete" );

players[i].hasAPart = false;
players[i].hasbox = false;
level.boxAdded = true;
wait 0.1;
continue;
}

if(players[i].hasAPart == false)
{
players[i] iprintln( "You don't have a part..." );
}
}

if(level.switchAdded == true && level.wiresAdded == true && level.boxAdded == true)
{
bench_trig delete();
level.buildCompleted = true;
level notify( "all_parts_added" );
wait 0.2;
iprintlnbold( "All parts fixed" );
}
}
}

do_knuckle_crack()
{
self DisableOffhandWeapons();
self DisableWeaponCycling();

self AllowLean(false);
self AllowAds(false);
self AllowSprint(false);
self AllowProne(false);
self AllowMelee(false);

if( self GetStance() == "prone" )
self SetStance("crouch");

gun = self GetCurrentWeapon();
self GiveWeapon( "zombie_knuckle_crack" );
self SwitchToWeapon( "zombie_knuckle_crack" );
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete", "buildable_complete" );

self EnableOffhandWeapons();
self EnableWeaponCycling();
self TakeWeapon( "zombie_knuckle_crack" );
self SwitchToWeapon( gun );

self AllowLean(true);
self AllowAds(true);
self AllowSprint(true);
self AllowProne(true);
self AllowMelee(true);
self notify("knuckle_crack_done");
}

init_end_trigger()
{
end_game = getent("end_game","targetname");
end_game SetCursorHint("HINT_NOICON");
end_game UseTriggerRequireLookAt();
end_game SetHintString("This switch seems to be broken...");

self waittill( "all_parts_added" );

end_game SetHintString("You need a source of energy...");
thread init_shoot_trig();

}

init_shoot_trig()
{
shoot_trig = getent("shoot_trig","targetname");
requiredWeapon = "zombie_thompson_upgraded";

while(1)
{
shoot_trig waittill("trigger", player);
weapon = player getcurrentweapon();

if(requiredWeapon == "zombie_thomspon_upgraded" || weapon==requiredWeapon)
{
shoot_trig delete();
thread init_end_game();
wait 0.1;
break;
}
}
}

init_end_game()
{
level notify ( "energy_shot" );
wait 0.5;
maps\nazi_zombie_114cabin::end_game();
}
9 years ago
So I have a quick, simple question about moving a brushmodel, or anything I suppose, through script. Here's the code I have that I question:
Code Snippet
Plaintext
elevator_func()
{
elevator_floor = getent( "elevator_floor" , "targetname" );
wait 2;
elevator_floor MoveZ( -8, 3 );

wait 3;
//level notify( "elevator_done" );
}
Which is just a simple floor that moves like an elevator. Now the line where it says:
Code Snippet
Plaintext
elevator_floor MoveZ( -8, 3 );
Is the first number (where i have the -8) the position on Z axis that it will move to or should that number be how many units it moves?

Thanks for your time
9 years ago
The Outpost

***THE DOWNLOAD LINK HAS BEEN REMOVED DUE TO A MAJOR BUG IN CO-OP. WILL BE ADDED AFTER UPDATE***

Summary:
This is my first map, so please keep all criticism on a constructive level. Now, even though this map is small (it is NOT a box map btw), it still took me like 4 or 5 months to complete. This map has changed a lot since I started it, with it first being a box map, then becoming a parking garage, then a cabin, and finally settling on the theme of a Nazi outpost. Now please be warned, this map, in all honesty, is very difficult to complete. Although this map was designed for Co-op play, there are scripts that reduce the difficulty when playing Solo. To wrap things up, this map is not one of those 'get all the doors open to reach the ending' type of map, this map has objectives that you must complete in order to move onto the next area of the map.

Story:
After being stationed at an old abandoned Nazi outpost in Germany, you one day turn on the radio to a very odd, eerie broadcast. Neither can you get in touch with anyone nor find a radio channel with something other than the same broadcast. An event has happened...

The broadcast goes as follows: "For too long, the human race has ignored the signs. Your planet is nearing destruction! Salvation is reserved for those...who pass...the tests. If you survive, an elevated existed awaits. Initiate phase one."

Phase one? You sit at the radio for hours, listening to the endless loop playing over and over again. Wondering what would come of Phase one. You can now recite the whole speech from memory. After getting frustrated and nervous, you bang your fist on the table and get up to step outside for some fresh air. As you lean against the wall outside, and try to wrap your head around everything that's going on, You hear footsteps coming from behind you, and then a short, raspy grunt. You turn around to see some kind of.....creature....limping towards you. "Uh-m...hey, ar-...are you alright?" You get no answer. After closer inspection from afar, you see maggots covering this....thing. Frightened, you run back inside and sit down right by your trusty M1911. But just then, the creature starts sprinting at you. You tell it to stop or you will shoot, but it does not seem to understand. One pop to the head drops it, but then your hear more groaning from outside. Good thing the Nazis always have an arsenal of weaponry! In an endless fight for your life, you soon discover, in your helpless struggle to escape to anywhere you find, that this isn't just an old outpost...

"No wonder this place was abandoned..."

Features:
- Black Ops 1/2 weapons (with only a few stock WaW ones)
- 6 perks (stock + PHD and Mulekick)
- Black Ops 1 PAP camo
- All weapons are Pack-A-Punchable (done by me)
- Many custom features (play to experience them all ;) )
- No dogs
- Black Ops 2 perk/powerup shaders
- Buyable carpenter (comes in handy on solo)
- Buildable, buyable ending
- All PAP guns have a PAP fire sound and a PAP camo (again, done by me)
- Slightly customized main menu (removed a couple options)
- Removed main menu music (as I find it annoying)
- Buyable perk slots for your whole team
- Solo QR (zombies WILL walk away from you when you are downed)
- A small twist on the buyable ending
- 5-hit Juggernog
- Probably more that I forgot

Screenshots:



Known bugs:
- For some odd reason, PHD takes the machine model of Stamin-Up. I've tried to fix this, but have been unsuccessful
- Buildable parts must be picked up by order of appearance, not just randomly (they're scripted by me so there ya go, lol)
- There are a few pathnode issues that I was unable to resolve, but none of which, atleast to my knowledge, are game-breaking
- PHD and Mulekick machine lights sometimes don't turn on even after the power has been activated
- There was one occurrence of the QR jingle playing when I was on the other side of the map (as if I was standing right next to the machine)
- There may be a couple I forgot. Please let me know ASAP of any that you find

Credits:
sevengpluke/Moses/ODX/Rollonmath42 - Halo M6G Magnum
bamskater33 - black ops perks
ZK - Tutorials
Sage One - Tutorials
JR-Imagine - Custom HUD
thezombiekilla6 - Point depositing scripts
daedra descent - help fixing errors
zombie madness - Black Ops 1/2 non-upgraded weapons
pcmodder - buyable carpenter script
Bluntstuffy - soul chest scripts/anims
HitmanVere - Black Ops 1 PAP camo
The UGX Forums Community - for helping me fix any errors I came across :)
TomBMX - Buyable ending script
It's original creator - zombie counter

There may be one or two people I forgot to mention, so if you helped me, let me know and I'll add you here :D

How fast can you escape?
How fast can you escape solo?

...Can you escape at all?
9 years ago
I was wondering how I can fix the glitch exploit where if a player hits the box then buys a perk, they can trade the perk bottle for the weapon, which gives them a third gun (which can be done over and over until the player has obtained all guns from the box at once). I would move my perks, but that would be a bit excessive (although easy) and I'd much rather just fix it in script. I tried going into the thread that gives a player the perk bottle and disabling the use button until they no longer have the perk bottle, but I can't figure out what function i'd use to do it. I already tried "self AllowUse( false );" and also "self DisableuseButton();", but neither work. Anyone wanna help me out here? This is the only thing keeping my map from being released :\
9 years ago
PLEASE NOTE: This topic is NOT a guide on how to add solo quick revive to your map. This fix is ONLY for if you are using Bam's Black Ops Perks in your map and have already added in solo quick revive. I also take no credit for this fix, as it is in Bam's original tutorial and all credit should and will go to him.

You can find Bam's tutorial on how to add black ops perk into your map here:
http://ugx-mods.com/forum/index.php?topic=2630.0


We've all seen it. That 80% of customs maps that have solo quick revive that doesn't help you in any way, shape, or form. If you're now thinking about a hundred zombies piling up on top of you while you're down, just waiting for you to get back up so that they can instantly knock you right back on your ass, then you're correct!

We all hate that....so why does this problem keep reoccurring? I'm guessing when people read Bam's tutorial for Black Ops perks, they get too overwhelmed and excited to have some fresh, new Black Ops perks in their map, that they completely ignore a very important part of his tutorial. (Or there may be a problem with Script Placer Z, but I don't use that so I can't be sure)

Anyway, this fix is insanely simple and I would really like for new mappers to see how easy the solution is:

- Go into zombiemode.gsc and add this:
Code Snippet
Plaintext
level.revive_point = getEnt("revive_retreat_point","targetname");
Directly under:
Code Snippet
Plaintext
maps\_zombiemode_blockers_new::init();
maps\_zombiemode_spawner::init();
maps\_zombiemode_powerups::init();
maps\_zombiemode_radio::init();
maps\_zombiemode_perks::init();
maps\_zombiemode_tesla::init();
maps\_zombiemode_dogs::init();
maps\_zombiemode_bowie::bowie_init();
maps\_zombiemode_cymbal_monkey::init();
maps\_zombiemode_betty::init();
maps\_zombiemode_timer::init();
maps\_zombiemode_auto_turret::init();

- Now open your map in radiant and add a script_origin where you want your zombies to run to when you go down (for best results, put it in a corner or somewhere players will most likely not be)

- Now press 'N' on your keyboard and enter this KVP:
Code Snippet
Plaintext
targetname : revive_retreat_point

- Save and close your map.

You're done!



PLEASE NOTE: I do not claim any ownership of the solo quick revive script or any of the Black Ops perks/scripts mentioned in this topic. I am merely trying to help out the community by attempting to create a topic that will hopefully be seen by many who do not realize that this will make their map a whole lot more enjoyable.
9 years ago
So this is just a simple little script I put together that allows players to buy an extra perk slot. This is very simple and easy to do, so nobody should have any problems with it :)

NOTE: Due to some issues people have been having, I highly reccomend installing Bam's perks the manual way (i.e. adding the scripts yourself and not using script placer z for them). Now, I only say this because I believe there may be a problem in the script if you do not install them the manual way or do not have them installed. I will re-write the script with the necessary changes and checks when I have the time and will update this topic. Thank you.

Step 1:
Open your map in radiant and place a script model of a perk bottle (or you can use a different model if you'd like), and give it this KVP:
Code Snippet
Plaintext
targetname : perk_bottle_model
Now place a trigger around the perk bottle (or whatever model you used), and give it the KVP:
Code Snippet
Plaintext
targetname : buy_slot_trigger
Save and close your map.

Step 2:
Go into WaWroot/mods/yourmapname/maps and open up YourMapName.gsc

Step 3:
Find this:
Code Snippet
Plaintext
maps\_zombiemode::main();
And directly under that line, paste this:
Code Snippet
Plaintext
thread buyable_perk_slot();
Now, paste this at the very bottom of the file:
Code Snippet
Plaintext
buyable_perk_slot()
{
level.perk_limit = 4; //Initial perk limit, feel free to change
level.perk_limit_max = 8; //Max perk limit, feel free to change
level.buy_slot_cost = 1500; //Cost of perk slot, feel free to change
buy_slot_trigger = getent( "buy_slot_trigger" , "targetname" ); //Gets the trigger entity
perk_bottle_model = getent("perk_bottle","targetname" ); //Gets the model entity

playfxontag (level._effect["powerup_on"], perk_bottle_model, "tag_origin"); //Puts the powerup effect around the bottle
self thread perk_bottle_rotate( perk_bottle_model );

buy_slot_trigger SetCursorHint("HINT_NOICON"); //Gets rid of hand symbol
buy_slot_trigger UseTriggerRequireLookAt(); //Requires the player to look at the trigger to use it
buy_slot_trigger SetHintString("Press &&1 To Buy Perk Slot [Cost: 1500]"); //Hint string players will see

while(1) //Loops so players can use it more than once
{
buy_slot_trigger waittill( "trigger", player ); //Waits until player uses trigger

if(player.score >= level.buy_slot_cost && level.perk_limit < level.perk_limit_max) //Checks to see if the player has enough points
{
player maps\_zombiemode_score::minus_to_player_score( level.buy_slot_cost ); //Subtracts the cost from the player's score
level.perk_limit = level.perk_limit + 1; //Increases the player's perk limit by 1
iprintlnbold( "You Can Now Hold " +level.perk_limit+ "/" +level.perk_limit_max+ " Perks" ); //Displays this message to the player
}

if(player.score >= level.buy_slot_cost && level.perk_limit >= level.perk_limit_max) //checks if the player has reached the max perk limit
{
return;
}
}
}

perk_bottle_rotate( perk_bottle_model )
{
self endon( "disconnect" );
while(1)
{
perk_bottle_model rotateyaw( 360 ,2 ); //Rotates the bottle
wait 2;
}
}
**PLEASE NOTE**

If you have Bam's BO perks in your map, make sure to go into _zombiemode.gsc and delete the level.perk_limit line in there. If you dont, it will cause bugs in the script.



I hope some people find this tutorial helpful, and please let me know if you encounter any problems. :)

Thanks to PROxFTW and Arceus for letting me know of syntax errors :D
9 years ago
Loading ...