Ir para conteúdo
  • 0
Entre para seguir isso  
lucasnunes

Scripting Erro move1.lua:onSay

Pergunta

lucasnunes    0
lucasnunes

Antes de fazer a sua pergunta, tenha certeza de ter lido o guia abaixo:

https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/

Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do Website / etc).

Ex: The Forgotten Server 8,54

Base: ot pokemon

 

 

Qual a sua pergunta?erros 

[Error - TalkAction Interface] 
[31/01/2019 17:24:28] In a timer event called from: 
[31/01/2019 17:24:28] datapack/talkactions/scripts/move1.lua:onSay
[31/01/2019 17:24:28] Description: 
[31/01/2019 17:24:29] datapack/lib/032-position.lua:158: bad argument #1 to 'getn' (table expected, got nil)
[31/01/2019 17:24:29] stack traceback:
[31/01/2019 17:24:29]     [C]: in function 'getn'
[31/01/2019 17:24:29]     datapack/lib/032-position.lua:158: in function 'getPosfromArea'
[31/01/2019 17:24:29]     datapack/lib/newStatusSyst.lua:697: in function <datapack/lib/newStatusSyst.lua:694>

 

 

 

Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo:

move1.lua:

Spoiler

 local msgs = {"use ", ""}

function doAlertReady(cid, id, movename, n, cd)
    if not isCreature(cid) then return true end
    local myball = getPlayerSlotItem(cid, 8)
    --[[if myball.itemid > 0 and getItemAttribute(myball.uid, cd) == "cd:"..id.."" then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(myball.uid).." - "..movename.." (m"..n..") is ready!")
    return true
    end--]]
    local p = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)
    if not p or #p <= 0 then return true end
    for a = 1, #p do
        if getItemAttribute(p[a], cd) == "cd:"..id.."" then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(p[a]).." - "..movename.." (m"..n..") is ready!")
        return true
        end
    end
end

function onSay(cid, words, param, channel)


    if param ~= "" then return true end
    if string.len(words) > 3 then return true end

    if #getCreatureSummons(cid) == 0 then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need a pokemon to use moves.")
    return 0
    end
                      
local mypoke = getCreatureSummons(cid)[1]

    if getCreatureCondition(cid, CONDITION_EXHAUST) then return true end
    if getCreatureName(mypoke) == "Evolution" then return true end

    if getCreatureName(mypoke) == "Ditto" or getCreatureName(mypoke) == "Shiny Ditto" then
       name = getPlayerStorageValue(mypoke, 1010)   
    else
       name = getCreatureName(mypoke)
    end  
    
    --local name = getCreatureName(mypoke) == "Ditto" and getPlayerStorageValue(mypoke, 1010) or getCreatureName(mypoke)

local it = string.sub(words, 2, 3)
local move = movestable[name].move1
if getPlayerStorageValue(mypoke, 212123) >= 1 then
   cdzin = "cm_move"..it..""
else
   cdzin = "move"..it..""       
end

    if it == "2" then
        move = movestable[name].move2
    elseif it == "3" then
        move = movestable[name].move3
    elseif it == "4" then
        move = movestable[name].move4
    elseif it == "5" then
        move = movestable[name].move5
    elseif it == "6" then
        move = movestable[name].move6
    elseif it == "7" then
        move = movestable[name].move7
    elseif it == "8" then
        move = movestable[name].move8
    elseif it == "9" then
        move = movestable[name].move9
    elseif it == "10" then
        move = movestable[name].move10
    elseif it == "11" then
        move = movestable[name].move11
    elseif it == "12" then
        move = movestable[name].move12
    elseif it == "13" then
        move = movestable[name].move13
    end

    if not move then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")
    return true
    end
    
    if getPlayerLevel(cid) < move.level then
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need be atleast level "..move.level.." to use this move.")
       return true
    end

    if getCD(getPlayerSlotItem(cid, 8).uid, cdzin) > 0 and getCD(getPlayerSlotItem(cid, 8).uid, cdzin) < (move.cd + 2) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to wait "..getCD(getPlayerSlotItem(cid, 8).uid, cdzin).." seconds to use "..move.name.." again.")
    return true
    end

    if getTileInfo(getThingPos(mypoke)).protection then
        doPlayerSendCancel(cid, "Your pokemon cannot use moves while in protection zone.")
    return true
    end
    
   if getPlayerStorageValue(mypoke, 3894) >= 1 then
      return doPlayerSendCancel(cid, "You can't attack because you is with fear") 
   end
                                                    
    if (move.name == "Team Slice" or move.name == "Team Claw") and #getCreatureSummons(cid) < 2 then       
        doPlayerSendCancel(cid, "Your pokemon need be in a team for use this move!")
    return true
    end
                                                                     
if isCreature(getCreatureTarget(cid)) and isInArray(specialabilities["evasion"], getCreatureName(getCreatureTarget(cid))) then 
   local target = getCreatureTarget(cid)                                                                                       
   if math.random(1, 100) <= passivesChances["Evasion"][getCreatureName(target)] then 
      if isCreature(getMasterTarget(target)) then                                                                 
         doSendMagicEffect(getThingPos(target), 211)
         doSendAnimatedText(getThingPos(target), "TOO BAD", 215)                                
         doTeleportThing(target, getClosestFreeTile(target, getThingPos(mypoke)), false)
         doSendMagicEffect(getThingPos(target), 211)
         doFaceCreature(target, getThingPos(mypoke))            
         return true
      end
   end
end


if move.target == 1 then

    if not isCreature(getCreatureTarget(cid)) then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don\'t have any targets.")
    return 0
    end

    if getCreatureCondition(getCreatureTarget(cid), CONDITION_INVISIBLE) then
    return 0
    end

    if getCreatureHealth(getCreatureTarget(cid)) <= 0 then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your have already defeated your target.")
    return 0
    end

    if not isCreature(getCreatureSummons(cid)[1]) then
    return true
    end

    if getDistanceBetween(getThingPos(getCreatureSummons(cid)[1]), getThingPos(getCreatureTarget(cid))) > move.dist then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Get closer to the target to use this move.")
    return 0
    end

    if not isSightClear(getThingPos(getCreatureSummons(cid)[1]), getThingPos(getCreatureTarget(cid)), false) then
    return 0
    end
end

    local newid = 0

        if isSleeping(mypoke) or isSilence(mypoke) then  --alterado v1.5
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't do that right now.")
            return 0
        else
            newid = setCD(getPlayerSlotItem(cid, 8).uid, cdzin, move.cd)
        end
        
    doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY)
    
    local summons = getCreatureSummons(cid)

    addEvent(doAlertReady, move.cd * 1000, cid, newid, move.name, it, cdzin)
    
    for i = 2, #summons do
       if isCreature(summons) and getPlayerStorageValue(cid, 637501) >= 1 then
          docastspell(summons, move.name)
       end
    end 

    docastspell(mypoke, move.name)
    doCreatureAddCondition(cid, playerexhaust)

    if useKpdoDlls then
        doUpdateCooldowns(cid)
    end

return 0
end

 

032-position.lua

newStatusSyst.lua

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:

Spoiler

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

2 respostass a esta questão

Recommended Posts

  • 0
TheRatazana    8
TheRatazana

E ai lucasnunes, de boa?

Bom, você poderia dar mais informações né, da pra deduzir o que acontece, mas saber quando ocorre e como ocorre é sempre bom. No caso o problema parece ser ao usar um move certo? Porem o erro apresentado não parece bater com o script postado. A razão pra isso é que o erro mostra que um valor nulo foi passado quando era esperado uma tabela, e esse valor nulo foi passado pela função doMoveInArea2 para a função getPosfromArea. Porém nesse script passado não existe nenhuma chamada para doMoveInArea2. E também mostra que ela foi chamada de um evento agendado, que seria quando se usar o addEvent, mas o único evento desse tipo ai chama a função doAlertReady, que também não tem nenhuma chamada para as funções do erro.

 

Bom, como é uma coisa chata que fica spamando erro no terminal, eu te recomendo a ignorar a tentativa de move no caso de uma area nula  ser passada. Veja:

function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)
   if not isCreature(cid) then return true end
   if not area then return end -- Sem area é inútil essa função. Apenas ignore
   
   local pos = getPosfromArea(cid, area)  --alterado v2.8
   setPlayerStorageValue(cid, 21101, -1) --alterado v2.6
   
   local skills = {"Skull Bash", "Gust", "Water Pulse", "Stick Throw", "Overheat", "Toxic", "Take Down", "Gyro Ball"} --alterado v2.7
   local n = 0 
   local l = 0

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
lucasnunes    0
lucasnunes
Em 03/02/2019 em 12:11, TheRatazana disse:

E ai lucasnunes, de boa?

Bom, você poderia dar mais informações né, da pra deduzir o que acontece, mas saber quando ocorre e como ocorre é sempre bom. No caso o problema parece ser ao usar um move certo? Porem o erro apresentado não parece bater com o script postado. A razão pra isso é que o erro mostra que um valor nulo foi passado quando era esperado uma tabela, e esse valor nulo foi passado pela função doMoveInArea2 para a função getPosfromArea. Porém nesse script passado não existe nenhuma chamada para doMoveInArea2. E também mostra que ela foi chamada de um evento agendado, que seria quando se usar o addEvent, mas o único evento desse tipo ai chama a função doAlertReady, que também não tem nenhuma chamada para as funções do erro.

 

Bom, como é uma coisa chata que fica spamando erro no terminal, eu te recomendo a ignorar a tentativa de move no caso de uma area nula  ser passada. Veja:


function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)
   if not isCreature(cid) then return true end
   if not area then return end -- Sem area é inútil essa função. Apenas ignore
   
   local pos = getPosfromArea(cid, area)  --alterado v2.8
   setPlayerStorageValue(cid, 21101, -1) --alterado v2.6
   
   local skills = {"Skull Bash", "Gust", "Water Pulse", "Stick Throw", "Overheat", "Toxic", "Take Down", "Gyro Ball"} --alterado v2.7
   local n = 0 
   local l = 0

 

 

Spoiler

local msgs = {"use ", ""} function doAlertReady(cid, id, movename, n, cd)     if not isCreature(cid) then return true end     local myball = getPlayerSlotItem(cid, 8)     --[[if myball.itemid > 0 and getItemAttribute(myball.uid, cd) == "cd:"..id.."" then         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(myball.uid).." - "..movename.." (m"..n..") is ready!")     return true     end--]]     local p = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)     if not p or #p <= 0 then return true end     for a = 1, #p do         if getItemAttribute(p[a], cd) == "cd:"..id.."" then             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPokeballName(p[a]).." - "..movename.." (m"..n..") is ready!")         return true         end     end end function onSay(cid, words, param, channel)     if param ~= "" then return true end     if string.len(words) > 3 then return true end     if #getCreatureSummons(cid) == 0 then

 

blz vo fazer aqui  valeu merece meu  +rep 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×