Skocz do zawartości
bocian941

Przydatne funkcje

Rekomendowane odpowiedzi

Zebrałem tutaj wszystkie funkcje z archiwum :) // autor (z pawno.pl)

IsPlayerInArea

funkcja zwraca 1 gdy gracz jest w prostokątnej strefie.

stock IsPlayerInArea(playerid, Float:maxx, Float:minx, Float:maxy, Float:miny)
{ 
	new Float:x, Float:y, Float:z; 
	GetPlayerPos(playerid, x, y, z); 
	return (x > minx && x < maxx && y > miny && y < maxy);
}
stock PlayerName(playerid)
{ 
	new name[MAX_PLAYER_NAME]; 
	GetPlayerName(playerid, name, sizeof(name)); 
	return name; 
}
#define SetPlayerPosEx(%0,%1,%2,%3,%4); {SetPlayerPos(%0, %1, %2, %3);\
	SetPlayerFacingAngle(%0, %4);}
#define strtolower(%0) for(new l = strlen(string) - 1; l >= 0; l--)\
		string[l] = tolower(string[l]); 
#define strtoupper(%0) for(new l = strlen(string) - 1; l >= 0; l--)\
		string[l] = toupper(string[l]);
IsCar(model) // By Ziomal
{
        switch(model)
        {
                case 480, 533, 439, 555, 499, 422, 482, 498,
                        609, 524, 578, 455, 403, 414, 582, 443, 514,
                        600, 413, 515, 440, 543, 605, 459, 531, 408,
                        552, 478, 456, 554, 536, 575, 534, 567, 535,
                        566, 576, 412, 568, 424, 573, 579, 400, 500,
                        444, 556, 557, 470, 489, 505, 495, 416, 433,
                        431, 438, 437, 523, 427, 490, 528, 407, 544,
                        596, 598, 597, 599, 432, 601, 420, 445, 504,
                        401, 518, 527, 542, 507, 562, 585, 419, 526,
                        604, 466, 492, 474, 546, 517, 410, 551, 516,
                        467, 426, 436, 547, 405, 580, 560, 550, 549,
                        540, 491, 529, 421, 602, 429, 496, 402, 541,
                        415, 589, 587, 565, 494, 502, 503, 411, 559,
                        603, 475, 506, 451, 558, 477, 418, 404, 479,
                        458, 561:   return 1;
                
        }
        return 0;
}
stock ToLog(filename[], string[])
{
	new File:Plik = fopen(filename, io_append);
	fwrite(Plik, string);
	fwrite(Plik, "\r\n"); 
	fclose(Plik);
	return 1;
}
stock LosoweKola(vehid)
{

	new kolo[17]=
	{

		1025,1073,1074,1075,
		1076,1077,1078,1079,
		1080,1081,1082,1083,
		1084,1085,1096,1097,
		1098
	};
	AddVehicleComponent(vehid, kolo[random(18)]);
}
stock AddVehicleComponentEx(playerid, vehicleid, ...)
{
	new n = numargs();
	for(new i = 2; i < n; i++)
		AddVehicleComponent(vehicleid, getarg(i, 0));
}
Przykład dla pojazdu Remington:
AddVehicleComponentEx(playerid,GetPlayerVehicleID(playerid),1010,1134,1137,1126,1101,1122,1125,1079,1086,1087,1179,1180);
new const AnimLibraries[][] =
{
	"AIRPORT","Attractors","BAR","BASEBALL","BD_FIRE","BEACH","benchpress",
	"BF_injection","BIKED","BIKEH","BIKELEAP","BIKES","BIKEV","BIKE_DBZ","BMX",
	"BOMBER","BOX","BSKTBALL","BUDDY","BUS","CAMERA","CAR","CARRY","CAR_CHAT",
	"CASINO","CHAINSAW","CHOPPA","CLOTHES","COACH","COLT45","COP_AMBIENT",
	"COP_DVBYZ","CRACK","CRIB","DAM_JUMP","DANCING","DEALER","DILDO","DODGE",
	"DOZER","DRIVEBYS","FAT","FIGHT_B","FIGHT_C","FIGHT_D","FIGHT_E","FINALE",
	"FINALE2","FLAME","Flowers","FOOD","Freeweights","GANGS","GHANDS",
	"GHETTO_DB","goggles","GRAFFITI","GRAVEYARD","GRENADE","GYMNASIUM",
	"HAIRCUTS","HEIST9","INT_HOUSE","INT_OFFICE","INT_SHOP","JST_BUISNESS",
	"KART","KISSING","KNIFE","LAPDAN1","LAPDAN2","LAPDAN3","LOWRIDER",
	"MD_CHASE","MD_END","MEDIC","MISC","MTB","MUSCULAR","NEVADA","ON_LOOKERS",
	"OTB","PARACHUTE","PARK","PAULNMAC","ped","PLAYER_DVBYS","PLAYIDLES",
	"POLICE","POOL","POOR","PYTHON","QUAD","QUAD_DBZ","RAPPING","RIFLE","RIOT",
	"ROB_BANK","ROCKET","RUSTLER","RYDER","SCRATCHING","SHAMAL","SHOP",
	"SHOTGUN","SILENCED","SKATE","SMOKING","SNIPER","SPRAYCAN","STRIP",
	"SUNBATHE","SWAT","SWEET","SWIM","SWORD","TANK","TATTOOS","TEC","TRAIN",
	"TRUCK","UZI","VAN","VENDING","VORTEX","WAYFARER","WEAPONS","WUZI"
};
#define PreloadAnimLibraries(%0) for(new i; i < sizeof AnimLibraries; i++)\
	ApplyAnimation(%0, AnimLibraries[i], "null", 0.0, 0, 0, 0, 0, 0);
new const PickupIDs[] =
{
	-1, //Unarmed - 0
	331, //Brass Knuckles - 1
	333, //Golf Club - 2
	334, //Nite Stick - 3
	335, //Knife - 4
	336, //Baseball Bat - 5
	337, //Shovel - 6
	338, //Pool Cue - 7
	339, //Katana - 8
	341, //Chainsaw - 9
	321, //Purple Dildo - 10
	322, //Large White Vibrator - 11
	323, //Silver Vibrator - 12
	324, //Small White Vibrator - 13
	325, //Flowers - 14
	326, //Cane - 15
	342, //Grenade - 16
	343, //Tear Gas - 17
	344, //Molotov Cocktail - 18
	-1, //19
	-1, //20
	-1, //21
	346, //9mm - 22
	347, //Silenced 9mm - 23
	348, //Desert Eagle - 24
	349, //Shotgun - 25
	350, //Sawn-off Shotgun - 26
	351, //Combat Shotgun - 27
	352, //Micro SMG - 28
	353, //SMG - 29
	355, //AK47 - 30
	356, //M4 - 31
	372, //Tec9 - 32
	357, //Country Rifle - 33
	358, //Sniper Rifle - 34
	359, //Rocket Launcher - 35
	360, //HS Rocket Launcher - 36
	361, //Flamethrower - 37
	362, //Minigun - 38
	363, //Satchel Charge - 39
	364, //Detonator - 40
	365, //Spraycan - 41
	366, //Fire Extinguisher - 42
	367, //Camera - 43
	368, //Nightvision Goggles - 44
	369, //Thermal Goggles - 45
	371 //Parachute - 46
};
#define GetWeaponPickupID(%0) (PickupIDs[%0])
#define Rad(%0) (%0*3.141592/180.0)
sortuj(array[], rozmiar = sizeof(array)) // By damianxb3
{
	new x;
	while(x < rozmiar)
	{

		for(new i; i < (rozmiar - 1); i++)
		{

			if(array[i] > array[i+1])
				continue;
			else
			{

				new n_1 = array[i];
				new n_2 = array[i + 1];
				array[i] = n_2;
				array[i + 1] = n_1;
			}
		}
		x++;
	}
}
Przykładowe użycie (typowo testowe):
public OnFilterScriptInit()
{

	new tablica[10] =
	{
		0, 56, 12, 87, 92, 10, 54, 32, 8, 105
	}
	;
	sortuj(tablica);
	for(new i; i < sizeof(tablica); i++)
	printf("%d", tablica[i]);
}
GivePlayerHealth(playerid, Float:give, bool:Max100HP = true)
{
	new Float:pHealth;
	GetPlayerHealth(playerid, pHealth);

	if(Max100HP == true && pHealth + give > 100.0)
		return SetPlayerHealth(playerid, 100.0);
	else
		return SetPlayerHealth(playerid, pHealth + give);
}
stock CreateVehicleEx(playerid, modelid, colora, colorb, spawn) // By damianxb3
{ 
	new Float:x, Float:y, Float:z, Float:a; 
	GetPlayerPos(playerid, x, y, z); 
	GetPlayerFacingAngle(playerid, a); 
	CreateVehicle(modelid, x+(floatmul(5.0, floatsin(-a, degrees))), y+(floatmul(5.0, floatcos(-a, degrees))), z, a, colora, colorb, spawn); 
}
stock TuneVehicle(vehicleid) // By DrunkeR
{

	switch(GetVehicleModel(vehicleid))
	{

		case 400:
		AddVehComp(vehicleid,1008,1009,1010,1013,1018,1019,1020,1021,1024,1086,1087);
		case 401:
		AddVehComp(vehicleid,1001,1003,1004,1005,1006,1007,1008,1009,1010,1013,1017,1019,1020,1086,10871142,1143,1144,1145);
		case 404:
		AddVehComp(vehicleid,1000,1002,1007,1008,1009,1010,1013,1016,1017,1019,1020,1021,1086,1087);
		case 405:
		AddVehComp(vehicleid,1000,1001,1008,1009,1010,1014,1018,1019,1020,1021,1023,1086,1087);
		case 410:
		AddVehComp(vehicleid,1001,1003,1007,1008,1009,1010,1013,1017,1019,1020,1021,1023,1024,1086,1087);
		case 415:
		AddVehComp(vehicleid,1001,1003,1007,1008,1009,1010,1017,1018,1019,1023,1086,1087);
		case 418:
		AddVehComp(vehicleid,1002,1006,1008,1009,1010,1016,1020,1021,1086,1087);
		case 420:
		AddVehComp(vehicleid,1001,1003,1004,1005,1008,1009,1010,1019,1021,1086,1087);
		case 421:
		AddVehComp(vehicleid,1000,1008,1009,1010,1014,1016,1018,1019,1020,1021,1023,1086,1087);
		case 422:
		AddVehComp(vehicleid,1007,1008,1009,1010,1013,1017,1019,1020,1021,1086,1087);
		case 426:
		AddVehComp(vehicleid,1001,1003,1004,1005,1006,1008,1009,1010,1019,1021,1086,1087);
		case 436:
		AddVehComp(vehicleid,1001,1003,1006,1007,1008,1009,1010,1013,1017,1019,1020,1021,1022,1086,1087);
		case 439:
		AddVehComp(vehicleid,1001,1003,1007,1008,1009,1010,1013,1017,1023,1086,1087,1142,1143,1144,1145);
		case 477:
		AddVehComp(vehicleid,1006,1007,1008,1009,1010,1017,1018,1019,1020,1021,1086,1087);
		case 478:
		AddVehComp(vehicleid,1004,1005,1008,1009,1010,1012,1013,1020,1021,1022,1024,1086,1087);
		case 489:
		AddVehComp(vehicleid,1000,1002,1004,1005,1006,1008,1009,1010,1013,1016,1018,1019,1020,1024,1086,1087);
		case 491:
		AddVehComp(vehicleid,1003,1007,1008,1009,1010,1014,1017,1018,1019,1020,1021,1023,1086,1087,1142,1143,1144,1145);
		case 492:
		AddVehComp(vehicleid,1000,1004,1005,1006,1008,1009,1010,1016,1086,1087);
		case 496:
		AddVehComp(vehicleid,1001,1002,1003,1006,1007,1008,1009,1010,1011,1017,1019,1020,1023,1086,1087);
		case 500:
		AddVehComp(vehicleid,1008,1009,1010,1013,1019,1020,1021,1024,1086,1087);
		case 505:
		AddVehComp(vehicleid,1000,1002,1004,1005,1006,1008,1009,1010,1013,1016,1018,1019,1020,1024,1086,1087);
		case 516:
		AddVehComp(vehicleid,1000,1002,1004,1007,1008,1009,1010,1015,1016,1017,1018,1019,1020,1021,1086,1087);
		case 517:
		AddVehComp(vehicleid,1002,1003,1007,1008,1009,1010,1016,1017,1018,1019,1020,1023,1086,1087,1142,1143,1144,1145);
		case 518:
		AddVehComp(vehicleid,1001,1003,1005,1006,1007,1008,1009,1010,1013,1017,1018,1020,1023,1086,1087,1142,1143,1144,1145);
		case 527:
		AddVehComp(vehicleid,1001,1007,1008,1009,1010,1014,1015,1017,1018,1020,1021,1086,1087);
		case 529:
		AddVehComp(vehicleid,1001,1003,1006,1007,1008,1009,1010,1011,1012,1017,1018,1019,1020,1023,1086,1087);
		case 534:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1100,1101,1106,1122,1123,1124,1125,1126,1127,1178,1179,1180,1185);
		case 535:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121);
		case 536:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1103,1104,1105,1107,1108,1128,1181,1182,1183,1184);
		case 540:
		AddVehComp(vehicleid,1001,1004,1006,1007,1008,1009,1010,1017,1018,1019,1020,1023,1024,1086,1087,1142,1143,1144,1145);
		case 542:
		AddVehComp(vehicleid,1008,1009,1010,1014,1015,1018,1019,1020,1021,1086,1087,1142,1143,1144,1145);
		case 546:
		AddVehComp(vehicleid,1001,1002,1004,1006,1007,1008,1009,1010,1017,1018,1019,1023,1024,1086,1087,1142,1143,1144,1145);
		case 547:
		AddVehComp(vehicleid,1000,1003,1008,1009,1010,1016,1018,1019,1020,1021,1086,1087);
		case 549:
		AddVehComp(vehicleid,1001,1003,1007,1008,1009,1010,1011,1012,1017,1018,1019,1020,1023,1086,1087,1142,1143,1144,1145);
		case 550:
		AddVehComp(vehicleid,1001,1003,1004,1005,1006,1008,1009,1010,1018,1019,1020,1023,1086,1087,1142,1143,1144,1145);
		case 551:
		AddVehComp(vehicleid,1002,1003,1005,1006,1008,1009,1010,1016,1018,1019,1020,1021,1023,1086,1087);
		case 558:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1163,1164,1165,1166,1167,1168);
		case 559:
		AddVehComp(vehicleid,1008,1009,1010,1065,1066,1067,1068,1069,1070,1071,1072,1086,1087,1158,1159,1160,1161,1162,1173);
		case 560:
		AddVehComp(vehicleid,1008,1009,1010,1026,1027,1028,1029,1030,1031,1032,1033,1086,1087,1138,1139,1140,1141,1169,1170);
		case 561:
		AddVehComp(vehicleid,1008,1009,1010,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1086,1087,1154,1155,1156,1157);
		case 562:
		AddVehComp(vehicleid,1008,1009,1010,1034,1035,1036,1037,1038,1039,1040,1041,1086,1087,1146,1147,1148,1149,1171,1172);
		case 565:
		AddVehComp(vehicleid,1008,1009,1010,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1086,1087,1150,1151,1152,1153);
		case 567:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1102,1129,1130,1131,1132,1133,1186,1187,1188,1189);
		case 575:
		AddVehComp(vehicleid,1008,1009,1010,1042,1043,1044,1086,1087,1099,1174,1175,1176,1177);
		case 576:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087,1134,1135,1136,1137,1190,1191,1192,1193);
		case 580:
		AddVehComp(vehicleid,1001,1006,1007,1008,1009,1010,1017,1018,1020,1023,1086,1087);
		case 585:
		AddVehComp(vehicleid,1001,1003,1006,1007,1008,1009,1010,1013,1017,1018,1019,1020,1023,1086,1087,1142,1143,1144,1145);
		case 589:
		AddVehComp(vehicleid,1000,1004,1005,1006,1007,1008,1009,1010,1013,1016,1017,1018,1020,1024,1086,1087,1142,1143,1144,1145);
		case 600:
		AddVehComp(vehicleid,1004,1005,1006,1007,1008,1009,1010,1013,1017,1018,1020,1022,1086,1087);
		case 603:
		AddVehComp(vehicleid,1001,1006,1007,1008,1009,1010,1017,1018,1019,1020,1023,1024,1086,1087,1142,1143,1144,1145);
		case 402,409,411,412,419,424,
		438,442,445,451,458,466,
		467,474,475,479,480,506,
		507,526,533,541,545,555,
		566,579,587,602:
		AddVehComp(vehicleid,1008,1009,1010,1086,1087);
	}
}

new const Wheels[] = 
{ 
	1025, 1073, 1074, 1075, 
	1076, 1077, 1078, 1079, 
	1080, 1081, 1082, 1083, 
	1084, 1085, 1096, 1097, 
	1098 
}; 

stock AddVehComp(vehicleid, ...)
{
	AddVehicleComponent(vehicleid, Wheels[random(sizeof(Wheels))]);
	ChangeVehiclePaintjob(vehicleid, random(3));

	for(new n = 1; n < numargs(); n++)
		AddVehicleComponent(vehicleid, getarg(n, 0));
}
stock FullTime(sekundy, &dni = 0, &godziny = 0, &minuty = 0, &sek = 0)
{ 
	godziny = sekundy / 3600;
	sekundy -= godziny * 3600;
	minuty = sekundy / 60;
	sekundy -= minuty * 60;
	sek = sekundy;
	return 1;
}

PlayerName funkcja zwraca nick gracza (jako string)
SetPlayerPosEx funkcja ustawia pozycję gracza wraz z obrotem
strtolower zmienia wielkość znaków na mniejsze.
strtoupper zmienia wielkość znaków na większe.
IsCar Funkcja sprawdza, czy dany model pojazdu jest samochodem. Zwraca 1, jeśli tak, 0 jeśli nie.
ToLog Funkcja która tworzy podany przez nas plik i zapisuje w nim to co chcemy.
LosoweKola Funkcja montująca w pojeździe o danym id losowe koła:
AddVehicleComponentEx Funkcja dodaje nam wybrane komponenty do pojazdu.
PreloadAnimLibraries Funkcja wczytuje wszystkie biblioteki animacji, dzięki czemu animacje nie będą się uruchamiać za drugim razem, tylko za pierwszym.
GetWeaponPickupID Funkcja zwraca ID modelu pickupa broni, jeśli mamy jej ID.
Float:Rad Funkcja zamieniająca stopnie na radiany:
Sortowanie szereguje wartości w tablicy od największej do najmniejszej
GivePlayerHealth dodaje graczowi wybraną ilość punktów życia
CreateVehicleEx funkcja tworzy pojazd 5m przed graczem
TuneVehicle Maksymalnie tuninguje pojazd o danym ID
FullTime funkcja zmienia sekundy odpowiednio w dni,godziny,minuty i resztę sekund:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sorki za dubble ale przekroczyło 20 000 znaków..

LoadFromFile

funkcja wczytuje dane z pliku (pojazdy, pickupy, obiekty oraz skiny)

dodajemy je do pliku tak samo jak w OnGameModeInit()

stock LoadFromFile(filename[], &ret_class = 0, &ret_vehicles = 0, &ret_pickups = 0, &ret_objects = 0) // By DrunkeR
{
	if(!fexist(filename))
		return printf("ERROR: Nie odnaleziono pliku %s", filename), 0;

	new string[128], line;

	new File:P = fopen(filename, io_read);
	while(fread(P,string))
	{
	    line++;
	    
	    if(WarningsDetector(string, line)) continue;
	    string[strfind(string, ");")] = EOS;

		if(strfind(string, "AddStaticVehicle") != -1)
		{
		    new d[3], Float:f[4];
    		sscanf(string,"p<(>s[128]p<,>iffffii",string,d[0],f[0],f[1],f[2],f[3],d[1],d[2]);
			AddStaticVehicle(d[0],f[0],f[1],f[2],f[3],d[1],d[2]);
			ret_vehicles++;
			continue;
		}
		if(strfind(string, "AddPlayerClass") != -1)
		{
			new d[7], Float:f[4];
            sscanf(string,"p<(>s[128]p<,>iffffiiiiii",string,d[0],f[0],f[1],f[2],f[3],d[1],d[2],d[3],d[4],d[5],d[6]);
			AddPlayerClass(d[0],f[0],f[1],f[2],f[3],d[1],d[2],d[3],d[4],d[5],d[6]);
			ret_class++;
			continue;
		}
		if(strfind(string, "CreatePickup") != -1)
		{
			new d[2], Float:f[3];
            sscanf(string, "p<(>s[128]p<,>iifff",string,d[0],d[1],f[0],f[1],f[2]);
			CreatePickup(d[0],d[1],f[0],f[1],f[2],-1);
			ret_pickups++;
			continue;
		}
		if(strfind(string, "CreateObject") != -1)
		{
			new d[1], Float:f[6];
			sscanf(string,"p<(>s[128]p<,>iffffff",string,d[0],f[0],f[1],f[2],f[3],f[4],f[5]);
			CreateObject(d[0],f[0],f[1],f[2],f[3],f[4],f[5]);
			ret_objects++;
			continue;
		}
	}
	fclose(P);
	return 0;
}

// Mini Funkcje wymagane do działania ww. kodu
stock WarningsDetector(const string[], line)
{
	if(!strcmp(string, "\r\n")) // Anuluje puste linijki
		return 1;
	if(!strfind(string, "//"))  // Anuluje linijki ZACZYNAJĄCE się od komentarza
		return 1;
    if(strfind(string, ");") == -1 && line != 0) //
		return SetTimerEx("WarnPrint", 400, false, "i", line);
	return 0;
}

forward WarnPrint(line);
public WarnPrint(line)
	printf("Warning detected in line %d!", line);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

stock PlayerName(playerid)
{
	new Name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, Name, sizeof(Name));
	return Name;
}

stock WeaponName(weaponid)
{
	new weaponname[32];
	GetWeaponName(weaponid,weaponname,sizeof(weaponname));
	return weaponname;
}

stock Float:PlayerFacingAngle(playerid)
{
	new Float:A;
	GetPlayerFacingAngle(playerid,A);
	return A;
}

stock Float:PlayerHealth(playerid)
{
	new Float:HP;
	GetPlayerHealth(playerid,HP);
	return HP;
}

stock Float:PlayerArmour(playerid)
{
	new Float:ar;
	GetPlayerArmour(playerid,ar);
	return ar;
}

stock PlayerIp(playerid)
{
	new IP[16];
	GetPlayerIp(playerid, IP, sizeof(IP));
	return IP;
}

stock Float:VehicleZAngle(vehicleid)
{
	new Float:Ang;
	GetVehicleZAngle(vehicleid, Ang);
	return Ang;
}

stock Float:VehicleHealth(vehicleid)
{
	new Float:HPveh;
	GetVehicleHealth(vehicleid,HPveh);
	return HPveh;
}
O co tu chodzi ?? , otóż by nie tworzyć nowej zmiennej którą użyjemy np. raz w mapie by pobrać życie gracza, możemy zastosować jedną z tych funkcji. PlayerName(playerid) - zwraca nazwę/nick gracza WeaponName(weaponid) - zwraca nazwę broni PlayerFacingAngle(playerid) - zwraca obrót gracza (Float) PlayerHealth(playerid) - zwraca życie (HP) gracza (Float) PlayerArmour(playerid) - zwraca armour, czyli kamizelkę, a dokładniej jej wytrzymałość (Float) PlayerIp(playerid) - zwraca IP gracza (jako tekst, czyli string) VehicleZAngle(vehicleid) - zwraca obrót pojazdu (Float) VehicleHealth(vehicleid) - zwraca życie (HP) pojazdu (Float) Sposób użycia:
if(PlayerHealth(playerid)<=50)
lub
format(string, sizeof(string), "Gracz %s kupił sobie broń %s", PlayerName(playerid), WeaponName(weaponid));
SetPlayerFacingAngle(playerid,PlayerFacingAngle(playerid)+1.0);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IsPlayerInCube (czy jest w prostopadłościanie):

IsPlayerInCube(playerid, Float:minX, Float:minY, Float:minZ, Float:maxX, Float:maxY, Float:maxZ)
{
	new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
	return (x > minX && x < maxX && y > minY && y < maxY && z > minZ && z < maxZ);
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IsWeapon(weaponid)

Sprawdza czy dane id to id broni którą można dać graczu

stock IsWeapon(weaponid)
{
	switch(weaponid)
	{
		case 0..18,22..46:
			return 1;
	}
	return 0;
}
new const weaponslots[] =
{
	0,0,1,1,1,1,1,1,1,1,10,10,10,10,10,10,8,8,-1,-1,-1,8,
	2,2,2,3,3,3,4,4,5,5,4,6,6,7,7,7,7,8,12,9,9,9,11,11,11
};

stock GetWeaponSlot(weaponid)
{
	if(!IsWeapon(weaponid))
		return -1;

	return weaponslots[weaponid];
}
stock ResetPlayerWeapons2(playerid,...)
{
	new weapons[13][2],
		arweapon = GetPlayerWeapon(playerid);
	for(new SL; SL < 13; SL++)
	{
		GetPlayerWeaponData(playerid, SL, weapons[SL][0], weapons[SL][1]);
	}
	if(numargs() <= 1)
		return 0;
	new ID;
	for(new z = 1; z < numargs(); z++)
	{
	    ID = getarg(z,0);
	    if(IsWeapon(ID))
			continue;
	    if(weapons[GetWeaponSlot(ID)][0] == ID)
			weapons[GetWeaponSlot(ID)][0] = 0;
	}
	ResetPlayerWeapons(playerid);
	for(new SL; SL < 13; SL++)
	{
	    if(weapons[SL][0] == 0)
			continue;
	    GivePlayerWeapon(playerid, weapons[SL][0], weapons[SL][1]);
	}
	if(weapons[GetWeaponSlot(arweapon)][0] == 0)
		SetPlayerArmedWeapon(playerid,0);
	else
		SetPlayerArmedWeapon(playerid, arweapon);
	return 1;
}
Przykład:
ResetPlayerWeapons2(playerid, 32, 38, 1);
lub
ResetPlayerWeapons2(playerid, 10);

GetWeaponSlot(weaponid) Funkcja zwraca nam slot w którym znajduje się broń (dla nie broni zwraca -1, funkcja wymaga powyższej)
ResetPlayerWeapons2(playerid,...) Funkcja podobna do ResetPlayerWeapons lecz tutaj możemy wymienić bronie które chcemy usunąć (reszta broni zostaje)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

DestroyDialog(playerid); - Funkcja usuwająca dialog :)

#define DestroyDialog(%1) ShowPlayerDialog(%1,-1,0,"","","","")
Przykład użycia:
DestroyDialog(playerid);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

stock GetVehSpeed(vehid) // By Diler/PawnMan/RPS
{
	new
		Float:X,
		Float:Y,
		Float:Z;
	GetVehicleVelocity(vehid, X, Y, Z);
	return floatround(floatsqroot(floatpower(X, 2) + floatpower(Y, 2) + floatpower(Z, 2)) * 200);
}

Funkcja zwraca prędkość pojazdu w KM/H

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pit(Float:a,Float:b,Float:c)

Funkcja obliczająca równanie Pitagorasa:

a2+b2=c2

argument który chcemy obliczyć wpisujemy 0 np. jeśli chcemy normalnego Pitagorasa to:

pit(20.1, 10.5, 0); wtedy funkcja zwróci nam wartość równania: c2=20.12+10.52

Float:pit(Float:a,Float:b,Float:c)
{
	if(c==0.0)
		return floatsqroot(floatadd(floatpower(a,2.0),floatpower(b,2.0)));
	else if(a==0.0)
		return floatsqroot(floatsub(floatpower(c,2.0),floatpower(b,2.0)));
	else if(b==0.0)
		return floatsqroot(floatsub(floatpower(c,2.0),floatpower(a,2.0)));

	return 0.0;
}
StrInString(const string[], const sub[], bool:ignorecase=false)
{
	new l, find=strfind(string, sub, ignorecase);

	while(find != -1)
	{
	    l++;
	    find = strfind(string, sub, ignorecase, find+strlen(sub));
	}
	return l;
}

StrInString(const string[], const sub[], bool:ignorecase=false) Funkcja zwraca liczbę ile razy w pierwszym stringu jest drugiego stringu (np. można użyć do sprawdzania ile kropek jest w tekście itp.)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nazwisko gracza

Funkcja zwraca imię i nazwisko gracza (bez twardej spacji).

stock Nazwisko(playerid)
{
	new plname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, plname, sizeof plname);
	for(new i; plname[i] != 0; i++)
		if(plname[i] == '_')
			plname[i] = ' ';


	return plname;
}
Przykład użycia:
printf("%s zalogował się.", Nazwisko(playerid));
Wyświetli w konsoli:
Imię Nazwisko zalogował się.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

* Funkcje "Money" // by DrunkeR - Ogólnie przydatne to prostego anty money cheata

* GiveMoney(playerid, money); // Daje daną ilość pieniędzy graczowi (np. 1000 / -1000)

* SetMoney(playerid, money); //Ustawia ilość pieniędzy (np. 1000 / -1000)

* GetMoney(playerid); // Zwraca ilość pieniędzy gracza

* ResetMoney(playerid); // Resetuje ilość pieniędzy

* OnMoneyUpdate(playerid) // Aktualizuje pieniądze z PVar'a

stock GiveMoney(playerid, money)
	return SetPVarInt(playerid, "money", GetPVarInt(playerid, "money") + money) & OnMoneyUpdate(playerid);

stock SetMoney(playerid, money)
	return SetPVarInt(playerid, "money", money) & OnMoneyUpdate(playerid);

stock GetMoney(playerid)
	return GetPVarInt(playerid, "money");

stock ResetMoney(playerid)
	return SetPVarInt(playerid, "money", 0) & OnMoneyUpdate(playerid);

stock OnMoneyUpdate(playerid)
	return ResetPlayerMoney(playerid) & GivePlayerMoney(playerid, GetPVarInt(playerid, "money"));

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
stock GetPlayerID(const Name[])
{
	new pName[MAX_PLAYER_NAME];
	for(new i = GetMaxPlayers() - 1; i >= 0; i--)
	{
		if(IsPlayerConnected(i))
		{
			GetPlayerName(i, pName, sizeof(pName));
			if(!strcmp(Name, pName, true))
				return i;
		}
	}
	return -1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

PoPolsku(const string[])

Funkcja zwraca 0 jeśli w tekście jest jakis znak nieosiągalny dla polskiej klawiatury

(po za skrótami ALT+numpad)

PoPolsku(const string[])
{
	for(new i=strlen(string)-1; i>=0; i--)
	{
	    switch(string[i])
	    {
	        case 'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H'
			,'K','L','Z','X','C','V','B','N','M','Ę','Ó','Ą','Ś','Ł','Ż','Ź'
			,'Ć','Ń','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g'
			,'h','j','k','l','z','x','c','v','b','n','m','ę','€','ó','ą','ś','ł'
			,'ż','ź','ć','ń','0','1','2','3','4','5','6','7','8','9','`','~','!'
			,'@','#','$','%','^','&','*','(',')','_','+','-','=','[',']','{','}'
			,'J',';','\'',':','\"','\\','|','/','?','.',',','>','<',' ':continue;
	    }
	    return 0;
	}
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

fcreate(const Filename[])

Funkcja tworzy nowy plik, jeśli już istnieje usuwa jego zawartość.

#define fcreate(%1) fclose(fopen(%1, io_write))

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

PlayerToVehicle

Funkcja sprawdzająca czy gracz (playerid) znajduje się w pobliżu pojazdu (vehicleid).

stock PlayerToVehicle(playerid, vehicleid, Float:odleglosc)
{
	new Float:X, Float:Y, Float:Z;
	GetVehiclePos(vehicleid, X, Y, Z);
	return IsPlayerInRangeOfPoint(playerid, odleglosc, X, Y, Z);
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IsValidPlayerID(id)

Funkcja sprawdza czy dane id jest poprawne (czyli dla serwera 30 slotów czy id jest w przedziale 0-29)

#define IsValidPlayerID(%1) (%1 >= 0 && %1 < GetMaxPlayers())
denter(str[])
{
	for(new i = strlen(str) - 1; i >= 0; i--)
		if(!str[i] || str[i] == '\n' || str[i] == '\r')
			stri[i] = 0;
		else
			break;
}
#define AddPVarInt(%1,%2,%3) SetPVarInt(%1,%2,GetPVarInt(%1,%2)+%3)
#define AddPVarFloat(%1,%2,%3) SetPVarFloat(%1,%2,floatadd(GetPVarFloat(%1,%2),%3))

denter(str[]) Funkcja usuwa ze string'u enter (przydatne gdy ktoś używa funkcji fread ponieważ zwraca ona nieraz znak enter)
AddPVarInt(playerid, varname[], value) AddPVarFloat(playerid, varname[], Float:float_value) Dwie funkcje (liczba i float-ułamek) służące do dodawania/odejmowania wartości do/od wartości jaką ma już ten PVar

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcja pobierająca typ pojazdu i funkcja pobierająca mod shop do którego można wjechać pojazdem. Funkcję zrobiłem na potrzeby mojej nowej mapy xD

GetVehicleType

Pojazdy podzieliłem na 10 grup. Normalne, duże (budowlane, autobusy, ciężarówki), motory, rowery, samoloty, helikoptery, łodzie, przyczepki, RC i specjalne (tramwaj, pociąg).

Na górze mapy/skryptu:

//Vehicle types
#define VEH_TYPE_NORMAL_CAR 1
#define VEH_TYPE_BIG_CAR 2
#define VEH_TYPE_MOTORBIKE 3
#define VEH_TYPE_BIKE 4
#define VEH_TYPE_PLANE 5
#define VEH_TYPE_HELI 6
#define VEH_TYPE_BOAT 7
#define VEH_TYPE_TRAILER 8
#define VEH_TYPE_RC 9
#define VEH_TYPE_SPECIAL 10
Na dole mapy/skryptu:
stock GetVehicleType(vehicleid) //by Minokon
{
	new model = GetVehicleModel(vehicleid);
	switch(model)
	{
	    case 400..402, 404, 405, 409..416, 418..424, 426, 429, 434, 436, 438..440, 442, 451, 457..459, 466, 467, 470, 474, 475, 477..480, 482, 483, 485, 489..492, 494..496, 498..500, 502..508, 516..518, 526..536, 540..547, 549..552, 554, 555, 558..562, 565..568, 571, 572, 574..576, 579, 580, 582, 583, 585, 587..589, 596..600, 602, 603, 609:
	        return VEH_TYPE_NORMAL_CAR;
		case 403, 407, 408, 427, 428, 431, 433, 437, 443, 444, 455, 456, 486, 514, 515, 524, 525, 556, 557, 573, 578, 601:
		    return VEH_TYPE_BIG_CAR;
		case 448, 461..463, 468, 471, 521..523, 581, 586:
		    return VEH_TYPE_MOTORBIKE;
		case 481, 509, 510:
		    return VEH_TYPE_BIKE;
		case 460, 476, 511..513, 519, 520, 553, 577, 592, 593:
		    return VEH_TYPE_PLANE;
  		case 417, 425, 447, 469, 487, 488, 497, 548, 563:
  		    return VEH_TYPE_HELI;
		case 430, 446, 452..454, 472, 473, 484, 493, 539, 595:
		    return VEH_TYPE_BOAT;
		case 435, 450, 584, 590, 591, 606..608, 610, 611:
		    return VEH_TYPE_TRAILER;
		case 441, 464, 465, 501, 564, 594:
		    return VEH_TYPE_RC;
		case 449, 537, 538, 569, 570, 604, 605:
		    return VEH_TYPE_SPECIAL;
	}
	return 0;
}
GetVehicleTuneShop Funkcja pobierająca numer mod shopu do którego może wjechać dany pojazd. Podzieliłem pojazdy na 3 grupy, Transfender, Loco Low i Arch Angels. Funkcja zwraca 0 jeśli dany pojazd nie nadaje się do żadnego z danych mod shopów. Na górze mapy/skryptu:
//Mod shops
#define MOD_SHOP_TRANSFENDER 1
#define MOD_SHOP_LOCOLOW 2
#define MOD_SHOP_ARCHANGELS 3
Na dole mapy/skryptu:
stock GetVehicleTuneShop(vehicleid) //by Minokon
{
	new model = GetVehicleModel(vehicleid);
	switch(model)
	{
	    case 400..402, 404, 405, 409..411, 415, 418..422, 424, 426, 429, 436, 438, 439, 442, 451, 458, 466, 467, 474, 475, 477..480, 489, 491, 492, 496, 500, 505..507, 516..518, 526, 527, 529, 533, 540..542, 545..547, 549..551, 555, 575, 579, 580, 585, 587, 589, 600, 602, 603:
	        return MOD_SHOP_TRANSFENDER;
		case 412, 534..536, 566, 567, 576:
		    return MOD_SHOP_LOCOLOW;
		case 558..562, 565:
		    return MOD_SHOP_ARCHANGELS;
	}
	return 0;
}
Przykład użycia
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	new str[100];
	if(GetVehicleType(vehicleid) == VEH_TYPE_NORMAL_CAR)
	{
	    if(GetVehicleTuneShop(vehicleid) == MOD_SHOP_TRANSFENDER) format(str, sizeof str, "Wsiadłeś do normalnego pojazdu. Możesz go zmodyfikować w sklepie Transfender.");
		else if(GetVehicleTuneShop(vehicleid) == MOD_SHOP_LOCOLOW) format(str, sizeof str, "Wsiadłeś do normalnego pojazdu. Możesz go zmodyfikować w sklepie Loco Low.");
        else if(GetVehicleTuneShop(vehicleid) == MOD_SHOP_ARCHANGELS) format(str, sizeof str, "Wsiadłeś do normalnego pojazdu. Możesz go zmodyfikować w sklepie Wheels Arch Angels.");
	}
	SendClientMessage(playerid, 0xEC7600FF, str);
	return 1;
}

Pozdrawiam, Minokon

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

RespawnVehiclesEx

Funkcja respawnuje wszystkie pojazdy

Dlaczego wybrać tą funkcję?

ilość pojazdów * ilość slotów serwera <- standardowa

ilość slotów serwera + ilość pojazdów <- Moja

Przy pełnych możliwościach sa-mp'a (przykładowo 100 osób w autach):

2000 * 500 = 1 000 000 <- standardowa

500 + 2000 = 2 500 <- Moja

Wersja jeden używająca foreach:

stock RespawnVehiclesEx() // by DrunkeR
{
	new UsedVeh[MAX_VEHICLES] = {false, ...};

	foreach(Player, playerid)
		UsedVeh[GetPlayerVehicleID(playerid)] = true;

	for(new vehicleid = 1; vehicleid != MAX_VEHICLES; vehicleid++)
		if(!UsedVeh[vehicleid])
			SetVehicleToRespawn(vehicleid);
}
Wersja dwa używająca zwykłej pętli:
stock RespawnVehiclesEx() // by DrunkeR
{
	new UsedVeh[MAX_VEHICLES] = {false, ...};

	for(new playerid, gMax = GetMaxPlayers(); playerid != gMax; playerid++)
		if(IsPlayerConnected(playerid))
			UsedVeh[GetPlayerVehicleID(playerid)] = true;

	for(new vehicleid = 1; vehicleid != MAX_VEHICLES; vehicleid++)
		if(!UsedVeh[vehicleid])
			SetVehicleToRespawn(vehicleid);
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

GetPlayerIdAtIp(IP[])

Funkcja pobiera ID gracza po IP. Jeżeli nie znajdzie zwraca -1

Foreach:

stock GetPlayerIdAtIP(IP[])
{
	if(!strlen(IP))
		return -1;
	new Pip[16];
	foreach(Player, playerid)
	{
		GetPlayerIp(playerid, Pip, sizeof(Pip));
		if(!strcmp(Pip, IP))
			return playerid;
	}
	return -1;
}
Zwykła:
stock GetPlayerIdAtIP(IP[])
{
	if(!strlen(IP))
		return -1;
	new Pip[16];
	for(new playerid = GetMaxPlayers() - 1; playerid >= 0; playerid--)
		if(IsPlayerConnected(playerid))
		{
			GetPlayerIp(playerid, Pip, sizeof(Pip));
			if(!strcmp(Pip, IP))
				return playerid;
		}

	return -1;
}
#EDYCJA Dodaję funkcję:
stock GenderOfSkin(skinid)
{
	if(skinid < 0 || skinid > 299)
		return -1;

	switch(skinid)
	{
		case 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289:
			return -1;
		case 9, 10, 11, 12, 13, 31, 39, 40, 41, 54, 55,
			56, 63, 64, 69, 75, 76, 77, 85, 86, 87,
			88, 89, 90, 92, 93, 129, 130, 131, 138,
			140, 141, 145, 148, 150, 151, 152, 157,
			169, 172, 178, 190, 191, 192, 193, 194,
			195, 196, 197, 198, 199, 201, 205, 207,
			211, 214, 215, 216, 218, 219, 224, 225,
			226, 231, 232, 233, 237, 238, 243, 244,
			245, 246, 251, 256, 257, 263, 298:
			return 0;
	}
	return 1;
}

Funkcja przydatna np. przy nowej wybierałce by Terminator3 jeżeli ma rozróżniać płeć.

Mogłem się pomylić przy skinach. Jeżeli zauważysz błąd - napisz mi PW.

GenderOfSkin(skinid) Funkcja pozwala zidentyfikować płeć skinu.
Zwracanie: -1 jeżeli skin jest nieprawidłowy, 0 - jeżeli skin jest płci żeńskiej, 1 - jeżeli skin jest płci męskiej.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

IsFloat(const string[])

Funkcja jak się domyślacie sprawdza czy dany string jest liczbą float (akceptuje też normalne liczby)

IsFloat(const string[])
{
	new kropka, len = strlen(string);
	if(!len)
		return 0;

	for(new i = (len-1); i >= 0; i--)
	{
		if(string[i] >= '9' && string[i] <= '0')
			continue;
		else if(string[i] == '.')
		{
			if(i == 0 || i == (len-1) || kropka)
				return 0;
			kropka++;
			continue;
		}
		else
			return 0;
	}
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

stock IsIP(const str[], bool:port = false) // By RPS
{
    for(new cIP[2]; cIP[0] != strlen(str); cIP[0]++)
    {
        switch(str[cIP[0]])
        {
            case '.', ' ', ':', ',', '*', '/', ';', '\\', '|' : continue;
            case '0' .. '9': cIP[1]++;
            default: cIP[1] = 0;
        }

        if((port == false) && (cIP[1] == 8))
        {
            new strex[8];
            strmid(strex, str, cIP[0] - 7, cIP[0]);
            if(IsNumeric(strex))
                return 0;

            return 1;
        }

        if((port == true) && (cIP[1] == 12))
        {
            new strex[12];
            strmid(strex, str, cIP[0] - 11, cIP[0]);
            if(IsNumeric(strex))
                return 0;

            return 1;
        }
    }
    return 0;
}
Funkcja sprawdza czy w tekście znajduje się IP, można ustawić, aby szukało z portem, albo bez. Zwraca: 0 - jeśli IP nie ma w tekście 1 - jeśli IP jest w tekście Aby poprawić skuteczność wyszukiwania ip, można dopisać kilka znaków, które będą zwyczajnie pomijane, np:
case '.', ' ', ':', ',', '*', '/', ';', '\\', '|', '@', '!', '$','#', '%', '^', '&', '(', ')', '`', '~', '[', ']', '_', '?', '{', '}': continue;

Więc żadne obejścia typu "123. %^#  123. $^^$ 12:$@#7777" nie pomogą

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcja sprawdza czy tekst jest liczbą nie ujemną

stock IsNumeric(const string[])
{
	for(new i = strlen(string) - 1; i >= 0; i--)
		if(string[i] > '9' || string[i] < '0')
			return 0;

	return 1;
}
IsNumeric z możliwym minusem z przodu (liczbą ujemną)
stock IsNumeric(const str[])
{
	new len = strlen(str);
	for(new x = len - 1; x > 0; x--)
		if(stri[x] > '9' || str[x] < '0')
			return 0;

    if(str[0] > '9' || str[0] <'0') 
        return (len > 1 && (str[0] == '-' || str[0] == '+'));

    return 1;
}
Bardzo prosta funkcja, losuje ona hasło o długości od 4-16 zbudowane z cyfr oraz dużych i małych liter
randompass(str[])
{
	new x, len = random(20) + 4;
	if(len > 16)
	    len = 16;
	for(new i; i < len; i++)
	{
	    x = random(35);
	    if(x > 25)
	    {
	        x = (x - 25) + ('0' - 1);
	    	str[i] = x;
		}
		else
		{
		    if(!random(4))
		    	str[i] = toupper(x + 'a');
			else
			    str[i] = x + 'a';
		}
	}
	return str;
}

argumentem jest str[] czyli zwracane hasło, tablica musi mieć wielkość minimum 16

Niby funkcja prosta ale dogłębnie ją przetestowałem i na 50000 losowych haseł żadne się nie powtórzyło (zrobiłem 3 takie testy)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ZnajdzIp

Skrypt mojej produkcji, który wykrywa adres IP w około 85% przypadkach (na 1000 losowych adresów IP nie wykryło 144). Wykrywa różne kombinacje: wstawianie spacji między oktetami, przecinki, gwiazdki, myślniki - wszystko w dowolnych ilościach, gdyż pomija te znaki, a notuje jedynie same liczby. Pewnie to jest wadą, że zastosowałem trzy pętle do odszukania adresu.

stock ZnajdzIp(text[]){
	new reklama[256];
	for(new i = 0; i < strlen(text); i++){
		if(text[i] >= '0' && text[i] <= '9'){
	    	format(reklama, sizeof(reklama), "%s%c", reklama, text[i]);
	    }
	}

	new Oktety[4], okt;
	for(new k = 0; k <= sizeof(reklama); k++){
	    if(okt < 4){
		    if(reklama[k] <= '2'){
		        Oktety[okt] = strval(strmid_return(reklama[k],0,1))*100 + strval(strmid_return(reklama[k+1],0,1))*10 + strval(strmid_return(reklama[k+2],0,1));
		        okt++;
		        k += 2;
		    } else {
		        Oktety[okt] = strval(strmid_return(reklama[k],0,1))*10 + strval(strmid_return(reklama[k+1],0,1));
		        okt++;
		        k++;
		    }
	    } else { break; }
	}

	for(new l = 0; l < 4; l++){
	    if(Oktety[l] <= 0 || Oktety[l] >= 255){
	    break;
	    }
	    if(l == 3){
	    return 1;
	    }
	}
	return 0;
}
oraz funkcja pomocnicza:
stock strmid_return(text[], start, end){
	new str[256];
	strmid(str,text,start,end);
	return str;
}

Jeśli można, to proszę o optymalizację tego skryptu, gdyż ja w tej dziedzinie jestem dość cienki :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

DistanceToPoint

Funkcja oblicza odległość gracza od punktu.

Podziękowania do TerinoRa za podrzucenie funkcji obliczającej odległość między dwoma punktami ;p

stock DistanceToPoint(playerid, Float:PointX, Float:PointY, Float:PointZ)
{
	new Float:PosX, Float:PosY, Float:PosZ;
	GetPlayerPos(playerid, PosX, PosY, PosZ);
	return floatsqroot((PosX-PointX)*(PosX-PointX)+(PosY-PointY)*(PosY-PointY)+(PosZ-PointZ)*(PosZ-PointZ)));
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcja zwraca ID pojazdu z nazwy

stock GetIDVehFromName(const string[]) //By MixX
{
    new wynik;
    for(new i=0; i<=sizeof(carname); i++)
    {
        if(strcmp(carname[i], string, true) == 0)
        {
            wynik = i;
            break;
        }
    }
    return wynik+400;
}
Niezbędna tablica:
new carname[][] =
{
   "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Limuzyne",
   "Manane","Infernus","Voodoo","Pony","Mule","Cheetah","Ambulans","Leviathan","Moonbeam","Esperanto","Taxi","Washington",
   "Bobcat","MrWhoopee","BFInjection","Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Busa","Czołg",
   "Barracks","Hotknifa","Trailer","Previon","Autokar","Cabbie","Stallion","Rumpo","RCBandit","Romero","Packer","Monster Trucka",
   "Admiral","Squalo","Seasparrow","Pizzaboy","Tramwaj","Trailer","Turismo","Speeder","Reefer","Tropic","Flatbed","Yankee",
   "Caddy","Solair","Berkley'sRCVan","Skimmer","PCJ - 600","Faggio","Freeway","RCBaron","RCRaider","Glendale","Oceanic",
   "Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR350","Walton","Regina","Comet",
   "BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","newsChopper","Rancher","FBIRancher","Virgo","Greenwood",
   "Jetmax","Hotring","Sandking","BlistaCompact","PoliceMaverick","Boxville","Benson","Mesa","RCGoblin","HotringRacer",
   "HotringRacer","BloodringBanger","Rancher","SuperGT","Elegant","Journey","Bike","MountainBike","Beagle","Cropdust",
   "Stunt","Tanker","RoadTrain","Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","CementTruck",
   "TowTruck","Fortune","Cadrona","FBITruck","Willard","Forklift","Traktor","Combine","Feltzer","Remington","Slamvan",
   "Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover","Sadler","Firetruck","Hustler","Intruder","Primo",
   "Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster","Monster","Uranus","Jester",
   "Sultan","Stratum","Elegy","Raindance","RCTiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer","Kart","Mower",
   "Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","newsvan","Tug","Trailer",
   "Emperor","Wayfarer","Euros","Hotdog","Club","Trailer","Trailer","Andromada","Dodo","RCCam","Launch","PoliceCar(LSPD)",
   "PoliceCar(SFPD)","PoliceCar(LVPD)","PoliceRanger","Picador","S.W.A.T.Van","Alpha","Phoenix","Glendale","Sadler",
   "LuggageTrailer","LuggageTrailer","StairTrailer","Boxville","FarmPlow","UtilityTrailer"
};

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×