Wie funktioniert das mit den Enums?

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,


    würde gerne mal wissen wie das mit den Enums geht?


    Hier schonmal erstellt.
    enum MuellEnum
    {
    MuellID,
    Float:XPos,
    Float:YPos,
    Float:ZPos
    };
    new Muell[][MuellEnum]=
    {
    {2677, 1529.6143,-1439.0948,13.3828},
    {2677, 1506.7222,-1443.4045,13.3828},
    {2677, 1485.4395,-1438.5841,13.3828}
    };


    Wie erstelle ich dann das Objekt also Wie erstelle ich das Objekt und wie lösche ich dann einzelne Objekte also z.b: das was in der mitte createt wird


    Danke!

  • In Muell sind alle Koordinaten von Objekten (Zeile) in Spalten gespeichert. Diese Spalten können über die Namen des enums angesprochen werden. Das kommt einem Index der zweiten Dimension gleich. Das Objekt (also die Zeile) wird über die erste Dimension des Arrays ausgelesen.

    Also sowas:


    Muell[1][0] ist das gleiche wie Muell[1][MuellID].


    Also erstellst du ein Objekt, indem du die einzelnen Parameter nach obigem Beispiel ausliest und im CreateObject native verwendet.

  • In Muell selber speicherst du keine Integer (CreateObject gibt einen Integer zurück).


    Aus Muell liest du nur aus.


    Als kleines Beispiel:


    new anotherobject;
    anotherobject = CreateObject(Muell[0][MuellID], Muell[0][XPos],.....);


  • Ah Okay, und wenn ich jetzt sagen wir mal 10 Positionen habe. Dort soll überall dieses Müll Objekt erscheinen und ich will das wenn man drüber fährt das es verschwindet. Geht das auch mit den Enums?

  • Ja klar, denn du kannst alle Objecte (Zeile) deines Arrays via For Schleife durchlaufen.


    enum MuellEnum
    {
    MuellID,
    Float:XPos,
    Float:YPos,
    Float:ZPos
    };
    #define maxmuellobjects 3
    new Muell[maxmuellobjects][MuellEnum]=
    {
    {2677, 1529.6143,-1439.0948,13.3828},
    {2677, 1506.7222,-1443.4045,13.3828},
    {2677, 1485.4395,-1438.5841,13.3828}
    };
    new muellobject[maxmuellobjects];

    for(new i = 0;i<sizeof(Muell);i++)
    {


    muellobject[i] = CreateObject(Muell[i][MuellID], Muell[i][XPos],.....);
    }


    Dann kannst du bei OnPlayerPickupPickup überprüfen ob die pickupid der gleich ist, welche in einem der muellobject[] zellen gespeichert ist.


    edit: Das geht natürlich so nur bei Pickups und nicht bei Objekten.

  • Den define "maxmuellobjects" brauch man aber nicht dafür
    OnPlayerPickupPickup funktioniert nur wenn man zufuß unterwegs ist.
    Um es im Fahrzeug zu machen, brauch man schon einen Timer oder man macht es in OnPlayerUpdate rein (natürlich auch mit den Richtigen Abfragen etc)


    //edit
    Bei deinen Muster würd das auch so gehen
    new Muell[][MuellEnum]=
    {
    {2677, 1529.6143,-1439.0948,13.3828},
    {2677, 1506.7222,-1443.4045,13.3828},
    {2677, 1485.4395,-1438.5841,13.3828}
    };
    new muellobject[sizeof(Muell)];

    All in all it's just another brick in the wall

  • Hatte vorher so eine Abfrage:
    Wie müsste sie dann aussehen?


    Function Dreckweg()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new carid = GetPlayerVehicleID(i);
    if(IsASweeper(carid) && checkpointee[i] < 4 && dreck0 == 0 && IsPlayerInRangeOfPoint(i, 5.0, 1529.6143,-1439.0948,13.3828))
    {
    DestroyObject(dreckboden[0]);
    SendClientMessage(i, COLOR_WHITE, "Dreck 0 ist Weg");
    checkpointee[i]++;
    dreck0 = 1;
    }
    if(IsASweeper(carid) && checkpointee[i] < 4 && dreck1 == 0 && IsPlayerInRangeOfPoint(i, 5.0, 1506.7222,-1443.4045,13.3828))
    {
    DestroyObject(dreckboden[1]);
    SendClientMessage(i, COLOR_WHITE, "Dreck 1 ist Weg");
    checkpointee[i]++;
    dreck1 = 1;
    }
    if(IsASweeper(carid) && checkpointee[i] < 4 && dreck2 == 0 && IsPlayerInRangeOfPoint(i, 5.0, 1485.4395,-1438.5841,13.3828))
    {
    DestroyObject(dreckboden[2]);
    SendClientMessage(i, COLOR_WHITE, "Dreck 2 ist Weg");
    checkpointee[i]++;
    dreck2 = 1;
    }
    if(checkpointee[i] == 3)
    {
    SendClientMessage(i, COLOR_WHITE, "Limit Erreicht");
    checkpointee[i]++;
    SetPlayerCheckpoint(i,1533.8406,-1474.2155,9.1087,5.0);
    return 1;
    }
    }
    return 1;
    }

  • Function Dreckweg()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new carid = GetPlayerVehicleID(i);
    if(!IsASweeper(carid)) continue;
    if(checkpointee[i] == 3)
    {
    SendClientMessage(i, COLOR_WHITE, "Limit Erreicht");
    continue;
    }
    for(int o = 0;o<sizeof(Muell);o++)
    {
    if(IsPlayerInRangeOfPoint(i,5.0,Muell[o][XPos],Muell[o][YPos],Muell[o][ZPos])
    {
    DestroyObject(muellobject[o]);
    checkpointee[i]++;
    new string[64];
    format(string,sizeof(string),"%d Dreck weggeräumt",checkpointee[i]);
    SendClientMessage(i,color,string);
    }
    }
    }
    return 1;
    }


    Ich habs mal Sinngemäß angepasst. Hoffe ich zumindest.


  • for(new i = 0;i<sizeof(Muell);i++)
    {
    muellobject[i] = CreateObject(Muell[i][MuellID], Muell[i][XPos],Muell[i][YPos],Muell[i][ZPos]);
    }


    Hab das in mein Script eingefügt unter OnGameModeInit allerdings bekomme ich diese Warnings..
    number of arguments does not match definition
    number of arguments does not match definition
    number of arguments does not match definition