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++; } }