RATDOG/_module/nss/test_ondying.nss
Jaysyn904 52d65cb598 Added (2) Castle Interior overrides
Added (2) Castle Interior overrides, continued making static NPCs & stores dynamic. added more DMFI language tokens, started working on mod onEnter scripting, got NPCs to fire emotes while walking around.
2021-09-06 22:02:47 -04:00

123 lines
5.0 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Dying Script
//:: ar_mod_ondying
//::
//:://////////////////////////////////////////////
/*
This script handles the default behavior
that occurs when a player is dying.
*/
//:://////////////////////////////////////////////
void StripPlayer(object oPlayer)
{
object oPlayer = GetLastPlayerDying();
object oLootChest = GetObjectByTag("PLC_ALK_PC_LOOT");
object oArms = GetItemInSlot(INVENTORY_SLOT_ARMS , oPlayer);
object oArrows = GetItemInSlot(INVENTORY_SLOT_ARROWS , oPlayer);
object oBelt = GetItemInSlot(INVENTORY_SLOT_BELT , oPlayer);
object oBolts = GetItemInSlot(INVENTORY_SLOT_BOLTS , oPlayer);
object oBoots = GetItemInSlot(INVENTORY_SLOT_BOOTS , oPlayer);
object oBullets = GetItemInSlot(INVENTORY_SLOT_BULLETS , oPlayer);
object oChest = GetItemInSlot(INVENTORY_SLOT_CHEST , oPlayer);
object oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK , oPlayer);
object oHead = GetItemInSlot(INVENTORY_SLOT_HEAD , oPlayer);
object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND , oPlayer);
object oLeftRing = GetItemInSlot(INVENTORY_SLOT_LEFTRING , oPlayer);
object oNeck = GetItemInSlot(INVENTORY_SLOT_NECK , oPlayer);
object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND , oPlayer);
object oRightRing = GetItemInSlot(INVENTORY_SLOT_RIGHTRING , oPlayer);
// Removing PC's equipment
AssignCommand(oLootChest, ActionTakeItem(oArms, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oArrows, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oBelt, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oBolts, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oBoots, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oBullets, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oChest, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oCloak, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oHead, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oLeftHand, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oLeftRing, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oNeck, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oRightHand, oPlayer));
AssignCommand(oLootChest, ActionTakeItem(oRightRing, oPlayer));
// Removing PC's inventory
object oStuff = GetFirstItemInInventory(oPlayer);
while(GetIsObjectValid(oStuff))
{
AssignCommand(oLootChest, ActionTakeItem(oStuff, oPlayer));
oStuff = GetNextItemInInventory(oPlayer);
}
// Removing PC's money
AssignCommand(oLootChest, DelayCommand(0.0f, TakeGoldFromCreature(GetGold(oPlayer), oPlayer, FALSE)));
}
void main()
{
//Initialize objects, variables and effects.
object oPlayer = GetLastPlayerDying();
object oAttacker = GetLastAttacker(oPlayer);
object oTarget = GetWaypointByTag("WP_CAPTURED"); //or whatever the tag is for your destination waypoint
int iHPs = GetCurrentHitPoints(oPlayer);
effect eTeleport= EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
effect eHeal = EffectHeal(20);
effect eGive1HP = EffectHeal(abs(iHPs)+1);
effect eDeath = EffectDeath(FALSE, FALSE);
string sMessage;
switch (d10())
{
case 1: sMessage = "I am gravely wounded."; break;
case 2: sMessage = "Need assistance."; break;
case 3: sMessage = "Water..."; break;
case 4: sMessage = "Ugh...Ahhh...Gah..."; break;
case 5: sMessage = "Help."; break;
case 6: sMessage = "Medic."; break;
case 7: sMessage = "Wow I suck!"; break;
case 8: sMessage = "Mmm... this sand is delicious."; break;
case 9: sMessage = "I always wanted to spend more time on my back."; break;
case 10: sMessage = "Wait... I lagged!"; break;
}
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, SpeakString(sMessage));
if (GetTag(GetArea(oPlayer)) == "CARAVAN001")
{
//Main condition, If the Player is between 0 and -20 HPs they are "captured" and placed in a jail cell.
//...otherwise make them die.
if (iHPs >= -20)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eTeleport, oPlayer);
AssignCommand(oPlayer, JumpToObject(oTarget));
// Remove & store all of PCs gear & money
StripPlayer(oPlayer);
//Stop the NPC from attacking the player
SetPCLike(oPlayer, oAttacker);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer);
}
else
{
//Make the Player die if at -20 or below.
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPlayer);
}
}
if (GetTag(GetArea(oPlayer)) != "TyrSSArena")
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHitPointChangeWhenDying(-1.0), oPlayer, 0.0f);
else
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(FALSE, FALSE), oPlayer);
}