// returns trainerCount. static int streamNpcTrainers(ostream& stream, int id, int& requiredSkillLevel, bool pass) { int trainerCount = 0; for(auto p = SpellIndex::findLearnSpell(id); p.first != p.second; ++p.first) { for(auto t = gNpcTrainers.findSpell(p.first->second->id); t.first != t.second; ++t.first) { const NpcTrainer& nt(*t.first->second); if(nt.reqSkill) { requiredSkillLevel = nt.reqSkillValue; } if(!gNpcs.find(nt.entry)) { int count = 0; for(auto n = gNpcTrainers.findSpell(-nt.entry); n.first != n.second; ++n.first) { const NpcTrainer& nn(*n.first->second); if(pass) { if(trainerCount + count > 0) stream << ", "; NAMELINK(gNpcs, nn.entry); } count++; } EASSERT(count > 0); trainerCount += count; } else { if(pass) { if(trainerCount > 0) stream << ", "; NAMELINK(gNpcs, nt.entry); } trainerCount++; } } } return trainerCount; }
void XSettingsManager::notify(void) { EASSERT(manager_data != NULL && "init() must be called before this function"); if(!manager_data->manager_win) return; xsettings_manager_notify(manager_data); }
void Parser::flush(const char* end) { int len = end - mNodeStart; EASSERT(len >= 0); if(len > 0) { addTextNode(mNodeStart, len); mNodeStart = end; } }
bool XSettingsManager::should_terminate(const XEvent* xev) { EASSERT(manager_data != NULL && "init() must be called before this function"); if(xev->xany.window == manager_data->manager_win && xev->xany.type == SelectionClear && xev->xselectionclear.selection == manager_data->selection_atom) { return true; } return false; }
void XSettingsManager::set(const char* name, const char* val) { EASSERT(manager_data != NULL && "init() must be called before this function"); if(!manager_data->manager_win) return; XSettingsSetting setting; setting.name = (char*)name; setting.type = XSETTINGS_TYPE_STRING; setting.data.v_string = (char*)val; xsettings_manager_set_setting(manager_data, &setting); /* xsettings_manager_notify(manager_data); */ }
void XSettingsManager::set(const char* name, unsigned short red, unsigned short green, unsigned short blue, unsigned short alpha) { EASSERT(manager_data != NULL && "init() must be called before this function"); if(!manager_data->manager_win) return; XSettingsSetting setting; setting.name = (char*)name; setting.type = XSETTINGS_TYPE_COLOR; setting.data.v_color.red = red; setting.data.v_color.green = green; setting.data.v_color.blue = blue; setting.data.v_color.alpha = alpha; xsettings_manager_set_setting(manager_data, &setting); /* xsettings_manager_notify(manager_data); */ }
int zoneFromCoords(int map, float x, float y) { // find areaId // compute grid and cell coordinates int globalCellX = (int)((MAX_NUMBER_OF_GRIDS*MAX_NUMBER_OF_CELLS/2) - (y/SIZE_OF_GRID_CELL)); int globalCellY = (int)((MAX_NUMBER_OF_GRIDS*MAX_NUMBER_OF_CELLS/2) - (x/SIZE_OF_GRID_CELL)); int gridX = globalCellX / MAX_NUMBER_OF_CELLS; int gridY = globalCellY / MAX_NUMBER_OF_CELLS; int cellX = globalCellX % MAX_NUMBER_OF_CELLS; int cellY = globalCellY % MAX_NUMBER_OF_CELLS; //puts "Grid: [#{gridX}][#{gridY}]" //puts "Cell: [#{cellX}][#{cellY}]" //puts "Pixel: [#{gridX*MAX_NUMBER_OF_CELLS + cellX}][#{gridY*MAX_NUMBER_OF_CELLS + cellY}]" int** const* ap = gAreaMap.find(map); if(!ap) { printf("Invalid mapId(%i) with coords %f x %f\n", map, x, y); return -1; } int** const area(*ap); int* grid = area[gridY * MAX_NUMBER_OF_GRIDS + gridX]; if(!grid) return -1; int areaId = grid[cellY + cellX * MAX_NUMBER_OF_CELLS]; EASSERT(areaId >= 0); // find zoneId int zoneId = areaId; do { const Area* a = gAreaTable.find(zoneId); if(!a) { printf("Invalid areaId(%i) for coords %i, %f x %f\n", zoneId, map, x, y); return zoneId; } if(a->parent != 0) zoneId = a->parent; else break; } while(true); return zoneId; }