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