etqw-sdk/base/script/maps/bottest2.script

194 lines
6.8 KiB
Plaintext
Raw Permalink Normal View History

2008-05-29 00:00:00 +00:00
//mal_NOTE: these numbers also double as the action groups that are involved with each goal. So, all actions that are in group 0, would have something to do with destroying/protecting the front door, etc.
#define OBJECTIVE_BOTTEST_DESTROY_DOOR 0
#define OBJECTIVE_BOTTEST_BUILD_GENERATOR 1
#define OBJECTIVE_BOTTEST_HACK_SOMESHIT 2
object mapObject_BotTest : mapObject_Default {
void preinit();
void InitObjectives();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void OnGeneratorBuilt();
void OnDoorDestroyed();
void OnShitHacked();
//
// Spawn masters
//
entity gdfBaseSpawn;
entity gdfGeneratorSpawn;
entity gdfHackSpawn;
entity stroggBaseSpawn;
entity stroggDoorSpawn;
entity stroggGeneratorSpawn;
//
// Objectives
//
entity objective1;
entity objective2;
entity objective3;
entity voManager;
};
mapObject_Base BotTest_MapScript() {
return new mapObject_BotTest;
}
void mapObject_BotTest::preinit() {
}
void mapObject_BotTest::InitObjectives() {
gameRules.setWinningTeam( stroggTeam );
gdfTeam.SetRespawnWait( 1 );
stroggTeam.SetRespawnWait( 1 );
CreateRespawnTimeThread( gdfTeam );
//
// Set up the spawn points
//
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
gdfBaseSpawn.setGameTeam( gdfTeam );
gdfGeneratorSpawn = worldspawn.getEntityKey( "script_gdf_generator_spawn" );
gdfGeneratorSpawn.setGameTeam( $null_entity );
gdfHackSpawn = worldspawn.getEntityKey( "script_gdf_hack_spawn" );
gdfHackSpawn.setGameTeam( $null_entity );
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
stroggBaseSpawn.setGameTeam( $null_entity );
stroggDoorSpawn = worldspawn.getEntityKey( "script_strogg_door_spawn" );
stroggDoorSpawn.setGameTeam( stroggTeam );
stroggGeneratorSpawn = worldspawn.getEntityKey( "script_strogg_generator_spawn" );
stroggGeneratorSpawn.setGameTeam( $null_entity );
//
// Set up the objectives
//
objective1 = worldspawn.getEntityKey( "script_obj1_marker" );
objective2 = worldspawn.getEntityKey( "script_obj2_marker" );
objective3 = worldspawn.getEntityKey( "script_obj3_marker" );
objective1.vStartObjective();
objective2.vStartObjective();
objective3.vStartObjective();
// Set up the objectives
objManager.setNextObjective( gdfTeam, OBJECTIVE_BOTTEST_DESTROY_DOOR );
objManager.setNextObjective( stroggTeam, OBJECTIVE_BOTTEST_DESTROY_DOOR );
//mal: setup the bot stuff....
objManager.setPrimaryTeamAction( STROGG, "gdf_plant_1" );
objManager.setPrimaryTeamAction( GDF, "gdf_plant_1" );
objManager.setAttackingTeam( GDF );
objManager.setBotCriticalClass( GDF, SOLDIER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setBotSightDist( 3000.0f );
}
void mapObject_BotTest::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_BOTTEST_DESTROY_DOOR ) {
OnDoorDestroyed();
objManager.setNextObjective( gdfTeam, OBJECTIVE_BOTTEST_BUILD_GENERATOR );
objManager.setNextObjective( stroggTeam, OBJECTIVE_BOTTEST_BUILD_GENERATOR );
}
if ( index == OBJECTIVE_BOTTEST_BUILD_GENERATOR ) {
OnGeneratorBuilt();
objManager.setNextObjective( gdfTeam, OBJECTIVE_BOTTEST_HACK_SOMESHIT );
objManager.setNextObjective( stroggTeam, OBJECTIVE_BOTTEST_HACK_SOMESHIT );
}
if ( index == OBJECTIVE_BOTTEST_HACK_SOMESHIT ) {
OnShitHacked();
}
}
handle mapObject_BotTest::GetObjectiveMessage( float index ) {
if ( index == OBJECTIVE_BOTTEST_DESTROY_DOOR ) {
return sys.localizeString( "maps/island/obj_destroyed" );
}
if ( index == OBJECTIVE_BOTTEST_BUILD_GENERATOR ) {
return sys.localizeString( "maps/island/obj_constructed" );
}
if ( index == OBJECTIVE_BOTTEST_HACK_SOMESHIT ) {
return sys.localizeString( "maps/island/obj_transmitted" );
}
return g_locStr_BadObjective;
}
void mapObject_BotTest::OnDoorDestroyed() {
//mal: theses are bot only cmds that tell the bots an objective has been completed.
objManager.deactivateBotActionGroup( OBJECTIVE_BOTTEST_DESTROY_DOOR );
objManager.activateBotActionGroup( OBJECTIVE_BOTTEST_BUILD_GENERATOR );
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.setPrimaryTeamAction( STROGG, "gdf_build_1" );
objManager.setPrimaryTeamAction( GDF, "gdf_build_1" );
objManager.setBotCriticalClass( STROGG, NOCLASS );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( GDF, COVERTOPS, SOLDIER, 1, false, false ); //mal: GDF need a covert, pick a bot to switch the next time he respawns.
objManager.setTeamNeededClass( STROGG, COVERTOPS, ENGINEER, 1, false, false ); //mal: STROGG want a covert, pick a bot to switch the next time he respawns.
objManager.teamSuicideIfNotNearAction( "gdf_build_1", 3000.0f, STROGG ); //mal: this is just for testing - this is NOT a good range to use for this cmd!
voManager.vObjectiveSuccess( OBJECTIVE_BOTTEST_DESTROY_DOOR, gdfTeam );
voManager.vSetCurrentObjective( OBJECTIVE_BOTTEST_BUILD_GENERATOR );
objective1.vFinishObjective();
stroggDoorSpawn.setGameTeam( $null_entity );
stroggGeneratorSpawn.setGameTeam( stroggTeam );
gdfBaseSpawn.setGameTeam( $null_entity );
gdfGeneratorSpawn.setGameTeam( gdfTeam );
gdfTeam.SetRespawnWait( 1 );
ResetRespawnTimeThread();
}
void mapObject_BotTest::OnGeneratorBuilt() {
//mal: theses are bot only cmds that tell the bots an objective has been completed.
objManager.deactivateBotActionGroup( OBJECTIVE_BOTTEST_BUILD_GENERATOR );
objManager.activateBotActionGroup( OBJECTIVE_BOTTEST_HACK_SOMESHIT );
objManager.botUpdateForEvent( NOTEAM, NOCLASS,ACTION_STATE_NULL );
objManager.setPrimaryTeamAction( STROGG, "gdf_hack_1" );
objManager.setPrimaryTeamAction( GDF, "gdf_hack_1" );
objManager.setBotCriticalClass( GDF, COVERTOPS );
objManager.setBotCriticalClass( STROGG, NOCLASS );
objManager.setTeamNeededClass( GDF, FIELDOPS, ENGINEER, 1, false, false ); //mal: we want a fieldops for the last stage, just to show off their abilities.
objManager.setTeamNeededClass( GDF, COVERTOPS, SOLDIER, 1, true, true ); //mal: if we dont have a covert by now, have a bot suicide and switch over ASAP.
voManager.vObjectiveSuccess( OBJECTIVE_BOTTEST_BUILD_GENERATOR, gdfTeam );
voManager.vSetCurrentObjective( OBJECTIVE_BOTTEST_HACK_SOMESHIT );
objective2.vFinishObjective();
stroggGeneratorSpawn.setGameTeam( $null_entity );
stroggBaseSpawn.setGameTeam( stroggTeam );
gdfGeneratorSpawn.setGameTeam( $null_entity );
gdfHackSpawn.setGameTeam( gdfTeam );
gdfTeam.SetRespawnWait( 1 );
ResetRespawnTimeThread();
}
void mapObject_BotTest::OnShitHacked() {
voManager.vObjectiveSuccess( OBJECTIVE_BOTTEST_HACK_SOMESHIT, gdfTeam );
objective3.vFinishObjective();
gameRules.setWinningTeam( gdfTeam );
gameRules.endGame();
}