/Goto [ID] - NUR /Goto geht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute.
    Da ich nun wieder mit dem scripten anfange, wollte ich testweiße ein Admin-Befehl' erstellen.


    /Goto [ID] + PlayerIsAdmin.


    Das sieht bis jetzt so aus:
    if (strcmp("/goto", cmdtext, true, 6) == 0) {
    new tmp[256];
    new OtherID = strval(tmp);
    if(IsPlayerAdmin(playerid)) {
    if(!strlen(tmp)) return SendClientMessage(playerid, 0x55FF00FF, "Verwendung: /goto [id]");
    if(!IsPlayerConnected(OtherID) || IsPlayerNPC(OtherID)) return SendClientMessage(playerid,0x55FF00FF,"Der angegebene Spieler ist nicht online!");
    new Float:X, Float:Y, Float:Z;


    GetPlayerPos(OtherID, X, Y, Z);


    if(IsPlayerInAnyVehicle(playerid)) {
    SetVehiclePos(GetPlayerVehicleID(playerid), X+5, Y+5, Z);
    }
    else {
    SetPlayerPos(playerid, X+5, Y+5, Z);
    }
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    }
    else {
    SendClientMessage(playerid, 0xFF6300FF, "Du bist kein Administrator!");
    }
    return 1;
    }


    Hmm, aber wenn ich ingame gehe, funktioniert nur /Goto, wenn ich aber zb. /goto 0 eingebe, ( egal ob ich als RCON eingeloggt bin oder nicht ) sagt er mir, das es den Befehl' nicht gibt.



    Was soll ich tun?
    Ich habe mir den Code nochmal angeguckt und weiß nicht weiter.
    Den /Goto Code habe ich aus dem Wiki ( Deutsch ), das If IsPlayerAdmin habe ich nur geaddet.


    MFG :!:

  • Zitat

    if (strcmp("/goto", cmdtext, true, 6) == 0) {

    durch folgendes ersetzten:
    if(!strcmp("/goto",cmd,true))
    und unter dem Callback OnPlayerCommandText folgendes noch:
    new cmd[256],idx;
    cmd = strtok(cmdtext,idx);


    Und das sollte vorerst dein Problem beheben, doch ich würde den Befehl etwas umschreiben, etwa so:
    if(!strcmp("/goto",cmd,true))
    {
    new tmp[256], OtherID;
    if(IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    return SendClientMessage(playerid, 0x55FF00FF, "Verwendung: /goto [id]");
    }
    OtherID = ReturnUser(tmp); // Falls "OtherID = ReturnUser(tmp);" ein Error gibt, einfach in "OtherID = strval(tmp);" ändern
    if(IsPlayerConnected(OtherID) || IsPlayerNPC(OtherID))
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(OtherID,x,y,z);
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    SetVehiclePos(veh, x+3, y+3, z+0.5);
    PutPlayerInVehicle(playerid, veh, 0); // eigentlich nicht nötig, doch nur damit nicht das auto sich alleine portet, kann man auch weglassen ;)
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, x+3, y+3, z+0.5);
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    }
    else
    {
    return SendClientMessage(playerid,0x55FF00FF,"Der angegebene Spieler ist nicht online!");
    }
    }
    else
    {
    return SendClientMessage(playerid, 0xFF6300FF, "Du bist kein Administrator!");
    }
    }


    hoffe konnte helfen.


    MFG luckyguy

  • Argh, danke für die Hilfe, trotzdem kommen jetzt aber 5 Error's.


    Hier mal mein ( momentan ziemlich leerer ) OnPlayerCommandText Public:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new cmd[256],idx;
    cmd = strtok(cmdtext,idx);
    if(!strcmp("/goto",cmd,true))
    {
    new tmp[256], OtherID;
    if(IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    return SendClientMessage(playerid, 0x55FF00FF, "Verwendung: /goto [id]");
    }
    OtherID = ReturnUser(tmp); // Falls "OtherID = ReturnUser(tmp);" ein Error gibt, einfach in "OtherID = strval(tmp);" ändern
    if(IsPlayerConnected(OtherID) || IsPlayerNPC(OtherID))
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(OtherID,x,y,z);
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    SetVehiclePos(veh, x+3, y+3, z+0.5);
    PutPlayerInVehicle(playerid, veh, 0); // eigentlich nicht nötig, doch nur damit nicht das auto sich alleine portet, kann man auch weglassen ;)
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, x+3, y+3, z+0.5);
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    }
    else
    {
    return SendClientMessage(playerid,0x55FF00FF,"Der angegebene Spieler ist nicht online!");
    }
    }
    else
    {
    return SendClientMessage(playerid, 0xFF6300FF, "Du bist kein Administrator!");
    }
    }
    return 0;
    }

  • Füg das folgende ganz unten in deinem Script ein, dann sollte es gehen:


    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    hoffe konnte helfen.


    MFG luckyguy