コード例 #1
0
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(&current);

	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;
}
コード例 #2
0
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);
			}
		}
	}
}
コード例 #3
0
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 );
	}

}