download.inc 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*
  2. ##############################################
  3. ## Manipulação de Downloads ##
  4. ## by Locky ##
  5. ##############################################
  6. * Funções [Player]
  7. native IsPlayerDownloading(playerid);
  8. native GetPlayerDownloadTime(playerid);
  9. native GetPlayerDownloadedFiles(playerid);
  10. native GetPlayerDownloadedTextures(playerid);
  11. native GetPlayerDownloadedModels(playerid);
  12. native GetPlayerDownloadVirtualWorld(playerid);
  13. native GetPlayerDownloadTimeString(playerid);
  14. native Float:GetPlayerDownloadProgress(playerid);
  15. native GetPlayerDownloadedBytes(playerid);
  16. native IsPlayerUseRedirectDownload(playerid);
  17. * Funções [Server]
  18. native IsServerUseArtwork();
  19. native GetServerArtworkFolder(folder[]);
  20. native GetArtworkGlobalSimpleModels();
  21. native GetArtworkGlobalCharModels();
  22. native GetArtworksModelFiles();
  23. native GetArtworksTextureFiles();
  24. native GetArtworkModelFilesInVW(virtualworld);
  25. native GetArtworkTextureFilesInVW(virtualworld);
  26. native GetArtworkSimpleModelInVW(virtualworld);
  27. * Callback
  28. OnPlayerStartedDownload(playerid, virtualworld);
  29. */
  30. #if !defined _samp_included
  31. #error "Defina a include SA-MP"
  32. #else
  33. #if !defined OnPlayerFinishedDownloading
  34. #error "SA-MP 0.3.DL Requerido"
  35. #endif
  36. #endif
  37. #if defined _samp_downloading
  38. #endinput
  39. #endif
  40. #define _samp_downloading
  41. // Player
  42. enum _down {
  43. bool:_Started,
  44. bool:_Redirected,
  45. _TimeCount,
  46. _VirtualWorld,
  47. _FilesTXD,
  48. _FilesDFF,
  49. _Bytes
  50. };
  51. static PlayerDownload[MAX_PLAYERS][_down],
  52. GlobalFilesDFF,
  53. GlobalFilesTXD,
  54. GlobalCountChars,
  55. GlobalCountObjects;
  56. stock d_AddSimpleModel(vw, bid, nid, dff[], txd[]) {
  57. if(vw == -1) {
  58. if(!GetSVarInt(dff)) {
  59. SetSVarInt(dff, 1);
  60. GlobalFilesDFF++;
  61. }
  62. if(!GetSVarInt(txd)) {
  63. SetSVarInt(txd, 1);
  64. GlobalFilesTXD++;
  65. }
  66. } else {
  67. static viw[20];
  68. format(viw, sizeof(viw), "models_world_%i", vw);
  69. SetSVarInt(viw, GetSVarInt(viw)+1);
  70. if(!GetSVarInt(dff)) {
  71. SetSVarInt(dff, 1);
  72. format(viw, sizeof(viw), "dff_world_%i", vw);
  73. SetSVarInt(viw, GetSVarInt(viw)+1);
  74. }
  75. if(!GetSVarInt(txd)) {
  76. SetSVarInt(txd, 1);
  77. format(viw, sizeof(viw), "txd_world_%i", vw);
  78. SetSVarInt(viw, GetSVarInt(viw)+1);
  79. }
  80. }
  81. return AddSimpleModel(vw, bid, nid, dff, txd);
  82. }
  83. stock d_AddSimpleModelTimed(vw, bid, nid, dff[], txd[], ton, toff) {
  84. if(vw == -1) {
  85. if(!GetSVarInt(dff)) {
  86. SetSVarInt(dff, 1);
  87. GlobalFilesDFF++;
  88. }
  89. if(!GetSVarInt(txd)) {
  90. SetSVarInt(txd, 1);
  91. GlobalFilesTXD++;
  92. }
  93. } else {
  94. static viw[20];
  95. format(viw, sizeof(viw), "models_world_%i", vw);
  96. SetSVarInt(viw, GetSVarInt(viw)+1);
  97. if(!GetSVarInt(dff)) {
  98. SetSVarInt(dff, 1);
  99. format(viw, sizeof(viw), "dff_world_%i", vw);
  100. SetSVarInt(viw, GetSVarInt(viw)+1);
  101. }
  102. if(!GetSVarInt(txd)) {
  103. SetSVarInt(txd, 1);
  104. format(viw, sizeof(viw), "txd_world_%i", vw);
  105. SetSVarInt(viw, GetSVarInt(viw)+1);
  106. }
  107. }
  108. return AddSimpleModelTimed(vw, bid, nid, dff, txd, ton, toff);
  109. }
  110. stock d_AddCharModel(bid, nid, dff[], txd[]) {
  111. if(!GetSVarInt(dff)) {
  112. SetSVarInt(dff, 1);
  113. GlobalFilesDFF++;
  114. }
  115. if(!GetSVarInt(txd)) {
  116. SetSVarInt(txd, 1);
  117. GlobalFilesTXD++;
  118. }
  119. return AddCharModel(bid, nid, dff, txd);
  120. }
  121. #if defined _ALS_AddSimpleModel
  122. #undef AddSimpleModel
  123. #else
  124. #define _ALS_AddSimpleModel
  125. #endif
  126. #define AddSimpleModel d_AddSimpleModel
  127. #if defined _ALS_AddSimpleModelTimed
  128. #undef AddSimpleModelTimed
  129. #else
  130. #define _ALS_AddSimpleModelTimed
  131. #endif
  132. #define AddSimpleModelTimed d_AddSimpleModelTimed
  133. #if defined _ALS_AddCharModel
  134. #undef AddCharModel
  135. #else
  136. #define _ALS_AddCharModel
  137. #endif
  138. #define AddCharModel d_AddCharModel
  139. stock d_RedirectDownload(playerid, url[]) {
  140. PlayerDownload[playerid][_Redirected]=true;
  141. return RedirectDownload(playerid, url);
  142. }
  143. #if defined _ALS_RedirectDownload
  144. #undef RedirectDownload
  145. #else
  146. #define _ALS_RedirectDownload
  147. #endif
  148. #define RedirectDownload d_RedirectDownload
  149. public OnPlayerConnect(playerid)
  150. {
  151. PlayerDownload[playerid][_Started] = false;
  152. return CallLocalFunction("d_OnPlayerConnect", "d", playerid);
  153. }
  154. #if defined _ALS_OnPlayerConnect
  155. #undef OnPlayerConnect
  156. #else
  157. #define _ALS_OnPlayerConnect
  158. #endif
  159. #define OnPlayerConnect d_OnPlayerConnect
  160. forward d_OnPlayerConnect(playerid);
  161. public OnPlayerDisconnect(playerid, reason) {
  162. for(new _down:e; e < _down; e++)
  163. PlayerDownload[playerid][e] = 0;
  164. return CallLocalFunction("d_OnPlayerDisconnect", "dd", playerid, reason);
  165. }
  166. #if defined _ALS_OnPlayerDisconnect
  167. #undef OnPlayerDisconnect
  168. #else
  169. #define _ALS_OnPlayerDisconnect
  170. #endif
  171. #define OnPlayerDisconnect d_OnPlayerDisconnect
  172. forward d_OnPlayerDisconnect(playerid, reason);
  173. public OnPlayerRequestDownload(playerid, type, crc) {
  174. if(!PlayerDownload[playerid][_Started]) {
  175. PlayerDownload[playerid][_Started] = true;
  176. PlayerDownload[playerid][_TimeCount] = gettime();
  177. PlayerDownload[playerid][_VirtualWorld] = GetPlayerVirtualWorld(playerid);
  178. PlayerDownload[playerid][_Bytes] = NetStats_BytesSent(playerid);
  179. CallLocalFunction("OnPlayerStartedDownloading", "dd", playerid, PlayerDownload[playerid][_VirtualWorld]);
  180. }
  181. switch(type)
  182. {
  183. case DOWNLOAD_REQUEST_TEXTURE_FILE: PlayerDownload[playerid][_FilesTXD]++;
  184. case DOWNLOAD_REQUEST_MODEL_FILE: PlayerDownload[playerid][_FilesDFF]++;
  185. }
  186. PlayerDownload[playerid][_Redirected]=false;
  187. if(funcidx("d_OnPlayerRequestDownload") != -1)
  188. return CallLocalFunction("d_OnPlayerRequestDownload", "ddd", playerid, type, crc);
  189. else
  190. return 1;
  191. }
  192. #if defined _ALS_OnPlayerRequestDownload
  193. #undef OnPlayerRequestDownload
  194. #else
  195. #define _ALS_OnPlayerRequestDownload
  196. #endif
  197. #define OnPlayerRequestDownload d_OnPlayerRequestDownload
  198. forward d_OnPlayerRequestDownload(playerid, type, crc);
  199. public OnPlayerFinishedDownloading(playerid, virtualworld)
  200. {
  201. CallLocalFunction("d_OnPlayerFinishDownload", "dd", playerid, virtualworld);
  202. SetTimerEx("FlushDownloadInfo", 1000, false, "d", playerid);
  203. return 1;
  204. }
  205. #if defined _ALS_OnPlayerFinishDownload
  206. #undef OnPlayerFinishedDownloading
  207. #else
  208. #define _ALS_OnPlayerFinishDownload
  209. #endif
  210. #define OnPlayerFinishedDownloading d_OnPlayerFinishDownload
  211. forward d_OnPlayerFinishDownload(playerid, virtualworld);
  212. forward FlushDownloadInfo(playerid);
  213. public FlushDownloadInfo(playerid) {
  214. static down[32];
  215. format(down, sizeof(down), "down_dff_world_%i", PlayerDownload[playerid][_VirtualWorld]);
  216. SetPVarInt(playerid, down, PlayerDownload[playerid][_FilesDFF]);
  217. format(down, sizeof(down), "down_txd_world_%i", PlayerDownload[playerid][_VirtualWorld]);
  218. SetPVarInt(playerid, down, PlayerDownload[playerid][_FilesTXD]);
  219. format(down, sizeof(down), "down_bytes_world_%i", PlayerDownload[playerid][_VirtualWorld]);
  220. SetPVarInt(playerid, down, (NetStats_BytesSent(playerid) - PlayerDownload[playerid][_Bytes]));
  221. PlayerDownload[playerid][_Started]=PlayerDownload[playerid][_Redirected]=false;
  222. PlayerDownload[playerid][_TimeCount]=PlayerDownload[playerid][_VirtualWorld]=PlayerDownload[playerid][_FilesTXD]=PlayerDownload[playerid][_FilesDFF]=PlayerDownload[playerid][_Bytes]=0;
  223. return 1;
  224. }
  225. /////////////////////////////////////////////////////////////////////////////////////////
  226. // Player
  227. stock IsPlayerDownloading(playerid) return PlayerDownload[playerid][_Started];
  228. stock GetPlayerDownloadTime(playerid) return (PlayerDownload[playerid][_Started] ? (gettime()-PlayerDownload[playerid][_TimeCount]) : 0);
  229. stock GetPlayerDownloadedTextures(playerid, virtualworld=0) {
  230. if(PlayerDownload[playerid][_Started]) return PlayerDownload[playerid][_FilesTXD];
  231. static down[32];
  232. format(down, sizeof(down), "down_txd_world_%i", virtualworld);
  233. return GetPVarInt(playerid, down);
  234. }
  235. stock GetPlayerDownloadedModels(playerid, virtualworld=0) {
  236. if(PlayerDownload[playerid][_Started]) return PlayerDownload[playerid][_FilesDFF];
  237. static down[32];
  238. format(down, sizeof(down), "down_dff_world_%i", virtualworld);
  239. return GetPVarInt(playerid, down);
  240. }
  241. stock GetPlayerDownloadedFiles(playerid, virtualworld=0) return (GetPlayerDownloadedTextures(playerid, virtualworld) + GetPlayerDownloadedModels(playerid, virtualworld));
  242. stock GetPlayerDownloadVirtualWorld(playerid) return PlayerDownload[playerid][_VirtualWorld];
  243. stock GetPlayerDownloadTimeString(playerid) {
  244. new timestr[14], hor, mi, seg = (gettime()-PlayerDownload[playerid][_TimeCount]);
  245. if(seg >= 3600) {
  246. hor = seg / 3600;
  247. seg -= hor * 3600;
  248. }
  249. if(seg >= 60) {
  250. mi = seg / 60;
  251. seg -= mi * 60;
  252. }
  253. format(timestr, sizeof(timestr), "%02d:%02d:%02d", hor, mi, seg);
  254. return timestr;
  255. }
  256. stock Float:GetPlayerDownloadProgress(playerid) {
  257. if(!PlayerDownload[playerid][_Started]) return 0.0;
  258. if(PlayerDownload[playerid][_VirtualWorld] == 0)
  259. return (floatdiv(float(PlayerDownload[playerid][_FilesTXD] + PlayerDownload[playerid][_FilesDFF]),float(GlobalFilesDFF + GlobalFilesTXD))*100);
  260. else {
  261. static dffs, txds, viw[20], virtualworld;
  262. virtualworld = PlayerDownload[playerid][_VirtualWorld];
  263. format(viw, sizeof(viw), "dff_world_%i", virtualworld);
  264. dffs=GetSVarInt(viw);
  265. format(viw, sizeof(viw), "txd_world_%i", virtualworld);
  266. txds=GetSVarInt(viw);
  267. return (floatdiv(float(PlayerDownload[playerid][_FilesTXD] + PlayerDownload[playerid][_FilesDFF]),float(dffs + txds))*100);
  268. }
  269. }
  270. stock GetPlayerDownloadedBytes(playerid, virtualworld=0) {
  271. if(PlayerDownload[playerid][_Redirected]) return 0;
  272. if(!PlayerDownload[playerid][_Started]) {
  273. static down[32];
  274. format(down, sizeof(down), "down_bytes_world_%i", virtualworld);
  275. return GetPVarInt(playerid, down);
  276. }
  277. return NetStats_BytesSent(playerid) - PlayerDownload[playerid][_Bytes];
  278. }
  279. stock IsPlayerUseRedirectDownload(playerid) return PlayerDownload[playerid][_Redirected];
  280. // Server
  281. stock IsServerUseArtwork() return GetConsoleVarAsBool("useartwork");
  282. stock GetServerArtworkFolder(folder[]) return GetConsoleVarAsString("artpath", folder, 64);
  283. stock GetArtworkGlobalSimpleModels() return GlobalCountObjects;
  284. stock GetArtworkGlobalCharModels() return GlobalCountChars;
  285. stock GetArtworksModelFiles() return GlobalFilesDFF;
  286. stock GetArtworksTextureFiles() return GlobalFilesTXD;
  287. stock GetArtworkSimpleModelInVW(virtualworld) {
  288. static viw[20];
  289. format(viw, sizeof(viw), "models_world_%i", virtualworld);
  290. return GetSVarInt(viw);
  291. }
  292. stock GetArtworkModelFilesInVW(virtualworld) {
  293. static viw[20];
  294. format(viw, sizeof(viw), "dff_world_%i", virtualworld);
  295. return GetSVarInt(viw);
  296. }
  297. stock GetArtworkTextureFilesInVW(virtualworld) {
  298. static viw[20];
  299. format(viw, sizeof(viw), "txd_world_%i", virtualworld);
  300. return GetSVarInt(viw);
  301. }
  302. // Callback
  303. forward OnPlayerStartedDownloading(playerid, virtualworld);
  304. /*
  305. Include criada por Locky
  306. www.brasilmegatrucker.com
  307. */