void SceneObjectImplementation::broadcastObjectPrivate(SceneObject* object, SceneObject* selfObject) { ZoneServer* zoneServer = getZoneServer(); if (zoneServer != NULL && zoneServer->isServerLoading()) return; if (parent != NULL) { ManagedReference<SceneObject*> grandParent = getRootParent().get(); if (grandParent != NULL) { grandParent->broadcastObjectPrivate(object, selfObject); return; } else { return; } } if (zone == NULL) return; SortedVector<ManagedReference<QuadTreeEntry*> > closeSceneObjects; int maxInRangeObjectCount = 0; if (closeobjects == NULL) { info("Null closeobjects vector in SceneObjectImplementation::broadcastObjectPrivate", true); zone->getInRangeObjects(getPositionX(), getPositionY(), 192, &closeSceneObjects, true); maxInRangeObjectCount = closeSceneObjects.size(); } else { CloseObjectsVector* vec = (CloseObjectsVector*) closeobjects; closeSceneObjects.removeAll(vec->size(), 10); vec->safeCopyTo(closeSceneObjects); maxInRangeObjectCount = closeSceneObjects.size(); //closeobjects->size(); } for (int i = 0; i < maxInRangeObjectCount; ++i) { SceneObject* scno = static_cast<SceneObject*>(closeSceneObjects.get(i).get()); ManagedReference<ZoneClientSession*> client = scno->getClient(); if (scno->isVehicleObject() || client != NULL || scno->isMount()) { object->sendTo(scno, true); } } }
void SceneObjectImplementation::broadcastObjectPrivate(SceneObject* object, SceneObject* selfObject) { ZoneServer* zoneServer = getZoneServer(); if (zoneServer != NULL && zoneServer->isServerLoading()) return; if (parent.get() != NULL) { ManagedReference<SceneObject*> grandParent = cast<SceneObject*>(getRootParent().get().get()); if (grandParent != NULL) { grandParent->broadcastObjectPrivate(object, selfObject); return; } else { return; } } if (zone == NULL) return; // bool readlock = !zone->isLockedByCurrentThread(); SortedVector<ManagedReference<QuadTreeEntry*> > closeSceneObjects; int maxInRangeObjectCount = 0; // zone->rlock(readlock); //Locker zoneLocker(zone); try { if (closeobjects == NULL) { info("Null closeobjects vector in SceneObjectImplementation::broadcastObjectPrivate", true); zone->getInRangeObjects(getPositionX(), getPositionY(), 192, &closeSceneObjects, true); maxInRangeObjectCount = closeSceneObjects.size(); } else { CloseObjectsVector* vec = (CloseObjectsVector*) closeobjects; closeSceneObjects.removeAll(vec->size(), 10); //closeSceneObjects.addAll(*closeobjects); vec->safeCopyTo(closeSceneObjects); maxInRangeObjectCount = closeSceneObjects.size(); //closeobjects->size(); } } catch (...) { // zone->runlock(readlock); throw; } //zone->runlock(readlock); for (int i = 0; i < maxInRangeObjectCount; ++i) { SceneObject* scno = cast<SceneObject*>(closeSceneObjects.get(i).get()); if (selfObject == scno) continue; ManagedReference<ZoneClientSession*> client = scno->getClient(); if (scno->isVehicleObject() || client != NULL || scno->isMount()) { object->sendTo(scno, true); } } }