247 lines
9.5 KiB
Plaintext
247 lines
9.5 KiB
Plaintext
#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);
|
|
}
|