146 lines
5.0 KiB
Plaintext
146 lines
5.0 KiB
Plaintext
|
//::///////////////////////////////////////////////
|
||
|
//:: 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);
|
||
|
}
|