func.pwn 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. LoadVehicleModelCache() {
  2. g_DBResult = db_query(g_ResourceDB, "SELECT * FROM veh_data");
  3. for(new row, rows = db_num_rows(g_DBResult), modelid; row < rows; row ++) {
  4. modelid = db_get_field_assoc_int(g_DBResult, "modelid");
  5. if( IsValidVehicleModel(modelid) ) {
  6. db_get_field_assoc(g_DBResult, "name", g_VehModelString, sizeof g_VehModelString);
  7. strpack(g_VehModelNameCache[modelid - MIN_VEHMODEL_ID], g_VehModelString, MAX_VEHMODELNAME_LEN+1);
  8. }
  9. db_next_row(g_DBResult);
  10. }
  11. db_free_result(g_DBResult);
  12. }
  13. GetVehicleModelCacheIndex(modelid) {
  14. if( !IsValidVehicleModel(modelid) ) {
  15. return INVALID_ARRAY_INDEX;
  16. }
  17. return modelid - MIN_VEHMODEL_ID;
  18. }
  19. GetVehicleModelName(modelid, name[], name_size) {
  20. if( !IsValidVehicleModel(modelid) ) {
  21. return 0;
  22. }
  23. strunpack(name, g_VehModelNameCache[modelid - MIN_VEHMODEL_ID], name_size);
  24. return 1;
  25. }
  26. FindVehicleModels(result[], result_size, search[], categoryid, offset, &max_offset) {
  27. new rows_added;
  28. if( categoryid == INVALID_CATEGORY_ID ) {
  29. if( isempty(search) ) {
  30. for(new i = offset; i < MAX_VEHMODELS; i ++) {
  31. if( rows_added >= result_size ) {
  32. break;
  33. }
  34. result[rows_added ++] = i + MIN_VEHMODEL_ID;
  35. }
  36. max_offset = MAX_VEHMODELS - 1;
  37. return rows_added;
  38. } else {
  39. format(g_QueryString, sizeof g_QueryString, "\
  40. SELECT modelid, \
  41. (SELECT COUNT(*) FROM veh_data WHERE modelid LIKE '%%%q%%' OR name LIKE '%%%q%%') AS max_rowcount \
  42. FROM veh_data \
  43. WHERE modelid LIKE '%%%q%%' OR name LIKE '%%%q%%' \
  44. LIMIT %i OFFSET %i",
  45. search, search,
  46. search, search,
  47. result_size, offset
  48. );
  49. }
  50. } else {
  51. if( isempty(search) ) {
  52. format(g_QueryString, sizeof g_QueryString, "\
  53. SELECT modelid, \
  54. (SELECT COUNT(*) FROM veh_category_bind WHERE categoryid = '%i') AS max_rowcount \
  55. FROM veh_category_bind \
  56. WHERE categoryid = '%i' \
  57. LIMIT %i OFFSET %i",
  58. categoryid,
  59. categoryid,
  60. result_size, offset
  61. );
  62. } else {
  63. format(g_QueryString, sizeof g_QueryString, "\
  64. SELECT b.modelid AS modelid, \
  65. (\
  66. SELECT COUNT(*) \
  67. FROM veh_category_bind b \
  68. INNER JOIN veh_data d ON b.modelid = d.modelid \
  69. WHERE b.categoryid = '%i' AND (d.modelid LIKE '%%%q%%' OR d.name LIKE '%%%q%%') \
  70. ) AS max_rowcount \
  71. FROM veh_category_bind b \
  72. INNER JOIN veh_data d ON b.modelid = d.modelid \
  73. WHERE b.categoryid = '%i' AND (d.modelid LIKE '%%%q%%' OR d.name LIKE '%%%q%%') \
  74. LIMIT %i OFFSET %i",
  75. categoryid, search, search,
  76. categoryid, search, search,
  77. result_size, offset
  78. );
  79. }
  80. }
  81. g_DBResult = db_query(g_ResourceDB, g_QueryString);
  82. new result_rows = db_num_rows(g_DBResult);
  83. if( result_rows > 0 ) {
  84. max_offset = db_get_field_assoc_int(g_DBResult, "max_rowcount") - 1;
  85. if( max_offset < 0 ) {
  86. max_offset = 0;
  87. }
  88. }
  89. for(new row; row < result_rows; row ++) {
  90. if( rows_added >= result_size ) {
  91. break;
  92. }
  93. result[rows_added ++] = db_get_field_assoc_int(g_DBResult, "modelid");
  94. db_next_row(g_DBResult);
  95. }
  96. db_free_result(g_DBResult);
  97. return rows_added;
  98. }