epaminombas 0 Postado Junho 7, 2018 Share Postado Junho 7, 2018 O codigo funciona só que não respeita os parametros do spells.xml como uso de mana, range, cooldown e etc. Preciso que determinados itens sejam atalhos para o uso das magias e que sejam como se fosse o proprio player falar a magia. Lua Script Code (Lua): function onUse(player, words, param) player:doCastSpell("Light Healing") end C++ Code Code (C++): int LuaScriptInterface::luaDoCastSpell(lua_State* L) { //creature: doCastSpell("spellName") 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 More sharing options...
0 Administrador PoRaI 99 Postado Junho 11, 2018 Administrador Share Postado Junho 11, 2018 (editado) Minto, eu pensei que fosse outra coisa, mania de não ler direito, aweiuhaew. Enfim, muda teu código pra isso: int LuaScriptInterface::luaDoCastSpell(lua_State* L) { //creature: doCastSpell("spellName") Creature* creature = getUserdata<Creature>(L, 1); if(!creature) { lua_pushboolean(L, false); return 1; } std::string& spellName = getString(L, 2); InstantSpell* spell = g_spells->getInstantSpellByName(spellName); if(!spell) { lua_pushboolean(L, false); return 1; } if(Monster* monster = creature->getMonster()) { Creature* target = monster->getAttackedCreature(); if(target) spell->castSpell(monster, target); else spell->castSpell(monster); lua_pushboolean(L, true); return 1; } else if(Player* player = creature->getPlayer()) { if(spell->playerCastInstant(player, spellName)) { lua_pushboolean(L, true); return 1; } } lua_pushboolean(L, false); return 1; } Editado Junho 13, 2018 por PoRaI epaminombas reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 Administrador PoRaI 99 Postado Junho 11, 2018 Administrador Share Postado Junho 11, 2018 O problema não é nessa parte do código, rs. Link para o comentário Compartilhar em outros sites More sharing options...
0 epaminombas 0 Postado Junho 11, 2018 Autor Share Postado Junho 11, 2018 24 minutos atrás, PoRaI disse: O problema não é nessa parte do código, rs. Mas é essa a função que eu adicionei o erro deveria estar nela e não em outro lugar sei la haha Qual parte do código precisa ser alterada para essa função funcionar corretamente? Link para o comentário Compartilhar em outros sites More sharing options...
0 epaminombas 0 Postado Junho 13, 2018 Autor Share Postado Junho 13, 2018 Deu esse erro: luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const char [1]' em 'std::string &' Link para o comentário Compartilhar em outros sites More sharing options...
0 Administrador PoRaI 99 Postado Junho 13, 2018 Administrador Share Postado Junho 13, 2018 18 minutos atrás, epaminombas disse: Deu esse erro: luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const char [1]' em 'std::string &' Editei o código lá em cima, não tinha visto que tinha postado aqui, kk. Link para o comentário Compartilhar em outros sites More sharing options...
0 epaminombas 0 Postado Junho 13, 2018 Autor Share Postado Junho 13, 2018 eu coloquei o codigo acima e deu o mesmo erro: \luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const char [1]' em 'std::string &' luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const std::string' em 'std::string &' \luascript.cpp(9967): note: Conversão perde qualificadores Link para o comentário Compartilhar em outros sites More sharing options...
0 Administrador PoRaI 99 Postado Junho 13, 2018 Administrador Share Postado Junho 13, 2018 1 hora atrás, epaminombas disse: eu coloquei o codigo acima e deu o mesmo erro: \luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const char [1]' em 'std::string &' luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const std::string' em 'std::string &' \luascript.cpp(9967): note: Conversão perde qualificadores editei dnv, testa aí. Link para o comentário Compartilhar em outros sites More sharing options...
0 epaminombas 0 Postado Junho 14, 2018 Autor Share Postado Junho 14, 2018 Caraca Funcionou!!! Ele solta respeitando todos os detalhes do spells.xml, só tem um pequeno detalhe, ele não fala o nome da magia ao soltar ;( e nem diz you are exausted quando está com exausted só fica saindo a fumacinha Muito obrigado mesmo! Se for possível ajustar o pequeno detalhe ajudaria muito! Link para o comentário Compartilhar em outros sites More sharing options...
0 Administrador PoRaI 99 Postado Junho 14, 2018 Administrador Share Postado Junho 14, 2018 int LuaScriptInterface::luaDoCastSpell(lua_State* L) { //creature: doCastSpell("spellName") Creature* creature = getUserdata<Creature>(L, 1); if(!creature) { lua_pushboolean(L, false); return 1; } std::string& spellName = getString(L, 2); InstantSpell* spell = g_spells->getInstantSpellByName(spellName); if(!spell) { lua_pushboolean(L, false); return 1; } if(Monster* monster = creature->getMonster()) { Creature* target = monster->getAttackedCreature(); if(target) spell->castSpell(monster, target); else spell->castSpell(monster); lua_pushboolean(L, true); return 1; } else if(Player* player = creature->getPlayer()) { if(spell->playerSpellCheck(player) && spell->playerCastInstant(player, spellName)) { lua_pushboolean(L, true); return 1; } } lua_pushboolean(L, false); return 1; } testa ae Link para o comentário Compartilhar em outros sites More sharing options...
0 epaminombas 0 Postado Junho 14, 2018 Autor Share Postado Junho 14, 2018 Deu um erro, luascript.cpp(9967): error C2248: 'Spell::playerSpellCheck': não é possível acessar protected membro declarado na classe 'Spell' Mas eu analisei melhor e com o codigo anterior que você passou, os ajustes podem ser feitos via script da spell. eu só adicionei antes do combat:execute isso: creature:say(Nomedamagia, TALKTYPE_MONSTER_SAY) Agradeço muito sua ajuda!! Valeu mesmo o/ Link para o comentário Compartilhar em outros sites More sharing options...
0 Stigal 584 Postado Agosto 14, 2018 Share Postado Agosto 14, 2018 A questão neste tópico de suporte foi respondida e/ou o autor do tópico resolveu o problema. Este tópico está fechado e foi movido para Suporte - Resolvidos. Se você tiver outras dúvidas, crie um novo tópico. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
epaminombas 0
O codigo funciona só que não respeita os parametros do spells.xml como uso de mana, range, cooldown e etc.
Preciso que determinados itens sejam atalhos para o uso das magias e que sejam como se fosse o proprio player falar a magia.
Lua Script
C++ Code
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados