Ir para conteúdo
  • 0
Entre para seguir isso  
Asould Acalaylaa

Scripting Argumento na função dando nulo (com "classe")

Pergunta

Asould Acalaylaa    5
Asould Acalaylaa

Olá amigos.

Por algum motivo que eu não estou entendendo, uma função baseada numa classe está me trazendo o argumento dela como nulo (nil), por mais que eu force o valor desta variável estaticamente.

	function Player:helloWorld(string)
		print("A frase é: " .. string)
	end

Desta forma, SEMPRE o argumento "string" será nulo, por mais simples e intuitivo que isso seja. Porém, se eu fizer a função um pouco diferente, funciona normalmente:

 

	Player.helloWorld = function(string)
		Print("A sua frase é: " .. string)
	end

Desta forma, funciona sem problemas.

Porquê uma funciona o argumento, e a outra não? Alguém poderia me explicar e me dar um exemplo funcional?

Obrigado!

@EDIT

Estou chamando ambas as funções desta forma: Player.helloWorld("blablabla"). E ela não funciona quando chamada tanto no mesmo arquivo, quanto em outro arquivo.

Editado por Asould Acalaylaa

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 respostass a esta questão

Recommended Posts

  • 0
Elwyn    106
Elwyn

Você disse que está chamando a função da seguinte forma: `Player.helloWorld('blablabla')`, se quiser chamar assim você tem que chamar `Player.helloWorld(playerObj, 'blablabla')` ou `playerObj:helloWorld('blablabla')`

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
gpedro    47
gpedro

Para que seu método funcione, é necessário que você tenha um objeto do tipo Player. Veja este exemplo no próprio repositório da TFS:

https://github.com/otland/forgottenserver/blob/master/data/lib/core/player.lua#L93-L98

function Player.addManaSpent(...)
	APPLY_SKILL_MULTIPLIER = false
	local ret = addManaSpentFunc(...)
	APPLY_SKILL_MULTIPLIER = true
	return ret
end

https://github.com/otland/forgottenserver/blob/5ba1ef3926695237a8da3d969bd99e779a0ae7f1/data/spells/scripts/support/summon_creature.lua#L41

function onCastSpell(creature, variant)
#código omitido ...
creature:addManaSpent(manaCost)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Asould Acalaylaa    5
Asould Acalaylaa
23 horas atrás, gpedro disse:

Para que seu método funcione, é necessário que você tenha um objeto do tipo Player. Veja este exemplo no próprio repositório da TFS:

https://github.com/otland/forgottenserver/blob/master/data/lib/core/player.lua#L93-L98


function Player.addManaSpent(...)
	APPLY_SKILL_MULTIPLIER = false
	local ret = addManaSpentFunc(...)
	APPLY_SKILL_MULTIPLIER = true
	return ret
end

https://github.com/otland/forgottenserver/blob/5ba1ef3926695237a8da3d969bd99e779a0ae7f1/data/spells/scripts/support/summon_creature.lua#L41


function onCastSpell(creature, variant)
#código omitido ...
creature:addManaSpent(manaCost)

 

@gpedro Mas o método é do tipo player. E eu usei player como exemplo, pode ser o objeto qualquer coisa. Não funciona os parâmetros da forma dita.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×