Skocz do zawartości
bocian941

Przydatne funkcje

Rekomendowane odpowiedzi

Nie rozumie tego

 sscanf(line, "p<,>iffffffi", SpawnX, SpawnY, SpawnZ, SpawnRX, SpawnRY, SpawnRZ, draw);
Przy SpawnX w sscanfie pobierasz z lini jako 'i' czyli integer lliczbe, a to jest float ;)

I tak patrze to to i jest nie potrzebne.

Taki little bug :D

Ale funjcja fajna :)

 

sscanf(line, "p<,>iffffffi",Object, SpawnX, SpawnY, SpawnZ, SpawnRX, SpawnRY, SpawnRZ, draw);
 

Tak powinno być, elo. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chance

Dzięki tej funkcji możemy wyznaczyć szansę procentową dla wykonanie się warunku(?)
(Przykładowy kod bardziej to przedstawi, ponieważ ja nie umiem tego ubrać w słowa)


Kod funkcji:
stock Chance(i){
    new los = random(99) + 1;
    if(los <= i)
        return 1;
    return 0;
}
Przykładowy kod:
#include <zcmd>

CMD:losuj(playerid, params[]){ //tworzymy komendę w ZCMD
    if(Chance(30)){ //robimy warunek w którym funkcja sprawdza czy gracz "zmieśćił się" w 30% (w skrócie - jest 30% szans, że kod z tego warunku się wykona)
        SendClientMessage(playerid, -1, "Gratulacje! Wygrałeś 1.000.000$!");
        GivePlayerMoney(playerid, 1000000);
    }else{
        SendClientMessage(playerid, -1, "Niestety - umierasz!");
        SetPlayerHealth(playerid, 0.0);
    }
    return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

CheckIP
Skrypt sprawdza czy gracz posiada ten sam zakres IP (przydatne do banow z gpci)


stock CheckIP(ip[], ip2_1[])
{
	new ip2[16], ip2_2[16];
	
	strcat(ip2, ip);
	strdel(ip2, strfind(ip2, "."), strlen(ip2));

	strcat(ip2_2, ip2_1);
	strdel(ip2_2, strfind(ip2_2, "."), strlen(ip2_2));
	
	return strcmp(ip2, ip2_2)==0;
}

lub (nowa wersja)

stock CheckIP(ip[], ip2[]) return strval(ip[0]) == strval(ip2[0]);

Przykład użycia

if(CheckIP("167.155.44.11", "167.165.22.12")) printf("takie same 1");
	if(CheckIP("167.155.44.11", "162.155.44.11")) printf("takie same 1");
	
if(CheckIP(old_ip, current_ip) && CheckGPCI(old_gpci, current_gpci)) {
		//Prawdopodobnie Ban Evading
	}
Edytowane przez P3TRUS

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ConvertSeconds

Funkcja ta zamienia podaną ilość sekund odpowiednio na godziny, minuty i pozostałą ilość sekund.


Kod funkcji:
stock ConvertSeconds(t, &g, &m, &s){
    if(t >= 3600){
        for(new a; a >= 0; a++){
            if(t >= 3600){
                g++;
                t -= 3600;
            }else break;
        }
    }
    if(t >= 60){
        for(new a; a >= 0; a++){
            if(t >= 60){
                m++;
                t -= 60;
            }else break;
        }
    }
    s = t;
}

Zapewne można zrobić to lepiej, ale ja wybrałem najbardziej dla mnie przejrzysty sposób. Niżej będą podane ss'y aby udowodnić, że funkcja wcale nie jest tak nieoptymalna na jaką wygląda.



Przykłądowy skrypt:

public OnRconCommand(cmd[]){
    new test = GetTickCount();
    new g, m, s;
    ConvertSeconds(strval(cmd), g, m, s);
    printf("Godzin: %d, minut: %d, sekund:%d", g, m, s);
    printf("Czas działania skryptu: %dms", GetTickCount() - test);
    return 1;
}
Wyniki działania skryptu:

http://scr.hu/2j35/tzadx

UWAGA:
Po podaniu liczby sekund większej od 1mld, skrypt nie działa - głowiłem się dlaczego tak się dzieje, a do tej pory nie wiem dlaczego.
(Powyższy screenshoot pokazuję tą sytuację)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wyniki działania skryptu:

http://scr.hu/2j35/tzadx

UWAGA:

Po podaniu liczby sekund większej od 1mld, skrypt nie działa - głowiłem się dlaczego tak się dzieje, a do tej pory nie wiem dlaczego.

(Powyższy screenshoot pokazuję tą sytuację)

Dzieje się tak, ponieważ przekraczasz zakres wartości maksymalnej liczb, gdzie ta określa się cellmax'em tj. 2147483647

Przedstawię nieco luźniejsze działanie owych funkcji:

static stock convertFromMilisekunds(time, &hour, &minute, &second)
{
	time=checkOverflow(time);
	hour=(time/1000/60/60);
	minute=(time/1000/60)%60;
	second=(time/1000)%60;
}

static stock convertFromSeconds(time, &hour, &minute)
{
	time=checkOverflow(time);
	hour=time/3600;
	minute=time/60%60;
}

static stock intToAbs(v)
{
	return (v<0)? -v: v;
}

static stock checkOverflow(t)
{
	new dist=intToAbs(t);
	if(dist>cellmax) {
		return intToAbs(t-cellmax);
	} else return dist;
}
Działa tak samo jak Drakona (no, trochę nieco wydajniej), z tym wyjątkiem, że sprawdza czy zakres wartości został przekroczony.

No i oczywiście przykład:

public OnFilterScriptInit()
{
	new h, m, s;
	convertFromMilisekunds(cellmax*4000, h, m, s);
	printf("godzin: %d, minut: %d, sekund: %d", h, m, s);
	
	convertFromSeconds(180, h, m);
	printf("godzin: %d, minut: %d", h, m);
	return 1;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcja zwraca dzisiejszą datę lub datę za podaną ilość sekund.

Algorytm na sprawdzanie dnia tygodnia nie został napisany przeze mnie.

  • Time - Ilość sekund, nie używać lub wpisać 0 aby podać dzisiejszą datę.
  • IsUnixTime - Jeśli mamy na przykład system tymczasowego vipa to aby sprawdzić datę wygaśnięcia robimy coś w tym stylu:

GetDate(PlayerVipTime[playerid],true);

Funkcja zwraca datę w podanym formacie:

DZIEŃ NAZWA MIESIĄCA ROK GODZINA:MINUTA:SEKUNDA, DZIEŃ TYGODNIA

Kod był ułożony, no ale tutaj to nie działa.

stock GetDate(Time = 0,bool:IsUnixTime = false)
{
new Hour;
new Minute;
new Second;
gettime(Hour,Minute,Second);
new Seconds;
Seconds = Time + Second;
if(IsUnixTime) Seconds -= gettime();
new Minutes;
if(Seconds >= 60)
{
Minutes = Seconds / 60;
Seconds -= Minutes * 60;
}
Minutes += Minute;
new Hours;
if(Minutes >= 60)
{
Hours = Minutes / 60;
Minutes -= Hours * 60;
}
Hours += Hour;
new Days;
if(Hours >= 24)
{
Days = Hours / 24;
Hours -= Days * 24;
}
new Year;
new Month;
new Day;
getdate(Year,Month,Day);
Days += Day;
new MonthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
if((Year % 4 == 0) && (Year % 100 != 0) || (Year % 400 == 0)) MonthDays[1] = 29;
new Months;
Months += Month;
while(Days > MonthDays[Month - 1])
{
Days -= MonthDays[Month - 1];
Months++;
}
new Years;
Years += Year;
if(Month > 12)
{
Years = Month / 12;
Months -= Years * 12;
}
new YearDay;
new YearDays[] = {0,31,59,90,120,151,181,212,243,23,304,334};
YearDay = Days + YearDays[Months - 1];
if(Months > 2 && (Year % 4 == 0) && (Year % 100 != 0) || (Year % 400 == 0)) YearDay++;
new X;
X = (Years - 1) % 100;
new Y;
Y = Years - 1 - X;
new Z;
Z = X + X / 4;
new Result;
Result = (((((Y / 100) % 4) * 5) + Z) % 7);
Result += YearDay - 1;
Result %= 7;
new String[64];
new MonthNames[][] = {"Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"};
new DayNames[][] = {"Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota","Niedziela"};
format(String,sizeof(String),"%02i %s %i %02i:%02i:%02i, %s",Days,MonthNames[Months - 1],Years,Hours,Minutes,Seconds,DayNames[Result]);
return String;
}
Edytowane przez Raweresh

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ConvertIntToString

Funkcja ta zamienia liczbę typu int na string i wstawia kropki oddzielając od siebie kolejne setne części liczby(?)
Na przykładowym kodzie będzie to lepiej widać.


Kod funkcji:
stock ConvertIntToString(int, s[]){
	#define		DECIMAL_SYMBOL		"."
	valstr(s, int);
	if(strlen(s) <= 3) return 1;
	for(new a = strlen(s); a >= 0; a -= 3){
		if(a == 0) break;
		strins(s, DECIMAL_SYMBOL, a, 24);
	}
	strdel(s, strlen(s) -1, strlen(s));
	return 1;
	#undef	DECIMAL_SYMBOL
}
Przykładowy skrypt:
public OnGameModeInit(){
	new string[32];
	ConvertToString(1111111111, string);
	printf("%s", string); //string -> 1.111.111.111
	return 1;
}
Edytowane przez Drakon

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mógłbym prosić o funkcję, dzięki której po wpisaniu komend z parametrami ID broni/samochodu wyświetli mi jej nazwę?

String'i z nazwami
 

new Vehicles[?][?] = 
{
   "Landstalker",
   "Bravura",
   "Buffalo",
   "Linerunner",
   "Pereniel",
   "Sentinel",
   "Dumper",
   "Firetruck",
   "Trashmaster",
   "Stretch",
   "Manana",
   "Infernus",
   "Voodoo",
   "Pony",
   "Mule",
   "Cheetah",
   "Ambulance",
   "Leviathan",
   "Moonbeam",
   "Esperanto",
   "Taxi",
   "Washington",
   "Bobcat",
   "Mr Whoopee",
   "BF Injection",
   "Hunter",
   "Premier",
   "Enforcer",
   "Securicar",
   "Banshee",
   "Predator",
   "Bus",
   "Rhino",
   "Barracks",
   "Hotknife",
   "Trailer",
   "Previon",
   "Coach",
   "Cabbie",
   "Stallion",
   "Rumpo",
   "RC Bandit",
   "Romero",
   "Packer",
   "Monster Truck",
   "Admiral",
   "Squalo",
   "Seasparrow",
   "Pizzaboy",
   "Tram",
   "Trailer",
   "Turismo",
   "Speeder",
   "Reefer",
   "Tropic",
   "Flatbed",
   "Yankee",
   "Caddy",
   "Solair",
   "RLS Van",
   "Skimmer",
   "PCJ-600",
   "Faggio",
   "Freeway",
   "RC Baron",
   "RC Raider",
   "Glendale",
   "Oceanic",
   "Sanchez",
   "Sparrow",
   "Patriot",
   "Quad",
   "Coastguard",
   "Dinghy",
   "Hermes",
   "Sabre",
   "Rustler",
   "ZR-350",
   "Walton",
   "Regina",
   "Comet",
   "BMX",
   "Burrito",
   "Camper",
   "Marquis",
   "Baggage",
   "Dozer",
   "Maverick",
   "News Chopper",
   "Rancher",
   "FBI Rancher",
   "Virgo",
   "Greenwood",
   "Jetmax",
   "Hotring",
   "Sandking",
   "Blista",
   "Maverick",
   "Boxville",
   "Benson",
   "Mesa",
   "RC Goblin",
   "Hotring",
   "Hotring",
   "Bloodring",
   "Rancher",
   "Super GT",
   "Elegant",
   "Journey",
   "Bike",
   "Mountain Bike",
   "Beagle",
   "Cropdust",
   "Stunt",
   "Tanker",
   "RoadTrain",
   "Nebula",
   "Majestic",
   "Buccaneer",
   "Shamal",
   "Hydra",
   "FCR-900",
   "NRG-500",
   "HPV1000",
   "Cement Truck",
   "Tow Truck",
   "Fortune",
   "Cadrona",
   "FBI Truck",
   "Willard",
   "Forklift",
   "Tractor",
   "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 Truck",
   "Monster Truck",
   "Uranus",
   "Jester",
   "Sultan",
   "Stratum",
   "Elegy",
   "Raindance",
   "RC Tiger",
   "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",
   "RC Cam",
   "Launch",
   "LSPD Car",
   "SFPD Car",
   "LVPD Car",
   "PD Ranger",
   "Picador",
   "S.W.A.T. Van",
   "Alpha",
   "Phoenix",
   "Glendale",
   "Sadler",
   "Luggage Trailer",
   "Luggage Trailer",
   "Stair Trailer",
   "Boxville",
   "Farm Plow",
   "Utility Trailer"
};



new Weapons[?][?] = 
{
   {"Pięści"}, // 0
   {"Kastet"}, // 1
   {"Kij do golfa"}, // 2
   {"Policyjna pałka"}, // 3
   {"Nóż"}, // 4
   {"Baseball"}, // 5
   {"Łopata"}, // 6
   {"Kij do bilarda"}, // 7
   {"Katana"}, // 8
   {"Piła mechaniczna"}, // 9
   {"Fioletowe Dildo"}, // 10
   {"Duży biały wibrator"}, // 11
   {"Średni biały wibrator"}, // 12
   {"Mały biały wibrator"}, // 13
   {"Kwiaty"}, // 14
   {"Laska"}, // 15
   {"Granat"}, // 16
   {"Gaz łzawiący"}, // 17
   {"Molotov"}, // 18
   {" "}, // 19
   {" "}, // 20
   {" "}, // 21
   {"Colt 45"}, // 22
   {"Colt 45 (Silenced)"}, // 23
   {"Desert Eagle"}, // 24
   {"Normal Shotgun"}, // 25
   {"Sawnoff Shotgun"}, // 26
   {"Combat Shotgun"}, // 27
   {"Micro Uzi (Mac 10)"}, // 28
   {"MP5"}, // 29
   {"AK47"}, // 30
   {"M4"}, // 31
   {"Tec9"}, // 32
   {"Country Rifle"}, // 33
   {"Sniper Rifle"}, // 34
   {"Rocket Launcher"}, // 35
   {"Heat-Seeking Rocket Launcher"}, // 36
   {"Flamethrower"}, // 37
   {"Minigun"}, // 38
   {"Satchel Charge"}, // 39
   {"Detonator"}, // 40
   {"Spray"}, // 41
   {"Gaśnica"}, // 42
   {"Aparat"}, // 43
   {"Noktowizor"}, // 44
   {"Gogle termowizyjne"}, // 45
   {"Spadochron"}, // 46
   {"Fake Pistol"} // 47
};

Edytowane przez PanStefan

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mógłbym prosić o funkcję, dzięki której po wpisaniu komend z parametrami ID broni/samochodu wyświetli mi jej nazwę?

String'i z nazwami

 

new Vehicles[?][?] = 
{
   "Landstalker",
   "Bravura",
   "Buffalo",
   "Linerunner",
   "Pereniel",
   "Sentinel",
   "Dumper",
   "Firetruck",
   "Trashmaster",
   "Stretch",
   "Manana",
   "Infernus",
   "Voodoo",
   "Pony",
   "Mule",
   "Cheetah",
   "Ambulance",
   "Leviathan",
   "Moonbeam",
   "Esperanto",
   "Taxi",
   "Washington",
   "Bobcat",
   "Mr Whoopee",
   "BF Injection",
   "Hunter",
   "Premier",
   "Enforcer",
   "Securicar",
   "Banshee",
   "Predator",
   "Bus",
   "Rhino",
   "Barracks",
   "Hotknife",
   "Trailer",
   "Previon",
   "Coach",
   "Cabbie",
   "Stallion",
   "Rumpo",
   "RC Bandit",
   "Romero",
   "Packer",
   "Monster Truck",
   "Admiral",
   "Squalo",
   "Seasparrow",
   "Pizzaboy",
   "Tram",
   "Trailer",
   "Turismo",
   "Speeder",
   "Reefer",
   "Tropic",
   "Flatbed",
   "Yankee",
   "Caddy",
   "Solair",
   "RLS Van",
   "Skimmer",
   "PCJ-600",
   "Faggio",
   "Freeway",
   "RC Baron",
   "RC Raider",
   "Glendale",
   "Oceanic",
   "Sanchez",
   "Sparrow",
   "Patriot",
   "Quad",
   "Coastguard",
   "Dinghy",
   "Hermes",
   "Sabre",
   "Rustler",
   "ZR-350",
   "Walton",
   "Regina",
   "Comet",
   "BMX",
   "Burrito",
   "Camper",
   "Marquis",
   "Baggage",
   "Dozer",
   "Maverick",
   "News Chopper",
   "Rancher",
   "FBI Rancher",
   "Virgo",
   "Greenwood",
   "Jetmax",
   "Hotring",
   "Sandking",
   "Blista",
   "Maverick",
   "Boxville",
   "Benson",
   "Mesa",
   "RC Goblin",
   "Hotring",
   "Hotring",
   "Bloodring",
   "Rancher",
   "Super GT",
   "Elegant",
   "Journey",
   "Bike",
   "Mountain Bike",
   "Beagle",
   "Cropdust",
   "Stunt",
   "Tanker",
   "RoadTrain",
   "Nebula",
   "Majestic",
   "Buccaneer",
   "Shamal",
   "Hydra",
   "FCR-900",
   "NRG-500",
   "HPV1000",
   "Cement Truck",
   "Tow Truck",
   "Fortune",
   "Cadrona",
   "FBI Truck",
   "Willard",
   "Forklift",
   "Tractor",
   "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 Truck",
   "Monster Truck",
   "Uranus",
   "Jester",
   "Sultan",
   "Stratum",
   "Elegy",
   "Raindance",
   "RC Tiger",
   "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",
   "RC Cam",
   "Launch",
   "LSPD Car",
   "SFPD Car",
   "LVPD Car",
   "PD Ranger",
   "Picador",
   "S.W.A.T. Van",
   "Alpha",
   "Phoenix",
   "Glendale",
   "Sadler",
   "Luggage Trailer",
   "Luggage Trailer",
   "Stair Trailer",
   "Boxville",
   "Farm Plow",
   "Utility Trailer"
};



new Weapons[?][?] = 
{
   {"Pięści"}, // 0
   {"Kastet"}, // 1
   {"Kij do golfa"}, // 2
   {"Policyjna pałka"}, // 3
   {"Nóż"}, // 4
   {"Baseball"}, // 5
   {"Łopata"}, // 6
   {"Kij do bilarda"}, // 7
   {"Katana"}, // 8
   {"Piła mechaniczna"}, // 9
   {"Fioletowe Dildo"}, // 10
   {"Duży biały wibrator"}, // 11
   {"Średni biały wibrator"}, // 12
   {"Mały biały wibrator"}, // 13
   {"Kwiaty"}, // 14
   {"Laska"}, // 15
   {"Granat"}, // 16
   {"Gaz łzawiący"}, // 17
   {"Molotov"}, // 18
   {" "}, // 19
   {" "}, // 20
   {" "}, // 21
   {"Colt 45"}, // 22
   {"Colt 45 (Silenced)"}, // 23
   {"Desert Eagle"}, // 24
   {"Normal Shotgun"}, // 25
   {"Sawnoff Shotgun"}, // 26
   {"Combat Shotgun"}, // 27
   {"Micro Uzi (Mac 10)"}, // 28
   {"MP5"}, // 29
   {"AK47"}, // 30
   {"M4"}, // 31
   {"Tec9"}, // 32
   {"Country Rifle"}, // 33
   {"Sniper Rifle"}, // 34
   {"Rocket Launcher"}, // 35
   {"Heat-Seeking Rocket Launcher"}, // 36
   {"Flamethrower"}, // 37
   {"Minigun"}, // 38
   {"Satchel Charge"}, // 39
   {"Detonator"}, // 40
   {"Spray"}, // 41
   {"Gaśnica"}, // 42
   {"Aparat"}, // 43
   {"Noktowizor"}, // 44
   {"Gogle termowizyjne"}, // 45
   {"Spadochron"}, // 46
   {"Fake Pistol"} // 47
};

#define GetVehicleName(%0) Vehicles[%0-400]
#define WeaponName(%0) Weapons[%0]
Tak BTW, to usuń te "?" w tablicach, po co to?

Wystarczy [][]

Edytowane przez Drakon

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

LosujFloat

Funkcja losuje liczbę typu Float z podanego zakresu.

Kod funkcji:

forward Float:LosujFloat(Float:MIN,Float:MAX); //Gdzieś przed funkcją.

stock Float:LosujFloat(Float:MIN,Float:MAX) //Sama funckja.
{
    new losowanie[2];
    new Float:losowana;
    new liczba[15];
    format(liczba,sizeof(liczba),"%.0f",MIN);
    new Min = strval(liczba);
    format(liczba,sizeof(liczba),"%.0f",MAX);
    new Max = (strval(liczba) + 1);
    do
    {
        losowanie[0] = (rand(Min,Max));
        losowanie[1] = (rand(0,99999));
        format(liczba,sizeof(liczba),"%i.%i",losowanie[0],losowanie[1]);
        losowana = (floatstr(liczba));     
    }while(!(losowana >= MIN && losowana <= MAX));
    return losowana;
}

Sposób użycia:

LosujFloat(Min,Max)
//Podajemy najmniejszą wartość do wylosowania (Min) i największą (Max).

Co zwraca:

Zwraca wylosowaną liczbę Float.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Prosty system AFK.

#define IsPlayerAFK(%0) ((GetPVarInt(%0, "AFK") + (3*1000)) < GetTickCount())

OnPlayerUpdate

SetPVarInt(playerid, "AFK", GetTickCount());

3 to sekundy po których uznaje gracza za afk ;]

Edytowane przez Lagowy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Prosta funkcja losująca jeden z podanych argumentów liczbowych.

random_arg(...) return getarg(random(numargs()));


 

Przykład użycia:

printf("Wylosowany argument ma wartość: %i", random_arg(1, 5, -666, 999, 143, 89));



			
		

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ę.

×