Ir para conteúdo

Comando /ban


Omega

Posts Recomendados

Bom, tava testando uma coisa e lembrei que não tinha mais comando /ban para players em OTs 8.6. Então resolvi tentar fazer o meu próprio. Eis o resultado:

 

Como funciona:

 

  • Opções:
  1. Você pode usar !ban playername para banir sem registrar o motivo e por tempo indeterminado
  2. Você pode usar !ban playername,dias para banir sem registrar o motivo, mas por um número determinado de dias
  3. Você pode usar !ban playername,motivo para banir por tempo indeterminado, mas registrando um motivo
  4. Você pode usar !ban playername,dias,motivo para banir por tempo e motivo determinados
  • Quando o jogador banido tentar entrar, ele será teletransportado para o tempo, não poderá se mexer nem falar e receberá a seguinte mensagem:
    'Voce esta banido e sera kickado em 5 segundos.' --> isso se não houver motivo registrado
    'Voce foi banido por -motivo- e sera kickado em 5 segundos.' --> se houver motivo registrado
    
  • Independente da opção, o jogador é kickado e ocorre o descrito acima quando ele tenta se conectar nas 5 primeiras vezes. Depois ele não poderá mais se conectar ao servidor com ele personagem.

  • Você só pode banir players online

  • Você pode desbanir qualquer jogador com !unban playername (online ou offline)

 

Instalando:

 

1 - Crie um arquivo na pasta lib com extensão .lua e adicione:

 

 

function getPlayerTemplePos(cid)
    local town = getPlayerTown(cid)
    local temple = getTownTemplePosition(town)
    return temple or false
end    
banStorage = 918171623
banCount = 918171624
banReason = 918171625

function doBanPlayer(cid,days,reason)
    if reason ~= false and reason ~= nil and isPlayer(cid) then
        setPlayerStorageValue(cid,banReason,reason)
    end
    if days ~= false and days ~= nil and isPlayer(cid) then
        local bantime = ((days * 60 * 60 * 24) + os.time(t))
        setPlayerStorageValue(cid,banStorage,bantime)
        doRemoveCreature(cid)
        return true
    elseif isPlayer(cid) then
        setPlayerStorageValue(cid,banStorage,0)
        doRemoveCreature(cid)
        return true
    end
    return false
end

function isPlayerBanned(cid)
    if not isPlayer(cid) then
        return false
    elseif getPlayerStorageValue(cid,banStorage) == 0 then
        return true
    elseif getPlayerStorageValue(cid,banStorage) == -1 then
        return false
    elseif getPlayerStorageValue(cid,banStorage) >= os.time(t) then
        return true
    end
    return false
end

function doUnbanPlayer(name)
    if getPlayerGUIDByName(name) then
        pid = getPlayerGUIDByName(name)
    else
        return false
    end
    if getCreatureByName(name) then
        local cid = getCreatureByName(name)
        if isPlayer(cid) then
            doRemoveCreature(cid)
        end
    end
    if db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banStorage..";") == true then
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banCount..";")
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banReason..";")
        return true
    end
    return false
end

function getPlayerBanReason(cid)
    if isPlayer(cid) then
        local reason = getPlayerStorageValue(cid,banReason)
        if reason == -1 then
            reason = ""
        end
        return reason
    end
    return false
end

 


2 - Em seguida, vá em talkactions.xml e adicione

<talkaction log="yes" access="4" words="!ban;!unban" event="script" value="ban.lua"/>

Obs.: O !ban;!unban no lugar de /ban se deve ao fato de muitos servidores apresentarem o comando /unban

 

3 - Agora, adicione esse script na sua pasta talkactions/scripts com o nome de ban.lua

 

 

 

function onSay(cid,words,param)
    if words == '!ban' then
        local param = string.lower(param)
        local param = string.explode(param,',')    
        if not param[1] then
            doPlayerSendTextMessage(cid,27,'You must specify a player to ban.')
            return true
        elseif(not param[2]) then
            local player = getPlayerByName(param[1])
            if isPlayer(player) then
                doBanPlayer(player,false)
            else
                doPlayerSendTextMessage(cid,27,param[1]..' is not a valid player.')
            end
        elseif param[3] then
            local player = getPlayerByName(param[1])
            local days = tonumber(param[2])
            local reason = tostring(param[3])
            if days and reason then
                doBanPlayer(player,days,reason)
                doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..' for '..param[2]..' days. Reason: '..param[3]..'.')
            else
                doPlayerSendTextMessage(cid,27,'Invalid parameters.')
            end
        else
            if type(tonumber(param[2])) == 'number' then
                local player = getPlayerByName(param[1])
                local days = tonumber(param[2])
                if days ~= false and days ~= nil then
                    doBanPlayer(player,days)
                    doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..' for '..param[2]..' days.')
                else
                    doPlayerSendTextMessage(cid,27,'Invalid parameter number 2: '..param[2]..'.')
                end
            else
                local reason = param[2]
                local player = getPlayerByName(param[1])
                doBanPlayer(player,false,reason)
                doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..'. Reason: '..param[2]..'.')
            end
        end
    elseif words == '!unban' then
        if doUnbanPlayer(param) then
            doPlayerSendTextMessage(cid,27,'Player '..param..' foi desbanido.')
        else
            doPlayerSendTextMessage(cid,27,param..' is\'n a valid player.')
        end
    end
    return true
end

 

 

 

4 - Agora adicione essa tag em creaturescripts.xml

<event type="login" name="Ban" event="script" value="banned.lua"/>

5 - Finalmente, esse código em um arquivo dentro de creaturescripts/scripts com o nome de banned.lua

 

 

function onLogin(cid)    
    registerCreatureEvent(cid, "Banned")
    if isPlayerBanned(cid) and getPlayerStorageValue(cid,banCount) >= 3 then
        return false
    end        
    if isPlayerBanned(cid) then
        local reason = getPlayerBanReason(cid)
        if reason ~= "" then
            setPlayerStorageValue(cid,banCount,getPlayerStorageValue(cid,banCount)+1)
            doTeleportThing(cid,getPlayerTemplePos(cid))
            addEvent(doKickPlayerIf,5000,cid)
            doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,'Voce foi banido por '..reason..' e sera kickado em 5 segundos.')
            mayNotMove(cid,true)
        else
            setPlayerStorageValue(cid,banCount,getPlayerStorageValue(cid,banCount)+1)
            doTeleportThing(cid,getPlayerTemplePos(cid))
            addEvent(doKickPlayerIf,5000,cid)
            mayNotMove(cid,true)            
            doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,'Voce esta banido e sera kickado em 5 segundos.')
        end        
        doMutePlayer(cid, 5)
    end
    return true
end

 

 

 

Fiz vários testes aqui e me parece que está tudo certo, mas recomendo testar com um jogador de teste antes em usar em jogadores reais.

Por mais óbvio que pareça, espero comentários/dúvidas ou sugestões sobre o código.

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

Olá amigo, estou no serviço, quando chegar em casa testarei, mas tenho uma dúvida, no site aparecerá tudo certinho? E se eu quiser alterar o motivo do banimento e também colocar uma descrição? Obrigado!

 

Acabei de atualizar o script para incluir o motivo. Mas não vai aparecer no site normalmente, a menos que você altere para puxar os campos que são usados no script.

Link para o comentário
Compartilhar em outros sites

Na verdade, não seria difícil de fazer se eu conseguisse entender aquela tabela de bans que tem no banco de dados. Mas não é o caso =/

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...