Beiträge von Jeffry

    Ich habe das Ganze übers Wochenende mal als "Proof of Concept" selbst erstellt.
    Man muss aber dazu sagen, dass es auf Grund der von SA:MP gegebenen Limits nicht wirklich praktikabel ist.


    Das Abspielen der GIFs funktioniert ohne Lags wie man im Video sieht. Das GIF wird alle 80ms aktualisiert, sodass die Frames flüssig ablaufen.


    Die Größe des GIFs lässt sich steuern (siehe Video). Ich habe es mal mit zwei verschiedenen Größen erstellt, grundsätzlich sind aber auch andere Größen möglich.
    Je nach eingestellter Draw-Distance kann das GIF auch von weitem gesehen werden, allerdings sieht man beim großen GIF schon, dass die Farben etwas verblassen. Wenn man etwas am Wetter spielt, könnte das eventuell noch besser bzw. auch schlechter werden.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    BITTE FOLGEN

    Also bei mir funktioniert das ohne Probleme, mit dem Code.




    Du könntest versuchen, das Objekt an der Stelle des Spielers (GetPlayerPos) zu erstellen, anstatt an der fest definierten, vielleicht hilft das. Ich hatte damit schon Probleme, wenn ich Objekte bei 0,0,0 erstellt habe.


    Das Array "Folgen" hast du auch mit MAX_VEHICLES deklariert, oder?

    nicht kommplet! Weil es muss ja nicht jeder gleich meine sachen kopieren können

    Ich benötige den ganzen Code, zumindest was das Objekt betrifft, andernfalls kann ich es schlecht beurteilen wo das Problem liegt, bzw. es selbst ausprobieren.
    Da es ohnehin nicht funktioniert, spielt es doch auch keine Rolle ob es jemand kopiert.

    Jetzt verstehe ich was du meinst. Du musst dich deutlicher ausdrücken.
    ocmd:notruf(playerid, params[])
    {
    new pID;
    if(Spieler[playerid][pFraktion] == 4)
    {
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
    if(Spieler[pID][pTot] <= 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht tot.");
    SetPlayerCheckpointEx(playerid, Spieler[pID][pTotX], Spieler[pID][pTotY], Spieler[pID][pTotZ], 3.0, CP_TYPE_SANI, INVALID_CHECKPOINT_TYPE);
    GameTextForPlayer(playerid, "~w~notruf~n~~r~redmarker", 5000, 1);
    }
    else if(Spieler[playerid][pFraktion] >= 1 && Spieler[playerid][pFraktion] <= 3)
    {
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
    if(pServicePolice[pID] == 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler benötigt keinen Polizist.");
    if(GetPlayerInterior(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
    if(GetPlayerVirtualWorld(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
    format(string, sizeof(string), "{33CCFF}Polizist %s hat deine Meldung entgegengenommen und ist nun auf dem Weg zu dir.", GetName(playerid));
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string), "{33CCFF}Du hast die Meldung von %s angenommen, mach dich auf den Weg zu ihm/ihr.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    pServicePolice[pID] = 0;
    GetPlayerPos(pID, pos[0], pos[1], pos[2]);
    SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 4.0, CP_SERVICE, CP_TYPE_POLIZEI);
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Sanitäter bzw. Polizist.");
    }
    return 1;
    }

    Dann sollte es so ausreichen, das wäre dann der gleiche Befehl wie zuvor, nur für Sanitäter und Polizisten zulässig.
    ocmd:notruf(playerid, params[])
    {
    new pID;
    if(Spieler[playerid][pFraktion] < 1 || Spieler[playerid][pFraktion] > 4) return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Sanitäter bzw. Polizist.");
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
    if(Spieler[pID][pTot] <= 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht tot.");
    SetPlayerCheckpointEx(playerid, Spieler[pID][pTotX], Spieler[pID][pTotY], Spieler[pID][pTotZ], 3.0, CP_TYPE_SANI, INVALID_CHECKPOINT_TYPE);
    GameTextForPlayer(playerid, "~w~notruf~n~~r~redmarker", 5000, 1);
    return 1;
    }


    Ich habe die ganzen Klammern und Einrückungen entfernt, da diese Art von Schreibweise, mit Anweisung hinter der if-Abfrage und darunter trotzdem eine eingerückte Klammer wahnsinnig verwirrend ist, unübersichtlich ist und sehr schnell zu Fehlern führt.

    Versuche es so:
    ocmd:accept(playerid, params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    new string[256], option[32];

    //Befehle mit Option und keinem Parameter:
    if(sscanf(params, "s[32]", option))
    {
    SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/accept [Option]");
    SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Optionen: {AFAFAF}Paket, Heirat, Ticket");
    return 1;
    }
    if(strcmp(option, "paket", true) == 0)
    {
    if(pAcceptPaket[playerid] != -255)
    {
    if(IsLoggedIn(pAcceptPaket[playerid]))
    {
    if(Spieler[playerid][pErstehilfe] == 1)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast bereits ein Erstehilfe-Paket.");
    new Float:pos[3];
    GetPlayerPos(pAcceptPaket[playerid], pos[0], pos[1], pos[2]);
    if(!IsPlayerInRangeOfPoint(playerid, 4.0, pos[0], pos[1], pos[2]))return SendClientMessage(playerid, COLOR_WHITE, "{33CCFF}* Du bist nicht in der Nöhe vom Sanitäter.");
    GiveMoney(playerid, -500);
    format(string, sizeof(string), "{33CCFF}* %s hat dein Erste-Hilfe-Paket für $500 gekauft.", GetName(playerid));
    SendClientMessage(pAcceptPaket[playerid], COLOR_WHITE, string);
    GameTextForPlayer(pAcceptPaket[playerid], "~w~Paket verkauft~n~~g~500$", 5000, 1);
    format(string, sizeof(string), "{33CCFF}* Du hast für $500 ein Erste-Hilfe-Paket von %s gekauft.", GetName(pAcceptPaket[playerid]));
    SendClientMessage(playerid, COLOR_WHITE, string);
    SendClientMessage(playerid, COLOR_WHITE,"{33CCFF}* Mit /erstehilfe kannst du deine Wunden Versorgen.");
    pAcceptPaket[playerid] = -255;
    Spieler[playerid][pErstehilfe] = 1;
    Spieler[pAcceptPaket[playerid]][pJobMoney] += 500;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast keine Angebot erhalten!");
    return 1;
    }
    return 1;
    }
    else if(strcmp(option, "ticket", true) == 0)
    {
    if(pAcceptTicket[playerid] != -255)
    {
    if(IsLoggedIn(pAcceptTicket[playerid]))
    {
    GiveMoney(playerid, -pAcceptTicketPreis[playerid]);
    GiveMoney(pAcceptTicket[playerid], pAcceptTicketPreis[playerid]);
    format(string, sizeof(string), "{33CCFF}Du hast den Strafzettel von %s in Höhe von $%d bezahlt.", GetName(pAcceptTicket[playerid]), pAcceptTicketPreis[playerid]);
    SendClientMessage(playerid, COLOR_WHITE, string);
    format(string, sizeof(string), "{33CCFF}%s hat deinen Strafzettel in Höhe von $%d bezahlt.", GetName(playerid), pAcceptTicketPreis[playerid]);
    SendClientMessage(pAcceptTicket[playerid], COLOR_WHITE, string);
    pAcceptTicket[playerid] = -255;
    pAcceptTicketPreis[playerid] = 0;
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist offline. Strafzettel wurde zurückgezogen.");
    pAcceptTicket[playerid] = -255;
    pAcceptTicketPreis[playerid] = 0;
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast keine Anfrage für ein Ticket erhalten.");
    return 1;
    }
    return 1;
    }
    else if(strcmp(option, "heirat", true) == 0)
    {
    if(pAcceptHeirat[playerid] != -255)
    {
    if(IsLoggedIn(pAcceptHeirat[playerid]))
    {
    if(Spieler[playerid][pVerheiratet] == 1)
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist bereits verheiratet.");
    pAcceptHeirat[playerid] = -255;
    return 1;
    }
    if(Spieler[pAcceptHeirat[playerid]][pVerheiratet] == 1)
    {
    SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist bereits verheiratet.");
    pAcceptHeirat[playerid] = -255;
    return 1;
    }
    if(GetMoney(pAcceptHeirat[playerid]) < 15000)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Das Heiraten kostet 15.000$");
    GiveMoney(pAcceptHeirat[playerid], -15000);
    format(string, sizeof(string), "{FF9933}NEWS: %s und %s sind nun verheiratet.", GetName(playerid), GetName(pAcceptHeirat[playerid]));
    SendClientMessageToAll(COLOR_WHITE, string);
    Spieler[playerid][pVerheiratet] = 1;
    Spieler[pAcceptHeirat[playerid]][pVerheiratet] = 1;
    SavePlayer(playerid);
    SavePlayer(pAcceptHeirat[playerid]);
    format(Spieler[playerid][pVerheiratetName], MAX_PLAYER_NAME+1, "%s", GetName(pAcceptHeirat[playerid]));
    format(Spieler[pAcceptHeirat[playerid]][pVerheiratetName], MAX_PLAYER_NAME+1, "%s", GetName(playerid));
    pAcceptHeirat[playerid] = -255;
    return 1;
    }
    }
    return 1;
    }

    //Befehle mit Option und einem Parameter:
    new pID;
    if(sscanf(params, "s[32]u", option, pID))
    {
    SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/accept [Option] [ID]");
    SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Optionen: {AFAFAF}Polizei");
    return 1;
    }
    if(strcmp(option, "polizei", true) == 0)
    {
    new Float:pos[3];
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht online.");
    if(Spieler[playerid][pFraktion] != 1 && Spieler[playerid][pFraktion] != 2 && Spieler[playerid][pFraktion] != 3)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Beamter.");
    if(pServicePolice[pID] == 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler benötigt keinen Polizist.");
    if(GetPlayerInterior(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
    if(GetPlayerVirtualWorld(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
    format(string, sizeof(string), "{33CCFF}Polizist %s hat deine Meldung entgegengenommen und ist nun auf dem Weg zu dir.", GetName(playerid));
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string), "{33CCFF}Du hast die Meldung von %s angenommen, mach dich auf den Weg zu ihm/ihr.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    pServicePolice[pID] = 0;
    GetPlayerPos(pID, pos[0], pos[1], pos[2]);
    SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 4.0, CP_SERVICE, CP_TYPE_POLIZEI);
    return 1;
    }

    return 1;
    }

    Poste dann bitte den aktuellen kompletten Befehl hier, den muss man dann etwas umbauen, damit das mit sscanf klappt und man auch bei den anderen Optionen keine ID eingeben kann.

    Das ist vom Prinzip exakt das gleiche, nur dass dort nicht "params" steht, sondern "inputtext". Das zu übertragen ist das angesprochene Grundverständnis.
    Du machst das ja nicht erst seit gestern, von daher solltest du dieses Grundverständnis schnellstens aufbauen. Nimm dir das zu Herzen und arbeite an dir.

    Die if-Abfrage darf nicht mit strval gemacht werden, sondern mit strlen, sonst kannst du die ID 0 nicht eingeben.


    pID sollte auch noch den Wert zugewiesen bekommen, sonst steht dort ja nie was drin.


    PS:
    Du könntest es auch einfach im Spiel ausprobieren.