void WeaponObjectImplementation::createChildObjects() { // Create any child objects in a weapon. ZoneServer* zoneServer = server->getZoneServer(); for (int i = 0; i < templateObject->getChildObjectsSize(); ++i) { ChildObject* child = templateObject->getChildObject(i); if (child == NULL) continue; ManagedReference<SceneObject*> obj = zoneServer->createObject( child->getTemplateFile().hashCode(), getPersistenceLevel()); if (obj == NULL) continue; ContainerPermissions* permissions = obj->getContainerPermissions(); permissions->setOwner(getObjectID()); permissions->setInheritPermissionsFromParent(true); permissions->setDefaultDenyPermission(ContainerPermissions::MOVECONTAINER); permissions->setDenyPermission("owner", ContainerPermissions::MOVECONTAINER); if (!transferObject(obj, child->getContainmentType())) { obj->destroyObjectFromDatabase(true); continue; } childObjects.put(obj); obj->initializeChildObject(_this.getReferenceUnsafeStaticCast()); } }
void PlantObjectImplementation::changeSize(int size) { String plantTemplate = ""; switch (size) { case 0: plantTemplate = "object/tangible/loot/plant_grow/plant_stage_dead.iff"; break; case 1: plantTemplate = "object/tangible/loot/plant_grow/plant_stage_1.iff"; break; case 2: plantTemplate = "object/tangible/loot/plant_grow/plant_stage_2.iff"; break; case 3: plantTemplate = "object/tangible/loot/plant_grow/plant_stage_3.iff"; break; } ManagedReference<ZoneServer*> zoneServer = getZoneServer(); if (zoneServer == NULL) return; ManagedReference<SceneObject*> parent = getParent(); if (parent == NULL || !parent->isCellObject()) return; ManagedReference<SceneObject*> obj = zoneServer->createObject(plantTemplate.hashCode(), getPersistenceLevel()); if (obj == NULL) return; Locker clocker(obj, _this.getReferenceUnsafeStaticCast()); obj->initializePosition(getPositionX(), getPositionZ(), getPositionY()); obj->setDirection(Math::deg2rad(getDirectionAngle())); ManagedReference<PlantObject*> newPlant = cast<PlantObject*>( obj.get()); if (newPlant == NULL) return; newPlant->setWaterLevel(waterLevel); newPlant->setNutrientLevel(nutrientLevel); newPlant->setWaterQuality(waterQuality); newPlant->setNutrientQuality(nutrientQuality); newPlant->setPlantHealth(health); newPlant->initializePlant(size); parent->transferObject(obj, -1); clocker.release(); destroyObjectFromWorld(true); destroyObjectFromDatabase(); }
Packet* ManagedObjectAdapter::invokeMethod(uint32 methid, DistributedMethod* inv) { Packet* resp = new MethodReturnMessage(0); switch (methid) { case 6: lock(inv->getBooleanParameter()); break; case 7: lock((ManagedObject*) inv->getObjectParameter()); break; case 8: rlock(inv->getBooleanParameter()); break; case 9: wlock(inv->getBooleanParameter()); break; case 10: wlock((ManagedObject*) inv->getObjectParameter()); break; case 11: unlock(inv->getBooleanParameter()); break; case 12: runlock(inv->getBooleanParameter()); break; case 13: setLockName(inv->getAsciiParameter(_param0_setLockName__String_)); break; case 14: resp->insertBoolean(notifyDestroy()); break; case 15: writeObject(inv->getAsciiParameter(_param0_writeObject__String_)); break; case 16: readObject(inv->getAsciiParameter(_param0_readObject__String_)); break; case 17: initializeTransientMembers(); break; case 18: updateToDatabase(); break; case 19: queueUpdateToDatabaseTask(); break; case 20: clearUpdateToDatabaseTask(); break; case 21: resp->insertInt(getLastCRCSave()); break; case 22: setLastCRCSave(inv->getUnsignedIntParameter()); break; case 23: resp->insertBoolean(isPersistent()); break; case 24: resp->insertSignedInt(getPersistenceLevel()); break; case 25: setPersistent(inv->getSignedIntParameter()); break; default: return NULL; } return resp; }
void SceneObjectImplementation::createChildObjects() { if (getZone() == NULL) return; ZoneServer* zoneServer = getZone()->getZoneServer(); bool client = isStaticObject(); for (int i = 0; i < templateObject->getChildObjectsSize(); ++i) { ChildObject* child = templateObject->getChildObject(i); if (child == NULL) continue; ManagedReference<SceneObject*> obj = NULL; if (client) obj = zoneServer->createObject(child->getTemplateFile().hashCode(), "clientobjects", getPersistenceLevel()); else obj = zoneServer->createObject(child->getTemplateFile().hashCode(), getPersistenceLevel()); if (obj == NULL) continue; Locker objLocker(obj, asSceneObject()); Vector3 childPosition = child->getPosition(); childObjects.put(obj); obj->initializePosition(childPosition.getX(), childPosition.getZ(), childPosition.getY()); obj->setDirection(child->getDirection()); if (isBuildingObject() && child->getCellId() >= 0) { BuildingObject* buildingObject = asBuildingObject(); int totalCells = buildingObject->getTotalCellNumber(); try { if (totalCells >= child->getCellId()) { ManagedReference<CellObject*> cellObject = buildingObject->getCell(child->getCellId()); if (cellObject != NULL) { if (!cellObject->transferObject(obj, child->getContainmentType(), true)) { obj->destroyObjectFromDatabase(true); continue; } //cellObject->broadcastObject(obj, false); } else { error("NULL CELL OBJECT"); obj->destroyObjectFromDatabase(true); continue; } } } catch (Exception& e) { error("unreported exception caught in void SceneObjectImplementation::createChildObjects()!"); e.printStackTrace(); } } else { //Create the object outdoors in relation to its parent. Vector3 position; if (obj->isActiveArea()) position = getWorldPosition(); else position = getPosition(); float angle = direction.getRadians(); float x = (Math::cos(angle) * childPosition.getX()) + (childPosition.getY() * Math::sin(angle)); float y = (Math::cos(angle) * childPosition.getY()) - (childPosition.getX() * Math::sin(angle)); x += position.getX(); y += position.getY(); float z = position.getZ() + childPosition.getZ(); float degrees = direction.getDegrees(); Quaternion dir = child->getDirection(); obj->initializePosition(x, z, y); obj->setDirection(dir.rotate(Vector3(0, 1, 0), degrees)); if (obj->isBuildingObject()) { BuildingObject* building = obj->asBuildingObject(); if (building != NULL) { building->createCellObjects(); } } if (!getZone()->transferObject(obj, -1, false)) { obj->destroyObjectFromDatabase(true); continue; } } //childObjects.put(obj); ContainerPermissions* permissions = obj->getContainerPermissions(); permissions->setOwner(getObjectID()); permissions->setInheritPermissionsFromParent(false); permissions->setDefaultDenyPermission(ContainerPermissions::MOVECONTAINER); permissions->setDenyPermission("owner", ContainerPermissions::MOVECONTAINER); obj->initializeChildObject(asSceneObject()); } }
void InstallationObjectImplementation::createChildObjects() { if (isTurret()) { SharedInstallationObjectTemplate* inso = dynamic_cast<SharedInstallationObjectTemplate*>(getObjectTemplate()); if (inso != NULL) { uint32 defaultWeaponCRC = inso->getWeapon().hashCode(); if (getZoneServer() != NULL) { Reference<WeaponObject*> defaultWeapon = (getZoneServer()->createObject(defaultWeaponCRC, getPersistenceLevel())).castTo<WeaponObject*>(); if (defaultWeapon == NULL) { return; } if (!transferObject(defaultWeapon, 4)) { defaultWeapon->destroyObjectFromDatabase(true); return; } if (dataObjectComponent != NULL) { TurretDataComponent* turretData = cast<TurretDataComponent*>(dataObjectComponent.get()); if (turretData != NULL) { turretData->setWeapon(defaultWeapon); } } } } } else if (isMinefield()) { this->setContainerDefaultAllowPermission(ContainerPermissions::MOVEIN); this->setContainerDefaultDenyPermission(ContainerPermissions::MOVEOUT); this->setContainerDefaultAllowPermission(ContainerPermissions::OPEN); } else { StructureObjectImplementation::createChildObjects(); } }