func.pwn 3.5 KB

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