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

Refe
Por Refe
em Libs and Functions

Refe

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/07/10Posts: 645Gênero: Masculino

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 :)

Contato:

 

 

Email: contato@ceetros.com

Discord: Ceetros#5376

Telegram: @ceetros

 

 

Noninhouh

Danone
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/12Posts: 318Gênero: Masculino

Poxa, legal. Deixa eu ver se entendi direito kk

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

DarkWore

Ex - Moderador
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 23/05/17Posts: 584Gênero: MasculinoChar no Tibia: Não Tenho

Muito Bom, Obrigado por Postar.

uHtXRtd.png.3908e825830f508573fee9a45063e737.png

 

Não dou suporte via PM, em caso de duvidas abra um tópico na seção correta e aguarde ser respondido.

avatar

INFOS

Grupo: Registrado: 01/01/70Posts:
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 ._.

 

Noninhouh

Danone
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/12Posts: 318Gênero: Masculino
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

avatar

INFOS

Grupo: Registrado: 01/01/70Posts:
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 :)

BananaFight

Allahu Akbar
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/02/13Posts: 702Gênero: Masculino

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;
}

 

 

otavio101

Shark
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 19/03/08Posts: 75

@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.