Objectfragen [unten]

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
  • Ich habe ein Problem, undzwar möchte ich abfragen, ob man in einem der "WDCars" sitzt und wenn nicht,
    soll die Nachricht, dass man in keinem der Pickups sitzt erscheinen, aber jetzt wird einem die Nachricht egal, ob
    man drin sitzt oder nicht immer gesendet. Hab schon mehrere Sachen versucht, aber nichts wollte wirklich klappen.
    Hier mal der Befehl.
    COMMAND:getguns(playerid,params[])
    {
    new gID,str[124];
    if(sscanf(params, "d",gID))return SendClientMessage(playerid,0xC8C8C8FF,"/getguns [Anzahl]");
    if(gID < 1 || gID > 5) return SendClientMessage(playerid,0xC8C8C8FF, "Die Anzahl muss zwischen 1 und 5 liegen!");
    if(pInfo[playerid][hGuns] >= 5)return SendClientMessage(playerid,0xC8C8C8FF,"Mehr als 5 Waffeneinheiten kannst du nicht kaufen!");
    if(IsPlayerInRangeOfPoint(playerid,2,-682.3103,965.5809,12.1328) && pInfo[playerid][Job] == 1)
    {
    for(new i = 0; i < sizeof(wdcars); i++)
    {
    if(GetPlayerVehicleID(playerid) == wdcars[i])
    {
    pInfo[playerid][hGuns]+= gID;
    GivePlayerMoney(playerid,gID* -300);
    format(str,sizeof(str),"Du hast dir %d Waffeneinheiten für %d $ gekauft",gID,gID* 300);
    SendClientMessage(playerid,0x00A8FFFF,str);
    }
    else return SendClientMessage(playerid,0xC8C8C8FF, "Du sitzt in keinem der Pickups!");
    }
    }
    else return SendClientMessage(playerid,0xC8C8C8FF, "Du bist nicht am Waffenspot oder kein Waffendealer!");
    return 1;
    }


    Wenn Jemand weiterweiß, wäre es nett wenn sich derjenige meldet. :)
    mfG

  • Das liegt daran, dass jedesmal, wenn du in der "For"-Schleife eine Abfrage macht in die "else" geht.
    Da dort ein Wert zurückgegeben und somit die Funktion abgebrochen wird, bekommst du die Nachricht.
    Als Ausweg empfehle ich dir in der WENN Bedingung die Funktion zu unterbrechen und nach der for-Schleife davon auszugehen, dass der Spieler in keinem dieser Fahrzeuge(WDCars) sitzt.

  • COMMAND:getguns(playerid,params[])
    {
    new gID,str[124];
    if(sscanf(params, "d",gID))return SendClientMessage(playerid,0xC8C8C8FF,"/getguns [Anzahl]");
    if(gID < 1 || gID > 5) return SendClientMessage(playerid,0xC8C8C8FF, "Die Anzahl muss zwischen 1 und 5 liegen!");
    if(pInfo[playerid][hGuns] >= 5)return SendClientMessage(playerid,0xC8C8C8FF,"Mehr als 5 Waffeneinheiten kannst du nicht kaufen!");
    if(IsPlayerInRangeOfPoint(playerid,2,-682.3103,965.5809,12.1328) && pInfo[playerid][Job] == 1)
    {
    for(new i = 0; i < sizeof(wdcars); i++)
    {
    if(GetPlayerVehicleID(playerid) == wdcars[i])
    {
    pInfo[playerid][hGuns]+= gID;
    GivePlayerMoney(playerid,gID* -300);
    format(str,sizeof(str),"Du hast dir %d Waffeneinheiten für %d $ gekauft",gID,gID* 300);
    SendClientMessage(playerid,0x00A8FFFF,str);
    }
    else { return SendClientMessage(playerid,0xC8C8C8FF, "Du sitzt in keinem der Pickups!"); }
    }
    }
    else { return SendClientMessage(playerid,0xC8C8C8FF, "Du bist nicht am Waffenspot oder kein Waffendealer!"); }
    return 1;
    }

    | Green Day - Nickelback - Rise Against - 3 Doors Down | \m/

  • Das behebt das Problem mit sehr großen Sicherheit nicht!


    Das von mir gemeinte schaut wie folgt aus:

    COMMAND:getguns(playerid,params[])
    {
    new gID,str[124];
    if(sscanf(params, "d",gID))return SendClientMessage(playerid,0xC8C8C8FF,"/getguns [Anzahl]");
    if(gID < 1 || gID > 5) return SendClientMessage(playerid,0xC8C8C8FF, "Die Anzahl muss zwischen 1 und 5 liegen!");
    if(pInfo[playerid][hGuns] >= 5)return SendClientMessage(playerid,0xC8C8C8FF,"Mehr als 5 Waffeneinheiten kannst du nicht kaufen!");
    if(IsPlayerInRangeOfPoint(playerid,2,-682.3103,965.5809,12.1328) && pInfo[playerid][Job] == 1)
    {
    for(new i = 0; i < sizeof(wdcars); i++)
    {
    if(GetPlayerVehicleID(playerid) == wdcars[i])
    {
    pInfo[playerid][hGuns]+= gID;
    GivePlayerMoney(playerid,gID* -300);
    format(str,sizeof(str),"Du hast dir %d Waffeneinheiten für %d $ gekauft",gID,gID* 300);
    SendClientMessage(playerid,0x00A8FFFF,str);
    return 1;
    }
    }
    return SendClientMessage(playerid,0xC8C8C8FF, "Du sitzt in keinem der Pickups!");
    }
    else { return SendClientMessage(playerid,0xC8C8C8FF, "Du bist nicht am Waffenspot oder kein Waffendealer!"); }
    return 1;
    }

  • Perfekt, es klappt!
    Vielen Dank!


    Edit:


    Jetzt hätte ich noch eine etwas schwierigere Frage, also..
    Ich möchte, wenn man /Getguns eingibt, dass eine Kiste auf der Ladefläche erstellt wird (Nein, keine Koords die ich wissen will :D )
    Und wenn diese zerstört werden sollte, sind alle Waffen, die man mit /getguns erhalten hat weg. Ginge das?
    Wenn nicht, muss ich mir was anderes überlegen..

  • Du müsstest dann mit dem Befehl "/getguns" das gewünschte Objekt erstellen.
    Aber ob man abfragen kann, ob das Objekt kaputt ist, das bezweifle ich leider.
    Wenn es gehen sollte, müsstest du dann mit einem Timer abfragen, ob es kaputt ist und falls es kaputt ist musst du alle Waffen resetten.

    PN Support? Kannste knicken!

  • Naja, die Idee ist wohl nicht umsetzbar, da die meisten passenden Kisten garnicht zerstörbar sind.
    Kann ich irgendwie schnell die Koordinaten für die Kiste herausfinden, also wie ich sie "anhefte"?
    evtl. mit MTA Map Editor o.Ä.?
    Außerdem noch eine kleine Frage, wie frage ich denn ab, ob das Auto in dem man sitzt zerstört wird?