本文整理汇总了C++中VectorMap::contains方法的典型用法代码示例。如果您正苦于以下问题:C++ VectorMap::contains方法的具体用法?C++ VectorMap::contains怎么用?C++ VectorMap::contains使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VectorMap
的用法示例。
在下文中一共展示了VectorMap::contains方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getHighestDamagePlayer
CreatureObject* ThreatMap::getHighestDamagePlayer() {
Locker locker(&lockMutex);
uint32 maxDamage = 0;
VectorMap<uint64,uint32> damageMap;
CreatureObject* player = NULL;
for (int i = 0; i < size(); ++i) {
ThreatMapEntry* entry = &elementAt(i).getValue();
uint32 totalDamage = 0;
for (int j = 0; j < entry->size(); ++j) {
uint32 damage = entry->elementAt(j).getValue();
totalDamage += damage;
}
CreatureObject* creature = elementAt(i).getKey();
if (creature->isPlayerCreature()) {
if(!damageMap.contains(creature->getObjectID())){
damageMap.put(creature->getObjectID(),totalDamage);
} else {
damageMap.get(creature->getObjectID()) += totalDamage;
}
if (damageMap.get(creature->getObjectID()) > maxDamage) {
maxDamage = damageMap.get(creature->getObjectID());
player = cast<CreatureObject*>(creature);
}
} else if (creature->isPet()) {
CreatureObject* owner = creature->getLinkedCreature().get();
if (owner != NULL && owner->isPlayerCreature()) {
if(!damageMap.contains(owner->getObjectID())){
damageMap.put(owner->getObjectID(),totalDamage);
} else {
damageMap.get(owner->getObjectID()) += totalDamage;
}
if (damageMap.get(owner->getObjectID()) > maxDamage) {
maxDamage = damageMap.get(owner->getObjectID());
player = cast<CreatureObject*>(owner);
}
}
}
}
return player;
}
示例2: updateXpLimits
void SkillManager::updateXpLimits(PlayerObject* ghost) {
if (ghost == NULL || !ghost->isPlayerObject()) {
return;
}
VectorMap<String, int>* xpTypeCapList = ghost->getXpTypeCapList();
//Clear all xp limits to the default limits.
for (int i = 0; i < defaultXpLimits.size(); ++i) {
String xpType = defaultXpLimits.elementAt(i).getKey();
int xpLimit = defaultXpLimits.elementAt(i).getValue();
if (xpTypeCapList->contains(xpType)) {
xpTypeCapList->get(xpType) = xpLimit;
} else {
xpTypeCapList->put(xpType, xpLimit);
}
}
//Iterate over the player skills and update xp limits accordingly.
ManagedReference<CreatureObject*> player = cast<CreatureObject*>(ghost->getParentRecursively(SceneObjectType::PLAYERCREATURE).get().get());
if(player == NULL)
return;
SkillList* playerSkillBoxList = player->getSkillList();
for(int i = 0; i < playerSkillBoxList->size(); ++i) {
Skill* skillBox = playerSkillBoxList->get(i);
if (skillBox == NULL)
continue;
if (xpTypeCapList->contains(skillBox->getXpType()) && (xpTypeCapList->get(skillBox->getXpType()) < skillBox->getXpCap())) {
xpTypeCapList->get(skillBox->getXpType()) = skillBox->getXpCap();
}
}
//Iterate over the player xp types and cap all xp types to the limits.
DeltaVectorMap<String, int>* experienceList = ghost->getExperienceList();
for (int i = 0; i < experienceList->size(); ++i) {
String xpType = experienceList->getKeyAt(i);
if (experienceList->get(xpType) > xpTypeCapList->get(xpType)) {
ghost->addExperience(xpType, xpTypeCapList->get(xpType) - experienceList->get(xpType), true);
}
}
}
示例3: addSkillMods
void CraftingSessionImplementation::addSkillMods() {
ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
ManagedReference<TangibleObject*> prototype = this->prototype.get();
ManagedReference<DraftSchematic*> draftSchematic = manufactureSchematic->getDraftSchematic();
VectorMap<String, int>* skillMods = draftSchematic->getDraftSchematicTemplate()->getSkillMods();
for (int i = 0; i < skillMods->size(); i++) {
VectorMapEntry<String, int> mod = skillMods->elementAt(i);
if (prototype->isWearableObject()) {
WearableObject* wearable = prototype.castTo<WearableObject*>();
VectorMap<String, int>* wearableMods = wearable->getWearableSkillMods();
if (wearableMods->contains(mod.getKey())) {
int oldValue = wearableMods->get(mod.getKey());
int newValue = mod.getValue() + oldValue;
if (newValue > 25)
newValue = 25;
wearableMods->put(mod.getKey(), newValue);
continue;
}
}
prototype->addSkillMod(SkillModManager::WEARABLE, mod.getKey(), mod.getValue(), false);
}
}
示例4: canAddObject
int ContainerComponent::canAddObject(SceneObject* sceneObject, SceneObject* object, int containmentType, String& errorDescription) {
if (sceneObject == object) {
errorDescription = "@container_error_message:container02"; //You cannot add something to itself.
return TransferErrorCode::CANTADDTOITSELF;
}
Locker contLocker(sceneObject->getContainerLock());
VectorMap<String, ManagedReference<SceneObject*> >* slottedObjects = sceneObject->getSlottedObjects();
VectorMap<uint64, ManagedReference<SceneObject*> >* containerObjects = sceneObject->getContainerObjects();
if (containmentType >= 4) {
Locker contLocker(sceneObject->getContainerLock());
int arrangementGroup = containmentType - 4;
if (object->getArrangementDescriptorSize() > arrangementGroup) {
Vector<String> descriptors = object->getArrangementDescriptor(arrangementGroup);
for (int i = 0; i < descriptors.size(); ++i){
String childArrangement = descriptors.get(i);
if (slottedObjects->contains(childArrangement)) {
errorDescription = "@container_error_message:container04"; //This slot is already occupied.
return TransferErrorCode::SLOTOCCUPIED;
}
}
}
} else if (containmentType == -1) {
if (containerObjects->size() >= sceneObject->getContainerVolumeLimit()) {
errorDescription = "@container_error_message:container03"; //This container is full.
return TransferErrorCode::CONTAINERFULL;
}
} else {
sceneObject->error("unkown containmentType in canAddObject type " + String::valueOf(containmentType));
errorDescription = "DEBUG: cant move item unkown containmentType type";
return TransferErrorCode::UNKNOWNCONTAIMENTTYPE;
}
return 0;
}
示例5: getHighestDamageGroupLeader
CreatureObject* ThreatMap::getHighestDamageGroupLeader() {
Locker locker(&lockMutex);
VectorMap<uint64,uint32> groupDamageMap;
int64 highestGroupDmg = 0;
//Logger::Logger tlog("Threat");
ManagedReference<CreatureObject*> leaderCreature = NULL;
for (int i = 0; i < size(); ++i) {
ThreatMapEntry* entry = &elementAt(i).getValue();
uint32 totalDamage = entry->getTotalDamage();
CreatureObject* creature = elementAt(i).getKey();
//tlog.info("Group id is " + String::valueOf(creature->getGroupID()),true);
if (creature->isGrouped()) {
Reference<CreatureObject*> thisleader = creature->getGroup()->getLeader();
//tlog.info("leader is " + thisleader->getFirstName(),true);
if (thisleader == NULL || !thisleader->isPlayerCreature())
break;
if (!groupDamageMap.contains(creature->getGroupID())) {
//tlog.info("first dmg for group " + String::valueOf(creature->getGroupID()) + " dmg: " + String::valueOf(totalDamage), true);
groupDamageMap.put(creature->getGroupID(),totalDamage);
} else {
groupDamageMap.get(creature->getGroupID()) += totalDamage;
//tlog.info("adding to group " + String::valueOf(creature->getGroupID()) + " dmg total: " + String::valueOf(groupDamageMap.get(creature->getGroupID())) + " this player dmg: " + String::valueOf(totalDamage),true);
}
if (groupDamageMap.get(creature->getGroupID()) > highestGroupDmg) {
highestGroupDmg = groupDamageMap.get(creature->getGroupID());
leaderCreature = thisleader;
}
} else if (creature->isPet()) {
CreatureObject* owner = creature->getLinkedCreature().get();
if (owner != NULL && owner->isPlayerCreature()) {
if (owner->isGrouped()) {
Reference<CreatureObject*> thisleader = owner->getGroup()->getLeader();
if (thisleader == NULL || !thisleader->isPlayerCreature())
break;
if (!groupDamageMap.contains(owner->getGroupID())) {
groupDamageMap.put(owner->getGroupID(),totalDamage);
} else {
groupDamageMap.get(owner->getGroupID()) += totalDamage;
}
if (groupDamageMap.get(owner->getGroupID()) > highestGroupDmg) {
highestGroupDmg = groupDamageMap.get(owner->getGroupID());
leaderCreature = thisleader;
}
} else {
if (!groupDamageMap.contains(owner->getObjectID())) {
groupDamageMap.put(owner->getObjectID(),totalDamage);
} else {
groupDamageMap.get(owner->getObjectID()) += totalDamage;
}
if (totalDamage > highestGroupDmg) {
highestGroupDmg = totalDamage;
leaderCreature = owner;
}
}
}
} else {
//tlog.info("adding single creature damage " + String::valueOf(totalDamage),true);
groupDamageMap.put(creature->getObjectID(),totalDamage);
if (totalDamage > highestGroupDmg) {
highestGroupDmg = totalDamage;
leaderCreature = creature;
}
}
}
//tlog.info("highest group is " + leaderCreature->getFirstName() + " damage of " + String::valueOf(highestGroupDmg),true);
return leaderCreature;
}
示例6: applyComponentStats
bool ResourceLabratory::applyComponentStats(TangibleObject* prototype, ManufactureSchematic* manufactureSchematic) {
if(manufactureSchematic == NULL || manufactureSchematic->getDraftSchematic() == NULL)
return false;
float max, min, currentvalue, propertyvalue;
int precision;
bool modified = false;
bool hidden;
String experimentalTitle, property;
CraftingValues* craftingValues = manufactureSchematic->getCraftingValues();
ManagedReference<DraftSchematic* > draftSchematic = manufactureSchematic->getDraftSchematic();
for (int i = 0; i < manufactureSchematic->getSlotCount(); ++i) {
Reference<IngredientSlot* > ingredientSlot = manufactureSchematic->getSlot(i);
Reference<DraftSlot* > draftSlot = draftSchematic->getDraftSlot(i);
if(ingredientSlot == NULL || !ingredientSlot->isComponentSlot() || !ingredientSlot->isFull())
continue;
ComponentSlot* compSlot = cast<ComponentSlot*>(ingredientSlot.get());
if(compSlot == NULL)
continue;
ManagedReference<TangibleObject*> tano = compSlot->getPrototype();
if (tano == NULL || !tano->isComponent())
continue;
ManagedReference<Component*> component = cast<Component*>( tano.get());
if (prototype->isWearableObject() && !prototype->isArmorObject()) {
if (component->getObjectTemplate()->getObjectName() == "@craft_clothing_ingredients_n:reinforced_fiber_panels" || component->getObjectTemplate()->getObjectName() == "@craft_clothing_ingredients_n:synthetic_cloth"){
for (int k = 0; k < component->getPropertyCount(); ++k) {
const String property = component->getProperty(k);
if (property == "" || property == "null") {
continue;
}
String key = checkBioSkillMods(property);
if (key == "") {
continue;
} else {
currentvalue = component->getAttributeValue(property);
precision = component->getAttributePrecision(property);
int preciseValue = Math::getPrecision(currentvalue, precision);
WearableObject* clothing = cast<WearableObject*>(prototype);
VectorMap<String, int>* clothingMods = clothing->getWearableSkillMods();
int existingValue = 0;
if(clothingMods->contains(key)) {
existingValue = clothingMods->get(key);
}
preciseValue += existingValue;
if (preciseValue > 25)
preciseValue = 25;
clothing->addSkillMod(SkillModManager::WEARABLE, key, preciseValue);
}
}
}
} else {
for (int j = 0; j < component->getPropertyCount(); ++j) {
property = component->getProperty(j); // charges
modified = true;
if (craftingValues->hasProperty(property)) {
max = craftingValues->getMaxValue(property);
min = craftingValues->getMinValue(property);
hidden = craftingValues->isHidden(property);
currentvalue = craftingValues->getCurrentValue(property);
propertyvalue = component->getAttributeValue(property) * draftSlot->getContribution();
short combineType = craftingValues->getCombineType(property);
switch(combineType) {
case CraftingManager::LINEARCOMBINE:
currentvalue += propertyvalue;
min += propertyvalue;
max += propertyvalue;
craftingValues->setMinValue(property, min);
craftingValues->setMaxValue(property, max);
craftingValues->setCurrentValue(property, currentvalue);
break;
case CraftingManager::PERCENTAGECOMBINE:
currentvalue += propertyvalue;
min += propertyvalue;
max += propertyvalue;
craftingValues->setMinValue(property, min);
craftingValues->setMaxValue(property, max);
//.........这里部分代码省略.........
示例7: checkForNewSpawns
bool LairObserverImplementation::checkForNewSpawns(TangibleObject* lair, TangibleObject* attacker, bool forceSpawn) {
if (lair->getZone() == NULL)
return false;
if (spawnedCreatures.size() >= lairTemplate->getSpawnLimit() && !lairTemplate->hasBossMobs())
return false;
if (forceSpawn) {
spawnNumber++;
} else if (getMobType() == LairTemplate::NPC) {
return false;
} else {
int conditionDamage = lair->getConditionDamage();
int maxCondition = lair->getMaxCondition();
switch (spawnNumber) {
case 0:
spawnNumber++;
break;
case 1:
if (conditionDamage > (maxCondition / 10)) {
spawnNumber++;
} else {
return false;
}
break;
case 2:
if (conditionDamage > (maxCondition / 2)) {
spawnNumber++;
} else {
return false;
}
break;
case 3:
if (lairTemplate->hasBossMobs() && conditionDamage > ((maxCondition * 9) / 10)) {
spawnNumber++;
} else {
return false;
}
break;
default:
return false;
break;
}
}
VectorMap<String, int> objectsToSpawn; // String mobileTemplate, int number to spawn
if (spawnNumber == 4) {
if (System::random(100) > 9)
return false;
VectorMap<String, int>* mobs = lairTemplate->getBossMobiles();
for (int i = 0; i < mobs->size(); i++) {
objectsToSpawn.put(mobs->elementAt(i).getKey(), mobs->elementAt(i).getValue());
}
} else {
Vector<String>* mobiles = lairTemplate->getWeightedMobiles();
int amountToSpawn = 0;
if (getMobType() == LairTemplate::CREATURE) {
amountToSpawn = System::random(3) + ((lairTemplate->getSpawnLimit() / 3) - 2);
} else {
amountToSpawn = System::random(lairTemplate->getSpawnLimit() / 2) + (lairTemplate->getSpawnLimit() / 2);
}
if (amountToSpawn < 1)
amountToSpawn = 1;
for (int i = 0; i < amountToSpawn; i++) {
int num = System::random(mobiles->size() - 1);
String mob = mobiles->get(num);
if (objectsToSpawn.contains(mob)) {
int value = objectsToSpawn.get(mob);
objectsToSpawn.drop(mob);
objectsToSpawn.put(mob, value + 1);
} else {
objectsToSpawn.put(mob, 1);
}
}
}
for(int i = 0; i < objectsToSpawn.size(); ++i) {
if (spawnNumber != 4 && spawnedCreatures.size() >= lairTemplate->getSpawnLimit())
return true;
String templateToSpawn = objectsToSpawn.elementAt(i).getKey();
int numberToSpawn = objectsToSpawn.get(templateToSpawn);
CreatureTemplate* creatureTemplate = CreatureTemplateManager::instance()->getTemplate(templateToSpawn);
if (creatureTemplate == NULL)
continue;
float tamingChance = creatureTemplate->getTame();
//.........这里部分代码省略.........
示例8: removeObject
bool ContainerComponent::removeObject(SceneObject* sceneObject, SceneObject* object, SceneObject* destination, bool notifyClient) {
VectorMap<String, ManagedReference<SceneObject*> >* slottedObjects = sceneObject->getSlottedObjects();
VectorMap<uint64, ManagedReference<SceneObject*> >* containerObjects = sceneObject->getContainerObjects();
ManagedReference<SceneObject*> objectKeeper = object;
if (object->getParent() != sceneObject && object->getParent() != NULL) {
ManagedReference<SceneObject*> objParent = object->getParent();
Locker contLocker(sceneObject->getContainerLock());
containerObjects->drop(object->getObjectID());
if (objParent->hasObjectInContainer(object->getObjectID()) || objParent->hasObjectInSlottedContainer(object)) {
sceneObject->error("trying to remove an object that is in a different object");
objParent->info("i am the parent", true);
return false;
} else
object->setParent(NULL);
}
int containedType = object->getContainmentType();
//info("trying to remove object with containedType " + String::valueOf(containedType), true);
// if (containedType == 4 || containedType == 5) {
Locker contLocker(sceneObject->getContainerLock());
int arrangementSize = object->getArrangementDescriptorSize();
int arrangementGroup = MAX(0, containedType - 4);
if (object->getArrangementDescriptorSize() > arrangementGroup) {
bool removeFromSlot = false;
const Vector<String>* descriptors = object->getArrangementDescriptor(arrangementGroup);
for (int i = 0; i < descriptors->size(); ++i){
const String& childArrangement = descriptors->get(i);
ManagedReference<SceneObject*> obj = slottedObjects->get(childArrangement);
if (slottedObjects->get(childArrangement) == object) {
removeFromSlot = true;
break;
}
}
if (removeFromSlot) {
for (int i = 0; i < descriptors->size(); ++i)
slottedObjects->drop(descriptors->get(i));
}
}
// } else if (containedType == -1) {
//Locker contLocker(sceneObject->getContainerLock());
if (containerObjects->contains(object->getObjectID())) {
//info("containerObjects doesnt contain specified object", true);
//object->setParent(NULL);
// return false;
containerObjects->drop(object->getObjectID());
}
object->setParent(NULL);
contLocker.release();
/*
} else {
sceneObject->error("unknown contained type " + String::valueOf(containedType));
StackTrace::printStackTrace();
return false;
}
*/
if (notifyClient)
sceneObject->broadcastMessage(object->link((uint64) 0, 0xFFFFFFFF), true);
notifyObjectRemoved(sceneObject, object, destination);
sceneObject->updateToDatabase();
object->updateToDatabase();
if (sceneObject->getParent() == NULL) {
sceneObject->notifyObjectRemovedFromChild(object, sceneObject);
} else {
ManagedReference<SceneObject*> rootParent = sceneObject->getRootParent();
if (rootParent != NULL)
rootParent->notifyObjectRemovedFromChild(object, sceneObject);
else
sceneObject->notifyObjectRemovedFromChild(object, sceneObject);
}
//.........这里部分代码省略.........
示例9: transferObject
bool ContainerComponent::transferObject(SceneObject* sceneObject, SceneObject* object, int containmentType, bool notifyClient, bool allowOverflow) {
if (sceneObject == object) {
return false;
}
ManagedReference<SceneObject*> objParent = object->getParent();
ManagedReference<Zone*> objZone = object->getLocalZone();
if (object->containsActiveSession(SessionFacadeType::SLICING)) {
ManagedReference<Facade*> facade = object->getActiveSession(SessionFacadeType::SLICING);
ManagedReference<SlicingSession*> session = dynamic_cast<SlicingSession*>(facade.get());
if (session != NULL) {
session->cancelSession();
}
}
if (objParent != NULL || objZone != NULL) {
if (objParent != NULL)
objParent->removeObject(object, sceneObject, notifyClient);
if (object->getParent() != NULL) {
object->error("error removing from parent");
return false;
}
if (objZone != NULL)
objZone->remove(object);
object->setZone(NULL);
if (objParent == NULL)
objParent = objZone;
}
bool update = true;
VectorMap<String, ManagedReference<SceneObject*> >* slottedObjects = sceneObject->getSlottedObjects();
VectorMap<uint64, ManagedReference<SceneObject*> >* containerObjects = sceneObject->getContainerObjects();
//if (containerType == 1 || containerType == 5) {
if (containmentType >= 4) {
Locker contLocker(sceneObject->getContainerLock());
int arrangementGroup = containmentType - 4;
if (object->getArrangementDescriptorSize() > arrangementGroup) {
const Vector<String>* descriptors = object->getArrangementDescriptor(arrangementGroup);
for (int i = 0; i < descriptors->size(); ++i){
const String& childArrangement = descriptors->get(i);
if (slottedObjects->contains(childArrangement)) {
return false;
}
}
for (int i = 0; i < descriptors->size(); ++i) {
slottedObjects->put(descriptors->get(i), object);
}
} else {
return false;
}
object->setParent(sceneObject);
object->setContainmentType(containmentType);
} else if (containmentType == -1) { /* else if (containerType == 2 || containerType == 3) {*/
Locker contLocker(sceneObject->getContainerLock());
if (!allowOverflow && containerObjects->size() >= sceneObject->getContainerVolumeLimit()){
return false;
}
/*if (containerObjects.contains(object->getObjectID()))
return false*/
if (containerObjects->put(object->getObjectID(), object) == -1)
update = false;
object->setParent(sceneObject);
object->setContainmentType(containmentType);
} else {
sceneObject->error("unknown containment type " + String::valueOf(containmentType));
StackTrace::printStackTrace();
return false;
}
if ((containmentType >= 4) && objZone == NULL)
sceneObject->broadcastObject(object, true);
else if (notifyClient)
sceneObject->broadcastMessage(object->link(sceneObject->getObjectID(), containmentType), true);
notifyObjectInserted(sceneObject, object);
if (update) {
sceneObject->updateToDatabase();
//object->updateToDatabaseWithoutChildren()();
}
ManagedReference<SceneObject*> rootParent = object->getRootParent();
//.........这里部分代码省略.........
示例10: canAddObject
int ContainerComponent::canAddObject(SceneObject* sceneObject, SceneObject* object, int containmentType, String& errorDescription) {
if (sceneObject == object) {
errorDescription = "@container_error_message:container02"; //You cannot add something to itself.
return TransferErrorCode::CANTADDTOITSELF;
}
if ((object->isNoTrade() || object->containsNoTradeObjectRecursive()) && !object->isVendor()) {
ManagedReference<SceneObject*> containerPlayerParent = sceneObject->getParentRecursively(SceneObjectType::PLAYERCREATURE);
ManagedReference<SceneObject*> containerBuildingParent = sceneObject->getParentRecursively(SceneObjectType::BUILDING);
ManagedReference<SceneObject*> containerFactoryParent = sceneObject->getParentRecursively(SceneObjectType::FACTORY);
ManagedReference<SceneObject*> objPlayerParent = object->getParentRecursively(SceneObjectType::PLAYERCREATURE);
ManagedReference<SceneObject*> objBuildingParent = object->getParentRecursively(SceneObjectType::BUILDING);
if (containerFactoryParent != NULL) {
errorDescription = "@container_error_message:container28";
return TransferErrorCode::CANTADD;
} else if (objPlayerParent == NULL && objBuildingParent != NULL) {
ManagedReference<BuildingObject*> buio = cast<BuildingObject*>( objBuildingParent.get());
if (buio != NULL ) {
uint64 bid = buio->getOwnerObjectID();
if ((containerPlayerParent != NULL && bid != containerPlayerParent->getObjectID()) || (sceneObject->isPlayerCreature() && bid != sceneObject->getObjectID())) {
errorDescription = "@container_error_message:container27";
return TransferErrorCode::CANTREMOVE;
}
}
} else if (objPlayerParent != NULL && containerPlayerParent == NULL && containerBuildingParent != NULL && !sceneObject->isPlayerCreature()) {
ManagedReference<BuildingObject*> buio = cast<BuildingObject*>( containerBuildingParent.get());
if (buio != NULL && buio->getOwnerObjectID() != objPlayerParent->getObjectID()) {
errorDescription = "@container_error_message:container28";
return TransferErrorCode::CANTADD;
}
}
} else if (object->isVendor()) {
ManagedReference<SceneObject*> containerPlayerParent = sceneObject->getParentRecursively(SceneObjectType::PLAYERCREATURE);
if (!sceneObject->isCellObject() && (!sceneObject->hasArrangementDescriptor("inventory") || containerPlayerParent == NULL)) {
return TransferErrorCode::CANTADD;
}
}
Locker contLocker(sceneObject->getContainerLock());
VectorMap<String, ManagedReference<SceneObject*> >* slottedObjects = sceneObject->getSlottedObjects();
VectorMap<uint64, ManagedReference<SceneObject*> >* containerObjects = sceneObject->getContainerObjects();
if (containmentType >= 4) {
Locker contLocker(sceneObject->getContainerLock());
int arrangementGroup = containmentType - 4;
if (object->getArrangementDescriptorSize() > arrangementGroup) {
const Vector<String>* descriptors = object->getArrangementDescriptor(arrangementGroup);
for (int i = 0; i < descriptors->size(); ++i){
const String& childArrangement = descriptors->get(i);
if (slottedObjects->contains(childArrangement)) {
errorDescription = "@container_error_message:container04"; //This slot is already occupied.
return TransferErrorCode::SLOTOCCUPIED;
}
}
}
} else if (containmentType == -1) {
if (containerObjects->size() >= sceneObject->getContainerVolumeLimit()) {
errorDescription = "@container_error_message:container03"; //This container is full.
return TransferErrorCode::CONTAINERFULL;
}
} else {
sceneObject->error("unknown containmentType in canAddObject type " + String::valueOf(containmentType));
errorDescription = "DEBUG: cant move item unknown containmentType type";
return TransferErrorCode::UNKNOWNCONTAIMENTTYPE;
}
return 0;
}