Ir para conteúdo
  • Cadastre-se

(Resolvido)Editar Jail System 0.3.6 8.54


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Bom eu gostaria de estar solicitando a algum scripter um auxilio na edição desse script da seguinte forma o script funciona normal ele prende o jogador por minutos configuráveis porém eu preciso do seguinte.

 

1- Fique sugando a mana da área da prisão ninguém que esteja nessa área vai conseguir recuperar mana ou regenerar com itens ela vai ficar sugando constantemente

2- Ao ser enviado para a prisão o jogador vai perder uma quantia configurável de exp.

Exemplo: /jail nomedojogador, 10, 100 < ele vai ficar 10 minutos e vai perder 100% de exp ou seja 1 level sendo que 200% seria 2 leveis e assim por diante

3- Preciso de uma storage que verifique se o player foi morto ou não caso foi morto ele perde a storage de time na prisão o jogador vai ter a opção de esperar o tempo que foi preso ou se matar para sair da prisão.

obs: a área da prisão vai ter lugares pz e lugares que podem ser mortos normalmente

4- se der para adicionar a área demarcada da prisão da seguinte forma um jogador pode atacar o outro e não vai ficar pk pode matar que não fica pega pk e nem ganha frags e o jogador morto morre normalmente assim caso não estiver protegido ou algo do tipo ele perde o loot.

5- jogadores redskull e blackskull serão teleportado para uma outra área especifica da prisão.

exemplo: os jogadores redskull e blackskull vão tipo pra uma cela de segurança maxima considerado muito perigosos para ficar junto dos outros presos a cela vai ser no-pvp e trancada.

 

script usado no momento

Spoiler

 


function onSay(cid,words,param)
local t = string.explode(param, ",")

local config = {
[1] = {x=1903, y=435, z=6},
[2] = {x=1854, y=429, z=6},
[3] = {x=1875, y=412, z=6},
[4] = {x=1877, y=446, z=6},
[5] = {x=1907, y=468, z=6},
[6] = {x=1933, y=468, z=6},
[7] = {x=1911, y=399, z=5},
[8] = {x=1883, y=427, z=5},
}

local from1,to1 = {x=1846, y=380, z=6},{x=1942, y=382, z=4}
local from2,to2 = {x=1846, y=478, z=6},{x=1942, y=475, z=4}
local temple = {x=1026, y=910, z=7} -- cordenadas do templo
local Player_Name = getPlayerByNameWildcard(t[1])
local Player_Pos = getThingPosition(Player_Name)

local function Unjail()
doTeleportThing(Player_Name, temple)
end

if (not t[1]) then
doPlayerSendTextMessage(cid, 27, "Digite o nome do jogador.")
return TRUE
end

if (not Player_Name or (isPlayerGhost(tid) and getPlayerGhostAccess(tid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, 27, "O jogador nao existe ou esta offline.")
return TRUE
end

if (not t[2]) then
doPlayerSendTextMessage(cid, 27, "Coloque a quantidade de tempo em minutos!")
return TRUE
end

if getPlayerAccess(Player_Name) >= 3 then
doPlayerSendTextMessage(cid, 27,"Voce nao pode prender um GM ou alguem superior a ele.")
return TRUE
end

if isInRange(Player_Pos, from1, to1) or isInRange(Player_Pos, from2, to2) then
doPlayerSendTextMessage(cid, 27,"O jogador ja esta preso!")
return TRUE
end

if tonumber(t[2]) then
doTeleportThing(Player_Name, config[math.random(1, #config)])
doSendAnimatedText(Player_Pos, "JAIL!", TEXTCOLOR_RED)
doPlayerSendTextMessage(Player_Name, 25,'Voce foi preso por fazer algo contra as regras! e ficara preso por '..t[2]..' minutos.')
doPlayerSendTextMessage(cid, 27,"Voce prendeu o jogador "..t[1].." por "..t[2].." minutos.")
addEvent(Unjail, t[2]*60*1000, Player_Name)
else
doPlayerSendTextMessage(cid, 27, "Coloque a quantidade de tempo em minutos!")
end
return TRUE
end

 

 

 

 

bom é isso ficarei no aguardo desde já obrigado ^^ 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

Tirando a ideia 4, eu achei bacana.

 

porque na ideia 4 ao invés de deixar se matarem, não cria um tile saindo "se enforque!" ai deixa os players decidirem se querem se matar ou não?

 

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

@Vodkart porque vai ter área normal vod neutra que pode abrir pk ou não queria transformar em area pvp porém ao morrer tem a penalidade de perde exp e loot além do que já perdeu ao ser preso saca pra ter pancadaria kkk

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites
  • Solução
Em 07/08/2018 em 09:37, Brunds disse:

Bom eu gostaria de estar solicitando a algum scripter um auxilio na edição desse script da seguinte forma o script funciona normal ele prende o jogador por minutos configuráveis porém eu preciso do seguinte.

 

1- Fique sugando a mana da área da prisão ninguém que esteja nessa área vai conseguir recuperar mana ou regenerar com itens ela vai ficar sugando constantemente

2- Ao ser enviado para a prisão o jogador vai perder uma quantia configurável de exp.

Exemplo: /jail nomedojogador, 10, 100 < ele vai ficar 10 minutos e vai perder 100% de exp ou seja 1 level sendo que 200% seria 2 leveis e assim por diante

3- Preciso de uma storage que verifique se o player foi morto ou não caso foi morto ele perde a storage de time na prisão o jogador vai ter a opção de esperar o tempo que foi preso ou se matar para sair da prisão.

obs: a área da prisão vai ter lugares pz e lugares que podem ser mortos normalmente

4- se der para adicionar a área demarcada da prisão da seguinte forma um jogador pode atacar o outro e não vai ficar pk pode matar que não fica pega pk e nem ganha frags e o jogador morto morre normalmente assim caso não estiver protegido ou algo do tipo ele perde o loot.

5- jogadores redskull e blackskull serão teleportado para uma outra área especifica da prisão.

exemplo: os jogadores redskull e blackskull vão tipo pra uma cela de segurança maxima considerado muito perigosos para ficar junto dos outros presos a cela vai ser no-pvp e trancada.

 

script usado no momento

  Ocultar conteúdo

 



function onSay(cid,words,param)
local t = string.explode(param, ",")

local config = {
[1] = {x=1903, y=435, z=6},
[2] = {x=1854, y=429, z=6},
[3] = {x=1875, y=412, z=6},
[4] = {x=1877, y=446, z=6},
[5] = {x=1907, y=468, z=6},
[6] = {x=1933, y=468, z=6},
[7] = {x=1911, y=399, z=5},
[8] = {x=1883, y=427, z=5},
}

local from1,to1 = {x=1846, y=380, z=6},{x=1942, y=382, z=4}
local from2,to2 = {x=1846, y=478, z=6},{x=1942, y=475, z=4}
local temple = {x=1026, y=910, z=7} -- cordenadas do templo
local Player_Name = getPlayerByNameWildcard(t[1])
local Player_Pos = getThingPosition(Player_Name)

local function Unjail()
doTeleportThing(Player_Name, temple)
end

if (not t[1]) then
doPlayerSendTextMessage(cid, 27, "Digite o nome do jogador.")
return TRUE
end

if (not Player_Name or (isPlayerGhost(tid) and getPlayerGhostAccess(tid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, 27, "O jogador nao existe ou esta offline.")
return TRUE
end

if (not t[2]) then
doPlayerSendTextMessage(cid, 27, "Coloque a quantidade de tempo em minutos!")
return TRUE
end

if getPlayerAccess(Player_Name) >= 3 then
doPlayerSendTextMessage(cid, 27,"Voce nao pode prender um GM ou alguem superior a ele.")
return TRUE
end

if isInRange(Player_Pos, from1, to1) or isInRange(Player_Pos, from2, to2) then
doPlayerSendTextMessage(cid, 27,"O jogador ja esta preso!")
return TRUE
end

if tonumber(t[2]) then
doTeleportThing(Player_Name, config[math.random(1, #config)])
doSendAnimatedText(Player_Pos, "JAIL!", TEXTCOLOR_RED)
doPlayerSendTextMessage(Player_Name, 25,'Voce foi preso por fazer algo contra as regras! e ficara preso por '..t[2]..' minutos.')
doPlayerSendTextMessage(cid, 27,"Voce prendeu o jogador "..t[1].." por "..t[2].." minutos.")
addEvent(Unjail, t[2]*60*1000, Player_Name)
else
doPlayerSendTextMessage(cid, 27, "Coloque a quantidade de tempo em minutos!")
end
return TRUE
end

 

 

 

 

bom é isso ficarei no aguardo desde já obrigado ^^ 

 

Fiz um mod aqui, teste-o:

 

Spoiler

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Jail System" version="1.0" author="Dwarfer" contact="tibiaking.com" enabled="yes">
<config name="Jail_func"><![CDATA[
JAIL_SYS = {

    block_mana = true,

    prision_area = {fromPos = {x = 1, y = 1, z = 6}, toPos = {x = 2, y = 2, z = 7}},
    
    max_security_skulls = {SKULL_RED, SKULL_BLACK},
    
    jails_enter_positions = {
        ["NORMAL"] = {
            [1] = {x = 1, y = 1, z = 1},
            [2] = {x = 1, y = 1, z = 1},
            [3] = {x = 1, y = 1, z = 1},
        },
        ["MAX_SECURITY"] = { 
            [1] = {x = 1, y = 1, z = 1},
            [2] = {x = 1, y = 1, z = 1},
            [3] = {x = 1, y = 1, z = 1},
        },
    },
    
    storages = {jailtime = 76530}
}

function getAllPlayersInPrisionArea() 
    local players, area = {}, JAIL_SYS.prision_area
    for _, pid in ipairs(getPlayersOnline()) do
        local f = {x = area.fromPos.x, y = area.fromPos.y, z = area.fromPos.z}
        local t = {x = area.toPos.x, y = area.toPos.y, z = area.toPos.z}
        local min = (area.fromPos.z > area.toPos.z and area.toPos.z or area.fromPos.z)
        for index = 0, math.abs(area.toPos.z - area.fromPos.z) do
            f.z = min + index
            t.z = min + index
            if isInRange(getPlayerPosition(pid), f, t) then
                table.insert(players, pid)
            end
        end    
    end
    return players
end

function isInPrision(cid)
    return isInArray(getAllPlayersInPrisionArea(), cid)
end

function doKickPlayerFromPrision(cid)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    local destination = getTownTemplePosition(getPlayerTown(cid))
    doTeleportThing(cid, destination)
    doSendMagicEffect(destination, CONST_ME_TELEPORT)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você cumpriu sua pena na prisão.")
    setPlayerStorageValue(cid, JAIL_SYS.storages.jailtime, -1)
end

function doPlayerNotFragInPrision(cid)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esta morte não foi contabilizada.")
    doPlayerSetSkullEnd(cid, 0, SKULL_WHITE)
    doRemoveCondition(cid, CONDITION_INFIGHT)
    if getCreatureSkullType(cid) == SKULL_WHITE then
        doCreatureSetSkullType(cid, SKULL_NONE)
    end
    db.executeQuery("UPDATE `killers` SET `unjustified` = 0 WHERE `id` IN (SELECT `kill_id` FROM `player_killers` WHERE `player_id` = " .. getPlayerGUID(cid) .. ") ORDER BY `death_id` DESC LIMIT 1;")
end
]]></config>
<event type="statschange" name="JailBlockMana" event="script"><![CDATA[
domodlib('Jail_func')
function onStatsChange(cid, attacker, type, combat, value)
    if not isPlayer(cid) then return true end
    if not JAIL_SYS.block_mana then return true end
    if getPlayerStorageValue(cid, JAIL_SYS.storages.jailtime) > os.time() then
        if type == STATSCHANGE_MANAGAIN then
            if isInPrision(cid) then
                return false
            end
        end
    end
    return true
end]]></event>
<event type="login" name="JailLogin" event="script"><![CDATA[
domodlib('Jail_func')
function onLogin(cid)
    registerCreatureEvent(cid, "JailBlockMana")
    registerCreatureEvent(cid, "JailNotFrag")
    local jail_time = getPlayerStorageValue(cid, JAIL_SYS.storages.jailtime)
    if jail_time == -1 then return true end
    if isInPrision(cid) then
        if jail_time > os.time() then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ficará preso até "..os.date("%d %B %Y %X", jail_time)..".")
            addEvent(function()
                if isPlayer(cid) then
                    if isInPrision(cid) then
                        doKickPlayerFromPrision(cid)
                    end
                end
            end, (jail_time - os.time()) * 1000)
        else
            doKickPlayerFromPrision(cid)
        end
    end
    return true
end]]></event>
<event type="kill" name="JailNotFrag" event="script"><![CDATA[
domodlib('Jail_func')
function onKill(cid, target, damage, flags)
    if not isPlayer(cid) or not isPlayer(target) then return true end
    if isInPrision(cid) then
        if isInPrision(target) then
            addEvent(doPlayerNotFragInPrision, 100, cid)
        end
    end
    return true
end]]></event>
<talkaction words="!jail;/jail" access="4" event="script"><![CDATA[
domodlib('Jail_func')
function onSay(cid, words, param, channel)
    local param = param:lower()
    local t = string.explode(param, ",")
    if not t[1] then
        return doPlayerSendCancel(cid, "Comando inválido. Insira o nome do jogador.")
    end
    if not tonumber(t[2]) then
        return doPlayerSendCancel(cid, "Comando inválido. Insira o tempo que o jogador ficará preso.")
    end
    if not tonumber(t[3]) then
        return doPlayerSendCancel(cid, "Comando inválido. Insira quantos níveis o jogador perderá.")
    end
    local player = getPlayerByNameWildcard(t[1])
    if not isPlayer(player) or (isPlayerGhost(player) and getPlayerGhostAccess(player) > getPlayerGhostAccess(cid)) then
        return doPlayerSendCancel(cid, "Jogador não encontrado.")
    end
    if getPlayerAccess(player) >= 3 then
        return doPlayerSendCancel(cid, "Você não pode prender esse jogador.")
    end
    if isInPrision(player) then
        return doPlayerSendCancel(cid, "O jogador já está preso.")
    end
    local check = getPlayerStorageValue(player, JAIL_SYS.storages.jailtime)
    if check > os.time() then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve esperar até "..os.date("%d %B %Y %X", check).." para prender o jogador novamente.")
    end
    local jail_type = isInArray(JAIL_SYS.max_security_skulls, getCreatureSkullType(player)) and "MAX_SECURITY" or "NORMAL"
    local jails = JAIL_SYS.jails_enter_positions[jail_type]
    local jail_enter = jails[math.random(1, #jails)]
    doSendMagicEffect(getPlayerPosition(player), CONST_ME_MAGIC_RED)
    doTeleportThing(player, jail_enter)
    doSendMagicEffect(jail_enter, CONST_ME_TELEPORT)
    doSendAnimatedText(jail_enter, "JAIL!", TEXTCOLOR_RED)
    doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, "Você fez algo ilegal e ficará preso por "..t[2].." minuto"..(tonumber(t[2]) > 1 and "s" or "")..".")
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você prendeu o jogador "..getCreatureName(player).." por "..t[2].." minuto"..(tonumber(t[2]) > 1 and "s" or "")..".")
    doPlayerAddLevel(player, (tonumber(t[3]) < 0 and 0 or -tonumber(t[3])))
    doCreatureAddMana(player, -getCreatureMana(player))
    setPlayerStorageValue(player, JAIL_SYS.storages.jailtime, (tonumber(t[2])*60) + os.time())
    addEvent(function()
        if isPlayer(player) then
            if isInPrision(player) then
                doKickPlayerFromPrision(player)
            end
        end
    end, (tonumber(t[2])*60*1000))
    return true
end]]></talkaction>
<globalevent name="JailBlockMana" interval="10000" event="script"><![CDATA[
domodlib('Jail_func')
function onThink(interval)
    if not JAIL_SYS.block_mana then return true end
    local players = getAllPlayersInPrisionArea()
    if #players > 0 then
        for _, pid in pairs(players) do
            local mana = getCreatureMana(pid)
            if mana > 0 then
                doCreatureAddMana(pid, -mana)
            end
        end
    end
    return true
end]]></globalevent>
</mod>

 

 

Configuração:

 

JAIL_SYS = {

    block_mana = true, -- 'true' para bloquear ganho de mana, 'false' para não bloquear

    prision_area = { -- área da prisão
    	fromPos = {x = 1, y = 1, z = 6}, -- posição do canto superior esquerdo (caso a prisão possua andares diferentes, aqui é o de menor 'z')
    	toPos = {x = 2, y = 2, z = 7} -- posição do canto inferior direito da área (caso a prisão possua andares diferentes, aqui é o de maior 'z')
  	},
    
    max_security_skulls = {SKULL_RED, SKULL_BLACK}, -- caso o player tenha essas skulls, irão para as 'celas de segurança máxima'
    
    jails_enter_positions = {
        ["NORMAL"] = { -- posições das celas normais
            [1] = {x = 1, y = 1, z = 1},
            [2] = {x = 1, y = 1, z = 1},
            [3] = {x = 1, y = 1, z = 1},
        },
        ["MAX_SECURITY"] = { -- posições das celas de segurança máxima
            [1] = {x = 1, y = 1, z = 1},
            [2] = {x = 1, y = 1, z = 1},
            [3] = {x = 1, y = 1, z = 1},
        },
    },
    
    storages = {jailtime = 76530} -- só modifique se necessário
}

 

Na linha: 

 

<globalevent name="JailBlockMana" interval="10000" event="script"><![CDATA[


Edite o 10000 (10 segundos) para o intervalo de tempo que todos da prisão terão a mana igual a 0.

 

Para utilizar o comando:

 

  • !jail Nome do player,tempo preso em minutos,levels perdidos

Ex.: !jail Dwarfer,2,1 <- Preso por 2 minutos e perderá 1 level

 

Contato:

 

Link para o post
Compartilhar em outros sites

@Dwarfer Perfeito!!! funcionando tudo redondinho ^^ 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo