Objekt aus dem Enum attachen

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
  • Guten Abend Breadfish-Community,


    Ich möchte, wenn der Spieler vor nem Objekt ist ( Müllsäcke ) und ne Taste klick, dann soll er dieses Objekt
    was auf dem Boden war verschwinden und in seinen Händen Attachen...


    Folgendes habe ich versucht:


    Falls ihr den Enum braucht:



    Objekt wird folgendermaßen erstellt:

    Code
    Muellt_Info[i][Mueltonne] = CreateDynamicObject(Muell_Info[i][MuellObjekt],Muell_Info[i][m_posX],Muell_Info[i][m_posY],Muell_Info[i][m_posZ],Muell_Info[i][m_posRX],Muell_Info[i][m_posRY],Muell_Info[i][m_t_posRZ]);


    Der Fehler liegt da wo der Spieler die Taste drückt, aber ich weiß nicht was ich falsch gemacht habe? :o
    es handelt sich bestimmt um einen Denkfehler.


    Kann mir einer weiterhelfen?


    Vielen Dank :)




    //Edit (Screens hinzugefügt):
    sa-mp-004.png


    sa-mp-005.png

  • Versuch mal hiermit dem Spieler das Objekt zugeben. AttachDynamicObjectToPlayer(STREAMER_TAG_OBJECT objectid, playerid, Float:offsetx, Float:offsety, Float:offsetz, Float:rx, Float:ry, Float:rz);


    Soweit ich weiß musst du wenn du Dynamische Objekte erstellst auch mit den Streamer Natives weiter arbeiten... Kann sein das ich falsch liege^^

  • Versuch mal hiermit dem Spieler das Objekt zugeben. AttachDynamicObjectToPlayer(STREAMER_TAG_OBJECT objectid, playerid, Float:offsetx, Float:offsety, Float:offsetz, Float:rx, Float:ry, Float:rz);


    Soweit ich weiß musst du wenn du Dynamische Objekte erstellst auch mit den Streamer Natives weiter arbeiten... Kann sein das ich falsch liege^^

    hmmm, jaa stimmt habe daran nicht gedacht, passiert jedoch nichts...
    also das gleiche wie vorher ;(

  • ups, ja hatte vergessen hier zu ändern habe mal bei dem Enum überall ne 1 gehabt diese jetzt aber komplett entfernt sodass dieses Enum stimmt.


    Der IsPlayerInRangeOfPoint funktioniert ja, nur das Objekt wird gelöscht aber davor nicht Attached...

  • Aber wozu zerstörst du es erst? Mit AttachDynamicObjectToPlayer wird doch eh das Objekt dem Spieler angeheftet...
    Du müsstest dann ja Theoretisch, Zerstören -> Erstellen -> Anheften an den Spieler...


    Im Moment wenn das DestroyDynamicObject nicht ausgeklammert ist, Heftest du dem Spieler das Objekt an und zerstörst es direkt wieder, is ja eig klar das er dann nur mit der SpecialAction da steht^^


    Oder lieg ich da falsch?

  • ich hab mehrere "Varianten" versucht.


    Wie du schon sagtest habe ich mal DestroyDynamicObject ausgeklammert, dann war das Problem die Animation
    war richtig aber es wurde nichts Attached und das Objekt stand dann da noch.


    Dann kam mir auch die Idee erst zu entfernen, aber ich habe 3 Müllarten.
    Wenn ich diese lösche kann ich ihm ja nicht wieder dieselbe Art zuweisen, wenn doch wie könnte man das am einfachsten machen?
    Also ich habe 3 Arten (Art = 0, Art = 1, Art = 2), diese werden beim laden des Servers per Random zugeteilt...
    Und genau da stehe ich glaube ich auf dem Schlauch...


    Daher habe ich versucht wenn der Spieler im Radius von 3.0 ist soll das Objekt erst Atteched werden, dann die Animation und zuletzt entfernt werden, aber dann löscht der mir die aus der Hand ...

  • Probier mal das...

    AttachObjectToPlayer(Muell_Info[i][Mueltonne], playerid, 0, 0.5, -0.5, 0, 0, 0); Hier ist die Z-Koordinate ziemlich tief, evtl is die Tonne ja unter der Map^^ Habs nicht getestet...

  • ich habe grad den Überblick verloren ;(


    nochmal alles zusammengefügt was ich aktuell habe ( einiges habe ich bisschen verändert... )

    Code: bei GamemodeInit
    for(new i = 0; i < MAX_MUELLTONNEN1; i++)
    {
        new zufalltonne = random(3);
        Muelltonnen_Info1[i][MuelltonneErstellt1] = true;
        Muelltonnen_Info1[i][NachsteMuelltonne1] = 0;
        Muelltonnen_Info1[i][MuelltonneArt1] = zufalltonne;
        Muelltonnen_Info1[i][Mueltonne] = CreateDynamicObject(Muelltonnen_Info1[i][MuelltonneObjekt1],Muelltonnen_Info1[i][m_t_posX1],Muelltonnen_Info1[i][m_t_posY1],Muelltonnen_Info1[i][m_t_posZ1],Muelltonnen_Info1[i][m_t_posRX1],Muelltonnen_Info1[i][m_t_posRY1],Muelltonnen_Info1[i][m_t_posRZ1]);
    }



    Das ist jetzt komplett aktuell was ich habe, aber wenn ich jetzt die Space-Taste drücke passiert garnichts...
    vermutlich habe ich etwas übersehen....



    //edit:
    Was bedeuten die Serverlogmeldungen?



    //Edit2:
    @Jeffry hab die Fehler die mir in der Konsole angezeigt wurden behoben.
    Es lag daran da mein Streamer etwas veraltet war ( hatte davor nur 2.7.9 ) und jetzt auf Version 2.8.2 geupdatet.
    Damit wären diese Fehler behoben, jedoch wird immernoch nicht das Objekt Attached....

  • Was steht so im Server Log?
    for(new i = 0; i < MAX_MUELLTONNEN1; i++)
    {
    new zufalltonne = random(3);
    Muelltonnen_Info1[i][MuelltonneErstellt1] = true;
    Muelltonnen_Info1[i][NachsteMuelltonne1] = 0;
    Muelltonnen_Info1[i][MuelltonneArt1] = zufalltonne;
    Muelltonnen_Info1[i][Mueltonne] = CreateDynamicObject(Muelltonnen_Info1[i][MuelltonneObjekt1],Muelltonnen_Info1[i][m_t_posX1],Muelltonnen_Info1[i][m_t_posY1],Muelltonnen_Info1[i][m_t_posZ1],Muelltonnen_Info1[i][m_t_posRX1],Muelltonnen_Info1[i][m_t_posRY1],Muelltonnen_Info1[i][m_t_posRZ1]);
    printf("Erstellt: i: %d / Objekt: %d", i, Muelltonnen_Info1[i][Mueltonne]);
    }


    if(newkeys & KEY_SPRINT)
    {
    for(new i = 0; i < MAX_MUELLTONNEN1; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, Muelltonnen_Info1[i][m_t_posX1], Muelltonnen_Info1[i][m_t_posY1], Muelltonnen_Info1[i][m_t_posZ1]))
    {
    printf("Attache: i: %d / Objekt: %d", i, Muelltonnen_Info1[i][Mueltonne]);
    //AttachObjectToPlayer(Muelltonnen_Info1[i][Mueltonne], playerid, 0, 0.5, -0.5, 0, 0, 0);
    AttachDynamicObjectToPlayer(Muelltonnen_Info1[i][Mueltonne], playerid, 0, 0.5, 0.3, 0, 0, 0);
    //SetPlayerSpecialAction(playerid, SPECIAL_ACTION_CARRY);
    //DestroyDynamicObject(Muelltonnen_Info1[i][Mueltonne]);
    }
    }
    }

  • Serverlog steht folgendes:

    Was ich nicht verstehe, hatte den Streamer gepdatet danach kam keine Meldung mehr von [20:34:32] *** Streamer Plugin: AttachDynamicObjectToPlayer: YSF plugin must be loaded to attach objects to players

  • Das war nur als Quelle gedacht, das ist der Code (ein Teil davon) des Streamer Plugins, in dem ist die Meldung, die du im Log bekommst, zu finden (STRG+F).
    Was du benötigst ist das YSF Plugin.


    ist mir auch jetzt aufgefallen :whistling:


    Funktioniert jetzt einwandfrei!
    Dank dir @Jeffry, kann nun weiterarbeiten :D



    //Edit:
    Eine kurze Frage habe ich doch noch :D
    Sprich wenn man dann zu nem Checkpoint angelangt ist soll es nicht mehr Attached werden aber das Objekt soll sich bewegen und halt wieder in die Hand attached werden.


    Würde dies mit ReomovePlayerAttachedObject gehen?

  • Sprich wenn man dann zu nem Checkpoint angelangt ist soll es nicht mehr Attached werden aber das Objekt soll sich bewegen und halt wieder in die Hand attached werden.

    Um es zu entfernen musst du es mit DestroyDynamicObject löschen, und an der entsprechenden Stelle neu erstellen.

  • hmmm schade...
    Dann habe ich leider das nächste Problem, dachte das könnte man umgehen.
    Weil beim erstellen der Tonnen wird ja Random eine Art gelost und dementsprechend diese Mülltonne gefärbt.
    Wenn ich jetzt die Mülltonne nach dem Attachen lösche wie kann ich diese denn wieder färben?
    bzw diese Tonnenart erneut zuweisen?