SA-MP Forums Archive
Useful Snippets - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Filterscripts (https://sampforum.blast.hk/forumdisplay.php?fid=17)
+--- Thread: Useful Snippets (/showthread.php?tid=281)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30


Re: Useful Snippets - JordanMaddox - 10.02.2013

Quote:
Originally Posted by TheArcher
Посмотреть сообщение
where
pawn Код:
PlayerInfo[playerid][pAdmin] >= changeme
comes from? o.o
I used it in my GF Edit...nuff said


Re: Useful Snippets - Sergei - 10.02.2013

Quote:
Originally Posted by DonWade
Посмотреть сообщение
Don't know if anyone posted something like this but just created it for myself , could be used by someone:

Код:
stock FindFreeObjectSlot(playerid)
{
    for(new i; i < MAX_PLAYER_ATTACHED_OBJECTS; i++)
    {
        if(!IsPlayerAttachedObjectSlotUsed(playerid, i))
        {
            return i;
        }
    }
    return 1;
}
Return (-1) or something 10+ if there are no free slots, otherwise this function is useless.


Re: Useful Snippets - MP2 - 10.02.2013

Quote:
Originally Posted by [HLF]Southclaw
Посмотреть сообщение
pawn Код:
// Weapon Knockback

public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
{
    new
        Float:px,
        Float:py,
        Float:pz,
        Float:ix,
        Float:iy,
        Float:iz,
        Float:angle;

    GetPlayerPos(playerid, px, py, pz);
    GetPlayerPos(issuerid, ix, iy, iz);

    angle = absoluteangle(-(90-(atan2((fDestY - fPointY), (fDestX - fPointX)))));

    SetPlayerVelocity(playerid, 0.35 * floatsin(-angle, degrees), 0.35 * floatcos(-angle, degrees), 0.1);
    ApplyAnimation(playerid, "PED", "FALL_back", 4.0, 0, 1, 1, 1, 0, 1);
    defer GetUp(playerid);
}
timer GetUp[1000](playerid)
{
    ApplyAnimation(playerid, "PED", "getup", 4.0, 0, 1, 1, 0, 0, 1);
}

stock Float:absoluteangle(Float:angle)
{
    while(angle < 0.0)angle += 360.0;
    while(angle > 360.0)angle -= 360.0;
    return angle;
}
You never declared fDestY, fPointY, fDestX, fPointX.


Re: Useful Snippets - JordanMaddox - 10.02.2013

Quote:
Originally Posted by JordanMaddox
Посмотреть сообщение
It's not much...made it in like 5 minutes...but I guess it can be quite useful

Код:
#define COLOR_YELLOW 0xFFFF00AA //<--Incase you don't have yellow defined, add it to the top of your script with all your other definitions
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GRAD1 0xB4B5B7FF

CMD:arims(playerid, params[])
{
        if(IsPlayerAdmin(playerid))
	{
		if(isnull(params))
		{
			SendClientMessage(playerid, COLOR_WHITE, "USAGE: /arims [rim model]");
			SendClientMessage(playerid, COLOR_GRAD1, "Rim Models: Cutter, Switch, OffRoad, Shadow, Mega, Rimshine, Wire");
			return 1;
		}
		if(strcmp(params,"cutter",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Cutter Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1079);
		}

		else if(strcmp(params,"switch",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Switch Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1080);
		}

		else if(strcmp(params,"offroad",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed OffRoad Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1026);
		}
		
		else if(strcmp(params,"shadow",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Shadow Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1073);
		}
		
		else if(strcmp(params,"mega",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Mega Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1074);
		}
		
		else if(strcmp(params,"rimshine",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Rimshine Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1075);
		}
		
		else if(strcmp(params,"wire",true) == 0)
		{
			SendClientMessage(playerid, COLOR_YELLOW, "You have placed Wire Rims on this vehicle.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1076);
		}
	}
	else
	{
		SendClientMessage(playerid, COLOR_GRAD1, "You're not authorized to use that command!");
	}
	return 1;
}
It's fixed now...


String Contains an IP - vvhy - 17.04.2013

Stock function that will find if a string contains an IP address. Useful for anti advertising.
pawn Code:
#define MAX_NUM 10
#define MY_SERVER_IP "255.255.255.255:7777"
stock ContainsIP(const string[])
{
    new num[MAX_NUM][128];
    new numpos[MAX_NUM];
    new dotcount,i;
    if(strfind(string,MY_SERVER_IP)!=-1)return 0;
    for(new npos=0;npos<=MAX_NUM;npos++)
    {
        new c;
        for(c=0;i<strlen(string);i++)
        {

            new ch = string[i];

            if((string[i] == '.' || string[i] == ':') && ((i>0 && '0' <= string[i-1] <= '9') || (i>1 && '0' <= string[i-2] <= '9') ))
            {
                dotcount++;
                i++;
                break;
            }
            if ((npos==0 || i - numpos[npos - 1] < strlen(num[npos-1])+4) && '0' <= ch <= '9' || (c == 0 && ch == '-'))
            {
                num[npos][c] = string[i];
                numpos[npos] = i;
                c++;
            }


        }

    }
    new found=0;
    for(new npos=0;npos<MAX_NUM;npos++)
    {
        if( strlen(num[npos]) > 0 && 0 < strval(num[npos]) <= 225)
        {
            found++;
        }
    }
    if(found >= 3 && dotcount >= 3)return 1;
    return 0;
}
Example:

pawn Code:
public OnPlayerText(playerid, text[])
{
    if(ContainsIP(text))
    {
        BanEx(playerid,"Advertising");
        return 0;
    }
    return 0;
}



Re: String Contains an IP - SuperViper - 18.04.2013

Quote:
Originally Posted by vvhy
View Post
Stock function that will find if a string contains an IP address. Useful for anti advertising.
pawn Code:
#define MAX_NUM 10
#define MY_SERVER_IP "255.255.255.255:7777"
stock ContainsIP(const string[])
{
    new num[MAX_NUM][128];
    new numpos[MAX_NUM];
    new dotcount,i;
    if(strfind(string,MY_SERVER_IP)!=-1)return 0;
    for(new npos=0;npos<=MAX_NUM;npos++)
    {
        new c;
        for(c=0;i<strlen(string);i++)
        {

            new ch = string[i];

            if((string[i] == '.' || string[i] == ':') && ((i>0 && '0' <= string[i-1] <= '9') || (i>1 && '0' <= string[i-2] <= '9') ))
            {
                dotcount++;
                i++;
                break;
            }
            if ((npos==0 || i - numpos[npos - 1] < strlen(num[npos-1])+4) && '0' <= ch <= '9' || (c == 0 && ch == '-'))
            {
                num[npos][c] = string[i];
                numpos[npos] = i;
                c++;
            }


        }

    }
    new found=0;
    for(new npos=0;npos<MAX_NUM;npos++)
    {
        if( strlen(num[npos]) > 0 && 0 < strval(num[npos]) <= 225)
        {
            found++;
        }
    }
    if(found >= 3 && dotcount >= 3)return 1;
    return 0;
}
Example:

pawn Code:
public OnPlayerText(playerid, text[])
{
    if(ContainsIP(text))
    {
        BanEx(playerid,"Advertising");
        return 0;
    }
    return 0;
}
A more proper name for that function is IsServerAdvertisement or something along those lines.


Re: String Contains an IP - Stylock - 18.04.2013

Quote:
Originally Posted by SuperViper
View Post
A more proper name for that function is IsServerAdvertisement or something along those lines.
But then the function name would be falsely describing what the function does.


Re: Useful Snippets - RedFusion - 19.04.2013

pawn Code:
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
    /* Returns the packetloss percentage of the given playerid - Made by Fusez */

    if(!IsPlayerConnected(playerid)) return 0;

    new nstats[400+1], nstats_loss[20], start, end;
    GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));

    start = strfind(nstats,"packetloss",true);
    end = strfind(nstats,"%",true,start);

    strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
    packetloss = floatstr(nstats_loss);
    return 1;
}



Re: String Contains an IP - SuperViper - 19.04.2013

Quote:
Originally Posted by Stylock
View Post
But then the function name would be falsely describing what the function does.
The function checks for server advertisement, not just any IP.


Re: Useful Snippets - Lorenc_ - 20.04.2013

Quote:
Originally Posted by RedFusion
View Post
pawn Code:
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
    /* Returns the packetloss percentage of the given playerid - Made by Fusez */

    if(!IsPlayerConnected(playerid)) return 0;

    new nstats[400+1], nstats_loss[20], start, end;
    GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));

    start = strfind(nstats,"packetloss",true);
    end = strfind(nstats,"%",true,start);

    strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
    packetloss = floatstr(nstats_loss);
    return 1;
}
Nice function!!!

____

And guys, use the Regex plugin. No need for some complex code when you can just make an expression:

pawn Code:
stock textContainsIP(const string[])
{
    static
        RegEx:rCIP
    ;

    if ( !rCIP )
    {
        rCIP = regex_build("(.*?)([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})(.*?)");
    }

    return regex_match_exid(string, rCIP);
}



Re: Useful Snippets - NicholasA - 21.04.2013

Hey I wanted to make this into a filterscript with a warning system but I didn't really feel like it, it's a sound file that plays "Hello user, you have been warned by an admin. Please stop breaking the rules" I think you guys can do something fun with this. Enjoy!
https://dl.dropboxusercontent.com/u/...hello_user.wav



Re: Useful Snippets - RedFusion - 21.04.2013

Quote:
Originally Posted by NicholasA
View Post
Hey I wanted to make this into a filterscript with a warning system but I didn't really feel like it, it's a sound file that plays "Hello user, you have been warned by an admin. Please stop breaking the rules" I think you guys can do something fun with this. Enjoy!
https://dl.dropboxusercontent.com/u/...hello_user.wav
Hahaha are you supposed to use this?


Re: Useful Snippets - Lordzy - 27.04.2013

A command which creates gang zones quickly on the map. The default range specified here is 100, which creates a square model gang zone. You can change it though. It creates square model zones only as it's all set to a specified value, you can change it though.

pawn Code:
CMD:gangzone(playerid, params[])
{
 new Float:xp, Float:yp, Float:zp;
 GetPlayerPos(playerid, xp, yp, zp);
 #pragma unused zp
 new range = 100;
 new Gangzone = GangZoneCreate(xp-range, yp-range, xp+range, yp+range);
 GangZoneShowForAll(Gangzone, 0xFF0000FF);
 return 1;
}
I use this when I'm lazy to get all the coords.


Re: Useful Snippets - Niko_boy - 10.07.2013

a better one here
http://forum.sa-mp.com/showpost.php?...postcount=3990


Re: Useful Snippets - RedFusion - 10.07.2013

Quote:
Originally Posted by ******
Посмотреть сообщение
21th?
If the number ends with "1" and is not 11, it's "st"

pawn Код:
printf("%s", AddNumberSuffix(21));
// From serverlog: [15:45:15] 21st



Re: Useful Snippets - Dragonsaurus - 11.07.2013

I use something like this (RyDeR's race system):
pawn Код:
switch(Position)
{
      case 1,21,31,41,51,61,71,81,91: pos = "st";
      case 2,22,32,42,52,62,72,82,92: pos = "nd";
      case 3,23,33,43,53,63,73,83,93: pos = "rd";
      default: pos = "th";
}
Only if max players is 100.
Easy...
EDIT: I saw that, of course. But mine is simple, no need for any calculation.
I am aditing just for not posting again


Re: Useful Snippets - RedFusion - 11.07.2013

Quote:
Originally Posted by ******
Посмотреть сообщение
You're right, but then there's 111, which should be "th" but is "st" (unless you say "eleventy-first").
I just looked at a table of number 1 - 100 and made a code according to it. But you're right about this.


Re: Useful Snippets - RyDeR` - 11.07.2013

Quote:
Originally Posted by ******
Посмотреть сообщение
Even that can be improved slightly.
True that:
pawn Код:
stock getOrdinal(iNum) {
    static const
        s_aszOrdinal[4][3] = { "st", "nd", "rd", "th" }
    ;
    iNum = (iNum < 0) ? -iNum : iNum;

    return ((10 < (iNum % 100) < 14) || !(0 < (iNum = (iNum % 10)) < 4)) ? s_aszOrdinal[3] : s_aszOrdinal[iNum - 1];
}



Re: Useful Snippets - RedFusion - 12.07.2013

EDIT:
pawn Код:
stock GetNumberSuffix(number)
{
    new value[20], string[3], length;
    format(value, sizeof(value), "%i", number);
    length = strlen(value);

    if(value[length-1] == '1' && (length == 1 || (length > 1 && value[length-2] != '1'))) string = "st";
    else if(value[length-1] == '2' && (length == 1 || (length > 1 && value[length-2] != '1'))) string = "nd";
    else if(value[length-1] == '3' && (length == 1 || (length > 1 && value[length-2] != '1'))) string = "rd";
    else string = "th";
    return string;
}



Re: Useful Snippets - RedFusion - 13.07.2013

pawn Код:
stock GetVehicleType(model)
{
    switch(model)
    {
        case 0: return 0; // None
        case 472, 473, 493, 595, 484, 430, 453, 452, 446: return 1; // Water
        case 417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520,
        548, 553, 563, 577, 592, 593, 464, 465, 501: return 2; // Air
        default: return 3; // Land
    }
    return 0;
}