mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-08-05 05:17:55 -04:00
319 lines
7.7 KiB
Plaintext
319 lines
7.7 KiB
Plaintext
/**
|
|
|
|
*
|
|
* Title: mediator.script
|
|
* Description: mediator object script: POI = mysteriousdisk
|
|
|
|
*/
|
|
|
|
//------------------------------------------------
|
|
// Includes
|
|
//------------------------------------------------
|
|
|
|
include library.npc;
|
|
include library.poi;
|
|
include library.scenario;
|
|
include library.ai_lib;
|
|
include library.utils;
|
|
include ai.ai_combat;
|
|
|
|
//-----------------------------------------------
|
|
// Inherits
|
|
//-----------------------------------------------
|
|
|
|
inherits poi.base.scenario_actor;
|
|
|
|
//------------------------------------------------
|
|
// Constants
|
|
//------------------------------------------------
|
|
|
|
const string SCRIPT_CONVERSE = "npc.converse.npc_converse_menu";
|
|
const string LOG_NAME = "poiMysteriousDisk Mediator";
|
|
const string ALERT_VOLUME_NAME = "alertTriggerVolume";
|
|
|
|
// Conversation states.
|
|
const int CONV_GREET = 0;
|
|
const int CONV_TALKMEDIATOR = 1;
|
|
|
|
//------------------------------------------------
|
|
// Methods
|
|
//------------------------------------------------
|
|
|
|
//------------------------------------------------
|
|
// OnAttach
|
|
//------------------------------------------------
|
|
|
|
trigger OnAttach()
|
|
{
|
|
attachScript( self, SCRIPT_CONVERSE );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnInitialize
|
|
//------------------------------------------------
|
|
|
|
trigger OnInitialize()
|
|
{
|
|
attachScript( self, SCRIPT_CONVERSE );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnIncapacitated
|
|
//------------------------------------------------
|
|
|
|
trigger OnIncapacitated( obj_id killer )
|
|
{
|
|
// Get reference to base.
|
|
obj_id poiMaster = poi.getBaseObject( self );
|
|
if ( (poiMaster == null) || (poiMaster == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
messageTo( poiMaster, scenario.HANDLER_ACTOR_DEATH, null, 0, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnTriggerVolumeEntered
|
|
//------------------------------------------------
|
|
|
|
trigger OnTriggerVolumeEntered( string volumeName, obj_id breacher )
|
|
{
|
|
if ( hasObjVar( breacher, "gm") )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( ai_lib.isInCombat( self ) )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( breacher == self )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( isIncapacitated(self) )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( !isMob( breacher ) )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( ai_lib.isMonster( breacher ) )
|
|
return SCRIPT_OVERRIDE;
|
|
|
|
if ( volumeName == ALERT_VOLUME_NAME )
|
|
{
|
|
// We can only trigger once.
|
|
if ( hasObjVar( self, "ranForHelp" ) )
|
|
return SCRIPT_CONTINUE;
|
|
setObjVar( self, "ranForHelp", true );
|
|
|
|
// Store reference to breacher.
|
|
setObjVar( self, "breacher", breacher );
|
|
|
|
// Turn to breacher.
|
|
faceTo( self, breacher );
|
|
queueCommand( self, ##"social", breacher, "hail", COMMAND_PRIORITY_DEFAULT );
|
|
|
|
// Run to the breacher.
|
|
messageTo( self, "runToTarget", null, 6, false );
|
|
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// runToTarget
|
|
//------------------------------------------------
|
|
|
|
messageHandler runToTarget()
|
|
{
|
|
// Follow the breacher a bit.
|
|
ai_lib.aiFollow( self, getObjIdObjVar( self, "breacher" ) );
|
|
|
|
// Shout at him.
|
|
poi.quickSay( self, "m_helpme" );
|
|
|
|
// Set a callback to shout again.
|
|
messageTo( self, "tryToGetHelp1", null, 10, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// tryToGetHelp1
|
|
//------------------------------------------------
|
|
|
|
messageHandler tryToGetHelp1()
|
|
{
|
|
if ( hasObjVar( self, "inChat" ) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// Shout at him.
|
|
poi.quickSay( self, "m_pleasehelpme" );
|
|
|
|
// Set a callback to shout again.
|
|
messageTo( self, "tryToGetHelp2", null, 10, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// tryToGetHelp2
|
|
//------------------------------------------------
|
|
|
|
messageHandler tryToGetHelp2()
|
|
{
|
|
if ( hasObjVar( self, "inChat" ) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// Shout at him.
|
|
poi.quickSay( self, "m_desperatehelpme" );
|
|
|
|
// Stop following.
|
|
ai_lib.aiStopFollowing( self );
|
|
|
|
// Do an action in a bit.
|
|
messageTo( self, "begForHelp", null, 2, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// begForHelp
|
|
//------------------------------------------------
|
|
|
|
messageHandler begForHelp()
|
|
{
|
|
// Emote.
|
|
queueCommand( self, ##"social", null, "grovel", COMMAND_PRIORITY_DEFAULT );
|
|
|
|
// Get base object reference.
|
|
obj_id poiMaster = poi.getBaseObject(self);
|
|
if ( (poiMaster == null) || (poiMaster == obj_id.NULL_ID) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// Set timer to fight.
|
|
messageTo( poiMaster, "startFight", null, 20, false );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnStartNpcConversation
|
|
//------------------------------------------------
|
|
|
|
trigger OnStartNpcConversation( obj_id speaker )
|
|
{
|
|
// Ignore conversation in combat.
|
|
if ( ai_lib.isInCombat(self) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// Get conversation.
|
|
string convo = scenario.getConvo();
|
|
if ( convo.equals("") )
|
|
{
|
|
npcEndConversation ( speaker );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Look up our progress.
|
|
int progress = scenario.getPlayerProgress( speaker );
|
|
|
|
// Msg/response vars.
|
|
string_id msg = new string_id( convo, "m_greet_0" );
|
|
resizeable string_id[] responses = new string_id[0];
|
|
|
|
// Stop following.
|
|
ai_lib.aiStopFollowing( self );
|
|
setObjVar( self, "inChat", true );
|
|
|
|
// Normal greeting.
|
|
if ( progress == CONV_GREET )
|
|
{
|
|
msg = new string_id( convo, "m_greet" );
|
|
responses = utils.addElement( responses, new string_id(convo, "r_m_greet_who") );
|
|
npcStartConversation( speaker, self, convo, msg, responses );
|
|
}
|
|
else
|
|
npcEndConversation( speaker );
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
//------------------------------------------------
|
|
// OnNpcConversationResponse
|
|
//------------------------------------------------
|
|
|
|
trigger OnNpcConversationResponse( string convoName, obj_id speaker, string_id response )
|
|
{
|
|
// Ignore conversation in combat.
|
|
if ( ai_lib.isInCombat(self) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// Get reference to base.
|
|
obj_id poiMaster = poi.getBaseObject( self );
|
|
if ( (poiMaster == null) || (poiMaster == obj_id.NULL_ID) )
|
|
{
|
|
npcEndConversation( speaker );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Get reference to conversation.
|
|
string convo = scenario.getConvo();
|
|
if ( convo.equals("") )
|
|
{
|
|
npcEndConversation( speaker );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Validate our conversation.
|
|
if ( !convoName.equals(convo) )
|
|
{
|
|
LOG( LOG_NAME, "Convo files do not match!!" );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Look up the player's progress.
|
|
int progress = scenario.getPlayerProgress( speaker );
|
|
|
|
// Respond to the player's comment.
|
|
string aId = response.getAsciiId();
|
|
string_id msg = new string_id();
|
|
string_id[] responses = new string_id[0];
|
|
|
|
// Zero out responses.
|
|
npcSetConversationResponses( speaker, responses );
|
|
|
|
// Who are these prisoners?
|
|
if ( ( aId.equals("r_m_greet_who") ) )
|
|
{
|
|
// Add the player to the scenario.
|
|
// scenario.addPlayer( poiMaster, speaker );
|
|
scenario.setPlayerProgress( speaker, CONV_TALKMEDIATOR );
|
|
|
|
// Create the disk and give it to the player.
|
|
obj_id inventory = getObjectInSlot( speaker, "inventory" );
|
|
string diskItem = "object/tangible/mission/mission_datadisk.iff";
|
|
obj_id disk = createObject( diskItem, inventory, "" );
|
|
// setName( disk, new string_id( convo, "itemname" ) );
|
|
setName( disk, "Encrypted Datadisk" );
|
|
|
|
// System message.
|
|
// string_id sid = new string_id( convo, "systemmessage" );
|
|
// sendSystemMessage( speaker, sid );
|
|
sendSystemMessage( speaker, "You received an encrypted datadisk!", null );
|
|
|
|
// They are coming!
|
|
npcSpeak( speaker, new string_id( convo, "m_theycome" ) );
|
|
|
|
// We gave the disk.
|
|
setObjVar( self, "gaveDisk", true );
|
|
|
|
// Set timer to fight.
|
|
messageTo( poiMaster, "startFight", null, 3, false );
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|