I can't figure out how to create "else" blocks in this game. I've done it in others so I know the idea behind them and what they're supposed to do and all, and I looked at other "else" blocks used in scripts in this game already to see what they're supposed to look like here. But for some crazy reason I can't get them to work.
I've copied the formats exactly and I still always get this error message when trying to save the script afterward;
"E: 12:51:04 - spell_singletarget.nss - spell_singletarget.nss(701): Unknown state in compiler
"
Here are a couple examples of me trying them:
case ABILITY_SPELL_WALKING_BOMB:
{
// remove stacking effects
RemoveStackingEffects(stEvent.oTarget, stEvent.oCaster, ABILITY_SPELL_WALKING_BOMB);
RemoveStackingEffects(stEvent.oTarget, stEvent.oCaster, ABILITY_SPELL_MASS_CORPSE_DETONATION);
if (HasAbility(stEvent.oCaster, ABILITY_SPELL_MASS_CORPSE_DETONATION) == TRUE)
(
float fDamage = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * VIRULENT_WALKING_BOMB_DAMAGE_FACTOR;
eEffect = EffectWalkingBomb(stEvent.oCaster, TRUE, fDamage, VIRULENT_WALKING_BOMB_DEATH_VFX);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, VIRULENT_WALKING_BOMB_DURATION, stEvent.oCaster, stEvent.nAbility);
ApplyEffectDamageOverTime(stEvent.oTarget, stEvent.oCaster, ABILITY_SPELL_WALKING_BOMB, fDamage, WALKING_BOMB_DURATION, DAMAGE_TYPE_SPIRIT);
) else
(
float fDamage = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * WALKING_BOMB_DAMAGE_FACTOR;
eEffect = EffectWalkingBomb(stEvent.oCaster, FALSE, fDamage, WALKING_BOMB_DEATH_VFX);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, WALKING_BOMB_DURATION, stEvent.oCaster, stEvent.nAbility);
ApplyEffectDamageOverTime(stEvent.oTarget, stEvent.oCaster, ABILITY_SPELL_WALKING_BOMB, fDamage, WALKING_BOMB_DURATION, DAMAGE_TYPE_SPIRIT);
)
bHostile = TRUE;
break;
}
--------------------------------------------------------------------------------------------------------------------------------
case ABILITY_SPELL_MANA_CLEANSE:
{
// if hostile
if (IsObjectHostile(stEvent.oCaster, oTarget) == TRUE)
{
float fDrain = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * MANA_CLEANSE_FACTOR;
if (IsMagicUser(oTarget) == TRUE)
{
eEffect = EffectModifyManaStamina(fDrain);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_INSTANT, eEffect, oTarget, 0.0f, stEvent.oCaster, stEvent.nAbility);
} else
(
eEffect = EffectModifyManaStamina(fDrain * 0.5f);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_INSTANT, eEffect, oTarget, 0.0f, stEvent.oCaster, stEvent.nAbility);
)
}
break;
}
---------------------------------------------------------EDIT-------------------------------------------------------
For some reason I'm now getting the same error message after attempting to combine Heroic Offense, Aura and Defense into the same ability;
case ABILITY_SPELL_HEROIC_OFFENSE:
{
// remove stacking effects
RemoveStackingEffects(stEvent.oTarget, stEvent.oCaster, stEvent.nAbility);
// attack
float fAttack = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * HEROIC_OFFENSE_ATTACK_FACTOR;
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_ATTACK, fAttack);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_OFFENSE_DURATION, stEvent.oCaster, stEvent.nAbility);
if (HasAbility(stEvent.oCaster, ABILITY_SPELL_HEROS_ARMOR) == TRUE)
(
// arrow miss chance
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_MISSILE_SHIELD, HEROIC_AURA_MISSILE_SHIELD_BONUS);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_AURA_DURATION, stEvent.oCaster, stEvent.nAbility);
)
if (HasAbility(stEvent.oCaster, ABILITY_SPELL_HEROIC_DEFENSE) == TRUE)
(
// defense
float fDefense = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * HEROIC_DEFENSE_DEFENSE_FACTOR;
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_DEFENSE, fDefense);
eEffect = SetEffectEngineInteger(eEffect, EFFECT_INTEGER_VFX, Ability_GetImpactObjectVfxId(stEvent.nAbility));
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_DEFENSE_DURATION, stEvent.oCaster, stEvent.nAbility);
// resistance
float fResistance = (100.0f + GetCreatureSpellPower(stEvent.oCaster)) * HEROIC_DEFENSE_RESISTANCE_FACTOR;
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_DAMAGE_RESISTANCE_COLD, fResistance,
PROPERTY_ATTRIBUTE_DAMAGE_RESISTANCE_ELEC, fResistance);
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_DEFENSE_DURATION, stEvent.oCaster, stEvent.nAbility);
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_DAMAGE_RESISTANCE_FIRE, fResistance,
PROPERTY_ATTRIBUTE_DAMAGE_RESISTANCE_NATURE, fResistance);
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_DEFENSE_DURATION, stEvent.oCaster, stEvent.nAbility);
eEffect = EffectModifyProperty(PROPERTY_ATTRIBUTE_DAMAGE_RESISTANCE_SPIRIT, fResistance,
PROPERTY_ATTRIBUTE_RESISTANCE_PHYSICAL, fResistance);
ApplyEffectOnObject(EFFECT_DURATION_TYPE_TEMPORARY, eEffect, stEvent.oTarget, HEROIC_DEFENSE_DURATION, stEvent.oCaster, stEvent.nAbility);
)
break;
}
Here's the error message;
E: 13:18:59 - spell_singletarget.nss - spell_singletarget.nss(362): Unknown state in compiler
line 362 is the one directly after "//Arrow miss chance."
Modifié par Kesaru, 13 mars 2010 - 06:45 .





Retour en haut






