Postado Novembro 11, 2021 3 anos Em 29/10/2021 em 20:58, DigoleraZica disse: .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. Ocultar conteúdo [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. Ocultar conteúdo 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 o script e so isso, ou tem mais ? se tiver pode passar pfv ?
Postado Novembro 11, 2021 3 anos Autor 7 horas atrás, Vodkart disse: -- 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 Não funcionou, continua com a mesma exp mesmo com o bônus ativado, registrei no login.lua tudo certinho... Não gera erros, quando dou look mostra que o server está com o bônus de 3% porem a exp continua a mesma... Mato o monstro notifica que está com o bônus. Reparei que o onRecord não manda msg no broadcast quando atinge a quantidade jogadores online para ativar o bônus. Foi registrado em globalevents com a type record tudo certinho...
Postado Novembro 11, 2021 3 anos 28 minutos atrás, DigoleraZica disse: Não funcionou, continua com a mesma exp mesmo com o bônus ativado, registrei no login.lua tudo certinho... Não gera erros, quando dou look mostra que o server está com o bônus de 3% porem a exp continua a mesma... Mato o monstro notifica que está com o bônus. Reparei que o onRecord não manda msg no broadcast quando atinge a quantidade jogadores online para ativar o bônus. Foi registrado em globalevents com a type record tudo certinho... usa então onThink com interval de uns 20 a 30 segundos! -- 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 function onServerExpMsg() local current = #getPlayersOnline() 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 end -- onThink function onThink(cid, interval, lastExecution) onServerExpMsg() 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
Postado Novembro 11, 2021 3 anos Autor 18 minutos atrás, Vodkart disse: usa então onThink com interval de uns 20 a 30 segundos! -- 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 function onServerExpMsg() local current = #getPlayersOnline() 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 end -- onThink function onThink(cid, interval, lastExecution) onServerExpMsg() 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 Agora mostrou a msg avisando no broadcast, porem a exp continua a mesma mesmo ativando o bônus.
Postado Novembro 12, 2021 3 anos 2 horas atrás, DigoleraZica disse: Agora mostrou a msg avisando no broadcast, porem a exp continua a mesma mesmo ativando o bônus. mudei a sua formula no onKill, testa assim: -- LIB config_weekend_exp = { dates = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}, -- Dias da semana que será ativo rates = { [{50, 100}] = 0.10, -- de 50 a 100 jogadores a exp vai ser 10% [{101, 299}] = 0.30, -- de 101 a 299 jogadores a exp vai ser 30% [{300, math.huge}] = 0.40 -- de 300 ou mais jogadores a exp vai ser 40% }, storage_bonus = 30305 } 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 {0.00, 0} end function onServerExpMsg() local current = #getPlayersOnline() local new = get_bonus_weekend_exp()[1] local old = getGlobalStorageValue(config_weekend_exp.storage_bonus) <= 0 and 0.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, 0.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*100).."% Aproveite!") setGlobalStorageValue(config_weekend_exp.storage_bonus, new) end end end -- onThink function onThink(cid, interval, lastExecution) onServerExpMsg() return true end -- onKill function onKill(cid, target) if isPlayer(cid) and isMonster(target) then local percent = get_bonus_weekend_exp()[1] local players = get_bonus_weekend_exp()[2] if players > 0 then -- ativo local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier) local count = math.floor(((getMonsterInfo(string.lower(getCreatureName(target))).experience*exp)*percent)) doPlayerAddExperience(cid, count) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Bonus Exp Online] Você está com ["..(percent*100).."]% de bônus experiencia devido a quantidade de alcançada [".. players .."]+ jogadores online. Aproveite!") 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 *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.