[FilterScript] DownloadMeter (0.3.DL)
#1

This FS will allow you to get the amount of data downloaded and call onplayerfinishdownloading a proper version which wouldnt call when the virtual world changes, The amount of data downloaded is not exact and not very accurate but its close to it as the amount increases the longer time spent in downloading files, anyways this is just a small workaround for OnPlayerFinishedDownloading broken version and with this FS you can have a proper callback on your gamemode as this will call a function on your gamemode called "OnPlayerFinishDownloading"

To put on gamemode:
Code:
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;
}
Filterscript:
Code:
#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;
}
You dont need any plugin or some shit just plug n play.
I know this is useless but im just providing a workaround for ppl who need it. there would be bugs cuz i havent tested this out on a public server only on lan.

Bug(s):
Quote:

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.

Reply
#2

Shouldn't this be an include?
Reply
#3

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.
Reply
#4

Quote:
Originally Posted by Locky_
View Post
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?
Reply
#5

Quote:
Originally Posted by MafiaOink
View Post
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.
Reply
#6

Quote:
Originally Posted by Locky_
View Post
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.
Well I didnt have RedirectDownload in my mind so... it wouldnt work with that.
Reply
#7

I've noticed that size may never really be what we have on disk. The server uses compression during download. I for example bass by 13mb game, on disk are 30mb.

Quote:
Originally Posted by Kalcor
- Adds data compression to file downloads. Note: Downloads with thousands of small files can still be slow.
Downloading features are best accounted for using in a single script (fs / gm). I made this include if you want to know more: https://sampforum.blast.hk/showthread.php?tid=650640
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)