Por frerety, 06 de mai. de 2006 em Linguagens de Programação
info
Grupo: Artesão
Registrado: 08/04/06
Posts: 133
Reputação: +7
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... 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
-- 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
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
maglevel = 20;
add:
inround = false;
Player.h
int premiumTicks;
bool inround;
Commands.cpp
bool Commands::enterInArena(Creature* c, const std::string &cmd, const std::string ¶m){ 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 ¶m);
bool enterInArena(Creature* c, const std::string &cmd, const std::string ¶m);
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!
Editado Fevereiro 2 por frerety
Grupo: Visconde
Registrado: 03/10/05
Posts: 301
Reputação: +8
Gênero: Masculino
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
info
Grupo: Artesão
Registrado: 08/04/06
Posts: 133
Reputação: +7
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...
Para desativar, digite "/arena off" e o player não será teleportado... 
BASEADO NO "CTF"
Config.lua
no final adicione:
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:
adicione:
Otserv.cpp
procure por:
embaixo adicione:
Player.cpp
em baixo de:
add:
Player.h
em baixo de:
add:
Commands.cpp
no final adicione:
bool Commands::enterInArena(Creature* c, const std::string &cmd, const std::string ¶m){ 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:
adicione:
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!
Editado Fevereiro 2 por frerety