Ir para conteúdo

Featured Replies

Postado

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

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

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  • 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? :p 

Editado por Tadelho (veja o histórico de edições)

Postado

@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

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  • 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 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.

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