steve6972 Geplaatst: 10 juli 2008 Rapport Geplaatst: 10 juli 2008 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 Reageren
Sandra Geplaatst: 10 juli 2008 Rapport Geplaatst: 10 juli 2008 (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: 10 juli 2008 door =>Sandra<= Reageren
Juwayri Geplaatst: 11 juli 2008 Rapport Geplaatst: 11 juli 2008 (bewerkt) Dit is man bijna een complete tut. Ik wist hoe je dit (strtok) moest gebruiken maar wat dat allemaal precies betekende wist ik eerlijk gezegt ook niet :$ Bewerkt: 11 juli 2008 door Juwayri Reageren
Ophion Geplaatst: 11 juli 2008 Rapport Geplaatst: 11 juli 2008 Dit is man bijna een complete tut. 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. Reageren
steve6972 Geplaatst: 11 juli 2008 Auteur Rapport Geplaatst: 11 juli 2008 Top Sandra, hier kan ik zeker wat mee, ik ga er mee aan het stoeien, kijken hoever ik hier mee kom. gr Steve Reageren
steve6972 Geplaatst: 12 juli 2008 Auteur Rapport Geplaatst: 12 juli 2008 (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: 12 juli 2008 door steve6972 Reageren
Sandra Geplaatst: 12 juli 2008 Rapport Geplaatst: 12 juli 2008 (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: 12 juli 2008 door =>Sandra<= Reageren
steve6972 Geplaatst: 12 juli 2008 Auteur Rapport Geplaatst: 12 juli 2008 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.. Reageren
Sandra Geplaatst: 12 juli 2008 Rapport Geplaatst: 12 juli 2008 en vervolgens bedenken hoe ik dit commando kan uitbreiden. Voeg een 2e param toe /givecar [id] [modelID] Reageren
steve6972 Geplaatst: 13 juli 2008 Auteur Rapport Geplaatst: 13 juli 2008 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; Reageren
Sandra Geplaatst: 13 juli 2008 Rapport Geplaatst: 13 juli 2008 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; } Reageren
steve6972 Geplaatst: 14 juli 2008 Auteur Rapport Geplaatst: 14 juli 2008 Nou, ik ben benieuwd, wat vind je ervan, Sandra http://pastebin.com/m4a9c9ae0 Reageren
invix Geplaatst: 14 juli 2008 Rapport Geplaatst: 14 juli 2008 hey, ik zie dat je een een command /car erin hebt, wat kun je met deze? invix Reageren
Sandra Geplaatst: 14 juli 2008 Rapport Geplaatst: 14 juli 2008 (bewerkt) Nou, ik ben benieuwd,wat vind je ervan, Sandra http://pastebin.com/m4a9c9ae0 Je bent er bijna 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: 14 juli 2008 door =>Sandra<= Reageren
steve6972 Geplaatst: 15 juli 2008 Auteur Rapport Geplaatst: 15 juli 2008 (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: 15 juli 2008 door steve6972 Reageren
Recommended Posts
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.