CA

Verificador de storages

Por caotic, 06 de jun. de 2013 em Mods, funções e outros

otserv
8
1.4k
caoticC
06 de junho de 2013 às 13:48

Bem..

Tava conversando com o eventide sobre um verificador de storages para otserv.

Basicamente ele rodaria todo seu otserv em busca de storages e te desse o valor delas.

 

Antes de realizar o programa tem que fazer sua estrutura.

Então fiz a função que iria buscar os valores e as storages:

 

local str = "setPlayerStorageValue(cid, 23232, 1+2)\nsetPlayerStorageValue(cid, 211, 8)\n x(x, y)\n setPlayerStorageValue(cid, 2322, 1)\n"


function string.explode(e, sep)
local result = {}	e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
return result
end



function findStr(str, x)
_ = ""
for i in str:gmatch("setPlayerStorageValue(.-)\n") do
explode = string.explode(i, ",")
value = string.sub(explode[3], 1, #explode[3]-1)
if x then
y = loadstring('return (' .. value .. ')')()
end
_ = _.." \n"
s = _..explode[2]
_ = s.." Value = "..y or 'Not Value'..""
end
return _
end

print(findStr(str, true))

 

 

Já penso roda isto no seu otserv todo.

Melhor ficarem so com a função e se quiserem usar no seu otserv.

Recomendo a blibioteca lua file system e coragem.

 

 

Abs

Editado Junho 6 por caotic

EventideE
06 de junho de 2013 às 14:07

Muita coragem... huehuehue

Muito difícil conflitar storages, só aconteceu uma vez comigo...

caoticC
09 de junho de 2013 às 12:52

Muita coragem... huehuehue

Muito difícil conflitar storages, só aconteceu uma vez comigo...

 

E nunca aconteceu isso comigo.

Mais se alguém quiser testar algo mais fundo.

Tinha insertar todos os valores numa table e verificar se não tem repetição.

Editado Junho 9 por caotic

3 semanas depois...
SlicerS
27 de junho de 2013 às 21:22
require( "ex" )

local t = {os.currentdir()}

function SearchFiles(path, result)
    for e in assert(os.dir(path)) do
        if e.type == 'directory' then
            table.insert(t, e.name)
            SearchFiles(table.concat(t, "\\"), result)
        elseif string.find(e.name, ".lua") then
            local file = io.open(table.concat(t, "\\").."\\"..(e.name), 'r')
            if file then
                local txt = file:read("*all")
                for i in string.gmatch(txt, "setPlayerStorageValue%(%a*, (%d+), %d*%)") do
                    result:write(i.."\t\t"..table.concat(t,"\\").."\\"..e.name.."\n")
                end
                for i in string.gmatch(txt, "sto = (%d+)") do
                    result:write(i.."\t\t"..table.concat(t,"\\").."\\"..e.name.."\n")
                end
                for i in string.gmatch(txt, "storage = (%d+)") do
                    result:write(i.."\t\t"..table.concat(t,"\\").."\\"..e.name.."\n")
                end
                file:close()
            end
        end
    end
    if #t > 1 then table.remove(t) end
end

local result = io.open("results.txt", "a+")
SearchFiles('.', result)
result:close()

eh eh, nao fico la um codigo muito bonito kk' mas n ta levando nem 2seg para rodar a pasta toda... o problema eh q muitas vezes o cara usa outras variaveis para por a storage... dai eh complicado... ;p

Editado Junho 27 por Slicer

koeteK
02 de julho de 2013 às 11:31

pow vê se eu intendi...

isso é um script que procura e te mostra todas as storages usadas em jogo? (se for nossa muito perfeito pra mim, tava precisando disso)

e como que instala este script?

SlicerS
04 de julho de 2013 às 14:18

como flei, ele n da TODASSSSSS as storages... ja q tu pode ta usando alguma variavel diferente para storage em alguns scripts... mais concerteza lhe dara boa parte...

 

eh soh baixar isso...

http://code.google.com/p/luaforwindows/downloads/list

 

dai instala... depois vai em C:\Program Files\Lua\5.1\SciTE\ e abre o SciTE.exe ... dai cola esse codigo la no editor, salva com a extensao .lua ... dai pega o arquivo, .lua, q foi criado, e coloca na pasta data/ do teu serv... dai abre esse arquivo denovo com o SciTE.exe e aperta F5... dai vai ser criado um arquivo chamado results.txt com as storages e o arquivo aonde essa storage foi chamada...

SkymagnumS
04 de julho de 2013 às 16:01

Da pra pegar todas checando se aquela variável esta sendo usada em uma função de storage, se fazer bem feito roda em até 3.5 segs.

KyouK
07 de julho de 2013 às 12:18

Da pra pegar todas checando se aquela variável esta sendo usada em uma função de storage, se fazer bem feito roda em até 3.5 segs.

Faça então. :o