Remi-X Geplaatst: 12 maart 2009 Rapport Geplaatst: 12 maart 2009 Tja, nou heb ik dus een Ban en Kick script, alleen, als ik een reason intyp krijg ik enkel het eerste woordje te zien. K heb helaas geen idee hoe ik dat kan oplossen. En, ik wil bepaalde IP adressen zo maken dat ze niet gebanned of kicked kunnen worden, dat staat er nu al bij, maar dat werkt ook niet. Hoe kan dat? Ik geen alleen even kick script, ban lijkt er namelijk op, alleen dat kick een kick is en ban een ban, is het enige verschil. if (strcmp("/kick", cmd, true, 10) == 0) { if(IsPlayerAdmin(playerid)) { new kickplayerid; new reason[256]; new kickedname[MAX_PLAYER_NAME]; new adminname[MAX_PLAYER_NAME]; new meldingvoorkicked1[256]; new meldingvoorkicked2[256]; new meldingvooriedereen[256]; new PlayerIP[256]; GetPlayerIp(kickplayerid, PlayerIP, sizeof(PlayerIP)); tmp = strtok(cmdtext, idx); if(strcmp(PlayerIP, "85.148.168.75", true, 15) == 0 || strcmp(PlayerIP, "81.207.205.123", true, 15) == 0 || strcmp(PlayerIP, "84.27.55.170 ", true, 15) == 0) { SendClientMessage(playerid, RED, "You can't kick this player!"); return 1; } if(!strlen(tmp)) { SendClientMessage(playerid, RED, "Usage: /kick [id] [reason]"); return 1; } kickplayerid = strval(tmp); if(IsPlayerConnected(kickplayerid) == 0) { SendClientMessage(playerid, GRAY, "This player does'nt exists."); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, RED, "Usage: /kick [id] [reason]"); return 1; } reason = tmp; GetPlayerName(playerid, adminname, sizeof(adminname)); GetPlayerName(playerid, kickedname, sizeof(kickedname)); format(meldingvoorkicked1, sizeof(meldingvoorkicked1), "Admin %s has kicked you from the server.", adminname); format(meldingvoorkicked2, sizeof(meldingvoorkicked2), "Reason: %s", reason); SendClientMessage(kickplayerid, GRAY, "====================================================="); SendClientMessage(kickplayerid, GRAY, meldingvoorkicked1); SendClientMessage(kickplayerid, GRAY, meldingvoorkicked2); SendClientMessage(kickplayerid, GRAY, "Server wil close the connection."); SendClientMessage(kickplayerid, GRAY, "====================================================="); Kick(kickplayerid); format(meldingvooriedereen, sizeof(meldingvooriedereen), "Admin %s has kicked %s. Reason: %s", adminname, kickedname, reason); SendClientMessageToAll(GRAY, meldingvooriedereen); } else { SendClientMessage(playerid, GRAY, "You're not allowed to use this command"); } return 1; } Reageren
Big Boss Geplaatst: 12 maart 2009 Rapport Geplaatst: 12 maart 2009 (bewerkt) Er zit al een fout op het begin: new PlayerIP[256]; GetPlayerIp(kickplayerid, PlayerIP, sizeof(PlayerIP)); Je wil het ip van kickplayerid te weten komen; kickplayerid is echter altijd 0 want je hebt daarvoor nergens een waarde een kickplayerid gegeven. Tevens is de maximum lengte voor een ip 16, dus dat kan je ook even aanpassen. Een chatbericht kan ook maar maximum 128 zijn, dus dat kan ook aangepast worden. Kwestie van geheugen besparen. Ik zal zo even de bewerkt versie posten. Edit: http://plaatscode.be/113252/ Bewerkt: 12 maart 2009 door Big Boss Reageren
Sandra Geplaatst: 12 maart 2009 Rapport Geplaatst: 12 maart 2009 Je kan niet met strtok een reason maken omdat strtok de ingevoerde tekst scheidt bij de spaties. Vandaar krijg je alleen het eerste woord. Ik denk dat dit wel werkt: http://plaatscode.be/113261/ Reageren
Big Boss Geplaatst: 12 maart 2009 Rapport Geplaatst: 12 maart 2009 Die code van jou is nog steeds fout, en wel om de reden die ik hierboven aangaf. Als alternatief kan je wel dit gebruiken: http://www.plaatscode.be/109328/ Vereist dcmd en sccanf. Info hoe dat werkt kan je hier vinden. Reageren
Remi-X Geplaatst: 12 maart 2009 Auteur Rapport Geplaatst: 12 maart 2009 Kan dit alleen maar met DCMD en SCCANF? Want als ik wil overstappen moet ik nogal wat veranderen, waar ik nu geen zin in heb. Dat doe ik dan wel in de vakantie ofzo. Maar je vorige script die je postte werkt ook? Reageren
David22 Geplaatst: 12 maart 2009 Rapport Geplaatst: 12 maart 2009 De code van Big Boss gaat sowieso niet werken, omdat hij af en toe vergeten is een variabele de goede naam te geven. (giveplayerid -> otherplayer). Het correcte script ziet er zo uit: dcmd_kick(playerid, params[]) { if(!IsPlayerAdmin(playerid)) // Is de speler GEEN (!) admin? { SendClientMessage(playerid, 0xFF0000FF, "Je bent geen admin!"); return 1; } new otherplayer; // Hierin gaan we het id van de speler opslaan new reason[64]; // Hierin gaan we de reden opslaan new string[256]; if(sscanf(params, "uz", otherplayer, reason)) // Haal de gegevens uit params. u = playerid, z = Reden (optioneel) { // Als er iets ontbreekt ... SendClientMessage(playerid, 0xFF0000FF, "GEBRUIK: /kick <Playerid/PartOfName> <Reden>"); return 1; } if(!IsPlayerConnected(otherplayer)) // Als de ingevoerde speler niet online is ... { SendClientMessage(playerid, 0xFF0000FF, "Speler niet actief!"); return 1; } // Op dit punt is het id van de speler opgeslagen in 'otherplayer' en de reden in 'reason' new PlayerName[MAX_PLAYER_NAME], OtherName[MAX_PLAYER_NAME]; // Variabelen voor de namen GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); // Verkrijg de naam van de admin GetPlayerName(otherplayer, OtherName, sizeof(OtherName)); // Verkrijg de naam van de speler die gekicked wordt format(string, sizeof(string), "Je bent van de server gekicked door Admin %s. Reden: %s.", PlayerName, reason); SendClientMessage(otherplayer, 0xFF0000FF, string); format(string, sizeof(string), "Spelers %s is gekicked door Admin %s. Reden: %s", OtherName, PlayerName, reason); SendClientMessageToAll(COLOR_GREY, string); Kick(otherplayer); return 1; } Reageren
Gast Geplaatst: 12 mei 2009 Rapport Geplaatst: 12 mei 2009 De code van Big Boss gaat sowieso niet werken, omdat hij af en toe vergeten is een variabele de goede naam te geven. (giveplayerid -> otherplayer). Het correcte script ziet er zo uit: dcmd_kick(playerid, params[]) { if(!IsPlayerAdmin(playerid)) // Is de speler GEEN (!) admin? { SendClientMessage(playerid, 0xFF0000FF, "Je bent geen admin!"); return 1; } new otherplayer; // Hierin gaan we het id van de speler opslaan new reason[64]; // Hierin gaan we de reden opslaan new string[256]; if(sscanf(params, "uz", otherplayer, reason)) // Haal de gegevens uit params. u = playerid, z = Reden (optioneel) { // Als er iets ontbreekt ... SendClientMessage(playerid, 0xFF0000FF, "GEBRUIK: /kick <Playerid/PartOfName> <Reden>"); return 1; } if(!IsPlayerConnected(otherplayer)) // Als de ingevoerde speler niet online is ... { SendClientMessage(playerid, 0xFF0000FF, "Speler niet actief!"); return 1; } // Op dit punt is het id van de speler opgeslagen in 'otherplayer' en de reden in 'reason' new PlayerName[MAX_PLAYER_NAME], OtherName[MAX_PLAYER_NAME]; // Variabelen voor de namen GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); // Verkrijg de naam van de admin GetPlayerName(otherplayer, OtherName, sizeof(OtherName)); // Verkrijg de naam van de speler die gekicked wordt format(string, sizeof(string), "Je bent van de server gekicked door Admin %s. Reden: %s.", PlayerName, reason); SendClientMessage(otherplayer, 0xFF0000FF, string); format(string, sizeof(string), "Spelers %s is gekicked door Admin %s. Reden: %s", OtherName, PlayerName, reason); SendClientMessageToAll(COLOR_GREY, string); Kick(otherplayer); return 1; } dcmd_kick(playerid, params[]) doet 't niet hoor Reageren
Remi-X Geplaatst: 12 mei 2009 Auteur Rapport Geplaatst: 12 mei 2009 Je kan ook gewoon niet bumpen op een topic van 2 maanden oud. En, heb jij DCMD wel bovenaan je script gedefineerd + de opvraag in OnPlayerCommandText gezet? Reageren
Gast Geplaatst: 12 mei 2009 Rapport Geplaatst: 12 mei 2009 Je kan ook gewoon niet bumpen op een topic van 2 maanden oud. Mag ik niet om "hulp" vragen bij iets wat ik OOK graag wil hebben? En het is 2 maanden oud, so what, ik zou dat pas zeggen bij 2-1 jaar oud. anyway.. Nee, dat heb ik niet gedaan, en ik ben best wel "noob" dus ik heb ook geen flauw idee hoe. Reageren
Gast Geplaatst: 13 mei 2009 Rapport Geplaatst: 13 mei 2009 (bewerkt) DCMD Achjah, natuurlijk!! Ik had die tutorial al gevonden, maar ik wist niet wat het in hield.. Bedankt En nu heb ik weer een probleempje met compilen Als ik deze code toevoeg { dcmd(kick, 4, cmdtext); return 0; } Dan zegt hij dat de compiler niet meer werkt (ik heb Vista) Bewerkt: 13 mei 2009 door Gast Reageren
D-V-D-K Geplaatst: 16 mei 2009 Rapport Geplaatst: 16 mei 2009 (bewerkt) DCMD Achjah, natuurlijk!! Ik had die tutorial al gevonden, maar ik wist niet wat het in hield.. Bedankt En nu heb ik weer een probleempje met compilen Als ik deze code toevoeg { dcmd(kick, 4, cmdtext); return 0; } Dan zegt hij dat de compiler niet meer werkt (ik heb Vista) OMG: public OnPlayerCommandText(playerid, cmdtext[]) { dcmd(kick, 4, cmdtext); return 0; } dcmd_kick(playerid, params[]) // Ergens anders! niet in een public ofzo! { // Je command code return 1; } Bewerkt: 16 mei 2009 door D-V-D-K 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.