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