Files
Anphillia_PRC8/_module/nss/wa_apply_effects.nss
Jaysyn904 28cdb617b3 Initial commit
Adding all of the current content for Anphillia Unlimited.
2024-01-04 07:49:38 -05:00

282 lines
13 KiB
Plaintext

void Restore(object oTarget)
{
effect eBad = GetFirstEffect(oTarget);
//Search for negative effects
while(GetIsEffectValid(eBad))
{
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_CURSE ||
GetEffectType(eBad) == EFFECT_TYPE_DISEASE ||
GetEffectType(eBad) == EFFECT_TYPE_POISON ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_CHARMED ||
GetEffectType(eBad) == EFFECT_TYPE_DOMINATED ||
GetEffectType(eBad) == EFFECT_TYPE_DAZED ||
GetEffectType(eBad) == EFFECT_TYPE_CONFUSED ||
GetEffectType(eBad) == EFFECT_TYPE_FRIGHTENED ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_SLOW ||
GetEffectType(eBad) == EFFECT_TYPE_STUNNED)
{
//Remove effect if it is negative.
RemoveEffect(oTarget, eBad);
}
eBad = GetNextEffect(oTarget);
}
int nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget);
effect eHeal = EffectHeal(nHeal);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
}
void main()
{
int N = 1;
int TreeValue, Value, SubValue;
TreeValue = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_1");
int Restoration, Invisibility;
effect bless;
switch (GetAlignmentGoodEvil(GetPCSpeaker()))
{
case ALIGNMENT_GOOD: bless = EffectVisualEffect(VFX_IMP_HOLY_AID); break;
case ALIGNMENT_NEUTRAL: bless = EffectVisualEffect(VFX_IMP_BREACH); break;
case ALIGNMENT_EVIL: bless = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); break;
}
object PC = GetLocalObject(GetPCSpeaker(), "BlessTarget");
location TargetLocation = GetLocalLocation(GetPCSpeaker(), "BlessLocation");
int nDuration;
// SendMessageToAllDMs("Speaker: " + ObjectToString(GetPCSpeaker()));
int Nth = 1;
while (GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth+1)) != 0)
{
Nth++;
}
nDuration = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth));
float Duration = HoursToSeconds(nDuration);
// SendMessageToAllDMs("Duration: " + IntToString(nDuration) + " hours");
int End = 0;
while (TreeValue != 0 && End == 0)
{
switch (TreeValue)
{
case 1: // Attack bonus
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectAttackIncrease(Value), bless);
// SendMessageToAllDMs("Attackbonus increase wasincreased by answer: " + IntToString(N));
break;
case 2: // Damage bonus
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectDamageIncrease(Value, DAMAGE_TYPE_DIVINE), bless);
// SendMessageToAllDMs("Damagebonus increase was: " + IntToString(Value));
break;
case 3: // Restoration
Restoration = 1;
break;
case 4: // AC Bonus
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectACIncrease(Value), bless);
break;
case 5: // Concealment bonus
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectConcealment(Value*10), bless);
break;
case 6: // Saving throw bonus
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, Value), bless);
// SendMessageToAllDMs("Savint throw increase was: " + IntToString(Value));
break;
case 7: // Immunity
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
// SendMessageToAllDMs("Value in elemental immunity: " + IntToString(Value));
switch (Value)
{
case 1: // Mind affecting
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS), bless);
break;
case 2: // Death
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_DEATH), bless);
break;
case 3: // Movementspeed decrease
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_ENTANGLE), bless);
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE), bless);
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_PARALYSIS), bless);
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_SLOW), bless);
break;
case 4: // Fear
bless = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_FEAR), bless);
break;
case 5: // Spell level
N++;
SubValue = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectSpellLevelAbsorption(SubValue), bless);
break;
case 6: // Elemental
N++;
SubValue = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
// SendMessageToAllDMs("SubValue in elemental immunity: " + IntToString(SubValue));
switch(SubValue)
{
case 1:
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_FIRE, 100), bless);
break;
case 2:
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_COLD, 100), bless);
break;
case 3:
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 100), bless);
SendMessageToAllDMs("Electircal immunity");
break;
case 4:
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_ACID, 100), bless);
break;
case 5:
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_FIRE, 100), bless);
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_COLD, 100), bless);
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 100), bless);
bless = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_ACID, 100), bless);
break;
}
break;
}
break;
case 8: // Misc
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
switch (Value)
{
case 1: // True seeing
bless = EffectLinkEffects(EffectTrueSeeing(), bless);
break;
case 2: // Damage reduction 5
bless = EffectLinkEffects(EffectDamageReduction(5, DAMAGE_POWER_PLUS_FIVE, 0), bless);
bless = EffectLinkEffects(EffectVisualEffect(VFX_DUR_PROT_STONESKIN), bless);
break;
case 3: // Greater stoneskin
bless = EffectLinkEffects(EffectDamageReduction(10, DAMAGE_POWER_PLUS_FIVE, 0), bless);
bless = EffectLinkEffects(EffectVisualEffect(VFX_DUR_PROT_GREATER_STONESKIN), bless);
break;
case 4: // Invisibility
Invisibility = 1;
break;
case 5: // Bull's Strength
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, d4()+2), bless);
break;
case 6: // Cat's grace
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_DEXTERITY, d4()+2), bless);
break;
case 7: // Endurance
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_CONSTITUTION, d4()+2), bless);
break;
case 8: // Fox's Cunning
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_INTELLIGENCE, d4()+2), bless);
break;
case 9: // Owl's wisdom
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_WISDOM, d4()+2), bless);
break;
case 10: // Eagle's Splendor
bless = EffectLinkEffects(EffectAbilityIncrease(ABILITY_CHARISMA, d4()+2), bless);
break;
}
break;
case 9: // Spell resistance
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
bless = EffectLinkEffects(EffectSpellResistanceIncrease(10 + Value*2), bless);
break;
case 10:
N++;
// SendMessageToAllDMs("End");
End = 1;
break;
default:
SendMessageToAllDMs("wa_conversation_variable_* was 0");
}
N++;
Value = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
if (Value != 99 && Value != 0)
SendMessageToAllDMs("This number should be 99: " + IntToString(Value) + " (" + IntToString(N) + ")");
N++;
TreeValue = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(N));
}
/********************** DEBUG, Prints all variables
Nth = 1;
int blaah = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth));
while (blaah != 0)
{
SendMessageToAllDMs(IntToString(Nth) + " = " + IntToString(blaah));
Nth++;
blaah = GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth));
}
SendMessageToAllDMs(IntToString(Nth) + " = " + IntToString(blaah));
*/
if (PC != OBJECT_INVALID)
{
if (Restoration == 1)
Restore(PC);
if (Invisibility == 1)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectInvisibility(INVISIBILITY_TYPE_NORMAL), PC, Duration);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, bless, PC, Duration);
DelayCommand(Duration, RemoveEffect(PC, bless));
SendMessageToAllDMs("Bless applied to creature");
}
else
{
int nNearest = 1;
PC = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, TargetLocation, nNearest);
if (PC == OBJECT_INVALID)
SendMessageToAllDMs("No Players near");
while (GetDistanceBetweenLocations(GetLocation(PC), TargetLocation) < 20.0 && PC != OBJECT_INVALID)
{
if (Restoration == 1)
Restore(PC);
if (Invisibility == 1)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectInvisibility(INVISIBILITY_TYPE_NORMAL), PC, Duration);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, bless, PC);
DelayCommand(Duration, RemoveEffect(PC, bless));
nNearest++;
PC = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, TargetLocation, nNearest);
}
SendMessageToAllDMs("Bless applied to location");
}
Nth = 1;
while (GetLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth)) != 0)
{
DeleteLocalInt(GetPCSpeaker(), "wa_conversationvariable_" + IntToString(Nth));
Nth++;
}
}