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.

Messages - qwerty195


Thought it was about time I revealed a little bit about my map (but not too much! I kept some areas hidden for a reason). I've been working on this map ever since the mod tools came out in September 2016. I've still got quite a bit of important things to add to the map, like a game-ending easter and some sort of boss fight. I don't want to give too much away about the map, but know that I have spent hundreds and hundreds of hours on it, and there are plenty of secrets wink.

The song is called: Atrtdsrwiflaetfotl (can you believe thats even a name?)
7 years ago
I got this perk thing figured out alright and everything works fine, except that Solo Quick Revive doesn't work after you purchase the custom perk. You just die like you don't have it.
7 years ago
Quote
Its not properly giving you perks weaponfile, thats why you cant sprint/knife and animation doesnt play
I figured it out. Like you said I didn't do the perk bottle weapon correctly and that caused all the errors. I changed it back to the stock speed cola bottle and now it works fine.
7 years ago
Okay I have no idea why this has happened because it was working alright earlier, but now whenever I buy the custom perk, this happens:
  • There is no animation involving the drinking of the perk
  • The shader doesn't appear
  • The actual perk effect doesn't happen
  • Player can no longer sprint or knife
  • Seems to nullify the effects of Solo quick revive (maybe other perks; I haven't really tested)
This is obviously very broken and I don't know why. I checked through all the files a million times to see that I've followed the tutorial, but maybe I'm missing something? The last thing I was doing was trying to get the custom models for the perk machine, bottle and shader to work (which by the way, the perk machine model does work). Any ideas?
7 years ago
Well, it sounds like either that ee is not complete, or maybe there is a string typo or something like that. You can add prints to see where it is getting hung up at.
What do you mean add prints?
7 years ago
I made a custom model for the perk machine and bottle weapon. How do I refer to them in the gsh though? I don't tink just putting the name in from APE works.
7 years ago
Alright I got the collectors to collect souls again. They collect souls, then move to the correct pedestal. Everything works except for the door. It doesn't open and the hintstring doesn't change.
7 years ago
So I put in the script, set the level.grow_soul_explode to false, and created a struct where I want the rock to end up. I selected the rock (which has the targetname "grow_souls" like it should, and is a script model) and then selected the struct and pressed W, created a line with an arrow pointing from the rock to the struct. The problem is, when I go in game the rocks are all just where they end up, at the script struct, from the beginning, And you can't collect any souls. The magical door doesn't even open up.
7 years ago
I appreciate your quick response, its very helpful, but I am a little confused. I inserted the script in MonitorGrowSouls and set level.grow_soul_explode to false, but I am a little confused where to put the struct and what KVPs it should have. Also, I don't have an FX for the rocks, but I do have a different colored light for each one of them that I would like to move with them, or at least delete themselves and then reappear at the end. I am know somewhat how to script but as you could see before, not very well. I'm just a little confused whats going on in the script right now, and if could explain it that would be awesome, and would help me become a better scripter in the long run.
7 years ago
Hello, I was editing your script for the soul collectors and I ran into some problems that only you, the creator, might know how to fix. What I wanted to do was make it so that every time a soul collector was finished (in my case they are 4 different colored rocks) the rock of that soul collector would move to its pedestal, as well as the light that made them look glowing. This is currently my script:
Code Snippet
Plaintext
#using scripts\shared\flag_shared;
#using scripts\zm\_zm_perks;
#using scripts\shared\array_shared;
#using scripts\zm\_zm_audio;
#using scripts\zm\_zm_powerups;
#using scripts\shared\util_shared;
#using scripts\codescripts\struct;
#using scripts\shared\laststand_shared;
#using scripts\zm\_zm_weapons;

/*
#####################
by: M.A.K.E C E N T S
#####################
Script: v1.1               //MAKE SURE ALL ENTITIES ARE PRESENT IN RADIANT!//

scriptparsetree,scripts/zm/growing_soulbox.gsc
fx,zombie/fx_ritual_pap_energy_trail
//fx,any other fx you add
//the following is optional for anims
xanim,youranimhere//your anim here
rawfile,animtrees/youranimtreename.atr//your animtree here


###############################################################################
*/

// #precache( "xanim", "youranimhere");//your anim here

#precache( "fx", "zombie/fx_powerup_on_green_zmb" );
#precache( "fx", "zombie/fx_ritual_pap_energy_trail" );
#precache( "fx", "zombie/fx_powerup_off_green_zmb" );
#namespace grow_soul;

//#using_animtree( "youranimtreename" );//your animtree here

function init()
{
level.post_blue_light = GetEnt( "post_blue_light", "targetname");
level.post_green_light = GetEnt( "post_green_light", "targetname");
level.post_yellow_light = GetEnt( "post_yellow_light", "targetname");
level.post_red_light = GetEnt( "post_red_light", "targetname");
level.post_blue_light Hide();
level.post_green_light Hide();
level.post_yellow_light Hide();
level.post_red_light Hide();
//vars for growing and reward
level.grow_soul_grow = true;//true to grow, and false to not grow
level.grow_soul_final_reward = "door";//options: gun, ending, door
level.grow_soul_start_scale = 0.75;//starting scale of model
level.grow_soul_anim = undefined;//set to true to play an anim, define down in PlayMyAnim function, and uncomment anim related lines
level.grow_soulallreward = "raygun_mark3";
level.grow_soul_explode = true;
level.grow_soulfx_limit = 5;
level.grow_soul_growth = 0.05;//growth per zombie
level.grow_soul_size = 1;//how big you want it to get scale wise
level.grow_souldistance = 300;//how far away they can be
level.growspeed = .015;//how fast to grow
level.grow_soul_scaler = .001;//how much it grows during growspeed
level.soul_speed_divider = 200;//the higher the number the faster it travels
level.grow_soul_reward = "random_weapon";//can also be other things, random_weapon, tesla, minigun, and so on
level.grow_soul_rand_rewards = array("random_weapon");//can add other powerups also
level.grow_soul_rand_weapons = array( "ar_damage", "lmg_cqb", "shotgun_pump", "smg_versatile" );//added for the weapons to randomly reward
level.grow_soul_randomize = true;//make false or undefined to not randomize rewards
//vars for fx and sounds
level.grow_soulsoulfx = "zombie/fx_ritual_pap_energy_trail";//fx for the soul to travel
level.grow_soulenterfx = "zombie/fx_powerup_grab_red_zmb";//fx for when the soul gets to the box
level.grow_soulexplode = "zombie/fx_powerup_off_green_zmb";//fx for exploding
level.grow_soulentersound = "evt_nuked";//play sound for soul to box
level.grow_soulrewardsound = "zmb_couch_slam";//sound to play when box is
level.grow_soul_idlefx = undefined;//"zombie/fx_powerup_on_green_zmb";// fx for model while idle

//start it up
grow_souls = GetEntArray("grow_soul","targetname");
array::thread_all(grow_souls, &MonitorGrowSouls);
level.grow_souls = grow_souls.size;
thread WatchZombies();
thread SetUpReward();
}

function SetUpReward()
{
if(isdefined(level.grow_soul_final_reward))
{
if(level.grow_soul_final_reward=="door")
{
if(level.grow_soul_final_reward=="door")
{
trigs = GetEntArray("grow_soul_door","targetname");
array::thread_all(trigs, &GrowSoulDoor);
}
}
else if(level.grow_soul_final_reward=="ending")
{
trig = GetEnt("grow_soul_ending","targetname");
//trig Hide();
trig thread GrowSoulEnding();
}
}
}

function GrowSoulEnding()
{
self SetCursorHint("HINT_NOICON");
self SetHintString("You may not leave until you finish collecting my souls.");
level waittill("allgrowsouls");
IPrintLnBold("You may now escape, if you can.");
self Show();
cost = 50000;
if(isdefined(self.zombie_cost))
{
cost = self.zombie_cost;
}
self SetCursorHint("HINT_NOICON");
self SetHintString("Press & hold [{+activate}] for buyable ending [Cost: " + cost + "].");
while(1)
{
self waittill("trigger", player);
if(player.cost+5<cost)
{
player PlayLocalSound("zmb_no_cha_ching");
continue;
}
player PlayLocalSound("zmb_cha_ching");
IPrintLnBold("Congratulations! You escaped in " + level.round_number + " rounds.");
level notify("end_game");
}
}

function GrowSoulDoor()
{
self SetCursorHint("HINT_NOICON");
self SetHintString("It is too soon. Collect the Four Stones First");
if(isdefined(self.script_flag) && self.script_flag!="")
{
flag::init(self.script_flag);
}
self thread HandlePaths(false);
level waittill("allgrowsouls");
IPrintLnBold("You Sense an Awakening");
self SetHintString("");
self thread HandlePaths();
if(isdefined(self.script_flag))
{
flag::set(self.script_flag);
}
wait(1);
self delete();
}

function HandlePaths(connect = true)
{
if(isdefined(self.target))
{
doors = GetEntArray(self.target,"targetname");
foreach(door in doors)
{
if(!isdefined(door.model))
{
if(connect)
{
door NotSolid();
door ConnectPaths();
}
else
{
door DisconnectPaths();
}
}
if(connect)
{
if(isdefined(door.script_noteworthy) && door.script_noteworthy=="clip")
{
door Delete();
}
else
{
if(isdefined(door.script_vector))
{
vector = VectorScale( door.script_vector, 1 );
IPrintLnBold("move door");
IPrintLnBold(self.origin + vector);
door MoveTo(self.origin + vector,1);
}
if(isdefined(door.script_sound))
{
door PlaySound(door.script_sound);
}
}
}
if(isdefined(door))
{
door thread HandlePaths(connect);
}
}
}
}

function MonitorGrowSouls()
{
self endon("death");
if(isdefined(level.grow_soul_anim) && level.grow_soul_anim)
{
self thread PlayMyAnim();
}
if(isdefined(self) && isdefined(level.grow_soul_idlefx))
{
PlayFXOnTag(level.grow_soul_idlefx,self,"tag_origin");
}
if(isdefined(self))
{
if(isdefined(level.grow_soul_start_scale))
{
self.scale = level.grow_soul_start_scale;
}
else
{
self.scale = 1;
}
}
while(isdefined(self) && self.scale<level.grow_soul_size)
{
wait(.05);
}
if(isdefined(self) && isdefined(level.grow_soul_explode) && level.grow_soul_explode)
{
self thread BlowUpGrowSoul();
}
}

function PlayMyAnim()
{
// self UseAnimTree(#animtree);
// self AnimScripted("done",self.origin,self.angles,%youranimhere);
}

function BlowUpGrowSoul()
{
self endon("death");
level.grow_souls--;
if(level.grow_souls<=0)
{
thread RewardForAllGrowSouls();
}
if(isdefined(self) && isdefined(level.grow_soul_idlefx))
{
PlayFX(level.grow_soulexplode,self.origin);
}
// Playfx( level._effect["lightning_dog_spawn"], self.origin );
if(isdefined(self))
{
self thread lets_get_moving();
self thread RewardPlayers();
}
}

function lets_get_moving()
{
blue   = GetEnt( "blue_rock", "script_noteworthy" );
green  = GetEnt( "green_rock", "script_noteworthy" );
yellow = GetEnt( "yellow_rock", "script_noteworthy" );
red    = GetEnt( "red_rock", "script_noteworthy" );
blue_light   = GetEnt( "blue_light", "targetname" );
green_light  = GetEnt( "green_light", "targetname" );
yellow_light = GetEnt( "yellow_light", "targetname" );
red_light    = GetEnt( "red_light", "targetname" );
pre_blue_origin = GetEnt( "pre_blue_origin", "targetname");
pre_green_origin = GetEnt( "pre_green_origin", "targetname");
pre_yellow_origin = GetEnt( "pre_yellow_origin", "targetname");
pre_red_origin = GetEnt( "pre_red_origin", "targetname");
blue_origin = GetEnt( "blue_origin", "targetname");
green_origin = GetEnt( "green_origin", "targetname");
yellow_origin = GetEnt( "yellow_origin", "targetname");
red_origin = GetEnt( "red_origin", "targetname");

if(level.closest == blue)
{
blue_light Delete();
blue MoveZ( -50, 3);
blue MoveTo( pre_blue_origin, 0.05);
blue MoveTo( blue_origin, 5);
level.post_blue_light show();
}
else if(level.closest == green)
{
green_light Delete();
green MoveZ( -50, 3);
green MoveTo( pre_green_origin, 0.05);
green MoveTo( green_origin, 5);
level.post_green_light show();
}
else if(level.closest == yellow)
{
yellow_light Delete();
yellow MoveZ( -50, 3);
yellow MoveTo( pre_yellow_origin, 0.05);
yellow MoveTo( yellow_origin, 5);
level.post_yellow_light show();
}
else
{
red_light Delete();
red MoveZ( -50, 3);
red MoveTo( pre_red_origin, 0.05);
red MoveTo( red_origin, 5);
level.post_red_light show();
}

}
//modified section down to end of SpinMe for gun give reward, set to ray gun
function RewardPlayers()
{
self endon("death");
if(isdefined(self))
{
self PlaySound(level.grow_soulrewardsound);
}
//script_script kvp on model will override level settings
if(isdefined(self.script_string))
{
if(self.script_string == "random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( self.script_string, self.origin);
}
}
else
{
if(isdefined(level.grow_soul_randomize) && level.grow_soul_randomize)
{
reward = array::randomize(level.grow_soul_rand_rewards)[0];
if(!isdefined(level.grow_soullastreward))
{
if(reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( reward, self.origin);
}
level.grow_soullastreward = reward;
}
else
{
while(reward==level.grow_soullastreward || (reward == "minigun" && level.round_number<5))
{
reward = array::randomize(level.grow_soul_rand_rewards)[0];
}
if(reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( reward, self.origin);
}
level.grow_soullastreward = reward;
}
}
else
{
if(level.grow_soul_reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( level.grow_soul_reward, self.origin);
}
}
}
if(isdefined(self.target))
{
clips = GetEntArray(self.target,"targetname");
foreach(clip in clips)
{
clip ConnectPaths();
clip Delete();
}
}
self delete();
}

function SetGunHint(text, trig)
{
if(isdefined(self.grow_soul_hud))
{
return;
}
self.grow_soul_hud = NewClientHudElem( self );
self.grow_soul_hud.horzAlign = "center";
self.grow_soul_hud.vertAlign = "middle";
self.grow_soul_hud.alignX = "center";
self.grow_soul_hud.alignY = "middle";
self.grow_soul_hud.foreground = 1;
self.grow_soul_hud.fontscale = 1;
self.grow_soul_hud.alpha = 1;
self.grow_soul_hud.color = ( 0.44, .74, .94 );
self.grow_soul_hud SetText(text);
while(isdefined(trig) && self IsTouching(trig))
{
wait(.05);
}
self.grow_soul_hud SetText("");
self.grow_soul_hud Destroy();
self.grow_soul_hud = undefined;
}

function RewardForAllGrowSouls()
{
level notify("allgrowsouls");
if(!isdefined(level.grow_soul_final_reward) || level.grow_soul_final_reward == "gun")
{
IPrintLnBold("Soul collection complete! Find & Claim your reward!");
structs = struct::get_array("grow_soul_reward", "targetname");
players = GetPlayers();
for( i=0;i<players.size;i++ )
{
thread RewardGun(structs[i].origin);
}
}
}

function RewardGun(pos, weapon = level.grow_soulallreward)
{
gun = spawn("script_model", pos);
playsoundatposition("zmb_spawn_powerup", pos);

gun SetModel(GetWeaponWorldModel(GetWeapon(weapon)));
PlayFXOnTag(level._effect["powerup_grabbed_solo"], gun, "tag_orign");
trig = spawn("trigger_radius", gun.origin, 0, 20, 50);
gun thread SpinMe();
gun thread GiveMe(weapon, trig);
if(weapon != level.grow_soulallreward)
{
gun thread LifeTime(trig);
}
}

function LifeTime(trig)
{
self endon("death");
wait(120);//wait 2 minutes then delete
if(isdefined(self))
{
self notify("rewardgun_delete");
}
if(isdefined(trig))
{
trig delete();
}
if(isdefined(self))
{
self delete();
}
}

function GiveMe(weapon = level.grow_soulallreward, trig)
{
self endon("rewardgun_delete");
while(1)
{
trig waittill("trigger", player);
player thread SetGunHint("Press & hold [{+activate}] to take weapon.", trig);
if(player HasWeapon(getweapon("minigun")))
{
continue;
}
if(!(player UseButtonPressed()))
{
continue;
}
if(player HasWeapon(getweapon(weapon)))
{
continue;
}
if(player laststand::player_is_in_laststand())
{
continue;
}
trig delete();
self delete();
player zm_weapons::weapon_give(getweapon(weapon));
player SwitchToWeapon(getweapon(weapon));
break;
wait(.1);
}
}

function SpinMe()
{
self endon("rewardgun_delete");
self endon("death");
if(isdefined(self))
{
PlayFXOnTag(level.grow_soul_idlefx,self,"tag_origin");
}
while(isdefined(self))
{
if(isdefined(self))
{
self rotateyaw(360,2);
}
wait(1.9);
}
}

function WatchZombies()
{
level endon("allgrowsouls");
while(1)
{
zombies = GetAiSpeciesArray( "axis", "all" );
for(i=0;i<zombies.size;i++)
{
if(isdefined(zombies[i].grow_soul))
{
continue;
}
else
{
zombies[i] thread WatchMe();
}
}
wait(.05);
}
}

function WatchMe()
{
level endon("allgrowsouls");
if(isdefined(self))
{
self.grow_soul = true;
}
else
{
return;
}
self waittill("death");
// start = self GetTagOrigin( "J_SpineLower" );//different for dog
start = self.origin+(0,0,60);
if(!isdefined(start))
{
return;
}
grow_souls = GetEntArray("grow_soul","targetname");
level.closest = level.grow_souldistance;
cgs = undefined;
foreach(gs in grow_souls)
{
if(Distance(start,gs.origin)<level.closest && BulletTracePassed( start, gs.origin+(0,0,50), false, self ))
{
level.closest = Distance(start,gs.origin);
cgs = gs;
}
}
if(!isdefined(cgs) || !isdefined(cgs.origin))
{
return;
}
cgs thread SendSoul(start);
}

function SendSoul(start)
{
if(isdefined(self))
{
end = self.origin;
}
if(!isdefined(start) || !isdefined(end))
{
return;
}
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
if(isdefined(self))
{
if(isdefined(level.grow_soul_grow) && level.grow_soul_grow)
{
self thread Grow();
}
else
{
self.scale+=level.grow_soul_growth;
}
}
if(!isdefined(level.grow_soulfx_count))
{
level.grow_soulfx_count = 0;
}
if(level.grow_soulfx_count < level.grow_soulfx_limit)
{
level.grow_soulfx_count++;
fxOrg = util::spawn_model( "tag_origin", start );
fx = PlayFxOnTag( level.grow_soulsoulfx, fxOrg, "tag_origin" );
time = Distance(start,end)/level.soul_speed_divider;
fxOrg MoveTo(end+(0,0,50),time);
fxOrg waittill(time - .05);
fxOrg moveto(end, .5);
fxOrg waittill("movedone");
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
PlayFX(level.grow_soulenterfx,end);
fxOrg delete();
level.grow_soulfx_count--;
}
else
{
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
PlayFX(level.grow_soulenterfx,end);
}
}

function Grow()
{
level endon("allgrowsouls");
self endon("death");
scale = 0;
while(isdefined(self) && scale<level.grow_soul_growth)
{
wait(level.growspeed);
if(isdefined(self))
{
self SetScale(self.scale+level.grow_soul_scaler);
}
if(isdefined(self))
{
self.scale = self.scale+level.grow_soul_scaler;
}
scale+=level.grow_soul_scaler;
if(isdefined(self) && self.scale>=level.grow_soul_size)
{
break;
}
}
}


With most of the changes being in:
Code Snippet
Plaintext
function lets_get_moving()
{
blue   = GetEnt( "blue_rock", "script_noteworthy" );
green  = GetEnt( "green_rock", "script_noteworthy" );
yellow = GetEnt( "yellow_rock", "script_noteworthy" );
red    = GetEnt( "red_rock", "script_noteworthy" );
blue_light   = GetEnt( "blue_light", "targetname" );
green_light  = GetEnt( "green_light", "targetname" );
yellow_light = GetEnt( "yellow_light", "targetname" );
red_light    = GetEnt( "red_light", "targetname" );
pre_blue_origin = GetEnt( "pre_blue_origin", "targetname");
pre_green_origin = GetEnt( "pre_green_origin", "targetname");
pre_yellow_origin = GetEnt( "pre_yellow_origin", "targetname");
pre_red_origin = GetEnt( "pre_red_origin", "targetname");
blue_origin = GetEnt( "blue_origin", "targetname");
green_origin = GetEnt( "green_origin", "targetname");
yellow_origin = GetEnt( "yellow_origin", "targetname");
red_origin = GetEnt( "red_origin", "targetname");

if(level.closest == blue)
{
blue_light Delete();
blue MoveZ( -50, 3);
blue MoveTo( pre_blue_origin, 0.05);
blue MoveTo( blue_origin, 5);
level.post_blue_light show();
}
else if(level.closest == green)
{
green_light Delete();
green MoveZ( -50, 3);
green MoveTo( pre_green_origin, 0.05);
green MoveTo( green_origin, 5);
level.post_green_light show();
}
else if(level.closest == yellow)
{
yellow_light Delete();
yellow MoveZ( -50, 3);
yellow MoveTo( pre_yellow_origin, 0.05);
yellow MoveTo( yellow_origin, 5);
level.post_yellow_light show();
}
else
{
red_light Delete();
red MoveZ( -50, 3);
red MoveTo( pre_red_origin, 0.05);
red MoveTo( red_origin, 5);
level.post_red_light show();
}

}
I think the reason it doesn't work may be due to level.closest not actually being the closest soul collector. I looked through your script and I was fairly confused, being new to scripting and all, and I couldn't find a variable defined for the single soul collector the player has completed. I appreciate any help.
7 years ago
So I have been tweaking the Growing Soul Collectors script by MakeCents, so that the objects that collect the souls (in my case 4 rocks, blue, green, red and yellow)and their lights move to these 4 pedestals once each one finishes collecting its souls. I am not very good when it comes to scripting and reading through the script was pretty difficult, so this was the best I could do:
Code Snippet
Plaintext
#using scripts\shared\flag_shared;
#using scripts\zm\_zm_perks;
#using scripts\shared\array_shared;
#using scripts\zm\_zm_audio;
#using scripts\zm\_zm_powerups;
#using scripts\shared\util_shared;
#using scripts\codescripts\struct;
#using scripts\shared\laststand_shared;
#using scripts\zm\_zm_weapons;

/*
#####################
by: M.A.K.E C E N T S
#####################
Script: v1.1

grow_soul::init(  );

#using scripts\zm\growing_soulbox;

scriptparsetree,scripts/zm/growing_soulbox.gsc
fx,zombie/fx_ritual_pap_energy_trail
//fx,any other fx you add
//the following is optional for anims
xanim,youranimhere//your anim here
rawfile,animtrees/youranimtreename.atr//your animtree here


###############################################################################
*/

// #precache( "xanim", "youranimhere");//your anim here

#precache( "fx", "zombie/fx_powerup_on_green_zmb" );
#precache( "fx", "zombie/fx_ritual_pap_energy_trail" );
#precache( "fx", "zombie/fx_powerup_off_green_zmb" );
#namespace grow_soul;

//#using_animtree( "youranimtreename" );//your animtree here

function init()
{
//vars for growing and reward
level.grow_soul_grow = true;//true to grow, and false to not grow
level.grow_soul_final_reward = "door";//options: gun, ending, door
level.grow_soul_start_scale = 0.75;//starting scale of model
level.grow_soul_anim = undefined;//set to true to play an anim, define down in PlayMyAnim function, and uncomment anim related lines
level.grow_soulallreward = "raygun_mark3";
level.grow_soul_explode = true;
level.grow_soulfx_limit = 5;
level.grow_soul_growth = 0.05;//growth per zombie
level.grow_soul_size = 1;//how big you want it to get scale wise
level.grow_souldistance = 300;//how far away they can be
level.growspeed = .015;//how fast to grow
level.grow_soul_scaler = .001;//how much it grows during growspeed
level.soul_speed_divider = 200;//the higher the number the faster it travels
level.grow_soul_reward = "random_weapon";//can also be other things, random_weapon, tesla, minigun, and so on
level.grow_soul_rand_rewards = array("random_weapon");//can add other powerups also
level.grow_soul_rand_weapons = array( "ar_damage", "lmg_cqb", "shotgun_pump", "smg_versatile" );//added for the weapons to randomly reward
level.grow_soul_randomize = true;//make false or undefined to not randomize rewards
//vars for fx and sounds
level.grow_soulsoulfx = "zombie/fx_ritual_pap_energy_trail";//fx for the soul to travel
level.grow_soulenterfx = "zombie/fx_powerup_grab_red_zmb";//fx for when the soul gets to the box
level.grow_soulexplode = "zombie/fx_powerup_off_green_zmb";//fx for exploding
level.grow_soulentersound = "evt_nuked";//play sound for soul to box
level.grow_soulrewardsound = "zmb_couch_slam";//sound to play when box is
level.grow_soul_idlefx = undefined;//"zombie/fx_powerup_on_green_zmb";// fx for model while idle
[color=green] level.post_blue_light = GetEnt( "post_blue_light", "targetname");
level.post_green_light = GetEnt( "post_green_light", "targetname");
level.post_yellow_light = GetEnt( "post_yellow_light", "targetname");
level.post_red_light = GetEnt( "post_red_light", "targetname");
level.post_blue_light Hide();
level.post_green_light Hide();
level.post_yellow_light Hide();
level.post_red_light Hide();[/color]
//start it up
grow_souls = GetEntArray("grow_soul","targetname");
array::thread_all(grow_souls, &MonitorGrowSouls);
level.grow_souls = grow_souls.size;
thread WatchZombies();
thread SetUpReward();
}

function SetUpReward()
{
if(isdefined(level.grow_soul_final_reward))
{
if(level.grow_soul_final_reward=="door")
{
if(level.grow_soul_final_reward=="door")
{
trigs = GetEntArray("grow_soul_door","targetname");
array::thread_all(trigs, &GrowSoulDoor);
}
}
else if(level.grow_soul_final_reward=="ending")
{
trig = GetEnt("grow_soul_ending","targetname");
//trig Hide();
trig thread GrowSoulEnding();
}
}
}

function GrowSoulEnding()
{
self SetCursorHint("HINT_NOICON");
self SetHintString("You may not leave until you finish collecting my souls.");
level waittill("allgrowsouls");
IPrintLnBold("You may now escape, if you can.");
self Show();
cost = 50000;
if(isdefined(self.zombie_cost))
{
cost = self.zombie_cost;
}
self SetCursorHint("HINT_NOICON");
self SetHintString("Press & hold [{+activate}] for buyable ending [Cost: " + cost + "].");
while(1)
{
self waittill("trigger", player);
if(player.cost+5<cost)
{
player PlayLocalSound("zmb_no_cha_ching");
continue;
}
player PlayLocalSound("zmb_cha_ching");
IPrintLnBold("Congratulations! You escaped in " + level.round_number + " rounds.");
level notify("end_game");
}
}

function GrowSoulDoor()
{
self SetCursorHint("HINT_NOICON");
self SetHintString("This door is opened magically.");
if(isdefined(self.script_flag) && self.script_flag!="")
{
flag::init(self.script_flag);
}
self thread HandlePaths(false);
level waittill("allgrowsouls");
IPrintLnBold("You Sense an Awakening");
self SetHintString("");
self thread HandlePaths();
if(isdefined(self.script_flag))
{
flag::set(self.script_flag);
}
wait(1);
self delete();
}

function HandlePaths(connect = true)
{
if(isdefined(self.target))
{
doors = GetEntArray(self.target,"targetname");
foreach(door in doors)
{
if(!isdefined(door.model))
{
if(connect)
{
door NotSolid();
door ConnectPaths();
}
else
{
door DisconnectPaths();
}
}
if(connect)
{
if(isdefined(door.script_noteworthy) && door.script_noteworthy=="clip")
{
door Delete();
}
else
{
if(isdefined(door.script_vector))
{
vector = VectorScale( door.script_vector, 1 );
IPrintLnBold("move door");
IPrintLnBold(self.origin + vector);
door MoveTo(self.origin + vector,1);
}
if(isdefined(door.script_sound))
{
door PlaySound(door.script_sound);
}
}
}
if(isdefined(door))
{
door thread HandlePaths(connect);
}
}
}
}

function MonitorGrowSouls()
{
self endon("death");
if(isdefined(level.grow_soul_anim) && level.grow_soul_anim)
{
self thread PlayMyAnim();
}
if(isdefined(self) && isdefined(level.grow_soul_idlefx))
{
PlayFXOnTag(level.grow_soul_idlefx,self,"tag_origin");
}
if(isdefined(self))
{
if(isdefined(level.grow_soul_start_scale))
{
self.scale = level.grow_soul_start_scale;
}
else
{
self.scale = 1;
}
}
while(isdefined(self) && self.scale<level.grow_soul_size)
{
wait(.05);
}
if(isdefined(self) && isdefined(level.grow_soul_explode) && level.grow_soul_explode)
{
self thread BlowUpGrowSoul();
}
}

function PlayMyAnim()
{
// self UseAnimTree(#animtree);
// self AnimScripted("done",self.origin,self.angles,%youranimhere);
}

function BlowUpGrowSoul()
{
self endon("death");
level.grow_souls--;
if(level.grow_souls<=0)
{
thread RewardForAllGrowSouls();
}
if(isdefined(self) && isdefined(level.grow_soul_idlefx))
{
PlayFX(level.grow_soulexplode,self.origin);
}
// Playfx( level._effect["lightning_dog_spawn"], self.origin );
if(isdefined(self))
{
self thread lets_get_moving();
self thread RewardPlayers();
}
}

[color=green]function lets_get_moving()
{
blue   = GetEnt( "blue_rock", "script_noteworthy" );
green  = GetEnt( "green_rock", "script_noteworthy" );
yellow = GetEnt( "yellow_rock", "script_noteworthy" );
red    = GetEnt( "red_rock", "script_noteworthy" );
blue_light   = GetEnt( "blue_light", "targetname" );
green_light  = GetEnt( "green_light", "targetname" );
yellow_light = GetEnt( "yellow_light", "targetname" );
red_light    = GetEnt( "red_light", "targetname" );
pre_blue_origin = GetEnt( "pre_blue_origin", "targetname");
pre_green_origin = GetEnt( "pre_green_origin", "targetname");
pre_yellow_origin = GetEnt( "pre_yellow_origin", "targetname");
pre_red_origin = GetEnt( "pre_red_origin", "targetname");
blue_origin = GetEnt( "blue_origin", "targetname");
green_origin = GetEnt( "green_origin", "targetname");
yellow_origin = GetEnt( "yellow_origin", "targetname");
red_origin = GetEnt( "red_origin", "targetname");

if(level.closest == blue)
{
blue_light Delete();
blue MoveZ( -50, 3);
blue MoveTo( pre_blue_origin, 0.05);
blue MoveTo( blue_origin, 5);
level.post_blue_light show();
}
else if(level.closest == green)
{
green_light Delete();
greenMoveZ( -50, 3);
greenMoveTo( pre_green_origin, 0.05);
greenMoveTo( green_origin, 5);
level.post_green_light show();
}
else if(level.closest == yellow)
{
yellow_light Delete();
yellow MoveZ( -50, 3);
yellow MoveTo( pre_yellow_origin, 0.05);
yellow MoveTo( yellow_origin, 5);
level.post_yellow_light show();
}
else
{
red_light Delete();
red MoveZ( -50, 3);
red MoveTo( pre_red_origin, 0.05);
red MoveTo( red_origin, 5);
level.post_red_light show();
}

}[/color]
//modified section down to end of SpinMe for gun give reward, set to ray gun
function RewardPlayers()
{
self endon("death");
if(isdefined(self))
{
self PlaySound(level.grow_soulrewardsound);
}
//script_script kvp on model will override level settings
if(isdefined(self.script_string))
{
if(self.script_string == "random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( self.script_string, self.origin);
}
}
else
{
if(isdefined(level.grow_soul_randomize) && level.grow_soul_randomize)
{
reward = array::randomize(level.grow_soul_rand_rewards)[0];
if(!isdefined(level.grow_soullastreward))
{
if(reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( reward, self.origin);
}
level.grow_soullastreward = reward;
}
else
{
while(reward==level.grow_soullastreward || (reward == "minigun" && level.round_number<5))
{
reward = array::randomize(level.grow_soul_rand_rewards)[0];
}
if(reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( reward, self.origin);
}
level.grow_soullastreward = reward;
}
}
else
{
if(level.grow_soul_reward=="random_weapon")
{
thread RewardGun(self.origin+(0,0,50), array::randomize(level.grow_soul_rand_weapons)[0]);
}
else
{
zm_powerups::specific_powerup_drop( level.grow_soul_reward, self.origin);
}
}
}
if(isdefined(self.target))
{
clips = GetEntArray(self.target,"targetname");
foreach(clip in clips)
{
clip ConnectPaths();
clip Delete();
}
}
self delete();
}

function SetGunHint(text, trig)
{
if(isdefined(self.grow_soul_hud))
{
return;
}
self.grow_soul_hud = NewClientHudElem( self );
self.grow_soul_hud.horzAlign = "center";
self.grow_soul_hud.vertAlign = "middle";
self.grow_soul_hud.alignX = "center";
self.grow_soul_hud.alignY = "middle";
self.grow_soul_hud.foreground = 1;
self.grow_soul_hud.fontscale = 1;
self.grow_soul_hud.alpha = 1;
self.grow_soul_hud.color = ( 0.44, .74, .94 );
self.grow_soul_hud SetText(text);
while(isdefined(trig) && self IsTouching(trig))
{
wait(.05);
}
self.grow_soul_hud SetText("");
self.grow_soul_hud Destroy();
self.grow_soul_hud = undefined;
}

function RewardForAllGrowSouls()
{
level notify("allgrowsouls");
if(!isdefined(level.grow_soul_final_reward) || level.grow_soul_final_reward == "gun")
{
IPrintLnBold("Soul collection complete! Find & Claim your reward!");
structs = struct::get_array("grow_soul_reward", "targetname");
players = GetPlayers();
for( i=0;i<players.size;i++ )
{
thread RewardGun(structs[i].origin);
}
}
}

function RewardGun(pos, weapon = level.grow_soulallreward)
{
gun = spawn("script_model", pos);
playsoundatposition("zmb_spawn_powerup", pos);

gun SetModel(GetWeaponWorldModel(GetWeapon(weapon)));
PlayFXOnTag(level._effect["powerup_grabbed_solo"], gun, "tag_orign");
trig = spawn("trigger_radius", gun.origin, 0, 20, 50);
gun thread SpinMe();
gun thread GiveMe(weapon, trig);
if(weapon != level.grow_soulallreward)
{
gun thread LifeTime(trig);
}
}

function LifeTime(trig)
{
self endon("death");
wait(120);//wait 2 minutes then delete
if(isdefined(self))
{
self notify("rewardgun_delete");
}
if(isdefined(trig))
{
trig delete();
}
if(isdefined(self))
{
self delete();
}
}

function GiveMe(weapon = level.grow_soulallreward, trig)
{
self endon("rewardgun_delete");
while(1)
{
trig waittill("trigger", player);
player thread SetGunHint("Press & hold [{+activate}] to take weapon.", trig);
if(player HasWeapon(getweapon("minigun")))
{
continue;
}
if(!(player UseButtonPressed()))
{
continue;
}
if(player HasWeapon(getweapon(weapon)))
{
continue;
}
if(player laststand::player_is_in_laststand())
{
continue;
}
trig delete();
self delete();
player zm_weapons::weapon_give(getweapon(weapon));
player SwitchToWeapon(getweapon(weapon));
break;
wait(.1);
}
}

function SpinMe()
{
self endon("rewardgun_delete");
self endon("death");
if(isdefined(self))
{
PlayFXOnTag(level.grow_soul_idlefx,self,"tag_origin");
}
while(isdefined(self))
{
if(isdefined(self))
{
self rotateyaw(360,2);
}
wait(1.9);
}
}

function WatchZombies()
{
level endon("allgrowsouls");
while(1)
{
zombies = GetAiSpeciesArray( "axis", "all" );
for(i=0;i<zombies.size;i++)
{
if(isdefined(zombies[i].grow_soul))
{
continue;
}
else
{
zombies[i] thread WatchMe();
}
}
wait(.05);
}
}

function WatchMe()
{
level endon("allgrowsouls");
if(isdefined(self))
{
self.grow_soul = true;
}
else
{
return;
}
self waittill("death");
// start = self GetTagOrigin( "J_SpineLower" );//different for dog
start = self.origin+(0,0,60);
if(!isdefined(start))
{
return;
}
grow_souls = GetEntArray("grow_soul","targetname");
level.closest = level.grow_souldistance;
cgs = undefined;
foreach(gs in grow_souls)
{
if(Distance(start,gs.origin)<level.closest && BulletTracePassed( start, gs.origin+(0,0,50), false, self ))
{
level.closest = Distance(start,gs.origin);
cgs = gs;
}
}
if(!isdefined(cgs) || !isdefined(cgs.origin))
{
return;
}
cgs thread SendSoul(start);
}

function SendSoul(start)
{
if(isdefined(self))
{
end = self.origin;
}
if(!isdefined(start) || !isdefined(end))
{
return;
}
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
if(isdefined(self))
{
if(isdefined(level.grow_soul_grow) && level.grow_soul_grow)
{
self thread Grow();
}
else
{
self.scale+=level.grow_soul_growth;
}
}
if(!isdefined(level.grow_soulfx_count))
{
level.grow_soulfx_count = 0;
}
if(level.grow_soulfx_count < level.grow_soulfx_limit)
{
level.grow_soulfx_count++;
fxOrg = util::spawn_model( "tag_origin", start );
fx = PlayFxOnTag( level.grow_soulsoulfx, fxOrg, "tag_origin" );
time = Distance(start,end)/level.soul_speed_divider;
fxOrg MoveTo(end+(0,0,50),time);
fxOrg waittill(time - .05);
fxOrg moveto(end, .5);
fxOrg waittill("movedone");
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
PlayFX(level.grow_soulenterfx,end);
fxOrg delete();
level.grow_soulfx_count--;
}
else
{
if(isdefined(self))
{
self PlaySound(level.grow_soulentersound);
}
PlayFX(level.grow_soulenterfx,end);
}
}

function Grow()
{
level endon("allgrowsouls");
self endon("death");
scale = 0;
while(isdefined(self) && scale<level.grow_soul_growth)
{
wait(level.growspeed);
if(isdefined(self))
{
self SetScale(self.scale+level.grow_soul_scaler);
}
if(isdefined(self))
{
self.scale = self.scale+level.grow_soul_scaler;
}
scale+=level.grow_soul_scaler;
if(isdefined(self) && self.scale>=level.grow_soul_size)
{
break;
}
}
}

with most of the changes highlighted in green.
However, when I load my map it crashes (there weren't any errors when compiling) and it gives me this error, that I can't seem to make sense of:
Code Snippet
Plaintext
**** 1 script error(s):
 "1311D191" with 2 parameters in "scripts/zm/growing_soulbox.gsc" at line 0 ****
**** Unresolved external "1311D191" with 2 parameters in "scripts/zm/growing_soulbox.gsc" ****

if anyone could tell me what the error means or what I did wrong that would be great. Any advice on how to write this script would also be appreciated.
7 years ago
Like the Title says, how exactly can you implement swimming like in Zetsubou no Shima? For example how can I make a simple pond where the player and zombies can swim in?

I've tried creating a pond by drawing a brush with a water texture on it, as well as another brush with the water clip on it, but I think there's more to it. For one, Your vision is un-altered while underwater, and looks almost like you're floating. The zombies seem to have a hard time getting into the water and when then do, they just walk on the ground instead doing the weird swimming thing they do on Zetsubou. Also, how on Earth does this work with dogs?

just wondering if anyone could do a tutorial on water, or if anyone has figured anything out about it.
7 years ago
High quality tutorial. Almost as great as the one that taught me how to draw a clip.
Quote
Hello everyone I thought I would post this here since it would help new mappers out.
First off make a box that is big enough to cover your mystery box. Then add a player clip under textures to it so it looks like this: (Image removed from quote.)


After that recompile your map and it should be working properly I may or may have missed something if you have any questions post and ill respond asap.
Its nice to see such an active and helpful community.
7 years ago
Please post questions in the help section, not tutorial section. Also did you not even look at the tutorials in the very section you posted in? There's one for removing the black hand right here: http://ugx-mods.com/forum/index.php/topic,13695.0.html
Hope that helped.
7 years ago
Hey, so infinite Warfare released yesterday and I've already bought it and played a bit. I just wanted to start a discussion to see how the custom zombies community feels about Infinite Warfare and the zombies gamemode.

My initial opinion is that Infinite Warfare is not as bad as I, and many other people, were expecting. Yes, it is set in a futuristic setting which most COD fans are tired of, and yes it does have an advanced movement system, but if you ask me, the game felt a lot like the modern warfare games. The average kill time (the usual time it takes to kill someone, from pulling the trigger to their death) has increased since Black Ops 3, and is a welcome change, as I don't feel like I'm going to die as soon as I spot and enemy. I've only played a little, but I can tell there are a lot of new features that we haven't seen before, such as the combat rig system. Yes it does have annoying supply drops which I strongly hate, but the system is a little bit better to the player because now the player can also earn scrap which lets them choose what they want to get, instead of always spinning the wheel of chance.

As for zombies, I was genuinely impressed. I've only played a little bit, but I can tell you its pretty close to Treyarch zombies. Zombies in Spaceland even has some features that many people wished for in Black Ops 3 but never got. For example, a bank that allows players to share points, an increased perk limit (only up to 5 now, but I believe there's a way to get more perk slots), and even a perk based on BANANA COLADA! So I think its foolish to say that the creators of Infinite warfare don't listen to their fans.

Overall I'm feeling much better about this game than I did seeing Advanced Warfare, or Ghosts for the first time, and I have some high hopes for it. Then again these are all just initial impressions, and the cool features could wear off quick. Only time will tell if this is a worthy game.

Leave your opinions in the comments below. If you hate the game, that's fine, but please provide an explanation rather than just saying that it's awful.
7 years ago
Loading ...