Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

[C++] doCreatureCastSpell (0.3.6pl1)

Escrito e testado: 0.3.6PL1 [8.54 - 8.60]

Salve galera do TibiaKing, eu fui procurar na internet sobre essa função e vi que já tentaram cria-la, porém não conseguiram, ou se conseguiram nunca postaram. Então eu resolvi faze-la para vocês, e eu percebi que ninguém nunca tinha feito, por causa de uma dúvida, e um certo grau de dificuldade. Certamente, eu tive uma dificuldade no começo, porém ao desenvolver da função eu percebi que não era nada de mais.

Então eu trago aqui pra vocês esta função, cuja a ideia é fazer com que a criatura (jogador ou monstro) a utilize uma magia pelo nome dela, importante lembrar que o nome da magia, não é as palavras mágicas, exemplo: "utani hur" é a palavra mágica e "haste" é o nome da magia. Enfim, sem mais delongas e vamos aos códigos

:)

Vá ao arquivo "LuaScript.cpp" e procure por:

//doPlayerAddExperience(cid, amount)
    lua_register(m_luaState, "doPlayerAddExperience", LuaScriptInterface::luaDoPlayerAddExperience);

E abaixo adicione:

//doCreatureCastSpell // by OrochiElf.
    lua_register(m_luaState, "doCreatureCastSpell", LuaScriptInterface::luaDoCreatureCastSpell);

Agora procure por:

int32_t LuaScriptInterface::luaDoPlayerSetSex(lua_State* L)

{

//doPlayerSetSex(cid, sex)

uint32_t newSex = popNumber(L);

ScriptEnviroment* env = getEnv();

if(Player* player = env->getPlayerByUID(popNumber(L)))

{

player->setSex(newSex);

lua_pushboolean(L, true);

}

else

{

errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));

lua_pushboolean(L, false);

}

return 1;

}

E abaixo adicione:

int32_t LuaScriptInterface::luaDoCreatureCastSpell(lua_State* L) // by OrochiElf.
{
    //doCreatureCastSpell(cid, spellname)
    std::string spellName = popString(L);

    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L)))
    {
        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
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }
    return 1;
}

Agora vá ao arquivo "LuaScript.h" e procure por:

static int32_t luaDoPlayerAddItem(lua_State* L);

E abaixo adicione:

static int32_t luaDoCreatureCastSpell(lua_State* L); // by OrochiElf

Exemplo, eu tenho um pet, e quero que ele utilize a magia de "utani hur" - "haste".

Talkaction Code:

function onSay(cid, words, param, channel)
    local summon = getCreatureSummons(cid)[1]
 
    if isCreature(summon) then
	    doCreatureCastSpell(summon, "haste")
    end
    return true
end

Esta função é muito requisitada para fazer servidores de pokémon, evitando gambiarras. Que foi o motivo para qual eu desenvolvi ela

:)

Créditos.

Tony Araújo (OrochiElf) 100%

Tony Araújo  ;D 

 

  • Respostas 22
  • Visualizações 4.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Rapaz, eu acho que a magia só cria as fórmulas quando é o player que está utilizando. Caso contrário ele não cria.

Postado

@Orochi

Duas perguntas para você:

  1. No caso ele vai pegar o nome da spell onde exatamente? Spells.xml? 
  2. Essa função é igual a que tem no  Pokémon Dash Advanced (PDA)? 
Postado
  • Autor

1. Sim, ele pega no spells.xml, se eu não me engano é o primeiro parametro da tag kkkk

 

2. Não, essa função eu nunca vi nenhum servidor que use-a. Porém, já ouvi boatos que o PStorm, ou PAdventures, eu não lembro direito, já fizeram um sistema de moves mais leve utilizando esta função, assim otimizando o desempenho do servidor.

Tony Araújo  ;D 

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo