void ManufactureSchematicImplementation::sendTo(SceneObject* player, bool doClose) { if (isStaticObject()) return; if (getParent() == NULL) return; // Scene Create BaseMessage* create = new SceneObjectCreateMessage(getObjectID(), 0x3819C409); player->sendMessage(create); // Link to Crafting Tool BaseMessage* link = new UpdateContainmentMessage(getObjectID(), getParent().get()->getObjectID(), 4); player->sendMessage(link); sendBaselinesTo(player); sendSlottedObjectsTo(player); sendContainerObjectsTo(player); if(doClose) { BaseMessage* msg = new SceneObjectCloseMessage(_this.getReferenceUnsafeStaticCast()); player->sendMessage(msg); } }
void SceneObjectImplementation::sendTo(SceneObject* player, bool doClose) { if (isStaticObject() || !sendToClient || player->getClient() == NULL) return; /*StringBuffer msgInfo; if (parent != NULL) msgInfo << "with parent " << getParent()->getLoggingName() << " "; msgInfo << "sending 0x" << hex << getClientObjectCRC() << " to " << player->getLoggingName(); info(msgInfo.toString(), true);*/ BaseMessage* msg = new SceneObjectCreateMessage(_this.get()); player->sendMessage(msg); if (parent.get() != NULL) link(player, containmentType); try { sendBaselinesTo(player); sendContainerObjectsTo(player); sendSlottedObjectsTo(player); } catch (Exception& e) { } if (doClose) { SceneObjectImplementation::close(player); //info("sending close", true); } }
void SceneObjectImplementation::sendWithoutContainerObjectsTo(SceneObject* player) { if (isStaticObject() || !sendToClient) return; BaseMessage* msg = new SceneObjectCreateMessage(_this.get()); player->sendMessage(msg); if (parent.get() != NULL) link(player, containmentType); sendBaselinesTo(player); SceneObjectImplementation::close(player); }
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()); } }