Beiträge von Kaliber

    Du musst das erstmal in einer Variable erstellen und dann alles auf einmal anzeigen lassen:



    //Edit:
    PS: Lass die Schleife bei 0 anfangen und erhöhe lieber da wo du es brauchst den Wert um +1 ;)


    mfg. :thumbup:

    Wusste gar nicht, dass es so schwer ist Code zu kopieren :|


    So schreiben:


    ocmd:roller(playerid, params[])
    {
    if(GetPlayerScore(playerid) != 1) return SendClientMessage(playerid,-1,"Sie sind nicht Level 1!");
    if(!roller[playerid])
    {
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    roller[playerid] = CreateVehicle(462,p[0],p[1],p[2],p[3],146,146,-1);
    return PutPlayerInVehicle(playerid,roller[playerid],0);
    }
    DestroyVehicle(roller[playerid]),roller[playerid]=0;
    return SendClientMessage(playerid, COLOR_RED, "Du hast dein Roller zerstört");
    }


    mfg. :rolleyes:

    Ich will ein Befehl erstellen. /roller für den Neuling (Level 1)


    Wenn er /roller eingibt soll ein Pinker Faggio mit dem Kennzeichen >Neuling< Spawnen wo er direkt draufsitzt.
    Ebenfalls soll man den Roller mit /roller wieder löschen.


    Naja hier mal paar Ansätze:


    new roller[MAX_PLAYERS];


    //unter OnPlayerDisconnect
    if(roller[playerid]) DestroyVehicle(roller[playerid]),roller[playerid]=0;


    //Beim Roller mieten
    if(GetPlayerScore(playerid) != 1) return SendClientMessage(playerid,-1,"Sie sind nicht Level 1!");
    if(roller[playerid]) return SendClientMessage(playerid,-1,"Sie haben bereits einen Roller erstellt!");
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    roller[playerid] = CreateVehicle(462,p[0],p[1],p[2],p[3],146,146,-1);
    PutPlayerInVehicle(playerid,roller[playerid],0);


    //Beim Roller zerstören
    if(!roller[playerid]) return SendClientMessage(playerid,-1,"Sie besitzen keinen Roller!");
    return DestroyVehicle(roller[playerid]),roller[playerid]=0;


    mfg. :thumbup:

    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