Ir para conteúdo

[7.9] Prison System


lews

Posts Recomendados

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).

Editado por Lews
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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 ;)

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • 3 months later...
  • 1 month later...
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...