DeCarvalho 65 Postado Julho 26, 2015 Share Postado Julho 26, 2015 (editado) Bem, estou usando um sistema que informa a taxa de xp do jogador.. quando coloco somente 2 comparações ele mostra certo, mas é necessário que se façam mais de 2 as vezes 4 function onSay(player, words, param) local p = player local s = function(p, lv) local k = Game.getExperienceStage(lv) local st = p:getStamina() local pv = p:getVipDays() local pp = p:getPremiumDays() if pp > 0 and pv > 0 and st > 2400 then return k*(1.5+1.2) .. " (vip exp and stamina bonus) " elseif pv > 0 and st < 840 then return k*(0.5+0.2) .. " (penalty for stamina too low) " elseif pp > 0 and pv == 0 and st > 2400 then return k*1.5 .. " (stamina bonus) " elseif pv == 0 and st < 840 then return k*0.5 .. " (stamina penalty) " elseif pp > 0 and pv == 0 and st > 841 and st < 2399 then return k .. " (normal) " elseif pp > 0 and pv > 0 and st > 841 and st < 2399 then return k*1.2 .. " (vip bonus) " elseif pp == 0 and pv > 0 and st > 841 and st < 2399 then return k*1.2 .. " (vip bonus) " elseif st < 1 then return 0 .. " (out of stamina) " end end if words == "!exp" then local lv = p:getLevel() p:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You need " .. ((50 * lv^3) - (150 * lv^2) + (400 * lv)) / 3 - p:getExperience() .. " experience more, for " .. lv+1 .. " level.") p:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Current rate: x" .. s(p, lv)) return false end p:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have to spend " .. math.ceil((p:getVocation():getRequiredManaSpent(p:getBaseMagicLevel() + 1) - p:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC)) .. " mana more, for next magic level.") return false end Quando eu uso o comando !exp e a linha tem somente duas comparações e são corretas ele informa mas quando são 3 comparações ou mais ele da erro.. no erro que o console apresenta a seguir provem de um char é vip, que não é premium e esta com stamina acima de 40 horas usando o comando !exp Lua Script Error: [TalkAction Interface] data/talkactions/scripts/expmana.lua:onSay data/talkactions/scripts/expmana.lua:32: attempt to concatenate a nil value stack traceback: [C]: in function '__concat' data/talkactions/scripts/expmana.lua:32: in function <data/talkactions/scripts/expmana.lua:1> Se nesta aqui if pp > 0 and pv > 0 and st > 2400 then return k*(1.5+1.2) .. " (vip exp and stamina bonus) " eu remover o pp > 0 and e deixar somente if pv > 0 and st > 2400 then return k*(1.5+1.2) .. " (vip exp and stamina bonus) " o console não apresenta erro e no cliente eu recebo a informação 22:39 Current rate: x18.9 (vip exp and stamina bonus) E tenho o mesmo problema com o player.lua quando a comparação é somente de 2 ele da o xp, quando adiciono a terceira comparação ele fica na ultima condição aceitável.. exemplo se stamina for maior q 40 e premium da xp, mas na condição se for premium, for vip e stamina acima de 40 ele não da E se eu colocar só se for vip e stamina acima de 40hrs ele da a xp -- Stamina modifier if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then useStamina(self) local staminaMinutes = self:getStamina() if staminaMinutes > 2400 and self:isPremium() then exp = exp * 1.5 elseif staminaMinutes <= 840 then exp = exp * 0.5 elseif staminaMinutes > 2400 and self:isPremium() and self:isVip() then exp = exp * (1.5 + 1.2) elseif staminaMinutes <= 840 and self:isVip() then exp = exp * (0.5 + 0.2) elseif staminaMinutes < 2399 and staminaMinutes > 841 and self:isVip() then exp = exp * 1.2 end end Alguém poderia me informar se isso é um erro no script ou o sistema não faz mais de 2 comparações? Grato [edit]Como não havia conseguido ajuda aqui, acabei criando topico em outro local e com as informações das respostas o problema foi sanado.. foi questão de falta de atenção.. com as alterações necessárias o sistema esta funcionando corretamente.. Pode marcar como resolvido. Editado Julho 27, 2015 por DkAngel Link para o comentário Compartilhar em outros sites More sharing options...
Bruno 535 Postado Agosto 13, 2015 Share Postado Agosto 13, 2015 O tópico foi fechado e movido para lixeira por estar inativo a mais de 10 dias. Caso seja preciso reabrir o mesmo, favor entrar em contato com a equipe. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados