Postado Março 12, 2015 10 anos 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
Postado Março 12, 2015 10 anos Tópico aprovado, obrigado por compartilhar. Este tópico foi movido: Para: "OTServ → Programação Open Tibia → Códigos Prontos" STYLLER OT 2022
Postado Março 12, 2015 10 anos @Orochi Duas perguntas para você: No caso ele vai pegar o nome da spell onde exatamente? Spells.xml? Essa função é igual a que tem no Pokémon Dash Advanced (PDA)?
Postado Março 12, 2015 10 anos 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
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.