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

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