Beiträge von Kaliber

    Da mir aufgefallen ist, dass diese Funktion nicht existiert und dies sehr schade ist, habe ich mal eine Include geschrieben, die diese Funktion implementiert.


    Allgemeines:
    Folgende Funktionen werden durch das Include geliefert:


    native Attach3DTextLabelToObject(Text3D:id, objectid, Float:OffsetX, Float:OffsetY, Float:OffsetZ);
    native Detach3DTextLabel(Text3D:id);

    native AttachPlayer3DTextLabelToObject(playerid, PlayerText3D:id, objectid, Float:OffsetX, Float:OffsetY, Float:OffsetZ);
    native DetachPlayer3DTextLabel(PlayerText3D:id);


    Ich denke mal, die Attach Funktionen erklären sich von selbst :)
    Was zu dem Detach zu sagen ist, falls ihr zuerst das Label an ein Objekt und dann z.B. an ein Auto attacht, müsst ihr es zuerst mit Detach lösen, sonst funktioniert das nicht! :)


    Ich nutze einen Streamer:
    Falls ihr einen Streamer nutzt, müsst ihr die Include unter der streamer Include einfügen (sprich so):


    #include <streamer>
    #include <attach> //<< muss unter der Streamer-Include stehen


    Dann erkennt die Include das und verwendet andere Funktionen :)


    Speed:
    Also, wenn ihr 1000 3DTextLabeles erstellt und diese an 1000 Objekte attacht und sich dann alle in unterschiedliche Richtungen bewegen, selbst dann dauert ein Update aller Labels nur ~9ms!


    Ich nutze ein Filterscript?
    Wenn ihr die Include in einem Filterscript nutzt, müsst ihr das angeben und zwar so:


    #define FILTERSCRIPT
    #include <attach>


    Download:
    Source-Code: Pastebin
    Direkter-Download: MediaFire


    Schlusswort:
    Ich hoffe einige von euch werden es mal brauchen :)


    Falls ihr Fragen zu dem System oder der Anwendung hat, wenn Probleme auftreten oder ihr einen Kommentar abgeben wollt, einfach posten :)


    mfg. :thumbup:


    //Edit: Pastebin

    Warum so kompliziert? :huh:


    Du kannst das ganze einfach splitten:


    PHP
    <?php
        $req = mysqli_query($sqlcon, "SELECT members FROM gangs WHERE id= 1 ");
        $row = mysqli_fetch_array($req);
        $haystack = explode(",",$row[members]); //$row[members] = [`2165265875123`,`2165265875123`]
        for($i=0; $i<count($haystack); $i++) //Hat 2 durchläufe, beide male hat tmp den Wert 2165265875123
        {
            $tmp = substr(str_replace(array("[","]"), "", $haystack[$i]), 1, -1); //$tmp = 2165265875123
        }
    ?>


    mfg. :thumbup:


    //Edit: Code & DJ Deagle:

    Schreibe es so:


    <html>
    <head>
    <meta charset="UTF-8" />
    <script type="text/javascript">
    const euro = 3.0;
    function add() {
    for(var i=0,doc=document.getElementById("content"); i<5; i++) {
    doc.options[""+i].value = parseFloat(doc.options[""+i].value) + euro;
    doc.options[""+i].text = doc.options[""+i].text.slice(0,doc.options[""+i].text.indexOf("|")) + " | " + doc.options[""+i].value.replace(/\./g, ",") + "€";
    }
    return 1;
    }
    function r_z() {
    for(var i=0,doc=document.getElementById("content"); i<5; i++) {
    doc.options[""+i].value = (parseFloat(doc.options[""+i].value) - euro).toFixed(2);
    doc.options[""+i].text = doc.options[""+i].text.slice(0,doc.options[""+i].text.indexOf("|")) + " | " + doc.options[""+i].value.replace(/\./g, ",") + "€";
    }
    return 1;
    }
    </script>
    </head>
    <body>
    <div align="center">


    <br>
    <br>
    <p><img src="Mainlogo.png" alt="Logo"></p>
    <br>



    <p>
    <a href="Ticketverkauf.html"><img src="button1.png" width="160" height="34" border="0" alt="Home"></a>
    <a href="News.html"><img src="button2.png" width="160" height="34" border="0" alt="zurück"></a>
    <a href="Fragen.html"><img src="button3.png" width="160" height="34" border="0" alt="weiter"></a>
    <a href="thema.html"><img src="button4.png" width="160" height="34" border="0" alt="THEMA"></a>
    </p>


    <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="payPalForm">
    <input type="hidden" name="item_number" value="Ticketverkauf (Test)">
    Vor und Nachname:<br><input type="text" size="16" name="item_name" value=""><br><br>
    <input type="radio" checked name="color" onClick="r_z();" value="rot"> Stehplatz
    <input type="radio" name="color" onClick="add();" value="grün"> Sitzplatz (+3 Euro)<br><br><br>
    Dies ist eine Demo<br><br>
    <select style="color:#000" name="amount" id="content" size="1">
    <option name="0" value="0.99">100 Coins | 0,99&euro;</option>
    <option name="1" value="11.50">HPDN Event | 11,50&euro;</option>
    <option name="2" value="18.50">Molotow die Bude brennt | 18,50&euro;</option>
    <option name="3" value="7.99">Badenheimer Zerstoerungsquinett | 7,99&euro;</option>
    <option name="4" value="4.50">Scherz Lachen backen | 4,50&euro;</option>
    </div>
    <input type="hidden" name="cmd" value="_donations">
    <input type="hidden" name="business" value="testmail@testmaileqg2t.de">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="no_note" value="0">
    <br><br>
    <input type="image" src="https://igsw.versus-wf.de/idesk/file/pass.php/Files/Homepage/Spenden.png" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
    </form>
    </body>
    </html>


    mfg. :thumbup:

    1. Den Automaten Mappen
    2. Unter OnPlayerKeyStateChange abfragen ob man enter drückt und vor dem Automaten steht checken (newkeys & KEY_SECONDARY_ATTACK)
    3. Animation ausführen lassen (ApplyAnimation)
    4.


    new Float:h;
    GetPlayerHealth(playerid,h);
    if(h >= 100) return SendClientMessage(playerid,-1,"Sie können nichts mehr trinken!");
    SetPlayerHealth(playerid,h+25.0);


    mfg. :thumbup:

    aber könnte man die Objekte möglicherweise beim auswählen direkt so positionieren, dass
    man nicht die Möglichkeit hat die Objekte in der Luft schweben zu lassen?


    Nein, das ist nicht möglich, da du nicht weißt, wie groß das model von dem Objekt ist, wie weit du vom Boden exakt entfernt bist (mit einer .hmap oder dem San Andreas Plugin würdest du zwar die Z-Koordinate rausbekommen, aber du kannst ja noch in einem Objekt sein oder auf einem Auto...etc etc) und somit kannst du nicht die exakte Z-Koordinate bestimmen.


    Aber ich denke, es ist nicht so schlimm, das Objekt ein wenig zu bewegen :rolleyes:

    Ich sehe das Label mit den Rotationen hängt da oben einfach nur rum xD


    Schreib das mal so:


    //und unter OnPlayerEditObject
    if(response == EDIT_RESPONSE_FINAL)
    {
    Delete3DTextLabel(label);
    }
    if(response != EDIT_RESPONSE_FINAL)
    {
    new string[128];
    format(string,128,"X: %.02f | Y: %.02f | Z: %.02f",fRotX,fRotY,fRotZ);
    Delete3DTextLabel(label);
    label = Create3DTextLabel(string,0xFF4800FF,fX,fY,fZ+2.5,20.0,0,0);
    }


    Jetzt würde sich das Label mit dem Objekt mitbewegen und am Ende auch verschwinden ;)


    mfg. :thumbup:

    Ist es eigentlich möglich, bei drehen eines Objekts den Winkel anzeigen zu lassen?


    Wenn du mit "Winkel" die Rotations-Achsen meinst, dann natürlich :)


    new Text3D:label; //Oben ins Skript


    label = Create3DTextLabel("X: 0.0 | Y: 0.0 | Z: 0.0",0xFF4800FF,p[0],p[1],p[2]+2.5,20.0,0,0); //Dahin wo auch das Objekt erstellt wird


    //und unter OnPlayerEditObject
    new string[128];
    format(string,128,"X: %.02f | Y: %.02f | Z: %.02f",fRotX,fRotY,fRotZ);
    Update3DTextLabelText(label, 0xFF4800FF, string);


    mfg. :thumbup:

    DIALOG_GEBAEUDE_EINRICHTUNG


    Naja, du machst das dann einfach so:


    case DIALOG_GEBAEUDE_EINRICHTUNG: {
    if(!response) return 1; //hier hat er auf Beenden geklickt
    const Float:distance = 5.0;
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    p[0] += (distance * floatsin(-p[3], degrees)); //Damit das Objekt vor dem Spieler erstellt wird
    p[1] += (distance * floatcos(-p[3], degrees)); //Damit das Objekt vor dem Spieler erstellt wird
    new object = CreateObject(EinrichtungObjeckte[listitem][_:0],p[0],p[1],p[2],0,0,0);
    return EditObject(playerid, object);
    }


    Da wo ich _:0 geschrieben habe, musst du den Namen von deinem Enumerator Item einsetzen, also z.B. attachid oder was du da halt geschrieben hast :)


    new string[4000+1];


    Du kannst das genau bestimmen durch:


    new string[sizeof(EinrichtungObjeckte[]) * sizeof(EinrichtungObjeckte)];


    new EinrichtungObjeckte[][ObjekteEnum]


    und schreib das so:


    stock const EinrichtungObjeckte[][ObjekteEnum]


    Dann kannst du schneller auf die Werte zugreifen und nicht ausversehen mal verändern ;)


    mfg. :thumbup:


    //Edit: Code

    Wie viele Kentnisse brauche ich???


    Du musst wissen, wie man etwas speichert (hier wäre My/SQL/ite von Vorteil).


    Und dann musst du wissen, wie du es lädst und eine Variable mit einem MAX_VEHICLES Array erstellt, der du das alles zuweist...


    Und wissen, wie man einen Dialog erstellt wäre auch gut :)


    und die Nutzung von format wäre auch nicht verkehrt xD


    Ansonsten, kein Hexen-Werk :)


    mfg. :thumbup:

    OnQueryError() - Called


    Füge das mal ein:


    public OnQueryError(errorid, error[], resultid, extraid, callback[], query[], connectionHandle)
    {
    switch(errorid)
    {
    case CR_COMMAND_OUT_OF_SYNC:
    {
    printf("Commands out of sync for thread ID: %d",resultid);
    }
    case ER_SYNTAX_ERROR:
    {
    printf("Something is wrong in your syntax, query: %s",query);
    }
    }
    return 1;
    }


    und zeig dann mal den server_log ;)