bool LootContainerComponent::checkContainerPermission(SceneObject* sceneObject, CreatureObject* creature, uint16 permission) { ContainerPermissions* permissions = sceneObject->getContainerPermissions(); if(permission == ContainerPermissions::MOVEIN) return false; else if (permission == ContainerPermissions::MOVEOUT ){ return (permissions->getOwnerID() == creature->getObjectID() || permissions->getOwnerID() == creature->getGroupID()); } return false; }
bool ContainerComponent::checkContainerPermission(SceneObject* sceneObject, CreatureObject* creature, uint16 permission) { ContainerPermissions* permissions = sceneObject->getContainerPermissions(); if (permissions->getOwnerID() == creature->getObjectID()) { return permissions->hasOwnerPermission(permission); } PlayerObject* ghost = creature->getPlayerObject(); if (ghost == NULL) return false; if (permission == ContainerPermissions::OPEN && ghost->isPrivileged()) return true; ManagedReference<SceneObject*> parent = sceneObject->getParent().get(); if (permission != ContainerPermissions::MOVECONTAINER && permissions->hasInheritPermissionsFromParent() && parent != NULL && parent != sceneObject) { return parent->checkContainerPermission(creature, permission); } else if (permission == ContainerPermissions::MOVECONTAINER && sceneObject->isStaticObject()) { return false; } SortedVector<String>* groups = ghost->getPermissionGroups(); uint16 allowPermissions = 0, denyPermissions = 0; for (int i = 0; i < groups->size(); ++i) { String group = groups->get(i); uint16 allow = permissions->getAllowPermissions(group); allowPermissions |= allow; uint16 deny = permissions->getDenyPermissions(group); denyPermissions |= deny; } return permission & (allowPermissions & ~denyPermissions); }