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; }
int l_Zone_eq(lua_State* L) { Zone* zone1 = getZone(L, 1); Zone* zone2 = getZone(L, 2); lua_pushboolean(L, zone1 == zone2); return 1; }
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; }
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()); }
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(); }
bool operator==(const Query& other) const { return (getHint() == other.getHint() && getZone() == other.getZone() && getQueryType() == other.getQueryType() && getRrLabel() == other.getRrLabel() && getRrType() == other.getRrType()); }
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; }
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); }
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; }
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); } } }
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; }
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); }
void Bullet::kill(void) { zombie=true; if(getZone().isParticleSystemValid(particleHandle)) { getZone().getParticleSystem(particleHandle).kill(); } createExplosion ( getZone(), getPos(), damageValue/2, 1.0f, owner, explosionParticleFile, explosionSoundEffectFile ); }
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; }
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(); }
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); } } }
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); }
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); }
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); }
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()); } });