Von welchen Systemen sprichst du?
Beiträge von Jeffry
-
-
Nein, eigentlich muss man keine Änderungen am Streamer vornehmen beim Upgrade.
Du kannst aber trotzdem versuchen die ganz aktuelle Version herunterzuladen und zu verwenden: http://forum.sa-mp.com/showthread.php?t=102865 -
Der iTD kennt leider keine Preview Models.
Oh, da er es vorgeschlagen hat, aber dann wird der nicht viel bringen.
Der hier ist allerdings ziemlich ähnlich, damit geht es: http://forum.sa-mp.com/showthread.php?t=543002
Aber es klappt ja bei ihm mit dem anderen ohnehin. -
Wenn die bei dir schon deklariert sind, dann lösche einfach die Neu-Deklarationen (Zeile steht im Error). Dann müsste es gehen.
-
In Pastebin?
Gehe nach ganz unten, dort hast du den RAW Code, da kannst du es kopieren. -
-
Hast du den .pwn Code des Editors den ich zuerst verlinkt hatte mal kompiliert?
Möglicherweise zeigt das den Fehler schon auf.Alternativ, starte den Code mal auf einem leeren Server (grandlarc Gamemode). Geht es dann?
-
Gibt es da kein anderen Editor?
Nicht wirklich, zumindest keinen den ich kenne und der was taugt.Hast du mal versucht herauszufinden an was es liegt, dass der Befehl nicht geht?
Oder du versuchst eben erst mal den iTD Editor, ob du damit klar kommst. -
Wieso entwirfst du denn Funktionen für alte SA:MP Versionen.
Abwärtskompatibilität, aus genanntem Grund. Dass es nichts zur Optimierung tut war mir klar, darum ging es auch in der ursprünglichen Funktion gar nicht.Hier, nochmal 10% schneller:
stock IsPlayerLookingAtPos(playerid, Float:x, Float:y, Float:z, Float:radius = 3.0, Float:maxdist = 100.0)
{
static Float:cx, Float:cy, Float:cz, Float:vx, Float:vy, Float:vz, Float:dist;
GetPlayerCameraPos(playerid, cx, cy, cz);
GetPlayerCameraFrontVector(playerid, vx, vy, vz);
cx-=x;
cy-=y;
cz-=z;
dist = VectorSize(cx, cy, cz);
return (dist > maxdist) ? 0 : _:(radius >= VectorSize(vx * dist + cx, vy * dist + cy, vz * dist + cz)); //<- Nur übernommen aus Geschwindigkeitsgründen, keineswegs befürwortet!
}Hast noch einen auf Lager?
-
Mit der Funktion VectorSize kannst du das schneller berechnen

Quelle: https://wiki.sa-mp.com/wiki/VectorSize
Ich habe die Funktion absichtlich nicht verwendet, da sie nicht mit den früheren Versionen kompatibel ist, in denen die Camera-Funktionen schon existieren.Zwecks dem return sagte ich ja bereits, dass ich meine Codes lieber übersichtlich und verständlich halte, sofern es nur ein paar Nanosekunden ausmacht, aber wenn du es so willst, an mir soll es nicht liegen.
Spoiler anzeigen stock IsPlayerLookingAtPos(playerid, Float:x, Float:y, Float:z, Float:radius = 3.0, Float:maxdist = 100.0)
{
new Float:cx, Float:cy, Float:cz, Float:vx, Float:vy, Float:vz, Float:dist;
GetPlayerCameraPos(playerid, cx, cy, cz);
GetPlayerCameraFrontVector(playerid, vx, vy, vz);
if((dist = floatsqroot(floatpower((cx = cx - x), 2) + floatpower((cy = cy - y), 2) + floatpower((cz = cz - z), 2))) > maxdist) return 0;
return (radius >= floatsqroot(floatpower((vx * dist + cx), 2) + floatpower((vy * dist + cy), 2) + floatpower((vz * dist + cz), 2)));
}
7 Millisekunden auf 100.000 Durchläufe schneller (~5%).Bzw, wer will, mit VectorSize:
Spoiler anzeigen stock IsPlayerLookingAtPos(playerid, Float:x, Float:y, Float:z, Float:radius = 3.0, Float:maxdist = 100.0)
{
new Float:cx, Float:cy, Float:cz, Float:vx, Float:vy, Float:vz, Float:dist;
GetPlayerCameraPos(playerid, cx, cy, cz);
GetPlayerCameraFrontVector(playerid, vx, vy, vz);
if((dist = VectorSize((cx = cx - x), (cy = cy - y), (cz = cz - z))) > maxdist) return 0;
return (radius >= VectorSize((vx * dist + cx), (vy * dist + cy), (vz * dist + cz)));
}Nur versteht den Code wohl kaum einer noch.
Das hier ist nicht der Code-Optimierungs Thread

-
Natürlich, in deinem Fall bringt dir die Funktion nicht direkt etwas, das ist klar. Da ist es effizienter so wie du es machst.
Ja, man kann einen Punkt auf einer Gerade berechnen, das geht schon, nur dazu muss man den Punkt ja kennen, um zu schauen ob er auf der Geraden liegt.EDIT:
@Jack_Bauer:
Das dürfte das sein, was du benötigst bzw. meinst:stock IsPlayerLookingAtPos(playerid, Float:x, Float:y, Float:z, Float:radius = 3.0, Float:maxdist = 100.0)
{
new Float:cx, Float:cy, Float:cz, Float:vx, Float:vy, Float:vz, Float:dist;
GetPlayerCameraPos(playerid, cx, cy, cz);
GetPlayerCameraFrontVector(playerid, vx, vy, vz);
dist = floatsqroot((cx-x)*(cx-x) + (cy-y)*(cy-y) + (cz-z)*(cz-z));
if(dist > maxdist) return 0;
vx = vx * dist + cx;
vy = vy * dist + cy;
vz = vz * dist + cz;
dist = floatsqroot((vx-x)*(vx-x) + (vy-y)*(vy-y) + (vz-z)*(vz-z));
if(dist > radius) return 0;
return 1;
}Bei x, y, z gibst du die Position ein, die du abfragen willst, ob der Spieler diese anschaut, bei radius gibst du die erlaubte Abweichung ein (man schaut ja nie direkt auf genau einen Punkt, es kann ja auch ein paar Zentimeter daneben sein) und bei maxdist gibst du die maximale Distanz zu dem Punkt ein (rein theoretisch kann man von jedem Punkt aus jeden Punkt anschauen, aber das macht ja keinen Sinn, wenn man in LV irgendwo steht, dass man dann einen Punkt in LS anschaut, theoretisch schaut man ihn zwar an, praktisch sieht man ihn aber gar nicht, das ist eben weil Geraden ja in beide Richtungen unendlich lang sind).
Somit könnte man auch abfragen, ob man ein Fahrzeug oder ein Objekt anschaut, oder gegebenenfalls sogar einen anderen Spieler.
Beispiele zur Nutzung:
Spoiler anzeigen 1.)
if(IsPlayerLookingAtPos(playerid, 1234.5, 987.6, 12.34)) printf("Spieler %d schaut Position an.", playerid);Spoiler anzeigen 2.)
new Float:x, Float:y, Float:z;
GetVehiclePos(myVeh, x, y, z);
if(IsPlayerLookingAtPos(playerid, x, y, z, 5.0, 20.0)) printf("Spieler %d schaut myVeh an und ist in der Nähe (20m)", playerid);Spoiler anzeigen 3.)
new Float:x, Float:y, Float:z;
GetPlayerPos(pID, x, y, z);
if(IsPlayerLookingAtPos(playerid, x, y, z, 1.0, 5.0)) printf("Spieler %d schaut Spieler %d an.", playerid, pID);Keywords: IsPlayerLookingAtPos, IsPlayerLookingAtObject, IsPlayerLookingAtVehicle, IsPlayerLookingAtPlayer, LookAtPos, PlayerFacePlayer, PlayerLookAtObject, SpielerSchautAufPos, SpielerSchautAufSpieler, SpielerSchautAufObjekt, SpielerSchautAufFahrzeug
-
Naja, wie gesagt, das Problem ist bei dem Code der Speicher, aus irgendeinem Grund kann er da nicht richtig drauf zugreifen.
Den Code, von dem pastebin, den du gepostet hast, setze den mal in einen Kommentar, damit er praktisch entfernt ist:
/*
Code hier
*/Dann kompiliere den Code. Kommt der Fehler mit dem Invalid memory access dann noch immer?
Falls der Fehler aus dem Teil dann weg ist, dann lösche dort das
new banstring[128];
aus dem Code und überall im Code (also der Include) wo das noch vorkommt (new banstring). Anschließend schreibe das
new banstring[128];
ganz oben in die erste Zeile der Include und kompiliere den Code neu. -
Schau dir das Tutorial zu den dynamischen Fraktions Fahrzeugen an:
[ SCRIPTING ] [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2Mit kleinen Änderungen bekommst du so auch ein Autohaus System hin, vom Grundgerüst, also speichern und laden, ist es prinzipiell genau gleich, du musst eben die eine oder andere Spalte hinzufügen.
Alternativ kannst du dir anschauen wie andere es gemacht haben:
http://forum.sa-mp.com/showthread.php?t=276887
http://forum.sa-mp.com/showthread.php?t=405408 -
Das passt nicht ganz, die Array Größe ist zu klein und die Abfrage ob der Spieler genug Geld hat passt nicht, da du es negativ speicherst.
// Waffe, Munition, Preis
new PWEAPON_LIST[ 3 ][ 3 ] = {
{ WEAPON_PISTOL, 50, 700 },
{ WEAPON_M4, 200, 400 },
{ WEAPON_AK, 180, 350 }
};public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
{
if( dialogid == DIALOG_PWEAPON && response )
{
new result[ 3 ] = PWEAPON_LIST[ listitem ];
if( result[ 2 ] <= GetPlayerMoney( playerid ) )
{
GivePlayerMoney( playerid, -result[ 2 ] );
GivePlayerWeapon( playerid, result[ 0 ], result[ 1 ] );
SendClientMessage( playerid, COLOR_HELP, "Viel spaß mit deiner Waffe." );
return 1;
}
SendClientMessage( playerid, COLOR_HELP, "Du hast nicht genügend Geld dabei." );
return 1;
}
return 1;
} -
Das muss bei OnPlayerConnect stehen.
Und das Semikolon am Ende nicht vergessen. -
Lade dir die aktuellen Includes, am besten den ganzen aktuellen Server herunter, du nutzt veraltete Versionen.
https://www.sa-mp.com/download.phpMit einem Textdraw Editor kannst du das dann ganz leicht erstellen.
http://forum.sa-mp.com/showthread.php?t=406833 -
Solange das Directive leer ist...wird dieser gesamte Code nicht funktionieren...

Natürlich, da muss ja auch seine Variable rein, die den Spieler als Cop identifiziert. Ich kann allerdings schlecht erraten wie er seine Variablen genannt hat.
Aber gut, ein Beispiel wäre:
#define IsACop(%0) SpielerInfo[%0][Cop] -
Klar, mach den Anfang einfach so:
#include <a_samp>//TransporterKlau
new CarRob[MAX_PLAYERS];
new Transporter[5];#define TEAM_BLUE_COLOR 0x8D8DFF00
#define COLOR_RED 0xAA3333AA
#define IsACop
//^Ausfüllen, z.B: #define IsACop(%0) SpielerInfo[%0][Cop]public OnFilterScriptInit()
{
Transporter[1] = AddStaticVehicleEx(428,1531.46948242,-1006.67529297,24.32791519,195.99908447,7,7,15); //Securicar
Transporter[2] = AddStaticVehicleEx(428,1527.69299316,-1009.80389404,24.32791519,223.99908447,7,7,15); //Securicar
Transporter[3] = AddStaticVehicleEx(428,1536.12683105,-1005.45129395,24.32012558,177.99597168,7,7,15); //Securicar
Transporter[4] = AddStaticVehicleEx(428,1540.00598145,-1005.41644287,24.32012558,177.99597168,7,7,15); //SecuricarCreateObject(3881,1531.77624512,-1028.67895508,24.84796333,0.00000000,0.00000000,336.00000000); //object(airsecbooth_sfse) (1)
CreateObject(2933,1524.44018555,-1028.68688965,24.55014801,0.00000000,0.00000000,336.00000000); //object(pol_comp_gate) (1)
CreateObject(3852,1520.82092285,-1015.57202148,24.75112915,0.00000000,0.00000000,0.00000000); //object(sf_jump) (1)
CreateObject(3666,1517.84216309,-1031.71252441,23.30518532,0.00000000,0.00000000,0.00000000); //object(airuntest_las) (1)
CreateObject(3666,1528.67578125,-1036.61425781,23.30782890,0.00000000,0.00000000,0.00000000); //object(airuntest_las) (2)
CreateObject(9241,1434.68164062,-988.94183350,58.57452393,0.00000000,0.00000000,268.00000000); //object(copbits_sfn) (1)
CreateObject(8132,1503.36340332,-1024.02246094,25.41958618,0.00000000,0.00000000,276.00000000); //object(vgschurch03_lvs) (1)
CreateObject(987,1535.78820801,-1025.68835449,23.07812500,0.00000000,0.00000000,66.00000000); //object(elecfence_bar) (1)
CreateObject(987,1543.14392090,-1009.20489502,23.07812500,0.00000000,0.00000000,65.99487305); //object(elecfence_bar) (3)
CreateObject(1411,1519.94177246,-1024.83801270,24.43064117,0.00000000,0.00000000,280.00000000); //object(dyn_mesh_1) (1)
CreateObject(1411,1519.70825195,-1023.70733643,24.43012428,0.00000000,0.00000000,279.99755859); //object(dyn_mesh_1) (2)
CreateObject(987,1539.56542969,-1017.34942627,23.07812500,0.00000000,0.00000000,65.99487305); //object(elecfence_bar) (6)return 1;
} -
Kannst du bitte mal die Zeile posten, die das ist?
-
Lade dir hier mal die aktuelle Version herunter:
http://forum.sa-mp.com/showthread.php?t=570927