UGX-Mods

Call of Duty 5: World at War => Help Desk => Scripting => Topic started by: jiggy22 on May 02, 2017, 11:35:41 pm

Title: Boss Not Spawning
Post by: jiggy22 on May 02, 2017, 11:35:41 pm
In my Der Riese mod, I'm trying to script a boss into the map, but the only problem I'm having is that it's not spawning. The game plays the boss spawn music, but after that, nothing. I'm not familiar with radiant, but I'm pretty sure spawn points are set through it, right? Well I'm not able to do that, since I've working on a pre-existing map. Is there any way I can set a spawn point for the boss via script? I can provide the script that I'm using if anybody has to look at it. Thanks to anyone who can help me :)
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 04, 2017, 04:25:58 pm
Bumping
Title: Re: Boss Not Spawning
Post by: BluntStuffy on May 04, 2017, 04:59:27 pm
you have to show more info on what you are trying to do, how you spawn the boss etc otherwise it's impossible for anybody to help you out..
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 04, 2017, 06:02:16 pm
Okay, so I'm trying to script the Engineer Zombie into Der Riese using redspace200's pack. I added all of the contents to my WaW folder, as well as my mod and whatnot. In game, however, whenever the boss is supposed to spawn, all that happens is that a sound plays. There's supposed to be a sound that plays whenever the boss spawns into the map, but it skips that and just plays a different sound. What I'm trying to get at is that I'm not sure if I need to edit the script for the boss in order to get him to actually spawn. I've looked at the same script that is being used in a custom map, and there are no changes made to it, so I was assuming that the spawn points are set in radiant. However, since I'm trying to script the boss into Der Riese, I'm unable to set spawn points the same way since Der Riese is a pre-existing map that can't be edited in radiant. Hopefully that all makes sense lol
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 08, 2017, 05:00:37 pm
Bumping!
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 12, 2017, 05:06:57 pm
Bumping again lol
Title: Re: Boss Not Spawning
Post by: BluntStuffy on May 14, 2017, 06:34:44 pm
i Find it hard to believe the spawn-points for it are allready in Der Riese, seems very unlikely to me.
For the rest you rlly need to show the actual code, cause i dont know the scripts from redspace from the top of my head  :)
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 14, 2017, 10:39:55 pm
Here's the script that I'm using:
Code Snippet
Plaintext
#include maps\_anim; 
#include maps\_utility;
#include common_scripts\utility;
#include maps\_music;
#include maps\_zombiemode_utility;
#include maps\_busing;

#using_animtree( "generic_human" );

// Zombie Engineer script by redspace200, give credit if used!!
// Source Model, Animations

// Boss Layout by redspace200
// Give Credit if used...
// You do not have permission to use these scripts unless I say otherwise
// To set specific spawn locations --> script_origin --> "zomeng_spawn"

eng_init()
{
// Set FX here
level._effect["fx_eng_impact"] = loadFX("custom/fx_ai_eng_impact");

// Set Animations here
level.scr_anim["zombie"]["eng_walk_00"] = %ai_zombie_eng_walk_00;
level.scr_anim["zombie"]["eng_walk_01"] = %ai_zombie_eng_walk_01;
level.scr_anim["zombie"]["eng_attack_walk"] = %ai_zombie_eng_attack_walk;
level.scr_anim["zombie"]["eng_sprint_00"] = %ai_zombie_eng_sprint;
level.scr_anim["zombie"]["eng_attack_sprint"] = %ai_zombie_eng_attack_sprint;
level.scr_anim["zombie"]["eng_angry"] = %ai_zombie_eng_angry;
level.scr_anim["zombie"]["eng_spawn"] = %ai_zombie_eng_falldown;

// Set Variables here
level.eng_boss_model = "bo1_char_ger_zombeng_body1_1"; // The Model this boss will use. Defaults (bo1_char_ger_zombeng_body1_1)
level.debug_eng = false; // Enable/Disable debug here. Defaults (false)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
level.eng_use_fx = true; // Enable/Disable use of fx on this ai. Defaults (true)
level.next_eng = 8; // First round ai will spawn on. Defaults (8)
level.eng_round_add = 4; // After 1st spawn, every _ amount of rounds he will return. Defaults (4)
level.eng_health_multiplier = 20; // Amount to * health by. Will be overrided by eng_min_health. Defaults (20)
level.eng_health_multiplier_by_player = true; // Multiply ai health based on the # of players in the game. Will be overrided by eng_min_health. Defaults (true)
level.eng_min_health = 12000; // Min health this ai can have. Defaults (12000)
level.eng_attack_radius = 80; // Radius before ai can begin a Melee Attack. Defaults (80)
level.eng_attack_radius_add = 20; // Radius added to normal Melee Attack Radius for dealing player damage. Defaults (20);
level.eng_attack_damage = 100; // Player Damage Amount. Defaults (100)
level.start_eng_ai = 1; // Start # of ai to spawn on each spawn session. Defaults (1)
level.max_eng_ai = 3; // Max # of ai. Defaults (3)

// Advanced Variables
level.eng_max_roof_distance = 650; // # of units to tallest roof. Defaults (650)
level.eng_total_walk_anims = 2; // Number of possible animations this ai can use for walking. Defaults (2)
level.eng_total_sprint_anims = 1; // Number of possible animations this ai can use for sprinting. Defaults (1)
level.eng_boss_attackanim_delay = .685; // Time before the zombies Melee Attack will actually damage the player (based on anim). Defaults (.685)
level.eng_boss_rageanim_delay = .8; // Time before the Angry Anim will actually stun the player (based on anim). Defaults (.8)
level.eng_attacks_before_sprint = 8; // Number of times ai attack while walking before being forced to sprint. Defaults (8)
level.eng_health_divider = 1.2; // Divides the start health by this number. If the ai health goes below the result, sprint mode will activate. Defaults(1.2)
level.eng_boss_player_stun_radius = 200; // Radius the shake effect is when ai switches from walk to sprint state. Defaults (80)
level.eng_boss_player_stun_type = "electrocution"; // Type of stun effect on the player when ai switches from walk to sprint state. Defaults ("electrocution")
level.eng_boss_player_stun_time = 2.5; // Time the player gets stunned when ai switches from walk to sprint state. Defaults (2.5)
level.eng_ai_increasement = 1; // # of more ai to spawn after each spawn session. Defaults (1)

// Dont modify anything below
PrecacheModel(level.eng_boss_model);
flag_wait("all_players_connected");
level thread eng_spawn_logic();
}
eng_spawn_logic()
{
if (isdefined(level.debug_eng) && level.debug_eng == true)
level thread level_eng_spawn();
spawn_am = level.start_eng_ai;
while(true)
{
level waittill("between_round_over");
if (level.round_number >= level.next_eng)
{
for(i=0;i<spawn_am;i++)
{
wait randomFloatRange(5,15);
level thread level_eng_spawn();
}
spawn_am += level.eng_ai_increasement;
if (spawn_am > level.max_eng_ai) spawn_am = level.max_eng_ai;
level.next_eng = level.round_number + level.eng_round_add;
engPrint("Next Spawn Round: " + level.next_eng);
}
}
}
level_eng_spawn()
{
wait 1;
spawn_point = undefined; use_spawn_point = undefined;
teh_spawns = undefined;
for(am=0;am<50;am++)
{
wait .05;
teh_spawns = level.enemy_spawns;
for(t=0;t<teh_spawns.size;t++)
{
wait .05;
use_spawn_point = teh_spawns[t];
if (use_spawn_point.script_noteworthy == "find_flesh") break;
}
sp = GetStructArray("find_flesh","script_noteworthy");
spawn_points = get_array_of_closest( getPlayers()[randomIntRange(0,getPlayers().size)].origin, sp );
spawn_point = spawn_points[0];
if (spawn_point inMap() && spawn_point in_active_zone() && 0 != spawn_point damageConeTrace(spawn_point.origin + (0,0,level.eng_max_roof_distance) ,self) && isdefined(spawn_point) ) { break; }
}
new_spawns = getEntArray("zomeng_spawn","targetname");
if (new_spawns.size != 0)
{
new_spawns = get_array_of_closest(getPlayers()[randomIntRange(0,getPlayers().size)].origin,new_spawns);
spawn_point = new_spawns[0];
}
ai = spawn_zombie( use_spawn_point ); wait .05;
if (isdefined(ai) )
{
getPlayers()[0] playSound("ai_eng_spawn");
ai forceTeleport(spawn_point.origin + (0,0,-5) );
ai hide();
engPrint("Spawned Eng Zombie at: " + spawn_point.origin);
anime = level.scr_anim["zombie"]["eng_spawn"];
engPrint("Spawn Anim: " + anime);
wait .05;
ai.health = level.zombie_health * level.eng_health_multiplier;
if (isdefined(level.eng_health_multiplier_by_player) && level.eng_health_multiplier_by_player == true && getPlayers().size > 1)
ai.health = ai.health * getPlayers().size;
if (ai.health < level.eng_min_health) ai.health = level.eng_min_health;
ai.is_on_fire = true;
ai.attack_am = 0;
ai.script_string = "riser";
ai.eng_movetype = "walk";
ai.boss_enemy = true; wait .05; ai notify("no_rise");
wait .05;
ai thread zombie_boss_set_move_anim("eng_walk_0" + randomIntRange(0,level.eng_total_walk_anims) );
ai.gibbed = true;
ai StopAnimScripted();
wait .05;
zombie_poi = ai get_zombie_point_of_interest( ai.origin );
ai.enemyoverride = zombie_poi;
ai thread eng_get_favoriteenemy();
ai thread maps\_zombiemode_spawner::zombie_setup_attack_properties();
ai forceteleport(ai.origin+(0,0,38));
wait .05;
ai.ignoreall = true;
ai DetachAll();
ai setModel(level.eng_boss_model);
wait .05;
ai show();
ai animScripted("", ai.origin + (0,0,932) , ai.angles, anime);
ai thread eng_attack_logic();
ai thread eng_walk2sprint_think();
wait getAnimLength(anime);
ai playSound("ai_eng_land");
ai thread eng_amb_sounds();
for(i=0;i<getPlayers().size;i++)
if (Distance(getPlayers()[i].origin,ai.origin) < level.eng_attack_radius + level.eng_attack_radius_add)
{
getPlayers()[i] shellshock( "electrocution", 4 );
radiusdamage(getPlayers()[i].origin,10,level.eng_attack_damage,level.eng_attack_damage,ai,"MOD_PISTOL_BULLET");
}
while(ai.health > 0)
{
ai.deathanim = undefined;
wait .05;
}
ai startRagDoll();
ai launchRagDoll(50);
ai playSound("ai_eng_death_0" + randomIntRange(0,2) );
}
}
eng_amb_sounds()
{
self endon("death");
while(isdefined(self) )
{
self playSound("ai_eng_amb_0" + randomIntRange(0,4) );
wait randomFloatRange(4,8);
}
}
eng_get_favoriteenemy()
{
self endon("death");
while(isdefined(self) )
{
self.goalRadius = 32;
self.ignoreall = true;
self.is_on_fire = true;
self.gibbed = true;
self.ignore_player = undefined;
self.favoriteenemy = get_closest_valid_player( self.origin, self.ignore_player );
self setGoalPos(self.favoriteenemy.origin);
wait .05;
}
}
eng_attack_logic()
{
self endon("death");
while(isdefined(self) )
{
if (isdefined(self.favoriteenemy) && !isdefined(self.traversing) && !isdefined(self.attacking)
&& self aiIsOnGround() && 0 != self.favoriteenemy DamageConeTrace(self.origin + (0,0,30), self) && abs( GetYawToOrigin( self.favoriteenemy.origin ) ) < 45
&& Distance(self.favoriteenemy.origin,self.origin) < level.eng_attack_radius && self.favoriteenemy.sessionstate != "spectator" && !isdefined(self.favoriteenemy.revivetrigger) )
self eng_closeattack();
wait .05;
}
}
eng_closeattack()
{
self endon("death");
self.attacking = true;
engPrint("eng_closeattack");
old_anim = self.current_moveanim;
self thread zombie_boss_set_move_anim( "eng_attack_" + self.eng_movetype );
self playSound("ai_eng_attack_0" + randomIntRange(0,4) );
duration = level.eng_boss_attackanim_delay;
wait duration;
self playSound("attack_whoosh");
self.attack_am ++;
for(i=0;i<getPlayers().size;i++)
{
if (Distance(getPlayers()[i].origin,self.origin) < level.eng_attack_radius + level.eng_attack_radius_add)
{
self.attack_am ++;
self playSound("ai_eng_hit_0" + randomIntRange(0,2) );
getPlayers()[i] shellshock( "electrocution", 4 );
radiusdamage(getPlayers()[i].origin,10,level.eng_attack_damage,level.eng_attack_damage,ai,"MOD_PISTOL_BULLET");
zombie_boss_playFx(level._effect["fx_eng_impact"], self.origin );
}
}
Earthquake(1, 1, self.origin, level.eng_attack_radius + (level.eng_attack_radius_add / 2) );
wait (getAnimLength( level.scr_anim["zombie"]["eng_attack_" + self.eng_movetype] ) ) - duration;
self thread zombie_boss_set_move_anim(old_anim);
wait .2;
self.attacking = undefined;
engPrint("eng_closeattack: over");
}
eng_walk2sprint_think()
{
self endon("death");
hp = self.health;
while(isdefined(self) )
{
wait .05;
if (self.attack_am >= level.eng_attacks_before_sprint || self.health < (hp / level.eng_health_divider) )
{
self thread eng_walk2sprint_rage();
break;
}
}
}
eng_walk2sprint_rage()
{
self endon("death");
if (isdefined(self.attacking) )
while(isdefined(self.attacking) )
wait .4;
engPrint("eng_walk2sprint_rage");
getPlayers()[0] playSound("ai_eng_anger");
anime = level.scr_anim["zombie"]["eng_angry"];
wait .48;
self animScripted("", self getOrigin(), self.angles, anime);
self.attacking = true;
wait level.eng_boss_rageanim_delay;
array_thread( getPlayers(), ::player_boss_stun );
wait (getAnimLength(anime) - level.eng_boss_rageanim_delay);
self thread zombie_boss_set_move_anim("eng_sprint_0" + randomIntRange(0,level.eng_total_sprint_anims) );
self.eng_movetype = "sprint";
self.attacking = undefined;
}
engPrint(msg)
{
if (isdefined(level.debug_eng) && level.debug_eng == true && isdefined(msg) )
iprintlnbold("^3 ZOMBENG: ^7" + msg);
}
zombie_boss_set_move_anim(anime)
{
if (!isdefined(anime) || self.health < 0)
return;
engPrint("^3 New Move Anim: " + anime);
self.current_moveanim = anime;
self.run_combatanim = level.scr_anim["zombie"][anime];
self set_run_anim(anime);
}
player_boss_stun()
{
Earthquake(.1 * level.eng_boss_player_stun_time, level.eng_boss_player_stun_time , self.origin, level.eng_boss_player_stun_radius);
self shellshock( level.eng_boss_player_stun_type , level.eng_boss_player_stun_time , false );
}
zombie_boss_playFx(fx,org)
{
if (isdefined(fx) && isdefined(level._effect[fx]) && isdefined(org) && isdefined(level.eng_use_fx) && level.eng_use_fx == true)
playFx(fx,org);
}
isCloseToAnyPlayer(dist,NOTsame_z_location)
{
if (!isdefined(dist) ) return;
players = getPlayers();
for(i=0;i<players.size;i++)
{
if (Distance(players[i].origin,self.origin) < dist && players[i].sessionstate != "spectator" && !isdefined(players[i].revivetrigger)
&& (isdefined(NOTsame_z_location) || players[i].origin[2] >= self.origin[2] - 32) )
return true;
}
return false;
}
GetYawToOrigin(org)
{
yaw = self.angles[1] - GetYaw(org);
yaw = AngleClamp180( yaw );
return yaw;
}
GetYaw(org)
{
angles = VectorToAngles(org-self.origin);
return angles[1];
}
inMap()
{
playableArea = getEntArray("playable_area", "targetname");
for(m = 0; m < playableArea.size; m++)
if(self isTouching(playableArea[m]))
return true;
return false;
}
aiIsOnGround()
{
org = self.origin[2];
wait .05;
if (self.origin[2] == org)
return true;
return false;
}
in_active_zone()
{
for(z=0;z<level.zones.size;z++)
{
zone = level.zones[ z ];
for (i = 0; i < zone.volumes.size; i++)
{
if ( self IsTouching(zone.volumes[i]) )
return true;
}
}
return false;
}

At the top, it says:
Code Snippet
Plaintext
// To set specific spawn locations --> script_origin --> "zomeng_spawn"

Would I be able to do that via script?
Title: Re: Boss Not Spawning
Post by: Harry Bo21 on May 15, 2017, 09:37:53 am
spawn script origins with that targetname obviously...
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 15, 2017, 03:42:14 pm
Sorry, I'm still new with this. So looking at the script glossary, it says to spawn something, I think I have to use this:

Code Snippet
Plaintext
org = spawn("script_origin",self getorigin());

I just don't know where I'd have to put it in the script...
Title: Re: Boss Not Spawning
Post by: jiggy22 on May 31, 2017, 12:20:22 am
I guess it's time to revive this thread now?

So now I'm working on modding Hellhounds into Call of the Dead in Black Ops (the Engineer boss will come later), and I guess I'm facing the same issue where they just never spawn. In my previous post on this thread, I found this string:

Code Snippet
Plaintext
org = spawn("script_origin",self getorigin());

Which I believe I would have to use in order to place a spawn point, am I right? I know the respective target names to use, I just don't know how I would go about setting it all up. Anyone understand what I'm trying to get at? Thanks for the help :)
Title: Re: Boss Not Spawning
Post by: jiggy22 on June 02, 2017, 04:03:16 am
Bumping again.

Plans have changed once again. Dogs for CotD are scrapped, just going with the Engineer for now. Looking through the gsc files for Kino, I found a couple strings that look something like this:

Code Snippet
Plaintext
	collision = spawn("script_model", (-763, 834, 96));

Would I do something similar to that to set a spawn point for the boss? Like, say something such as:

Code Snippet
Plaintext
	org = spawn("zomeng_spawn",(-146.91, -1390.64, 104.374));
Title: Re: Boss Not Spawning
Post by: X0master on June 02, 2017, 06:17:16 am
Bumping again.

Plans have changed once again. Dogs for CotD are scrapped, just going with the Engineer for now. Looking through the gsc files for Kino, I found a couple strings that look something like this:

Code Snippet
Plaintext
	collision = spawn("script_model", (-763, 834, 96));

Would I do something similar to that to set a spawn point for the boss? Like, say something such as:

Code Snippet
Plaintext
	org = spawn("zomeng_spawn",(-146.91, -1390.64, 104.374));

it should've been this i believe
Code Snippet
Plaintext
org = spawn("script_origin", your coordinate); 
org.targetname = "zomeng_spawn";

Also do you even have the asset files set up for the boss like xanims, and its xmodel?
Title: Re: Boss Not Spawning
Post by: jiggy22 on June 03, 2017, 03:45:29 am
it should've been this i believe
Code Snippet
Plaintext
org = spawn("script_origin", your coordinate); 
org.targetname = "zomeng_spawn";

Also do you even have the asset files set up for the boss like xanims, and its xmodel?

Thanks, I was able to get it working in WaW. And yeah, I had no problem with setting up the xanims and xmodels, it was just getting him to spawn in. I'm having a little difficulty getting it to work in Black Ops though. The game doesn't crash when I load it up, though the boss just never shows up. Is there anything I'd have to change in the gsc file in order to get it to work correctly in Black Ops?
Title: Re: Boss Not Spawning
Post by: X0master on June 03, 2017, 04:01:22 am
Thanks, I was able to get it working in WaW. And yeah, I had no problem with setting up the xanims and xmodels, it was just getting him to spawn in. I'm having a little difficulty getting it to work in Black Ops though. The game doesn't crash when I load it up, though the boss just never shows up. Is there anything I'd have to change in the gsc file in order to get it to work correctly in Black Ops?

did you create a function in the boss zombie script with this in it?
Code Snippet
Plaintext
org = spawn("script_origin", your coordinate); 
org.targetname = "zomeng_spawn";

so like
Code Snippet
Plaintext
your_function_name()
{
org = spawn("script_origin", your coordinate);
org.targetname = "zomeng_spawn";
}

If you do, then add level thread your_function_name();

in the init() function of the boss script