Ir para conteúdo
  • 0

Ajuda com Efeito em buff de xp


wenderotpoke

Pergunta

Posts Recomendados

  • 0

Considerando que esse script está funcionando é só substituir o código por esse:

 

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM

function onUse(cid, item, fromPosition, itemEx, toPosition)

	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
	
	--[[if expItem.timeType == "death" then
		tempo = "death"
		death = true
		
	else]]
	
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, 45144) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, 45144, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

Só colocar o id do efeito na variável effect que coloquei lá em cima.

 

Avisa se der algum erro

Link para o comentário
Compartilhar em outros sites

  • 0
4 minutos atrás, Yan18 disse:

Considerando que esse script está funcionando é só substituir o código por esse:

 


local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM

function onUse(cid, item, fromPosition, itemEx, toPosition)

	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
	
	--[[if expItem.timeType == "death" then
		tempo = "death"
		death = true
		
	else]]
	
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, 45144) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, 45144, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

Só colocar o id do efeito na variável effect que coloquei lá em cima.

 

Avisa se der algum erro

VLW MANIN PERFEITO ❤️

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 25/12/2020 em 14:53, wenderotpoke disse:

agora que percebi uma coisinha kkk ele n continua fazendo o efeito tipo eu quero que fique continuo ate o buff acabar tem como?

Ah sim, tem como sim. Substitui o código por esse:

 

local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)

	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	while
	
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, 3, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Eu alterei o código e criei uma função para ficar soltando o efeito no player enquanto ele tem buff. Na função que criei buffEffect, tem os seguintes parâmetros:

cid = Player
time = A cada quantos segundos vai sair o efeito no player novamente
effect = Id do efeito
duration = Duração do buff  

O que você vai precisar mudar, praticamente é o segundo e terceiro parâmetro, que é o intervalo do efeito e o id do efeito.

 

Testa e fala se der algum erro.

Link para o comentário
Compartilhar em outros sites

  • 0
12 horas atrás, Yan18 disse:

Ah sim, tem como sim. Substitui o código por esse:

 


local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)

	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	while
	
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, 3, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Eu alterei o código e criei uma função para ficar soltando o efeito no player enquanto ele tem buff. Na função que criei buffEffect, tem os seguintes parâmetros:


cid = Player
time = A cada quantos segundos vai sair o efeito no player novamente
effect = Id do efeito
duration = Duração do buff  

O que você vai precisar mudar, praticamente é o segundo e terceiro parâmetro, que é o intervalo do efeito e o id do efeito.

 

Testa e fala se der algum erro.

Mano me perdi aqui kkkk calma ai vamo ve se entendi em time eu coloco o tempo né? tipo a cada 1s coloco 100? e a duração eu gostaria ate o buff acabar ai faz como?

 

Link para o comentário
Compartilhar em outros sites

  • 0
11 horas atrás, wenderotpoke disse:

Mano me perdi aqui kkkk calma ai vamo ve se entendi em time eu coloco o tempo né? tipo a cada 1s coloco 100? e a duração eu gostaria ate o buff acabar ai faz como?

 

Você só precisa colocar o tempo em segundos para o efeito sair novamente no player. Ou seja, se você colocar 3, a cada 3 segundos vai repetir o efeito.

 

Por exemplo, eu sei que o buff tem duração de 1 dia, então dentro desse intervalo de 24 horas, quando o player está online, se eu quiser que nesse tempo o efeito do buff fique repetindo a cada 5 segundos, eu coloco 5:

 

buffEffect(cid, 5, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF

 

Mas, vou te facilitar a vida, já que está confuso, vou criar uma variável que repete o efeito a cada X segundos, substitui o código por esse:

 

local loop_effect_segundos = 3 -- INTERVALO DE TEMPO EM SEGUNDOS QUE VAI SAIR EFEITO NO PLAYER ENQUANTO POSSUIR O BUFF 

local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)
loop_effect_segundos = math.floor(loop_effect_segundos) 
  
	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	while
	
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, loop_effect_segundos, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Pronto, agora a única coisa que você precisa se preocupar e alterar, é o valor na variável loop_effect_segundos  na primeira linha do código. Altere lá o valor em segundos que quer que repita o efeito no player (loop) enquanto ele possuir buff.

Link para o comentário
Compartilhar em outros sites

  • 0
Em 03/01/2021 em 12:23, Yan18 disse:

Você só precisa colocar o tempo em segundos para o efeito sair novamente no player. Ou seja, se você colocar 3, a cada 3 segundos vai repetir o efeito.

 

Por exemplo, eu sei que o buff tem duração de 1 dia, então dentro desse intervalo de 24 horas, quando o player está online, se eu quiser que nesse tempo o efeito do buff fique repetindo a cada 5 segundos, eu coloco 5:

 


buffEffect(cid, 5, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF

 

Mas, vou te facilitar a vida, já que está confuso, vou criar uma variável que repete o efeito a cada X segundos, substitui o código por esse:

 


local loop_effect_segundos = 3 -- INTERVALO DE TEMPO EM SEGUNDOS QUE VAI SAIR EFEITO NO PLAYER ENQUANTO POSSUIR O BUFF 

local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)
loop_effect_segundos = math.floor(loop_effect_segundos) 
  
	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
	
	while
	
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, loop_effect_segundos, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Pronto, agora a única coisa que você precisa se preocupar e alterar, é o valor na variável loop_effect_segundos  na primeira linha do código. Altere lá o valor em segundos que quer que repita o efeito no player (loop) enquanto ele possuir buff.

deu esse erro aqui mano

 [Error - LuaScriptInterface::loadFile] data/actions/scripts/ExpItems.lua:58: 'do' expected near 'doRemoveItem'
[Warning - Event::loadScript] Cannot load script (data/actions/scripts/ExpItems.lua)
data/actions/scripts/ExpItems.lua:58: 'do' expected near 'doRemoveItem'

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, wenderotpoke disse:

deu esse erro aqui mano

 [Error - LuaScriptInterface::loadFile] data/actions/scripts/ExpItems.lua:58: 'do' expected near 'doRemoveItem'
[Warning - Event::loadScript] Cannot load script (data/actions/scripts/ExpItems.lua)
data/actions/scripts/ExpItems.lua:58: 'do' expected near 'doRemoveItem'

Esqueci um while ali haha, substitui o código por esse:

 

local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)
loop_effect_segundos = math.floor(loop_effect_segundos) 
  
	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
		
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, loop_effect_segundos, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Testa e veja se continua dando erro.

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Yan18 disse:

Esqueci um while ali haha, substitui o código por esse:

 


local function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)
loop_effect_segundos = math.floor(loop_effect_segundos) 
  
	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
		
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, loop_effect_segundos, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Testa e veja se continua dando erro.

tu so tirou o While né? kkk eu fiz a msm coisa aqui e pegou mas so o buff n estava fazendo o efeito

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, wenderotpoke disse:

tu so tirou o While né? kkk eu fiz a msm coisa aqui e pegou mas so o buff n estava fazendo o efeito

Sim, eu ia usar while, mas ai achei melhor usar de outra forma, mas esqueci de tirar.

 

Não entendi o problema que está dando, como assim pegou mas o buff não está fazendo efeito? 

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, Yan18 disse:

Sim, eu ia usar while, mas ai achei melhor usar de outra forma, mas esqueci de tirar.

 

Não entendi o problema que está dando, como assim pegou mas o buff não está fazendo efeito? 

O efeito magico n fica saindo do player ainda '-' n sei o motivo de n estar pegando

o Efeito do buff ta normal

Link para o comentário
Compartilhar em outros sites

  • 0
10 horas atrás, Yan18 disse:

Da algum erro na distro?

nenhum ele pega mas n da erro

só não fica com o efeito mesmo

andei pensando ontem sera que não teria que ter algum evento registrado? pq quando vc logar ele iria sumir tbm né?

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, wenderotpoke disse:

nenhum ele pega mas n da erro

só não fica com o efeito mesmo

andei pensando ontem sera que não teria que ter algum evento registrado? pq quando vc logar ele iria sumir tbm né?

Muito bem observado, é isso mesmo, como foi feito por actions, então só vai funcionar na primeira vez que der use no item e até deslogar.

 

Faz o seguinte, substitui o código de actions por esse:

function buffEffect(cid, time, effect, duration)
	duration = math.floor(duration)
	
	if not cid then
		return true
	end
	
	if duration > os.time() then		
		return doSendMagicEffect(getThingPos(cid), effect) and addEvent(buffEffect, 1000 * time, cid.uid, time, effect, duration)	
	else
		return true
	end	
end

local items = {
	[19268] = {percentExtra = 50, timeType = "hours", time = 1}, -- 1 hora
	[19269] = {percentExtra = 100, timeType = "hours", time = 1}, -- 1 hora
	
	[19270] = {percentExtra = 50, timeType = "days", time = 7}, -- 1 semana
	[19271] = {percentExtra = 100, timeType = "days", time = 7}, -- 1 semana
	
	[19272] = {percentExtra = 50, timeType = "days", time = 30}, -- 1 Mês
	[19273] = {percentExtra = 100, timeType = "days", time = 30}, -- 1 Mês
}

local effect = 28 -- EFEITO QUE SAI NO PLAYER AO USAR O ITEM
local storage_time = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR

function onUse(cid, item, fromPosition, itemEx, toPosition)
loop_effect_segundos = math.floor(loop_effect_segundos) 
  
	local expItem = items[item.itemid]
	
	if not expItem then
		return true
	end
	
	local tempo = 0
	local death = false
		
	if expItem.timeType == "days" then
		tempo = expItem.time * 60 * 60 * 24
	else -- Hours
		tempo = expItem.time * 60 * 60
	end
	
	if getPlayerStorageValue(cid, storage_time) - os.time() > 1 then
		doPlayerSendTextMessage(cid, 20, "Você ainda tem um Experience Booster ativo de "..getPlayerStorageValue(cid, 45145).."%. Ele irá acabar em "..convertTime(getPlayerStorageValue(cid, 45144) - os.time())..".")
		return false
	end
		
	--doSendMagicEffect(getThingPos(cid), effect) -- FUNÇÃO QUE SAI EFEITO NO PLAYER AO USAR O ITEM
	buffEffect(cid, loop_effect_segundos, effect, storage_time) -- FUNÇÃO QUE SAI EFEITO NO PLAYER ENQUANTO ELE ESTÁ COM BUFF
	doRemoveItem(item.uid, 1)
	setPlayerStorageValue(cid, storage_time, tempo + os.time())
	setPlayerStorageValue(cid, 45145, expItem.percentExtra)
	doPlayerSendTextMessage(cid, 20, "Você ativou um Experience Booster de "..expItem.percentExtra.."% a mais, que durará "..(death and "até morrer" or convertTime(tempo))..".")
	
	return true
end

 

Agora vai em Data/Creaturescripts/Scripts ou Data/Creaturescripts/Scripts/Player e abre o arquivo login.lua embaixo de:

 

function onLogin(cid)

 

adicione esse bloco:

 

local storage_buff = 45144 -- STORAGE QUE ARMAZENA O TEMPO QUE O BUFF VAI DURAR
local effect_buff = 28

if getPlayerStorageValue(cid, storage_buff) > os.time() then
	buffEffect(cid, 3, effect_buff, storage_buff)
end

 

Reinicia a distro, e usa o item novamente e testa, ai testa uns minutos online, depois desloga e loga de novo. Qualquer problema você me avisa.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...