Jump to content
Close
Mikhael

Normal Erro em TALKACTIONS!

Recommended Posts

Olá ao executar a talkactions /tour  aparece o seguinte erro:

 

errotalk.png

 

Segue os seguintes scripts acima mencionado:

 

011-string.lua Na linha 43: tmp = str:sub(pos):trim()

 

string.explode = function (str, sep, limit)
	if(type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then
		return {}
	end

	local i, pos, tmp, t = 0, 1, "", {}
	for s, e in function() return string.find(str, sep, pos) end do
		tmp = str:sub(pos, s - 1):trim()
		table.insert(t, tmp)
		pos = e + 1

		i = i + 1
		if(limit ~= nil and i == limit) then
			break
		end
	end

	tmp = str:sub(pos):trim()
	table.insert(t, tmp)
	return t
end

 

Tour.lua Na linha 46: local playerstring = string.explode(getGlobalStorageValue(listsubscribe), ",") 

 

local playerduel = 223023 -- playerstorage
local subscribe = 223024 -- playerstorage 
local enabledtour = 223025 -- globalstorage
local listsubscribe = 223026 -- globalstorage
local countsubscribe = 223027 -- globalstorage
local start = 223028 -- globalstorage
local goldsub = 223029 -- globalstorage
local silversub = 223030 -- globalstorage
local bronzesub = 223031 -- globalstorage
local gold = 1
local silver = 2
local bronze = 3
function onSay(cid, words, param, frompos)

        --local players = getPlayersOnline()
      
		if getGlobalStorageValue(enabledtour) <= 0 then
return doPlayerSendTextMessage(cid,22,"Não está tendo evento.")
end

local modalidade = getGlobalStorageValue(enabledtour)
local frasemod = "Bronze"
if modalidade == gold then
frasemod = "Gold"
elseif modalidade == silver then
frasemod = "Silver"
end

		local playerstring = string.explode(getGlobalStorageValue(listsubscribe), ",") 
		local subscribes = getGlobalStorageValue(countsubscribe)
		  local xxs = "Numero de Inscritos "..subscribes.." \nCategoria : "..frasemod.."\n"
		 xxs = xxs .."C = Classificado\nB = Batalhando\nA = Aguardando\n\n"


 for _, pid in ipairs(playerstring) do
 local player = getPlayerByName(pid)
 if isPlayer(player) then
if getPlayerStorageValue(player,subscribe) >= 1 and getPlayerStorageValue(player,playerduel) >= 1 then
xxs = xxs .."[".. getCreatureName(player) .. "][C] [B] [on] lv = "..getPlayerLevel(player).."\n"
end
if getPlayerStorageValue(player,subscribe) >= 1 and getPlayerStorageValue(player,playerduel) <= 0 then
xxs = xxs .."[".. getCreatureName(player) .. "][C][A] [on] lv = "..getPlayerLevel(player).."\n"
end
else
xxs = xxs .."[".. pid .. "][OFFLINE] \n"
end

end
doShowTextDialog(cid, 2501,  xxs)
return true

end

 

 

REP+ sem duvidar! agradeço desde já.


Share this post


Link to post
Share on other sites
15 minutos atrás, Mikhael disse:

Olá ao executar a talkactions /tour  aparece o seguinte erro:

 

errotalk.png

 

Segue os seguintes scripts acima mencionado:

 

011-string.lua Na linha 43: tmp = str:sub(pos):trim()

 


string.explode = function (str, sep, limit)
	if(type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then
		return {}
	end

	local i, pos, tmp, t = 0, 1, "", {}
	for s, e in function() return string.find(str, sep, pos) end do
		tmp = str:sub(pos, s - 1):trim()
		table.insert(t, tmp)
		pos = e + 1

		i = i + 1
		if(limit ~= nil and i == limit) then
			break
		end
	end

	tmp = str:sub(pos):trim()
	table.insert(t, tmp)
	return t
end

 

Tour.lua Na linha 46: local playerstring = string.explode(getGlobalStorageValue(listsubscribe), ",") 

 


local playerduel = 223023 -- playerstorage
local subscribe = 223024 -- playerstorage 
local enabledtour = 223025 -- globalstorage
local listsubscribe = 223026 -- globalstorage
local countsubscribe = 223027 -- globalstorage
local start = 223028 -- globalstorage
local goldsub = 223029 -- globalstorage
local silversub = 223030 -- globalstorage
local bronzesub = 223031 -- globalstorage
local gold = 1
local silver = 2
local bronze = 3
function onSay(cid, words, param, frompos)

        --local players = getPlayersOnline()
      
		if getGlobalStorageValue(enabledtour) <= 0 then
return doPlayerSendTextMessage(cid,22,"Não está tendo evento.")
end

local modalidade = getGlobalStorageValue(enabledtour)
local frasemod = "Bronze"
if modalidade == gold then
frasemod = "Gold"
elseif modalidade == silver then
frasemod = "Silver"
end

		local playerstring = string.explode(getGlobalStorageValue(listsubscribe), ",") 
		local subscribes = getGlobalStorageValue(countsubscribe)
		  local xxs = "Numero de Inscritos "..subscribes.." \nCategoria : "..frasemod.."\n"
		 xxs = xxs .."C = Classificado\nB = Batalhando\nA = Aguardando\n\n"


 for _, pid in ipairs(playerstring) do
 local player = getPlayerByName(pid)
 if isPlayer(player) then
if getPlayerStorageValue(player,subscribe) >= 1 and getPlayerStorageValue(player,playerduel) >= 1 then
xxs = xxs .."[".. getCreatureName(player) .. "][C] [B] [on] lv = "..getPlayerLevel(player).."\n"
end
if getPlayerStorageValue(player,subscribe) >= 1 and getPlayerStorageValue(player,playerduel) <= 0 then
xxs = xxs .."[".. getCreatureName(player) .. "][C][A] [on] lv = "..getPlayerLevel(player).."\n"
end
else
xxs = xxs .."[".. pid .. "][OFFLINE] \n"
end

end
doShowTextDialog(cid, 2501,  xxs)
return true

end

 

 

REP+ sem duvidar! agradeço desde já.

 

 

string.split = function (str)
    local t = {}
    return not str:gsub("%w+", function(s) table.insert(t, s) return "" end):find("%S") and t or {}
end

string.trim = function (str)
    return str:gsub("^%s*(.-)%s*$", "%1")
end

string.explode = function (str, sep, limit)
    if(type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then
        return {}
    end

    local i, pos, tmp, t = 0, 1, "", {}
    for s, e in function() return string.find(str, sep, pos) end do
        tmp = str:sub(pos, s - 1):trim()
        table.insert(t, tmp)
        pos = e + 1

        i = i + 1
        if(limit ~= nil and i == limit) then
            break
        end
    end

    tmp = str:sub(pos):trim()
    table.insert(t, tmp)
    return t
end

string.expand = function (str)
    return string.gsub(str, "$(%w+)", function(n) return _G[n] end)
end

string.timediff = function (diff)
    local format = {
        {"week", diff / 60 / 60 / 24 / 7},
        {"day", diff / 60 / 60 / 24 % 7},
        {"hour", diff / 60 / 60 % 24},
        {"minute", diff / 60 % 60},
        {"second", diff % 60}
    }

    local t = {}
    for k, v in ipairs(format) do
        local d, tmp = math.floor(v[2]), ""
        if(d > 0) then
            tmp = (k < table.maxn(format) and (table.maxn(t) > 0 and ", " or "") or " and ") .. d .. " " .. v[1] .. (d ~= 1 and "s" or "")
            table.insert(t, tmp)
        end
    end

    return t
end



Discord do jogo PWO: https://discord.gg/MZk8vCq

2096630069_SemTtulo-1.png.4d617844762739640a3c11cab187e3c3.png

Share this post


Link to post
Share on other sites
1 minuto atrás, Alexy Brocanello disse:

 

 

 

string.split = function (str)
    local t = {}
    return not str:gsub("%w+", function(s) table.insert(t, s) return "" end):find("%S") and t or {}
end

string.trim = function (str)
    return str:gsub("^%s*(.-)%s*$", "%1")
end

string.explode = function (str, sep, limit)
    if(type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then
        return {}
    end

    local i, pos, tmp, t = 0, 1, "", {}
    for s, e in function() return string.find(str, sep, pos) end do
        tmp = str:sub(pos, s - 1):trim()
        table.insert(t, tmp)
        pos = e + 1

        i = i + 1
        if(limit ~= nil and i == limit) then
            break
        end
    end

    tmp = str:sub(pos):trim()
    table.insert(t, tmp)
    return t
end

string.expand = function (str)
    return string.gsub(str, "$(%w+)", function(n) return _G[n] end)
end

string.timediff = function (diff)
    local format = {
        {"week", diff / 60 / 60 / 24 / 7},
        {"day", diff / 60 / 60 / 24 % 7},
        {"hour", diff / 60 / 60 % 24},
        {"minute", diff / 60 % 60},
        {"second", diff % 60}
    }

    local t = {}
    for k, v in ipairs(format) do
        local d, tmp = math.floor(v[2]), ""
        if(d > 0) then
            tmp = (k < table.maxn(format) and (table.maxn(t) > 0 and ", " or "") or " and ") .. d .. " " .. v[1] .. (d ~= 1 and "s" or "")
            table.insert(t, tmp)
        end
    end

    return t
end

 

 

 

 

Onde adicionaria esse code ?

 

 

 

 

 


Share this post


Link to post
Share on other sites
4 minutos atrás, Mikhael disse:

 

 

 

Onde adicionaria esse code ?

 

 

 

 

 

011-string.lua paga o seu e bote esse


Edited by Alexy Brocanello (see edit history)

Discord do jogo PWO: https://discord.gg/MZk8vCq

2096630069_SemTtulo-1.png.4d617844762739640a3c11cab187e3c3.png

Share this post


Link to post
Share on other sites
4 minutos atrás, Alexy Brocanello disse:

011-string.lua

 

 

Mesmo erro:  tmp = str:sub(pos):trim() , só mudou a linha


Share this post


Link to post
Share on other sites
5 minutos atrás, Mikhael disse:

 

 

Mesmo erro:  tmp = str:sub(pos):trim() , só mudou a linha

mude 

 

    local i, pos, tmp, t = 0, 1, "", {}
    for s, e in function() return string.find(str, sep, pos) end do
        tmp = str:sub(pos, s - 1):trim()
        table.insert(t, tmp)
        pos = e + 1

        i = i + 1

        if(limit ~= nil and i == limit) then
            break
        end
    end

    tmp = str:sub(pos):trim()
    table.insert(t, tmp)
    return t
end

 

 

para 

 

local i, pos, tmp, t = 0, 1, "", {}
        for s, e in function() return string.find(str, sep, pos) end do
            tmp = str:sub(pos, s - 1):trim()
            table.insert(t, tmp)
            pos = e + 1

            i = i + 1

        end

Edited by Alexy Brocanello (see edit history)

Discord do jogo PWO: https://discord.gg/MZk8vCq

2096630069_SemTtulo-1.png.4d617844762739640a3c11cab187e3c3.png

Share this post


Link to post
Share on other sites

O erro é simplesmente que string.explode () usa "str" como string, só que ela esta sendo chamado com um valor numérico.  

Você pode retornar um valor caso não seja uma string.

If not type (str) == "string" then return "" end

 

Ou dessa forma:

if( type(str) ~= "string" or type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then return {} end

 

Nesse caso estou adicionando uma sentença ao código já existente. 

 

Ps: isso é para ser posto na função string.explode ()


Share this post


Link to post
Share on other sites
6 horas atrás, dominus disse:

O erro é simplesmente que string.explode () usa "str" como string, só que ela esta sendo chamado com um valor numérico.  

Você pode retornar um valor caso não seja uma string.

If not type (str) == "string" then return "" end

 

Ou dessa forma:

if( type(str) ~= "string" or type(sep) ~= 'string' or isInArray({tostring(str):len(), sep:len()}, 0)) then return {} end

 

Nesse caso estou adicionando uma sentença ao código já existente. 

 

Ps: isso é para ser posto na função string.explode ()

 

 

Então realmente para ativar esse comando devo escolher entre os numeros 1, 2, 3

 

No script tour.lua vc pode ver essa parte:

 

local gold = 1
local silver = 2
local bronze = 3

 

Em 20/01/2016 01:18:26, Alexy Brocanello disse:

mude 

 

    local i, pos, tmp, t = 0, 1, "", {}
    for s, e in function() return string.find(str, sep, pos) end do
        tmp = str:sub(pos, s - 1):trim()
        table.insert(t, tmp)
        pos = e + 1

        i = i + 1

        if(limit ~= nil and i == limit) then
            break
        end
    end

    tmp = str:sub(pos):trim()
    table.insert(t, tmp)
    return t
end

 

 

para 

 


local i, pos, tmp, t = 0, 1, "", {}
        for s, e in function() return string.find(str, sep, pos) end do
            tmp = str:sub(pos, s - 1):trim()
            table.insert(t, tmp)
            pos = e + 1

            i = i + 1

        end

 

 

 

 

 

 

Fiz a troca e agora tenho esse erro:

 

errotalk.png


Share this post


Link to post
Share on other sites

tente remover o 

local gold = 1
local silver = 2
local bronze = 3

 

para

 

gold = 1
silver = 2
bronze = 3


as vezes da certo comigo


Discord do jogo PWO: https://discord.gg/MZk8vCq

2096630069_SemTtulo-1.png.4d617844762739640a3c11cab187e3c3.png

Share this post


Link to post
Share on other sites
13 horas atrás, Alexy Brocanello disse:

tente remover o 


local gold = 1
local silver = 2
local bronze = 3

 

para

 


gold = 1
silver = 2
bronze = 3


as vezes da certo comigo

 

 

Mas preciso desses "local" pois se nao o script nao funcionará, tenho que escolher 1 entre 1, 2 ou 3, ficando assim " !tour 1 ".


Share this post


Link to post
Share on other sites

Acho que você não entendeu o que eu escrevi acima.

 

A função string.explode usa apenas textos e no seu script existe uma declaração que usa uma função de marcação; se essa função retornar outro valor alem de string, ocaeiona esse erro no distro.

 

local playerstring = string.explode(getGlobalStorageValue(listsubscribe), ",") 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...