Ir para conteúdo
  • 0

Prêmio por login


wevertonvrb

Pergunta

@Poccnn me ajuda com este erro?
 

[10/02/2017 19:53:01] ADM has logged in.

[10/02/2017 19:53:01] [Error - CreatureScript Interface] 
[10/02/2017 19:53:01] data/creaturescripts/scripts/regalo.lua:onLogin
[10/02/2017 19:53:01] Description: 
[10/02/2017 19:53:01] data/creaturescripts/scripts/regalo.lua:39: attempt to compare string with number
[10/02/2017 19:53:01] stack traceback:
[10/02/2017 19:53:01]     data/creaturescripts/scripts/regalo.lua:39: in function <data/creaturescripts/scripts/regalo.lua:37>
[10/02/2017 19:53:01] ADM has logged out.

não deu pra logar, o no client, ja na distro mostra q ele logou e deslogou
eu diminui os dias, meses e vocação
deixando apenas pra vocação 1

vou repostar o script pq o meu esta com menos linhas

 

Spoiler

local chave = 1020 --storage usada para marcar o dia de login do player. 
local skill_nome = {[0]="First",[1]="Club",[2]="Sword",[3]="Axe",[4]="Distance",[5]="Shield",[6]="Fishing"} 
local regalo = { 
   -- Obs.: Os prêmios são dados por vocação. 
   -- Premiação diária.  
   _diario = { 
--[id] = {[dia]={[id] = quantidade}} 
  [1] =   {[1]={[2160]=5},
           [2]={[2160]=10},
           [3]={[2160]=15},
           [4]={[2160]=20},
           [5]={[2160]=30},
           [6]={[2160]=40},
           [7]={[2160]=50, [15301]=1}}, 
   },  
   -- Premiação semanal. 
   _semanal = { 
--[id] ={[semana]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=1, [15301]=10},
           [2]={[2161]=1, [2160]=50, [15301]=15},
           [3]={[2161]=1, [2160]=75, [15301]=20},
           [4]={[2161]=1, [2161]=1, [15301]=30}},
           
   }, 
   -- Premiação mensal. 
   _mensal = { 
--[id] = {[mes]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=8,  [15471]=8,  [15301]=100, [15301]=50, [14249]=1},
           [2]={[2161]=13, [15471]=18, [15301]=100, [15301]=60, [14249]=1},
           [3]={[2161]=18, [15471]=28, [15301]=100, [15301]=70, [14249]=1},
           [4]={[2161]=23, [15471]=38, [15301]=100, [15301]=80, [14249]=1},
           [5]={[2161]=28, [15471]=48, [15301]=100, [15301]=90, [14249]=1},
           [6]={[2161]=33, [15471]=58, [15301]=100, [15301]=100, [14249]=1, [15577]=1}},
   }, 

 
function onLogin(cid) 
local dia_atual, ultimo_dia = tonumber(os.date("%d")),tonumber(os.date("%d",getPlayerLastLogin(cid))) 
local dia_store, voc = getPlayerStorageValue(cid,chave) < 1 and 1 or getPlayerStorageValue(cid,chave), getPlayerVocation(cid) 
local receive_str = "**Premio por Login**" 
 
   if(ultimo_dia < dia_atual) or (ultimo_dia ~= dia_atual and dia_atual == 1)then 
      if(dia_atual-ultimo_dia == 1 or dia_atual == 1)then 
         for periodo, str in pairs(regalo) do 
            if(periodo == "_semanal") and not((dia_store/7)%2 == 0 or (dia_store/7)%2 == 1) then 
            elseif(periodo == "_mensal") and not((dia_store/30)%2 == 0 or (dia_store/30)%2 == 1) then 
            else 
               receive_str = receive_str.."\n\n>Premio d"..((periodo == "_diario") and "o dia "..dia_store or (periodo == "_semanal") and "a semana" or "o mes")..": " 
               for k, v in pairs(str[voc] and str[voc][(periodo == "_diario" and dia_store or periodo == "_semanal" and dia_store/7 or dia_store/30)]) do 
                  if(SKILL_IDS[k])then 
                     doPlayerAddSkillTry(cid, SKILL_IDS[k], v) 
                     receive_str  = receive_str.."\n>>"..v.." pontos de "..skill_nome[SKILL_IDS[k]].." | " 
                  elseif(k == "exp")then 
                     receive_str  = receive_str.."\n>>"..v.." pontos de experiencia | " 
                     doPlayerAddExperience(cid,v) 
                  elseif(tonumber(k) and k > 1000)then 
                     receive_str = receive_str.."\n>>"..v.." "..getItemNameById(k).." | " 
                     doPlayerAddItem(cid, k, v, false) 
                  end 
               end 
            end 
         end 
         setPlayerStorageValue(cid,chave,dia_store+1) 
      else 
         setPlayerStorageValue(cid,chave,2) 
         for item, quant in pairs(regalo._diario[voc][1]) do -- Apenas premio diário. 
            doPlayerAddItem(cid, item, quant, false) 
         end 
      end 
      doShowTextDialog(cid, 2523, receive_str) 
   end 
   return true 
end 


 

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

@wevertonvrb

Trouxe sua questão para a seção correta. Agora poderei te ajudar.

 

A linha 39 é essa.

Citar

local dia_store, voc = getPlayerStorageValue(cid,chave) < 1 and 1 or getPlayerStorageValue(cid,chave), getPlayerVocation(cid)

 

O erro possivelmente, como está descrito no log, está dando por uma comparação entre números e string; ou seja, a função getPlayerStorageValue está retornando uma string ao invés de um número. 

 

Substitue sua linha de código por essa:

Citar

local dia_store, voc = tonumber(getPlayerStorageValue(cid,chave)) < 1 and 1 or tonumber(getPlayerStorageValue(cid,chave)), getPlayerVocation(cid)

 

Possivelmente vai continuar dando erro, mas teste pra saber.

Link para o comentário
Compartilhar em outros sites

  • 0
11 horas atrás, Poccnn disse:

@wevertonvrb

Trouxe sua questão para a seção correta. Agora poderei te ajudar.

 

A linha 39 é essa.

 

O erro possivelmente, como está descrito no log, está dando por uma comparação entre números e string; ou seja, a função getPlayerStorageValue está retornando uma string ao invés de um número. 

 

Substitue sua linha de código por essa:

 

Possivelmente vai continuar dando erro, mas teste pra saber.

ok obrigado

 

OBS : A LINHA É A MESMA POREM EU ADICIONEI MAIS DIAS SEMANAS E MESES POR ISSO AGORA ESTA  56
continua o erro

Kakaroto has logged in.

[12/02/2017 18:55:13] [Error - CreatureScript Interface] 
[12/02/2017 18:55:13] data/creaturescripts/scripts/regalo.lua:onLogin
[12/02/2017 18:55:13] Description: 
[12/02/2017 18:55:13] data/creaturescripts/scripts/regalo.lua:56: attempt to compare nil with number
[12/02/2017 18:55:13] stack traceback:
[12/02/2017 18:55:13]     data/creaturescripts/scripts/regalo.lua:56: in function <data/creaturescripts/scripts/regalo.lua:54>
[12/02/2017 18:55:13] Kakaroto has logged out.

 

outra coisa como eu quero que todos os players ganhe os mesmos itens independente da vocação talvez possa remover isso
voc = tonumber  talvez assim o erro deixe de existir n sei só pensei

Editado por wevertonvrb
Link para o comentário
Compartilhar em outros sites

  • 0
32 minutos atrás, KarlKalvin disse:

local dia_store, voc = getPlayerStorageValue(cid,chave) <= 1 , getPlayerVocation(cid)

nn testei aqui e n deu erro mas tb n recebi item nenhum 

continua tendo uma linha correspondente a vocation 

esse voc e tb getPlayerVocation(cid)

Link para o comentário
Compartilhar em outros sites

  • 0

O problemaé o seguinte: sua função de getPlayerStorageValue está retornando uma string, por isso gerava aquele erro primeiro, depois de por o tonumber, ele não consegue converter essa string em um número é portanto retornando nil, como demonstrado nesse segundo erro.

O problema é na sua função de getPlayerStorageValue que era pra ela retornar um número é não outro coisa.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Poccnn disse:

O problemaé o seguinte: sua função de getPlayerStorageValue está retornando uma string, por isso gerava aquele erro primeiro, depois de por o tonumber, ele não consegue converter essa string em um número é portanto retornando nil, como demonstrado nesse segundo erro.

O problema é na sua função de getPlayerStorageValue que era pra ela retornar um número é não outro coisa.

pq sera isso? tenho vários scripts com a função  getPlayerStorageValue e todos funcionando corretamente, sera q da pra resolver isso? sera q se deixar o script mais simples tirando aquilo de vocation e tonumber ele funciona?  

Link para o comentário
Compartilhar em outros sites

  • 0
43 minutos atrás, Frenvius disse:

o que tem nessa storage? já tentou fazer o test checando no banco de dados?

dependendo da versão, o servidor não suporta storage com string, somente numero

talvez  mas n sei dizer minha versão é 3.6 n sei dizer mais a respeito

Link para o comentário
Compartilhar em outros sites

  • 0

 

 



local chave = 1020 --storage usada para marcar o dia de login do player. 
local skill_nome = {[0]="First",[1]="Club",[2]="Sword",[3]="Axe",[4]="Distance",[5]="Shield",[6]="Fishing"} 
local regalo = { 
   -- Obs.: Os prêmios são dados por vocação. 
   -- Premiação diária.  
   _diario = { 
--[id] = {[dia]={[id] = quantidade}} 
  [1] =   {[1]={[2160]=5},
           [2]={[2160]=10},
           [3]={[2160]=15},
           [4]={[2160]=20},
           [5]={[2160]=30},
           [6]={[2160]=40},
           [7]={[2160]=50, [15301]=1}}, 
   },  
   -- Premiação semanal. 
   _semanal = { 
--[id] ={[semana]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=1, [15301]=10},
           [2]={[2161]=1, [2160]=50, [15301]=15},
           [3]={[2161]=1, [2160]=75, [15301]=20},
           [4]={[2161]=1, [2161]=1, [15301]=30}},
           
   }, 
   -- Premiação mensal. 
   _mensal = { 
--[id] = {[mes]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=8,  [15471]=8,  [15301]=100, [15301]=50, [14249]=1},
           [2]={[2161]=13, [15471]=18, [15301]=100, [15301]=60, [14249]=1},
           [3]={[2161]=18, [15471]=28, [15301]=100, [15301]=70, [14249]=1},
           [4]={[2161]=23, [15471]=38, [15301]=100, [15301]=80, [14249]=1},
           [5]={[2161]=28, [15471]=48, [15301]=100, [15301]=90, [14249]=1},
           [6]={[2161]=33, [15471]=58, [15301]=100, [15301]=100, [14249]=1, [15577]=1}},
   }, 

 
function onLogin(cid) 
local dia_atual, ultimo_dia = tonumber(os.date("%d")),tonumber(os.date("%d",getPlayerLastLogin(cid))) 
local dia_store, voc = getPlayerStorageValue(cid,chave) <= 1, getPlayerVocation(cid, 1) 
local receive_str = "**Premio por Login**" 
 
   if(ultimo_dia < dia_atual) or (ultimo_dia ~= dia_atual and dia_atual == 1)then 
      if(dia_atual-ultimo_dia == 1 or dia_atual == 1)then 
         for periodo, str in pairs(regalo) do 
            if(periodo == "_semanal") and not((dia_store/7)%2 == 0 or (dia_store/7)%2 == 1) then 
            elseif(periodo == "_mensal") and not((dia_store/30)%2 == 0 or (dia_store/30)%2 == 1) then 
            else 
               receive_str = receive_str.."\n\n>Premio d"..((periodo == "_diario") and "o dia "..dia_store or (periodo == "_semanal") and "a semana" or "o mes")..": " 
               for k, v in pairs(str[voc] and str[voc][(periodo == "_diario" and dia_store or periodo == "_semanal" and dia_store/7 or dia_store/30)]) do 
                  if(SKILL_IDS[k])then 
                     doPlayerAddSkillTry(cid, SKILL_IDS[k], v) 
                     receive_str  = receive_str.."\n>>"..v.." pontos de "..skill_nome[sKILL_IDS[k]].." | " 
                  elseif(k == "exp")then 
                     receive_str  = receive_str.."\n>>"..v.." pontos de experiencia | " 
                     doPlayerAddExperience(cid,v) 
                  elseif(tonumber(k) and k > 1000)then 
                     receive_str = receive_str.."\n>>"..v.." "..getItemNameById(k).." | " 
                     doPlayerAddItem(cid, k, v, false) 
                  end 
               end 
            end 
         end 
         setPlayerStorageValue(cid,chave,dia_store+1) 
      else 
         setPlayerStorageValue(cid,chave,2) 
         for item, quant in pairs(regalo._diario[voc][1]) do -- Apenas premio diário. 
            doPlayerAddItem(cid, item, quant, false) 
         end 
      end 
      doShowTextDialog(cid, 2523, receive_str) 
   end 
   return true 
end 

 

 

 

Editado por KarlKalvin
Link para o comentário
Compartilhar em outros sites

  • 0

testa isso aqui e manda o q printou :

 

Spoiler

local chave = 1020 --storage usada para marcar o dia de login do player. 
local skill_nome = {[0]="First",[1]="Club",[2]="Sword",[3]="Axe",[4]="Distance",[5]="Shield",[6]="Fishing"} 
local regalo = { 
   -- Obs.: Os prêmios são dados por vocação. 
   -- Premiação diária.  
   _diario = { 
--[id] = {[dia]={[id] = quantidade}} 
  [1] =   {[1]={[2160]=5},
           [2]={[2160]=10},
           [3]={[2160]=15},
           [4]={[2160]=20},
           [5]={[2160]=30},
           [6]={[2160]=40},
           [7]={[2160]=50, [15301]=1}}, 
   },  
   -- Premiação semanal. 
   _semanal = { 
--[id] ={[semana]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=1, [15301]=10},
           [2]={[2161]=1, [2160]=50, [15301]=15},
           [3]={[2161]=1, [2160]=75, [15301]=20},
           [4]={[2161]=1, [2161]=1, [15301]=30}},
           
   }, 
   -- Premiação mensal. 
   _mensal = { 
--[id] = {[mes]={[id] = quantidade}} 
  [1] =   {[1]={[2161]=8,  [15471]=8,  [15301]=100, [15301]=50, [14249]=1},
           [2]={[2161]=13, [15471]=18, [15301]=100, [15301]=60, [14249]=1},
           [3]={[2161]=18, [15471]=28, [15301]=100, [15301]=70, [14249]=1},
           [4]={[2161]=23, [15471]=38, [15301]=100, [15301]=80, [14249]=1},
           [5]={[2161]=28, [15471]=48, [15301]=100, [15301]=90, [14249]=1},
           [6]={[2161]=33, [15471]=58, [15301]=100, [15301]=100, [14249]=1, [15577]=1}},
   }, 

 
function onLogin(cid) 
local dia_atual, ultimo_dia = tonumber(os.date("%d")),tonumber(os.date("%d",getPlayerLastLogin(cid))) 
print("storage = "..getPlayerStorageValue(cid, chave))
print(type("tipo = "..getPlayerStorageValue(cid, chave)))
local dia_store, voc = getPlayerStorageValue(cid, chave) < 1 and 1 or getPlayerStorageValue(cid,chave), getPlayerVocation(cid)
local receive_str = "**Premio por Login**" 
 
   if(ultimo_dia < dia_atual) or (ultimo_dia ~= dia_atual and dia_atual == 1)then 
      if(dia_atual-ultimo_dia == 1 or dia_atual == 1)then 
         for periodo, str in pairs(regalo) do 
            if(periodo == "_semanal") and not((dia_store/7)%2 == 0 or (dia_store/7)%2 == 1) then 
            elseif(periodo == "_mensal") and not((dia_store/30)%2 == 0 or (dia_store/30)%2 == 1) then 
            else 
               receive_str = receive_str.."\n\n>Premio d"..((periodo == "_diario") and "o dia "..dia_store or (periodo == "_semanal") and "a semana" or "o mes")..": " 
               for k, v in pairs(str[voc] and str[voc][(periodo == "_diario" and dia_store or periodo == "_semanal" and dia_store/7 or dia_store/30)]) do 
                  if(SKILL_IDS[k])then 
                     doPlayerAddSkillTry(cid, SKILL_IDS[k], v) 
                     receive_str  = receive_str.."\n>>"..v.." pontos de "..skill_nome[sKILL_IDS[k]].." | " 
                  elseif(k == "exp")then 
                     receive_str  = receive_str.."\n>>"..v.." pontos de experiencia | " 
                     doPlayerAddExperience(cid,v) 
                  elseif(tonumber(k) and k > 1000)then 
                     receive_str = receive_str.."\n>>"..v.." "..getItemNameById(k).." | " 
                     doPlayerAddItem(cid, k, v, false) 
                  end 
               end 
            end 
         end 
         setPlayerStorageValue(cid,chave,dia_store+1) 
      else 
         setPlayerStorageValue(cid,chave,2) 
         for item, quant in pairs(regalo._diario[voc][1]) do -- Apenas premio diário. 
            doPlayerAddItem(cid, item, quant, false) 
         end 
      end 
      doShowTextDialog(cid, 2523, receive_str) 
   end 
   return true 
end

 

Editado por Ed'Specter
Link para o comentário
Compartilhar em outros sites

  • 1
5 horas atrás, Ed'Specter disse:

testa isso aqui e manda o q printou :

 

 

  Ocultar conteúdo

local chave = 1020 --storage usada para marcar o dia de login do player. 

local skill_nome = {[0]="First",[1]="Club",[2]="Sword",[3]="Axe",[4]="Distance",[5]="Shield",[6]="Fishing"} 

local regalo = { 

   -- Obs.: Os prêmios são dados por vocação. 

   -- Premiação diária.  

   _diario = { 

--[id] = {[dia]={[id] = quantidade}} 

  [1] =   {[1]={[2160]=5},

           [2]={[2160]=10},

           [3]={[2160]=15},

           [4]={[2160]=20},

           [5]={[2160]=30},

           [6]={[2160]=40},

           [7]={[2160]=50, [15301]=1}}, 

   },  

   -- Premiação semanal. 

   _semanal = { 

--[id] ={[semana]={[id] = quantidade}} 

  [1] =   {[1]={[2161]=1, [15301]=10},

           [2]={[2161]=1, [2160]=50, [15301]=15},

           [3]={[2161]=1, [2160]=75, [15301]=20},

           [4]={[2161]=1, [2161]=1, [15301]=30}},

           

   }, 

   -- Premiação mensal. 

   _mensal = { 

--[id] = {[mes]={[id] = quantidade}} 

  [1] =   {[1]={[2161]=8,  [15471]=8,  [15301]=100, [15301]=50, [14249]=1},

           [2]={[2161]=13, [15471]=18, [15301]=100, [15301]=60, [14249]=1},

           [3]={[2161]=18, [15471]=28, [15301]=100, [15301]=70, [14249]=1},

           [4]={[2161]=23, [15471]=38, [15301]=100, [15301]=80, [14249]=1},

           [5]={[2161]=28, [15471]=48, [15301]=100, [15301]=90, [14249]=1},

           [6]={[2161]=33, [15471]=58, [15301]=100, [15301]=100, [14249]=1, [15577]=1}},

   }, 

 

function onLogin(cid) 

local dia_atual, ultimo_dia = tonumber(os.date("%d")),tonumber(os.date("%d",getPlayerLastLogin(cid))) 

print("storage = "..getPlayerStorageValue(cid, chave))

print(type("tipo = "..getPlayerStorageValue(cid, chave)))

local dia_store, voc = getPlayerStorageValue(cid, chave) < 1 and 1 or getPlayerStorageValue(cid,chave), getPlayerVocation(cid)

local receive_str = "**Premio por Login**" 

 

   if(ultimo_dia < dia_atual) or (ultimo_dia ~= dia_atual and dia_atual == 1)then 

      if(dia_atual-ultimo_dia == 1 or dia_atual == 1)then 

         for periodo, str in pairs(regalo) do 

            if(periodo == "_semanal") and not((dia_store/7)%2 == 0 or (dia_store/7)%2 == 1) then 

            elseif(periodo == "_mensal") and not((dia_store/30)%2 == 0 or (dia_store/30)%2 == 1) then 

            else 

               receive_str = receive_str.."\n\n>Premio d"..((periodo == "_diario") and "o dia "..dia_store or (periodo == "_semanal") and "a semana" or "o mes")..": " 

               for k, v in pairs(str[voc] and str[voc][(periodo == "_diario" and dia_store or periodo == "_semanal" and dia_store/7 or dia_store/30)]) do 

                  if(SKILL_IDS[k])then 

                     doPlayerAddSkillTry(cid, SKILL_IDS[k], v) 

                     receive_str  = receive_str.."\n>>"..v.." pontos de "..skill_nome[sKILL_IDS[k]].." | " 

                  elseif(k == "exp")then 

                     receive_str  = receive_str.."\n>>"..v.." pontos de experiencia | " 

                     doPlayerAddExperience(cid,v) 

                  elseif(tonumber(k) and k > 1000)then 

                     receive_str = receive_str.."\n>>"..v.." "..getItemNameById(k).." | " 

                     doPlayerAddItem(cid, k, v, false) 

                  end 

               end 

            end 

         end 

         setPlayerStorageValue(cid,chave,dia_store+1) 

      else 

         setPlayerStorageValue(cid,chave,2) 

         for item, quant in pairs(regalo._diario[voc][1]) do -- Apenas premio diário. 

            doPlayerAddItem(cid, item, quant, false) 

         end 

      end 

      doShowTextDialog(cid, 2523, receive_str) 

   end 

   return true 

end

 

resolvido, o erro consistia da storage 1020 ja esta sendo ultilizada por outro script burrice minha mas obrigado rep +

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...