Login x
User Name:
Password:
Social Links Facebook Twitter YouTube Steam RSS News Feeds

Members Online

»
0 Active | 49 Guests
Online:

LATEST FORUM THREADS

»
CoD: Battle Royale
CoD+UO Map + Mod Releases
Damaged .pk3's
CoD Mapping
heli to attack ai
CoD4 SP Mapping

Forums

»

Welcome to the MODSonline.com forums. Looking for Frequently Asked Questions? Check out our FAQs section or search it out using the SEARCH link below. If you are new here, you may want to check out our rules and this great user's guide to the forums and the website.
For more mapping and modding information, see our Wiki: MODSonWiki.com

Jump To:
Forum: All Forums : Call of Duty 4
Category: CoD4 MP Mapping
CoD 4 mapping and level design for multiplayer.
Moderators: foyleman, Foxhound, Mystic, StrYdeR, batistablr, Welshy, DrBiggzz, supersword, playername, novemberdobby
Latest Posts
Subscribed Posts
Search
Restricted Access Topic is Locked subscribe
Author Topic: Eliminate AI as Objective?
ArmorMaster
General Member
Since: Mar 30, 2005
Posts: 371
Last: Oct 3, 2009
[view latest posts]
Level 5
Category: CoD4 MP Mapping
Posted: Thursday, Mar. 19, 2009 01:33 pm
Hello everyone, I need some help with my sp map.

I have an objective in my map (objective 1) where the player must go to the roof of a house and provide sniper support. The next objective (objective 2) is to go back downstairs to the second floor.

When the player goes to the roof the player spawns 5 AI around the house outside. All 5 AI are 5 different actors with the same targetname (arab_1) spawning from the same spawner trigger from the roof.

What I'm trying to get to happen is when all 5 AI are killed off, objective 1 is completed and then the player must move onto objective 2 (go downstairs). Everything is working fine except making a way to complete objective 1 once all 5 AI are dead.

Here's my code:

Code:

#include maps\_utility;

#include common_scripts\utility;

#include maps\_anim;


main()
{

maps\_load::main();

level.player giveWeapon( "colt45" );
level.player giveWeapon( "saw" );
level.player giveMaxAmmo( "saw" );
level.player giveWeapon( "fraggrenade" );
level.player giveWeapon( "flash_grenade" );
level.player switchtoWeapon( "saw" );
level.player setOffhandSecondaryClass( "flash" );
level.vasquez = getEnt ( "vasquez", "targetname" );
level.vasquez thread magic_bullet_shield();
level.miller = getEnt ( "miller", "targetname" );
level.miller thread magic_bullet_shield();
level.johnson = getEnt ( "johnson", "targetname" );
level.johnson thread magic_bullet_shield();


thread slidedoor_slider ();

thread slidedoor_slider2 ();

obj1(); 

}
slidedoor_slider()
{
slidedoor=getent("locked_in","targetname");
trig=getent("locked_in_trigger","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movez (-260,0.000000001,0,0);

}
}

obj1()

{

obj1 = getent("obj1", "targetname"); 

enemy = getentarray("arab_1", "targetname"); 

objective_add(1, "active", &"armor_OBJ1",getent("obj1",
"targetname").origin);

objective_current(1);

iprintlnbold (&"armor_OBJECTIVES"); 

obj1 waittill("trigger"); 

enemy waittill("death");

objective_state(1, "done"); 

obj1 delete(); 

///wait(30);

thread obj2(); 

}

obj2()

{

obj2 = getent("obj2", "targetname"); 

objective_add(2, "active", &"armor_OBJ2",getent("obj2",
"targetname").origin);

objective_current(2);

iprintlnbold (&"armor_OBJECTIVES"); 

obj2 waittill("trigger");

wait(30); 

objective_state(2, "done"); 

obj2 delete(); 

}
slidedoor_slider2()
{
slidedoor=getent("roof_trap","targetname");
trig=getent("obj1","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movey (253,0.000000001,0,0);

wait(30);

slidedoor delete(); 

}
}





When I run this script I get an error message once I hit the obj1 trigger:

Array is not an object

and the line it has a problem with is
enemy waittill("death");


I'm not sure how to do this, I'll keep looking into the map .gsc files, but does anybody know a way to do this? Thanks!

Share |
SparkyMcSparks
General Member
Since: Feb 28, 2004
Posts: 1713
Last: Dec 29, 2016
[view latest posts]
Level 8
Im a fan of MODSonair
Category: CoD4 MP Mapping
Posted: Thursday, Mar. 19, 2009 02:46 pm
enemy = getEntArray( "arab_1", "targetname" );

if( isDefined( enemy ) )
{
waittill_dead_or_dying( enemy );
}

objective_state( 1, "done" );
Share |
ArmorMaster
General Member
Since: Mar 30, 2005
Posts: 371
Last: Oct 3, 2009
[view latest posts]
Level 5
Category: CoD4 MP Mapping
Posted: Thursday, Mar. 19, 2009 09:15 pm
Thanks for the quick reply, this is what my gsc file looks like:

Code:
#include maps\_utility;

#include common_scripts\utility;

#include maps\_anim;


main()
{

maps\_load::main();

level.player giveWeapon( "colt45" );
level.player giveWeapon( "m4_grenadier" );
level.player giveMaxAmmo( "m4_grenadier" );
level.player giveWeapon( "fraggrenade" );
level.player giveWeapon( "flash_grenade" );
level.player switchtoWeapon( "m4_grenadier" );
level.player setOffhandSecondaryClass( "flash" );
level.vasquez = getEnt ( "vasquez", "targetname" );
level.vasquez thread magic_bullet_shield();
level.miller = getEnt ( "miller", "targetname" );
level.miller thread magic_bullet_shield();
level.johnson = getEnt ( "johnson", "targetname" );
level.johnson thread magic_bullet_shield();


thread slidedoor_slider ();

thread slidedoor_slider2 ();

obj1(); 

}
slidedoor_slider()
{
slidedoor=getent("locked_in","targetname");
trig=getent("locked_in_trigger","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movez (-260,0.000000001,0,0);

}
}

obj1()

{

obj1 = getent("obj1", "targetname"); 

objective_add(1, "active", &"armor_OBJ1",getent("obj1",
"targetname").origin);

objective_current(1);

iprintlnbold (&"armor_OBJECTIVES"); 

obj1 waittill("trigger"); 

enemy = getEntArray( "arab_1", "targetname" );

if( isDefined( enemy ) )
{
waittill_dead_or_dying( enemy );
}

objective_state( 1, "done" ); 

objective_state(1, "done"); 

obj1 delete(); 

///wait(30);

thread obj2(); 

}

obj2()

{

obj2 = getent("obj2", "targetname"); 

objective_add(2, "active", &"armor_OBJ2",getent("obj2",
"targetname").origin);

objective_current(2);

iprintlnbold (&"armor_OBJECTIVES"); 

obj2 waittill("trigger");

wait(30); 

objective_state(2, "done"); 

obj2 delete(); 

}
slidedoor_slider2()
{
slidedoor=getent("roof_trap","targetname");
trig=getent("obj1","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movey (253,0.000000001,0,0);

wait(30);

slidedoor delete(); 

}
}





When I hit the obj1 trigger, it says objective completed, even though the AI are still alive, I'm not sure if I put the code in the right place. I'll keep tinkering with it, I'm not sure where the

Code:
enemy = getEntArray( "arab_1", "targetname" );

if( isDefined( enemy ) )
{
waittill_dead_or_dying( enemy );
}

objective_state( 1, "done" ); 


is supposed to go.


edited on Mar. 19, 2009 05:16 pm by ArmorMaster
Share |
voidsource
General Member
Since: May 5, 2007
Posts: 1513
Last: Sep 1, 2013
[view latest posts]
Level 8
Category: CoD4 MP Mapping
Posted: Friday, Mar. 20, 2009 05:31 am
y not turn off the trigger and turn it back on until the ai's are killed off. Assuming u want ur player to activate the trigger to achieve the objective.

Code:

obj1 = getent("obj1", "targetname");
objective_add(1, "active", &"armor_OBJ1",getent("obj1", "targetname").origin);
objective_current(1);
iprintlnbold (&"armor_OBJECTIVES"); 

obj1 trigger_off();

enemy = getEntArray( "arab_1", "targetname" ); 
if( isDefined( enemy ) )
 {
            waittill_dead_or_dying( enemy );
 }  

obj1 trigger_on();
obj1 waittill("trigger");

           objective_state( 1, "done" );



also if you want the player to stay within an area (so that he doesnt go too far off fromt he sniping area) you should probably create a cylinder made out of a trigger and then right click in the 2d window and select trigger>multiple or trigger>once (while having the cylinder selected) and give it a key/value of targetname, "name", so that u can use it in the script. Turn it on when the ai's spawn and turn it off after he has killed them. If the player triggers this trigger you should give it a mission failed for leaving his area or something. but then the script would be something like this:


Code:

{

safety_trigger = getent("safety_trigger","targetname");
safety_trigger trigger_off();//turned it off until objective message has passed on the screen.

obj1 = getent("obj1", "targetname");
objective_add(1, "active", &"armor_OBJ1",getent("obj1", "targetname").origin);
objective_current(1);
iprintlnbold (&"armor_OBJECTIVES"); 

obj1 trigger_off();//so that player doesnt achieve goal until ai's are dead.

safety_trigger on();//keep him inside the cylinder trigger.
safety_trigger thread stay_put();//"stay_put" is the name of the thread i gave it you can give it any name, but make sure to change the name on the thread.

enemy = getEntArray( "arab_1", "targetname" ); 
if( isDefined( enemy ) )
 {
            waittill_dead_or_dying( enemy );
 }  

safety_trigger trigger_off();//he has killed ai's so lets free him from his space. ;) 

obj1 trigger_on();//turn our objective done trigger back on.
obj1 waittill("trigger");//wait for player to trigger it.

           objective_state( 1, "done" );
}

stay_put()
{
self waittill("trigger");
setDvar("ui_deadquote", &"MAPNAME_localized_string_message" );
maps\_utility::missionFailedWrapper();
}



in the " &"mapname_localized_string_message" " it is the same as the "iprintlnbold (&"armor_OBJECTIVES"); " just create w/e you want it to say. hope that helps
Share |
ArmorMaster
General Member
Since: Mar 30, 2005
Posts: 371
Last: Oct 3, 2009
[view latest posts]
Level 5
Category: CoD4 MP Mapping
Posted: Friday, Mar. 20, 2009 06:24 pm
Thanks for the help, but it's still not working. The goal is to make two conditions for having the objective completed. The first condition is for the player to touch the obj1 trigger. The second condition is for the AI to be killed off. Once both are met, then I want the status to say "objective complete" and then have the player move on to objective 2.

This is currently what my map's .gsc file looks like:

Code:


#include maps\_utility;

#include common_scripts\utility;

#include maps\_anim;


main()
{

precacheString(&"ARMOR_INTROSCREEN_LINE_1");
precacheString(&"ARMOR_INTROSCREEN_LINE_2");
precacheString(&"ARMOR_INTROSCREEN_LINE_3");
precacheString(&"ARMOR_INTROSCREEN_LINE_4");
precacheString(&"ARMOR_OBJ1");
precacheString(&"ARMOR_OBJ2");

maps\_load::main();

///ambientPlay("ambient_armor");

level.player takeallweapons();
level.player giveWeapon( "colt45" );
level.player giveWeapon( "m4_grenadier" );
level.player giveMaxAmmo( "m4_grenadier" );
level.player giveWeapon( "fraggrenade" );
level.player giveWeapon( "flash_grenade" );///15
level.player switchtoWeapon( "m4_grenadier" );
level.player setOffhandSecondaryClass( "flash" );
level.vasquez = getEnt ( "vasquez", "targetname" );
level.vasquez thread magic_bullet_shield();
level.miller = getEnt ( "miller", "targetname" );
level.miller thread magic_bullet_shield();
level.johnson = getEnt ( "johnson", "targetname" );
level.johnson thread magic_bullet_shield();
level.weaponClipModels = [];///24
level.weaponClipModels[0] = "weapon_dragunov_clip";
level.weaponClipModels[1] = "weapon_ak47_clip";
level.weaponClipModels[2] = "weapon_g3_clip";
level.weaponClipModels[3] = "weapon_ak74u_clip";
level.weaponClipModels[4] = "weapon_m16_clip";
level.weaponClipModels[5] = "weapon_saw_clip";


thread slidedoor_slider ();

thread slidedoor_slider2 ();

thread start_intro();

obj1(); 

}
slidedoor_slider()
{
slidedoor=getent("locked_in","targetname");
trig=getent("locked_in_trigger","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movez (-260,0.000000001,0,0);

}
}

obj1()

{

obj1 = getent("obj1", "targetname");
objective_add(1, "active", &"armor_OBJ1",getent("obj1", 

"targetname").origin);
objective_current(1);
iprintlnbold (&"armor_OBJECTIVES"); 

obj1 trigger_off();

enemy = getEntArray( "arab_1", "targetname" ); 
if( isDefined( enemy ) )
 {
            waittill_dead_or_dying( enemy );
 }  

obj1 trigger_on();
obj1 waittill("trigger");

           objective_state( 1, "done" );

obj1 delete(); 

///wait(30);

thread obj2(); 

}

obj2()

{

obj2 = getent("obj2", "targetname"); 

objective_add(2, "active", &"ARMOR_OBJ2",getent("obj2",
"targetname").origin);

objective_current(2);

iprintlnbold (&"ARMOR_OBJECTIVES"); 

obj2 waittill("trigger");

wait(30); 

objective_state(2, "done"); 

obj2 delete(); 

}
slidedoor_slider2()
{
slidedoor=getent("roof_trap","targetname");
trig=getent("obj1","targetname");
while(1)
{
trig waittill ("trigger");
slidedoor movey (253,0.000000001,0,0);

wait(30);

slidedoor delete(); 

}
}

start_intro()
{	
level.player setorigin( level.player.origin );
level.player setplayerangles( level.player.angles );
level.player freezeControls( true );
level.player allowsprint( false );
thread introscreen();
} 

introscreen()
{
level.intro_offset = ( -20 );
lines = [];
level.player freezeControls( true );
level.player allowsprint( false );
lines[ lines.size ] = &"ARMOR_INTROSCREEN_LINE_1";
lines[ "date" ] = &"ARMOR_INTROSCREEN_LINE_2";
lines[ lines.size ] = &"ARMOR_INTROSCREEN_LINE_3";
lines[ lines.size ] = &"ARMOR_INTROSCREEN_LINE_4";
maps\_introscreen::introscreen_feed_lines( lines );
	
level.intro_offset = ( 0 );
fade_time = ( 8 );
time = ( 8.5 );
maps\_introscreen::introscreen_generic_fade_in( "black", time, fade_time );
wait (2);
level.player freezeControls( false );
level.player allowsprint( true );
	
}



With this .gsc file, what's happening is as soon as I hit the trigger with the targetname "obj1" it says "objective completed" and then moves on to objective 2, even though the AI are still alive.

And with the enclosed area: I made a box of player_clip around the roof so that the player cannot fall off the roof. The player has access to the roof by only one route, a ladder, and I made a script_brushmodel of player_clip, that blocks off the ladder so that the player must stay on the roof until objective 1 is completed. That script_brushmodel of player_clip that blocks off the ladder has a targetname of "roof_trap" and right now I have it set up so that "roof_trap" gets deleted after 30 seconds, but as soon as I can get objective 1 acting right then I will rig it so that "roof_trap" deletes after obj1 is completed, so that once the objective is completed, the roof_trap deletes itself so that the player may then leave the roof.

Anyway, I'll keep tinkering with it, thanks for the help so far![wave]
Share |
voidsource
General Member
Since: May 5, 2007
Posts: 1513
Last: Sep 1, 2013
[view latest posts]
Level 8
Category: CoD4 MP Mapping
Posted: Friday, Mar. 20, 2009 10:44 pm
sounds like u could use flags to help you out with that. try something like calling a flag after you kill the bad guys and a flag after the trigger is triggered.

Code:

obj1()
{
  roof_clip = getent("roof_trap", "targetname");
  obj1 = getent("obj1", "targetname");

 objective_add(1, "active", &"armor_OBJ1",getent("obj1",   "targetname").origin);
 objective_current(1);
 iprintlnbold (&"armor_OBJECTIVES");

  thread bad_guys();

obj1 waittill("trigger");   
flag_set("trigger_triggered");//first flag has been set.

flag_wait_all("group_dead","trigger_triggered");//forces the game to wait for both flags b4 it can say objective one completed.

objective_state( 1, "done" );
obj1 delete(); 
roof_clip delete();//deletes the clip only after objective one is done.

 thread obj2()

}

bad_guys()
{
        enemy = getEntArray( "arab_1", "targetname" );
        if( isDefined( enemy ) )
           {  
           waittill_dead_or_dying( enemy );
            flag_set("group_dead");//second flag is set, but only after meeting the "waittill_dead_or_dying(enemy)" part happens which will then allow ur script to continue to say objective one completed and delete the roof_trap script brushmodel.
           }  
}



also make sure that you have init ur flags. Somewhere on top of ur .gsc u should have something like:

Code:


maps\_load::main();


/*--------------------
	 FLAGS
	----------------------*/
	flag_init("group_dead" );
	flag_init("trigger_triggered");

....(continue with your script)....


hope that helps.
Share |
Restricted Access Topic is Locked subscribe
MODSonline.com Forums : Call of Duty 4 : CoD4 MP Mapping

Latest Syndicated News

»
Codutility.com up and runn...
Nice, and there still using the logo and template for the screenshots, which...
Codutility.com up and runn...
dundy writes...Quote:Call of Duty modding and mapping is barly alive only a ...
Codutility.com up and runn...
Mystic writes...Quote:It seems to me the like the site is completely dead? ...
Codutility.com up and runn...
It seems to me the like the site is completely dead?

Partners & Friends

»