bool CNodeDefManager::getIds(const std::string &name, std::set<content_t> &result) const { //TimeTaker t("getIds", NULL, PRECISION_MICRO); if (name.substr(0,6) != "group:") { content_t id = CONTENT_IGNORE; bool exists = getId(name, id); if (exists) result.insert(id); return exists; } std::string group = name.substr(6); UNORDERED_MAP<std::string, GroupItems>::const_iterator i = m_group_to_items.find(group); if (i == m_group_to_items.end()) return true; const GroupItems &items = i->second; for (GroupItems::const_iterator j = items.begin(); j != items.end(); ++j) { if ((*j).second != 0) result.insert((*j).first); } //printf("getIds: %dus\n", t.stop()); return true; }
bool isFreeClientActiveObjectId(const u16 id, UNORDERED_MAP<u16, ClientActiveObject*> &objects) { if(id == 0) return false; return objects.find(id) == objects.end(); }
bool CNodeDefManager::getId(const std::string &name, content_t &result) const { UNORDERED_MAP<std::string, content_t>::const_iterator i = m_name_id_mapping_with_aliases.find(name); if(i == m_name_id_mapping_with_aliases.end()) return false; result = i->second; return true; }
void WaypointStore::UpdatePath(uint32 id) { if(waypoint_map.find(id)!= waypoint_map.end()) waypoint_map[id]->clear(); QueryResult *result; result = WorldDatabase.PQuery("SELECT `id`,`point`,`position_x`,`position_y`,`position_z`,`move_flag`,`delay`,`action`,`action_chance` FROM `waypoint_data` WHERE id = %u ORDER BY `point`", id); if(!result) return; WaypointPath* path_data; path_data = new WaypointPath; Field *fields; do { fields = result->Fetch(); uint32 id = fields[0].GetUInt32(); WaypointData *wp = new WaypointData; float x,y,z; x = fields[2].GetFloat(); y = fields[3].GetFloat(); z = fields[4].GetFloat(); Trinity::NormalizeMapCoord(x); Trinity::NormalizeMapCoord(y); wp->id = fields[1].GetUInt32(); wp->x = x; wp->y = y; wp->z = z; wp->run = fields[5].GetBool(); wp->delay = fields[6].GetUInt32(); wp->event_id = fields[7].GetUInt32(); wp->event_chance = fields[8].GetUInt8(); path_data->push_back(wp); }while (result->NextRow()); waypoint_map[id] = path_data; delete result; }
// IWritableNodeDefManager content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &def) { // Pre-conditions assert(name != ""); assert(name == def.name); // Don't allow redefining ignore (but allow air and unknown) if (name == "ignore") { warningstream << "NodeDefManager: Ignoring " "CONTENT_IGNORE redefinition"<<std::endl; return CONTENT_IGNORE; } content_t id = CONTENT_IGNORE; if (!m_name_id_mapping.getId(name, id)) { // ignore aliases // Get new id id = allocateId(); if (id == CONTENT_IGNORE) { warningstream << "NodeDefManager: Absolute " "limit reached" << std::endl; return CONTENT_IGNORE; } assert(id != CONTENT_IGNORE); addNameIdMapping(id, name); } m_content_features[id] = def; verbosestream << "NodeDefManager: registering content id \"" << id << "\": name=\"" << def.name << "\""<<std::endl; // Add this content to the list of all groups it belongs to // FIXME: This should remove a node from groups it no longer // belongs to when a node is re-registered for (ItemGroupList::const_iterator i = def.groups.begin(); i != def.groups.end(); ++i) { std::string group_name = i->first; UNORDERED_MAP<std::string, GroupItems>::iterator j = m_group_to_items.find(group_name); if (j == m_group_to_items.end()) { m_group_to_items[group_name].push_back( std::make_pair(id, i->second)); } else { GroupItems &items = j->second; items.push_back(std::make_pair(id, i->second)); } } return id; }
void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount, std::vector<std::string> *usednodes, INodeDefManager *ndef) { UNORDERED_MAP<content_t, content_t> nodeidmap; content_t numids = 0; for (size_t i = 0; i != nodecount; i++) { content_t id; content_t c = nodes[i].getContent(); UNORDERED_MAP<content_t, content_t>::const_iterator it = nodeidmap.find(c); if (it == nodeidmap.end()) { id = numids; numids++; usednodes->push_back(ndef->get(c).name); nodeidmap.insert(std::make_pair(c, id)); } else { id = it->second; } nodes[i].setContent(id); } }