Ir para conteúdo

Featured Replies

Postado

.Olá pessoal boa noite.

 

Gostaria de pedir uma ajuda a vocês

 

Estou tentando criar uma função na lib (function checkbonus_exp) de verificar o bonus de experiencia de jogadores online. Porem não estou conseguindo...

Está gerando o seguinte erro na distro.

Spoiler

[Error - Action Interface]
data/actions/scripts/bonus_exp.lua:onUse
Description:
data/lib/bonus_exp.lua:15: attempt to index global 'rate' (a nil value)
stack traceback:
        data/lib/bonus_exp.lua:15: in function <data/lib/bonus_exp.lua:12>

 

 

Segue abaixo a lib do sistema.

Spoiler

config_weekend_exp = {
	dates = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}, -- Dias da semana que será ativo
	rates = {
			{10, 1.05}, -- {quantidade de jogador online, taxa de bonus}
			{200, 1.10},
			{300, 1.15},
		},
	storage_bonus = 30303,
}


function checkbonus_exp(cid, item, frompos, item2, topos)
		if item.uid == 31470 then
			local bonus_id = getGlobalStorageValue(config_weekend_exp.storage_bonus)
			local experience = bonus_id ~= 1 and "bonus ["..((rate[2] - 1)*100).."]%" or "normal"
			local msg = " ---------[Bonus Exp Online]--------\n\n\nAtualmente o servidor está com a experiencia "..experience.."."
			doShowTextDialog(cid,8977,msg)
		end
		return true
	end
		

function get_bonus_weekend_exp()
	for _, rate in ipairs(config_weekend_exp.rates) do
		if  #getPlayersOnline() >= rate[1] then
			if getGlobalStorageValue(config_weekend_exp.storage_bonus) ~= 1 then
				doBroadcastMessage("[Bonus Exp Online] O servidor alcançou ["..rate[1].."] jogadores online! O bônus de exp é agora "..((rate[2] - 1)*100).."% Aproveite!")
			end
			setGlobalStorageValue(config_weekend_exp.storage_bonus, 1) -- Bonus ativado
			return rate[2] -- Retornando a taxa de exp que deve ser adicionada
		else
			setGlobalStorageValue(config_weekend_exp.storage_bonus, -1)
		end
	end
	return 1
end

function set_bonus_weekend_exp(cid, monster_name)
	local rate_bonus = get_bonus_weekend_exp()
	local monster = getMonsterInfo(monster_name)
	if getGlobalStorageValue(config_weekend_exp.storage_bonus) == 1 then
		if getConfigValue("experienceStages") == true then
			doPlayerAddExp(cid, (monster.experience * getExperienceStage(getPlayerLevel(cid))) * rate_bonus)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Bonus Exp Online] Você está com ["..((rate_bonus - 1)*100).."]% de bônus experiencia devido a quantidade de alcançada ["..rate[1].."] jogadores online. Aproveite!")
		end
	end
	return true
end

 

Alguem poderia me ajudar?

 

Utilizo OTX 8.60 - 0.4

  • 2 weeks later...
  • Respostas 10
  • Visualizações 975
  • Created
  • Última resposta

Top Posters In This Topic

Postado
config_weekend_exp = {
    dates = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"},
    
    rates = {
            {10, 1.05},
            {200, 1.10},
            {300, 1.15},
        },
    storage_bonus = 30303,
}


function checkbonus_exp(cid, item, frompos, item2, topos)
        if item.uid == 31470 then
            local bonus_id = getGlobalStorageValue(config_weekend_exp.storage_bonus)
            local experience = bonus_id ~= 1 and "bonus ["..((rate[2] - 1)*100).."]%" or "normal"
            local msg = " sua mensagem "..experience.."."
            doShowTextDialog(cid,8977,msg)
        end
        return true
    end
        

function get_bonus_weekend_exp()
    for _, rate in ipairs(config_weekend_exp.rates) do
        if  #getPlayersOnline() >= rate[1] then
            if getGlobalStorageValue(config_weekend_exp.storage_bonus) ~= 1 then
                doBroadcastMessage("[Bonus Exp Online] O servidor alcançou ["..rate[1].."] jogadores online! O bônus de exp é agora "..((rate[2] - 1)*100).."% Aproveite!")
            end
            setGlobalStorageValue(config_weekend_exp.storage_bonus, 1)
            return rate[2]
        else
            setGlobalStorageValue(config_weekend_exp.storage_bonus, -1)
        end
    end
    return 1
end

function set_bonus_weekend_exp(cid, monster_name)
    local rate_bonus = get_bonus_weekend_exp()
    local monster = getMonsterInfo(monster_name)
    if getGlobalStorageValue(config_weekend_exp.storage_bonus) == 1 then
        if getConfigValue("experienceStages") == true then
            doPlayerAddExp(cid, (monster.experience * getExperienceStage(getPlayerLevel(cid))) * rate_bonus)
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Bonus Exp Online] Você está com ["..((rate_bonus - 1)*100).."]% de bônus experiencia devido a quantidade de alcançada ["..rate[1].."] jogadores online. Aproveite!")
        end
    end
    return true
end

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Postado
  • Autor
12 horas atrás, L3K0T disse:


config_weekend_exp = {
    dates = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"},
    
    rates = {
            {10, 1.05},
            {200, 1.10},
            {300, 1.15},
        },
    storage_bonus = 30303,
}


function checkbonus_exp(cid, item, frompos, item2, topos)
        if item.uid == 31470 then
            local bonus_id = getGlobalStorageValue(config_weekend_exp.storage_bonus)
            local experience = bonus_id ~= 1 and "bonus ["..((rate[2] - 1)*100).."]%" or "normal"
            local msg = " sua mensagem "..experience.."."
            doShowTextDialog(cid,8977,msg)
        end
        return true
    end
        

function get_bonus_weekend_exp()
    for _, rate in ipairs(config_weekend_exp.rates) do
        if  #getPlayersOnline() >= rate[1] then
            if getGlobalStorageValue(config_weekend_exp.storage_bonus) ~= 1 then
                doBroadcastMessage("[Bonus Exp Online] O servidor alcançou ["..rate[1].."] jogadores online! O bônus de exp é agora "..((rate[2] - 1)*100).."% Aproveite!")
            end
            setGlobalStorageValue(config_weekend_exp.storage_bonus, 1)
            return rate[2]
        else
            setGlobalStorageValue(config_weekend_exp.storage_bonus, -1)
        end
    end
    return 1
end

function set_bonus_weekend_exp(cid, monster_name)
    local rate_bonus = get_bonus_weekend_exp()
    local monster = getMonsterInfo(monster_name)
    if getGlobalStorageValue(config_weekend_exp.storage_bonus) == 1 then
        if getConfigValue("experienceStages") == true then
            doPlayerAddExp(cid, (monster.experience * getExperienceStage(getPlayerLevel(cid))) * rate_bonus)
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Bonus Exp Online] Você está com ["..((rate_bonus - 1)*100).."]% de bônus experiencia devido a quantidade de alcançada ["..rate[1].."] jogadores online. Aproveite!")
        end
    end
    return true
end

 

Não funcionou mesmo erro acima. 

 

Acho que você não entendeu, o problema está na nas linhas 13 e 14 da função feita por min (obs não sou scripter) e tentei fazer do meu jeito, porem não funcionou...

Me baseei em outro script parecido...

Já o restante do script está correto.

 

Então quando vou dar look para verificar a exp do momento ele gera o mesmo erro citado acima, por causa das linhas 13 e 14 que estão erradas...

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

Postado
-- LIB
config_weekend_exp = {
	dates = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}, -- Dias da semana que será ativo	
	rates = {
		[{50, 100}] = 1.03, -- de 50 a 100 jogadores a exp vai ser 1.03
		[{101, 299}] = 1.05, -- de 101 a 299 jogadores a exp vai ser 1.05	
		[{300, math.huge}] = 1.09 -- de 300 ou mais jogadores a exp vai ser 1.09	
	}, 	
	storage_bonus = 30303 	
}
function get_bonus_weekend_exp()
	local players = #getPlayersOnline()
	for v , r in pairs(config_weekend_exp.rates) do
		if players >= v[1] and players <= v[2] then
			return {r, v[1]}
		end
	end
	return {1.00, 0}
end


-- onRecord
function onRecord(current, old, cid)
	local new = get_bonus_weekend_exp()[1]
	local old = getGlobalStorageValue(config_weekend_exp.storage_bonus) <= 0 and 1.00 or getGlobalStorageValue(config_weekend_exp.storage_bonus)
	if old ~= new then
		if get_bonus_weekend_exp()[2] == 0 then
			doBroadcastMessage("[Bonus Exp Online] O bônus de exp foi desativado por falta de jogadores!")
			setGlobalStorageValue(config_weekend_exp.storage_bonus, 1.00)
		else
			doBroadcastMessage("[Bonus Exp Online] O servidor ".. (old < new and "regrediu para" or "alcançou") .." [".. current .."] jogadores online! O bônus de exp é agora "..((new - 1)*100).."% Aproveite!")
			setGlobalStorageValue(config_weekend_exp.storage_bonus, new)
		end
	end
	return true
end


-- onKill
function onKill(cid, target)
	if isPlayer(cid) and isMonster(target) then
		local rate_bonus = get_bonus_weekend_exp()[1]
		local players = get_bonus_weekend_exp()[2]	
		if players > 0 then -- ativo	
			local monster = getMonsterInfo(getCreatureName(target))
			if getConfigValue("experienceStages") == true then
				doPlayerAddExp(cid, (monster.experience * getExperienceStage(getPlayerLevel(cid))) * rate_bonus)
				doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Bonus Exp Online] Você está com ["..((rate_bonus - 1)*100).."]% de bônus experiencia devido a quantidade de alcançada [".. players .."]+ jogadores online. Aproveite!")
			end
		end
	end 
	return true
end

-- ACTION
function onUse(cid, item, fromPosition, itemEx, toPosition)
	if get_bonus_weekend_exp()[2] == 0 then
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"O servidor não está com nenhum bonus ativo") return true
	end
	local rate = get_bonus_weekend_exp()[1]
	return doShowTextDialog(cid,8977, "---------[Bonus Exp Online]--------\n\n\nAtualmente o servidor está com a experiencia bonus de ["..((rate - 1)*100).."]%.")
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

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.7k

Informação Importante

Confirmação de Termo