Postado Outubro 29, 2021 3 anos .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
Postado Novembro 10, 2021 3 anos 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 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 Novembro 11, 2021 3 anos 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 Novembro 11, 2021 3 anos por DigoleraZica (veja o histórico de edições)
Postado Novembro 11, 2021 3 anos -- 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 [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#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.