Initial upload
Initial upload.
This commit is contained in:
246
_module/nss/lot_magicmushrm.nss
Normal file
246
_module/nss/lot_magicmushrm.nss
Normal file
@@ -0,0 +1,246 @@
|
||||
#include "x0_i0_position"
|
||||
#include "x0_i0_match"
|
||||
#include "x2_inc_itemprop"
|
||||
|
||||
// Custom Glowing Mushroom Script needed - Mushroom should only do this once per mushroom random effect:
|
||||
// for shrooms on Maze Area 2: https://steamuserimages-a.akamaihd.net/ugc/1475445820089242044/8641BAB874C8FAFF0E12CDE6ECF27B00E142BF1F/
|
||||
// EFFECTS OF MUSHROOMS (LIKE RUSSIAN ROULLETTE)
|
||||
// 1) Immediately causes blindness to the PC
|
||||
// 2) Raises strength permanently by 1 point
|
||||
// 3) Raises charisma permanently by 1 point
|
||||
// 4) Raises wisdom permanently by 1 point
|
||||
// 5) Raises intelligence permanently by 1 point
|
||||
// 6) Raises dexterity permanently by 1 point
|
||||
// 7) Causes PC to become invisible for a while
|
||||
// 8) Lowers strength permanently by 1 point
|
||||
// 9) Lowers charisma permanently by 1 point
|
||||
// 10) Lowers wisdom permanently by 1 point
|
||||
// 11) Lowers intelligence permanently by 1 point
|
||||
// 12) Lowers dexterity permanently by 1 point
|
||||
// 13) PC Is poisoned
|
||||
// 14) Add a random gemstone to PC's inventory worth approx. 1000GP
|
||||
// 15) Gives +1 to primary weapon
|
||||
// 16) Heals all lost hitpoints and cures all dieseases / poisons / negative effects of the PC
|
||||
// 17) Makes the PC into a complete idiot for a while (temporary incapacitating intelligence loss)
|
||||
// 18) Adds +5 - +10 HP to the PC permanently
|
||||
// 19) Causes Narcolepsy temporarily to the PC for 5 minutes
|
||||
// 20) PC Pukes (Can use script for fishguts barrel that makes you puke)
|
||||
|
||||
void DoMushroomEffect();
|
||||
void Puke();
|
||||
void Narcolepsy();
|
||||
|
||||
void main()
|
||||
{
|
||||
int iPiecesEaten = GetLocalInt(OBJECT_SELF, "PIECES_EATEN");
|
||||
|
||||
if(iPiecesEaten < 6)
|
||||
{
|
||||
DoMushroomEffect();
|
||||
SetLocalInt(OBJECT_SELF, "PIECES_EATEN", iPiecesEaten+1);
|
||||
if(iPiecesEaten == 0) //This is first piece eaten.
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF, "DAY_EATEN", GetCalendarDay());
|
||||
SetLocalInt(OBJECT_SELF, "MONTH_EATEN", GetCalendarMonth());
|
||||
SetLocalInt(OBJECT_SELF, "YEAR_EATEN", GetCalendarYear());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DoMushroomEffect(){
|
||||
|
||||
int iEffect = d20();
|
||||
object oPC = GetLastUsedBy();
|
||||
|
||||
//Bad Effects
|
||||
effect eBlindness = EffectBlindness();
|
||||
effect eSTRDec = SupernaturalEffect(EffectAbilityDecrease(ABILITY_STRENGTH, 1));
|
||||
effect eCHADec = SupernaturalEffect(EffectAbilityDecrease(ABILITY_CHARISMA, 1));
|
||||
effect eWISDec = SupernaturalEffect(EffectAbilityDecrease(ABILITY_WISDOM, 1));
|
||||
effect eINTDec = SupernaturalEffect(EffectAbilityDecrease(ABILITY_INTELLIGENCE, 1));
|
||||
effect eDEXDec = SupernaturalEffect(EffectAbilityDecrease(ABILITY_DEXTERITY, 1));
|
||||
effect ePosion = EffectPoison(POISON_STRIPED_TOADSTOOL);
|
||||
effect eIdiot = EffectAbilityDecrease(ABILITY_INTELLIGENCE, 10); //Temp for 5 mins
|
||||
//effect eNarco = EffectSleep(); //Force player to fall asleep randomly for the next 5 mins.
|
||||
//effect ePuke = EffectVisualEffect(VFX_COM_CHUNK_GREEN_SMALL); //Player pukes
|
||||
|
||||
effect eVisAbilityDec = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
|
||||
|
||||
//Good Effects
|
||||
effect eSTRInc = SupernaturalEffect(EffectAbilityIncrease(ABILITY_STRENGTH, 1));
|
||||
effect eCHAInc = SupernaturalEffect(EffectAbilityIncrease(ABILITY_CHARISMA, 1));
|
||||
effect eWISInc = SupernaturalEffect(EffectAbilityIncrease(ABILITY_WISDOM, 1));
|
||||
effect eINTInc = SupernaturalEffect(EffectAbilityIncrease(ABILITY_INTELLIGENCE, 1));
|
||||
effect eDEXInc = SupernaturalEffect(EffectAbilityIncrease(ABILITY_DEXTERITY, 1));
|
||||
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_IMPROVED);
|
||||
//cleric heal
|
||||
itemproperty ipEnhanceBonus; //+1 to weapon
|
||||
effect eTempHP = EffectTemporaryHitpoints(4 + d6());
|
||||
int iRandGem;
|
||||
string sRandGemResRef;
|
||||
|
||||
effect eVisAbilityInc = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION);
|
||||
effect eVisEnhanceWep = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
|
||||
object oItem;
|
||||
|
||||
|
||||
float fTimer = 0.0;
|
||||
|
||||
switch(iEffect){
|
||||
//Bad effects
|
||||
case 1:
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlindness, oPC, 10.0);
|
||||
break;
|
||||
case 2:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSTRDec, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 3:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCHADec, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 4:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eWISDec, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 5:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eINTDec, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 6:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDEXDec, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 7:
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, ePosion, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 8:
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eIdiot, oPC, 300.0);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
case 9:
|
||||
while(fTimer < 300.0){
|
||||
DelayCommand(
|
||||
fTimer,
|
||||
AssignCommand(oPC, Narcolepsy())
|
||||
);
|
||||
fTimer += IntToFloat(30 + Random(120));
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
while(fTimer < 300.0){
|
||||
DelayCommand(
|
||||
fTimer,
|
||||
AssignCommand(oPC, Puke())
|
||||
);
|
||||
fTimer += IntToFloat(60 + Random(120));
|
||||
}
|
||||
break;
|
||||
// Good effects
|
||||
case 11:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSTRInc, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityInc, oPC);
|
||||
break;
|
||||
case 12:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCHAInc, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityInc, oPC);
|
||||
break;
|
||||
case 13:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eWISInc, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityInc, oPC);
|
||||
break;
|
||||
case 14:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eINTInc, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityInc, oPC);
|
||||
break;
|
||||
case 15:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDEXInc, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityInc, oPC);
|
||||
break;
|
||||
case 16:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInvis, oPC);
|
||||
break;
|
||||
case 17:
|
||||
ActionCastSpellAtObject(SPELL_GREATER_RESTORATION, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
|
||||
break;
|
||||
case 18:
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
ipEnhanceBonus = ItemPropertyEnhancementBonus(1);
|
||||
if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS)){
|
||||
itemproperty ipLoop = GetFirstItemProperty(oItem);
|
||||
while(GetIsItemPropertyValid(ipLoop)){
|
||||
if(GetItemPropertyType(ipLoop) == ITEM_PROPERTY_ENHANCEMENT_BONUS){
|
||||
ipEnhanceBonus = ItemPropertyEnhancementBonus(
|
||||
GetItemPropertyCostTableValue(ipLoop) + 1
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
IPSafeAddItemProperty(
|
||||
oItem,
|
||||
ipEnhanceBonus
|
||||
);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisEnhanceWep, oPC);
|
||||
break;
|
||||
case 19:
|
||||
iRandGem = Random(5);
|
||||
switch(iRandGem){
|
||||
case 0:
|
||||
sRandGemResRef = "nw_it_gem010";
|
||||
break;
|
||||
case 1:
|
||||
sRandGemResRef = "nw_it_gem008";
|
||||
break;
|
||||
case 2:
|
||||
sRandGemResRef = "nw_it_gem006";
|
||||
break;
|
||||
case 3:
|
||||
sRandGemResRef = "nw_it_gem005";
|
||||
break;
|
||||
case 4:
|
||||
sRandGemResRef = "nw_it_gem012";
|
||||
break;
|
||||
}
|
||||
CreateItemOnObject(sRandGemResRef, oPC);
|
||||
ActionSpeakString("You bite into something hard!");
|
||||
break;
|
||||
case 20:
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eTempHP, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisAbilityDec, oPC);
|
||||
break;
|
||||
default:
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Puke()
|
||||
{
|
||||
effect ePuke = EffectVisualEffect(VFX_COM_CHUNK_GREEN_SMALL); //Player pukes
|
||||
string sPukeTalk = "BBBLLLLAAAARRRRGGGGHHHHH!!!!";
|
||||
vector vPukeAt = GetChangedPosition(
|
||||
GetPosition(OBJECT_SELF),
|
||||
1.0,
|
||||
GetFacing(OBJECT_SELF)
|
||||
);
|
||||
location lPukeAt = Location(GetArea(OBJECT_SELF), vPukeAt, IntToFloat(Random(360)));
|
||||
ClearAllActions();
|
||||
ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE);
|
||||
ActionSpeakString(sPukeTalk);
|
||||
DelayCommand(
|
||||
2.0,
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, ePuke, lPukeAt, 1.0)
|
||||
);
|
||||
}
|
||||
|
||||
void Narcolepsy()
|
||||
{
|
||||
effect eNarco = EffectSleep(); //Force player to fall asleep randomly for the next 5 mins.
|
||||
effect eZzz = EffectVisualEffect(VFX_IMP_SLEEP);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eNarco, OBJECT_SELF, 10.0);
|
||||
if(GetHasEffect(EFFECT_TYPE_SLEEP, OBJECT_SELF))
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eZzz, OBJECT_SELF, 10.0);
|
||||
}
|
||||
Reference in New Issue
Block a user