Grande Oneshot, mais um script excelente (que a propósito fui eu que te pedi hihi).
Por acaso é possível fazer um resolutor de equações de segundo grau também?
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

Grande Oneshot, mais um script excelente (que a propósito fui eu que te pedi hihi).
Por acaso é possível fazer um resolutor de equações de segundo grau também?
Criei um novo resolutor de equações, agora ele detecta o grau da equação e ensina a resolver por passos.
Para resolver equações do segundo grau:
/calc 3x²-27
Lembrando que tudo é muito robótico, então, ele vai calcular até o fim, e se a raiz do discriminante for quebrada, ele dará raízes do tipo:
-5.23123451241290439214 +3.21312309129492149
Abraços.
Editado Dezembro 11 por Oneshot
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

Cara, você é épico.
Tô sem REPs por hoje, já dei os 3 que tinha, mas ficou incrível esse script. Congratulations.
Ficou bem interessante, acho que o dalvo tava fazendo algo assim tempos atras, mas acho que ele não terminou. Realmente bem feito, eu deveria ter pensado nisso e criado um aplicativo para o celular quando eu estava na escola...
Eu realmente odeio patterns, de todo o meu coração.
info
Grupo: Campones
Registrado: 17/10/11
Posts: 59
Reputação: +7
Char no Tibia: Shisui

Incrivel
'
Parabéns mano, eu não testei, mas olhando o script não vi nenhum bug.
Com certeza deve ser um script de grande porte.
Bugs conhecidos
- Você precisa colocar todos os coeficientes, mesmo que seja 1, do contrário o burro sistema não consegue resolver.
quem cria o sistema que tem que tirar a burrice dele não? ![]()
Editado Dezembro 11 por milbradt
info
Grupo: Marquês
Registrado: 05/07/09
Posts: 1.3k
Reputação: +732
Me pediram por mensagem pessoal, uma talkaction que resolvesse strings de equações de primeiro grau. Fiz um pog interessante e ela está funcionando bem legal.
1. Crie um arquivo de nome calc.lua em talkactions/scripts, cole o conteúdo abaixo:
local delay = 500 function onSay(cid, words, param, channel) local a = 0 local b = 0 local c = 0 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, param .." = 0") for s, x2 in string.gmatch(param, "([-+]*)%s*(%d+)x²") do param = string.gsub(param, "[-+]*%s*%d+x²", "") a = a + tonumber(s .. x2) end for s, x in string.gmatch(param, "([-+]*)%s*(%d+)x") do param = string.gsub(param, "[-+]*%s*%d+x", "") b = b + tonumber(s .. x) end for s, n in string.gmatch(param, "([-+]*)%s*(%d+)") do c = c + tonumber(s .. n) end if param == "" then return doPlayerSendCancel(cid, "O comando precisa de uma equação válida.") end addEvent(doPlayerSendTextMessage, delay, cid, MESSAGE_STATUS_CONSOLE_RED, "1. Detectar o grau da equação.") if a > 0 then local delta = (math.pow(b, 2) - (4 * a * c)) local x1, x2 if delta >= 0 then x1 = ((-b - math.sqrt(delta)) / 2 * a) x2 = ((-b + math.sqrt(delta)) / 2 * a) end addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa é uma equação de segundo grau.") addEvent(doPlayerSendTextMessage, 3 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Organizar a equação.") addEvent(doPlayerSendTextMessage, 4 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. a .."x²".. (b < 0 and (" - ".. (b * -1)) or (" + ".. b)) .."x".. (c < 0 and (" - ".. (c * -1)) or (" + ".. c)) .." = 0") addEvent(doPlayerSendTextMessage, 5 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Calcular o discriminante da equação.") addEvent(doPlayerSendTextMessage, 6 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "D = b² - 4ac = ".. delta .."") if delta < 0 then addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é menor que 0, a equação não possui raízes reais.") return true elseif delta == 0 then addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é igual a 0, a equação possui duas raízes iguais.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X¹ = X² = -b / 2 * a = ".. x1 .."") return true else addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "O discriminante é maior que 0, a equação possui duas raízes diferentes.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X = (-b - ²D) / 2 * a = ".. x1 .."") addEvent(doPlayerSendTextMessage, 9 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "X² = (-b + ²D) / 2 * a = ".. x2 .."") return true end addEvent(doPlayerSendTextMessage, 10 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "Fácil, né?") elseif b > 0 then local x = -c/b addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa é uma equação de primeiro grau.") addEvent(doPlayerSendTextMessage, 3 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "2. Organizar a equação.") addEvent(doPlayerSendTextMessage, 4 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. b .."x".. (c < 0 and (" - ".. (c * -1)) or (" + ".. c)) .." = 0") addEvent(doPlayerSendTextMessage, 5 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "3. Passe o que não está multiplicando x para o outro lado.") addEvent(doPlayerSendTextMessage, 6 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "".. b .."x = ".. -c .."") addEvent(doPlayerSendTextMessage, 7 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "4. Passe o que está multiplicando x para outro lado, dividindo.") addEvent(doPlayerSendTextMessage, 8 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "x = ".. x .."") addEvent(doPlayerSendTextMessage, 9 * delay, cid, MESSAGE_STATUS_CONSOLE_RED, "Facil, né?") else addEvent(doPlayerSendTextMessage, 2 * delay, cid, MESSAGE_STATUS_CONSOLE_BLUE, "Essa não é uma equação válida.") end return true end2. Adicione a seguinte linha no seu talkactions.xml
Bugs conhecidos
- Você precisa colocar todos os coeficientes, mesmo que seja 1, do contrário o burro sistema não consegue resolver.
- Se você embaralhar muito a equação, talvez ocorra algum erro, por exemplo:
Abraços.
Editado Dezembro 11 por Oneshot