282 lines
13 KiB
Plaintext
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++;
|
|
}
|
|
|
|
}
|