Files
dsrc/sku.0/sys.server/compiled/game/script/theme_park/warren/mirla.script
T

170 lines
5.0 KiB
Plaintext

include library.utils;
include library.ai_lib;
include library.chat;
include ai.ai_combat;
include library.badge;
include library.prose;
const string CONVO_FILE = "theme_park/warren/warren";
const string SYSTEM_MESSAGES = "theme_park/warren/warren_system_messages";
const string PASSKEYCODE = "object/tangible/mission/quest_item/warren_passkey_s01.iff";
trigger OnAttach()
{
setCondition( self, CONDITION_CONVERSABLE );
setName( self, "" );
setName( self, new string_id ( "theme_park/warren/warren_system_messages", "name_mirla" ));
setInvulnerable( self, true );
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
{
int mnu = mi.addRootMenu (menu_info_types.CONVERSE_START, null);
menu_info_data mdata = mi.getMenuItemById(mnu);
mdata.setServerNotify(false);
return SCRIPT_CONTINUE;
}
trigger OnStartNpcConversation (obj_id speaker)
{
if ( ai_lib.isInCombat( self ) || ai_lib.isInCombat( speaker ) || ai_lib.aiIsDead( self ) )
return SCRIPT_CONTINUE;
chat.setChatMood( self, chat.MOOD_SCARED );
//already did this:
if ( badge.hasBadge( speaker, "warren_compassion" ) )
{
//if you have taken down teraud:
if ( badge.hasBadge( speaker, "warren_hero" ) )
chat.chat( self, new string_id( CONVO_FILE, "mirla_done" ) );//You're a peach!
else
chat.chat( self, new string_id( CONVO_FILE, "mirla_get_teraud" ) );//Collect evidence against Teraud!
return SCRIPT_CONTINUE;
}
faceToBehavior( self, speaker );
string_id greeting = new string_id (CONVO_FILE, "mirla_start");//What?
string_id response[] = new string_id [1];
response[0] = new string_id (CONVO_FILE, "mirla_reply_1");//What's wrong?
npcStartConversation (speaker, self, CONVO_FILE, greeting, response);
doAnimationAction (self, "weeping");
return SCRIPT_CONTINUE;
}
trigger OnNpcConversationResponse(string convo, obj_id player, string_id response)
{
if ( !convo.equals( CONVO_FILE ) )
return SCRIPT_CONTINUE;
npcRemoveConversationResponse(player, response );
if ( response.getAsciiId().equals("mirla_reply_1"))//What's wrong?
{
string_id message = new string_id (CONVO_FILE, "mirla_1");//the warren
npcSpeak( player, message );
doAnimationAction (self, "gesticulate_wildly");
if ( hasLetter( player ) )
npcAddConversationResponse( player, new string_id( CONVO_FILE, "mirla_1_reply_1" ));//I have some bad news
npcAddConversationResponse( player, new string_id( CONVO_FILE, "mirla_1_reply_2" ));//I'm sure he's fine
return SCRIPT_CONTINUE;
}
if ( response.getAsciiId().equals("mirla_1_reply_1"))//Bad news
{
string_id message = new string_id (CONVO_FILE, "mirla_2");//Waaaaah
npcSpeak( player, message );
if ( takeLetter( player ) )
badge.grantBadge(player, "warren_compassion");
npcAddConversationResponse( player, new string_id( CONVO_FILE, "mirla_2_reply_1" ));//I will
return SCRIPT_CONTINUE;
}
if ( response.getAsciiId().equals("mirla_1_reply_2"))//I'm sure he's fine
{
string_id message = new string_id (CONVO_FILE, "mirla_3");//I've got a bad feeling about this, piss off
npcSpeak( player, message );
npcEndConversation(player);
return SCRIPT_CONTINUE;
}
if ( response.getAsciiId().equals("mirla_2_reply_1"))//I will
{
string_id message = new string_id (CONVO_FILE, "mirla_4");//You'll need a password
npcSpeak( player, message );
npcAddConversationResponse( player, new string_id( CONVO_FILE, "mirla_4_reply_1" ));//What is it?
return SCRIPT_CONTINUE;
}
if ( response.getAsciiId().equals("mirla_4_reply_1"))//What is it?
{
prose_package pp = prose.getPackage( new string_id( SYSTEM_MESSAGES, "mirla_password" ), getCellPassword( self ));
npcSpeak( player, pp );
npcEndConversation(player);
return SCRIPT_CONTINUE;
}
return SCRIPT_CONTINUE;
}
trigger OnIncapacitated( obj_id killer )
{
obj_id warren = getObjIdObjVar( self, "warren.bldg" );
messageTo( warren, "handleMirlaDied", null, 5, false );
return SCRIPT_CONTINUE;
}
boolean hasLetter( obj_id player )
{
//debugSpeakMsg( player, "being checked");
obj_id pInv = utils.getInventoryContainer( player );
obj_id[] contents = getContents( pInv );
if ( contents == null )
{
//debugSpeakMsg( player, "no inventory" );
return false;
}
for ( int i = 0; i < contents.length; i++ )
{
if ( getTemplateName( contents[i] ).equals( "object/tangible/mission/quest_item/warren_farewell_letter.iff" ))
{
return true;
}
//debugSpeakMsg( player, getTemplateName( contents[i] ));
}
return false;
}
boolean takeLetter( obj_id player )
{
obj_id pInv = utils.getInventoryContainer( player );
obj_id[] contents = getContents( pInv );
if ( contents == null )
{
//debugSpeakMsg( player, "you got nothing" );
return false;
}
for ( int i = 0; i < contents.length; i++ )
{
if ( getTemplateName( contents[i] ).equals( "object/tangible/mission/quest_item/warren_farewell_letter.iff" ) )
{
destroyObject( contents[i] );
return true;
}
}
return false;
}
string getCellPassword( obj_id npc )
{
obj_id bldg = getTopMostContainer( npc );
return getStringObjVar( bldg, "warren.cellPassword" );
}