Example #1
0
int HeroRingMenuComponent::handleObjectMenuSelect(SceneObject* sceneObject, CreatureObject* player, byte selectedID) const {

	if (selectedID == 20) { // Restore Life

		if (!sceneObject->isASubChildOf(player))
			return 0;

		WearableObject* wearable = cast<WearableObject*>(sceneObject);

		if (wearable == NULL)
			return 0;

		HeroRingDataComponent* data = cast<HeroRingDataComponent*>(wearable->getDataObjectComponent()->get());

		if (data == NULL || !data->isHeroRingData())
			return 0;

		int charges = data->getCharges();

		if (charges <= 0)
			return 0;

		if (!wearable->isEquipped()) {
			player->sendSystemMessage("@quest/hero_of_tatooine/system_messages:restore_not_equipped");
			return 0;
		}

		if (!player->isDead()) {
			player->sendSystemMessage("@quest/hero_of_tatooine/system_messages:restore_not_dead");
			return 0;
		}

		if (!player->checkCooldownRecovery("mark_of_hero")) {
			Time* timeRemaining = player->getCooldownTime("mark_of_hero");
			StringIdChatParameter cooldown("quest/hero_of_tatooine/system_messages", "restore_not_yet");
			cooldown.setTO(getCooldownString(timeRemaining->miliDifference() * -1));
			player->sendSystemMessage(cooldown);
			return 0;
		}

		player->healDamage(player, CreatureAttribute::HEALTH, 200);
		player->healDamage(player, CreatureAttribute::ACTION, 200);
		player->healDamage(player, CreatureAttribute::MIND, 200);

		data->setCharges(charges - 1);

		String hardpoint = "";

		if (player->getSlottedObject("ring_r") != NULL && player->getSlottedObject("ring_r")->getObjectID() == sceneObject->getObjectID())
			hardpoint = "hold_r";
		else if (player->getSlottedObject("ring_l") != NULL && player->getSlottedObject("ring_l")->getObjectID() == sceneObject->getObjectID())
			hardpoint = "hold_l";

		PlayClientEffectObjectMessage* effect = new PlayClientEffectObjectMessage(player, "clienteffect/item_ring_hero_mark.cef", hardpoint);
		player->broadcastMessage(effect, false);

		player->sendSystemMessage("@quest/hero_of_tatooine/system_messages:restore_msg");
		player->addCooldown("mark_of_hero", 23 * 3600 * 1000); // 23 hours

		return 0;
	} else {
		return TangibleObjectMenuComponent::handleObjectMenuSelect(sceneObject, player, selectedID);
	}

}