/setskin Befehl Fehler

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,
    in meinem /setskin Befehl steckt anscheinend ein fehler.
    Jedoch finde ich ihn nicht, es kommt immer "Unfgültige Skin-ID".
    Würde mich freuen, wenn ihr mir helfen könntet!


    dcmd_setskin(playerid, params[])
    {
    new String[128], SkinID, pID, mysql_Name[MAX_PLAYER_NAME];
    if(GetPVarInt(playerid, "Team") >= 2) {
    if(sscanf(params, "ud", pID, SkinID)) return SendClientMessage(playerid, GRAU, "BENUTZE: /setskin [Name/Player-ID] [Skin-ID]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, ROT, "Kein Spieler mit angegebener ID Online");
    if(!IsPlayerInRangeOfPlayer(playerid, pID, 10.0)) return SendClientMessage(playerid, ROT, "Der Spieler ist zu weit entfernt!");
    if(SkinID > 300 || SkinID < 1) return SendClientMessage(playerid, ROT, "Ungültige Skin-ID!");
    if(SkinID == 3 || 4 || 5 || 6 || 8 || 42 || 65 || 74 || 86 || 119 || 149 || 208 || 268 || 273 || 289) return SendClientMessage(playerid, ROT, "Ungültige Skin-ID!");
    SetPlayerSkin(pID, SkinID);
    SetPVarInt(pID, "Skin", SkinID);
    format(String, sizeof(String), "Dein Skin wurde von %s %s geändert.", GetTeamStatus(playerid), gPlayerName[playerid]);
    SendClientMessage(pID, GELB, String);
    format(String, sizeof(String), "Du hast den Skin von %s geändert.", gPlayerName[pID]);
    SendClientMessage(playerid, GELB, String);
    mysql_real_escape_string(gPlayerName[pID], mysql_Name);
    mysql_SetInt("accounts", "skin", SkinID, "user", mysql_Name);
    }
    else return SendClientMessage(playerid, ROT, "Du bist kein Teammitglied!");
    return 1;
    }


    //Edit: Fehler selber behoben^^ IsValidSkin funktion gebastelt.

    Einmal editiert, zuletzt von KKM ()

  • Fehler liegt hier:
    if(SkinID == 3 || 4 || 5 || 6 || 8 || 42 || 65 || 74 || 86 || 119 || 149 || 208 || 268 || 273 || 289) return SendClientMessage(playerid, ROT, "Ungültige Skin-ID!");


    Du kannst nicht direkt abfragen, ob SkinID == 3 , 4 , 5 , 6 oder 837 ... ist.
    Das muss man alles einzelnt machen.


    if( SkinID == 3 ||
    SkinID == 4 ||
    SkinID == 5 ||
    SkinID == 6 ||
    // usw
    ) return SendClientMessage(playerid, ROT, "Ungültige Skin-ID!");



    //Edit:
    stock IsValidSkin(skinid) //by Simon
    {
    #define MAX_BAD_SKINS 14
    static badSkins[MAX_BAD_SKINS] = {
    3, 4, 5, 6, 8, 42, 65, 74, 86,
    119, 149, 208, 273, 289
    };
    if (skinid < 0 || skinid > 299) return false;
    for (new i;i<MAX_BAD_SKINS;i++) {
    if (skinid == badSkins[i]) return false;
    }
    #undef MAX_BAD_SKINS
    return true;
    }
    Würde an deiner Stelle lieber die Funktion nutzen.
    if( !IsValidSkin(SkinID) ) return SendClientMessage(playerid, ROT, "Ungültige Skin-ID!");

  • Danke dir für die Information, jedoch ist das meiner Meinung nach, viel zu umständlich.
    Daher habe ich mir eine "IsValidSkin" funktion gebastelt.


    stock IsSkinValid(SkinID)
    {
    switch(SkinID) {
    case 3,4,5,6,8,42,65,74,86,119,149,208,268,273,289: return 0;
    }
    return 1;
    }