mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-08-05 05:17:55 -04:00
275 lines
6.6 KiB
Plaintext
275 lines
6.6 KiB
Plaintext
/**
|
|
|
|
*
|
|
* Title: master.script
|
|
* Description: master poi object script: POI = mysteriousdisk
|
|
|
|
*/
|
|
|
|
//------------------------------------------------
|
|
// Includes
|
|
//------------------------------------------------
|
|
|
|
include library.poi;
|
|
include library.scenario;
|
|
include library.ai_lib;
|
|
include library.combat;
|
|
include ai.ai_combat;
|
|
|
|
//------------------------------------------------
|
|
// Inherits
|
|
//------------------------------------------------
|
|
|
|
inherits theme_park.poi.base;
|
|
|
|
//------------------------------------------------
|
|
// Constants
|
|
//------------------------------------------------
|
|
|
|
const string SCENARIO_NAME = "mysteriousdisk";
|
|
const string LOG_NAME = "poiMysteriousDisk Master";
|
|
const string BASE_PATH = "poi." + SCENARIO_NAME;
|
|
const string SCRIPT_ANTAGONIST = BASE_PATH + ".antagonist";
|
|
const string SCRIPT_MEDIATOR = BASE_PATH + ".mediator";
|
|
const string TBL = "datatables/poi/" + SCENARIO_NAME + "/setup.iff";
|
|
const string MEDIATOR_TYPE = "MEDIATOR_TYPE";
|
|
const string ANTAGONIST_TYPE = "ANTAGONIST_TYPE";
|
|
|
|
const int DEFAULT_ANTAGONIST_COUNT = 1;
|
|
|
|
//------------------------------------------------
|
|
// Methods
|
|
//------------------------------------------------
|
|
|
|
//------------------------------------------------
|
|
// OnAttach
|
|
//------------------------------------------------
|
|
|
|
trigger OnAttach()
|
|
{
|
|
if ( !scenario.initScenario( self, TBL ) )
|
|
scenario.cleanup( self );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnInitialize
|
|
//------------------------------------------------
|
|
|
|
trigger OnInitialize()
|
|
{
|
|
scenario.cleanup( self );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnUnloadedFromMemory
|
|
//------------------------------------------------
|
|
|
|
trigger OnUnloadedFromMemory()
|
|
{
|
|
scenario.cleanup( self );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// cleanupScenario
|
|
//------------------------------------------------
|
|
|
|
messageHandler cleanupScenario()
|
|
{
|
|
scenario.cleanup( self );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// destroySelf
|
|
//------------------------------------------------
|
|
|
|
messageHandler destroySelf()
|
|
{
|
|
destroyObject( self );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// initScenario
|
|
//
|
|
// Called by message from OnAttach.
|
|
// This calls all methods necessary to set up the POI.
|
|
//------------------------------------------------
|
|
|
|
messageHandler initScenario()
|
|
{
|
|
// Validate parameters.
|
|
if ( (params == null) || (params.isEmpty()) )
|
|
{
|
|
scenario.cleanup(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
Environment Setup
|
|
*/
|
|
|
|
// Get our mediator type.
|
|
setObjVar( self, MEDIATOR_TYPE, params.getString( MEDIATOR_TYPE ) );
|
|
|
|
// Get our antagonist type.
|
|
setObjVar( self, ANTAGONIST_TYPE, params.getString( ANTAGONIST_TYPE ) );
|
|
|
|
// Create teams.
|
|
scenario.createTeam( self, "mediator", self.toString() + "_mediator" );
|
|
scenario.createTeam( self, "antagonist", self.toString() + "_antagonist" );
|
|
|
|
/*
|
|
Spawn Mediators
|
|
*/
|
|
|
|
if ( !createMediator( self ) )
|
|
{
|
|
scenario.cleanup( self );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
createAntagonists( self );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// createMediator
|
|
//
|
|
// Creates the leader of the mediator group.
|
|
//------------------------------------------------
|
|
|
|
|
|
boolean createMediator( obj_id self )
|
|
{
|
|
// Spawn the scenario mediator (prisoner leader).
|
|
string type = getStringObjVar( self, MEDIATOR_TYPE );
|
|
string ident = "mediator_0";
|
|
location loc = getLocation( self );
|
|
obj_id mediator = scenario.createTeamNpc( self, "mediator", type, ident, loc );
|
|
if ( (mediator == null) || (mediator == obj_id.NULL_ID) )
|
|
return false;
|
|
|
|
// Assign initial behavior to the mediator.
|
|
ai_lib.setDefaultCalmBehavior( mediator, ai_lib.BEHAVIOR_WANDER );
|
|
attachScript( mediator, SCRIPT_MEDIATOR );
|
|
setObjVar( mediator, "ai.rangedOnly", true );
|
|
|
|
return true;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// createAntagonists
|
|
//------------------------------------------------
|
|
|
|
boolean createAntagonists( obj_id self )
|
|
{
|
|
location baseloc = getLocation( self );
|
|
string type = getStringObjVar( self, ANTAGONIST_TYPE );
|
|
if ( !type.equals("") )
|
|
{
|
|
for ( int i = 0; i < 2; i++ )
|
|
{
|
|
string ident = "antagonist_" + (i + 1);
|
|
|
|
location loiterloc = new location( baseloc );
|
|
loiterloc.x += 25;
|
|
loiterloc.z += 25;
|
|
|
|
obj_id antagonist = scenario.createTeamNpc( self, "antagonist", type, ident, loiterloc );
|
|
if ( (antagonist == null) || (antagonist == obj_id.NULL_ID) )
|
|
{
|
|
LOG( LOG_NAME, "Couldn't create antagonist minion." );
|
|
}
|
|
else
|
|
{
|
|
setYaw( antagonist, rand(0, 359) );
|
|
ai_lib.setDefaultCalmBehavior( antagonist, ai_lib.BEHAVIOR_LOITER );
|
|
setObjVar( antagonist, "ai.rangedOnly", true );
|
|
attachScript( antagonist, SCRIPT_ANTAGONIST );
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// startFight
|
|
//------------------------------------------------
|
|
|
|
messageHandler startFight()
|
|
{
|
|
if ( hasObjVar( self, "fighting" ) )
|
|
return SCRIPT_CONTINUE;
|
|
setObjVar( self, "fighting", true );
|
|
|
|
// Spawn two stormtroopers.
|
|
messageTo( self, "dieDieMyDarling", null, 3, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// dieDieMyDarling
|
|
//
|
|
// Don't talk to me baby,
|
|
// Your future's in an oblong box!
|
|
//------------------------------------------------
|
|
|
|
messageHandler dieDieMyDarling()
|
|
{
|
|
obj_id med = poi.findObject( scenario.MEDIATOR + "_0" );
|
|
if ( (med == null) || (med == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id s1 = poi.findObject( scenario.ANTAGONIST + "_1" );
|
|
if ( (s1 == null) || (s1 == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id s2 = poi.findObject( scenario.ANTAGONIST + "_2" );
|
|
if ( (s2 == null) || (s2 == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
poi.quickSay( s1, "a_theresheis" );
|
|
|
|
startCombat( s1, med );
|
|
startCombat( s2, med );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// handleActorDeath
|
|
//
|
|
// Called when slave girl dies.
|
|
//------------------------------------------------
|
|
|
|
messageHandler handleActorDeath()
|
|
{
|
|
// end scenario.
|
|
scenario.complete( self );
|
|
|
|
obj_id med = poi.findObject( scenario.MEDIATOR + "_0" );
|
|
if ( (med == null) || (med == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id s1 = poi.findObject( scenario.ANTAGONIST + "_1" );
|
|
if ( (s1 == null) || (s1 == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
messageTo( s1, "commentOnKill", null, 2, false );
|
|
setObjVar( s1, "lookingForDisk", true );
|
|
|
|
location loc = getLocation(med);
|
|
loc.x -= 1;
|
|
ai_lib.aiPathTo( s1, loc );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|