bool convert(int srcCodepage, int dstCodepage, const unsigned char * src, size_t * srcbytes, unsigned char * dest, size_t * destbytes) { bool bsucceeded; #ifdef POCO_ARCH_BIG_ENDIAN if (srcCodepage == ucr::CP_UCS2BE) #else if (srcCodepage == ucr::CP_UCS2LE) #endif { size_t srcwchars = *srcbytes / sizeof(wchar_t); bsucceeded = convertFromUnicode(dstCodepage, (const wchar_t *)src, &srcwchars, (char *)dest, destbytes); *srcbytes = srcwchars * sizeof(wchar_t); } else { size_t wsize = *srcbytes * 2 + 6; std::unique_ptr<wchar_t[]> pbuf(new wchar_t[wsize]); bsucceeded = convertToUnicode(srcCodepage, (const char *)src, srcbytes, pbuf.get(), &wsize); if (!bsucceeded) { *destbytes = 0; return false; } bsucceeded = convertFromUnicode(dstCodepage, pbuf.get(), &wsize, (char *)dest, destbytes); } return bsucceeded; }
PixelBuffer GL3GraphicContextProvider::get_pixeldata(const Rect& rect, TextureFormat texture_format, bool clamp) const { TextureFormat_GL tf = OpenGL::get_textureformat(texture_format); if (!tf.valid) throw Exception("Unsupported texture format passed to GraphicContext::get_pixeldata"); PixelBuffer pbuf(rect.get_width(), rect.get_height(), texture_format); OpenGL::set_active(this); if (!framebuffer_bound) { render_window->is_double_buffered() ? glReadBuffer(GL_BACK) : glReadBuffer(GL_FRONT); } if (glClampColor) glClampColor(GL_CLAMP_READ_COLOR, clamp ? GL_TRUE : GL_FALSE); Size display_size = get_display_window_size(); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ROW_LENGTH, pbuf.get_pitch() / pbuf.get_bytes_per_pixel()); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0); glReadPixels(rect.left, display_size.height - rect.bottom, rect.get_width(), rect.get_height(), tf.pixel_format, tf.pixel_datatype, pbuf.get_data()); pbuf.flip_vertical(); return pbuf; }
PixelBuffer GL1GraphicContextProvider::get_pixeldata(const Rect& rect, TextureFormat texture_format, bool clamp) const { GLenum format; GLenum type; bool found = GL1TextureProvider::to_opengl_pixelformat(texture_format, format, type); if (!found) throw Exception("Unsupported pixel format passed to GraphicContext::get_pixeldata"); PixelBuffer pbuf(rect.get_width(), rect.get_height(), texture_format); set_active(); if (!framebuffer_bound) render_window->is_double_buffered() ? glReadBuffer(GL_BACK) : glReadBuffer(GL_FRONT); Size display_size = get_display_window_size(); glPixelStorei(GL_PACK_ALIGNMENT, 1); #ifndef __ANDROID__ glPixelStorei(GL_PACK_ROW_LENGTH, pbuf.get_pitch() / pbuf.get_bytes_per_pixel()); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0); #endif glReadPixels(rect.left, display_size.height - rect.bottom, rect.get_width(), rect.get_height(), format, type, pbuf.get_data()); pbuf.flip_vertical(); return pbuf; }
clan::Image App::get_stencil(clan::Canvas &canvas, clan::Rect rect) { canvas.flush(); // For an unknown reason, stencil reads should be a multiple of 32 rect.left = 32 * ((rect.left + 31) / 32); rect.top = 32 * ((rect.top + 31) / 32); rect.right = 32 * ((rect.right + 31) / 32); rect.bottom = 32 * ((rect.bottom + 31) / 32); int rect_width = rect.get_width(); int rect_height = rect.get_height(); std::vector<unsigned char> buffer; buffer.resize(rect_width * rect_height); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ROW_LENGTH, rect_width); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0); glReadBuffer(GL_BACK); if (glClampColor) { #ifdef GL_CLAMP_READ_COLOR glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE); #else glClampColor(clan::GL_CLAMP_READ_COLOR, GL_FALSE); #endif } glReadPixels(rect.left, canvas.get_height()- rect.bottom, rect_width, rect_height, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, &buffer[0]); clan::PixelBuffer pbuf(rect_width, rect_height, clan::tf_rgba8); unsigned int *pdata = (unsigned int *) pbuf.get_data(); unsigned char *rdata = &buffer[0]; for (int ycnt=0; ycnt < rect_height; ycnt++) { for (int xcnt=0; xcnt < rect_width; xcnt++) { int value = *(rdata++); if (value == 0) { *(pdata++) = 0xFF005500; } else { value = value * 16; value = 0xFF000000 | value | (value << 8) | (value << 16); *(pdata++) = value; } } } pbuf.flip_vertical(); return clan::Image(canvas, pbuf, pbuf.get_size()); }
CL_PixelBuffer Screenshot::take_screen_shot() { CL_PixelBuffer back_buffer = CL_Display::get_current_window()->get_back_buffer(); unsigned short width = back_buffer.get_width(); unsigned short height = back_buffer.get_height(); CL_PixelBuffer pbuf(width, height, width*3, CL_PixelFormat::bgr888); back_buffer.convert(pbuf); return pbuf; }
bool hasZeros (double minx, double miny, double maxx, double maxy, double normx, double normy) { pdal::Options readerOptions; readerOptions.add("connection", "host='localhost' dbname='lidar' user='******'"); readerOptions.add("table", "lidar"); readerOptions.add("column", "pa"); readerOptions.add("srid", 3857); char buf [4096]; snprintf(buf, sizeof(buf) - 1, "PC_Intersects(pa, ST_MakeEnvelope(%lf,%lf,%lf,%lf,3857))", minx, miny, maxx, maxy); buf[sizeof(buf) - 1] = 0; readerOptions.add("where", buf); boost::shared_ptr<pdal::drivers::pgpointcloud::Reader> pReader(new pdal::drivers::pgpointcloud::Reader(readerOptions)); pReader->initialize(); std::cout << "Query: " << buf << " ::: " << pReader->getNumPoints() << " points" << std::endl; pdal::PointBuffer pbuf(pReader->getSchema(), pReader->getNumPoints()); pdal::StageSequentialIterator* iterator = pReader->createSequentialIterator(pbuf); iterator->read(pbuf); //std::cout << pbuf.getSchema() << std::endl; // read in points pdal::Dimension const& x = pbuf.getSchema().getDimension("X"); pdal::Dimension const& y = pbuf.getSchema().getDimension("Y"); pdal::Dimension const& z = pbuf.getSchema().getDimension("Z"); size_t origin_points = 0; for (size_t i = 0, il = pReader->getNumPoints() ; i < il ; i ++) { float x_ = static_cast<float>(x.applyScaling(pbuf.getField<int>(x, i))) - normx, y_ = static_cast<float>(y.applyScaling(pbuf.getField<int>(y, i))) - normy, z_ = static_cast<float>(z.applyScaling(pbuf.getField<int>(z, i))); if (closeToZero(x_) && closeToZero(y_)) { origin_points ++; } } std::cout << "Volume point stats: origin: " << origin_points << std::endl; return origin_points > 0; }
CL_Image App::get_stencil(CL_GraphicContext &gc, CL_Rect rect) { // For an unknown reason, stencil reads should be a multiple of 32 rect.left = 32 * ((rect.left + 31) / 32); rect.top = 32 * ((rect.top + 31) / 32); rect.right = 32 * ((rect.right + 31) / 32); rect.bottom = 32 * ((rect.bottom + 31) / 32); int rect_width = rect.get_width(); int rect_height = rect.get_height(); std::vector<unsigned char> buffer; buffer.resize(rect_width * rect_height); clReadPixels(rect.left, gc.get_height()- rect.bottom, rect_width, rect_height, CL_STENCIL_INDEX, CL_UNSIGNED_BYTE, &buffer[0]); CL_PixelBuffer pbuf(rect_width, rect_height, cl_abgr8); unsigned int *pdata = (unsigned int *) pbuf.get_data(); unsigned char *rdata = &buffer[0]; for (int ycnt=0; ycnt < rect_height; ycnt++) { for (int xcnt=0; xcnt < rect_width; xcnt++) { int value = *(rdata++); if (value == 0) { *(pdata++) = 0xFF005500; } else { value = value * 16; value = 0xFF000000 | value | (value << 8) | (value << 16); *(pdata++) = value; } } } pbuf.flip_vertical(); return CL_Image(gc, pbuf, pbuf.get_size()); }
bool FileStream::copyFile(const char* srcPath, const char* dstPath) { FileStream fsrc(srcPath, "rb"); FileStream fdst(dstPath, "wb+"); if (fsrc && fdst) { setvbuf(fsrc.fp(), NULL, _IONBF, 0); setvbuf(fdst.fp(), NULL, _IONBF, 0); size_t nbuf = 64 * 1024; AutoFree<char> pbuf(nbuf); while (!fsrc.eof()) { size_t nRead = fsrc.read(pbuf, nbuf); size_t nWrite = fdst.write(pbuf, nRead); if (nWrite != nRead) { throw OutOfSpaceException(BOOST_CURRENT_FUNCTION); } } return true; } return false; }
_XFX_BEGIN // // Resource // HRESULT Resource::LoadFile( const String& file ) { PROFILE( __FUNCTION__, "General" ); mFilename = file; mPhysicalPath.clear( ); gMess( "Loading %s from file \"%s\"...", mName.c_str( ), file.c_str( ) ); unsigned long filesize; HRESULT hr; if( FAILED( hr = FileSystem::Instance( ).FindFile( file, NULL, &mPhysicalPath ) ) || FAILED( hr = FileSystem::Instance( ).GetFileSize( file, filesize ) ) ) { gError( "Can't open file \"%s\"", file.c_str( ) ); return hr; } boost::scoped_array< BYTE > pbuf( new BYTE[ filesize ] ); FileSystem::Instance( ).ReadFile( file, pbuf.get( ) ); if( FAILED( hr = LoadMemory( pbuf.get( ), filesize ) ) ) gError( "Loading %s from file \"%s\" failed!", mName.c_str( ), file.c_str( ) ); return hr; }
int another_main(int argc,char **argv) { vint4 v,w; int i,j; unsigned char buf[5]; srand(time(NULL)); PO_SET_FLAG1(v,3); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_FLAG1(v,7); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_FLAG2(v,5,42); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_EOF(v); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,0); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,127); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,128); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,8191); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,8192); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,262143); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,262144); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,2097151); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,2097152); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); PO_SET_NUMBER(v,0xFFFFFFFF); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); pbuf(v,buf,i,w); for(j=0;j<100000000;j++) { PO_SET_NUMBER(v,r()); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch1 %16.16X",v); if(!(j%1000000)) pbuf(v,buf,i,w); } for(j=0;j<100000000;j++) { PO_SET_NUMBER(v,r()%300000); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch1 %16.16X",v); if(!(j%1000000)) pbuf(v,buf,i,w); } for(j=0;j<100000000;j++) { PO_SET_NUMBER(v,r()%10000); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch1 %16.16X",v); if(!(j%1000000)) pbuf(v,buf,i,w); } for(j=0;j<100000000;j++) { PO_SET_NUMBER(v,r()%300); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch1 %16.16X",v); if(!(j%1000000)) pbuf(v,buf,i,w); } for(j=0;j<100000000;j++) { PO_SET_FLAG1(v,r()%8); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch2 %16.16X",v); } for(j=0;j<100000000;j++) { PO_SET_FLAG2(v,r()%7,r()%128); i=po_int4_encode(buf,v); po_int4_decode(buf,&w); if(v!=w) g_error("Mismatch3 %16.16X %16.16X",v,w); } }
void MapMgr::PushObject(Object *obj) { ///////////// // Assertions ///////////// ASSERT(obj); // That object types are not map objects. TODO: add AI groups here? if(obj->GetTypeId() == TYPEID_ITEM || obj->GetTypeId() == TYPEID_CONTAINER) { // mark object as updatable and exit return; } if(obj->GetTypeId() == TYPEID_CORPSE) { m_corpses.insert(((Corpse*)obj)); } obj->ClearInRangeSet(); ASSERT(obj->GetMapId() == _mapId); if(!(obj->GetPositionX() < _maxX && obj->GetPositionX() > _minX) || !(obj->GetPositionY() < _maxY && obj->GetPositionY() > _minY)) { if(obj->IsPlayer()) { Player * plr = static_cast< Player* >( obj ); if(plr->GetBindMapId() != GetMapId()) { plr->SafeTeleport(plr->GetBindMapId(),0,plr->GetBindPositionX(),plr->GetBindPositionY(),plr->GetBindPositionZ(),0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); return; } else { obj->GetPositionV()->ChangeCoords(plr->GetBindPositionX(),plr->GetBindPositionY(),plr->GetBindPositionZ(),0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); WorldPacket * data = plr->BuildTeleportAckMsg(plr->GetPosition()); plr->GetSession()->SendPacket(data); delete data; } } else { obj->GetPositionV()->ChangeCoords(0,0,0,0); } } ASSERT(obj->GetPositionY() < _maxY && obj->GetPositionY() > _minY); ASSERT(_cells); /////////////////////// // Get cell coordinates /////////////////////// uint32 x = GetPosX(obj->GetPositionX()); uint32 y = GetPosY(obj->GetPositionY()); if(x >= _sizeX || y >= _sizeY) { if(obj->IsPlayer()) { Player * plr = static_cast< Player* >( obj ); if(plr->GetBindMapId() != GetMapId()) { plr->SafeTeleport(plr->GetBindMapId(),0,plr->GetBindPositionX(),plr->GetBindPositionY(),plr->GetBindPositionZ(),0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); return; } else { obj->GetPositionV()->ChangeCoords(plr->GetBindPositionX(),plr->GetBindPositionY(),plr->GetBindPositionZ(),0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); WorldPacket * data = plr->BuildTeleportAckMsg(plr->GetPosition()); plr->GetSession()->SendPacket(data); delete data; } } else { obj->GetPositionV()->ChangeCoords(0,0,0,0); } x = GetPosX(obj->GetPositionX()); y = GetPosY(obj->GetPositionY()); } MapCell *objCell = GetCell(x,y); if (!objCell) { objCell = Create(x,y); objCell->Init(x, y, _mapId, this); } uint32 endX = (x <= _sizeX) ? x + 1 : (_sizeX-1); uint32 endY = (y <= _sizeY) ? y + 1 : (_sizeY-1); uint32 startX = x > 0 ? x - 1 : 0; uint32 startY = y > 0 ? y - 1 : 0; uint32 posX, posY; MapCell *cell; MapCell::ObjectSet::iterator iter; ByteBuffer * buf = 0; uint32 count; Player *plObj; if(obj->GetTypeId() == TYPEID_PLAYER) plObj = static_cast< Player* >( obj ); else plObj = NULL; if(plObj) { sLog.outDetail("Creating player "I64FMT" for himself.", obj->GetGUID()); ByteBuffer pbuf(10000); count = plObj->BuildCreateUpdateBlockForPlayer(&pbuf, plObj); plObj->PushCreationData(&pbuf, count); } ////////////////////// // Build in-range data ////////////////////// for (posX = startX; posX <= endX; posX++ ) { for (posY = startY; posY <= endY; posY++ ) { cell = GetCell(posX, posY); if (cell) { UpdateInRangeSet(obj, plObj, cell, &buf); } } } //Add to the cell's object list objCell->AddObject(obj); obj->SetMapCell(objCell); //Add to the mapmanager's object list if(plObj) { m_PlayerStorage[plObj->GetLowGUID()] = plObj; UpdateCellActivity(x, y, 2); } else { switch(obj->GetTypeFromGUID()) { case HIGHGUID_TYPE_PET: m_PetStorage[obj->GetUIdFromGUID()] = static_cast< Pet* >( obj ); break; case HIGHGUID_TYPE_UNIT: { ASSERT((obj->GetUIdFromGUID()) <= m_CreatureHighGuid); m_CreatureStorage[obj->GetUIdFromGUID()] = (Creature*)obj; if(((Creature*)obj)->m_spawn != NULL) { _sqlids_creatures.insert(make_pair( ((Creature*)obj)->m_spawn->id, ((Creature*)obj) ) ); } }break; case HIGHGUID_TYPE_GAMEOBJECT: { m_GOStorage[obj->GetUIdFromGUID()] = (GameObject*)obj; if(((GameObject*)obj)->m_spawn != NULL) { _sqlids_gameobjects.insert(make_pair( ((GameObject*)obj)->m_spawn->id, ((GameObject*)obj) ) ); } }break; case HIGHGUID_TYPE_DYNAMICOBJECT: m_DynamicObjectStorage[obj->GetLowGUID()] = (DynamicObject*)obj; break; } } // Handle activation of that object. if(objCell->IsActive() && obj->CanActivate()) obj->Activate(this); // Add the session to our set if it is a player. if(plObj) { Sessions.insert(plObj->GetSession()); // Change the instance ID, this will cause it to be removed from the world thread (return value 1) plObj->GetSession()->SetInstance(GetInstanceID()); /* Add the map wide objects */ if(_mapWideStaticObjects.size()) { if(!buf) buf = new ByteBuffer(300); for(set<Object*>::iterator itr = _mapWideStaticObjects.begin(); itr != _mapWideStaticObjects.end(); ++itr) { count = (*itr)->BuildCreateUpdateBlockForPlayer(buf, plObj); plObj->PushCreationData(buf, count); } } } if(buf) delete buf; if(plObj && InactiveMoveTime && !forced_expire) InactiveMoveTime = 0; }
void MapMgr::PushObject(Object* obj) { ///////////// // Assertions ///////////// ARCEMU_ASSERT(obj != NULL); // That object types are not map objects. TODO: add AI groups here? if(obj->IsItem() || obj->IsContainer()) { // mark object as updatable and exit return; } if(obj->IsCorpse()) { m_corpses.insert(TO< Corpse* >(obj)); } obj->ClearInRangeSet(); ARCEMU_ASSERT(obj->GetMapId() == _mapId); if(!(obj->GetPositionX() < _maxX && obj->GetPositionX() > _minX) || !(obj->GetPositionY() < _maxY && obj->GetPositionY() > _minY)) { if(obj->IsPlayer()) { Player* plr = TO< Player* >(obj); if(plr->GetBindMapId() != GetMapId()) { plr->SafeTeleport(plr->GetBindMapId(), 0, plr->GetBindPositionX(), plr->GetBindPositionY(), plr->GetBindPositionZ(), 0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); return; } else { obj->GetPositionV()->ChangeCoords(plr->GetBindPositionX(), plr->GetBindPositionY(), plr->GetBindPositionZ(), 0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); plr->SendTeleportAckMsg(plr->GetPosition()); } } else { obj->GetPositionV()->ChangeCoords(0, 0, 0, 0); } } ARCEMU_ASSERT(obj->GetPositionY() < _maxY && obj->GetPositionY() > _minY); ARCEMU_ASSERT(_cells != NULL); /////////////////////// // Get cell coordinates /////////////////////// uint32 x = GetPosX(obj->GetPositionX()); uint32 y = GetPosY(obj->GetPositionY()); if(x >= _sizeX || y >= _sizeY) { if(obj->IsPlayer()) { Player* plr = TO< Player* >(obj); if(plr->GetBindMapId() != GetMapId()) { plr->SafeTeleport(plr->GetBindMapId(), 0, plr->GetBindPositionX(), plr->GetBindPositionY(), plr->GetBindPositionZ(), 0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); return; } else { obj->GetPositionV()->ChangeCoords(plr->GetBindPositionX(), plr->GetBindPositionY(), plr->GetBindPositionZ(), 0); plr->GetSession()->SystemMessage("Teleported you to your hearthstone location as you were out of the map boundaries."); plr->SendTeleportAckMsg(plr->GetPosition()); } } else { obj->GetPositionV()->ChangeCoords(0, 0, 0, 0); } x = GetPosX(obj->GetPositionX()); y = GetPosY(obj->GetPositionY()); } MapCell* objCell = GetCell(x, y); if(objCell == NULL) { objCell = Create(x, y); objCell->Init(x, y, this); } ARCEMU_ASSERT(objCell != NULL); uint32 endX = (x <= _sizeX) ? x + 1 : (_sizeX - 1); uint32 endY = (y <= _sizeY) ? y + 1 : (_sizeY - 1); uint32 startX = x > 0 ? x - 1 : 0; uint32 startY = y > 0 ? y - 1 : 0; uint32 posX, posY; MapCell* cell; //MapCell::ObjectSet::iterator iter; ByteBuffer* buf = 0; uint32 count; Player* plObj; if(obj->IsPlayer()) plObj = TO< Player* >(obj); else plObj = NULL; if(plObj != NULL) { LOG_DETAIL("Creating player " I64FMT " for himself.", obj->GetGUID()); ByteBuffer pbuf(10000); count = plObj->BuildCreateUpdateBlockForPlayer(&pbuf, plObj); plObj->PushCreationData(&pbuf, count); } ////////////////////// // Build in-range data ////////////////////// for(posX = startX; posX <= endX; posX++) { for(posY = startY; posY <= endY; posY++) { cell = GetCell(posX, posY); if(cell) { UpdateInRangeSet(obj, plObj, cell, &buf); } } } //Add to the cell's object list objCell->AddObject(obj); obj->SetMapCell(objCell); //Add to the mapmanager's object list if(plObj != NULL) { m_PlayerStorage[plObj->GetLowGUID()] = plObj; UpdateCellActivity(x, y, 2); } else { switch(obj->GetTypeFromGUID()) { case HIGHGUID_TYPE_PET: m_PetStorage[obj->GetUIdFromGUID()] = TO< Pet* >(obj); break; case HIGHGUID_TYPE_UNIT: case HIGHGUID_TYPE_VEHICLE: { ARCEMU_ASSERT(obj->GetUIdFromGUID() <= m_CreatureHighGuid); CreatureStorage[ obj->GetUIdFromGUID() ] = TO< Creature* >(obj); if(TO_CREATURE(obj)->m_spawn != NULL) { _sqlids_creatures.insert(make_pair(TO_CREATURE(obj)->m_spawn->id, TO_CREATURE(obj))); } } break; case HIGHGUID_TYPE_GAMEOBJECT: { GOStorage[ obj->GetUIdFromGUID() ] = TO< GameObject* >(obj); if(TO_GAMEOBJECT(obj)->m_spawn != NULL) { _sqlids_gameobjects.insert(make_pair(TO_GAMEOBJECT(obj)->m_spawn->id, TO_GAMEOBJECT(obj))); } } break; case HIGHGUID_TYPE_DYNAMICOBJECT: m_DynamicObjectStorage[obj->GetLowGUID()] = (DynamicObject*)obj; break; } } // Handle activation of that object. if(objCell->IsActive() && obj->CanActivate()) obj->Activate(this); // Add the session to our set if it is a player. if(plObj != NULL) { Sessions.insert(plObj->GetSession()); // Change the instance ID, this will cause it to be removed from the world thread (return value 1) plObj->GetSession()->SetInstance(GetInstanceID()); /* Add the map wide objects */ if(_mapWideStaticObjects.size()) { uint32 globalcount = 0; if(!buf) buf = new ByteBuffer(300); for(set<Object*>::iterator itr = _mapWideStaticObjects.begin(); itr != _mapWideStaticObjects.end(); ++itr) { count = (*itr)->BuildCreateUpdateBlockForPlayer(buf, plObj); globalcount += count; } //VLack: It seems if we use the same buffer then it is a BAD idea to try and push created data one by one, add them at once! // If you try to add them one by one, then as the buffer already contains data, they'll end up repeating some object. // Like 6 object updates for Deeprun Tram, but the built package will contain these entries: 2AFD0, 2AFD0, 2AFD1, 2AFD0, 2AFD1, 2AFD2 if(globalcount > 0) plObj->PushCreationData(buf, globalcount); } } if(buf) delete buf; if(plObj != NULL && InactiveMoveTime && !forced_expire) InactiveMoveTime = 0; }