O problema não é nessa parte do código, rs.
- Fórum
- OTServ
- Suporte
- Resolvidos
- [Resolvido] C++ TFS 1.3 docastspell suporte para a correção do codigo
[Resolvido] C++ TFS 1.3 docastspell suporte para a correção do codigo
Por epaminombas, 07 de jun. de 2018 em Resolvidos
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino

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?
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

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 por PoRaI
info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino

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 &'
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

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.
info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino

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
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

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í.
info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino

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!
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

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
Editado Junho 14 por PoRaI
info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino

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/
info
Grupo: Herói
Registrado: 28/11/10
Posts: 3.4k
Reputação: +585
Gênero: Masculino




info
Grupo: Campones
Registrado: 28/12/06
Posts: 60
Reputação: 0
Gênero: Masculino
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