//------------------------------------------------------------------------------------- void ClientObjectBase::onEntityEnterWorld(Mercury::Channel * pChannel, ENTITY_ID eid, ENTITY_SCRIPT_UID scriptType, SPACE_ID spaceID) { client::Entity* entity = pEntities_->find(eid); if(entity == NULL) { BUFFEREDMESSAGE::iterator iter = bufferedCreateEntityMessage_.find(eid); if(iter != bufferedCreateEntityMessage_.end()) { ScriptDefModule* sm = EntityDef::findScriptModule(scriptType); KBE_ASSERT(sm); // 设置entity的cellMailbox EntityMailbox* mailbox = new EntityMailbox(EntityDef::findScriptModule(sm->getName()), NULL, appID(), eid, MAILBOX_TYPE_CELL); createEntityCommon(sm->getName(), NULL, true, eid, true, NULL, mailbox); this->onUpdatePropertys(pChannel, *iter->second.get()); bufferedCreateEntityMessage_.erase(iter); } else { ERROR_MSG(boost::format("ClientObjectBase::onEntityEnterWorld: not found entity(%1%).\n") % eid); } return; } DEBUG_MSG(boost::format("ClientObjectBase::onEntityEnterWorld: %1%.\n") % eid); EventData_EnterWorld eventdata; eventdata.spaceID = spaceID; eventdata.pEntity = entity->getAspect(); eventHandler_.fire(&eventdata); entity->onEnterWorld(); }
//------------------------------------------------------------------------------------- bool EntityTables::load(DBInterface* dbi) { EntityDef::SCRIPT_MODULES smodules = EntityDef::getScriptModules(); EntityDef::SCRIPT_MODULES::const_iterator iter = smodules.begin(); for(; iter != smodules.end(); ++iter) { ScriptDefModule* pSM = (*iter).get(); EntityTable* pEtable = dbi->createEntityTable(); bool ret = pEtable->initialize(pSM, pSM->getName()); if(!ret) { delete pEtable; return false; } tables_[pEtable->tableName()].reset(pEtable); } return true; }