| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- LoadModelCache() {
- g_ModelCacheLimit = 0;
- g_DBResult = db_query(g_ResourceDB, "SELECT * FROM model_data");
- for(new row, rows = db_num_rows(g_DBResult), modelid; row < rows; row ++) {
- if( g_ModelCacheLimit < MAX_MODELS ) {
- modelid = db_get_field_assoc_int(g_DBResult, "modelid");
- if( modelid >= MIN_MODEL_ID && modelid <= MAX_MODEL_ID ) {
- g_ModelCacheIndex[ modelid - MIN_MODEL_ID ] = g_ModelCacheLimit;
- }
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_ID] = modelid;
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_SPHERE_RADIUS] = db_get_field_assoc_float(g_DBResult, "sphere_radius");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_SPHERE_OFF_X] = db_get_field_assoc_float(g_DBResult, "sphere_off_x");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_SPHERE_OFF_Y] = db_get_field_assoc_float(g_DBResult, "sphere_off_y");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_SPHERE_OFF_Z] = db_get_field_assoc_float(g_DBResult, "sphere_off_z");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MIN_X] = db_get_field_assoc_float(g_DBResult, "min_x");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MIN_Y] = db_get_field_assoc_float(g_DBResult, "min_y");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MIN_Z] = db_get_field_assoc_float(g_DBResult, "min_z");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MAX_X] = db_get_field_assoc_float(g_DBResult, "max_x");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MAX_Y] = db_get_field_assoc_float(g_DBResult, "max_y");
- g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_MAX_Z] = db_get_field_assoc_float(g_DBResult, "max_z");
- db_get_field_assoc(g_DBResult, "name", g_ModelString, sizeof g_ModelString);
- strpack( g_ModelCache[g_ModelCacheLimit][MODEL_CACHE_NAME], g_ModelString, MAX_MODELNAME_LEN+1);
- }
- g_ModelCacheLimit ++;
- db_next_row(g_DBResult);
- }
- db_free_result(g_DBResult);
- }
- FindModels(result[], result_size, search[], categoryid, offset, &max_offset) {
- new added_rows;
- if( categoryid == INVALID_CATEGORY_ID ) {
- if( isempty(search) ) {
- for(new i = offset; i < g_ModelCacheLimit; i ++) {
- if( added_rows >= result_size ) {
- break;
- }
- result[added_rows ++] = g_ModelCache[i][MODEL_CACHE_ID];
- }
- max_offset = g_ModelCacheLimit - 1;
- return added_rows;
- } else {
- format(g_QueryString, sizeof g_QueryString, "\
- SELECT modelid, \
- (SELECT COUNT(*) FROM model_data WHERE modelid LIKE '%%%q%%' OR name LIKE '%%%q%%') AS max_rowcount \
- FROM model_data \
- WHERE modelid LIKE '%%%q%%' OR name LIKE '%%%q%%' \
- LIMIT %i OFFSET %i",
- search, search,
- search, search,
- result_size, offset
- );
- }
- } else {
- if( isempty(search) ) {
- format(g_QueryString, sizeof g_QueryString, "\
- SELECT modelid, \
- (SELECT COUNT(*) FROM model_category_bind WHERE categoryid = '%i') AS max_rowcount \
- FROM model_category_bind \
- WHERE categoryid = '%i' \
- LIMIT %i OFFSET %i",
- categoryid,
- categoryid,
- result_size, offset
- );
- } else {
- format(g_QueryString, sizeof g_QueryString, "\
- SELECT b.modelid AS modelid, \
- (\
- SELECT COUNT(*) \
- FROM model_category_bind b \
- INNER JOIN model_data d ON b.modelid = d.modelid \
- WHERE b.categoryid = '%i' AND (d.modelid LIKE '%%%q%%' OR d.name LIKE '%%%q%%')\
- ) AS max_rowcount \
- FROM model_category_bind b \
- INNER JOIN model_data d ON b.modelid = d.modelid \
- WHERE b.categoryid = '%i' AND (d.modelid LIKE '%%%q%%' OR d.name LIKE '%%%q%%') \
- LIMIT %i OFFSET %i",
- categoryid, search, search,
- categoryid, search, search,
- result_size, offset
- );
- }
- }
- g_DBResult = db_query(g_ResourceDB, g_QueryString);
- new result_rows = db_num_rows(g_DBResult);
- if( result_rows > 0 ) {
- max_offset = db_get_field_assoc_int(g_DBResult, "max_rowcount") - 1;
- if( max_offset < 0 ) {
- max_offset = 0;
- }
- }
- for(new row; row < result_rows; row ++) {
- if( added_rows >= result_size ) {
- break;
- }
- result[added_rows ++] = db_get_field_assoc_int(g_DBResult, "modelid");
- db_next_row(g_DBResult);
- }
- db_free_result(g_DBResult);
- return added_rows;
- }
- GetModelCacheIndex(modelid) {
- if( modelid >= MIN_MODEL_ID && modelid <= MAX_MODEL_ID ) {
- new cache_index = g_ModelCacheIndex[modelid - MIN_MODEL_ID];
- if( g_ModelCache[cache_index][MODEL_CACHE_ID] == modelid ) {
- return cache_index;
- }
- }
- return INVALID_ARRAY_INDEX;
- }
- GetModelName(modelid, name[], name_size) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return format(name, name_size, "Unknown Model"), 0;
- }
- return strunpack(name, g_ModelCache[cache_index][MODEL_CACHE_NAME], name_size), 1;
- }
- stock GetModelSphere(modelid, &Float:radius, &Float:off_x, &Float:off_y, &Float:off_z) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- radius = g_ModelCache[cache_index][MODEL_CACHE_SPHERE_RADIUS];
- off_x = g_ModelCache[cache_index][MODEL_CACHE_SPHERE_OFF_X];
- off_y = g_ModelCache[cache_index][MODEL_CACHE_SPHERE_OFF_Y];
- off_z = g_ModelCache[cache_index][MODEL_CACHE_SPHERE_OFF_Z];
- return 1;
- }
- stock GetModelMinMaxXYZ(modelid, &Float:min_x, &Float:min_y, &Float:min_z, &Float:max_x, &Float:max_y, &Float:max_z) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- min_x = g_ModelCache[cache_index][MODEL_CACHE_MIN_X];
- min_y = g_ModelCache[cache_index][MODEL_CACHE_MIN_Y];
- min_z = g_ModelCache[cache_index][MODEL_CACHE_MIN_Z];
- max_x = g_ModelCache[cache_index][MODEL_CACHE_MAX_X];
- max_y = g_ModelCache[cache_index][MODEL_CACHE_MAX_Y];
- max_z = g_ModelCache[cache_index][MODEL_CACHE_MAX_Z];
- return 1;
- }
- stock GetModelMinX(modelid, &Float:min) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- min = g_ModelCache[cache_index][MODEL_CACHE_MIN_X];
- return 1;
- }
- stock GetModelMinY(modelid, &Float:min) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- min = g_ModelCache[cache_index][MODEL_CACHE_MIN_Y];
- return 1;
- }
- stock GetModelMinZ(modelid, &Float:min) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- min = g_ModelCache[cache_index][MODEL_CACHE_MIN_Z];
- return 1;
- }
- stock GetModelMaxX(modelid, &Float:max) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- max = g_ModelCache[cache_index][MODEL_CACHE_MAX_X];
- return 1;
- }
- stock GetModelMaxY(modelid, &Float:max) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- max = g_ModelCache[cache_index][MODEL_CACHE_MAX_Y];
- return 1;
- }
- stock GetModelMaxZ(modelid, &Float:max) {
- new cache_index = GetModelCacheIndex(modelid);
- if( cache_index == INVALID_ARRAY_INDEX ) {
- return 0;
- }
- max = g_ModelCache[cache_index][MODEL_CACHE_MAX_Z];
- return 1;
- }
|