static void spawn(Character *from, MonsterClass *specy, int nb) { MapComposite *map = from->getMap(); const Point &pos = from->getPosition(); for (int i = 0; i < nb; ++i) { Being *monster = new Monster(specy); monster->setMap(map); monster->setPosition(pos); monster->clearDestination(); if (!GameState::insertSafe(monster)) { // The map is full. Break out. break; } } }
static void handleSpawn(Character *player, std::string &args) { MonsterClass *mc; MapComposite *map = player->getMap(); const Point &pos = player->getPosition(); int value = 0; // get the arguments std::string monsterclass = getArgument(args); std::string valuestr = getArgument(args); // check all arguments are there if (monsterclass.empty()) { say("Invalid amount of arguments given.", player); say("Usage: @spawn <monster> [number]", player); return; } // identify the monster type if (utils::isNumeric(monsterclass)) { int id = utils::stringToInt(monsterclass); mc = monsterManager->getMonster(id); } else { mc = monsterManager->getMonsterByName(monsterclass); } // check for valid monster if (!mc) { say("Invalid monster", player); return; } //identify the amount if (valuestr.empty()) { value = 1; } else if (utils::isNumeric(valuestr)) { value = utils::stringToInt(valuestr); } // check for valid amount if (value <= 0) { say("Invalid number of monsters", player); return; } // create the monsters and put them on the map for (int i = 0; i < value; ++i) { Being *monster = new Monster(mc); monster->setMap(map); monster->setPosition(pos); monster->clearDestination(); if (!GameState::insertOrDelete(monster)) { // The map is full. Break out. break; } // log transaction std::string msg = "User created monster " + monster->getName(); accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_SPAWN, msg); } }