bool DroidObjectImplementation::sendConversationStartTo(SceneObject* player) { if (!player->isPlayerCreature() || isDead()) return false; if (player != getLinkedCreature().get()) return false; BaseDroidModuleComponent* m = getModule("personality_chip"); if (m == NULL) { return false; } DroidPersonalityModuleDataComponent* personality = dynamic_cast<DroidPersonalityModuleDataComponent*>(m); if (personality == NULL) { return false; } if (personality->getPersonalityConversationTemplate() == 0) { return false; } //Face player. faceObject(player); PatrolPoint current(coordinates.getPosition(), getParent().get()); broadcastNextPositionUpdate(¤t); CreatureObject* playerCreature = cast<CreatureObject*>( player); StartNpcConversation* conv = new StartNpcConversation(playerCreature, getObjectID(), ""); player->sendMessage(conv); SortedVector<ManagedReference<Observer*> > observers = getObservers(ObserverEventType::STARTCONVERSATION); for (int i = 0; i < observers.size(); ++i) { if (dynamic_cast<ConversationObserver*>(observers.get(i).get()) != NULL) { return true; } } //Create conversation observer. ConversationObserver* conversationObserver = ConversationManager::instance()->getConversationObserver(personality->getPersonalityConversationTemplate()); if (conversationObserver != NULL) { //Register observers. registerObserver(ObserverEventType::CONVERSE, conversationObserver); registerObserver(ObserverEventType::STARTCONVERSATION, conversationObserver); registerObserver(ObserverEventType::SELECTCONVERSATION, conversationObserver); registerObserver(ObserverEventType::STOPCONVERSATION, conversationObserver); } else { error("Could not create conversation observer."); return false; } return true; }
void DroidObjectImplementation::fillAttributeList(AttributeListMessage* msg, CreatureObject* object){ AiAgentImplementation::fillAttributeList( msg, object ); float percentPower = ((float)power/(float)MAX_POWER)*100.0; msg->insertAttribute("@obj_attr_n:battery_power", String::valueOf((int)percentPower) + "%"); if (paintCount > 0){ msg->insertAttribute("customization_cnt", paintCount); } // only the owner should see module stats. AiAgent will fill in normal stuff if (getLinkedCreature().get() == object || getLinkedCreature().get() == NULL || object == NULL) { for( int i=0; i<modules.size(); i++){ BaseDroidModuleComponent* module = modules.get(i); if( module != NULL ){ module->fillAttributeList(msg, object); } } } }
void DroidObjectImplementation::fillObjectMenuResponse(ObjectMenuResponse* menuResponse, CreatureObject* player){ SceneObjectImplementation::fillObjectMenuResponse( menuResponse, player ); // PetMenuComponent if (isMerchantBarker() && getLinkedCreature().get() != player) { BaseDroidModuleComponent* module = getModule("merchant_barker"); if (module != NULL) module->fillObjectMenuResponse( _this.getReferenceUnsafeStaticCast(), menuResponse, player ); return; } if (getLinkedCreature().get() != player) { return; } // Allow modules to add radials PetControlDevice* pcd = getControlDevice().get().castTo<PetControlDevice*>(); for( int i=0; i<modules.size(); i++){ BaseDroidModuleComponent* module = modules.get(i); module->fillObjectMenuResponse( _this.getReferenceUnsafeStaticCast(), menuResponse, player ); } }
int DroidObjectImplementation::handleObjectMenuSelect(CreatureObject* player, byte selectedID){ if (getLinkedCreature().get() == player) { // Allow modules to handle radials if desired PetControlDevice* pcd = getControlDevice().get().castTo<PetControlDevice*>(); for( int i=0; i<modules.size(); i++){ BaseDroidModuleComponent* module = modules.get(i); module->handleObjectMenuSelect(player, selectedID, pcd); } } return SceneObjectImplementation::handleObjectMenuSelect(player, selectedID); // PetMenuComponent }
void DroidObjectImplementation::fillObjectMenuResponse(ObjectMenuResponse* menuResponse, CreatureObject* player){ SceneObjectImplementation::fillObjectMenuResponse( menuResponse, player ); // PetMenuComponent if (getLinkedCreature().get() != player) { return; } // Allow modules to add radials PetControlDevice* pcd = getControlDevice().get().castTo<PetControlDevice*>(); for( int i=0; i<modules.size(); i++){ BaseDroidModuleComponent* module = modules.get(i); module->fillObjectMenuResponse( _this.get(), menuResponse, player ); } }