Aller au contenu

Photo

(Solved) How to create "else" blocks


  • Veuillez vous connecter pour répondre
1 réponse à ce sujet

#1
Kesaru

Kesaru
  • Members
  • 130 messages
Ah, I really wish the wiki was more helpful...
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 .


#2
Kesaru

Kesaru
  • Members
  • 130 messages
Heh.... figured it out...

I was using () instead of {}. They look nearly identical inside the toolset...