Ir para conteúdo
  • 0

[Globalevents] Modificar Exp e atualizar


cs007

Pergunta

Bom galera nunca fiz tal script, o que eu queria é assim....

 

1° Ele vai alterar o config.lua na "exp"

 

2° De 10 em 10 minutos ele vai alterar o config.lua e dar /reload

 

3° Um arquivo em txt ou em .lua onde vai está as exp que vai mudar de tanta em tanta horas...

 

Não sei se ficou bem explicado essa alteração não precisa ter limites eu mesmo posso configurar...

 

Abraço pessoal...

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

Posts Recomendados

  • 0

Bom.... posso estar falando besteira, mas acho que o que você quer é um pouco inviável de ser feito do modo como você explicou.

Você quer um script que altere o conteúdo do config.lua, mas para isso ele deveria saber exatamente qual linha alterar, ou seja, ele teria que carregar o confi.lua, mudar a linha e salvar novamente.

Tá, até ai acho viável, complicado porém viável.

Mas a parte de "reload"... bom, para que as alterações do config.lua entrassem em execução, creio que seria necessário reiniciar o servidor. Agora imagine que seu servidor esteja rodando e junto com ele esse script que vc precisa, então este script fecha o serve (para o tal reload), agora como ele conseguiria abrir o servidor novamente? Afinal, ele foi fechado junto com o servidor, portanto não está mais em execução.

 

Bom, como disse, posso ter falado besteira. Então, alguém me corrija se eu estiver errado ^^

 

Agora, talvez exista alguma maneira de mudar a xp a cada hora, mas sem ser por esse caminho que vc imaginou. Só que infelizmente nunca vi.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, algumas opções do config.lua tem como dar o comando /reload que ele aceita, sem necessidade de fechar o server o globalevents que executa o reload eu já tenho,

falta a função de modificar o config.lua... Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

jeferson, não precisa modificar o config lua, e sim a rate global..

 

fiz uma coisinha rapida aqui:

 

em globalevents.xml coloque:

	<globalevent name="ChangeExp" interval="1800" event="script" value="changeexp.lua"/>

interval="1800" é 30 min, lembrando que se seu server for 0.4, tem que trocar por 1800000

 

em scripts crie um arquivo chamado changeexp.lua e coloque isso dentro:

local p = {5, 10, 15, 20, 30}

function onThink(interval, lastExecution, thinkInterval)

	for _, tid in pairs(getPlayersOnline()) do
		doPlayerSetExperienceRate(tid, p[math.random(1, #p)])
		end
	end
	
	return doBroadcastMessage("A rate do servidor foi trocada, confira dizendo !serverinfo.", 22)
end

o local p = {5, 10, 15, 20, 30} são as rates que podem mudar no seu servidor, você pode mudar esses valores..

 

Lembrando que a exp só muda para quem tá online...

(a exp é sorteada)

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

  • 0

jeferson, não precisa modificar o config lua, e sim a rate global..

 

fiz uma coisinha rapida aqui:

 

em globalevents.xml coloque:

	<globalevent name="ChangeExp" interval="1800" event="script" value="changeexp.lua"/>

interval="1800" é 30 min, lembrando que se seu server for 0.4, tem que trocar por 1800000

 

em scripts crie um arquivo chamado changeexp.lua e coloque isso dentro:

local p = {5, 10, 15, 20, 30}

function onThink(interval, lastExecution, thinkInterval)

	for _, tid in pairs(getPlayersOnline()) do
		doPlayerSetExperienceRate(tid, p[math.random(1, #p)])
		end
	end
	
	return doBroadcastMessage("A rate do servidor foi trocada, confira dizendo !serverinfo.", 22)
end

o local p = {5, 10, 15, 20, 30} são as rates que podem mudar no seu servidor, você pode mudar esses valores..

 

Lembrando que a exp só muda para quem tá online...

(a exp é sorteada)

 

 

REP+ para ti lek... mas eu queria assim.

 

12:00h a 13:00h fosse um exp

 

13:00h a 14:00h fosse outro exp

 

não á como modificar no config?

 

Abração

up

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta esse aqui: na tabela você coloca a hora que você quer dentro dos colchetes e a experiência que vai mudar depois do igual. Coloca o global event pra rodar a cada 1min, mas faça um backup do seu config.lua antes.

 

 

local expTable = { -- [hora] = experiência
            [12] = 30,
            [13] = 25,
            [14] = 35,
        }

function onThink()    
    if getGlobalStorageValue(7641) < os.time() then
        local newExp = false
        setGlobalStorageValue(7641, os.time() + 3600)
        for hour, exp in pairs(expTable) do
            if tonumber(hour) == tonumber(os.date("%H")) then
                newExp = exp
                break
            end
        end
        
        if not newExp then return true end
        local file = io.open("config.lua", "r")
        local content = file:read("*a")
        local tmp = string.explode(content, "\n")
        file:close()

        for line, str in pairs(tmp) do
            if string.find(str, "rateExperience") then
                tmp[line] = "    rateExperience = "..newExp
                break
            end
        end
        local file = io.open("config.lua", "w+")
        file:write(table.concat(tmp, "\n"))
        file:close()
        doReloadInfo(RELOAD_CONFIG)
    end
    return true
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta esse aqui: na tabela você coloca a hora que você quer dentro dos colchetes e a experiência que vai mudar depois do igual. Coloca o global event pra rodar a cada 1min, mas faça um backup do seu config.lua antes.

 

 

local expTable = { -- [hora] = experiência
            [12] = 30,
            [13] = 25,
            [14] = 35,
        }

function onThink()    
    if getGlobalStorageValue(7641) < os.time() then
        local newExp = false
        setGlobalStorageValue(7641, os.time() + 3600)
        for hour, exp in pairs(expTable) do
            if tonumber(hour) == tonumber(os.date("%H")) then
                newExp = exp
                break
            end
        end
        
        if not newExp then return true end
        local file = io.open("config.lua", "r")
        local content = file:read("*a")
        local tmp = string.explode(content, "\n")
        file:close()

        for line, str in pairs(tmp) do
            if string.find(str, "rateExperience") then
                tmp[line] = "    rateExperience = "..newExp
                break
            end
        end
        local file = io.open("config.lua", "w+")
        file:write(table.concat(tmp, "\n"))
        file:close()
        doReloadInfo(RELOAD_CONFIG)
    end
    return true
end

 

 

 

Ainda estou testando aqui lek... Mas eu posso por minutos também? Não é por mal não é que assim eu só posso testar de hora em hora =/ mesmo assim REP+ :D

Link para o comentário
Compartilhar em outros sites

  • 0

Eu vo fazer a modificação no meu, e já faço um melhoramento no código por creaturescripts..

 

É que leva um tempinho para pensar na lógica rsrs..

Valeu @Keilost... creio que o do @omega esteja bom é só por os minutos também...Não consegui testar tudo pois tem que deixar ligado 1 hora..rs esqueci desse detalhe :D Mesmo assim obrigado a vocês :D

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

  • 0

 

 

function onSay()    
    local newExp = 30
    local file = io.open("config.lua", "r")
    local content = file:read("*a")
    local tmp = string.explode(content, "\n")
    file:close()
    for line, str in pairs(tmp) do
        if string.find(str, "rateExperience") then
            tmp[line] = "    rateExperience = "..newExp
            break
        end
    end
    local file = io.open("config.lua", "w+")
    file:write(table.concat(tmp, "\n"))
    file:close()
    doReloadInfo(RELOAD_CONFIG)
    return true
end

 

 

 

Testa esse como talkaction e vê se funciona. É só trocar o newExp. Se funcionar esse, 99% de chance de funcionar o globalevent.

Link para o comentário
Compartilhar em outros sites

  • 0

 

 

function onSay()    
    local newExp = 30
    local file = io.open("config.lua", "r")
    local content = file:read("*a")
    local tmp = string.explode(content, "\n")
    file:close()
    for line, str in pairs(tmp) do
        if string.find(str, "rateExperience") then
            tmp[line] = "    rateExperience = "..newExp
            break
        end
    end
    local file = io.open("config.lua", "w+")
    file:write(table.concat(tmp, "\n"))
    file:close()
    doReloadInfo(RELOAD_CONFIG)
    return true
end

 

 

 

Testa esse como talkaction e vê se funciona. É só trocar o newExp. Se funcionar esse, 99% de chance de funcionar o globalevent.

@Valeu lek... o Globalevents funcionou mas para rodar tem que por a hora no globalevents.xml

não tem como por para mudar com interval e por minutos também? sem querer abusar da sua boa vontade :D Obrigado por está me ajudando :D

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

  • 0

 

 

 

function onSay()    
    local newExp = 30
    local file = io.open("config.lua", "r")
    local content = file:read("*a")
    local tmp = string.explode(content, "\n")
    file:close()
    for line, str in pairs(tmp) do
        if string.find(str, "rateExperience") then
            tmp[line] = "    rateExperience = "..newExp
            break
        end
    end
    local file = io.open("config.lua", "w+")
    file:write(table.concat(tmp, "\n"))
    file:close()
    doReloadInfo(RELOAD_CONFIG)
    return true
end

 

 

 

Testa esse como talkaction e vê se funciona. É só trocar o newExp. Se funcionar esse, 99% de chance de funcionar o globalevent.

@Valeu lek... o Globalevents funcionou mas para rodar tem que por a hora no globalevents.xml

não tem como por para mudar com interval e por minutos também? sem querer abusar da sua boa vontade :D Obrigado por está me ajudando :D

 

Não testei nem nada, mais acho q assim funciona, n sei mexer com %d,%m,%s etc... mais acho q assim funciona

local expTable = { -- [minutos] = experiência
            [12] = 30,
            [13] = 25,
            [14] = 35,
        }

function onThink()    
    if getGlobalStorageValue(7641) < os.time() then
        local newExp = false
        setGlobalStorageValue(7641, os.time() + 60)
        for hour, exp in pairs(expTable) do
            if tonumber(hour) == tonumber(os.date("%M")) then
                newExp = exp
                break
            end
        end
        
        if not newExp then return true end
        local file = io.open("config.lua", "r")
        local content = file:read("*a")
        local tmp = string.explode(content, "\n")
        file:close()

        for line, str in pairs(tmp) do
            if string.find(str, "rateExperience") then
                tmp[line] = "    rateExperience = "..newExp
                break
            end
        end
        local file = io.open("config.lua", "w+")
        file:write(table.concat(tmp, "\n"))
        file:close()
        doReloadInfo(RELOAD_CONFIG)
    end
    return true
end

.

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

  • 0

 

 

 

 

function onSay()    
    local newExp = 30
    local file = io.open("config.lua", "r")
    local content = file:read("*a")
    local tmp = string.explode(content, "\n")
    file:close()
    for line, str in pairs(tmp) do
        if string.find(str, "rateExperience") then
            tmp[line] = "    rateExperience = "..newExp
            break
        end
    end
    local file = io.open("config.lua", "w+")
    file:write(table.concat(tmp, "\n"))
    file:close()
    doReloadInfo(RELOAD_CONFIG)
    return true
end

 

 

 

Testa esse como talkaction e vê se funciona. É só trocar o newExp. Se funcionar esse, 99% de chance de funcionar o globalevent.

@Valeu lek... o Globalevents funcionou mas para rodar tem que por a hora no globalevents.xml

não tem como por para mudar com interval e por minutos também? sem querer abusar da sua boa vontade :D Obrigado por está me ajudando :D

 

Não testei nem nada, mais acho q assim funciona, n sei mexer com %d,%m,%s etc... mais acho q assim funciona

local expTable = { -- [minutos] = experiência
            [12] = 30,
            [13] = 25,
            [14] = 35,
        }

function onThink()    
    if getGlobalStorageValue(7641) < os.time() then
        local newExp = false
        setGlobalStorageValue(7641, os.time() + 60)
        for hour, exp in pairs(expTable) do
            if tonumber(hour) == tonumber(os.date("%M")) then
                newExp = exp
                break
            end
        end
        
        if not newExp then return true end
        local file = io.open("config.lua", "r")
        local content = file:read("*a")
        local tmp = string.explode(content, "\n")
        file:close()

        for line, str in pairs(tmp) do
            if string.find(str, "rateExperience") then
                tmp[line] = "    rateExperience = "..newExp
                break
            end
        end
        local file = io.open("config.lua", "w+")
        file:write(table.concat(tmp, "\n"))
        file:close()
        doReloadInfo(RELOAD_CONFIG)
    end
    return true
end

.

 

Testei aqui não pegou lek...

up

Link para o comentário
Compartilhar em outros sites

  • 0

Pode haver erros mas ai você me avisa, o único erro que eu penso e que seja "rateExperience = val" em vez de "rateExperience=val" ai não vai achar o valor.

 

 

function setNewExp(value)
 
    local function explode(e, sep)
        local result = {}    e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
        return result
    end
 
 
    local file = io.open("config.lua", "r")
    local tmp = explode(file:read("*all"), "=")
 
    if tmp[1] == "rateExperience" then
        tmp[2] = value
        file:close()
    end
    local wr = io.open(dir, "w+")
    wr:write(table.concat(tmp, "/n"))
end
 
function onThink()
 
    local hours = {
        ["12:30"] = 30,
        ["16:30"] = 15
    }
 
    local newExp = hours[os.date("%H:%M")]
    
    if(newExp) then
        setNewExp(newExp)
        broadcastMessage("Exp has been updated to " .. newExp .. "", 25)
    end
 
    return true
end
Editado por Skymagnum
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...