146 lines
5.0 KiB
Plaintext
Raw Normal View History

//::///////////////////////////////////////////////
//:: Haman (Change)
//:: haman.nss
//:: Copyright (c) 2025 WizardryEE Project
//:://////////////////////////////////////////////
/*
Has random effects and drains the caster one
experience level.
Level 6 Mage spell.
In Wizardry: Proving Grounds of the Mad Overlord,
this is a Level 6 Mage support/disable spell with
random effects. Requires caster level 13+.
Possible effects:
- Augmented magic: party spells cause more damage
- Cure party: cures all conditions
- Heal party: MADI on all members
- Silence enemies: all monsters silenced
- Teleport enemies: monsters teleported away
*/
//:://////////////////////////////////////////////
//:: Created By: WizardryEE Project
//:: Created On: April 26, 2025
//:://////////////////////////////////////////////
void main()
{
// Spell implementation for WizardryEE
// Core functionality: Random effects with level drain
// 1. Get caster information
object oCaster = OBJECT_SELF;
int nCasterLevel = GetLevelByClass(CLASS_TYPE_WIZARD, oCaster);
// Declare variables used in switch cases
object oMember;
object oArea;
object oTarget;
effect eHeal;
effect eSilence;
effect eTeleport;
// 2. Check minimum level requirement
if (nCasterLevel < 13)
{
FloatingTextStringOnCreature("HAMAN requires level 13+ to cast!", oCaster, TRUE);
return;
}
// 3. Apply level drain to caster
effect eDrain = EffectNegativeLevel(1);
effect eVis = EffectVisualEffect(47); // Negative energy visual effect
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDrain, oCaster);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCaster);
// 4. Roll for random effect
int nEffect = Random(5); // 0-4 for five possible effects
// 5. Apply the random effect
switch(nEffect)
{
case 0: // Augmented magic
{
SetLocalInt(oCaster, "SPELL_DAMAGE_BONUS", 2);
FloatingTextStringOnCreature("HAMAN: Party spells enhanced!", oCaster, TRUE);
break;
}
case 1: // Cure party
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
// Remove negative conditions
DeleteLocalInt(oMember, "CONDITION_PARALYZED");
DeleteLocalInt(oMember, "CONDITION_POISONED");
DeleteLocalInt(oMember, "CONDITION_SLEEPING");
DeleteLocalInt(oMember, "CONDITION_SILENCED");
DeleteLocalInt(oMember, "CONDITION_FEARED");
// Visual effect
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(14), oMember);
oMember = GetNextPC();
}
FloatingTextStringOnCreature("HAMAN: Party conditions cured!", oCaster, TRUE);
break;
}
case 2: // Heal party
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
// Full heal
eHeal = EffectHeal(GetMaxHitPoints(oMember));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oMember);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(14), oMember);
oMember = GetNextPC();
}
FloatingTextStringOnCreature("HAMAN: Party fully healed!", oCaster, TRUE);
break;
}
case 3: // Silence enemies
{
oArea = GetArea(oCaster);
oTarget = GetFirstObjectInArea(oArea);
while (GetIsObjectValid(oTarget))
{
if (GetIsEnemy(oTarget, oCaster))
{
eSilence = EffectSilence();
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSilence, oTarget);
SetLocalInt(oTarget, "CONDITION_SILENCED", 1);
}
oTarget = GetNextObjectInArea(oArea);
}
FloatingTextStringOnCreature("HAMAN: All enemies silenced!", oCaster, TRUE);
break;
}
case 4: // Teleport enemies
{
oArea = GetArea(oCaster);
oTarget = GetFirstObjectInArea(oArea);
while (GetIsObjectValid(oTarget))
{
if (GetIsEnemy(oTarget, oCaster))
{
eTeleport = EffectVisualEffect(46); // Teleport visual effect
ApplyEffectToObject(DURATION_TYPE_INSTANT, eTeleport, oTarget);
SetLocalInt(oTarget, "TELEPORTED_AWAY", 1);
}
oTarget = GetNextObjectInArea(oArea);
}
FloatingTextStringOnCreature("HAMAN: All enemies teleported away!", oCaster, TRUE);
break;
}
}
// Notify level drain
FloatingTextStringOnCreature("Lost one experience level!", oCaster, TRUE);
}