Postado Julho 27, 2015 9 anos 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 9 anos por DkAngel83 (veja o histórico de edições) [TFS 1.2 ] Evento Jogos Vorazes [TFS 1.2 ] Sistema de Diálogo em ModalWindow [TFS 1.1+] Sistema de Crafting Avançado em ModalWindow [TFS 1.1+] Sistema de Alquimia Avançada em ModalWindow [TFS 1.2 ] Sistema VIP completo com portas, items, pisos
Postado Julho 27, 2015 9 anos 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
Postado Julho 27, 2015 9 anos Tente if (condições) then, ou seja if (x > 0 and y < 2 and z==1) then ... STYLLER OT 2022
Postado Agosto 1, 2015 9 anos Autor 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.. [TFS 1.2 ] Evento Jogos Vorazes [TFS 1.2 ] Sistema de Diálogo em ModalWindow [TFS 1.1+] Sistema de Crafting Avançado em ModalWindow [TFS 1.1+] Sistema de Alquimia Avançada em ModalWindow [TFS 1.2 ] Sistema VIP completo com portas, items, pisos
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.