DR

[Mod] - Prisão System

Por drakylucas, 11 de dez. de 2011 em Mods, funções e outros

otserv
tibia
script
5.0 (1)
11
3.4k
drakylucasD
11 de dezembro de 2011 às 14:50

Iae XTibianos, belezinha? =p

 

Bom, hoje não tinha nada para fazer, ninguém importante online no MSN, etc e já fazia tempo que não fazia nenhum script (até porque estudava dia inteiro, então não tinha tempo), resolvi fazer um sistema de prisão.

 

Como funciona?

 

Você, ADM ou GM de um servidor está cansado daqueles players enxerem saco, porém acha que não é um motivo que mereça uma punição severa como o banimento, pode utilizar esse sistema para prender o jogador por determinado tempo.

 

Exemplo de uso:

/prender Lucas,15

isso irá prender o jogador Lucas por 15 minutos.

 

Adicionando o Sistema ao seu servidor:

 

Primeiramete, na pasta raiz (onde fica o executável) do seu servidor, entre na pasta MODS

Copie qualquer ARQUIVO com extenção XML da pasta MODS e cole na mesma pasta, mudando o seu nome para prisao.xml

 

dentro do prisao.xml, coloque isso:

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Prisao System" version="1.0" author="Draky Lucas" contact="Forum XTIBIA" enabled="yes">
<config name="prisao_config"><![CDATA[
--------------- CONFIG --------------
config = {
pos = {x = 1000,y = 1000,z = 7}, -- posição do centro da cadeia [mapa]
storage = 27271, -- nao é necessario alterar [armazena o tempo da prisao em segundos]
}
function getTime(s) -- função by : mkalo
	local n = math.floor(s / 60)
	s = s - (60 * n)
	return n, s
end			
--------------- FIM CONFIG ---------------
]]></config>
	<talkaction words="/prender" access="3" event="buffer"><![CDATA[
	domodlib('prisao_config')
	local t = param:explode(",")
	local nome, tempo = t[1], tonumber(t[2])

	if nome and tempo then
			local guid = getPlayerGUIDByName(nome)or 0
			if isPlayer(guid) then
			   doPlayerSendTextMessage(guid,19,"Voce foi preso por "..tempo.. " minutos!")
			   doTeleportThing(guid,config.pos)
			   setPlayerStorageValue(guid,config.storage,os.time() + tempo*60)			  
			   doPlayerSendTextMessage(cid,19,"Voce prendeu o jogador "..nome.. " por "..minutos.." minutos")
			else
			   doPlayerSendCancel(cid,"O Jogador "..nome.." nao existe ou esta offline.")			  
			end	  
	else
		doPlayerSendTextMessage(cid,19,"Formato incorreto. \nPara prender alguem digite: /prender Nome_do_jogador,tempo_em_minutos")																  
	end
	return true
	]]></talkaction>

	<movevent type="StepIn" actionid="27271" event="buffer"><![CDATA[
	domodlib('prisao_config')

	if(os.time() < getPlayerStorageValue(cid,config.storage) then
	local minutos,segundos = getTime(getPlayerStorageValue(cid,config.storage) - os.time())
	doTeleportThing(cid, fromPosition, false)
	doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
	return doPlayerSendCancel(cid,"Espere mais "..minutos.." minuto(s) e "..segundos.." segundo(s) para poder sair da cadeia")
	end

 doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)))
 doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
 doPlayerSendTextMessage(cid,19,"Se cometer outro crime será punido mais severamente.")
 return true	  
 ]]></movevent>	
</mod>

 

Configurando:

Script:

No inicio do script, na parte de config, apenas altere a POSIÇÃO da prisão.

pos = {x = 1000,y = 1000,z = 7}, -- posição do centro da cadeia [mapa]

 

Mapa:

Crie uma prisão, todos os tiles protection-zone, coloque um piso diferente nela, e nesse piso coloque a ACTION ID 27271

_________________________________________________________

PS: Não tenho nenhum servidor aqui em casa, então pedi para um amigo testar e ele me falou que funcionou, qualquer erro poste que eu arrumo

 

PS²: Script exclusivo ao XTibia. Reportarei caso postem em outros fórums.

 

 

Créditos: Draky Lucas (pelo script) / MatheusMkalo (pela função getTime(s))

 

Postem as críticas ae ;P

aceito elogios e também xingamentos com fundamentos

vlw? =D

Editado Dezembro 11 por DrakyLucas

11 de dezembro de 2011 às 22:27

Script bastante simples. Seria mais interessante se ele fizesse a checagem por globalevents com uma table com todos os jogadores.

 

Enfim, parabéns pelo script. Até.

drakylucasD
12 de dezembro de 2011 às 18:30

Script bastante simples. Seria mais interessante se ele fizesse a checagem por globalevents com uma table com todos os jogadores.

 

Enfim, parabéns pelo script. Até.

 

sei la, tipo esse dae não vai causar lag pois o player preso vai te que pisa no quadrado pa sair, ja uma verificação de segundo em segundo ou minuto em minuto poderia causar lag em servidores muito cheios.

pq segundo em segundo ou minuto em minuto? pq tipo, o ADM pode colocar quanto tempo cada player fica na cadeia por sí só, entao um global event teria de contar esse tempo diferente pa cada jogador =p

O Que eu poderia fazer é um addEvent pa solta a pessoa automaticamente dps do tempo preso, só que se ela deslogar nao funcionaria [só se fizesse duas verificações, caso esteja online só teleporte e offline mude no banco de dados, só que acho do jeito que fiz mais facil e util =p]

 

enfim, vlw tb pela crítica =D

flw =D

vitorvvmV
13 de dezembro de 2011 às 14:06

perfeito... simples mas mesmo assim muito funcional... estava precisando de uma prisão mesmo... para tirar o /ban e o /unban...

 

OBRIGADO POR TRAZER AO XTIBIA...

15 de dezembro de 2011 às 00:14

legal muito funcional e facil de instalar ainda alem de tudo em mods parabens exelente sistema

3 meses depois...
LucasToadL
01 de março de 2012 às 15:06

Po eu não consegui... fiz tudo certinho. na hora de abrir o serve da um erro, porém o server inicia mesmo assim

 

[Error - ScriptingManager: :LoadFromXml] cannot load mod mods/prisao.xml

Line: 6 Info: Input is not proper UTF-8, indicate encoding !

Bytes: 0xE7 0xE3 0x6F 0x20

 

será que alguem pode me ajudar?

4 meses depois...
digodigo2D
03 de julho de 2012 às 00:42

aqui da Erro

 

<div>Loading Prisao System.xml...[Error - ScriptingManager::loadFromXml] Cannot load mod mods/Prisao System.xml</div>

<div>[03/07/2012 00:40:02] Line: 5, Info: Input is not proper UTF-8, indicate encoding !</div>

<div>[03/07/2012 00:40:02] Bytes: 0xE7 0xE3 0x6F 0x20</div>

Editado Julho 3 por digodigo2

1 mês depois...
rickynhowR
05 de agosto de 2012 às 17:18

Funciona em Poketibia?

3 meses depois...
7585947
04 de novembro de 2012 às 13:56

Teria como acrescentar o motivo? ex: /prender malko,15,cavebot

2 meses depois...
fenixfoxF
25 de janeiro de 2013 às 15:49

veio me explica aonde eu coloco essa pasta se pude Teria como acrescentar o motivo? ex: /prender malko,15,cavebot fazendo favor

1 mês depois...
MateusBrasilM
04 de fevereiro de 2013 às 13:33

Cara não funfa da erro no ecoding, meu server v8.60, da pra ajudar urgentemente.