120 lines
4.3 KiB
Plaintext
120 lines
4.3 KiB
Plaintext
|
//::////////////////////////////////////////////////////////////////////////////
|
||
|
//::
|
||
|
//:: Script Name: cutscn_cliffclim
|
||
|
//::
|
||
|
//:: Use: This script is used to create a visual effect of falling it will also
|
||
|
//:: deal damage to the player and send a brief descriptive message
|
||
|
//::
|
||
|
//::
|
||
|
//:: Created By: Birdman076
|
||
|
//::
|
||
|
//:: Created On: August 16, 2009
|
||
|
//::
|
||
|
//:: Note: This script will disarm the player before they climb to add a bit
|
||
|
//:: more to the effect of climbing a rope and falling.
|
||
|
//::
|
||
|
//::////////////////////////////////////////////////////////////////////////////
|
||
|
effect eAppear = EffectAppear();
|
||
|
int nInt;
|
||
|
effect eEffect;
|
||
|
location lTarget;
|
||
|
object oTarget;
|
||
|
|
||
|
//Put this on action taken in the conversation editor
|
||
|
void main()
|
||
|
{
|
||
|
//Gets who is doing the talking
|
||
|
object oPC = GetPCSpeaker();
|
||
|
// 15% chance of this actually happening
|
||
|
if (d100()<=15)
|
||
|
{
|
||
|
//Unequips items in players hand for better immersion
|
||
|
AssignCommand(oPC, ClearAllActions());
|
||
|
AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND)));
|
||
|
AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)));
|
||
|
//Fades the screen to black to hide what is happening
|
||
|
FadeToBlack(oPC);
|
||
|
//Retrieves a waypoint to jump the player too
|
||
|
oTarget = GetWaypointByTag("WP_CLIFF_CS_OUT");
|
||
|
|
||
|
lTarget = GetLocation(oTarget);
|
||
|
|
||
|
//only do the jump if the location is valid.
|
||
|
//though not flawless, we just check if it is in a valid area.
|
||
|
//the script will stop if the location isn't valid - meaning that
|
||
|
//nothing put after the teleport will fire either.
|
||
|
//the current location won't be stored, either
|
||
|
|
||
|
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
|
||
|
|
||
|
AssignCommand(oPC, ClearAllActions());
|
||
|
|
||
|
AssignCommand(oPC, ActionJumpToLocation(lTarget));
|
||
|
//Retrieves the waypoint to jump the player back to.
|
||
|
oTarget = GetWaypointByTag("WP_CLIFF_CS_IN");
|
||
|
|
||
|
lTarget = GetLocation(oTarget);
|
||
|
|
||
|
//only do the jump if the location is valid.
|
||
|
//though not flawless, we just check if it is in a valid area.
|
||
|
//the script will stop if the location isn't valid - meaning that
|
||
|
//nothing put after the teleport will fire either.
|
||
|
//the current location won't be stored, either
|
||
|
|
||
|
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
|
||
|
|
||
|
AssignCommand(oPC, ClearAllActions());
|
||
|
|
||
|
AssignCommand(oPC, ActionJumpToLocation(lTarget));
|
||
|
|
||
|
oTarget = oPC;
|
||
|
//This gives the player that "Falling" effect
|
||
|
DelayCommand(5.1, ApplyEffectToObject(DURATION_TYPE_INSTANT, eAppear, oTarget));
|
||
|
//This cancels the fade to black effect. We do this after the Falling effect
|
||
|
//because if we don't the player will see him/her self appear on the ground
|
||
|
//and then bounce into the air, then fall again. Not very believable for a
|
||
|
//falling effect
|
||
|
DelayCommand(5.3, StopFade(oPC));
|
||
|
|
||
|
eEffect = EffectKnockdown();
|
||
|
//This knocks the player to the ground after the fall for a better effect
|
||
|
DelayCommand(5.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 3.0f));
|
||
|
|
||
|
//Visual effects can't be applied to waypoints, so if it is a WP
|
||
|
//the VFX will be applied to the WP's location instead
|
||
|
|
||
|
nInt = GetObjectType(oTarget);
|
||
|
//We make some blood
|
||
|
DelayCommand(7.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_BLOOD_REG_RED), oTarget));
|
||
|
//Deal some damage
|
||
|
eEffect = EffectDamage(10, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
|
||
|
DelayCommand(7.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC));
|
||
|
//Send a message informing them of what happened.
|
||
|
DelayCommand(8.0, SendMessageToPC(oPC, "You have lost your grip on the rope and fallen to the base of the cliff."));
|
||
|
|
||
|
}
|
||
|
else //Just send them up the rope if they don't fall
|
||
|
{
|
||
|
AssignCommand(oPC, ClearAllActions());
|
||
|
AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND)));
|
||
|
AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)));
|
||
|
|
||
|
oTarget = GetWaypointByTag("WP_CODS_DN");
|
||
|
|
||
|
lTarget = GetLocation(oTarget);
|
||
|
|
||
|
//only do the jump if the location is valid.
|
||
|
//though not flawless, we just check if it is in a valid area.
|
||
|
//the script will stop if the location isn't valid - meaning that
|
||
|
//nothing put after the teleport will fire either.
|
||
|
//the current location won't be stored, either
|
||
|
|
||
|
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
|
||
|
|
||
|
AssignCommand(oPC, ClearAllActions());
|
||
|
|
||
|
AssignCommand(oPC, ActionJumpToLocation(lTarget));
|
||
|
|
||
|
}
|
||
|
}
|