void RingObjectMenuComponent::fillObjectMenuResponse(SceneObject* sceneObject, ObjectMenuResponse* menuResponse, CreatureObject* player) const { if (!sceneObject->isTangibleObject()) return; WearableObject* wearable = cast<WearableObject*>(sceneObject); if (wearable == NULL) return; ZoneServer* server = player->getZoneServer(); PlayerObject* ghost = player->getPlayerObject(); if (server == NULL || ghost == NULL) return; if (!wearable->isEquipped() && !wearable->isNoTrade()) { if (ghost->isMarried()) { menuResponse->addRadialMenuItem(234, 3, "@unity:mnu_divorce"); // Divorce } else { uint64 targetID = player->getTargetID(); ManagedReference<CreatureObject*> target = server->getObject(targetID, true).castTo<CreatureObject*>(); if (target != NULL && target->isPlayerCreature()) menuResponse->addRadialMenuItem(22, 3, "@unity:mnu_propose"); // Propose Unity } } TangibleObjectMenuComponent::fillObjectMenuResponse(sceneObject, menuResponse, player); }
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); } }