Jo danke, bin grad ned daheim, werde das später aber mal testen.
Habe mir die atan2 Funktion auch schon angeschaut. Was ist denn der grundlegende Unterschied? dass man durch die zwei Parameter die Vorzeichen verwenden kann?
Beiträge von Sry4pwn
-
-
Und zwar versuche ich grade eine Funktion zu schreiben, die mir einen Winkel zurückgibt, zu dem ein Spieler zu einem Fahrzeug steht.
Das heißt.... wenn ein Fahrzeug irgendwie gedreht in der Map steht will ich wissen in welchem Winkel man vom Fahrzeug aus weggehen muss um zum Spieler zu kommen.Wenn das Fahrzeug A irgendwo steht will ich den Winkel zu S wissen (In dem Fall 315°)
-------(0)----- S
--------|--------
(90) - A - (270)
-------|---------
-----(180)-------Bis jetzt läuft das auch ganz gut. Mein Problem ist nur, dass die Funktion eben nicht Werte von 0°-360° sondern nur von 0°-180°-0° zurückgibt.
Sieht dann so aus:-------(0)----- S
--------|--------
(90) - A - (90)
-------|---------
-----(180)-------Hat einer ne Ahnung wie ich das umschreiben könnte, dass das funktioniert?
Hier mein bisheriger Code:Code
Alles anzeigenforward Float:facingAngleToVehicle(playerid, vehicleid); stock Float:facingAngleToVehicle(playerid, vehicleid) { new Float:vPos[4]; new Float:myPos[3]; GetVehiclePos(vehicleid, vPos[0], vPos[1], vPos[2]); GetVehicleZAngle(vehicleid, vPos[3]); GetPlayerPos(playerid, myPos[0], myPos[1], myPos[2]); myPos[0]-=vPos[0]; myPos[1]-=vPos[1]; new Float:ergebnis=acos(myPos[1]/floatsqroot(floatpower(myPos[0], 2) + floatpower(myPos[1], 2)))-vPos[3]; if(ergebnis<0) ergebnis+=360; return ergebnis; }
Danke schonmal
-
dann crasht wohl irgendwo dein Befehl.
Wenn es immer noch nicht funktioniert geht es wohl am schnellsten, wenn du in die darauffolgenden Zeilen jeweils etwas in der Konsole ausgeben lässt. Somit kannst du überprüfen ab wo der Befehl crasht und weißt welche Zeile daran schuld ist.Also in etwa so:
CodeSetPlayerSkin(playerid,285); print("Debug1"); GivePlayerWeapon(playerid,31,800); print("Debug2"); GivePlayerWeapon(playerid,20,34); print("Debug3"); GivePlayerWeapon(playerid,46,1); print("Debug4"); format(string,sizeof(string),"HQ: %s hat den SWAT-Dienst begonnen.",MeinName(playerid)); print("Debug5");
-
einfach gesagt:
Am anfang vom rennen setzt du mit SetPlayerRaceCheckpoint den ersten Checkpoint.Bei OnPlayerEnterRaceCheckpoint erhöhst du jedes mal eine Spielervariable um 1. Daraus kannst du dann ablesen, bei welchem Checkpoint der Spieler ist. Je nachdem setzt du im selben callback wieder mit SetPlayerRaceCheckpoint den nächsten Checkpoint fürs Rennen.
Aus dieser Variable kannst du letztendlich dann auch auslesen, wann das Rennen beendet wurde.Ist zwar ned ausführlich erklärt. Aber die Grundsätze sollten dir jetzt klar sein.
-
Wenn Dus ressourcensparend machen willst, machst du das ned mit ner Funktion,sondern mit hem makro/define. Die Verwendung ist im endeffekt die selbe, nur is eben ein methodebaufruf weniger.
-
-
Is in diesen Forum denn niemand in der Lage die fehlercodes nur annähernd zu lesen. Zwei Wörter aus dem ganzen Code zeigen dir schon, dass er die cameralookat Funktion nicht kennt. Als erstes schaut man dann nach ob man die Funktion richtig geschrieben hat.
-
Ich hab auch irwann mal n filterscript.released, in dem die meisten interiors sortiert in nem Dialog sind. hab bloß mitm Handy keinen Link da. such mal nach interiorlist by sry4pwn
-
Wieso speichert man eine einzelne variable, die wirklich nur einmal existiert mit MySQL?
MySQL Ost für viele daten der gleichen Form da. Bei einzelnen Variablen is es besser ein klassisches speichersystem zu verwenden. -
Was geht denn bei euch falsch?
Geh mit ner schleife alle Slots mit der Funktion getplayerweapondata durch
Den Rest solltest du hinkriegen? -
Außerdem muss die variable für armor auch zurückgesetzt werden wenn der Spieler angeschossen wird oä.
-
Weil er vielleicht ein zuverlässiges bussystem haben will und nicht einen Job wie jeder andere gf Server, den eh fast niemand nutzt. Außerdem.besteht dann wenigstens die chance, dass tatsächlich mal jemand mitm Bus fährt.
Naja b2t:
Zeig mal den zugehörigen npcmode her. -
Ähm sorry huggy?
Willst du mich eigentlich verarschen?
Das ist doch genau das, was ich die ganze Zeit sage. Dass man das Geld in ner variable speichern sollte und nicht in MySQL, weils einfach zu viele Ressourcen verbraucht.
Aber Nein, du kamst natürlich nichtmal lesen und sagst, dass meine Methode, gleich deiner Methode firm arsch is? -
Das liegt grundsätzlich nicht am mod, sondern am vehiclesurfing.
-
Richtig. Allerdings sind tuning und getrankeautomaten dann kostenlos.
-
Naja, es gibt eben mods, die das möglich machen. Allerdings kannst du mit Fahrzeugen nicht auf anderen Fahrzeugen surfen. Das heißt du könntest höchstens scripten, dass man in das interior geportet wird. Wie oben schon gesagt.
-
Ehrlich gesagt is es totaler Schwachsinn, das Geld nach jeder Transaktion auf ne Datenbank zu schreiben. Dafür sind Variablen nunmal da.
In meinem System, dass ich oben beschrieben habe, wird das geld einfach in die Obst gespeichert. Mit einem globalen Update Timer kannst du die beiden werte vergleichen und bei Ungleichheit das geld resetten, bzw den spieler kicken. -
Ich versteh nicht wirklich was du jetzt genau haben willst?
Verstehst du nicht wie du das Geld aus der db ausließt, oder willst du das Geld einfach nochmal in ne variable speichern um eventuellen "Hacks" vorzubeugen.Wenn das so ist, ist es bei einem bestehenden Script am einfachsten einfach GivePlayerMoney neu zu definieren. Natürlich kannst du auch ein neues "#define" machen.
Wäre dann sowas in der Art, wenn du ganz einfach weiterhin giveplayermoney benutzen willst:
Codenative __GivePlayerMoney(playerid, money) = GivePlayerMoney; #define GivePlayerMoney(%0,%1) (SetPVarInt(%0, "geld", GetPVarInt(%0, "geld")+%1), __GivePlayerMoney(%0,%1))
Natürlich musst du das dann für ResetPlayerMoney ergänzen, aber das sollte ja jetzt funktionieren
-
naja, es gehen trotzdem nur 1000 objekte auf einmal gestreamt.
Der Streamer streamt die objekte aus, die außerhalb der Reichweite eines Spielers sind.
Deswegen kann man eigentlich mehrere zig tausend objekte haben, allerdings immer nur maximal 1000 auf einem Fleck.Du könntest aber die Stream-distance von bestimmten Objekten runter setzen, die man wirklich erst aus nächster nähe sehen muss.
-
getvehiclemodelinfo sollte da schon ausreichen.
Die stoßstangen sollten ja ungefähr an der Position der Kennzeichen sein.
Für die Lichter kannst du im normalfall die maße des Fahrzeugs nehmen. Bei den meisten Fahrzeugen sind die Lichter nunmal an den Ecken und auf der Höhe der Stoßstange.