Interaktionszone parallel zum Objekt erstellen

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, liebe Brotfische,


    new Float:TrashCans[][] =
    {
    {X, Y, Z, rX, rY, rZ},...
    }


    new TrashCans_ID[MAX_TRASH_CANS] = {-1,...};
    new TrashCans_InteractionField[MAX_TRASH_CANS] = {-1,...};
    Ich weise jedem Objekt eine Variable TrashCan_ID zu, weil jedes Objekt ein eigenes Interaktionsfenster, unabhängig von den anderen, hat.
    Mit jedem erstellten Objekt gibt es ein passendes Interaktionsfeld TrashCans_InteractionField in Form eines DynamicCylinders


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_TRASH_CANS; i++)
    {
    TrashCans_ID[i] = CreateDynamicObject(1345, TrashCans[i][0], TrashCans[i][1], TrashCans[i][2] , TrashCans[i][3], TrashCans[i][4], TrashCans[i][5], 0, -1);
    TrashCans_InteractionField[i] = CreateDynamicCylinder(TrashCans[i][0], TrashCans[i][1], TrashCans[i][3], TrashCans[i][3]+3.0, 2.0, 0, 0, -1);
    }
    return 1;
    }
    Hier loope ich durch die maximale Anzahl an Objekten und erstelle die Objekte + deren Interaktionsradien (DynamicCylinder) an derselben Stelle, wo die Objekte erstellt werden. Die Daten werden also aus dem Array TrashCans[][] bezogen.


    public OnPlayerEnterDynamicArea(playerid, areaid)
    {
    for(new i = 0; i < MAX_TRASH_CANS; i++)
    {
    if(areaid == TrashCans_InteractionField[i])
    {
    SendClientMessage(playerid, -1, "Press ALT to rummage through the trash.");
    }
    }
    return 1;
    }


    public OnPlayerLeaveDynamicArea(playerid, areaid)
    {
    for(new i = 0; i < MAX_TRASH_CANS; i++)
    {
    if(areaid == TrashCans_InteractionField[i])
    {
    SendClientMessage(playerid, -1, "You're out of range.");
    }
    }
    return 1;
    }
    Dieser Code ist provisorisch um zu sehen, ob das ganze denn auch funktioniert. Aber es wird mir nichts ausgegeben.

  • Du nimmst die Rotation als Höhe.
    TrashCans_InteractionField[i] = CreateDynamicCylinder(TrashCans[i][0], TrashCans[i][1], TrashCans[i][3], TrashCans[i][3]+3.0, 2.0, 0, 0, -1);


    Zu
    TrashCans_InteractionField[i] = CreateDynamicCylinder(TrashCans[i][0], TrashCans[i][1], TrashCans[i][2], TrashCans[i][2]+3.0, 2.0, 0, 0, -1);