Jump to content

Het Handige Functies Topic!


goudewup

Recommended Posts

Hey allemaal, het leek mij wel handig om een topic te maken waar iedereen zijn handige zelfgemaakte functies deelt.

Van daar dus dit topic.

Laat ik maar beginnen:

stock RespawnPlayer(playerid, modelid, Float:X, Float:Y, Float:Z, Float:A, wep1, amm1)
{
SetPlayerSkin(playerid, modelid);
SetPlayerPos(playerid, X, Y, Z);
SetPlayerFacingAngle(playerid, A);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, wep1, amm1);
}

Laat een speler respawnen zonder dat OnPlayerDeath() en OnPlayerSpawn() worden geactiveerd.

Link to comment
Delen op andere websites

Mijn RandomEx functie (je kan een minimum en een maximum getal invoeren):

stock RandomEx(min_getal, max_getal)
{
new choosed = 0;
new cgetal;
for(new getal = 0; getal <= max_getal; getal++)
{
if(getal >= min_getal){
if(random(max_getal) == 1){ return cgetal = getal;
 }
 }
 }
if(choosed == 0) return cgetal = max_getal;
choosed = 0;
return cgetal;
}

Mijn wait functie (laat je gamemode even wachten):

stock wait(time)
{
new currentcount = tickcount();
while(tickcount() - currentcount < time){}
return 1;
}

En mijn functie in ontwikkeling om de aantal coords vanaf de positie waar jij je bevind tot de grond te krijgen:

stock GetGroundZFromPlayer(playerid){
new Float: X, Float: Y, Float: Z, Float: GroundZ;
GetPlayerPos(playerid, X, Y, Z);
SetPlayerPosFindZ(playerid, X, Y, Z);
GetPlayerPos(playerid, X, Y, GroundZ);
SetPlayerPos(playerid, X, Y, Z);

if(IsPlayerInAnyVehicle(playerid)){
new myVeh = GetPlayerVehicleID(playerid);
new mySeat = GetPlayerVehicleSeat(playerid);
PutPlayerInVehicle(playerid, myVeh, mySeat);
}
return floatround(GroundZ);
}

Indentatie is wel weer een beetje weg door het forum.

Link to comment
Delen op andere websites

@Big Boss: Nee, die code werkt niet zoals het zou moeten.

Stel je wilt een random getal tussen 2000 en 4000: Dan voer je in RandomEx(2000, 4000).

Nu kan het zijn dat de funtie "random(max)" 3500 'returnt'.

Dan word de formule: 2000+3500 = 5500 en dat ligt niet tussen de 2000 en 4000 ;) Oftewel, die functie werkt niet.

Wat wel werkt is:

stock RandomEx(min, max)
{
   new result;
   if(min > max){result=min; min=max; max=result;}
   result = (min + random((max+1)-min));
   return result;
}

De regel die begint met "if(min > max)" kan je eventueel weg laten hoor. Deze zorgt er alleen voor, dat als 'min' hoger is dan 'max', de 2 getallen omgedraaid worden.

Link to comment
Delen op andere websites

Zo kort mogelijk:

stock RandomEx(min, max)
{
   if(min>max){new tmp;tmp=min;min=max;max=tmp} 
   return min + random(max-min);
}

Hier en hier vind je al heel wat functies. :puh:

Ik heb dit eens voor Wanted geschreven:

stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume 

stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume 
{
   new dagen;
   if(dag != dag2)
       {
           if(dag < dag2)dagen +=  dag2-dag;
           else {
                       dagen += dag2;
                   switch(maand)
                       {

                                       case 1,3,5,7,8,10,12:dagen += 31-dag;
                                       case 2:
                                       {
                                               if(deelbaar(jaar,4)) dagen += 29-dag;
                                               else dagen += 28-dag;
                                       }
                                       case 4,6,9,11:dagen += 30-dag;
                       }
               }
       }
       new jaartmp=jaar,maandtmp=maand;
   if(dag > dag2) maandtmp++;
       while(maandtmp < maand2 || jaartmp < jaar2)
       {
           switch(maandtmp)
               {
                               case 1,3,5,7,8,10,12:dagen += 31;
                               case 2:
                               {
                                       if(deelbaar(jaartmp,4)) dagen += 29;
                                       else dagen += 28;
                               }
                               case 4,6,9,11:dagen += 30;
                               default:
                               {
                               maandtmp=0;
                               jaartmp++;
                               }
               }
               maandtmp++;
       }
   return dagen;
}

Bewerkt: door GTAguillaume
Link to comment
Delen op andere websites

Ik zal dan zelf maar eens wat functies plaatsen. :)

stock ReturnOnlinePlayers()
{
new CurPl = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(IsPlayerConnected(i)) { CurPl++; }
}
return CurPl;
}

stock ReturnPlayerName(playerid)
{
new tmpname[24];
GetPlayerName(playerid, tmpname, sizeof(tmpname));
return tmpname;
}

stock SendClientMessageToAdmins(color, const message[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
    if(!IsPlayerConnected(i)) continue;
	if(PlayerInfo[i][Admin] >= 1) // << verander dit!
	{
		SendClientMessage(i, color, message);
	}
}
return 1;
}

Bewerkt: door Big Boss
Link to comment
Delen op andere websites

Ik heb dit eens voor Wanted geschreven:

stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume 

stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume 
{
   new dagen;
   if(dag != dag2)
       {
           if(dag < dag2)dagen +=  dag2-dag;
           else {
                       dagen += dag2;
                   switch(maand)
                       {

                                       case 1,3,5,7,8,10,12:dagen += 31-dag;
                                       case 2:
                                       {
                                               if(deelbaar(jaar,4)) dagen += 29-dag;
                                               else dagen += 28-dag;
                                       }
                                       case 4,6,9,11:dagen += 30-dag;
                       }
               }
       }
       new jaartmp=jaar,maandtmp=maand;
   if(dag > dag2) maandtmp++;
       while(maandtmp < maand2 || jaartmp < jaar2)
       {
           switch(maandtmp)
               {
                               case 1,3,5,7,8,10,12:dagen += 31;
                               case 2:
                               {
                                       if(deelbaar(jaartmp,4)) dagen += 29;
                                       else dagen += 28;
                               }
                               case 4,6,9,11:dagen += 30;
                               default:
                               {
                               maandtmp=0;
                               jaartmp++;
                               }
               }
               maandtmp++;
       }
   return dagen;
}

Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$

Deze werkt verrassend goed.

stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Made by Guillaume
{
   new dagen;
   if(dag != dag2)
   {
	if(dag < dag2)
	{
		dagen +=  dag2-dag;
	}
	else
	{
		dagen += dag2;
	}

	if(dagen > 28)
	{
		switch(maand)
		{
			case 1,3,5,7,8,10,12:
			{
			    if(dagen > 31)
			    {
					dagen -= 31;
				}
			}
			case 2:
			{
				if(IsDeelbaar(jaar, 4))
				{
					if(dagen > 29)
			    	{
						dagen -= 29;
					}
				}
				else
				{
					if(dagen > 28)
			    	{
						dagen -= 28;
					}
				}
			}
			case 4,6,9,11:
			{
				if(dagen > 30)
   				{
					dagen -= 30;
				}
			}
		}
	}
}

new jaartmp=jaar,maandtmp=maand;
if(dag > dag2)
{
	maandtmp++;
}

while(maandtmp < maand2 || jaartmp < jaar2)
{
	switch(maandtmp)
	{
		case 1,3,5,7,8,10,12:
		{
			dagen += 31;
		}
		case 2:
		{
			if(IsDeelbaar(jaartmp, 4))
			{
				dagen += 29;
			}
			else
			{
				dagen += 28;
			}
		}
		case 4,6,9,11:
		{
			dagen += 30;
		}
		default:
		{
			maandtmp=0;
			jaartmp++;
		}
	}

	maandtmp++;
}
return dagen;
}

EDIT:

En even omdat het NOG korter kan. :puh:

RandomEx(min,max)
{
       return (random(max - min) + min);
}

Bespaart weer een variable. ;)

Bewerkt: door Wanted
Link to comment
Delen op andere websites

Ik heb dit eens voor Wanted geschreven:

stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume 

stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume 
{
   new dagen;
   if(dag != dag2)
       {
           if(dag < dag2)dagen +=  dag2-dag;
           else {
                       dagen += dag2;
                   switch(maand)
                       {

                                       case 1,3,5,7,8,10,12:dagen += 31-dag;
                                       case 2:
                                       {
                                               if(deelbaar(jaar,4)) dagen += 29-dag;
                                               else dagen += 28-dag;
                                       }
                                       case 4,6,9,11:dagen += 30-dag;
                       }
               }
       }
       new jaartmp=jaar,maandtmp=maand;
   if(dag > dag2) maandtmp++;
       while(maandtmp < maand2 || jaartmp < jaar2)
       {
           switch(maandtmp)
               {
                               case 1,3,5,7,8,10,12:dagen += 31;
                               case 2:
                               {
                                       if(deelbaar(jaartmp,4)) dagen += 29;
                                       else dagen += 28;
                               }
                               case 4,6,9,11:dagen += 30;
                               default:
                               {
                               maandtmp=0;
                               jaartmp++;
                               }
               }
               maandtmp++;
       }
   return dagen;
}

Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. bloos.gif

Deze werkt verrassend goed.

stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Made by Guillaume
{
   new dagen;
   if(dag != dag2)
   {
	if(dag < dag2)
	{
		dagen +=  dag2-dag;
	}
	else
	{
		dagen += dag2;
	}

	if(dagen > 28)
	{
		switch(maand)
		{
			case 1,3,5,7,8,10,12:
			{
		    	if(dagen > 31)
		    	{
					dagen -= 31;
				}
			}
			case 2:
			{
				if(IsDeelbaar(jaar, 4))
				{
					if(dagen > 29)
		    		{
						dagen -= 29;
					}
				}
				else
				{
					if(dagen > 28)
		    		{
						dagen -= 28;
					}
				}
			}
			case 4,6,9,11:
			{
				if(dagen > 30)
   				{
					dagen -= 30;
				}
			}
		}
	}
}

new jaartmp=jaar,maandtmp=maand;
if(dag > dag2)
{
	maandtmp++;
}

while(maandtmp < maand2 || jaartmp < jaar2)
{
	switch(maandtmp)
	{
		case 1,3,5,7,8,10,12:
		{
			dagen += 31;
		}
		case 2:
		{
			if(IsDeelbaar(jaartmp, 4))
			{
				dagen += 29;
			}
			else
			{
				dagen += 28;
			}
		}
		case 4,6,9,11:
		{
			dagen += 30;
		}
		default:
		{
			maandtmp=0;
			jaartmp++;
		}
	}

	maandtmp++;
}
return dagen;
}

EDIT:

En even omdat het NOG korter kan. puh2.gif

RandomEx(min,max)
{
       return (random(max - min) + min);
}

Bespaart weer een variable. knipoog.gif

:7 mijn code was ietsje te groot volgens mij, maarja ik ging het zoeizo inkorten, eerst iets uitgebreider naar iets korter.

Link to comment
Delen op andere websites

Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$

Ohh, het zou kunnen dat er nog ergens een foutje in zat. :puh:

EDIT: Dat werkt ook niet 100%, als je printf("%i",GetDays(2,1,2010,1,2,1010)); doe dan returnt die 1, terwijl dat 30 moet zijn.

EDIT:

En even omdat het NOG korter kan. :puh:

RandomEx(min,max)
{
       return (random(max - min) + min);
}

Bespaart weer een variable. ;)

Maar dan heb je een probleem als je max en min omdraait,...

Bewerkt: door GTAguillaume
Link to comment
Delen op andere websites

Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$

Ohh, het zou kunnen dat er nog ergens een foutje in zat. :puh:

EDIT: Dat werkt ook niet 100%, als je printf("%i",GetDays(2,1,2010,1,2,1010)); doe dan returnt die 1, terwijl dat 30 moet zijn.

Ach ja, natuurlijk. Ik ben vergeten de rest ook hier te posten. :puh:

Aantal dagen tussen 2 datums uitrekenen:

Zet al deze functies in je gamemode, niet in een andere functie:

#define Swap(%1,%2) %1 ^= %2, %2 ^= %1, %1 ^= %2 // Deze functie draait 2 variablen om, ZONDER een 3e variable te gebruiken. | Made by Alex "Y_Less" Cole.

stock GetDaysBetweenDates(dag, maand, jaar, dag2, maand2, jaar2) // Gebruik deze functie om het aantal dagen tussen 2 datums te berekenen | Made by Wanted
{
if(VerkeerdeVolgorde(dag, maand, jaar, dag2, maand2, jaar2))
{
    Swap(dag, dag2);
    Swap(maand, maand2);
    Swap(jaar, jaar2);
    new Dagen = GetDays(dag, maand, jaar, dag2, maand2, jaar2);
    return Dagen - Dagen - Dagen;
}
else
{
    return GetDays(dag, maand, jaar, dag2, maand2, jaar2);
}
}

stock VerkeerdeVolgorde(dag, maand, jaar, dag2, maand2, jaar2) // Controleerd of de twee datums verkeerd om zijn ingevoerd | Made by Wanted
{
if(jaar < jaar2) return false;
if(jaar > jaar2) return true;
if(maand < maand2) return false;
if(maand > maand2) return true;
if(dag < dag2) return false;
if(dag > dag2) return true;
return false;
}

stock IsDeelbaar(getal, door) // Controleerd of een getal deelbaar is | Made by Guillaume
{
if(floatround(floatdiv(getal, door), floatround_floor) == floatdiv(getal, door))
{
	return true;
}
else
{
	return false;
}
}

stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Rekent het aantal dagen uit | Made by Guillaume
{
   new dagen;
   if(dag != dag2)
   {
	if(dag < dag2)
	{
		dagen +=  dag2-dag;
	}
	else
	{
		dagen += dag2;
	}

	if(dagen > 28)
	{
		switch(maand)
		{
			case 1,3,5,7,8,10,12:
			{
			    if(dagen > 31)
			    {
					dagen -= 31;
				}
			}
			case 2:
			{
				if(IsDeelbaar(jaar, 4))
				{
					if(dagen > 29)
			    	{
						dagen -= 29;
					}
				}
				else
				{
					if(dagen > 28)
			    	{
						dagen -= 28;
					}
				}
			}
			case 4,6,9,11:
			{
				if(dagen > 30)
   				{
					dagen -= 30;
				}
			}
		}
	}
}

new jaartmp=jaar,maandtmp=maand;
if(dag > dag2)
{
	maandtmp++;
}

while(maandtmp < maand2 || jaartmp < jaar2)
{
	switch(maandtmp)
	{
		case 1,3,5,7,8,10,12:
		{
			dagen += 31;
		}
		case 2:
		{
			if(IsDeelbaar(jaartmp, 4))
			{
				dagen += 29;
			}
			else
			{
				dagen += 28;
			}
		}
		case 4,6,9,11:
		{
			dagen += 30;
		}
		default:
		{
			maandtmp=0;
			jaartmp++;
		}
	}

	maandtmp++;
}
return dagen;
}

Bewerkt: door Wanted
Link to comment
Delen op andere websites

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...