Ir para conteúdo
  • 0

Piso especial..


Lumus

Pergunta

Galera, tudo bom?

 

Preciso de um piso que enquanto o player estiver em cima dele, ele vai recebendo uma quantia aleatória de mana entre 1 e 25... neste mesmo piso, ele vai recuperando pontos de stamina(menos a bônus)... se for possível é claro!

 

Uso tfs 1.1. Grato.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
local min , max = 1, 25 -- Recuperação de mana entre 1 e 25
local sta = 1 -- Recuperação de 1 minuto de stamina
local t = 5 -- Tempo em segundos da recuperação fica se repetindo
local event = {}

function Player.autoRege(self)

	local player = Player(self)
	local pid = player:getGuid()

	if player:isPlayer() then
		if player:getStamina() < 2400 then
			player:setStamina(player:getStamina() + sta)
		end

		if player:getMana() ~= player:getMaxMana() then
			player:addMana(math.random(min, max))
		end
		event[pid] = addEvent(function() player:autoRege() end, t* 1000)
	end

end


function onStepIn(creature, item, position, fromPosition)

	local player = Player(creature)

	if player:isPlayer() then
		return true
	end

	player:autoRege()

	return true
end

function onStepOut(creature, item, position, fromPosition)

	local player = Player(creature)
	local pid = player:getGuid()

	stopEvent(event[pid])

	return true
end
        <movevent event="StepIn" actionid="7454" script="ARQUIVO.lua" />
	<movevent event="StepOut" actionid="7454" script="ARQUIVO.lua" />

Coloque actionid 7454 no piso pelo RME.

Editado por ScreaM
Link para o comentário
Compartilhar em outros sites

  • 0

@Scream não foi.. não deu erro mas também não funcionou.

 

function onStepIn(creature, item, position, fromPosition)
 
	local player = Player(creature)
 
	if player:isPlayer() then
		return true
	end
 
	player:autoRege()
	player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Funcionou, OK.")
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
 
	local player = Player(creature)
	local pid = player:getGuid()
 
	stopEvent(event[pid])
 	player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Funcionou, OK 2")
	return true
end

Eu coloquei pra enviar a msg a fim de teste, somente na stepout que foi, quando ele pisa, nem a msg, envia...

Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

@Scream não foi.. não deu erro mas também não funcionou.

 

Eu coloquei pra enviar a msg a fim de teste, somente na stepout que foi, quando ele pisa, nem a msg, envia...

Tenta assim:

 

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 60, -- Segundos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}

local function Player.autoRege(self)
 
	if self:isPlayer() then
		if self:getStamina() < 2400 then
			self:setStamina(self:getStamina() + config.stamina)
		end
 
		if self:getMana() ~= player:getMaxMana() then
			self:addMana(math.random(config.minimo, config.maximo))
		end
	end
 
end
 
 
function onStepIn(creature, item, position, fromPosition)
	local cid = creature:getId() 
	addEvent(
		function()
            local player = Player(cid)
            if player then
                player:autoRege()
            end
        end,
        config.tempo * 1000
    )
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
	local cid = creature:getId()
	local player = Player(cid)
 
	if player then
		stopEvent(event[cid])
	end
	return true
end 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta assim:

 

 

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 60, -- Segundos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}

local function Player.autoRege(self)
 
	if self:isPlayer() then
		if self:getStamina() < 2400 then
			self:setStamina(self:getStamina() + config.stamina)
		end
 
		if self:getMana() ~= player:getMaxMana() then
			self:addMana(math.random(config.minimo, config.maximo))
		end
	end
 
end
 
 
function onStepIn(creature, item, position, fromPosition)
	local cid = creature:getId() 
	addEvent(
		function()
            local player = Player(cid)
            if player then
                player:autoRege()
            end
        end,
        config.tempo * 1000
    )
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
	local cid = creature:getId()
	local player = Player(cid)
 
	if player then
		stopEvent(event[cid])
	end
	return true
end 

 

Erro linha 8 '(' expected near '.'

Link para o comentário
Compartilhar em outros sites

  • 0

Erro linha 8 '(' expected near '.'

Tem certeza que não foi durante sua edição?

Verifiquei tudo aqui e não achei erro de sintaxe...

Link para o comentário
Compartilhar em outros sites

  • 0

Tem certeza que não foi durante sua edição?

Verifiquei tudo aqui e não achei erro de sintaxe...

Eu nao editei nada o.O do jeito que tu postou eu copiei e colei

Link para o comentário
Compartilhar em outros sites

  • 0

Eu nao editei nada o.O do jeito que tu postou eu copiei e colei

Já descobri '-' era o local...

Segue:

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 60, -- Segundos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}

function Player.autoRege(self)
	if self:isPlayer() then
		if self:getStamina() < 2400 then
			self:setStamina(self:getStamina() + config.stamina)
		end
 
		if self:getMana() ~= player:getMaxMana() then
			self:addMana(math.random(config.minimo, config.maximo))
		end
	end
end
 
function onStepIn(creature, item, position, fromPosition)
	local cid = creature:getId() 
	addEvent(
		function()
            local player = Player(cid)
            if player then
                player:autoRege()
            end
        end,
        config.tempo * 1000
    )
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
	local cid = creature:getId()
	local player = Player(cid)
 
	if player then
		stopEvent(event[cid])
	end
	return true
end 
Link para o comentário
Compartilhar em outros sites

  • 0

 

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 60, -- Segundos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}

function Player.autoRege(self)
	if self:isPlayer() then
		if self:getStamina() < 2400 then
			self:setStamina(self:getStamina() + config.stamina)
		end
 
		if self:getMana() ~= self:getMaxMana() then
			self:addMana(math.random(config.minimo, config.maximo))
		end
	end
end
 
function onStepIn(creature, item, position, fromPosition)
	local cid = creature:getId() 
	addEvent(
		function()
            local player = Player(cid)
            if player then
                player:autoRege()
            end
        end,
        config.tempo * 1000
    )
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
	local cid = creature:getId()
	local player = Player(cid)
 
	if player then
		stopEvent(event[cid])
	end
	return true
end 
Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou em partes.

 

Ele só adiciona a mana 1x, eu tenho que ficar andando em cima do piso para dar a mana. Se possível adequar para o player ficar parado recebendo a mana.

 

Se possível e claro se pude, por aquele magiceffect que mostra quanto de mana foi healado(tipo o de dano) só que mostrando a quantia de mana que ele recebeu.

Link para o comentário
Compartilhar em outros sites

  • 0

Verifica se funciona normal agora :

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 1, -- Minutos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}
local events {}
function Player.autoRege(self)
	if self:isPlayer() then
		if self:getStamina() < 2400 then
			self:setStamina(self:getStamina() + config.stamina)
		end
		if self:getMana() ~= player:getMaxMana() then
			self:addMana(math.random(config.minimo, config.maximo))
		end
		addEvent(function() player:autoRege() end, config.tempo* 1000)
	end
end
function onStepIn(creature, item, position, fromPosition)
	local cid = creature:getId() 
    local player = Player(cid)
    if player then
        events[player] = player:autoRege()
    end
	return true
end
function onStepOut(creature, item, position, fromPosition)
	local cid = creature:getId()
	local player = Player(cid)
	if player then
		stopEvent(events[player])
	end
	return true
end 
Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou em partes.

 

Ele só adiciona a mana 1x, eu tenho que ficar andando em cima do piso para dar a mana. Se possível adequar para o player ficar parado recebendo a mana.

 

Se possível e claro se pude, por aquele magiceffect que mostra quanto de mana foi healado(tipo o de dano) só que mostrando a quantia de mana que ele recebeu.

Da forma que você pediu, creio que agora funcione :p

local config = {
	minimo = 1, -- Recuperação mínima de mana
	maximo = 25, -- Recuperação máxima de mana
	stamina = 60, -- Segundos de stamina a serem recuperados
	tempo = 10 -- Tempo em segundos da recuperação fica se repetindo
}
local events = {}

function Player.autoRege(self)
	if self:getStamina() < 2400 then
		self:setStamina(self:getStamina() + config.stamina)
	end
	
	if self:getMana() ~= self:getMaxMana() then
		self:addMana(math.random(config.minimo, config.maximo))
	end
	self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
	addEvent(function() self:autoRege() end, config.tempo* 1000)
end
 
function onStepIn(creature, item, position, fromPosition)
	if not creature:isPlayer() then
		return false
	end
	events[creature] = creature:autoRege()
	return true
end
 
function onStepOut(creature, item, position, fromPosition)
	if not creature:isPlayer() then
		return false
	end
	stopEvent(events[creature])
	return true
end 
Editado por Bruno Minervino
Link para o comentário
Compartilhar em outros sites

  • 0

editado

Funcionou em partes.

 

Ao sair do piso continua enchendo a mana o.O achei estranho porque tem o stepout.

 

Teria como(se possível é claro) colocar pra mostrar a quantia que está sendo curada?

 

@EDIT

Caraleo: BUGOU geral....

 

qualquer player tá recebendo a mana, o cara pode ta em outra cidade e ta recebendo a mana o.O

 

@EDIT2

Se o mlk deslogar com o efeito da mana curando, da bug e o ot fecha. -> creio que é só por no logout. Mas caso ele for banido, não terá como de qualquer forma ele deslogará.

Editado por Fawz
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...