Problem mit Servicecommand

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 wollte vorhin einen Service Command machen der das endsprechende gTeam informiert, wie kann ich das anstellen?


    if (strcmp(cmdtext, "/adac" ,true)==0)
    {
    SetPlayerColor(playerid, COLOR_ADACUSER);
    ShowPlayerMarkers(1);
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "%s benötigt den ADAC!", name);
    SendClientMessageToAll(COLOR_ADACUSER,string);
    return 1;
    }

  • Machs so:
    if(strcmp(cmdtext,"/adac",true)==0){
    SendClientMessage(playerid, COLOR_GREEN, "Du hast einen Mechaniker gerufen!");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"%s braucht einen Mechaniker",name,cmdtext[4]);
    for(new i = 0; i <= GetMaxPlayers(); i++) {
    if(gTeam[i] == TEAM_ADAC) {
    SendClientMessage(i,COLOR_RED,string); }}
    return 1;
    }

  • if(strcmp(cmdtext,"/adac",true)==0)
    {
    new
    sendername[MAX_PLAYER_NAME];
    SetPlayerColor(playerid, COLOR_ADACUSER); /* Sieht aber jeder Spieler, nicht nur der ADAC */
    ShowPlayerMarkers(1);
    SendClientMessage(playerid, COLOR_GREEN, "Du hast einen Mechaniker gerufen!");
    GetPlayerName(playerid,sendername,sizeof(sendername));
    format(string,sizeof(string),"%s braucht einen Mechaniker",sendername);
    for(new i = 0; i <= GetMaxPlayers(); i++)
    {
    if(gTeam[i] == TEAM_ADAC)
    {
    SendClientMessage(i,COLOR_RED,string);
    }
    }
    return 1;
    }

  • Natürlich. Da die Funktion ja heisst:
    SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size)


    Da du bereits eine Schleife benutzt, die an alle ADAC Mitglieder eine Nachricht sendet musst du dise Funktion nur dort noch einfügen:

    if(strcmp(cmdtext,"/adac",true)==0)
    {
    new
    sendername[MAX_PLAYER_NAME],
    Float:pZ,
    Float:pY,
    Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ); /* Koordinaten des Spielers in den Variablen speichern */
    SendClientMessage(playerid, COLOR_GREEN, "Du hast einen Mechaniker gerufen!");
    GetPlayerName(playerid,sendername,sizeof(sendername));
    format(string,sizeof(string),"%s braucht einen Mechaniker",sendername);
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(gTeam[i] == TEAM_ADAC)
    {
    SetPlayerCheckpoint(i, pX, pY, pZ, 5.0); /* Checkpoint für ADAC Leute anzeigen (Koordinaten des Spielers) */
    SendClientMessage(i, COLOR_RED, string);
    }
    }
    return 1;
    }


    Allerdings solltest du noch etwas in OnPlayerEnterCheckpoint machen, zum deaktivieren des Checkpoints.


    if(gTeam[playerid] == TEAM_ADAC)
    {
    new
    string[64],
    sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(gTeam[i] == TEAM_ADAC)
    {
    format(string,sizeof(string),"%s hat das Ziel erreicht", sendername);
    SendClientMessage(i, COLOR_RED, string); /* formatierte Nachricht an alle ADAC Mitgleider senden*/
    DisablePlayerCheckpoint(i); /* Deaktiviert den Checkpoint */
    }
    }
    }


    ABER: Dies ist eine vereinfachte Version. Der Nachteil hiervon wäre, dass JEDER Checkpoint nun für alle ADAC Mitglieder deaktiviert wird, sobald ein ADAC Mitglied in einen Checkpoint fährt. Um dies zu verhindern kannst du eine globale Variable erstellen und diese entsprechend verändern:


    Ganz oben
    new adaccheckpoint;


    Im /adac Befehl
    adaccheckpoint = 1;


    Im OnPlayerEnterCheckpoint Teil:


    /* Zuerst einmal das if verändern */
    if(gTeam[playerid] == TEAM_ADAC && adaccheckpoint == 1)
    {
    adaccheckpoint = 0;
    /* Der Rest des Codes */
    }


    Dies behebt den Fehler, allerdings ist dieses System immernoch sehr einfach. Aber ich denke mal es reicht vorerst mal...