本文整理汇总了C++中Zone::getZoneServer方法的典型用法代码示例。如果您正苦于以下问题:C++ Zone::getZoneServer方法的具体用法?C++ Zone::getZoneServer怎么用?C++ Zone::getZoneServer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zone
的用法示例。
在下文中一共展示了Zone::getZoneServer方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: harvest
void CreatureManagerImplementation::harvest(Creature* creature, CreatureObject* player, int selectedID) {
Zone* zone = creature->getZone();
if (zone == NULL || !creature->isCreature())
return;
if (!creature->canHarvestMe(player))
return;
if (!player->isInRange(creature, 7))
return;
ManagedReference<ResourceManager*> resourceManager = zone->getZoneServer()->getResourceManager();
String restype = "";
float quantity = 0;
if (selectedID == 112) {
int type = System::random(2);
if (quantity == 0 || type == 0) {
if(creature->getHideMax() > 0) {
restype = creature->getHideType();
quantity = creature->getHideMax();
}
}
if (quantity == 0 || type == 1) {
if(creature->getMeatMax() > 0) {
restype = creature->getMeatType();
quantity = creature->getMeatMax();
}
}
if (quantity == 0 || type == 2) {
if(creature->getBoneMax() > 0) {
restype = creature->getBoneType();
quantity = creature->getBoneMax();
}
}
}
if (selectedID == 234) {
restype = creature->getMeatType();
quantity = creature->getMeatMax();
} else if (selectedID == 235) {
restype = creature->getHideType();
quantity = creature->getHideMax();
} else if (selectedID == 236) {
restype = creature->getBoneType();
quantity = creature->getBoneMax();
}
if(quantity == 0 || restype.isEmpty()) {
player->sendSystemMessage("Tried to harvest something this creature didn't have, please report this error");
return;
}
int quantityExtracted = int(quantity * float(player->getSkillMod("creature_harvesting") / 100.0f));
quantityExtracted = MAX(quantityExtracted, 3);
ManagedReference<ResourceSpawn*> resourceSpawn = resourceManager->getCurrentSpawn(restype, player->getZone()->getZoneName());
if (resourceSpawn == NULL) {
player->sendSystemMessage("Error: Server cannot locate a current spawn of " + restype);
return;
}
float density = resourceSpawn->getDensityAt(player->getZone()->getZoneName(), player->getPositionX(), player->getPositionY());
String creatureHealth = "";
if (density > 0.80f) {
quantityExtracted = int(quantityExtracted * 1.25f);
creatureHealth = "creature_quality_fat";
} else if (density > 0.60f) {
quantityExtracted = int(quantityExtracted * 1.00f);
creatureHealth = "creature_quality_medium";
} else if (density > 0.40f) {
quantityExtracted = int(quantityExtracted * 0.75f);
creatureHealth = "creature_quality_scrawny";
} else {
quantityExtracted = int(quantityExtracted * 0.50f);
creatureHealth = "creature_quality_skinny";
}
float modifier = 1;
int baseAmount = quantityExtracted;
if (player->isGrouped()) {
modifier = player->getGroup()->getGroupHarvestModifier(player);
quantityExtracted = (int)(quantityExtracted * modifier);
}
if (creature->getParent().get() != NULL)
quantityExtracted = 1;
resourceManager->harvestResourceToPlayer(player, resourceSpawn, quantityExtracted);
/// Send System Messages
//.........这里部分代码省略.........
示例2: joinGroup
void GroupManager::joinGroup(CreatureObject* player) {
//Pre: player locked
//Post: player locked
uint64 inviterID = player->getGroupInviterID();
Zone* zone = player->getZone();
if (zone == NULL)
return;
ManagedReference<ZoneServer*> server = zone->getZoneServer();
ManagedReference<SceneObject*> object = server->getObject(inviterID);
if (object == NULL || !object->isPlayerCreature() || object == player)
return;
CreatureObject* inviter = cast<CreatureObject*>( object.get());
GroupObject* group = NULL;
Locker clocker(inviter, player);
group = inviter->getGroup();
if (group == NULL) {
group = createGroup(inviter);
if (group == NULL)
return;
}
Locker clocker2(group, player);
if (group->getGroupSize() >= 20) {
clocker.release();
player->updateGroupInviterID(0);
player->sendSystemMessage("The group is full.");
return;
}
// if inviter IS in the group but is not the leader
if (group->getLeader() != inviter && !playerIsInvitingOwnPet(inviter, player)) {
player->updateGroupInviterID(0);
StringIdChatParameter param("group", "prose_leader_changed"); // "%TU has abdicated group leadership to %TT."
param.setTU( inviter->getDisplayedName() );
param.setTT( group->getLeader()->getDisplayedName() ) ;
player->sendSystemMessage(param);
return;
}
player->info("joining group");
player->updateGroup(group);
group->addMember(player);
if (player->isPlayerCreature()) {
player->sendSystemMessage("@group:joined_self");
//Inform new member who the Master Looter is.
if (group->getLootRule() == MASTERLOOTER) {
StringIdChatParameter masterLooter("group","set_new_master_looter");
masterLooter.setTT(group->getMasterLooterID());
player->sendSystemMessage(masterLooter);
}
// clear invitee's LFG setting once a group is joined
Reference<PlayerObject*> ghost = player->getSlottedObject("ghost").castTo<PlayerObject*>();
if (ghost != NULL)
ghost->clearCharacterBit(PlayerObject::LFG, true);
ManagedReference<ChatRoom*> groupChannel = group->getGroupChannel();
if (groupChannel != NULL) {
groupChannel->sendTo(cast<CreatureObject*>(player));
groupChannel->addPlayer(cast<CreatureObject*>(player), false);
}
if (player->isPlayingMusic()) {
ManagedReference<Facade*> facade = player->getActiveSession(SessionFacadeType::ENTERTAINING);
ManagedReference<EntertainingSession*> session = dynamic_cast<EntertainingSession*> (facade.get());
if (session != NULL && session->isPlayingMusic()) {
String song = session->getPerformanceName();
String bandSong = group->getBandSong();
if (bandSong == "") {
Locker locker(group);
group->setBandSong(song);
} else {
if (bandSong != song) {
player->sendSystemMessage("@performance:music_join_band_stop"); // You must play the same song as the band.
session->stopPlayingMusic();
} else {
player->sendSystemMessage("@performance:music_join_band_self"); // You join with the band in the currently playing song.
}
}
}
}
}
//.........这里部分代码省略.........
示例3: droidHarvest
void CreatureManagerImplementation::droidHarvest(Creature* creature, CreatureObject* droid, int selectedID, int harvestBonus) {
// droid and creature are locked coming in.
ManagedReference<CreatureObject*> owner = droid->getLinkedCreature();
if (owner == NULL) {
return;
}
Locker pLock(owner);
Zone* zone = creature->getZone();
if (zone == NULL || !creature->isCreature()) {
return;
}
// this will perform a range check on the corpse to the droid
if (!creature->canDroidHarvestMe(owner,droid)) {
owner->sendSystemMessage("@pet/droid_modules:cannot_access_corpse");
return;
}
ManagedReference<ResourceManager*> resourceManager = zone->getZoneServer()->getResourceManager();
String restype = "";
float quantity = 0;
if (selectedID == 234) {
restype = creature->getMeatType();
quantity = creature->getMeatMax();
} else if (selectedID == 235) {
restype = creature->getHideType();
quantity = creature->getHideMax();
} else if (selectedID == 236) {
restype = creature->getBoneType();
quantity = creature->getBoneMax();
}
if(quantity == 0 || restype.isEmpty()) {
owner->sendSystemMessage("Tried to harvest something this creature didn't have, please report this error");
return;
}
int ownerSkill = owner->getSkillMod("creature_harvesting");
int quantityExtracted = int(quantity * float(ownerSkill / 100.0f));
// add in droid bonus
quantityExtracted = MAX(quantityExtracted, 3);
ManagedReference<ResourceSpawn*> resourceSpawn = resourceManager->getCurrentSpawn(restype, droid->getZone()->getZoneName());
if (resourceSpawn == NULL) {
owner->sendSystemMessage("Error: Server cannot locate a current spawn of " + restype);
return;
}
float density = resourceSpawn->getDensityAt(droid->getZone()->getZoneName(), droid->getPositionX(), droid->getPositionY());
String creatureHealth = "";
if (density > 0.80f) {
quantityExtracted = int(quantityExtracted * 1.25f);
creatureHealth = "creature_quality_fat";
} else if (density > 0.60f) {
quantityExtracted = int(quantityExtracted * 1.00f);
creatureHealth = "creature_quality_medium";
} else if (density > 0.40f) {
quantityExtracted = int(quantityExtracted * 0.75f);
creatureHealth = "creature_quality_scrawny";
} else {
quantityExtracted = int(quantityExtracted * 0.50f);
creatureHealth = "creature_quality_skinny";
}
float modifier = 1;
int baseAmount = quantityExtracted;
if (owner->isGrouped()) {
modifier = owner->getGroup()->getGroupHarvestModifier(owner);
quantityExtracted = (int)(quantityExtracted * modifier);
if (owner->getGroup()->getGroupSize() > 2 ) {
quantityExtracted -= quantityExtracted * 0.3; // 30% reduction
}
}
if (creature->getParent().get() != NULL)
quantityExtracted = 1;
int droidBonus = DroidMechanics::determineDroidSkillBonus(ownerSkill,harvestBonus,quantityExtracted);
quantityExtracted += droidBonus;
// add to droid inventory if there is space available, otherwise to player
DroidObject* pet = cast<DroidObject*>(droid);
if (pet == NULL) {
error("Incoming droid harvest call didnt include a droid!");
return;
}
if (pet->hasStorage()) {
bool didit = resourceManager->harvestResourceToPlayer(droid, resourceSpawn, quantityExtracted);
if (!didit) {
resourceManager->harvestResourceToPlayer(owner, resourceSpawn, quantityExtracted);
}
} else {
resourceManager->harvestResourceToPlayer(owner, resourceSpawn, quantityExtracted);
}
/// Send System Messages
StringIdChatParameter harvestMessage("skl_use", creatureHealth);
//.........这里部分代码省略.........
示例4: spawnLair
void DestroyMissionObjectiveImplementation::spawnLair() {
ManagedReference<MissionObject* > mission = this->mission.get();
ManagedReference<MissionSpawnActiveArea* > spawnActiveArea = this->spawnActiveArea;
if (spawnActiveArea == NULL)
return;
if (lairObject != NULL && lairObject->getZone() != NULL)
return;
Zone* zone = spawnActiveArea->getZone();
Locker locker(spawnActiveArea);
spawnActiveArea->destroyObjectFromWorld(true);
Vector3 pos = findValidSpawnPosition(zone);
ManagedReference<WaypointObject*> waypoint = mission->getWaypointToMission();
if (waypoint == NULL) {
waypoint = mission->createWaypoint();
}
waypoint->setPosition(pos.getX(), 0, pos.getY());
mission->updateMissionLocation();
mission->setStartPosition(pos.getX(), pos.getY());
//TODO: find correct string id
ManagedReference<CreatureObject*> player = getPlayerOwner();
if (player != NULL) {
player->sendSystemMessage("Transmission Received: Mission Target has been located. Mission waypoint has been updated to exact location");
}
LairTemplate* lair = CreatureTemplateManager::instance()->getLairTemplate(lairTemplate.hashCode());
if (lair == NULL) {
error("incorrect lair template in destroy mission objective " + lairTemplate);
abort();
return;
}
if (lairObject == NULL) {
String buildingToSpawn = lair->getMissionBuilding(difficulty);
if (buildingToSpawn.isEmpty()) {
error("error spawning " + buildingToSpawn);
abort();
return;
}
lairObject = zone->getZoneServer()->createObject(buildingToSpawn.hashCode(), 0).castTo<LairObject*>();
if (lairObject == NULL) {
error("error spawning " + buildingToSpawn);
abort();
return;
}
Locker locker(lairObject);
lairObject->setFaction(lair->getFaction());
lairObject->setPvpStatusBitmask(CreatureFlag::ATTACKABLE);
lairObject->setOptionsBitmask(0, false);
lairObject->setMaxCondition(difficultyLevel * (900 + System::random(200)));
lairObject->setConditionDamage(0, false);
lairObject->initializePosition(pos.getX(), pos.getZ(), pos.getY());
lairObject->setDespawnOnNoPlayersInRange(false);
ManagedReference<MissionObserver*> observer = new MissionObserver(_this.get());
addObserver(observer, true);
lairObject->registerObserver(ObserverEventType::OBJECTDESTRUCTION, observer);
ManagedReference<DestroyMissionLairObserver*> lairObserver = new DestroyMissionLairObserver();
lairObserver->deploy();
lairObserver->setLairTemplate(lair);
lairObserver->setDifficulty(difficulty);
lairObserver->setObserverType(ObserverType::LAIR);
lairObserver->setSize(mission->getSize());
lairObject->registerObserver(ObserverEventType::OBJECTDESTRUCTION, lairObserver);
lairObject->registerObserver(ObserverEventType::DAMAGERECEIVED, lairObserver);
lairObject->registerObserver(ObserverEventType::AIMESSAGE, lairObserver);
lairObject->registerObserver(ObserverEventType::OBJECTREMOVEDFROMZONE, lairObserver);
zone->transferObject(lairObject, -1, true);
lairObserver->checkForNewSpawns(lairObject, NULL, true);
}
if (lairObject != NULL && lairObject->getZone() == NULL) {
zone->transferObject(lairObject, -1, true);
}
}