int PlayerContainerComponent::canAddObject(SceneObject* sceneObject, SceneObject* object, int containmentType, String& errorDescription) { CreatureObject* creo = dynamic_cast<CreatureObject*>(sceneObject); if (object->isTangibleObject() && containmentType == 4) { TangibleObject* wearable = cast<TangibleObject*>( object); SharedTangibleObjectTemplate* tanoData = dynamic_cast<SharedTangibleObjectTemplate*>(wearable->getObjectTemplate()); Vector<uint32>* races = tanoData->getPlayerRaces(); String race = creo->getObjectTemplate()->getFullTemplateString(); if (!races->contains(race.hashCode())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (creo->isPlayerCreature()) { if (!wearable->isNeutral()) { ManagedReference<PlayerObject*> playerObject = creo->getPlayerObject(); if (wearable->isImperial() && (playerObject->getFactionStatus() == FactionStatus::ONLEAVE || !creo->isImperial())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (wearable->isRebel() && (playerObject->getFactionStatus() == FactionStatus::ONLEAVE || !creo->isRebel())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } } } } if (object->isArmorObject() && containmentType == 4) { PlayerManager* playerManager = sceneObject->getZoneServer()->getPlayerManager(); if (!playerManager->checkEncumbrancies(dynamic_cast<CreatureObject*>(sceneObject), cast<ArmorObject*>( object))) { errorDescription = "You lack the necessary secondary stats to equip this item"; return TransferErrorCode::NOTENOUGHENCUMBRANCE; } } if (object->isRobeObject() && containmentType == 4) { ManagedReference<RobeObject*> robe = cast<RobeObject*>( object); String skillRequired = robe->getSkillRequired(); if (!creo->hasSkill(skillRequired) && skillRequired != ""){ errorDescription = "You are not eligible to wear this robe."; return TransferErrorCode::PLAYERUSEMASKERROR; } } if (object->isWeaponObject() && containmentType == 4) { ManagedReference<WeaponObject*> weapon = cast<WeaponObject*>( object); int bladeColor = weapon->getBladeColor(); if (weapon->isJediWeapon()){ if (bladeColor == 31) { errorDescription = "@jedi_spam:lightsaber_no_color"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (weapon->getCraftersName() != creo->getFirstName()) { errorDescription = "@jedi_spam:not_your_lightsaber"; return TransferErrorCode::PLAYERUSEMASKERROR; } } } return ContainerComponent::canAddObject(sceneObject, object, containmentType, errorDescription); }
int PlayerContainerComponent::canAddObject(SceneObject* sceneObject, SceneObject* object, int containmentType, String& errorDescription) { CreatureObject* creo = dynamic_cast<CreatureObject*>(sceneObject); if (object->isTangibleObject() && containmentType == 4) { TangibleObject* wearable = cast<TangibleObject*>( object); SharedTangibleObjectTemplate* tanoData = dynamic_cast<SharedTangibleObjectTemplate*>(wearable->getObjectTemplate()); Vector<uint32>* races = tanoData->getPlayerRaces(); String race = creo->getObjectTemplate()->getFullTemplateString(); if (!races->contains(race.hashCode())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (creo->isPlayerCreature()) { if (!wearable->isNeutral()) { ManagedReference<PlayerObject*> playerObject = creo->getPlayerObject(); if (wearable->isImperial() && (playerObject->getFactionStatus() == FactionStatus::ONLEAVE || !creo->isImperial())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (wearable->isRebel() && (playerObject->getFactionStatus() == FactionStatus::ONLEAVE || !creo->isRebel())) { errorDescription = "You lack the necessary requirements to wear this object"; return TransferErrorCode::PLAYERUSEMASKERROR; } } } } if (object->isArmorObject() && containmentType == 4) { PlayerManager* playerManager = sceneObject->getZoneServer()->getPlayerManager(); if (!playerManager->checkEncumbrancies(dynamic_cast<CreatureObject*>(sceneObject), cast<ArmorObject*>( object))) { errorDescription = "You lack the necessary secondary stats to equip this item"; return TransferErrorCode::NOTENOUGHENCUMBRANCE; } } if (object->isWearableObject() && containmentType == 4) { ManagedReference<WearableObject*> wearable = cast<WearableObject*>( object); SharedTangibleObjectTemplate* wearableData = dynamic_cast<SharedTangibleObjectTemplate*>(wearable->getObjectTemplate()); Vector<String> skillsRequired = wearableData->getCertificationsRequired(); if (skillsRequired.size() > 0) { bool hasSkill = false; for (int i = 0; i < skillsRequired.size(); i++) { String skill = skillsRequired.get(i); if (!skill.isEmpty() && creo->hasSkill(skill)) { hasSkill = true; break; } } if (!hasSkill) { errorDescription = "@error_message:insufficient_skill"; // You lack the skill to use this item. return TransferErrorCode::PLAYERUSEMASKERROR; } } } if (object->isWeaponObject() && containmentType == 4) { ManagedReference<WeaponObject*> weapon = cast<WeaponObject*>( object); int bladeColor = weapon->getBladeColor(); if (weapon->isJediWeapon()){ if (bladeColor == 31) { errorDescription = "@jedi_spam:lightsaber_no_color"; return TransferErrorCode::PLAYERUSEMASKERROR; } if (weapon->getCraftersName() != creo->getFirstName()) { errorDescription = "@jedi_spam:not_your_lightsaber"; return TransferErrorCode::PLAYERUSEMASKERROR; } } } return ContainerComponent::canAddObject(sceneObject, object, containmentType, errorDescription); }