Ir para conteúdo

creature:soltaMagia("name") PARA TFS 1.x


Refe

Posts Recomendados

Olá, hoje eu vim postar a função

creature:soltaMagia("nomedamagia")

Para o TFS 1.X.

 

Bom, eu estou fazendo um Poketibia com base no TFS 1.3 e vou postar essa função para quem quiser seguir o mesmo.

Segue um exemplo de uso:

Spoiler

function onSay(player, words, param)
    poke = player:getSummons()[1]
    poke:soltaMagia(pokes[poke:getName()][1].name)
    player:say(poke:getName().."use "..pokes[poke:getName()][1].name, TALKTYPE_ORANGE_1)
end

Em LUASCRIPT.CPP

Abaixo de

	registerMethod("Player", "addExperience", LuaScriptInterface::luaPlayerAddExperience);

Adicione:

	registerMethod("Creature", "soltaMagia", LuaScriptInterface::luaSoltaMagia);

Logo abaixo da função:

int LuaScriptInterface::luaCreatureGetEvents(lua_State* L)

Adicione:

int LuaScriptInterface::luaSoltaMagia(lua_State* L)
{
    //creature:soltaMagia("name")
    const std::string& spellName = getString(L, 2);

    if(Creature* creature = getUserdata<Creature>(L, 1))
    {
        InstantSpell* spell = g_spells->getInstantSpellByName(spellName);
        if(!spell)
        {
            lua_pushboolean(L, false);
            return 1;
        }
        Creature* target = creature->getAttackedCreature();

        if(target)
            spell->castSpell(creature, target);
        else
            spell->castSpell(creature, creature);

        lua_pushboolean(L, true);
    }
    else
    {
        lua_pushboolean(L, false);
    }
    return 1;
}

Em luascript.h registre:

        static int luaSoltaMagia(lua_State* L);

		static int luaSoltaMagia(lua_State* L);

Agora é só compilar a proveitar :)

Link para o comentário
Compartilhar em outros sites

10 minutos atrás, Noninhouh disse:

Poxa, legal. Deixa eu ver se entendi direito kk

Essa spell seria da pasta "/spells/scripts/" ??

é uma fuãnço, pode ser utilizada em qualquer script ._.

 

Link para o comentário
Compartilhar em outros sites

13 minutos atrás, Ceetros disse:

é uma fuãnço, pode ser utilizada em qualquer script ._.

 

Minha dúvida é se quando eu usar essa função, a spell que vai puxar, será dessa pasta que eu falei

Editado por Noninhouh
Link para o comentário
Compartilhar em outros sites

12 horas atrás, Noninhouh disse:

Minha dúvida é se quando eu usar essa função, a spell que vai puxar, será dessa pasta que eu falei

spells.xml :)

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

Só algumas dicas de convenção, utilize a nomenclatura em inglês para manter o seus códigos organizados.

Você também pode melhorar a estrutura do seu código, por exemplo, não tem sentido alocar espaço para o nome da magia e depois verificar se a creature existe, pq se a creature não existir vc esta alocando espaço para o nome da magia sem necessidade, isso só vai gastar processamento e memoria do seu servidor, então vc primeiro verifica se a creature existe, caso ela exista vc vai para o segundo passo que é verificar se a spell existe, caso as 2 condições sejam verdadeiras vc executa o resto do código.

 


int LuaScriptInterface::luaCreatureCastSpell(lua_State* L)
{
    //creature:castSpell(name)
    Creature* creature = getUserdata<Creature>(L, 1)
    if(!creature) {
        lua_pushboolean(L, false);
        return 1;
    }

    const std::string& spellName = getString(L, 2);
    InstantSpell* spell = g_spells->getInstantSpellByName(spellName);
    if(!spell) {
        lua_pushboolean(L, false);
        return 1;
    }

    Creature* target = creature->getAttackedCreature();
    if(target)
        spell->castSpell(creature, target);
    else
        spell->castSpell(creature, creature);

    lua_pushboolean(L, true);     

    return 1;
}

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

@Ceetros Me parece que não funciona na atual versão do TFS confirma?

 

 

  player:soltaMagia("magia1")

edit.: funciona, só que uma magia como avalanche precisa de target.
 
 

Editado por otavio101
Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...