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!
info
Grupo: Artesão
Registrado: 25/08/13
Posts: 124
Reputação: +38

info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

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.
info
Grupo: Artesão
Registrado: 25/08/13
Posts: 124
Reputação: +38

Eu não sei fazer isso, você não poderia implantar para o padrão?
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

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 =/
info
Grupo: Infante
Registrado: 27/01/13
Posts: 1.7k
Reputação: +104
Gênero: Masculino

Muito bom man,xD



info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum
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:
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 end2 - Em seguida, vá em talkactions.xml e adicione
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 end4 - Agora adicione essa tag em creaturescripts.xml
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 endFiz 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 Agosto 29 por omega blueheaven