Jump to content

Help,..ik loop vast.


Recommended Posts

Geplaatst:

Hoi,

Ik probeer zelf, wat commando`s te bedenken, maar ik loop toch steeds weer vast.

Gewoon omdat ik er veel te weinig vanaf weet.

Het zou beter gaan als ik snap wat ik intyp, inplaats van kopieren en plakken, vanuit andere commando`s.

Mijn engels is ook niet al te best, dus daar kom ik ook al niet verder mee.

Nu heb ik een aantal woorden verzamelt, misschien kan iemand daar wat uitleg over geven.

new cmd1[256],tmp1[256],idx1;
cmd1 = strtok(cmdtext,idx1);
if(strcmp("/car",cmd1,true) == 0)


tmp1 = strtok(cmdtext,idx1);
if(!strlen(tmp1))


new vid = strval(tmp1);
if(vid < 400 || vid > 609)

Dit komt uit een commando om een voertuig, te gebruiken,

keuze moet zijn, vanaf id 400 tm 609

80 % van deze woorden, zegt mij helemaal niets.

gr Steve

  • Reacties 37
  • Created
  • Laatste reactie

Top Posters In This Topic

  • steve6972

    21

  • Ophion

    5

  • Sandra

    5

  • Juwayri

    2

Geplaatst: (bewerkt)

Goed ik zal je proberen het uit te leggen regel voor regel:


new cmd1[256], tmp1[256], idx1;

In deze regel worden 3 nieuwe variabelen aan gemaakt:

cmd1[256]: Hierin zal straks het eerste deel van het commando dat de speler intypt. Bijvoorbeeld: /car

tmp1[256]: Hierin zal straks het tweede deel van het commando worden opgelagen. (Het getal dat je achter /car typt)

idx1: idx is eigenlijk een afkorting van 'index'. Hierin de positie opgelagen waar de server is gebleven tijdens het lezen van het commando.

cmd1 = strtok(cmdtext,idx1);

De functie 'strtok' is gemaakt om een string (in dit geval een commando dat een speler intypt) te scheiden in losse stukken. De scheiding komt op de plaats van een spatie. Bijvoorbeeld: /car 541 word gescheiden in '/car' en in '541'.

Nou, in deze regel word het eerste deel van het commando dat de speler intypt opgeslagen in 'cmd1'.

if(strcmp("/car",cmd1,true) == 0)

'strcmp' is een afkorting voor 'string compare'. 'compare' is engels voor 'vergelijken'. Deze functie vergelijkt dus 2 teksten (strings) met elkaar.

In dit geval kijkt die of het ingetypte commando (cmd1) overeen komt met "/car".

tmp1 = strtok(cmdtext,idx1);

Deze functie doet eigenlijk het zelfde als de functie 2 hierboven: Nu haalt die niet het eerste deel van het ingetypte commando op, maar het 2e deel: In dit geval het modelID van de auto die je wilt spawnen.

Deze word opgeslagen in 'tmp1'.

if(!strlen(tmp1))

'strlen' is een afkorting voor 'string length'. Deze functie telt uit hoeveel letters/cijfers/tekens een tekst/string bestaat. Nu staat er voor 'strlen' een uitroepteken (!) dat betekend zoiets als "Als het niet zo is".

In dit geval checkt deze functie of de string 'tmp1' (Het id van de auto) geen letters of cijfers bevat.

Als er inderdaad geen tekst in die string staat, dan is de speler dus vergeten om een ID in te typen. Hierom zal die dan een bericht krijgen. (SendClientMessage(playerid, 0xFF0000AA, "Correct usage: /car [iD]"); )

new vid = strval(tmp1);

Hier word nog een nieuwe variabele aangemaakt waarin het modelID van de nieuwe auto zal worden opgeslagen.

CreateVehicle wil dat er een getal (integer) word ingevoerd als modelID en niet een tekst (string).

Omdat het ID nu nog een string is. (tmp1), moet die worden opgezet in een 'integer' (een getal).

Dit kan met de functie 'strval'. (String-Value).

if(vid < 400 || vid > 609)

Omdat er geen voertuigmodellen zijn met een id lager dan 400 of boven de 609, moet er gekeken worden of het ingetypte ID wel tussen de 400 en 609 zit.

Want als je een voertuig probeert te spawen met bijvoorbeeld model '25', dan zal het spel van die speler crashen.

Nou, wat betekenen nou die tekens:

< staat voor 'is kleiner dan...'

> staat voor 'is groter dan...'

|| staat voor 'of'

'vid is dus het opgeslagen modelID.

Vertaalt is die regel dus zo:

if(vid is kleiner dan 400 of vid is groter dan 609)

Als dat dus het geval is, krijgt de speler een melding dat hij/zij een ongeldig ID heeft ingevoerd.


Ik hoop dat je hier wat aan hebt. :)

Als je nog vragen hebt, kan je ze gerust stellen in dit topic ;)

Groetjes Sandra

Bewerkt: door =>Sandra<=
Geplaatst: (bewerkt)

Dit is man bijna een complete tut. _O_

Ik wist hoe je dit (strtok) moest gebruiken maar wat dat allemaal precies betekende wist ik eerlijk gezegt ook niet :$

Bewerkt: door Juwayri
Geplaatst:
Dit is man bijna een complete tut. _O_

Ik wist hoe je dit (strtok) moest gebruiken maar wat dat allemaal precies betekende wist ik eerlijk gezegt ook niet :$

Nee ik moet hier echt compleet bij aansluiten.

:tu:

Geplaatst:

Top Sandra,

hier kan ik zeker wat mee,

ik ga er mee aan het stoeien, kijken hoever ik hier mee kom.

gr Steve

Geplaatst: (bewerkt)

Wat denk je Sandra, gaat dit werken?

new cmd1[256],tmp1[256],idx1;
   cmd1 = strtok(cmdtext,idx1);
   if(strcmp("/givecar",cmd1,true) == 0)
   {
       if(adminlevel[playerid] <= 1)
       {
           SendClientMessage(playerid,COLOR_RED,"Dit commando is voor admin 2 en hoger");
    }
    else
    {
           if(adminlevel[playerid] >= 2)

	    tmp1 = strtok(cmdtext,idx1);
	    if(!strlen(tmp1))
		{
		SendClientMessage(playerid,COLOR_RED,"Gebruik: /givecar id");
		}
		else
		{
			new targetPlayer = strval(tmp1);
			if(!IsPlayerConnected(targetPlayer)) return 1;
			{
			    SendClientMessage(playerid,COLOR_RED,"Deze speler is niet aanwezig.");
			            }
		                    else
			            {
				    new Float:x,Float:y,Float:z,Float:a;
				    GetPlayerPos(targetplayer,x,y,z);
				    GetPlayerFacingAngle(targetplayer,a);
				    new newcar = CreateVehicle(400,x,y,z,a,-1,-1,240000);
				    PutPlayerInVehicle(targetplayer,newcar,0);
				}
			}
		}
	}
       }        
return 1; 
}




gr. Steve

Bewerkt: door steve6972
Geplaatst: (bewerkt)

Bijna :)

Let wel op dat Pawno hoofdlettergevoelig is!

Dus: targetplayer is niet hetzelfde als targetPlayer

Verder had je nog 'return 1' staan achter 'if(IsPlayerConnected(targetplayer)) en dat hoort daar niet.

En je had ook nog 1 of 2 sluit-haakjes teveel.

Ik denk dat deze wel werkt:

http://pastebin.com/f6263f71f

Bewerkt: door =>Sandra<=
Geplaatst:
Bijna :)

Let wel op dat Pawno hoofdlettergevoelig is!

Dus: targetplayer is niet hetzelfde als targetPlayer

Verder had je nog 'return 1' staan achter 'if(IsPlayerConnected(targetplayer)) en dat hoort daar niet.

En je had ook nog 1 of 2 sluit-haakjes teveel.

Ik denk dat deze wel werkt:

http://pastebin.com/f6263f71f

oke bedankt, ga morgen ff testen,

en vervolgens bedenken hoe ik dit commando kan uitbreiden.

Misschien kan ik er een leuk FS van maken .

Gr..

Geplaatst:
en vervolgens bedenken hoe ik dit commando kan uitbreiden.

Voeg een 2e param toe :)

/givecar [id] [modelID]

okè, ga ik proberen, maar dan moet ik alleen even weten, wat ik aan de regel:

new cmd1[256],tmp1[256],idx1; ,

moet toevoegen.

Gokje,..

new cmd1[256],tmp1[256],tmp2[256],idx1; :?

Geplaatst:
okè, ga ik proberen, maar dan moet ik alleen even weten, wat ik aan de regel:

new cmd1[256],tmp1[256],idx1;

moet toevoegen.

Gokje,..

new cmd1[256],tmp1[256],tmp2[256],idx1;

:?

Nee, je hoeft daar helemaal niks aan toe te voegen. Je kan tmp1 gewoon weer gebruiken:

Voorbeeld van een commando met 2 params:

/GivePlayerMoney [playerid] [bedrag]

if(strcmp(cmd, "/giveplayermoney", true)==0)
{
new TargetPlayer, Money;
tmp1 = strtok(cmdtext,idx1);
if(!strlen(tmp1))
{
	SendClientMessage(playerid, 0xFF0000AA, "Use: /giveplayermoney [playerid] [amount]");
	return 1;
}
TargetPlayer = strval(tmp1);
tmp1 = strtok(cmdtext,idx1);   // <<<=== HIER LEEST DIE DE VOLGENDE PARAM!!!!
if(!strlen(tmp1))
{
	SendClientMessage(playerid, 0xFF0000AA, "Use: /giveplayermoney [playerid] [amount]");
	return 1;
}
Money = strval(tmp1);
GivePlayerMoney(playerid, -Money);
GivePlayerMoney(TargetPlayer, Money);
return 1;
}

Geplaatst: (bewerkt)
Nou, ik ben benieuwd,

wat vind je ervan, Sandra :*D

http://pastebin.com/m4a9c9ae0

Je bent er bijna :puh:

Ik weet niet of jij het wel prettig vindt, maar ik hou niet zo van 'else'. Bij grote commands als deze raak je al gauw het overzicht kwijt.

Als je veel checks moet doen (is speler wel/niet online, is er geen geldig id ingevoerd, is de speler wel admin.... enzovoort)... dan gebruik ik vaak 'return 1' bij elke check:

'return 1' kapt het commando helemaal af.

Voorbeeld:

if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, 0xFF000AA, "Je bent geen admin!");
return 1;
}
if(!strlen(tmp1))
{
SendClientMessage(playerid, 0xFF000AA, "Je bent geen admin!");
return 1;
}

Ohja. 'return 1;' moet met kleine letters, geen hoofdletter 'R' ;)

OOhwjaa, en ook had je nog 'TargetPlayer = strval(tmp1);' NADAT je voor de 2e keer 'tmp1 = strtok(cmdtext, idx);' had gebruikt.

Als je dat doet, dan word het ID van de speler het getal dat de admin als modelID had ingevoerd ;)

Ik heb dit ervan gemaakt voor je:

http://pastebin.com/f778e6ad

Ik heb het commando getest en hij werkt :)

Bewerkt: door =>Sandra<=
Geplaatst: (bewerkt)
hey, ik zie dat je een een command /car erin hebt,

wat kun je met deze?

invix

Met dit commando ( /givecar), kun je een willekeurig voertuig, geven aan een andere speler.

Bewerkt: door steve6972

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