Exemplo n.º 1
0
int 
xPathFind::startPath(float sx, float sy, float ex, float ey, int zflag)
{
  xPathZone * a;
  xPathZone * b;
  
  a = getZone(sx, sy);
  b = getZone(ex, ey);
  
  if (a == 0) { return -1; } //no start
  if (b == 0) { return -2; } //no goal
  if (a == b) { return 0; } //same zone
  if (a->group != b->group) { return -99; } //unreachable
  

  zoneFlag = zflag;

  startx = sx;
  starty = sy;
  
  endx = ex;
  endy = ey;
  
  startPath2(a, b);
  
  return 1;
}//startpath
void TangibleObjectImplementation::broadcastPvpStatusBitmask() {
	if (getZone() == NULL)
			return;

	if (closeobjects != NULL) {
		Zone* zone = getZone();

		CreatureObject* thisCreo = asCreatureObject();

		SortedVector<ManagedReference<QuadTreeEntry*> > closeObjects(closeobjects->size(), 10);

		closeobjects->safeCopyTo(closeObjects);

		for (int i = 0; i < closeObjects.size(); ++i) {
			SceneObject* obj = cast<SceneObject*>(closeObjects.get(i).get());

			if (obj != NULL && obj->isCreatureObject()) {
				CreatureObject* creo = obj->asCreatureObject();

				sendPvpStatusTo(creo);

				if (thisCreo != NULL)
					creo->sendPvpStatusTo(thisCreo);
			}

		}
	}
}
int SceneObjectImplementation::inRangeObjects(unsigned int gameObjectType, float range) {
	if (getZone() == NULL)
		return 0;

	int numberOfObjects = 0;

	Locker zoneLocker(getZone());

	SortedVector<ManagedReference<QuadTreeEntry*> > closeSceneObjects;
	int maxInRangeObjectCount = 0;

	if (closeobjects == NULL) {
		info("Null closeobjects vector in SceneObjectImplementation::inRangeObjects", true);
		zone->getInRangeObjects(getPositionX(), getPositionY(), range, &closeSceneObjects, true);

		maxInRangeObjectCount = closeSceneObjects.size();
	} else
		maxInRangeObjectCount = closeobjects->size();

	for (int i = 0; i < maxInRangeObjectCount; ++i) {
		SceneObject* scno;

		if (closeobjects != NULL)
			scno = cast<SceneObject*>( closeobjects->get(i).get());
		else
			scno = cast<SceneObject*>(closeSceneObjects.get(i).get());

		if (scno->isInRange(_this.get(), range) && scno->getGameObjectType() == gameObjectType)
			++numberOfObjects;
	}

	return numberOfObjects;
}
Exemplo n.º 4
0
int l_Zone_eq(lua_State* L)
{
	Zone* zone1 = getZone(L, 1);
	Zone* zone2 = getZone(L, 2);
	lua_pushboolean(L, zone1 == zone2);
	return 1;
}
Exemplo n.º 5
0
bool Trigger::playerIsInProximity(OBJECT_ID &player) const
{
	for(size_t i=0; i<getZone().getNumOfPlayers(); ++i)
	{
		const Actor &a = getZone().getPlayer(i);

		const ActorSet &s = getZone().getObjects();

		if(!zombie && !a.zombie && s.isMember(a.m_ID))
		{
			vec3 delta = getPos() - a.getPos();
			delta.y=0;

			// The minimum distance before a trigger event occurs
			float minDist = (triggerRadius + a.getCylinderRadius());

			// The distance separating the two cylinders
			float realDist = delta.getMagnitude() - minDist;

			// Has an intersection occurred?
			if(realDist < 0.0f)
			{
				player = a.m_ID;
				return true;
			}
		}
	}

	return false;
}
Exemplo n.º 6
0
bool Tile::isSwimmingPool(bool checkPz /*= true*/) const
{
	if(TrashHolder* trashHolder = getTrashHolder())
		return trashHolder->getEffect() == MAGIC_EFFECT_LOSE_ENERGY && (!checkPz ||
			getZone() == ZONE_PROTECTION || getZone() == ZONE_NOPVP);

	return false;
}
bool SceneObjectImplementation::isInWater() {
	if (getZone() == NULL) {
		error("Zone is NULL SceneObjectImplementation::isInWater");
		return false;
	}

	ManagedReference<PlanetManager*> planetManager = getZone()->getPlanetManager();

	if (planetManager == NULL) {
		error("Unable to get PlanetManager SceneObjectImplementation::isInWater");
		return false;
	}

	return planetManager->isInWater(getPositionX(), getPositionY());
}
Exemplo n.º 8
0
CMapRoom::CMapRoom(CMapManager *manager,QRect rect,CMapLevel *level) : CMapElement(manager,rect,level)
{
  color = QColor(192,192,192);
  useDefaultCol = true;
  login = false;
  label = "";
  labelPosition = HIDE;
  description = "";
  current = false;
  getZone()->m_room_id_count=getZone()->m_room_id_count+1;
  m_ID = getZone()->m_room_id_count;

  level->getRoomList()->append(this);

  textRemove();
}
Exemplo n.º 9
0
Arquivo: query.hpp Projeto: cawka/ndns
 bool
 operator==(const Query& other) const
 {
   return (getHint() == other.getHint() && getZone() == other.getZone() &&
     getQueryType() == other.getQueryType() && getRrLabel() == other.getRrLabel() &&
     getRrType() == other.getRrType());
 }
Exemplo n.º 10
0
bool Bullet::isInProximity(OBJECT_ID actor, float triggerRadius) const
{
	const ActorSet &s = getZone().getObjects();

	if(zombie || !s.isMember(actor))
		return false;

	const Actor &a = s.get(actor);

	const Creature *creature = dynamic_cast<const Creature*>(s.getPtr(actor));

	/*
	Only accept actors that are not slated for deletion.
	If the actor is also a creature, then only accept it if its alive
	*/
	if(  !a.zombie && (creature==0 || (creature!=0 && creature->isAlive()))  )
	{
		float minDist = (triggerRadius + a.getCylinderRadius());
		float realDist = getDistance(this, a) - minDist;
		if(realDist < 0.0f)
		{
			return true;
		}
	}

	return false;
}
Exemplo n.º 11
0
void Spawn::onTrigger(void)
{
	if(triggeredOnce) return;

	int numMonsters = (minMonsters==maxMonsters) ? minMonsters : IRAND_RANGE(minMonsters, maxMonsters);

	ActorSet &s = getZone().getObjects();

	if(numMonsters==1)
	{
		s.spawn(monsterDataFile, getPos());
	}
	else
	{
		float radius = (separationDistance*numMonsters) / (2*(float)M_PI);

		for(int i=0; i<numMonsters; ++i)
		{
			float angle = 2.0f*i*(float)M_PI/numMonsters;

			vec3 spawnPoint = vec3(cosf(angle), 0, sinf(angle))*radius + getPos();
			spawnPoint.y = 0.0f; // flatten
			s.spawn(monsterDataFile, spawnPoint);
		}
	}

	triggeredOnce = true;
}
int TicketCollectorImplementation::handleObjectMenuSelect(CreatureObject* player, byte selectedID) {
	if (selectedID == 20) {
		player->executeObjectControllerAction(0x5DCD41A2); //boardShuttle
	} else if (selectedID == 193 && JediManager::instance()->getJediProgressionType() == JediManager::VILLAGEJEDIPROGRESSION) {
		Zone* thisZone = getZone();

		if (thisZone == NULL)
			return 0;

		ManagedReference<PlanetManager*> planetManager = thisZone->getPlanetManager();

		if (planetManager == NULL)
			return 0;

		PlanetTravelPoint* ptp = planetManager->getNearestPlanetTravelPoint(_this.getReferenceUnsafeStaticCast(), 64.f);

		if (ptp != NULL && ptp->isInterplanetary()) {
			PlayerObject* ghost = player->getPlayerObject();

			if (ghost != NULL && ghost->hasActiveQuestBitSet(PlayerQuestData::FS_CRAFTING4_QUEST_03) && !ghost->hasCompletedQuestsBitSet(PlayerQuestData::FS_CRAFTING4_QUEST_03)) {
				Lua* lua = DirectorManager::instance()->getLuaInstance();
				Reference<LuaFunction*> luaObtainData = lua->createFunction("FsCrafting4", "obtainSatelliteData", 0);
				*luaObtainData << player;
				*luaObtainData << _this.getReferenceUnsafeStaticCast();

				luaObtainData->callFunction();
			}
		}
	}

	return 0;
}
void InstallationObjectImplementation::broadcastMessage(BasePacket* message, bool sendSelf) {
	Zone* zone = getZone();

	if (zone == NULL)
		return;

	Locker zoneLocker(zone);

	SortedVector<ManagedReference<QuadTreeEntry*> > closeSceneObjects;
	zone->getInRangeObjects(getPositionX(), getPositionY(), 512, &closeSceneObjects, false);

	for (int i = 0; i < closeSceneObjects.size(); ++i) {
		ManagedReference<SceneObject*> scno = cast<SceneObject*>( closeSceneObjects.get(i).get());

		if (!sendSelf && scno == _this.get())
			continue;

		if(!scno->isPlayerCreature())
			continue;

		CreatureObject* creo = cast<CreatureObject*>( scno.get());

		if(isOnAdminList(creo))
			scno->sendMessage(message->clone());
	}

	delete message;
}
void CityRegionImplementation::notifyLoadFromDatabase() {
	ManagedObjectImplementation::notifyLoadFromDatabase();

	if (cityRank == CityManager::CLIENT)
		return;

	if (cityRank < CityManager::TOWNSHIP) {
		citySpecialization = "";
	}

	Zone* zone = getZone();

	if (zone == NULL)
		return;

	zone->addCityRegionToUpdate(_this.get());

	if (isRegistered())
		zone->getPlanetManager()->addRegion(_this.get());

	//Add taxes if they dont exist.
	if (taxes.size() <= 0) {
		info("Adding taxes for existing city that had no taxes.", true);
		taxes.add(0);
		taxes.add(0);
		taxes.add(0);
		taxes.add(0);
		taxes.add(0);
	}
}
void PetControlDeviceImplementation::destroyObjectFromDatabase(bool destroyContainedObjects) {
	ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();

	if (controlledObject != NULL) {
		Locker locker(controlledObject);

		ManagedReference<CreatureObject*> object = controlledObject->getSlottedObject("rider").castTo<CreatureObject*>();

		if (object != NULL) {
			Locker clocker(object, controlledObject);

			object->executeObjectControllerAction(STRING_HASHCODE("dismount"));

			object = controlledObject->getSlottedObject("rider").castTo<CreatureObject*>();

			if (object != NULL) {
				controlledObject->removeObject(object, NULL, true);

				Zone* zone = getZone();

				if (zone != NULL)
					zone->transferObject(object, -1, false);
			}
		}

		controlledObject->destroyObjectFromDatabase(true);
	}

	IntangibleObjectImplementation::destroyObjectFromDatabase(destroyContainedObjects);
}
Exemplo n.º 16
0
int l_Zone_isTileInside(lua_State* L)
{
	Zone* zone = getZone(L, 1);
	Tile* tile = static_cast<Tile*>(lua_touserdata(L, 2));
	lua_pushboolean(L, zone->isTileInside(tile));
	return 1;
}
Exemplo n.º 17
0
void NormalEmitter::generateVelocity(Particle& particle, float speed) const
{
	if( inverted ) 
		speed = -speed;
	const Zone* zone = (normalZone == NULL ? getZone() : normalZone);
	particle.velocity() = zone->computeNormal(particle.position()) * speed;
}
void InstallationObjectImplementation::setActiveResource(ResourceContainer* container) {

	Time timeToWorkTill;

	if (resourceHopper.size() == 0) {
		addResourceToHopper(container);
		currentSpawn = container->getSpawnObject();

		spawnDensity = currentSpawn->getDensityAt(getZone()->getZoneName(), getPositionX(), getPositionY());

		return;
	}

	updateInstallationWork();

	int i = 0;
	for (; i < resourceHopper.size(); ++i) {
		ResourceContainer* entry = resourceHopper.get(i);

		if (entry == container) {
			if (i == 0)
				return;

			ManagedReference<ResourceContainer*> oldEntry = resourceHopper.get(0);

			InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get());
			inso7->updateHopper();
			inso7->startUpdate(0x0D);

			resourceHopper.set(0, container, inso7, 2);

			if(oldEntry->getQuantity() > 0)
				resourceHopper.set(i, oldEntry, inso7, 0);
			else
				resourceHopper.remove(i, inso7, 0);

			currentSpawn = container->getSpawnObject();
			spawnDensity = currentSpawn->getDensityAt(getZone()->getZoneName(), getPositionX(), getPositionY());

			inso7->updateHopperSize(getHopperSize());
			inso7->updateExtractionRate(getActualRate());
			inso7->close();

			broadcastToOperators(inso7);
		}
	}
}
Exemplo n.º 19
0
int l_Zone_getRandomTile(lua_State* L)
{
	Zone* zone = getZone(L, 1);
	Game& game = flat::lua::getFlatAs<Game>(L);
	const Tile* tile = zone->getRandomTile(game);
	lua_pushlightuserdata(L, const_cast<Tile*>(tile));
	return 1;
}
Exemplo n.º 20
0
FB::variant FB::JSFunction::exec( const std::vector<variant>& args )
{
    FB::JSAPIPtr api = m_apiWeak.lock();
    if (!api)
        throw new FB::script_error("Invalid JSAPI object");
    // Force calls to use the zone this function was created with
    FB::scoped_zonelock _l(api, getZone());
    return api->Invoke(m_methodName, args);
}
Exemplo n.º 21
0
void Bullet::kill(void)
{
	zombie=true;

	if(getZone().isParticleSystemValid(particleHandle))
	{
		getZone().getParticleSystem(particleHandle).kill();
	}

	createExplosion
	(
		getZone(),
		getPos(),
		damageValue/2,
		1.0f,
		owner,
		explosionParticleFile,
		explosionSoundEffectFile
	);
}
Exemplo n.º 22
0
int l_Zone_getEntitiesCount(lua_State* L)
{
	Zone* zone = getZone(L, 1);
	lua_Integer count = 0;
	const Map& map = zone->getMap();
	zone->eachTileIfExists([&count, &map](const Tile* tile)
	{
		count += map.getTileEntityCount(tile);
	});
	lua_pushinteger(L, count);
	return 1;
}
Exemplo n.º 23
0
void Monster::load(const PropertyBag &xml)
{
	Creature::load(xml);

	if(xml.exists("preferredSpell")) {
		xml.get_optional("preferredSpell", preferredSpell);
	} else {
		preferredSpell = 0;
	}

	switch(preferredSpell)
	{
	case 0: spell = new SpellFireBall	(&getZone(), m_ID, "data/spells/fireball.xml");		break; // Fireball
	case 1: spell = new SpellFireBall	(&getZone(), m_ID, "data/spells/arctic-wind.xml");	break; // Arctic Wind
	case 2: spell = new SpellIncinerate	(&getZone(), m_ID, "data/spells/incinerate.xml");		break; // Incinerate
	case 3: spell = new SpellFireBall	(&getZone(), m_ID, "data/spells/chill.xml");		break; // Chill
	case 4: spell = new SpellHeal		(&getZone(), m_ID, "data/spells/heal.xml");			break; // Heal
	case 5: spell = new SpellFireBall	(&getZone(), m_ID, "data/spells/ice-blast.xml");		break; // Ice Blast
	case 6: spell = 0; break; // Reserved for "Resurrect" Spell
	default: spell = 0; break;
	};

	if(spell!=0)
	{
		spell->available = true;
	}
}
void GeneratorObjectImplementation::synchronizedUIListen(SceneObject* player, int value) {
	if (!player->isPlayerCreature() || !isOnAdminList(cast<CreatureObject*>(player)) || getZone() == NULL)
		return;

	addOperator(cast<CreatureObject*>(player));

	updateInstallationWork();

	HarvesterObjectMessage7* msg = new HarvesterObjectMessage7(_this.getReferenceUnsafeStaticCast());
	player->sendMessage(msg);

	activateUiSync();
}
Exemplo n.º 25
0
void Bullet::update(float deltaTime)
{
	cylinderRadius = 0.2f;
	sphereRadius = 0.2f;
	solid = true;
	floating = true;

	Trigger::update(deltaTime);

	// Kill the bullet once it has collided with anything
	if(anyCollisions())
	{
		kill();
	}
	else
	{
		if(getZone().isParticleSystemValid(particleHandle))
		{
			getZone().getParticleSystem(particleHandle).setPosition(position);
		}
	}
}
Exemplo n.º 26
0
Vector3 SceneObjectImplementation::getWorldCoordinate(float distance, float angleDegrees, bool includeZ) {
	float angleRads = angleDegrees * (M_PI / 180.0f);
	float newAngle = angleRads + (M_PI / 2) - direction.getRadians();

	float newX = getWorldPositionX() + (cos(newAngle) * distance); // client has x/y inverted
	float newY = getWorldPositionY() + (sin(newAngle) * distance);
	float newZ = 0.0f;

	if (includeZ)
		newZ = getZone()->getHeight(newX, newY);

	return Vector3(newX, newY, newZ);
}
Exemplo n.º 27
0
task main()
{
	waitForStart();
	wait10Msec(1000);
	init();

	ClearTimer(T2);
	while (getZone() != 8) {
		if (time1(T2) < 200)
			move(time1(T2) / 8);
	}
	int time = time1(T2);

	if (time > 1500) {
		move(0);
		wait1Msec(200);
		move(-25);
		wait1Msec(400);
		move(0);
		time -= 400;
	}
	else { time -= 200;}
	move(0);

	motor[blockMotor] = 70;
	wait1Msec(500);
	motor[blockMotor] = -100;
	wait1Msec(700);
	motor[blockMotor] = 0;

	ClearTimer(T2);
	while (time1(T2) < time ) {
		if (time1(T2) < 200)
			move(-time1(T2) / 8);
	}
	move(0);

	turn(45);
	move(-50);
	wait1Msec(300);
	turn(45);

	while(getColor() != WHITE) {
		move(-50);
	}

	turn(-90);
	move(100);
	wait1Msec(1500);

}
Exemplo n.º 28
0
EffectMPRecovery::EffectMPRecovery (Zone* pZone , ZoneCoord_t x , ZoneCoord_t y , Creature* pCreature , Turn_t delay)
throw(Error)
    : Effect(pZone,x,y,pCreature,delay)
{
    __BEGIN_TRY

    Assert(getZone() != NULL);
    Assert(getTarget() != NULL);

    // 서버 전용 Effect이다. by sigi. 2002.11.14
    m_bBroadcastingEffect = false;

    __END_CATCH
}
int CreatureImplementation::handleObjectMenuSelect(CreatureObject* player, byte selectedID) {
	if (getZone() == NULL)
		return 0;

	if (!(_this.getReferenceUnsafeStaticCast()->isDead())) {
		if (selectedID == 112) {
			getZone()->getCreatureManager()->milk(_this.getReferenceUnsafeStaticCast(), player);
		}
	} else {
		if ((selectedID == 112 || selectedID == 234 || selectedID == 235 || selectedID == 236)) {

			getZone()->getCreatureManager()->harvest(_this.getReferenceUnsafeStaticCast(), player, selectedID);

			return 0;
		}
	}

	if (selectedID == 159) {
		getZone()->getCreatureManager()->tame(_this.getReferenceUnsafeStaticCast(), player);
	}

	return AiAgentImplementation::handleObjectMenuSelect(player, selectedID);
}
Exemplo n.º 30
0
void CityRegionImplementation::applySpecializationModifiers(CreatureObject* creature) {
	if (getZone() == NULL)
		return;

	CityManager* cityManager = getZone()->getZoneServer()->getCityManager();
	CitySpecialization* cityspec = cityManager->getCitySpecialization(citySpecialization);

	if (cityspec == NULL)
		return;

	if (isBanned(creature->getObjectID())) {
		return;
	}

	Reference<CreatureObject*> creatureReference = creature;
	Reference<CityRegion*> city = _this.getReferenceUnsafeStaticCast();

	typedef VectorMap<String, int> SkillMods;
	typedef VectorMapEntry<String, int> SkillModsEntry;

	EXECUTE_ORDERED_TASK_3(creature, creatureReference, cityspec, city, {
			Locker locker(creatureReference_p);

			//Remove all current city skillmods
			creatureReference_p->removeAllSkillModsOfType(SkillModManager::CITY);

			SkillMods* mods = cityspec_p->getSkillMods();

			for (int i = 0; i < mods->size(); ++i) {
				SkillModsEntry& entry = mods->elementAt(i);

				if (entry.getKey() == "private_defense" && !city_p->isMilitiaMember(creatureReference_p->getObjectID()))
					continue;

				creatureReference_p->addSkillMod(SkillModManager::CITY, entry.getKey(), entry.getValue());
			}
	});