Postado Janeiro 4, 2018 7 anos Olá novamente. Estou utilizando um TFS 0.4.0 e gost gostaria de formular um script com o seguinte objetivo: dobrar o dano em determinadas criaturas quando a arma do player for do tipo "club". Pensei em duas hipóteses para resolver o caso: 1) criar um creaturescript e registrá-lo nas criaturas em questão, ou 2) criar um weaponscript, registrar nas armas de club e adicionar manualmente a tabela com o nome das criaturas assim afetadas pela arma. Pergunto para quem já tem mais experiência: conhecendo as funções disponíveis no TFS 0.4.0, qual ideia vocês acham melhor? E principalmente: poderiam em ajudar na elaboração do script? Eu tentei criar um script para o caso 1 (creaturescripts) que me parecia mais fácil e registrei tanto no creaturescript.xml quanto no xml de um demon skeleton para testar, mas não funciona (nenhum erro na distro). Minha ideia foi: local mult = 2 local arma = getItemWeaponType(uid) function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then if arma == 1 then dano = math.ceil(dano*(mult)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(cid), "TESTE", 20) return false end end return true end Mas eu realmente sou leigo em programação como um todo, e não sei se estou utilizando as funções corretamente. Pelo que entendi, o getItemWeaponType(uid) retorna o tipo da arma (0 = fist, 1 = club, etc), é isso? Neste caso, já que estou utilizando club no teste, o dano não deveria estar sendo substituído por esta nova fórmula e soltando uma mensagem de confirmação "TESTE" (que pretendo apagar depois)? Se alguém puder me ajudar a elaborar tal script, seja registrando o weapon e adicionando manualmente o nome das criaturas afetadas ou direto pelo creaturescript, ficarei grato. Obrigado pela ajuda desde já.
Postado Janeiro 5, 2018 7 anos do jeito q tá colocado, vc tá tentando pegar a weapon type de algo q não existe (uid) As coisas só existem se elas tiverem sido declaradas antes. function onStatsChange(cid, attacker, type, combat, value) aqui por exemplo a gente declarou a função onStatsChange com esses parametros aí, se no lugar de cid eu colocar 'jose', todas as funções q usam 'cid' como parametro abaixo irão falhar se eu não modificar nelas tb. Entender isso é o primeiro passo. Pro segundo, essa função getItemWeaponType ela recebe como parametro o uniqueid de um item então pra poder usar ela primeiro vc tem q identificar qual é o item q vc vai pegar pra depois pegar o .uid dele pra no final poder comparar. Uma forma de fazer isso é pegando o item q tá em determinado slot do player (mão direita, por ex). Mas vc tem que checar pra esquerda tb. Assim, tenta começar com um pouco menos do que vc tem aí e vai dando print nas coisas ex: print(dano) para saber quanto de dano tá ficando (pra ver se tá multiplicando certo) Depois q vc entender o que é cada coisa, ai vc vai incrementando seu código. Copiar partes de scripts só vai te dar mais trabalho pra entender oque não funciona qnd falhar Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Janeiro 5, 2018 7 anos Autor @xWhiteWolf percebi que eu não conseguiria resolver da maneira que queria pelos motivos que você listou aqui. PORÉM, consegui resolver da minha forma, invertendo a lógica e criando um script para as armas que, para minha surpresa, "funcionou". Criei e registrei devidamente um arquivo.lua com o seguinte script: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, 0, 1.0, 0) local combat2 = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 2.0, 0, 2.0, 0) local creatures = {"Demon Skeleton"} function onUseWeapon(cid, var) local target = getCreatureTarget(cid) local nome = getCreatureName(target) if (not isInArray (creatures, nome)) then doCombat(cid, combat, var) doPlayerSendTextMessage (cid,22,"TESTE1") else doCombat(cid, combat2, var) doPlayerSendTextMessage (cid,22,"TESTE2") end end O script funciona perfeitamente, eu obtenho a mensagem "teste1" e "teste2" quando alterno o target entre o demon skeleton e as outras criaturas, mas especificamente o "combat2" não é executado, não ataco a criatura. Alguma ideia do motivo? Editado Janeiro 5, 2018 7 anos por Tadelho (veja o histórico de edições)
Postado Janeiro 5, 2018 7 anos @Tadelho olha pros seus combats. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, 0, 1.0, 0) local combat2 = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 2.0, 0, 2.0, 0) primeiro vc cria um objeto e de combat e depois define os parametros dele. Até aí nada de errado, mas se vc olhar bem o combat2 tá sem parametro nenhum pq os parametros vc colocou tudo no 'combat' e substituiu os parametros do primeiro xD Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Janeiro 7, 2018 7 anos Autor @xWhiteWolf Há, verdade! Escrevi "combat" ao invés de "combat2" no segundo script. Obrigado, a dúvida foi sanada. Farei um tutorial com algumas ideias para o pessoal depois e atualizo aqui. --- UPDATE: Fiz um tutorial demonstrando como criar diferentes combats para acertar monstros específicos: Editado Janeiro 7, 2018 7 anos por Tadelho (veja o histórico de edições)
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.