PWE_PRC8/_module/nss/hookerscript.nss
Jaysyn904 ee1dc35889 Initial Commit
Initial Commit
2025-04-03 10:29:41 -04:00

171 lines
5.3 KiB
Plaintext

// Created by Unwise
// 6.20.02
// Hooker action scripts
// Hopefully humourous cries in the night
string HookerCriesOfPassion();
// Run the standard hooker routine
void HookerMain( object oPC, object oHooker, int iFee);
// See what the customer gets for their money...
void HookerEffect(object oPC, int iFee);
string HookerCriesOfPassion()
{
// Created by Unwise
// 6.20.02
// Return a random statement for the
// hooker to scream out during the act
switch (Random(10))
{
case 0: return "Oh gods! Oh gods! Ooooooooh!";
break;
case 1: return "Yeah baby, give it to me ogre style!";
break;
case 2: return "Yes! Use the Rod of Lordly Might!";
break;
case 3: return "Mmmm, I can see when the iron from your rations went...";
break;
case 4: return "See? I don't need magic to turn flesh to stone...";
break;
case 5: return "Oh yeah! Dimension my door!";
break;
case 6: return "Yeah! How's THAT for a magic mouth?";
break;
case 7: return "Oh yeah! That's the way! Harder! Harder!";
break;
case 8: return "Oh yes! I just love riding you this way!";
break;
case 9: return "Oh! Oh! I have never had anyone so deep! It hurts so good!";
break;
}// end switch
return "";
}// end Cries of Passion
void HookerMain( object oPC, object oHooker, int iFee)
{
// Created by Unwise
// 6.20.02
// Does the PC have the money? If so, take it
if (GetGold(oPC) >= iFee)
{TakeGoldFromCreature (iFee, oPC, TRUE);}
else {return;}
// Next, take control of the PC
// Hooker says
AssignCommand(oHooker, ActionCloseDoor(GetObjectByTag(GetLocalString ( oHooker, "HookerDoor" ))));
// Move hooker and the PC to the waypoint
location lWP_Bed = GetLocation(GetObjectByTag(GetLocalString ( oHooker, "HookerBed")));
AssignCommand(oHooker, ActionMoveToLocation(lWP_Bed));
AssignCommand(oPC, ActionMoveToLocation(lWP_Bed));
AssignCommand(oHooker, ActionSpeakString("Let's dim the lights, lover..."));
// Center a darkness efffect on the hooker
effect eFade = EffectVisualEffect (VFX_DUR_DARKNESS);
AssignCommand(oHooker, ActionDoCommand(ApplyEffectToObject (DURATION_TYPE_PERMANENT, eFade, oHooker)));
//Toss in a cry of passion
AssignCommand(oHooker, ActionWait(3.0));
AssignCommand(oHooker, ActionSpeakString(HookerCriesOfPassion(), TALKVOLUME_SHOUT));
AssignCommand(oHooker, ActionWait(3.0));
AssignCommand(oHooker, ActionDoCommand(HookerEffect (oPC, iFee)));
AssignCommand(oHooker, ActionDoCommand(RemoveEffect (oHooker, eFade)));
}// end main
void HookerEffect(object oPC, int iFee)
{
// Created by Unwise
// 7.21.02
// Depending on how much they paid, the customer
// can get a large variety of effects...
int nRoll=0;
int nType=0;
int nEffect=0;
effect effX;
if (iFee == 2) nRoll = d6();
if (iFee == 5) nRoll = d10();
if (iFee == 10) nRoll = Random(15);
if (iFee > 10) nRoll = d20();
switch (nRoll)
{
case 1: // Disease
nType=1; nEffect = DISEASE_SOLDIER_SHAKES; break;
case 2:
nType=1; nEffect = DISEASE_SHAKES; break;
case 3:
nType=1; nEffect = DISEASE_BLINDING_SICKNESS; break;
case 4: // Nothing
case 5: // Nothing
break;
case 6: // Healing
nType=2; nEffect = SPELL_HEAL; break;
case 7: // Nothing
case 8: // Nothing
break;
case 9:
case 10:
nType=3; nEffect = EFFECT_TYPE_HASTE; break;
case 11:
nType=3; nEffect = EFFECT_TYPE_ABILITY_INCREASE; break;
case 12:
nType=3; nEffect = EFFECT_TYPE_SAVING_THROW_INCREASE; break;
case 13:
nType=3; nEffect = EFFECT_TYPE_AC_INCREASE; break;
case 14:
nType=3; nEffect = EFFECT_TYPE_ATTACK_INCREASE; break;
case 15:
nType=3; nEffect = EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE; break;
case 16:
nType=3; nEffect = EFFECT_TYPE_SAVING_THROW_INCREASE; break;
case 17:
nType=3; nEffect = EFFECT_TYPE_DAMAGE_REDUCTION; break;
case 18:
nType=3; nEffect = EFFECT_TYPE_DAMAGE_RESISTANCE; break;
case 19:
nType=3; nEffect = EFFECT_TYPE_ELEMENTALSHIELD; break;
case 20:
nType=3; nEffect = EFFECT_TYPE_SAVING_THROW_INCREASE; break;
}// end switch
// Apply the effect to the PC
switch (nType)
{
case 0: //Nothing
break;
case 1: // Disease
effX = EffectDisease(nEffect);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, effX, oPC, 600.0);
break;
case 2: // Spell
// Can't seem to get it to work without having
// the NPC cast a spell. Pity.
ActionCastSpellAtObject(nEffect, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
break;
case 3: // Effect
effX = EffectAbilityIncrease(nEffect, 1);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, effX, oPC, 600.0);
break;
}// end switch
} // end HookerEffect