本文整理汇总了C++中ManagedReference类的典型用法代码示例。如果您正苦于以下问题:C++ ManagedReference类的具体用法?C++ ManagedReference怎么用?C++ ManagedReference使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ManagedReference类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setTrainingCommand
void PetControlDeviceImplementation::setTrainingCommand( unsigned int commandID ){
// we set to 0 to flag completion so skip all this then.
if (commandID == 0) {
trainingCommand = 0;
return;
}
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL || !controlledObject->isAiAgent())
return;
AiAgent* pet = cast<AiAgent*>(controlledObject.get());
if( pet == NULL )
return;
ManagedReference<CreatureObject*> owner = pet->getLinkedCreature().get();
if (owner == NULL || !owner->isPlayerCreature())
return;
if( petType == PetManager::DROIDPET) {
ManagedReference<DroidObject*> droid = this->controlledObject.get().castTo<DroidObject*>();
if (droid == NULL)
return;
// Check power on droids
if( !droid->hasPower() ){
droid->showFlyText("npc_reaction/flytext","low_power", 204, 0, 0); // "*Low Power*"
return;
}
if(((commandID == PetManager::ATTACK || commandID == PetManager::GUARD) && !droid->isCombatDroid()) ||
(commandID == PetManager::RANGED_ATTACK && (!droid->isCombatDroid() || !droid->hasRangedWeapon())) ||
(commandID == PetManager::RECHARGEOTHER && !droid->isPowerDroid()) ||
(commandID == PetManager::TRANSFER) ||
(commandID == PetManager::SPECIAL_ATTACK1) ||
(commandID == PetManager::SPECIAL_ATTACK2) ||
(commandID == PetManager::TRICK1) ||
(commandID == PetManager::TRICK2)){
return;
}
}
else if(petType == PetManager::CREATUREPET){
if(((commandID == PetManager::ATTACK || commandID == PetManager::FOLLOW || commandID == PetManager::STORE) && !owner->hasSkill("outdoors_creaturehandler_novice") ) ||
(commandID == PetManager::STAY && !owner->hasSkill("outdoors_creaturehandler_training_01")) ||
(commandID == PetManager::GUARD && !owner->hasSkill("outdoors_creaturehandler_training_02")) ||
(commandID == PetManager::FRIEND && !owner->hasSkill("outdoors_creaturehandler_support_03")) ||
((commandID == PetManager::PATROL || commandID == PetManager::GETPATROLPOINT || commandID == PetManager::CLEARPATROLPOINTS) && !owner->hasSkill("outdoors_creaturehandler_training_03")) ||
((commandID == PetManager::FORMATION1 || commandID == PetManager::FORMATION2) && !owner->hasSkill("outdoors_creaturehandler_training_04")) ||
(commandID == PetManager::TRANSFER && !owner->hasSkill("outdoors_creaturehandler_master")) ||
(commandID == PetManager::TRICK1 && !owner->hasSkill("outdoors_creaturehandler_healing_01")) ||
(commandID == PetManager::TRICK2 && !owner->hasSkill("outdoors_creaturehandler_healing_03")) ||
(commandID == PetManager::GROUP && !owner->hasSkill("outdoors_creaturehandler_support_01")) ||
(commandID == PetManager::SPECIAL_ATTACK1 && (!owner->hasSkill("outdoors_creaturehandler_taming_03") || !pet->hasSpecialAttack(1))) ||
(commandID == PetManager::SPECIAL_ATTACK2 && (!owner->hasSkill("outdoors_creaturehandler_taming_04") || !pet->hasSpecialAttack(2))) ||
(commandID == PetManager::RANGED_ATTACK && (!owner->hasSkill("outdoors_creaturehandler_master") || !pet->hasRangedWeapon())) ||
(commandID == PetManager::FOLLOWOTHER && !owner->hasSkill("outdoors_creaturehandler_support_02")) ||
(commandID == PetManager::RECHARGEOTHER))
return;
}
else if(petType == PetManager::FACTIONPET){
if(commandID == PetManager::RECHARGEOTHER ||
(commandID == PetManager::TRANSFER) ||
(commandID == PetManager::SPECIAL_ATTACK1) ||
(commandID == PetManager::SPECIAL_ATTACK2) ||
(commandID == PetManager::TRICK1) ||
(commandID == PetManager::TRICK2))
return;
}
/** Check for converse and if so, get its personalityStf**/
if (pet->getOptionsBitmask() & OptionBitmask::CONVERSE) {
String stf = pet->getPersonalityStf();
StringBuffer message;
message << stf << ":start_convo_4";
StringIdChatParameter chat;
chat.setStringId(message.toString());
pet->getZoneServer()->getChatManager()->broadcastMessage(pet,chat,0,0,0);
} else {
pet->showFlyText("npc_reaction/flytext","alert", 204, 0, 0); // "?"
}
trainingCommand = commandID;
}
示例2: addWeaponDots
void CraftingSessionImplementation::addWeaponDots() {
ManagedReference<TangibleObject*> prototype = this->prototype.get();
if (!(prototype->isWeaponObject()))
return;
ManagedReference<WeaponObject*> weapon = cast<WeaponObject*>(prototype.get());
ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
ManagedReference<DraftSchematic*> draftSchematic = manufactureSchematic->getDraftSchematic();
Vector<VectorMap<String, int> >* weaponDots = draftSchematic->getDraftSchematicTemplate()->getWeaponDots();
for (int i = 0; i < weaponDots->size(); i++) {
VectorMap<String, int> dot = weaponDots->elementAt(i);
for (int j = 0; j < dot.size(); j++) {
String property = dot.elementAt(j).getKey();
int value = dot.elementAt(j).getValue();
if (property == "type")
weapon->addDotType(value);
else if (property == "attribute")
weapon->addDotAttribute(value);
else if (property == "strength")
weapon->addDotStrength(value);
else if (property == "duration")
weapon->addDotDuration(value);
else if (property == "potency")
weapon->addDotPotency(value);
else if (property == "uses")
weapon->addDotUses(value);
}
}
}
示例3: selectDraftSchematic
void CraftingSessionImplementation::selectDraftSchematic(int index) {
ManagedReference<CreatureObject*> crafter = this->crafter.get();
ManagedReference<PlayerObject*> crafterGhost = this->crafterGhost.get();
ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();
if (index >= currentSchematicList.size()) {
crafter->sendSystemMessage("Invalid Schematic Index");
closeCraftingWindow(1);
cancelSession();
return;
}
DraftSchematic* draftschematic = currentSchematicList.get(index);
if (draftschematic == NULL) {
crafter->sendSystemMessage("@ui_craft:err_no_draft_schematic");
closeCraftingWindow(1);
cancelSession();
return;
}
clearSession();
Locker slocker(_this.get());
if(crafterGhost != NULL && crafterGhost->getDebug()) {
crafter->sendSystemMessage("Selected DraftSchematic: " + draftschematic->getCustomName());
}
state = 2;
if (craftingTool != NULL) {
Locker locker(craftingTool);
if (createSessionObjects(draftschematic)) {
if (prototype == NULL) {
crafter->sendSystemMessage("@ui_craft:err_no_prototype");
closeCraftingWindow(1);
cancelSession();
return;
}
// Dplay9 ********************************************************
// Sets the Crafting state to 2, which is the Resource screen
PlayerObjectDeltaMessage9* dplay9 = new PlayerObjectDeltaMessage9(
crafter->getPlayerObject());
dplay9->setExperimentationPoints(0xFFFFFFFF);
dplay9->setCraftingState(2);
dplay9->close();
crafter->sendMessage(dplay9);
// End Dplay9 *****************************************************
} else {
crafter->sendSystemMessage("This type of object has not yet been implemented");
}
} else {
crafter->sendSystemMessage("@ui_craft:err_no_crafting_tool");
closeCraftingWindow(1);
cancelSession();
}
}
示例4: locker
void PermissionsServlet::handlePost(HttpRequest* request, HttpResponse* response) {
PlayerManager* playerManager = server->getPlayerManager();
bool applyToAll = false;
String accountName = request->getParameter("accountName");
String levelName = request->getParameter("level");
int level = PermissionLevelList::instance()->getLevelNumber(levelName);
if(request->getParameter("applyToAll") == "true")
applyToAll = true;
ManagedReference<Account*> account = AccountManager::getAccount(accountName);
if(account == NULL) {
response->println("HTTP/1.1 200 OK\r\n");
response->println("Content-Type: text/html\r\n\r\n");
response->println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
response->println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
response->println(" <head>");
response->println(" <title>SWGEmu Web Server Login</title>");
response->println(" <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />");
response->println(" <link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\" />");
response->println(" </head>");
response->println(" <body>");
response->println(" <div class=\"login_box\">");
response->println(" <h1>Account doesn't exist.</h1>");
response->println(" <a href=\"permissions\"> Click here to return </a>");
response->println(" </div>");
response->println(" </body>");
response->println("</html>");
}
Locker locker(account);
account->setAdminLevel(level);
locker.release();
if(applyToAll == true) {
Reference<CharacterList*> characterList = account->getCharacterList();
for(int i = 0; i < characterList->size(); ++i) {
ManagedReference<CreatureObject* > targetCreature = NULL;
CharacterListEntry* entry = &characterList->get(i);
targetCreature = playerManager->getPlayer(entry->getFirstName());
playerManager->updatePermissionLevel(targetCreature, level);
}
}
response->println("HTTP/1.1 200 OK\r\n");
response->println("Content-Type: text/html\r\n\r\n");
response->println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
response->println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
response->println(" <head>");
response->println(" <title>SWGEmu Web Server Login</title>");
response->println(" <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />");
response->println(" <link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\" />");
response->println(" </head>");
response->println(" <body>");
response->println(" <div class=\"login_box\">");
response->println(" <h1>Account updated.</h1>");
response->println(" <a href=\"permissions\"> Click here to return </a>");
response->println(" </div>");
response->println(" </body>");
response->println("</html>");
}
示例5: handleCommandTraining
bool PetManagerImplementation::handleCommandTraining(CreatureObject* speaker, AiAgent* pet, const String& message){
if( speaker == NULL || pet == NULL )
return false;
if( message.isEmpty() )
return false;
ManagedWeakReference< CreatureObject*> linkedCreature = pet->getLinkedCreature();
if( linkedCreature == NULL )
return false;
// Only owner may train
if( linkedCreature != speaker)
return false;
ManagedReference<PetControlDevice*> pcd = pet->getControlDevice().get().castTo<PetControlDevice*>();
if( pcd == NULL )
return false;
if( pcd->hasTrainedCommandString(message) ){
pet->showFlyText("npc_reaction/flytext","confused", 204, 0, 0); // "?!!?!?!"
return true;
}
unsigned int trainingCommand = pcd->getTrainingCommand();
int petType = pcd->getPetType();
// Train command
if (petType == CREATUREPET) {
bool alreadyTrained = pcd->hasTrainedCommand(trainingCommand);
if (!alreadyTrained) {
bool success = false;
int skill = speaker->getSkillMod("tame_level");
int roll = System::random(skill + 30);
if (skill > roll)
success = true;
if (!success) {
pet->showFlyText("npc_reaction/flytext","confused", 204, 0, 0); // "?!!?!?!"
speaker->sendSystemMessage("@pet/pet_menu:pet_nolearn"); // Your pet doesn't seem to understand you.
return true;
}
}
// Success
pcd->addTrainedCommand( trainingCommand, message );
pet->showFlyText("npc_reaction/flytext","threaten", 204, 0, 0); // "!"
speaker->sendSystemMessage("@pet/pet_menu:pet_learn"); // You teach your pet a new command.
if (!alreadyTrained) {
CreatureTemplate* creatureTemplate = pet->getCreatureTemplate();
if (creatureTemplate == NULL)
return true;
PlayerManager* playerManager = zoneServer->getPlayerManager();
playerManager->awardExperience(speaker, "creaturehandler", 10 * creatureTemplate->getLevel());
}
}
else{
pcd->addTrainedCommand( trainingCommand, message );
pet->showFlyText("npc_reaction/flytext","threaten", 204, 0, 0); // "!"
speaker->sendSystemMessage("@pet/pet_menu:pet_learn"); // You teach your pet a new command.
}
// No renaming of faction pets
if (petType == FACTIONPET)
return true;
// Check for naming string
StringTokenizer tokenizer(message);
tokenizer.setDelimeter(" ");
String parsedName = "";
int numberOfSubStrings = 0;
while (tokenizer.hasMoreTokens()) {
numberOfSubStrings++;
if (!parsedName.isEmpty())
break;
tokenizer.getStringToken(parsedName);
}
String futureName = pcd->getFutureName();
unsigned int namingProgress = pcd->getNamingProgress();
// Validate and check name
if (numberOfSubStrings > 1) {
ZoneProcessServer* zps = pet->getZoneProcessServer();
NameManager* nameManager = zps->getNameManager();
if (nameManager->validateName(parsedName) != NameManagerResult::ACCEPTED) {
return true;
}
//.........这里部分代码省略.........
示例6: getDroidObject
int DroidHarvestModuleDataComponent::handleObjectMenuSelect(CreatureObject* player, byte selectedID, PetControlDevice* controller) {
if (selectedID == HARVEST_SET_INTEREST) {
ManagedReference<DroidObject*> droid = getDroidObject();
if( droid == NULL ){
info( "Droid is null");
return 0;
}
if( !droid->hasPower() ){
player->sendSystemMessage("@pet/droid_modules:playback_msg_play_out_of_power");
return 0;
}
// popup a ui to choose the correct interest.
ManagedReference<SuiListBox*> box = new SuiListBox(player, SuiWindowType::DROID_SET_INTEREST, SuiListBox::HANDLETWOBUTTON);
box->setCallback(new SelectHarvestSuiCallback(player->getZoneServer()));
box->setPromptText("@pet/droid_modules:set_interest_d");
box->setPromptTitle("@pet/droid_modules:set_interest_d");
box->setOkButton(true,"@ok");
box->setCancelButton(true, "@cancel");
// Add tracks
box->addMenuItem("@pet/droid_modules:set_interest_random",INTREST_RANDOM);
box->addMenuItem("@pet/droid_modules:set_interest_bone",INTREST_BONE);
box->addMenuItem("@pet/droid_modules:set_interest_meat",INTREST_MEAT);
box->addMenuItem("@pet/droid_modules:set_interest_hide",INTREST_HIDE);
box->setUsingObject(droid);
player->getPlayerObject()->addSuiBox(box);
player->sendMessage(box->generateMessage());
return 0;
}
// Handle toggle on/off
if (selectedID == HARVEST_PROGRAM_COMMAND) {
if( controller == NULL )
return 0;
controller->setTrainingCommand( PetManager::HARVEST );
return 0;
}
if( selectedID == HARVEST_TOGGLE ){
ManagedReference<DroidObject*> droid = getDroidObject();
if( droid == NULL ){
info( "Droid is null");
return 0;
}
Locker dlock( droid, player );
// Toggle off
if (active){
deactivate();
player->sendSystemMessage("@pet/droid_modules:auto_harvest_off"); // You turn off auto-repair
}
else{ // Toggle on
// Check droid states
if( droid->isDead() || droid->isIncapacitated())
return 0;
// Droid must have power
if( !droid->hasPower() ){
droid->showFlyText("npc_reaction/flytext","low_power", 204, 0, 0); // "*Low Power*"
return 0;
}
// Ensure we don't accidentally have another task outstanding
deactivate();
player->sendSystemMessage("@pet/droid_modules:auto_harvest_on"); // You turn on auto-repair
if (observer == NULL) {
observer = new DroidHarvestObserver(this);
observer->deploy();
}
Locker plock(player);
player->registerObserver(ObserverEventType::KILLEDCREATURE, observer);
active = true;
}
}
return 0;
}
示例7: getZoneServer
void SceneObjectImplementation::broadcastMessagePrivate(BasePacket* message, SceneObject* selfObject, bool lockZone) {
ZoneServer* zoneServer = getZoneServer();
if (zoneServer != NULL && zoneServer->isServerLoading())
return;
if (parent.get() != NULL) {
ManagedReference<SceneObject*> grandParent = cast<SceneObject*>(getRootParent().get().get());
if (grandParent != NULL) {
grandParent->broadcastMessagePrivate(message, selfObject, lockZone);
return;
} else {
delete message;
return;
}
}
if (zone == NULL) {
delete message;
return;
}
//Locker zoneLocker(zone);
//getZone()->rlock(lockZone);
// bool readlock = lockZone && !zone->isLockedByCurrentThread();
SortedVector<ManagedReference<QuadTreeEntry*> >* closeSceneObjects = NULL;
SortedVector<ManagedReference<QuadTreeEntry*> >* closeNoneReference = NULL;
int maxInRangeObjectCount = 0;
bool deleteVector = true;
try {
// zone->rlock(readlock);
if (closeobjects == NULL) {
info(String::valueOf(getObjectID()) + " Null closeobjects vector in SceneObjectImplementation::broadcastMessagePrivate", true);
closeSceneObjects = new SortedVector<ManagedReference<QuadTreeEntry*> >();
zone->getInRangeObjects(getPositionX(), getPositionY(), 192, closeSceneObjects, true);
maxInRangeObjectCount = closeSceneObjects->size();
deleteVector = true;
} else {
// maxInRangeObjectCount = closeobjects->size();
//closeSceneObjects = closeobjects;
closeNoneReference = new SortedVector<ManagedReference<QuadTreeEntry*> >(maxInRangeObjectCount, 50);
/* for (int i = 0; i < closeobjects->size(); ++i) {
closeNoneReference->add(closeobjects->get(i).get());
}
*/
closeobjects->safeCopyTo(*closeNoneReference);
maxInRangeObjectCount = closeNoneReference->size();
//closeSceneObjects.removeAll(maxInRangeObjectCount, 10);
//closeSceneObjects.addAll(*closeobjects);
}
/*
for (int i = 0; i < maxInRangeObjectCount; ++i) {
SceneObject* scno = cast<SceneObject*>(closeSceneObjects->get(i).get());
if (selfObject == scno)
continue;
ManagedReference<ZoneClientSession*> client = scno->getClient();
if (client != NULL || scno->isVehicleObject()) {
scno->sendMessage(message->clone());
}
}
*/
//zone->runlock(readlock);
} catch (...) {
// zone->runlock(readlock);
delete message;
throw;
}
for (int i = 0; i < maxInRangeObjectCount; ++i) {
SceneObject* scno;
if (closeSceneObjects != NULL)
scno = cast<SceneObject*>(closeSceneObjects->get(i).get());
else
scno = cast<SceneObject*>(closeNoneReference->get(i).get());
//.........这里部分代码省略.........
示例8: if
bool PetControlDeviceImplementation::canBeTradedTo(CreatureObject* player, CreatureObject* receiver, int numberInTrade) {
ManagedReference<SceneObject*> datapad = receiver->getSlottedObject("datapad");
if (datapad == NULL)
return false;
if (petType == PetManager::FACTIONPET) {
player->sendSystemMessage("@pet/pet_menu:bad_type"); // You cannot trade a pet of that type. Transfer failed.
return false;
} else if (petType == PetManager::DROIDPET) {
ManagedReference<PlayerManager*> playerManager = player->getZoneServer()->getPlayerManager();
int droidsInDatapad = numberInTrade;
int maxStoredDroids = playerManager->getBaseStoredDroids();
for (int i = 0; i < datapad->getContainerObjectsSize(); i++) {
Reference<SceneObject*> obj = datapad->getContainerObject(i).castTo<SceneObject*>();
if (obj != NULL && obj->isPetControlDevice() ){
Reference<PetControlDevice*> petDevice = cast<PetControlDevice*>(obj.get());
if( petDevice != NULL && petDevice->getPetType() == PetManager::DROIDPET){
droidsInDatapad++;
}
}
}
if( droidsInDatapad >= maxStoredDroids){
player->sendSystemMessage("That person has too many droids in their datapad");
return false;
}
return true;
} else if (petType == PetManager::CREATUREPET) {
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL || !controlledObject->isCreature())
return false;
ManagedReference<Creature*> pet = cast<Creature*>(controlledObject.get());
ManagedReference<PlayerManager*> playerManager = player->getZoneServer()->getPlayerManager();
int numberStored = numberInTrade;
int maxStoredPets = playerManager->getBaseStoredCreaturePets();
int maxLevelofPets = 10;
int level = pet->getAdultLevel();
bool ch = receiver->hasSkill("outdoors_creaturehandler_novice");
if (ch) {
maxStoredPets += receiver->getSkillMod("stored_pets");
maxLevelofPets = receiver->getSkillMod("tame_level");
}
if (level > maxLevelofPets) {
player->sendSystemMessage("@pet/pet_menu:no_chance"); // That person has no chance of controlling this creature. Transfer failed.
receiver->sendSystemMessage("@pet/pet_menu:cannot_control"); // You have no chance of controlling that creature.
return false;
}
if (pet->isVicious() && (receiver->getSkillMod("tame_aggro") <= 0 || !ch)) {
player->sendSystemMessage("@pet/pet_menu:no_chance"); // That person has no chance of controlling this creature. Transfer failed.
receiver->sendSystemMessage("@pet/pet_menu:cannot_control"); // You have no chance of controlling that creature.
return false;
}
if (numberStored >= maxStoredPets) {
player->sendSystemMessage("@pet/pet_menu:targ_too_many_stored"); // That person has too many stored pets. Transfer failed.
receiver->sendSystemMessage("@pet/pet_menu:sys_too_many_stored"); // There are too many pets stored in this container. Release some of them to make room for more.
return false;
}
for (int i = 0; i < datapad->getContainerObjectsSize(); ++i) {
ManagedReference<SceneObject*> object = datapad->getContainerObject(i);
if (object != NULL && object->isPetControlDevice()) {
PetControlDevice* device = cast<PetControlDevice*>( object.get());
if (device->getPetType() == PetManager::CREATUREPET) {
if (++numberStored >= maxStoredPets) {
player->sendSystemMessage("@pet/pet_menu:targ_too_many_stored"); // That person has too many stored pets. Transfer failed.
receiver->sendSystemMessage("@pet/pet_menu:sys_too_many_stored"); // There are too many pets stored in this container. Release some of them to make room for more.
return false;
}
}
}
}
return true;
}
return false;
}
示例9: assert
bool PetControlDeviceImplementation::growPet(CreatureObject* player, bool force, bool adult) {
if (petType != PetManager::CREATUREPET)
return true;
if (growthStage <= 0 || growthStage >= 10)
return true;
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL || !controlledObject->isCreature())
return true;
ManagedReference<Creature*> pet = cast<Creature*>(controlledObject.get());
ManagedReference<CreatureTemplate*> creatureTemplate = pet->getCreatureTemplate();
if (creatureTemplate == NULL)
return true;
PetManager* petManager = pet->getZoneServer()->getPetManager();
if (petManager == NULL)
return true;
Time currentTime;
uint32 timeDelta = currentTime.getTime() - lastGrowth.getTime();
int stagesToGrow = timeDelta / 43200; // 12 hour
if (adult)
stagesToGrow = 10;
if (stagesToGrow == 0 && !force)
return true;
int newStage = growthStage + stagesToGrow;
if (newStage > 10)
newStage = 10;
float newLevel = ((float)pet->getAdultLevel() / 10.0) * (float)newStage;
if (newLevel < 1)
newLevel = 1;
float newHeight = creatureTemplate->getScale() * (0.46 + ((float)newStage * 0.06));
short preEligibility = petManager->checkMountEligibility(_this.getReferenceUnsafeStaticCast());
short postEligibility = petManager->checkMountEligibility(_this.getReferenceUnsafeStaticCast(), newHeight);
assert(pet->isLockedByCurrentThread());
if (preEligibility == PetManager::CANBEMOUNTTRAINED && postEligibility == PetManager::TOOLARGE && !force) {
if (isTrainedAsMount()) {
arrestGrowth();
return true;
}
PlayerObject* ghost = player->getPlayerObject();
if (ghost == NULL){
return true;
}
ManagedReference<SuiListBox*> box = new SuiListBox(player, SuiWindowType::MOUNT_GROWTH_ARREST);
box->setPromptTitle("@pet/pet_menu:mount_growth_title"); // Pet Growth Arrest
box->setPromptText("@pet/pet_menu:mount_growth_prompt"); // Your pet could be trained as a mount, but is about to grow too large to serve as one. If you ever plan on training this pet as a mount you must arrest it's growth now. Stop pet's growth?
box->setUsingObject(_this.getReferenceUnsafeStaticCast());
box->setCancelButton(true, "@cancel");
box->setOkButton(true, "@yes");
box->setOtherButton(true, "@no");
box->setCallback(new MountGrowthArrestSuiCallback(player->getZoneServer(), _this.getReferenceUnsafeStaticCast()));
ghost->addSuiBox(box);
player->sendMessage(box->generateMessage());
return false;
}
if (adult)
pet->setHeight(newHeight, true);
else
pet->setHeight(newHeight, false);
pet->setPetLevel(newLevel);
growthStage = newStage;
lastGrowth.updateToCurrentTime();
setVitality(getVitality());
return true;
}
示例10: arrestGrowth
void PetControlDeviceImplementation::arrestGrowth() {
if (petType != PetManager::CREATUREPET)
return;
if (growthStage <= 0 || growthStage >= 10)
return;
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL || !controlledObject->isCreature())
return;
ManagedReference<Creature*> pet = cast<Creature*>(controlledObject.get());
ManagedReference<CreatureTemplate*> creatureTemplate = pet->getCreatureTemplate();
if (creatureTemplate == NULL)
return;
PetManager* petManager = pet->getZoneServer()->getPetManager();
if (petManager == NULL)
return;
int newStage = growthStage;
for (int i = (growthStage + 1); i < 11; i++) {
float newHeight = creatureTemplate->getScale() * (0.46 + ((float)i * 0.06));
short mountEligibility = petManager->checkMountEligibility(_this.getReferenceUnsafeStaticCast(), newHeight);
if (mountEligibility == PetManager::TOOLARGE)
break;
else if (mountEligibility == PetManager::CANBEMOUNTTRAINED)
newStage = i;
}
if (newStage > growthStage) {
float newLevel = ((float)pet->getAdultLevel() / 10.0) * (float)newStage;
if (newLevel < 1)
newLevel = 1;
float newHeight = creatureTemplate->getScale() * (0.46 + ((float)newStage * 0.06));
pet->setHeight(newHeight, false);
pet->setPetLevel(newLevel);
}
setVitality(getVitality());
growthStage = 10;
lastGrowth.updateToCurrentTime();
}
示例11: storeObject
void PetControlDeviceImplementation::storeObject(CreatureObject* player, bool force) {
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL || !controlledObject->isAiAgent())
return;
ManagedReference<AiAgent*> pet = cast<AiAgent*>(controlledObject.get());
assert(pet->isLockedByCurrentThread());
if (!force && (pet->isInCombat() || player->isInCombat()))
return;
if (player->isRidingMount() && player->getParent() == pet) {
if (!force && !player->checkCooldownRecovery("mount_dismount"))
return;
player->executeObjectControllerAction(STRING_HASHCODE("dismount"));
if (player->isRidingMount())
return;
}
if( player->getCooldownTimerMap() == NULL )
return;
// Check cooldown
if( !player->getCooldownTimerMap()->isPast("petCallOrStoreCooldown") && !force ){
player->sendSystemMessage("@pet/pet_menu:cant_store_1sec"); //"You cannot STORE for 1 second."
return;
}
// Not training any commands
trainingCommand = 0;
//clear friend list
friends.removeAll();
Reference<StorePetTask*> task = new StorePetTask(player, pet);
// Store non-faction pets immediately. Store faction pets after 60sec delay.
if( petType != PetManager::FACTIONPET || force || player->getPlayerObject()->isPrivileged()){
task->execute();
}
else{
if(pet->getPendingTask("store_pet") == NULL) {
player->sendSystemMessage( "Storing pet in 60 seconds");
pet->addPendingTask("store_pet", task, 60 * 1000);
}
else{
Time nextExecution;
Core::getTaskManager()->getNextExecutionTime(pet->getPendingTask("store_pet"), nextExecution);
int timeLeft = (nextExecution.getMiliTime() / 1000) - System::getTime();
player->sendSystemMessage( "Pet will store in " + String::valueOf(timeLeft) + " seconds." );
return;
}
}
// Set cooldown
player->getCooldownTimerMap()->updateToCurrentAndAddMili("petCallOrStoreCooldown", 1000); // 1 sec
}
示例12: getZoneServer
void PetControlDeviceImplementation::spawnObject(CreatureObject* player) {
ZoneServer* zoneServer = getZoneServer();
ManagedReference<TangibleObject*> controlledObject = this->controlledObject.get();
if (controlledObject == NULL)
return;
assert(controlledObject->isLockedByCurrentThread());
if (!isASubChildOf(player))
return;
ManagedReference<TradeSession*> tradeContainer = player->getActiveSession(SessionFacadeType::TRADE).castTo<TradeSession*>();
if (tradeContainer != NULL) {
server->getZoneServer()->getPlayerManager()->handleAbortTradeMessage(player);
}
controlledObject->initializePosition(player->getPositionX(), player->getPositionZ(), player->getPositionY());
ManagedReference<CreatureObject*> creature = NULL;
if (controlledObject->isCreatureObject()) {
creature = cast<CreatureObject*>(controlledObject.get());
creature->setCreatureLink(player);
creature->setControlDevice(_this.getReferenceUnsafeStaticCast());
creature->setFaction(player->getFaction());
creature->setObjectMenuComponent("PetMenuComponent");
if (player->getPvpStatusBitmask() & CreatureFlag::PLAYER)
creature->setPvpStatusBitmask(player->getPvpStatusBitmask() - CreatureFlag::PLAYER, true);
else
creature->setPvpStatusBitmask(player->getPvpStatusBitmask(), true);
if (trainedAsMount && (creature->getOptionsBitmask() ^ 0x1000)) {
creature->setOptionBit(0x1000);
}
}
Zone* zone = player->getZone();
if (zone == NULL)
return;
ManagedReference<SceneObject*> parent = player->getParent().get();
if (parent != NULL && parent->isCellObject())
parent->transferObject(controlledObject, -1, true);
else
zone->transferObject(controlledObject, -1, true);
updateStatus(1);
if (petControlObserver != NULL)
player->dropObserver(ObserverEventType::STARTCOMBAT, petControlObserver);
AiAgent* pet = cast<AiAgent*>(creature.get());
if (pet == NULL)
return;
ManagedReference<PlayerObject*> ghost = player->getPlayerObject();
ghost->addToActivePets(pet);
bool isDroid = false;
if (pet->isDroidObject()) {
DroidObject* droid = cast<DroidObject*>(pet);
isDroid = true;
if( droid == NULL )
return;
// Sanity check that there aren't outstanding power/skill mod tasks
droid->removePendingTask( "droid_power" );
droid->removePendingTask( "droid_skill_mod" );
droid->initDroidModules();
droid->onCall();
droid->loadSkillMods(player);
// Submit new power task
Reference<Task*> droidPowerTask = new DroidPowerTask( droid );
droid->addPendingTask("droid_power", droidPowerTask, 120000); // 2 min
// Submit new skill mod task
Reference<Task*> droidSkillModTask = new DroidSkillModTask( droid, player );
droid->addPendingTask("droid_skill_mod", droidSkillModTask, 3000); // 3 sec
}
pet->setHomeLocation(player->getPositionX(), player->getPositionZ(), player->getPositionY(), (parent != NULL && parent->isCellObject()) ? parent : NULL);
pet->setNextStepPosition(player->getPositionX(), player->getPositionZ(), player->getPositionY(), (parent != NULL && parent->isCellObject()) ? parent : NULL);
pet->clearPatrolPoints();
if (petType == PetManager::CREATUREPET) {
pet->setCreatureBitmask(CreatureFlag::PET);
}
if (petType == PetManager::DROIDPET) {
pet->setCreatureBitmask(CreatureFlag::DROID_PET);
}
if (petType == PetManager::FACTIONPET) {
pet->setCreatureBitmask(CreatureFlag::FACTION_PET);
/** dont know if npc faction pets trained via converse instead of radial
if (pet->isNonPlayerCreatureObject() && pet->getDiet() != CreatureFlag::NONE) // show converse to npcs that eat food i.e. not atst
pet->setOptionBit(OptionBitmask::CONVERSE,true);
**/
//.........这里部分代码省略.........
示例13: SuiListBox
void VehicleObjectImplementation::sendRepairConfirmTo(CreatureObject* player) {
ManagedReference<SuiListBox*> listbox = new SuiListBox(player, SuiWindowType::GARAGE_REPAIR);
listbox->setCallback(new RepairVehicleSuiCallback(server->getZoneServer()));
listbox->setPromptTitle("@pet/pet_menu:confirm_repairs_t"); //Confirm Vehicle Repairs
listbox->setPromptText("@pet/pet_menu:vehicle_repair_d"); //You have chosen to repair your vehicle. Please review the listed details and confirm your selection.
listbox->setUsingObject(_this.getReferenceUnsafeStaticCast());
listbox->setCancelButton(true, "@cancel");
int repairCost = calculateRepairCost(player);
int totalFunds = player->getBankCredits();
int tax = 0;
ManagedReference<CityRegion*> city = getCityRegion();
if(city != NULL && city->getGarageTax() > 0){
repairCost += repairCost * city->getGarageTax() / 100;
}
listbox->addMenuItem("@pet/pet_menu:vehicle_prompt " + getDisplayedName()); //Vehicle:
listbox->addMenuItem("@pet/pet_menu:repair_cost_prompt " + String::valueOf(repairCost)); //Repair Cost:
listbox->addMenuItem("@pet/pet_menu:total_funds_prompt " + String::valueOf(totalFunds)); //Total Funds Available:
player->getPlayerObject()->addSuiBox(listbox);
player->sendMessage(listbox->generateMessage());
}
示例14: if
int ConversationObserverImplementation::notifyObserverEvent(unsigned int eventType, Observable* observable, ManagedObject* arg1, long long arg2) {
//Verify needed parameters
if (eventType != ObserverEventType::CONVERSE && eventType != ObserverEventType::STARTCONVERSATION &&
eventType != ObserverEventType::SELECTCONVERSATION && eventType != ObserverEventType::STOPCONVERSATION &&
eventType != ObserverEventType::POSITIONCHANGED) {
//Incorrect event type.
return 0;
}
if (observable == NULL)
return 0;
if (arg1 == NULL && eventType != ObserverEventType::POSITIONCHANGED)
return 0;
//Try to convert parameters to correct types.
CreatureObject* npc = NULL;
CreatureObject* player = NULL;
int selectedOption;
try {
npc = cast<CreatureObject* >(observable);
if (arg1 != NULL)
player = cast<CreatureObject* >(arg1);
if (arg2 < std::numeric_limits<int>::min()) {
selectedOption = std::numeric_limits<int>::min();
} else if (arg2 > std::numeric_limits<int>::max()) {
selectedOption = std::numeric_limits<int>::max();
} else {
selectedOption = arg2;
}
} catch (...) {
//Failed to convert parameters. Keep observer.
return 0;
}
switch (eventType) {
case ObserverEventType::POSITIONCHANGED:
if (npc != NULL) { //the observable in this case is the player
ManagedReference<ConversationSession*> session = npc->getActiveSession(SessionFacadeType::CONVERSATION).castTo<ConversationSession*>();
if (session != NULL) {
ManagedReference<CreatureObject*> sessionNpc = session->getNPC();
if (sessionNpc == NULL || npc->getDistanceTo(sessionNpc) > 7.f) {
cancelConversationSession(npc, session->getNPC().get(), true);
return 0;
}
}
}
return 0;
case ObserverEventType::STOPCONVERSATION:
cancelConversationSession(player, npc);
//Keep observer.
return 0;
case ObserverEventType::STARTCONVERSATION: {
//Cancel any existing sessions.
cancelConversationSession(player, npc);
//Create a new session.
createConversationSession(player, npc);
createPositionObserver(player);
break;
}
default:
break;
}
//Select next conversation screen.
Reference<ConversationScreen*> conversationScreen = getNextConversationScreen(player, selectedOption, npc);
if (conversationScreen != NULL) {
//Modify the conversation screen.
conversationScreen = runScreenHandlers(player, npc, selectedOption, conversationScreen);
}
//Send the conversation screen to the player.
sendConversationScreenToPlayer(player, npc, conversationScreen);
if (conversationScreen == NULL)
cancelConversationSession(player, npc);
//Keep the observer.
return 0;
}
示例15: _alocker
void ZoneImplementation::updateActiveAreas(TangibleObject* tano) {
//Locker locker(_this.getReferenceUnsafeStaticCast());
Locker _alocker(tano->getContainerLock());
SortedVector<ManagedReference<ActiveArea* > > areas = *dynamic_cast<SortedVector<ManagedReference<ActiveArea* > >* >(tano->getActiveAreas());
_alocker.release();
Vector3 worldPos = tano->getWorldPosition();
SortedVector<ManagedReference<QuadTreeEntry*> > entryObjects;
Zone* managedRef = _this.getReferenceUnsafeStaticCast();
bool readlock = !managedRef->isLockedByCurrentThread();
managedRef->rlock(readlock);
try {
regionTree->inRange(worldPos.getX(), worldPos.getY(), entryObjects);
} catch (...) {
error("unexpeted error caught in void ZoneImplementation::updateActiveAreas(SceneObject* object) {");
}
managedRef->runlock(readlock);
//locker.release();
managedRef->unlock(!readlock);
try {
// update old ones
for (int i = 0; i < areas.size(); ++i) {
ManagedReference<ActiveArea*> area = areas.get(i);
// Locker lockerO(object);
// Locker locker(area, object);
if (!area->containsPoint(worldPos.getX(), worldPos.getY(), tano->getParentID())) {
tano->dropActiveArea(area);
area->enqueueExitEvent(tano);
// area->notifyExit(object);
} else {
area->notifyPositionUpdate(tano);
}
}
// we update the ones in quadtree.
for (int i = 0; i < entryObjects.size(); ++i) {
//update in new ones
ActiveArea* activeArea = dynamic_cast<ActiveArea*>(entryObjects.get(i).get());
if (!tano->hasActiveArea(activeArea) && activeArea->containsPoint(worldPos.getX(), worldPos.getY(), tano->getParentID())) {
//Locker lockerO(object);
//Locker locker(activeArea, object);
tano->addActiveArea(activeArea);
activeArea->enqueueEnterEvent(tano);
//activeArea->notifyEnter(object);
}
}
// update world areas
if (creatureManager != NULL) {
Vector<ManagedReference<SpawnArea*> >* worldAreas = creatureManager->getWorldSpawnAreas();
if (worldAreas != NULL) {
for (int i = 0; i < worldAreas->size(); ++i) {
ActiveArea* activeArea = worldAreas->get(i);
Locker lockerO(tano);
// Locker locker(activeArea, object);
if (!tano->hasActiveArea(activeArea)) {
tano->addActiveArea(activeArea);
//activeArea->enqueueEnterEvent(object);
activeArea->notifyEnter(tano);
} else {
activeArea->notifyPositionUpdate(tano);
}
}
}
}
} catch (...) {
error("unexpected exception caught in void ZoneImplementation::updateActiveAreas(SceneObject* object) {");
managedRef->wlock(!readlock);
throw;
}
managedRef->wlock(!readlock);
}