forward OnPlayerFinishDownloading(playerid, datamb); public OnPlayerFinishDownloading(playerid, datamb) { /*SendClientMessage(playerid, 1, "{00FF33}You have completely downloaded all files."); new String[256]; format(String, 256, "{FFFFFF}Downloaded: {00FF33}%0.2f {FFFFFF}MBs of Data.", datamb); SendClientMessage(playerid, 1, String);*/ // Put whatever you want return 1; }
#include <a_samp> new Downloaded[MAX_PLAYERS]; new PlayerTick[MAX_PLAYERS]; stock GetTickDiff(newtick, oldtick) { if (oldtick < 0 && newtick >= 0) { return newtick - oldtick; } else if (oldtick >= 0 && newtick < 0 || oldtick > newtick) { return (cellmax - oldtick + 1) - (cellmin - newtick); } return newtick - oldtick; } public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Download Meter SA-MP 0.3.DL"); print("--------------------------------------\n"); return 1; } public OnPlayerConnect(playerid) { Downloaded[playerid] = 0; PlayerTick[playerid] = GetTickCount(); return 1; } public OnPlayerFinishedDownloading(playerid, virtualworld) { if(Downloaded[playerid] == 1) return 1; if(GetTickDiff(GetTickCount(), PlayerTick[playerid]) > 1000) { Downloaded[playerid] = 1; new Float: bytesOfPlayer = NetStats_BytesSent(playerid); new Float: Megabytes = bytesOfPlayer / 1024 / 1024; CallRemoteFunction("OnPlayerFinishDownloading", "df", playerid, Megabytes); } else { Downloaded[playerid] = 1; // Player changed virtual worlds } return 1; }
If the server change virtual world before the player downloads, the callback will be called, Fix: Don't call SetPlayerVirtualWorld right on connect and only do it after OnplayerFinishDownloading is called. |
Did you get to test this correctly?
I used their logic and it was not even accurate ... I downloaded 30MB in files and the native's return told me that I downloaded about 40KB. |
I know, I couldn't find a way to calculate but I noticed that the bytes received from server increased as you were downloading so I thought to use it instead, but when I tried in my local server the results were like close to what I downloaded,
downloaded: 37 MB in actual server detected: 35 MB but do you mean 40 KB or 40 MB? |
Downloaded: 30mb
By the native: 40kb (bytes / 1024) PS: I believe that because I use RedirectDownload this is not functional. Downloading through the server it seems that the progress estimated by the NetStats function can work. |
Originally Posted by Kalcor
- Adds data compression to file downloads. Note: Downloads with thousands of small files can still be slow.
|