Ir para conteúdo

Featured Replies

Postado
9 horas atrás, Thayguroficial disse:

Opa amigo pode me ajudar, esse script ta 100% funcionando mas eu quero um sem hora determinada pra ser ativado, quero que fique sempre ativo, pois quero por na sala de quest e no evento castle do meu servidor. Outra coisa, ali a parte de frompos/topos como faz pra contar também uma area subterranea ao mesmo tempo, ex: se tiver 1 player no terreo com mesmo ip de outro player em uma montanha ou no subsolo ele joga para o templo. 

 

Grato desde já 

 

Fiz um mais completo aqui. Nesse caso, vai verificar todos os andares configurados e vai deixar somente um player de cada ip na área, ou seja, removerá todos os MC's. Além disso, é possível fazer a verificação para mais de uma área. Você pode escolher se vai kickar e/ou teleportar o player para o templo.

 

Em globalevents/scripts, crie um arquivo:

 

removeMC.lua

 

Spoiler

local t = {kick = true, temple = true, -- kick = false - não kicka o player, temple = false não teleporta o player para o templo
areas = {
[1] = {{x = 1, y = 1, z = 7}, {x = 1, y = 1, z = 5}},
[2] = {{x = 1, y = 1, z = 7}, {x = 1, y = 1, z = 7}},
[3] = {{x = 1, y = 1, z = 6}, {x = 1, y = 1, z = 8}}
}}

function onThink(interval, lastExecution)
local total = 0 
for _, v in pairs(t.areas) do
    total = total + removeAllMcInArea(v[1], v[2], t.kick, t.temple)
end
print("Multi Clients removed: " .. total)
return true
end

function removeAllMcInArea(fromPosition, toPosition, kick, toTemple) -- by dwarfer
    local players, check, freq, remove, removeall = {}, {}, {}, {}, {}
    for _, pid in ipairs(getPlayersOnline()) do
        local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}
        local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}
        local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)
        for index = 0, math.abs(toPosition.z - fromPosition.z) do
            f.z = min + index
            t.z = min + index
            if isInRange(getPlayerPosition(pid), f, t) then
                table.insert(players, pid)
            end
        end    
    end
    if #players > 0 then
        for _, player in pairs(players) do
            table.insert(check, getPlayerIp(player))
        end
    end
    for _, v in pairs(check) do
        freq[v] = (freq[v] or 0) + 1
    end
    for ip, ip_freq in pairs(freq) do 
        if ip_freq > 1 then
           local text = ""
            local mc = getPlayersByIp(ip)
           for i = 1, #mc do
                if isInArray(players, mc[i]) and getPlayerAccess(mc[i]) < 3 then
                    text = text .. "" .. mc[i] .. ","
                end
            end
            remove[ip] = text
        end
    end
    for ip, players in pairs(remove) do
        ret = string.explode(players, ",")
        for i = 1, (#ret-2) do
            removeall[#removeall + 1] = ret[i]
        end
    end
    for _, tid in pairs(removeall) do
        if kick then
            if toTemple == false then
                doRemoveCreature(tid)
            else
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
                doRemoveCreature(tid)
            end
        else
            doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
    end
    return #removeall
end

 

 

Em globalevents.xml, adicione a tag: <globalevent name="RemoveAllMc" interval="30000" event="script" value="removeMC.lua"/>

 

Edite o intervalo para o desejo, coloquei como exemplo 30 segundos.

 

 

 

Editado por Dwarfer (veja o histórico de edições)

Contato:

 

  • Respostas 8
  • Visualizações 1.4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • removemc.lua   local hour = "00:00" --- altere para a hora que desejar local frompos, topos = {x = 25477, y = 25134, z = 7},{x = 25490, y = 25139, z = 7} function onThink(interval, lastExec

  • Fiz um mais completo aqui. Nesse caso, vai verificar todos os andares configurados e vai deixar somente um player de cada ip na área, ou seja, removerá todos os MC's. Além disso, é possível fazer a ve

  • Se não tiver acesso maior que 3, vai funcionar Enviado de meu GT-S7582L usando Tapatalk

Postado
56 minutos atrás, Dwarfer disse:

 

Fiz um mais completo aqui. Nesse caso, vai verificar todos os andares configurados e vai deixar somente um player de cada ip na área, ou seja, removerá todos os MC's. Além disso, é possível fazer a verificação para mais de uma área. Você pode escolher se vai kickar e/ou teleportar o player para o templo.

 

Em globalevents/scripts, crie um arquivo:

 

removeMC.lua

 

  Ocultar conteúdo


local t = {kick = true, temple = true, -- kick = false - não kicka o player, temple = false não teleporta o player para o templo
areas = {
[1] = {{x = 1, y = 1, z = 7}, {x = 1, y = 1, z = 5}},
[2] = {{x = 1, y = 1, z = 7}, {x = 1, y = 1, z = 7}},
[3] = {{x = 1, y = 1, z = 6}, {x = 1, y = 1, z = 8}}
}}

function onThink(interval, lastExecution)
local total = 0 
for _, v in pairs(t.areas) do
    total = total + removeAllMcInArea(v[1], v[2], t.kick, t.temple)
end
print("Multi Clients removed: " .. total)
return true
end

function removeAllMcInArea(fromPosition, toPosition, kick, toTemple) -- by dwarfer
    local players, check, freq, remove, removeall = {}, {}, {}, {}, {}
    for _, pid in ipairs(getPlayersOnline()) do
        local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}
        local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}
        local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)
        for index = 0, math.abs(toPosition.z - fromPosition.z) do
            f.z = min + index
            t.z = min + index
            if isInRange(getPlayerPosition(pid), f, t) then
                table.insert(players, pid)
            end
        end    
    end
    if #players > 0 then
        for _, player in pairs(players) do
            table.insert(check, getPlayerIp(player))
        end
    end
    for _, v in pairs(check) do
        freq[v] = (freq[v] or 0) + 1
    end
    for ip, ip_freq in pairs(freq) do 
        if ip_freq > 1 then
           local text = ""
            local mc = getPlayersByIp(ip)
           for i = 1, #mc do
                if isInArray(players, mc[i]) and getPlayerAccess(mc[i]) < 3 then
                    text = text .. "" .. mc[i] .. ","
                end
            end
            remove[ip] = text
        end
    end
    for ip, players in pairs(remove) do
        ret = string.explode(players, ",")
        for i = 1, (#ret-2) do
            removeall[#removeall + 1] = ret[i]
        end
    end
    for _, tid in pairs(removeall) do
        if kick then
            if toTemple == false then
                doRemoveCreature(tid)
            else
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
                doRemoveCreature(tid)
            end
        else
            doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
    end
    return #removeall
end

 

 

Em globalevents.xml, adicione a tag: <globalevent name="RemoveAllMc" interval="30000" event="script" value="removeMC.lua"/>

 

Edite o intervalo para o desejo, coloquei como exemplo 30 segundos.

 

 

 

 

Não funcionou aqui, eu coloque a area certinho mas não leva pro templo e também não kicka. Não deu nenhum erro na distro, só aparece Multi Clients removed: 0 que é normal

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo