Ir para conteúdo

[7.6] Rounds


Posts Recomendados

HiHo!

Esse code funciona assim: a cada X minutos os players que estiverem com o comando "/arena on" irão ir para um lugar determinado no config.lua... :bigsmile: Para desativar, digite "/arena off" e o player não será teleportado... ;):

BASEADO NO "CTF"

Config.lua

no final adicione:

------------------------------------ Round -------------------------------------

-- tempo gasto por cada round (1000 = 1 segundo) [aqui está como 15 minutos(1000*60*15)]

roundtime = 1000 * 60 * 15

-- qntidade de lugares

maps = 3

-- coordenada 1.x

map1x = 160

-- coordenada 1.y

map1y = 54

-- coordenada 1.z

map1z = 7

-- coordenada 2.x

map2x = 160

-- coordenada 2.y

map2y = 54

-- coordenada 2.z

map2z = 6

-- coordenada 3.x

map3x = 135

-- coordenada 3.y

map3y = 54

-- coordenada 3.z

map3z = 7

-- se você quizer pode adicionar + sem precisar compilar. Lembre-se de alterar o <maps> lah em cima

Game.cpp

no final adicione:

 

void Game::loadYur(){     war = 1;     maps = g_config.getGlobalNumber("maps", 1);     //Loading spawn pos     for(i=0; i < maps; i++){  std::stringstream ss;  ss << "map" << (i+1) << "x";     Coords0 = g_config.getGlobalNumber(ss.str().c_str());     ss.str("");  ss << "map" << (i+1) << "y";     Coords1 = g_config.getGlobalNumber(ss.str().c_str());     ss.str("");  ss << "map" << (i+1) << "z";     Coords2 = g_config.getGlobalNumber(ss.str().c_str());     ss.str("");     }     spawn.x = Coords0;     spawn.y = Coords1;     spawn.z = Coords2;     roundTime = g_config.getGlobalNumber("roundtime", 10*60*1000);startRound();}void Game::startRound(){     if (roundTime > 0){     std::stringstream ss;     std::string timestr;     timestr = changeTime();     ss << "Time left:" << timestr << ".";     AutoList<Player>::listiterator it = Player::listPlayer.list.begin();	for(;it != Player::listPlayer.list.end();++it)	{	(*it).second->sendTextMessage(MSG_SMALLINFO, ss.str().c_str());      }    roundTime -= 5000;    addEvent(makeTask(5000, boost::bind(&Game::startRound, this)));}elseresetRound();}std::string Game::changeTime(){            int minutes = 0;            int seconds = roundTime/1000;            while(seconds >= 60){            minutes++;            seconds -= 60;            }            std::stringstream ss;            ss << (minutes < 10 ? "(0" : "(") << minutes << ":" << (seconds < 10 ? "0" : "") << seconds << ")";            return ss.str().c_str();}void Game::resetRound(){     war += 1;     if (war > maps)     war = 1;     getNextCoords();        for(AutoList<Creature>::listiterator it = listCreature.list.begin(); it != listCreature.list.end(); ++it){        Player* player = dynamic_cast<Player*>((*it).second);        if(player && player->inround == true){        teleport(player, spawn);        }        }     roundTime = g_config.getGlobalNumber("roundtime", 10*60*1000);     startRound();}void Game::getNextCoords(){  std::stringstream aa;  aa << "map" << war << "x";     Coord0 = g_config.getGlobalNumber(aa.str().c_str());     aa.str("");  aa << "map" << war << "y";     Coord1 = g_config.getGlobalNumber(aa.str().c_str());     aa.str("");  aa << "map" << war << "z";     Coord2 = g_config.getGlobalNumber(aa.str().c_str());     aa.str("");     spawn.x = Coord0;     spawn.y = Coord1;     spawn.z = Coord2;}

 

Game.h

em baixo de:

void useWand(Creature *creature, Creature *attackedCreature, int wandid);

adicione:

 

    /*------ RoUnDs ------*/    void Game::loadYur();    void Game::startRound();    std::string Game::changeTime();    void Game::resetRound();    void Game::getNextCoords();        int war, maps, Coords0, Coords1, Coords2, i, Coord0, Coord1, Coord2, roundTime;    Position spawn;    /*------ RoUnDs ------*/

 

Otserv.cpp

procure por:

  accept_errors = 0;

embaixo adicione:

 

  g_game.loadYur();

 

Player.cpp

em baixo de:

    maglevel   = 20;

add:

 

    inround = false;

 

Player.h

em baixo de:

int premiumTicks;

add:

 

    bool inround;

 

Commands.cpp

no final adicione:

 

bool Commands::enterInArena(Creature* c, const std::string &cmd, const std::string &param){      Player* player = dynamic_cast<Player*>©;      if(param == "on")      {        player->inround = true;    	std::ostringstream info;  info << "Você está na arena. Para sair digite /arena off.";  player->sendTextMessage(MSG_BLUE_TEXT, info.str().c_str());      }      else if(param == "off")      {        player->inround = false;    std::ostringstream info;  info << "Você está fora da arena. Para entrar digite /arena on.";  player->sendTextMessage(MSG_BLUE_TEXT, info.str().c_str());      	game->teleport(c, c->masterPos);      }      else      {    std::ostringstream info;  info << "Comando errado. Para entrar na arena digite '/arena on' e para sair digite '/arena off'.";  player->sendTextMessage(MSG_BLUE_TEXT, info.str().c_str());    }}

 

Commands.h

depois de:

bool showPremmy(Creature* c, const std::string &cmd, const std::string &param);

adicione:

 

    bool enterInArena(Creature* c, const std::string &cmd, const std::string &param);

 

Agora recompile tudo (REBUILD ALL -> Ctrl + F11)...

Não se esqueça de colocar "/arena" no commands.xml!!!

Espero ter ajudado pelo menos alguém...

FlW

CyA!

Link para o comentário
Compartilhar em outros sites

aew

mt legal u code

deve ficar mt legal em servers de pvp fun

bom code

continue assim, seus codes ficam cada vez melhores

flws :bye:

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...