Problema de sintaxis con un script

Hola a todos, me he bajado de una página, el script de valithria, un boss de icc, y todo lo tiene aparentemente correcto, excepto una parte…

[CODE]class spell_valithria_adds_summon : public SpellScriptLoader

{

public:

    spell_valithria_adds_summon() : SpellScriptLoader("spell_valithria_adds_summon") { }



    class spell_valithria_adds_summon_AuraScript : public AuraScript

    {

        PrepareAuraScript(spell_valithria_adds_summon_AuraScript);


        void OnPereodic(AuraEffect const* aurEff, AuraApplication const* aurApp)

        {

            PreventDefaultAction();

            if (Unit* caster = aurApp->GetBase()->GetCaster())

            {

                int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];

                if(!triggerSpellId)

                    return;

                for(uint8 i = 0; i < caster->GetMap()->GetSpawnMode(); ++i)

                    if(urand(0,1))

                        caster->CastSpell(Pos[i].x, Pos[i].y, Pos[i].z, triggerSpellId, true, NULL, NULL, GetCasterGUID(), caster);

            }

        }


        void Register()

        {

            OnEffectPeriodic += AuraEffectPeriodicFn(spell_valithria_adds_summon_AuraScript::OnPereodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);

        }

    };


    AuraScript* GetAuraScript() const

    {

        return new spell_valithria_adds_summon_AuraScript();

    }

};[/CODE]

La parte que falla es OnEffectPeriodic += AuraEffectPeriodicFn(spell_valithria_adds_summon_AuraScript::OnPereodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL)

el Visual Basic me la remarca como un eror, y al compilar, me pone:

[SPOILER]2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(409): error C2665: ‘spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::EffectPeriodicHandlerFunction::EffectPeriodicHandlerFunction’ : ninguna de las 2 sobrecargas pudo convertir todos los tipos de argumento

2> …........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(391): puede ser ‘spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::EffectPeriodicHandlerFunction::EffectPeriodicHandlerFunction(spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::AuraEffectPeriodicFnType,uint8,uint16)’

2> al hacer coincidir la lista de argumentos ‘(void (__thiscall spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::* )(const AuraEffect *,const AuraApplication *), SpellEffIndex, AuraType)’

[/SPOILER]

Alguna idea de como solucionarlo? :S

La parte que falla es OnEffectPeriodic += AuraEffectPeriodicFn(spell_valithria_adds_summon_AuraScript::OnPereodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL)

el Visual Basic me la remarca como un eror, y al compilar, me pone:

2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(408): error C2665: ‘spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::EffectPeriodicHandlerFunction::EffectPeriodicHandlerFunction’ : ninguna de las 2 sobrecargas pudo convertir todos los tipos de argumento

[/SPOILER]

Alguna idea de como solucionarlo? :S

Prueba así, te lo he modificado ligeramente:

[SPOILER]class spell_valithria_adds_summon : public SpellScriptLoader

{

public:

spell_valithria_adds_summon() : SpellScriptLoader(“spell_valithria_adds_summon”) { }

class spell_valithria_adds_summon_AuraScript : public AuraScript

{

PrepareAuraScript(spell_valithria_adds_summon_AuraScript);

void OnPereodic(AuraEffect const* aurEff, AuraApplication const* aurApp)

{

PreventDefaultAction();

if (Unit* caster = aurApp->GetBase()->GetCaster())

{

int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];

if(!triggerSpellId)

return;

for(uint8 i = 0; i < caster->GetMap()->GetSpawnMode(); ++i)

if(urand(0,1))

caster->CastSpell(Pos.x, Pos.y, Pos.z, triggerSpellId, true, NULL, NULL, GetCasterGUID(), caster);


}


}



void Register()


{


OnEffectPereodic += AuraEffectPereodicFn(spell_valithria_adds_summon_AuraScript::OnPereodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);


}


};



AuraScript* GetAuraScript() const


{


return new spell_valithria_adds_summon_AuraScript();


}




[/SPOILER]

nada… si cambio OnEffectPeriodic += AuraEffectPeriodicFn … por OnEffectPereodic += AuraEffectPereodicFn con e, me dice que el identificador no existe por lo que da aún más errores xD

void OnPereodic(AuraEffect const* aurEff, AuraApplication const* aurApp)

{

PreventDefaultAction();

if (Unit* caster = aurApp->GetBase()->GetCaster())

{

int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];

if(!triggerSpellId)

return;

for(uint8 i = 0; i < caster->GetMap()->GetSpawnMode(); ++i)

if(urand(0,1))

caster->CastSpell(Pos.x, Pos.y, Pos.z, triggerSpellId, true, NULL, NULL, GetCasterGUID(), caster);


}


}




hay esta mal




void OnPereodic(AuraEffect const* /aurEff/, AuraApplication const* /aurApp/)


{


PreventDefaultAction();


if (Unit* caster = GetBase()->GetCaster())


{


int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];


if(!triggerSpellId)


return;


for(uint8 i = 0; i < caster->GetMap()->GetSpawnMode(); ++i)


if(urand(0,1))


caster->CastSpell(Pos
.x, Pos.y, Pos.z, triggerSpellId, true, NULL, NULL, GetCasterGUID(), caster);


}


}


me da el mismo error además de otros añadidos: :S

[SPOILER]2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(396): error C2227: el operando izquierdo de ‘->GetCaster’ debe señalar al tipo class/struct/union/generic

2> el tipo es ‘‘unknown-type’’

2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(396): error C3861: ‘GetBase’: no se encontró el identificador

2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(398): error C2065: ‘aurEff’ : identificador no declarado

2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(398): error C2227: el operando izquierdo de ‘->GetEffIndex’ debe señalar al tipo class/struct/union/generic

2> el tipo es ‘‘unknown-type’’

2>…........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(409): error C2665: ‘spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::EffectPeriodicHandlerFunction::EffectPeriodicHandlerFunction’ : ninguna de las 2 sobrecargas pudo convertir todos los tipos de argumento

2> …........\a.Sources\Trinity\src\server\scripts\Northrend\IcecrownCitadel\boss_valithria_dreamwalker.cpp(391): puede ser ‘spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::EffectPeriodicHandlerFunction::EffectPeriodicHandlerFunction(spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::AuraEffectPeriodicFnType,uint8,uint16)’

2> al hacer coincidir la lista de argumentos ‘(void (__thiscall spell_valithria_adds_summon::spell_valithria_adds_summon_AuraScript::* )(const AuraEffect *,const AuraApplication *), SpellEffIndex, AuraType)’

[/SPOILER]

Gracias por las ideas y posibles soluciones a los dos… pero nada… :S

Alguna idea más?

pon el script completo para verificar

Facil remplaza

OnEffectPeriodic += AuraEffectPeriodicFn(spell_valithria_adds_summon_AuraScript::OnPereodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);

esa linea por esto

OnEffectPeriodic += AuraEffectPeriodicFn(spell_valithria_adds_summon_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);

saludos.

nada… :S

el script completo es:

https://bitbucket.org/bolvor/icecrown-citadel/src/b601a8b1ba64/IcecrownCitadel/boss_valithria_dreamwalker.cpp

El error lo da en la linea 420…

tienes definido el SPELL_AURA_PERIODIC_TRIGGER_SPELL ??

Prueba esto


void OnPereodic(AuraEffect const* /*aurEff*/)

            {

                PreventDefaultAction();

                if (Unit* caster = GetCaster())

                {

                    int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];

                    if(!triggerSpellId)

                        return;

                    for(uint8 i = 0; i < caster->GetMap()->GetSpawnMode(); ++i)

                        if(urand(0,1))

                            caster->CastSpell(Pos[i].x, Pos[i].y, Pos[i].z, triggerSpellId, true, NULL, NULL, GetCasterGUID(), caster);

                }

            }

Sí esta definido, con ese cambio la parte que daba problemas antes, ya no los da, por lo que podríamos decir que así está bien, pero con el “/aurEff/” en comentario, da error “aurEff->GetEffIndex()”. Quitándole lo del comentario, no da error y no parece influir en el funcionamiento en un principio.

Por lo que gracias a todos!! xD

a xD no me fije en la linea

int triggerSpellId = GetSpellProto()->EffectTriggerSpell[aurEff->GetEffIndex()];

usabas el aurEff

funciona bien Ok…!!