Kleine Frage zu if(strcmp ....

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
  • Hallo Community,
    ich habe eine ganz kleine Frage und zwar da ich vor 3 oder 4 Monaten das letze mal mit OnPlayerCommandText gearbeitet habe, möchte ich nun einen /(l)ocal + /(s)hout Befehl scripten, aber da ich möchte das wenn man man /s oder /shout eingibt, das trotzdem halt der gleiche Befehl ausgeführt wird, aber da ich das jetzt vergessen habe wie das mit den "||" geht möchte ich mich hier schnell erkundigen :)



    Mfg

    Mit unfreundlichen Grüßen
    Buschmensch

  • Ich geh mal davon aus das du sonst mit ocmd arbeitest, aber das geht genau so:

    ocmd:befehl(playerid,params[])
    {
    return 1;
    }


    ocmd:befehl2(playerid,params[])
    {
    return ocmd_befehl(playerid,params);
    }


    Ich bin mir nicht ganz sicher ob das so ging, aber ich denke schon.

  • Ok Danke Leute!!!


    PS : Würde dieser Befehl passen?
    if(strcmp(cmdtext, "/s", true) == 0 || strcmp(cmdtext, "/l", true) == 0)
    {
    new strong[128], allplayers, localtext;
    new Float:x, Float:z, Float:y;
    GetPlayerPos(playerid,x,y,z);
    if(IsPlayerConnected(playerid))
    {
    if(IsPlayerInRangeOfPoint(playerid,x,y,z,30))
    {
    format(strong,sizeof(strong),"%s : %s",SpielerName(playerid),localtext);
    SendClientMessage(allplayers,grau,strong);
    }
    }
    else
    {
    SCM(playerid,Rot,"Du musst Connected sein!");
    }
    return 1;
    }

    Mit unfreundlichen Grüßen
    Buschmensch

  • Dein Gedanke ist falsch. Du speicherst deine eigene Position in die 3 Variablen x, y und z, und prüfst dann, ob du dich im Umkreis von 30 bei der Position befindest. Wenn ja, sendest du die Nachricht..


    Siehst den Fehler? ;)


    Du musst natürlich prüfen ob alle anderen Spieler in deiner Nähe sind, und denen die Nachricht senden. Also eine Schleife:



    new Float:x, Float:z, Float:y;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerPos(i, x, y, z);
    if(IsPlayerInRangeOfPoint(i, x, y, z, 30))
    {
    // ....
    }
    }


    Und das hier:



    Was soll das für einen Sinn haben? Wenn du nicht connectet wärst, könntest du nichtmal den Befehl eingeben, weil du ja netmal auf dem Server sein würdest?! :D Also die Nachricht bringt nichts.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ok Nikolas, danke für den Tipp.


    Habe das jetzt mal so gemacht, ist das jetzt richtig?
    if(strcmp(cmdtext, "/s", true) == 0 || strcmp(cmdtext, "/l", true) == 0)
    {
    new strong[128], allplayers, localtext[64];
    new Float:x, Float:z, Float:y;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerPos(i, x, y, z);
    if(IsPlayerInRangeOfPoint(i, x, y, z, 30))
    {
    if(isPlayerAnAdmin(playerid,1)) format(strong,sizeof(strong),"(( *%d Admin %s : %s ))",GetPVarInt(playerid,"Adminlevel"),string,localtext);
    else if(isPlayerAnSupporter(playerid,1)) format(strong,sizeof(strong),"(( *%d Supporter %s : %s ))",GetPVarInt(playerid,"Supporterlevel"),strong,localtext);
    else format(strong,sizeof(strong),"(( %s : %s ))",SpielerName(playerid),localtext);
    SendClientMessage(allplayers,grau,strong);
    }
    }
    return 1;
    }

    Mit unfreundlichen Grüßen
    Buschmensch

  • Was soll denn dein allplayers sein?


    Du musst i verwenden, wegen der Schleife, weil der alle Spieler (i) auf dem Server durchgeht, prüft ob Connected und in der Nähe von 30, und dann denen eine Nachricht senden.


    Ansonsten müssts richtig sein. Mit "strong" meintest du aber denke ich mal "string", so heißen die Dinger nämlich. ;)