Postado Agosto 7, 2018 7 anos 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 Projeto ATS (Naruto)Informações AbaixoFacebookYoutubeDiscord Tutoriais / ConteúdosClique Aqui
Postado Agosto 7, 2018 7 anos 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? [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Agosto 7, 2018 7 anos Autor @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 Projeto ATS (Naruto)Informações AbaixoFacebookYoutubeDiscord Tutoriais / ConteúdosClique Aqui
Postado Agosto 9, 2018 7 anos 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: Email: [email protected] Discord: Dwarfer#2715
Postado Agosto 9, 2018 7 anos Autor @Dwarfer Perfeito!!! funcionando tudo redondinho Projeto ATS (Naruto)Informações AbaixoFacebookYoutubeDiscord Tutoriais / ConteúdosClique Aqui
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.