mosweg Geplaatst: 29 augustus 2009 Rapport Geplaatst: 29 augustus 2009 (bewerkt) Ik gebruik door mijn hele filterscript heen deze methode om een actie te doen met een andere speler. In vele servers heb ik gezien dat ze een /[command][playerid][reason] hebben. Mij lukt het alleen maar met /[command][playerid] Kan iemand hier mijn code posten alleen dan met reason erachter? Code: if(strcmp(cmd, "/kick", true) == 0) { admin = dini_Int(userfile, "adminlevel"); if(admin == 3 || admin == 4 || admin == 5) { tmp = strtok(cmdtext, idx); giveplayerid = strval(tmp); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); if(strlen(tmp) == 0) return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /kick [playerid]"); giveplayerid = strval(tmp); if(!IsPlayerConnected(giveplayerid) || giveplayerid == INVALID_PLAYER_ID) { SendClientMessage(playerid,COLOR_YELLOW," Not a valid ID!"); } else { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,256," %s has been kicked by admin %s.",giveplayer,sendername); SendClientMessageToAll(COLOR_YELLOW,string); format(string,256,"kick %d",giveplayerid); SendRconCommand(string); } } return 1; } Alvast bedankt Bewerkt: 29 augustus 2009 door mosweg Reageren
David22 Geplaatst: 29 augustus 2009 Rapport Geplaatst: 29 augustus 2009 Gebruik DCMD. Big Boss geeft in zijn tutorial een perfect voorbeeld van wat jij wilt. Reageren
mosweg Geplaatst: 29 augustus 2009 Auteur Rapport Geplaatst: 29 augustus 2009 Die heb ik gezien, maar ik gebruik in mijn hele server cmd, Dus het is makkelijker als het ook met deze methode kan, Reageren
David22 Geplaatst: 29 augustus 2009 Rapport Geplaatst: 29 augustus 2009 Die heb ik gezien, maar ik gebruik in mijn hele server cmd, Dus het is makkelijker als het ook met deze methode kan, Dat gaat een probleem vormen, want als je strtok gebruikt wordt alles gesplitst bij een spatie. Dus kan je reason niet langer zijn als 1 woord, of je moet underscores '_' gebruiken ipv spaties. Óf zet alles nu om naar dcmd, voordat je nog veel meer commands hebt. Reageren
Megadreams Geplaatst: 29 augustus 2009 Rapport Geplaatst: 29 augustus 2009 Het is toch mogelijk om in cmd een reason te zetten maar inderdaad is het wel beter in dcmd Al gebruik ik het zelf niet erg veel. Reageren
Big Boss Geplaatst: 29 augustus 2009 Rapport Geplaatst: 29 augustus 2009 Ik heb net de hele PEN gamemode omgezet in dcmd/sscanf, dus jouw moet het toch ook zeker lukken. Multiparam commands met strtok is wel mogelijk, maar vind ik zelf veel lastiger dan sscanf. Zie hiervoor Sandra's tutorial. Voorbeeldje met sscanf: dcmd_kick(playerid, params[]) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "Not authorized!"); new targetid, reason[64]; if(sscanf(params, "us", targetid, reason)) { return SendClientMessage(playerid, COLOR_YELLOW, "Usage: /kick [Playerid/PartOfName] [Reason]"); } format(string, sizeof(string), "You have been kicked for the following reason: %s", reason); SendClientMessage(targetid, COLOR_ORANGE, string); Kick(targetid); return 1; } Hier mist natuurlijk nog een hele hoop (zoals het checken of targetid wel online is), maar dit is gewoon het basis idee. Reageren
mosweg Geplaatst: 29 augustus 2009 Auteur Rapport Geplaatst: 29 augustus 2009 Het is mijn grootste Filtersripts (3000) lines, Er staan ook heel veel commands in. Is het ook mogenlijk om een paar commands naar DCMD te veranderen? Reageren
David22 Geplaatst: 30 augustus 2009 Rapport Geplaatst: 30 augustus 2009 Het is mijn grootste Filtersripts (3000) lines, Er staan ook heel veel commands in.Is het ook mogenlijk om een paar commands naar DCMD te veranderen? Ja, je kan ook strcmp en dcmd naast elkaar draaien. Reageren
mosweg Geplaatst: 30 augustus 2009 Auteur Rapport Geplaatst: 30 augustus 2009 Oke, ik zal he erin zetten. Ik heb de tutorial nog eens bekeken en het kan ook handig zijn voor de adere commands ( /jail [playerid] [time] [reason] /su [playeid] [reason]) Bij de tutorial staat een download link voor dcmd.inc maar die werkt niet bij mij. Staat die dcmd.inc ook ergens anders Reageren
.Timothy Geplaatst: 30 augustus 2009 Rapport Geplaatst: 30 augustus 2009 Je kan die dcmd.inc ook zelf maken. Zorg ervoor dat je de code van sscanf en de #define-regel van dcmd hebt. De sscanf code kun je hier vinden en de #define-regel van dcmd hier. Ga naar je SA-mp server-map, open 'pawno' -> 'include' en maak een nieuw bestand. Zorg ervoor dat het nieuwe bestand de .inc-extensie heeft, noem het bestand bijvoorbeeld 'sscanfdcmd.inc'. Open het .inc-bestand en plak de volgende code in het bestand: #if defined _sscanfdcmd_included #endinput #endif #define _sscanfdcmd_included #pragma library sscanfdcmd Verander sscanfdcmd naar de naam die jij gebruikt. Plak nu de #define regel en de sscanf code erin. Ga naar je filterscript en plak bovenaan bij de overige defines de regel: #include <sscanfdcmd> Hierna ben je klaar, de sscanf code en de dcmd-define zullen geladen worden. Edit: Op aanraden van Remi-X code-tag met code toegevoegd, als je dit niet doet schijnt de compiler te crashen. 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.