[7.9] Prison System

lews
Por lews
em Linguagens de Programação
  • 1
  • 2

lews

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/03/07Posts: 16

Esse code é pra mandar pra prisão o cara q matar mta gente. O pk pode sair da cadeia falando !leaveprison quando sumir a red skull.

Quando o player estiver na cadeia, o masterPos (temple) dele é a cadeia. Portanto vc pode por monstros e áreas non-pz lá.

 

Feito no Evolutions 0.7.6a (SVN de 03 de fevereiro de 2007) por Lews.

 

Obs.: se você não tem os mods que fazer o player ser banido ao matar mta gente, use do xidaozu (evolutions). =P

 

O resto pra baixo vai em ingles msm...

 

 

//CONFIGMANAGER.CPP

//on the loadfile add:

#ifdef __LEWS_PRISON__
m_confInteger[PRISONX] = getGlobalNumber(L, "prisonx", 100);
m_confInteger[PRISONY] = getGlobalNumber(L, "prisony", 100);
m_confInteger[PRISONZ] = getGlobalNumber(L, "prisonz", 7);
m_confInteger[LEAVEPRISONX] = getGlobalNumber(L, "leaveprisonx", 100);
m_confInteger[LEAVEPRISONY] = getGlobalNumber(L, "leaveprisony", 100);
m_confInteger[LEAVEPRISONZ] = getGlobalNumber(L, "leaveprisonz", 7);
#endif

 

 

//CONFIGMANAGER.H

//declare the integer:

#ifdef __LEWS_PRISON__
PRISONX,
PRISONY,
PRISONZ,
LEAVEPRISONX,
LEAVEPRISONY,
LEAVEPRISONZ,
#endif

 

 

//PLAYER.CPP

//where you have "if(redSkullTicks >= g_config.getNumber(ConfigManager::BAN_UNJUST) * g_config.getNumber(ConfigManager::FRAG_TIME)){", replace:

g_bans.addPlayerBan(getName(), std::time(NULL) + g_config.getNumber(ConfigManager::BAN_TIME), "excessive unjustifed player killing");
kickPlayer();

//with this:

#ifdef __LEWS_PRISON__
Position prisonPos;
prisonPos.x = g_config.getNumber(ConfigManager::PRISONX);
prisonPos.y = g_config.getNumber(ConfigManager::PRISONY);
prisonPos.z = g_config.getNumber(ConfigManager::PRISONZ);

if(g_game.internalTeleport(this, prisonPos) == RET_NOERROR){
g_game.addMagicEffect(prisonPos, NM_ME_ENERGY_AREA);
this->masterPos = prisonPos;
this->removeCondition(CONDITION_INFIGHT);
this->sendTextMessage(MSG_STATUS_WARNING, "You were arrested. Say !leaveprison to leave.");
}
#else
g_bans.addPlayerBan(getName(), std::time(NULL) + g_config.getNumber(ConfigManager::BAN_TIME), "excessive unjustifed player killing");
kickPlayer();
#endif

 

 

//COMANDS.CPP

//on the table of commands add:

#ifdef __LEWS_PRISON__
{"!leaveprison", &Commands::leavePrison},
{"/arrest", &Commands::sendToPrison},
#endif

 

 

//at the end of the file add:

#ifdef __LEWS_PRISON__
bool Commands::leavePrison(Creature* creature, const std::string& cmd, const std::string& param)
{
Player* player = creature->getPlayer();
Position prisonPos;
prisonPos.x = g_config.getNumber(ConfigManager::PRISONX);
prisonPos.y = g_config.getNumber(ConfigManager::PRISONY);
prisonPos.z = g_config.getNumber(ConfigManager::PRISONZ);

if(player && player->masterPos == prisonPos){
	//if(player->redSkullTicks > 0){
	if(player->skull == SKULL_RED){

		std::ostringstream info;
		info << "You can leave in " <<  tickstr(player->redSkullTicks) << ".";

		player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, info.str().c_str());
		return false;
	}
	else {
		Position leaveprisonPos;
		leaveprisonPos.x = g_config.getNumber(ConfigManager::LEAVEPRISONX);
		leaveprisonPos.y = g_config.getNumber(ConfigManager::LEAVEPRISONY);
		leaveprisonPos.z = g_config.getNumber(ConfigManager::LEAVEPRISONZ);
		   Tile* tile = g_game.getTile(leaveprisonPos.x, leaveprisonPos.y, leaveprisonPos.z);		
		if(tile && tile->creatures.size() != 0){
			leaveprisonPos.x++;
		}
		if(g_game.internalTeleport(player, leaveprisonPos) == RET_NOERROR){
			g_game.addMagicEffect(leaveprisonPos, NM_ME_ENERGY_AREA);
			player->masterPos = leaveprisonPos;
		}
		return true;
	}
}
else {
	 player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "You are not in the prison.");
	 return false;
}
}

bool Commands::sendToPrison(Creature* creature, const std::string& cmd, const std::string& param)
{
Player* caster = creature->getPlayer();
Position prisonPos;
prisonPos.x = g_config.getNumber(ConfigManager::PRISONX);
prisonPos.y = g_config.getNumber(ConfigManager::PRISONY);
prisonPos.z = g_config.getNumber(ConfigManager::PRISONZ);
std::string name;
std::istringstream in(param.c_str());

std::getline(in, name, ',');
in >> prisonPos.x >> prisonPos.y >> prisonPos.z;	

Tile* tile = g_game.getTile(prisonPos.x, prisonPos.y, prisonPos.z);		
if(tile && tile->creatures.size() != 0){
	prisonPos.x++;
}

if(Player* player = g_game.getPlayerByName(name)){
	if(g_game.internalTeleport(player, prisonPos) == RET_NOERROR){
		g_game.addMagicEffect(prisonPos, NM_ME_ENERGY_AREA);
		player->redSkullTicks = (g_config.getNumber(ConfigManager::BAN_UNJUST) * g_config.getNumber(ConfigManager::FRAG_TIME));
		g_game.changeSkull(player, SKULL_RED);
		player->masterPos = prisonPos;
		player->removeCondition(CONDITION_INFIGHT);

		std::stringstream warning;
		warning << "You were arrested by " << caster->getName() <<". Say !leaveprison to leave.";
		player->sendTextMessage(MSG_STATUS_WARNING, warning.str());
		return true;
	}
}

return false;
}
#endif

 

 

//COMANDS.H

//declare the command:

#ifdef __LEWS_PRISON__
bool leavePrison(Creature* creature, const std::string& cmd, const std::string& param);
bool sendToPrison(Creature* creature, const std::string& cmd, const std::string& param);
#endif

 

 

//CONFIG.LUA

//add this:

-- the coordinate that the player will be teleported if prison system is enabled
prisonx = 100
prisony = 100
prisonz = 7

-- the coordinate that the player will be teleported when he leaves the prison
leaveprisonx = 100
leaveprisony = 100
leaveprisonz = 7

 

 

//COMMANDS.XML

<command cmd="!leaveprison"	access="0" />
<command cmd="/arrest" 		access="3" />

 

 

//Code by Lews.

 

 

Edit: comando para mandar players para a prisão adicionado (/arrest nomedoplayer).


Do you remember Hell Server?

New Hell Server
Em 2007 você vai pro inferno, acredite!
http://www.xtibia.com/forum/index.php?showtopic=45968
http://www.xtibia.com/forum/index.php?showtopic=47692

...
Download do antigo Hell Server 1.2:
http://www.xtibia.com/forum/index.php?showtopic=44323

lithium

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 04/09/06Posts: 190

parabéns code muito bom o.O espero que funcione vo testar aqui!

Sky Hunter

avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 03/10/06Posts: 227

Bom trabalho, vou falar com o ta4e pra eles colocarem isso na próxima versão do Zorzin.

[Usuário banido por comportamento destrutivo]

XPaulo

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 10/02/07Posts: 129

Parabens mas min diga uma coisa.

para colocar o player na prision utiliza algun comando? como faz?

(¯`·._.·[ Regras ]·._.·´¯)
(¯`·._.·[ Lista de Servidores ]·._.·´¯)
(¯`·._.·[ Notícias ]·._.·´¯)
(¯`·._.·[Recomende o XTibia]·._.·´¯)

lews

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/03/07Posts: 16

esse code eh pro player ser enviado pra prisao automaticamente qndo ele mata + q o numero maximo permitido... tp, eh pra em vez de banir, soh prender o player...

 

hm, gostei da ideia... vo fazer um comando pra mandar players pra cadeia tbm :p


Do you remember Hell Server?

New Hell Server
Em 2007 você vai pro inferno, acredite!
http://www.xtibia.com/forum/index.php?showtopic=45968
http://www.xtibia.com/forum/index.php?showtopic=47692

...
Download do antigo Hell Server 1.2:
http://www.xtibia.com/forum/index.php?showtopic=44323

Dr0p

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/12/05Posts: 6

posta o código do evolutions pow

lews

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/03/07Posts: 16

@Dr0p

pega as sources do evolutions e procura os __XID_CVS_MODS__ q são relacionados com o skull system ;)

 

@topico

code atualizado: agora com comando para enviar players para a prisão.


Do you remember Hell Server?

New Hell Server
Em 2007 você vai pro inferno, acredite!
http://www.xtibia.com/forum/index.php?showtopic=45968
http://www.xtibia.com/forum/index.php?showtopic=47692

...
Download do antigo Hell Server 1.2:
http://www.xtibia.com/forum/index.php?showtopic=44323

Jackson Zani

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 25/02/07Posts: 84

Ótimo code!

Como sempre se superando! hehehe

Testado 100% na versão 0.7.6a e 0.7.7 do evolutions.

Abraços!

Todos direitos reservados® Administrador - Medieval Works 2009.

Dr0p

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/12/05Posts: 6

se eu pegar o code deles, provavelmente vai dar erro, porque eu to usando o cvs :/

mais eu vejo aqui

suboras

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 28/10/05Posts: 91

if(g_game.internalTeleport(this, prisonPos) == RET_NOERROR){
g_game.addMagicEffect(prisonPos, NM_ME_ENERGY_AREA);
this->masterPos = prisonPos;
this->removeCondition(CONDITION_INFIGHT);
this->sendTextMessage(MSG_STATUS_WARNING, "You were arrested. Say !leaveprison to leave.");
}
[quote]#else[/quote]
g_bans.addPlayerBan(getName(), std::time(NULL) + g_config.getNumber(ConfigManager::BAN_TIME), "excessive unjustifed player killing");
kickPlayer();
#endif

 

akele #else, eh assim msm? ou eh else? e vc coloko o "#" sem querer?

e tpw, nao tem q add nada la em "alt+p" ?

pq fiz aki e tals, naum diz q deu erro, porem ele diz q desconhece o comando o !leave~ e o /arrest... =/

ai eu add la em "alt+p" o: /arrest PLAYER, CORDENADAS funfa certin, porem o evolutions 0.7.6a, tem um bug, la no config.lua esta 3 injust pra red, sendo q o char soh pega red com 4 injust, msm coisa com ban, esta 6 e soh eh ban com 7 ¬¬

 

Bom voltando ao assunto ;X... com o "#else", o char mata 7 injust, e eh ban...

com o "else" o char vai matando e matando nao pega ban e nao eh teleportado para o local la no config.lua (1000 1000 6, map evo, seria em cima do templo (soh pra test), ai eu falo /arrest blabla.. o char eh teleportado para a cordenada escolhida, fik red e tals.. mais ai eu vo la com o xar e falo "!leaveprison" e diz assim: "You are not in the prison."

 

Se vc puder me ajudar, eu agradeço =D

PS: poderia me mandar uma mp/pm ? agradeço =)

//Suboras

~~ SµßØ®åS 7H3 3RVA5 ~~

§···x···§ -~> :þ Open Tibia Server :þ <-~ §···x···§

:.?¿.:Duvidas:.¿?.: {&} :.!¡.:Contatos:.!¡.:
>·>·>·> suboras@hotmail.com <·<·<·<
_-¯_-¯_-¯_-¯_-¯ [ou] ¯-_¯-_¯-_¯-_¯-_
¥ õ Msn: suboras@hotmail.com õ ¥
¯-_-¯-_-¯-_-¯-_ [»«] _-¯-_-¯-_-¯-_-¯


§···x···§ -~> I remember u ... <-~ §···x···§

Open Tibia Serve Tutos & Codes ««»» Trabalhos ««»»
Comando, "!premium" -> http://www.xtibia.com/forum/index.php?showtopic=45395

Comando, "/pum" -> http://www.xtibia.com/forum/index.php?showtopic=45539


<- ACTION DO DADO (DICE), IGUAL TIBIA GLOBAL (PERFEITA) ->
http://www.xtibia.com/forum/index.php?showtopic=46671


Atenciosamente :
________________________
~-> SµßØ®åS <-~
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

lews

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/03/07Posts: 16

suboras,

1. o #else tá certo. akilo significa q se nao tiver definido o prison system o char vai ser banido...

#ifdef __LEWS_PRISON__
Position prisonPos;
prisonPos.x = g_config.getNumber(ConfigManager::PRISONX);
prisonPos.y = g_config.getNumber(ConfigManager::PRISONY);
prisonPos.z = g_config.getNumber(ConfigManager::PRISONZ);

if(g_game.internalTeleport(this, prisonPos) == RET_NOERROR){
g_game.addMagicEffect(prisonPos, NM_ME_ENERGY_AREA);
this->masterPos = prisonPos;
this->removeCondition(CONDITION_INFIGHT);
this->sendTextMessage(MSG_STATUS_WARNING, "You were arrested. Say !leaveprison to leave.");
}
#else
g_bans.addPlayerBan(getName(), std::time(NULL) + g_config.getNumber(ConfigManager::BAN_TIME), "excessive unjustifed player killing");
kickPlayer();
#endif

 

2. lá em Parameters tem que add soh -D__LEWS_PRISON__

 

3. vc tem q por os comandos lá no commands.xml q ta na pasta data e pra usar o Arrest é soh /arrest nomedoplayer

 

 

axo q eh soh...

qq coisa posta ae dnv ;)


Do you remember Hell Server?

New Hell Server
Em 2007 você vai pro inferno, acredite!
http://www.xtibia.com/forum/index.php?showtopic=45968
http://www.xtibia.com/forum/index.php?showtopic=47692

...
Download do antigo Hell Server 1.2:
http://www.xtibia.com/forum/index.php?showtopic=44323

suboras

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 28/10/05Posts: 91

Rox MLK.. xD

Eu devo ter feito algo errado...

PS: nao deu nenhum erro.. o.O~

e eu tava testando no evo 0.7.6a

Testado no 0.7.7...

APROVADO XD

 

Rox.. vlws =*

 

//Suboras

~~ SµßØ®åS 7H3 3RVA5 ~~

§···x···§ -~> :þ Open Tibia Server :þ <-~ §···x···§

:.?¿.:Duvidas:.¿?.: {&} :.!¡.:Contatos:.!¡.:
>·>·>·> suboras@hotmail.com <·<·<·<
_-¯_-¯_-¯_-¯_-¯ [ou] ¯-_¯-_¯-_¯-_¯-_
¥ õ Msn: suboras@hotmail.com õ ¥
¯-_-¯-_-¯-_-¯-_ [»«] _-¯-_-¯-_-¯-_-¯


§···x···§ -~> I remember u ... <-~ §···x···§

Open Tibia Serve Tutos & Codes ««»» Trabalhos ««»»
Comando, "!premium" -> http://www.xtibia.com/forum/index.php?showtopic=45395

Comando, "/pum" -> http://www.xtibia.com/forum/index.php?showtopic=45539


<- ACTION DO DADO (DICE), IGUAL TIBIA GLOBAL (PERFEITA) ->
http://www.xtibia.com/forum/index.php?showtopic=46671


Atenciosamente :
________________________
~-> SµßØ®åS <-~
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

God Anthyrax

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 07/04/07Posts: 61

ow aki eu to usando o

 

Evolutions 0.7.8 XML

 

e nun ta dando certo

pq?

 

abraços

Net XD







kafetao

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/07/07Posts: 12

funcionou no meu evolutions 7.8 ver 7.92

  • 1
  • 2