cMonster::eType cMobSpawner::ChooseMobType(EMCSBiome a_Biome) { std::set<cMonster::eType> allowedMobs; if (a_Biome == biMushroomIsland || a_Biome == biMushroomShore) { addIfAllowed(cMonster::mtMooshroom, allowedMobs); } else if (a_Biome == biNether) { addIfAllowed(cMonster::mtGhast, allowedMobs); addIfAllowed(cMonster::mtZombiePigman, allowedMobs); addIfAllowed(cMonster::mtMagmaCube, allowedMobs); } else if (a_Biome == biEnd) { addIfAllowed(cMonster::mtEnderman, allowedMobs); } else { addIfAllowed(cMonster::mtBat, allowedMobs); addIfAllowed(cMonster::mtSpider, allowedMobs); addIfAllowed(cMonster::mtZombie, allowedMobs); addIfAllowed(cMonster::mtSkeleton, allowedMobs); addIfAllowed(cMonster::mtCreeper, allowedMobs); addIfAllowed(cMonster::mtSquid, allowedMobs); if (a_Biome != biDesert && a_Biome != biBeach && a_Biome != biOcean) { addIfAllowed(cMonster::mtSheep, allowedMobs); addIfAllowed(cMonster::mtPig, allowedMobs); addIfAllowed(cMonster::mtCow, allowedMobs); addIfAllowed(cMonster::mtChicken, allowedMobs); addIfAllowed(cMonster::mtEnderman, allowedMobs); addIfAllowed(cMonster::mtSlime, allowedMobs); // MG TODO : much more complicated rule if (a_Biome == biForest || a_Biome == biForestHills || a_Biome == biTaiga || a_Biome == biTaigaHills) { addIfAllowed(cMonster::mtWolf, allowedMobs); } else if (a_Biome == biJungle || a_Biome == biJungleHills) { addIfAllowed(cMonster::mtOcelot, allowedMobs); } } } int allowedMobsSize = allowedMobs.size(); if (allowedMobsSize > 0) { std::set<cMonster::eType>::iterator itr = allowedMobs.begin(); int iRandom = m_Random.NextInt(allowedMobsSize,a_Biome); for(int i = 0; i < iRandom; i++) { itr++; } return *itr; } return cMonster::mtInvalidType; }
eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome) { std::set<eMonsterType> allowedMobs; if ((a_Biome == biMushroomIsland) || (a_Biome == biMushroomShore)) { addIfAllowed(mtMooshroom, allowedMobs); } else if (a_Biome == biNether) { addIfAllowed(mtGhast, allowedMobs); addIfAllowed(mtZombiePigman, allowedMobs); addIfAllowed(mtMagmaCube, allowedMobs); } else if (a_Biome == biEnd) { addIfAllowed(mtEnderman, allowedMobs); } else { addIfAllowed(mtBat, allowedMobs); addIfAllowed(mtSpider, allowedMobs); addIfAllowed(mtZombie, allowedMobs); addIfAllowed(mtSkeleton, allowedMobs); addIfAllowed(mtCreeper, allowedMobs); addIfAllowed(mtSquid, allowedMobs); addIfAllowed(mtGuardian, allowedMobs); if ((a_Biome != biDesert) && (a_Biome != biBeach) && (a_Biome != biOcean)) { addIfAllowed(mtSheep, allowedMobs); addIfAllowed(mtPig, allowedMobs); addIfAllowed(mtCow, allowedMobs); addIfAllowed(mtChicken, allowedMobs); addIfAllowed(mtEnderman, allowedMobs); addIfAllowed(mtRabbit, allowedMobs); addIfAllowed(mtSlime, allowedMobs); // MG TODO : much more complicated rule if ((a_Biome == biForest) || (a_Biome == biForestHills) || (a_Biome == biTaiga) || (a_Biome == biTaigaHills)) { addIfAllowed(mtWolf, allowedMobs); } else if ((a_Biome == biJungle) || (a_Biome == biJungleHills)) { addIfAllowed(mtOcelot, allowedMobs); } } } size_t allowedMobsSize = allowedMobs.size(); if (allowedMobsSize > 0) { std::set<eMonsterType>::iterator itr = allowedMobs.begin(); int iRandom = m_Random.NextInt(static_cast<int>(allowedMobsSize)); for (int i = 0; i < iRandom; i++) { ++itr; } return *itr; } return mtInvalidType; }