Files
dsrc/sku.0/sys.server/compiled/game/script/poi/mysteriousdisk/master.script
T

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;
}