Ir para conteúdo

[Mod] - Prisão System


drakylucas

Posts Recomendados

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 por DrakyLucas
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

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?

Link para o comentário
Compartilhar em outros sites

  • 4 months later...

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 por digodigo2
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 2 months later...
  • 2 months later...
  • 2 weeks later...
×
×
  • Criar Novo...