Ir para conteúdo
  • Cadastre-se

(Resolvido)[Dúvida/Erro] Sistema não aceita mais de duas comparações


Ir para solução Resolvido por DeCarvalho,

Posts Recomendados

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 por DkAngel83 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Já procurou tentar separar em 3 if's? 
Ficaria maior, mas pode ser que dê certo.
 

if pp > 0 then
              if pv > 0 then
                            if st > 2400 then

Link para o post
Compartilhar em outros sites
  • Solução

O problema foi resolvido.. o caso é que tem que ter todas as condições possíveis..

Estou usando parenteses para condições necessárias

 

if (st <2399 and st > 841) and pv == 0 then

 

foi meio chato pois havia sido feito tudod e uma vez.. depois fiz um por um e fui testando.. agora esta funcionando perfeitamente.. tanto para o sistema de !exp quando para o xp ganho.. 

:)

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo