Beiträge von IPrototypeI

    @BlackAce: Dass das geht weiß ich, wollte aber nur wissen ob das bei zu vielen Objekten vielleicht zu Komplikationen kommen kann.



    Extra für mich brauchst du das nicht machen, da ich weiß wie es funktioniert.
    Aber andere, die es vielleicht nicht wissen, könnten es vielleicht gebrauchen ;)


    Eventuell hast du ja mein Ingame Mapeditor schon einmal gesehen , bei dem gab es bisher auch noch keine Probleme mit dem Laden der Daten oder updaten
    und getestet habe ich das mal bis 4000 Objekte

    Also da bleibe ich bei meiner Methode das via einem Define zu lösen auch, bei deiner Variante belegst du nochmal extra Speicher und bringst deine .amx noch zu anschwellen.



    #define Gras(%0) SetDynamicObjectMaterial(%0,0, 10560, "baseballground_sfs","Grass_128HV",0xFFFFFFFF)
    Gras(CreateDynamicObject(19381, 1286.54358, -1295.11670, 12.42060, 0.00000, 90.00000, 0.00000));


    Die wird doch durch die Funktion ausgelesen..


    Beispiel:

    new tree = GetNearestTree(playerid); // Da gibt er dir die nähste Baum-ID des Baumes aus..



    Bitte hier noch eine Abfrage hinzufügen ob -1 zurück geben wird.


    Wenn man auf einen negativen Index zurückgreift bei einem Array schmiert der Server ab.


    //edit


    Hammerfaul
    um den Baum zu löschen musst die die Objekt-ID , welche vom CreateDynamicObject oder CreateObject zurück geben wird in einer variable zwischenspeichern.


    PlayerDropBoxAudioStream(playerid,FileHash[],file[],Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0, Float:distance = 50.0, usepos = 0){
    new stream[300] = "https://dl.dropboxusercontent.com/s/";
    strcat(stream,FileHash);
    new i = strlen(stream),x;
    stream[i++] = '/';
    for(;;++i,++x){
    switch(file[x]){
    case '\32;':stream[i] = '%',stream[++i] = '2',stream[++i] = '0';
    case EOS:break;
    default:stream[i] = file[x];
    }
    }
    return PlayAudioStreamForPlayer(playerid, stream, posX, posY, posZ, distance, usepos);
    }


    Ich hab mal einen kleinen Code geschrieben, womit das einbinden von .mp3 datein auf einem dropboxaccount vereinfacht.


    Beispiel:


    PlayerDropBoxAudioStream(0,"w3bocxbmqmph11z","Martin Garrix - Proxy (FREE DOWNLOAD).mp3");



    Dazu braucht man den hash code , wenn man ein link erstellt.


    https://www.dropbox.com/s/w3bocxbmqmph11z/Martin Garrix - Proxy (FREE DOWNLOAD).mp3

    Sieht alles ganz nett aus , wie bereits schon angesprochen könntest du noch einen Analogen Tacho erstellen, die berechnung für die Nadel findest du in paar
    Skripts aus dem Englischen Forum


    Beispiel:
    http://forum.sa-mp.com/showthread.php?t=128157


    Da kannst du dir ja was kreatives einfallen lassen zur Gestaltung, leider habe ich kein Screen mehr sonst hätte ich dir meinen alten mal zeigen können.


    Als Nebeninfo:


    Um etwas memory zu sparen kannst du auch die ganzen Fahrzeugnamen packen.
    Das const sorgt für ein effektives Speichermanagement beim ausführen von Funktionen, welche die konstante benutzen



    static const VehicleNames[212][20 char] = {
    {!"Landstalker"},...



    Das ganze Array findet man auch in meinen Beiträgen. Char-arrays verbrauchen weniger globalen Speicher hier, da ein Index nur 1 Byte verbraucht statt den überlichen 4 Bytes.

    So fern du nicht vor hast die Daten via phpmyadmin oder sonst einem Programm zu ändern wäre das egal.
    Da du die Daten dahe rnur 1 mal auslesen müsstest.


    Du könntest ebenfalls das ganze schon via mysql checken und noch eine extra Spalte mit Aenderung hinzufügen , welche du auf 1 setzt, wenn du ein Datensatz geändert hast.


    Aber du kannst ja ein print hier setzen

    if(strcmp(tmp_var[1], Server[1], false)){
    print("test 2");
    format(Server[1], 100, "%s", tmp_var[1]);
    }


    um zu checken ob das aufgerufen wird beim hochfahren des Servers

    An sich macht dein code nicht viel Sinn, du rufst hier ebenso deine Funktion @UpdateServerSettings() nicht auf, daher wird auch nix geändert.
    auch die genutzten variabeln Server[0] werden nicht geändert



    new Server[5][100];



    @UpdateServerSettings();
    @UpdateServerSettings(){
    new tmp_var[5][100];
    mysql_query("SELECT * FROM `Einstellungen`;");
    mysql_store_result();


    mysql_fetch_field_row(Server[0], "Servername");
    mysql_fetch_field_row(Server[1], "Serverversion");
    mysql_fetch_field_row(Server[2], "Serverrelease");
    mysql_fetch_field_row(Server[3], "Serverkarte");
    mysql_fetch_field_row(Server[4], "Servermode");
    new str[100];
    format(Server[0], 100, "%s %s%s ", Server[0], Server[1], Server[2]);
    format(str, 100, "hostname %s", Server[0]), SendRconCommand(str);
    format(str, 100, "mapname %s", Server[3]), SendRconCommand(str);
    format(str, 100, "gamemodetext %s", Server[4]), SendRconCommand(str);
    return mysql_free_result();
    }


    Das würde schon reichen


    Nach deinen UPDATE -queries kannst du die funktion nochmal erneut aufrufen oder du passt das direkt bei OnDialogResponse an.

    if(strcmp(tmp_var[4], Server[4], false)){


    du lädst das ganze aus und vergleichst es danach mit zum beispiel Server[4] ist das eine konstante oder ist der string leer sollte er leer sein
    so wird die funktion auch nicht aufgerufen sondern nur wenn die string nicht gleich sind.


    Ebenfalls hast du mehrere Zeilen in der Datenbank ? Falls nicht könntest du deinem code einiges gutes tun

    Den code kann man hier sowieso teils in die tonne kicken.


    einfach beim erstellen des dialoges die carid noch anzeigen und anschließend diese bei OnDialogResponse extrahieren mit den string funktionen.
    Da der parameter inputtext den inhalt des listitems hat , welches man anklickt.


    Okay, das mit dem Interior setzen, das habe ich schon gemacht..
    Kann ich vlt die Koords von der Position, wo die Kamera 'stehen' soll, einfach die x / y Achse um einen kleinen Wert erhöhen und es dann verwenden, für die Koordinate, wo der hinschauen soll?
    Es ist für mein Haussystem und ich habe leider nur die Koords, von wo der schauen soll .. :/


    Klar ist sowas möglich du kannst auch ebenfalls eine kleine Berechnung machen
    http://wiki.sa-mp.com/wiki/GetPlayerCameraFrontVector


    was sinnvoller wäre für die ausgelesenen werte einfach konstanten nehmen


    aber generel gehts nur um den Teil object_x wäre die koordinate für SetCameraLookAt


    object_x = fPX + floatmul(fVX, fScale);
    object_y = fPY + floatmul(fVY, fScale);
    object_z = fPZ + floatmul(fVZ, fScale);

    Du solltest noch erwähnen das es ein Limit für SetPlayerAttachedObject gibt von 10 Objekten pro Spieler.


    Was wesentlich interessanter gewesen wäre, wäre das ändern der Waffenfarbe, da genau dafür SetPlayerAttachedObject genutz wird :D.

    Du hast ein Fehler in deinem SQL Befehl als kleiner Tipp, es gibt auch ein callback OnQueryError, welches dir das auch in die Server.log posten kann,
    Es kann auch sein das dein query einfach zu kurz ist.



    public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
    {
    printf("Fehlerid: %d",errorid);
    printf("Fehler: %s",error);
    printf("Callback: %s",callback);
    printf("Query: %s",query);
    return 1;
    }