Jump to content

návod Užitečné funkce


Recommended Posts

Tady vám dávám funkci na posílání zbraně

funkci sem si udělal pro Life That

 

stock RemovePlayerWeapon(playerid)
{
new ZbranvRuce = GetPlayerWeapon(playerid);
new Naboje = GetPlayerAmmo(playerid);

return GivePlayerWeapon(playerid,ZbranvRuce,-Naboje);
}

Použití

např:

dcmd_sendweapon(playerid, params[])
{

       if(IsPlayerConnected(playerid))
{
         if(!strlen(params)) return 0;
  if(!IsPlayerConnected(strval(params))) return 0;
  new ZbranvRuce = GetPlayerWeapon(playerid);
  new Naboje = GetPlayerAmmo(playerid);
  GivePlayerWeapon(strval(params),ZbranvRuce,Naboje);
  RemovePlayerWeapon(playerid);
}
return 1;
}

Link to comment
Share on other sites

  • Replies 61
  • Created
  • Last Reply

Top Posters In This Topic

Spravil som funkciu ktorá spolu s auto pridá aj tuning... a aj ŠPZ-tku...

 

stock CreateVehicleWithTuning(plate[],model,Float:x,Float:y,Float:z,Float:a,c1,c2,time,...){
new vehicle = CreateVehicle(model,x,y,z,a,c1,c2,time);
SetVehicleNumberPlate(vehicle,plate);

for(new i=9; i<(numargs()); i++){
AddVehicleComponent(vehicle, getarg(i));
}
return vehicle;
}

neobmedzený počet argumentov... (componentov)

Link to comment
Share on other sites

Pekné! :d

 

-- stř 17. srp 2011 21:22:28 --

 

Neviem či funguje ale

 

randomex

 

stock randomex(od,do)
{
       #if od > do
       #error Chyba
       #endif
       new cislo;
       cislo = random(do-do) + do;
       return cislo;
}

 

Neviem či to funguje len ma to napadlo ;)

Link to comment
Share on other sites

randomex(5,10)

 

ak je náhodné číslo 5+10 (10 = náhodné číslo) == 15...

niak ti to nevychádza :d

 

ale pekne to s errorom, len si mohol napísať dôvod :d

 

stock GetID(part[]){
new Name[MAX_PLAYER_NAME];
ForPlayers(i){
GetPlayerName(i,Name,24);
if(strfind(Name,part,true) != -1) return id;
}
   return -1;
}

zistí id podľa nicku...

 

stock GetPlayerFPS(playerid){ // By DraKiNs | Thankz Mr Turtle
SetPVarInt(playerid, "DrunkL", GetPlayerDrunkLevel(playerid));
if(GetPVarInt(playerid, "DrunkL") < 100) SetPlayerDrunkLevel(playerid, 2000);

if(GetPVarInt(playerid, "LDrunkL") != GetPVarInt(playerid, "DrunkL"))
{
SetPVarInt(playerid, "FPS", (GetPVarInt(playerid, "LDrunkL") - GetPVarInt(playerid, "DrunkL")));
SetPVarInt(playerid, "LDrunkL", GetPVarInt(playerid, "DrunkL"));
if((GetPVarInt(playerid, "FPS") > 0) && (GetPVarInt(playerid, "FPS") < 256))
{
return GetPVarInt(playerid, "FPS") - 1;
}
}
   return 0;
}

zistí hráčovo FPS

stock FindChar(str[],chars) 
{
for(new i;str[i];i++) if(str[i] == chars) return true;
return false;
}

zistí či je niaky znak v stringu...

npr.

public OnPlayerText(...)

if(FindChar(cmd,'$')) return kick(playerid),SCMTAF("Hráč %s je žebrák a žebre $",Jmeno(playerid));

 

stock DeleteChar(string[],chars)
{
for(new i = 0; string[i]; ++i) if(string[i] == chars) string[i] = string[i+1];
return true;
}

zmaže znak npr.

 

public OnDialogResponse(....)

DeleteChar(inputtext,"%");

if(dialogid ==....

 

-- stř 17. srp 2011 20:35:29 --

 

stock randomex(min,max)
{
       #if min > max
       #error Min je vacsie ako Max !
       #endif
       new cislo;
       cislo = random(max-min)+min;
       return cislo;
}

 

randomex(5,10);

random == 5

+ 5

== 10

Link to comment
Share on other sites

Ešte ma napadlo

 

randomnegative

 

Píšem len z mobilu... :)

 

stock randomnegative(cislo)
{
       #if cislo < 0
       #error Zlý formát
       #endif
       new cislo2;
       cislo2 = random(cislo) - 2 * cislo;
       return cislo2;
}

Link to comment
Share on other sites

  • 5 weeks later...

Čaute spravil som dve užitočné funkcie... S jednou mi pomáhal užívateľ "DragoN_Cz" začo mu ďakujem.

 

stock DeleteLineFromText(file[],text[],bool:caps = true)// by QWER & DragoN_Cz

{

new File:a = fopen(file,io_read);

new str[128],str2[128];

format(str2,128,"%s.part",file);

new File:b = fopen(str2,io_write);

while(fread(a,str)){

if(!strfind(str,text,caps)) continue;

fwrite(b,str);

}

fclose(a);

fremove(file);

fclose(B);

b = fopen(str2,io_read);

fcreate(file);

a = fopen(file,io_write);

while(fread(b,str)){

fwrite(a,str);

}

fclose(a);

fclose(B);

fremove(str2);

}

Táto funkcia zmaže riadok zo súboru podľa názvu ja neviem máte v súbore riadky

A
B
C
D
E
F
G
H

a chcete zmazať "F" tak spravíte

DeleteLineFromText("priecinok/mojsubor.txt","F");

posledný parameter je či má robiť rozdiely medzi AdSdD a ADSDD (true = je to to isté)

 

stock DeleteLineFromLine(file[],linea)// by QWER
{
new File:a = fopen(file,io_read);
new str[128],str2[128];
format(str2,128,"%s.part",file);
new File:b = fopen(str2,io_write);
new lineb = 1;
while(fread(a,str)){
if(lineb == linea){
lineb++;
continue;
}else{
fwrite(b,str);
}
lineb++;
}
fclose(a);
fremove(file);
fclose(;
b = fopen(str2,io_read);
fcreate(file);
a = fopen(file,io_write);
while(fread(b,str)){
fwrite(a,str);
}
fclose(a);
fclose(;
fremove(str2);
}

 

Tu je to zas nie podľa obsahu riadku ale poradia... začína od 1 (nie od 0...)

máte napríklad

A
B
C
D
E
F

a chcete zmazať "B"

tak dáte

DeleteLineFromLine("subor.txt",2);

 

Good Luck :wave:

Link to comment
Share on other sites

stock TDString(string[])
{
    new
        len = strlen(string);
    for(new i;i<len;i++)
    {
        switch(string[ i ])
        {
            case 'ě':
            {
                string[ i ] = 'e';
            }
            case 'š':
            {
                string[ i ] = 's';
            }
            case 'č':
            {
                string[ i ] = 'c';
            }
            case 'ř':
            {
                string[ i ] = 'r';
            }
            case 'ž':
            {
                string[ i ] = 'z';
            }
            case 'ý':
            {
                string[ i ] = 'y';
            }
            case 'á':
            {
                string[ i ] = 'a';
            }
            case 'í':
            {
                string[ i ] = 'i';
            }
            case 'é':
            {
                string[ i ] = 'e';
            }
            default:
                continue;
        }
    }
    return true;
}

 

Co to dělá:

Převede diaktriku na normální písmena (dá se dobře využít při textdrawech)

Jak to použít:

new string1[128];
format(string1,sizeof(string1),"bláblábléblí");
TDString(string1);
print(string1);

A v konzoli se vám ukáže:

blablablebli

 

Kdyby jste si chtěli zajistit další písmena tak to snad zjistíte, a kdyby ne tak mi napiště do soukromé zprávy nebo sem

 

Mort

 

 

-------------------------------

 

To QWER: použil bych k tomu pojistku - fexist

Link to comment
Share on other sites

Čaute, spravil som funkciu "StrChange" ktorá nahradí slovo slovom... napríklad máte text

"ahojte vy moji pupuskovia"

a slovo "pupuskovia" nahradíte slovom "chlapi"

 

stock StrChange(str[], find[], change[],bool:caps = true,maxlenght=sizeof(change))
{
   new i,b = strlen(find);
   warp:
   i = strfind(str, find, caps);
   if(i != -1)
   {
       strdel(str, i, i + ;
       strins(str, change, i,maxlenght);
       goto warp;
   }
   return str;
}

str = text v ktorom budeme hladať výraz(y) ktoré zmeníme

find = text ktorý budeme nahrádzať

change = text ktorým budeme nahrádzať

caps = je rozdiel medzi "Ahojte" a "AHOJTE" (ak je false, ak je true, je to rovnaké)

maxlenght = dĺžka textu ktorým budeme nahrádzať...

 

Example Usage

new f[128] = "QWER je king! QWER je king! QWER je king! QWER je king! ";
StrChange(f,"king","lama");
printf("%s",f);

a v serverlogu nájdete "QWER je lama! QWER je lama! QWER je lama! QWER je lama!"

a ak dáte parameter "caps" na hodnotu false

 

new f[128] = "QWER je KING! QWER je KING! QWER je KING! QWER je KING! ");
StrChange(f,"king","lama",false);
printf("%s",f);

tak v serverlogu najdete "QWER je KING! QWERT je KING! QWERT je KING! QWERT je KING! "

 

For Mort

#define Cenzura(%0,%1,%2) StrChange(%0,%1,%2)

Je to užitočné môžete urobiť anti nadavky... no možností je nekonečno

 

QWER

Link to comment
Share on other sites

  • 3 weeks later...

Čaute, spravil som ďalšie funkcie

 

/*

Function name

FindChar

Params

str[],chars

str = string

chars = znak

Return

true = našiel sa

false = nenašiel sa (string neobsahuje znak)

Example Usage

if(FindChar("Ahojte ja som QWER :P",'P')) SCM(playerid,-1,"String obsahuje 'P'");

 

*/

stock FindChar(str[],chars)
{
new len = strlen(str);
for(new i;i < len+1;i++) if(str[i] == chars) return true;
return false;
}

 

/*

Function name

DeleteChar

Params

string[],chars

string = string

chars = znak

Return

-

Example Usage

DeleteChar(":D :d :D :d ",':');

 

*/

stock DeleteChar(string[],chars)
{
new len = strlen(string);
for(new i; i}

Link to comment
Share on other sites

  • 5 months later...
  • 4 weeks later...

CreateRandomizePassword

 

Vytvoří náhodné heslo

 

Parametry:

 

max_chars=6 - maximum písmen/čísel

 

Použití:

 

printf("%s",CreateRandomizePassword(128));
Link to comment
Share on other sites

Tady je zmražení hráče na čas:

stock Timedfreeze(playerid, time)
{
   TogglePlayerControllable(playerid, 0);
   SetTimerEx("odmrazeni", time*1000, false, "i", playerid);
}
forward odmrazeni(playerid);
public odmrazeni(playerid)
{
   TogglePlayerControllable(playerid, 1);
   SendClientMessage(playerid,B_MODR,"Byl jsi odmražen!");
}

 

Čas zmražení zadávejte ve vteřinách ;)

Link to comment
Share on other sites

Tady je zmražení hráče na čas:

stock Timedfreeze(playerid, time)
{
   TogglePlayerControllable(playerid, 0);
   SetTimerEx("odmrazeni", time*1000, false, "i", playerid);
}
forward odmrazeni(playerid);
public odmrazeni(playerid)
{
   TogglePlayerControllable(playerid, 1);
   SendClientMessage(playerid,B_MODR,"Byl jsi odmražen!");
}

 

Čas zmražení zadávejte ve vteřinách ;)

mal by si tam dat ale premennu na timer a KillTimer potom, lebo mozu nastat problemy ;)

Link to comment
Share on other sites

Tady je zmražení hráče na čas:

stock Timedfreeze(playerid, time)
{
   TogglePlayerControllable(playerid, 0);
   SetTimerEx("odmrazeni", time*1000, false, "i", playerid);
}
forward odmrazeni(playerid);
public odmrazeni(playerid)
{
   TogglePlayerControllable(playerid, 1);
   SendClientMessage(playerid,B_MODR,"Byl jsi odmražen!");
}

 

Čas zmražení zadávejte ve vteřinách ;)

mal by si tam dat ale premennu na timer a KillTimer potom, lebo mozu nastat problemy ;)

 

Já to mám v módu a žádný problémy jsem s tím neměl

Link to comment
Share on other sites

Tady je zmražení hráče na čas:

stock Timedfreeze(playerid, time)
{
   TogglePlayerControllable(playerid, 0);
   SetTimerEx("odmrazeni", time*1000, false, "i", playerid);
}
forward odmrazeni(playerid);
public odmrazeni(playerid)
{
   TogglePlayerControllable(playerid, 1);
   SendClientMessage(playerid,B_MODR,"Byl jsi odmražen!");
}

 

Čas zmražení zadávejte ve vteřinách ;)

 

Každý callback musí mít return.




 

Pro snadné tvoření callbacků:

 

#define PUBLIC:%0(%1)\
                        forward %0(%1); \
                        public %0(%1)

 

Použití:

 

PUBLIC:ZabijuTe(playerid,kohoZabije,Float:minusHp)

{

new

Link to comment
Share on other sites

  • 1 month later...

Funkce: IsPlayerInVehicleWithTuneWheels(playerid)

Autor: nVidiaX

 

- Zjistí, jestli hráč sedí ve vozidle, na které se dají přidělat tuning kola. Pokud ano, vráti hodnotu 1, pokud ne, vrátí hodnotu 0, pokud auto neexistuje, nebo v něm nesedí, vrátí hodnotu -1.

 

 

stock IsPlayerInVehicleWithTuneWheels(playerid)

{

new modelid = GetVehicleModel(GetPlayerVehicleID(playerid));

switch(modelid)

{

case 433,431,524,437,455,403,443,515,514,408,486,573,444,556,557,406,417,425,432,446,447,448,449,450,452,453,454,460,461,462,463,464,465,468,469,472,473,476,481,484,487,488,493,497,501,509,510,511,512,513,519,520,521,522,523,539,548,563,564,577,581,584,586,592,593,594,595,606,607,608,610,611: return 0;

default: return 1;

}

return -1;

}

 


 

Funkce: IsPlayerInVehicleWithPaintjob(playerid)

Autor: nVidiaX

 

Zjistí, zda hráč sedí ve vozidle, na které může být přidán paintjob. Pokud jde přidat 1 paintjob na vozidlo (Camper), vrátí hodnotu 1, Pokud jdou přidat 3 paintjoby na vozidlo, vrátí hodnotu 2, pokud nejde na vozidlo paintjob, vrátí hodnotu 0 a pokud hráč nesedí ve vozidle, vrátí hodnotu -1.

 

 

stock IsPlayerInVehicleWithPaintjob(playerid)

{

new modelid = GetVehicleModel(GetPlayerVehicleID(playerid));

switch(modelid)

{

case 483: return 1;

case 534,535,536,558,559,560,561,562,565,567,575,576: return 2;

default: return 0;

}

return -1;

}

 


 

Funkce: AddVehicleComponentForPlayer(playerid, componentid)

Autor: nVidiaX

 

Zjednodušení funkce AddVehicleComponent, akorát pro hráče, nemusíte zjištovat ID vozidla, vše je ve stocku.

 

Např.:

if (strcmp("/nitro", cmdtext, true, 6) == 0)
{
	AddVehicleComponenForPlayer(playerid, 1010); //Dá nitro.
	return 1;
}

 

 

stock AddVehicleComponentForPlayer(playerid, componentid)

{

if(IsPlayerConnected(playerid))

{

if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)

{

new vehicleid = GetPlayerVehicleID(playerid);

AddVehicleComponent(vehicleid, componentid);

}

}

return 1;

}

 

Link to comment
Share on other sites

Prevede vteriny na minuty a vteriny

stock SecondToMinute(second,&minut,&vterin)
{
minut = floatround(second/60,floatround_floor);
vterin = second-(minut*60);
}
//a zde i pro desetine vteriny (napr kdyz potrebujete i milisekundy)
stock SecondToMinuteFloat(Float:second,&minut,&Float:vterin)
{
minut = floatround(second/60,floatround_floor);
vterin = second-(minut*60);
}

Dava mezery do cisla - navraci string

stock Number(cislo)
{
new string[16];
format(string,sizeof(string),"%d",cislo);
if(cislo >= 1000) strins(string," ",strlen(string)-3,sizeof(string));
if(cislo >= 1000000) strins(string," ",strlen(string)-7,sizeof(string));
if(cislo >= 1000000000) strins(string," ",strlen(string)-11,sizeof(string));
return string;
}

Seradi hodnoty promenych od nejmensiho po nejvetsi

#define MAX_SERAZENYCH_CISEL 5
stock SeraditCisla(...)
{
new arg = numargs();
new vec[MAX_SERAZENYCH_CISEL];
for(new s;s	new bool:id[MAX_SERAZENYCH_CISEL],count;
for(new p;p	{
    new maxim = 2147000000,idx;
	for(new i;i		{
		if(vec[i] < maxim && id[i] == false)
		{
		    idx = i;
			maxim = vec[i];
		}
	}
	id[idx] = true;
	setarg(count,0,maxim);
	count++;
}
return 1;
}

Vsechny scripty jsem vytvoril ja, pokud je kladeno toto pravidlo :)

Link to comment
Share on other sites

stock IsPlayerInWater(playerid)
{
new animindex = GetPlayerAnimationIndex(playerid);
if(((animindex >= 1538) && (animindex <= 1542)) || (animindex == 1544) || (animindex == 1250)) return true;
return false;
}

 

Zisťuje či je hráč vo vode (podľa animácie).

 

------------------------------------------------------------------------------------------------------------------------------------------

 

stock ClearKillList()
{
for(new l=0; l<6; l++) SendDeathMessage(202, 202, 202);
}

 

Vyčistí kill list (všetkým hráčom).

 

------------------------------------------------------------------------------------------------------------------------------------------

 

stock fcopy(from[], to[])
{
if(fexist(from))
{
	new File:f_from = fopen(from, io_read), File:f_to = fopen(to, io_write), string[1024];
	while(fread(f_from, string)) fwrite(f_to, string);
	fclose(f_from);
	fclose(f_to);
}
}

 

Nakopíruje súbor.

Príklad: fcopy("Folder1/Items/Menu.txt", "subor2.cfg"); (Nakopíruje obsah súboru "Folder1/Items/Menu.txt" do súboru "subor2.cfg" (ak neexistuje, automaticky sa vytvorí))[/b]

 

------------------------------------------------------------------------------------------------------------------------------------------

 

stock StlipString(dstr[], count)
{
for(new pos = count; pos	{
	strins(dstr, "\n", chrfind(' ', dstr, pos)+1, 512);
}
}

 

Rozdelí daný string na riadky po danom počte písmen.

Príklad: StlipString("Caw bro, jak sa mas. Lebo ja sa mam muhahahaha dobre :D", 15); rozdeli string na riadky tak, aby v jednom riadku bolo minimálne 15 znakov (po nájdení prvého znaku "medzera" za daným znakom v poradí vloží nový riadok). Dobre využiteľné napr. pri SMS-kách...

Text bude následne vypadať takto:

Caw bro, jak sa

mas. Lebo ja sa

mam muhahahaha

dobre :d

Link to comment
Share on other sites

  • 2 weeks later...

formatEx

 

Vytvořil jsem jednoduchou funkci pro formátování zprávy na jeden řádek!

 

použití:

 

formatEx:názevProměnné(velikostProměnné,formátovanáZpráva,argumenty)

 

Ukázka použití:

 

formatEx:nejakyString(128,"Zdrávím
Link to comment
Share on other sites

PlayAudioStreamForAll(url[])
{
for(new i = 0;i < MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
PlayAudioStreamForPlayer(i,url);
}
}
}

je to bez souřadnic protože nwm jak udělat aby to fungoval bez souřadnic i se souřadnicema

přemýšlim jestly by to nešlo nacpat do definice

Link to comment
Share on other sites

PlayAudioStreamForAll(url[])
{
for(new i = 0;i < MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
PlayAudioStreamForPlayer(i,url);
}
}
}

je to bez souřadnic protože nwm jak udělat aby to fungoval bez souřadnic i se souřadnicema

přemýšlim jestly by to nešlo nacpat do definice

 

S i bez:

 

PlayAudioStreamForAll(url[],Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0, Float:distance = 50.0, usepos = 0))
{
for(new i = 0;i < MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
PlayAudioStreamForPlayer(i,url,posX,posY,posZ,distance,usepos);
}
}
}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...