Esempio n. 1
0
bool Spawn::spawnMonster(uint32_t spawnId, MonsterType* mType, const Position& pos, Direction dir, bool startup /*= false*/)
{
	std::unique_ptr<Monster> monster_ptr(new Monster(mType));
	if (startup) {
		//No need to send out events to the surrounding since there is no one out there to listen!
		if (!g_game.internalPlaceCreature(monster_ptr.get(), pos, true)) {
			return false;
		}
	} else {
		if (!g_game.placeCreature(monster_ptr.get(), pos, false, true)) {
			return false;
		}
	}

	Monster* monster = monster_ptr.release();
	monster->setDirection(dir);
	monster->setSpawn(this);
	monster->setMasterPos(pos);
	monster->incrementReferenceCounter();

	spawnedMap.insert(spawned_pair(spawnId, monster));
	spawnMap[spawnId].lastSpawn = OTSYS_TIME();
	return true;
}
Esempio n. 2
0
bool Spawn::spawnMonster(uint32_t spawnId, MonsterType* mType, const Position& pos, Direction dir, bool startup /*= false*/)
{
	std::unique_ptr<Monster> monster_ptr(new Monster(mType));

	//add por jose eduardo
	Monster* monsterPk = monster_ptr.get();
	int genderRang = monsterPk->getGenderRange();
	if (genderRang == 0){ // random
		int gendeR = uniform_random(1, 2);
		if (gendeR == 1){
			monsterPk->setSkull(SKULL_FEMALE);
		}
		else{
			monsterPk->setSkull(SKULL_MALE);
		}
	}
	else if (genderRang == 1){ // male
		monsterPk->setSkull(SKULL_MALE);
	}
	else if (genderRang == 2){ // female
		monsterPk->setSkull(SKULL_FEMALE);
	}
	else if (genderRang == 3){ // undefined
		monsterPk->setSkull(SKULL_UNDEFINED);
	}

	int levelPoke = uniform_random(monsterPk->getMaxLevel(), monsterPk->getMinLevel());
	monsterPk->name = monsterPk->name + " [" + std::to_string(levelPoke) + "]";

	int Health = (levelPoke / 2)*monsterPk->getMaxHealth();
	monsterPk->changeHealth(Health, false);
	
	int shinyR = uniform_random(1, 100);
	if (shinyR == 75){
		monsterPk->switchShiny(true);
	}else{
		monsterPk->switchShiny(false);
	}
	//add Jose Eduardo

	if (startup) {
		//No need to send out events to the surrounding since there is no one out there to listen!
		if (!g_game.internalPlaceCreature(monster_ptr.get(), pos, true)) {
			return false;
		}
	} else {
		if (!g_game.placeCreature(monster_ptr.get(), pos, false, true)) {
			return false;
		}
	}

	Monster* monster = monster_ptr.release();
	monster->setDirection(dir);
	monster->setSpawn(this);
	monster->setMasterPos(pos, radius);
	monster->useThing2();

	spawnedMap.insert(spawned_pair(spawnId, monster));
	spawnMap[spawnId].lastSpawn = OTSYS_TIME();

	return true;
}