HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. //Magyar fordítás: sNaiL
  2. //Plugin készítõje: Alka
  3.  
  4. #include <amxmodx>
  5. #include <amxmisc>
  6.  
  7. #define PLUGIN "Extra Precacher"
  8. #define VERSION "1.0"
  9. #define AUTHOR "Alka"
  10.  
  11. #define MAX_EXT 10
  12.  
  13. new const gValidExt[] = ".wad,.mdl,.spr,.wav,.mp3";
  14.  
  15. new gExt[MAX_EXT][16];
  16.  
  17. public plugin_init() {
  18.  
  19. register_plugin(PLUGIN, VERSION, AUTHOR);
  20. }
  21.  
  22. public plugin_precache()
  23. {
  24. str_piece(gValidExt, gExt, sizeof gExt, sizeof gExt[] - 1, ',');
  25.  
  26. new szConfigsDir[64], szFile[64], szMapName[32];
  27. get_configsdir(szConfigsDir, sizeof szConfigsDir - 1);
  28. get_mapname(szMapName, sizeof szMapName - 1);
  29.  
  30. formatex(szFile, sizeof szFile - 1, "%s/extra_precacher_%s.ini", szConfigsDir, szMapName);
  31.  
  32. if(!file_exists(szFile))
  33. {
  34. formatex(szFile, sizeof szFile - 1, "%s/extra_precacher.ini", szConfigsDir);
  35.  
  36. if(!file_exists(szFile))
  37. write_file(szFile, ";Precache file^n;File name format : name.ext, *.ext, *.*", -1);
  38. }
  39.  
  40. new szBuffer[128], szDir[10][16], iLen, iLine;
  41.  
  42. while(read_file(szFile, iLine++, szBuffer, sizeof szBuffer - 1, iLen))
  43. {
  44. if(!iLen || szBuffer[0] == ';')
  45. continue;
  46.  
  47. for(new i = 0 ; i < sizeof gExt ; i++)
  48. {
  49. if(!gExt[i][0])
  50. continue;
  51.  
  52. if(equali(szBuffer[strlen(szBuffer) - 4], gExt[i]) && szBuffer[strlen(szBuffer) - 5] != '*')
  53. {
  54. if(file_exists(szBuffer))
  55. {
  56. precache_generic(szBuffer);
  57.  
  58. server_print("[ExtraPrecacher]Precacholt fajl ^"%s^"", szBuffer);
  59. }
  60. break;
  61. }
  62. else if(equali(szBuffer[strlen(szBuffer) - 4], gExt[i]) && szBuffer[strlen(szBuffer) - 5] ==
  63.  
  64. '*')
  65. {
  66. str_piece(szBuffer, szDir, sizeof szDir, sizeof szDir[] - 1, '/');
  67. precache_all(szDir, gExt[i], true);
  68.  
  69. break;
  70. }
  71. else if(equali(szBuffer[strlen(szBuffer) - 2], ".*") && szBuffer[strlen(szBuffer) - 3] ==
  72.  
  73. '*')
  74. {
  75. str_piece(szBuffer, szDir, sizeof szDir, sizeof szDir[] - 1, '/');
  76. precache_all(szDir, "", false);
  77.  
  78. break;
  79. }
  80. }
  81. }
  82. }
  83.  
  84. public precache_all(dir[10][16], ext[], bool:checkext)
  85. {
  86. new szDir[128];
  87.  
  88. for(new i = 0 ; i < sizeof dir ; i++)
  89. {
  90. if(!dir[i][0] || containi(dir[i], ".") != -1)
  91. continue;
  92.  
  93. format(szDir, sizeof szDir - 1,"%s/%s", szDir, dir[i]);
  94. }
  95.  
  96. new iDir = open_dir(szDir, "", 0);
  97.  
  98. new szBuffer[64];
  99.  
  100. while(next_file(iDir, szBuffer, sizeof szBuffer))
  101. {
  102. if(szBuffer[0] == '.' || containi(szBuffer, ".ztmp") != -1)
  103. continue;
  104.  
  105. if(checkext)
  106. {
  107. if(!equali(szBuffer[strlen(szBuffer) - 4], ext))
  108. continue;
  109. }
  110.  
  111. format(szBuffer, sizeof szBuffer - 1, "%s/%s", szDir, szBuffer);
  112.  
  113. if(file_exists(szBuffer))
  114. {
  115. precache_generic(szBuffer);
  116.  
  117. server_print("[ExtraPrecacher]Precachholt fajl ^"%s^"", szBuffer);
  118. }
  119. }
  120. close_dir(iDir);
  121. }
  122.  
  123. stock str_piece(const input[], output[][], outputsize, piecelen, token = '|')
  124. {
  125. new i = -1, pieces, len = -1 ;
  126.  
  127. while ( input[++i] != 0 )
  128. {
  129. if ( input[i] != token )
  130. {
  131. if ( ++len < piecelen )
  132. output[pieces][len] = input[i] ;
  133. }
  134. else
  135. {
  136. output[pieces++][++len] = 0 ;
  137. len = -1 ;
  138.  
  139. if ( pieces == outputsize )
  140. return pieces ;
  141. }
  142. }
  143. return pieces + 1;
  144. }
  145.