Beiträge von Kaliber
-
-
Du musst das erstmal in einer Variable erstellen und dann alles auf einmal anzeigen lassen:
PHP
Alles anzeigen<?php $out = '<select name="glDD" style="width: 100%">'; $Leader = mysqli_fetch_object(mysqli_query($sqlcon, "SELECT name FROM players WHERE playerid = '".$Gang->owner."'")); $out .= '<option value="0">Derzeitiger Leader: "'.$Leader.'"</option>'; $req = mysqli_query($sqlcon, "SELECT members FROM gangs WHERE id='".$_GET['id']."'"); $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 $member = mysqli_fetch_object(mysqli_query($sqlcon, "SELECT name FROM players WHERE playerid LIKE ".$tmp)); $out .= '<option value="'.($i+1).'">"'.$member->name.'"</option>'; } $out .= "</select>"; echo $out; ?>//Edit:
PS: Lass die Schleife bei 0 anfangen und erhöhe lieber da wo du es brauchst den Wert um +1
mfg.

-
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.

-
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.

-
Kaliber: Bist du dir sicher, dass GetObjectPos während des bewegens auch die richtige Postion ausgibt ?
Beim Streamer kann ich mir das vorstellen, aber SA:MP ist da ja recht faul
Jap, habs extra getestet und funktioniert einwandfrei
-
nicht mit dem Streamer.
Doch, so oder so liegt das Limit hier bei 1024...da mein Array nur so groß ist und naja...mal im Ernst wer brauch mehr als 1024 3DTextLabel
-
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 stehenDann 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: MediaFireSchlusswort:
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.

//Edit: Pastebin
-
-
Mein hoster meinte ich bräuchte eine andere um den Server zu starten. Könnt ihr mir den DL Geben ?
Ja, du brauchst aber diese Version: http://www.file-upload.net/download-8847075/plugins.rar.htmlmfg.

//Edit: Fail Link
-
Man muss jeden SubString aber in Variablen setzen damit man die mit den Nummern Verbundenen Benutzernamen aus der Database auslesen kann.
Das ist schon klar und ist ja auch so
Er kann ja seinen Code in die Schleife posten...oder er macht ein Array aus der Variable

Es ging nur darum ihm zu zeigen, wie er auf die Werte zugreifen kann

-
Warum so kompliziert?

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.

//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€</option>
<option name="1" value="11.50">HPDN Event | 11,50€</option>
<option name="2" value="18.50">Molotow die Bude brennt | 18,50€</option>
<option name="3" value="7.99">Badenheimer Zerstoerungsquinett | 7,99€</option>
<option name="4" value="4.50">Scherz Lachen backen | 4,50€</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.

-
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.

-
Was heißt ersetzen, diese Datei existiert ja nicht.
Wenn du googeln oder die SuFu nutzen könntest, wärst du schnell fündig geworden: [SERVER][ LINUX ] Failed (libssl.so.0.9.8: cannot open shared object file: No such file or directory)
mfg.

-
[21:16:37] Failed (libssl.so.0.9.8: cannot open shared object file: No such file or directory)
mfg.

-
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

-
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.

-
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.

-
ObjekteEnum
Nein, entweder du lässt die _:0 oder du schreibst da attachmodel oder attachid rein, den Namen halt, den du im Enum vergeben hast
-
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.

//Edit: Code