Beiträge von Kaliber

    ob du einen VPN

    Nein ich nutze keinen VPN und selbst wenn, ist dieser sicherlich nicht Verursacher von solchen Problemen.


    Es gibt die Callbacks OnPlayerRequestClass und OnPlayerRequestSpawn.


    In dem ersteren habt ihr schon einige Fehler dies sollte euch schon bei dem Skin Change aufgefallen sein...ich weiß nicht genau was ihr da macht, aber es scheint, als ob ihr die Variable für die Spieler nie resetten würdet und diese überlaufen.
    Keine Ahnung ob ihr die noch für weitere Abfragen oder sowas verwendet, aber da ist irgendwo der Wurm drinnen.


    Bei den Spawn Sachen weiß ich nicht was ihr da macht, aber man fliegt ja vom Himmel genau da, wo die Positionen mit SetSpawnInfo oder AddPlayerClass gesetzt wurden.


    Eventuell returnt ihr da 0?! Das solltet ihr nicht tun.


    Es ist echt schwer euch ohne Code zu helfen, aber da ist irgendwo denke ich ein Fehler oder allgemein bei der Variablen Zurücksetzung für die Spieler. Weshalb es bei einigen geht und bei manchen nicht.


    //Edit: Aber mal kurz Realtalk:


    habe noch einen Account dann erstellt und ja dort bin ich gespawnt und ein Auto war da...und nun?!


    Es gab kein Tutorial ich wusste nicht was ich tun soll, das Tacho hat man schon öfter mal gesehen und joa...


    Ihr solltet eventuell die User besser in euren Server einweisen und zeigen, was sie so tun können...

    MYSQL ist ein "Feature" ?

    Glaube er hat sich verschrieben. Denke es sind die SQL Injections, die da als Feature angeboten werden und schon bei der Registration möglich sind xD


    Das Skin System am Anfang ist auch der Knüller drückst n paar mal shift und du hast nur noch CJ Skins, wow das wurde ja richtig gründlich getestet xD


    Man registriert sich und ist erstmal im Krankenhaus für 1 Minute...und danach bin ich in LOOP vom Himmel gefallen und gestorben und musste mich dann reloggen :D


    Das wurde ja alles so gut getestet, das scheint ja hier richtig professionell zu sein :D


    Dann aus Spaß habe ich mich wieder eingeloggt und bin wieder im Krankenhaus :)


    Ich mein...ich würd den Server ja echt gern Testen, aber im Krankenhaus seh ich nicht so viel, bis auf die gelben Krankenwagen und die Blauen Medic Autos?! :D


    Also von mir gibt es da 10/10 :)

    Auf jeden Fall cooler Grafik Mod, gefällt mir sehr :)


    Nun ich bin jemand der es eher mag Dinge in GTA zu ergänzen und nicht komplett abzuändern :)


    Deshalb fände ich es eigentlich nicer die vorhandenen Tunnel (da gibt es ja z.B. ein Gitter...das könnte man entfernen und den Tunnel da weiter führen und schauen, dass man nur minimal irgendwo was entfernen muss, um den Tunnel wieder nach oben führen zu lassen)


    Aber wie dem auch sei, es sieht sehr gut aus und ist eine nette Idee, noch nicht so oft gesehen! :)


    Weiter so :)

    aber raffe grade nicht wie ich jetzt noch den Inputtext rein baller

    Was gibt es da nicht zu raffen? Du musst den Code von mir nur 1:1 kopieren ^^


    Anstatt:


    C
    new pID[5];
    valstr(pID, pClicked[playerid]);
    ocmd_ban(playerid, pID, inputtext);


    Schreibst du:



    C
    new string[128];
    format(string,sizeof(string),"%d %s",pClicked[playerid],inputtext);
    ocmd_ban(playerid, string);

    Das /ban kannste da komplett rauslassen. In den String kommen nur die Parameter, die du übergibst. Du rufst doch die Ban Funktion auf und übergibst das, da musst du nicht /ban darein schreiben xD


    Ja, du musst dem Spieler einen weiteren Dialog anzeigen lassen, wo er den Bangrund eingeben kann.


    Und dann wirklich nur die 3 Zeilen die ich geschrieben habe. Da brauchst du dann kein valstr, da du format nutzt, welches das macht, was auch valstr macht.


    Musst die ban Funktion auch nicht 2x aufrufen...einfach wirklich nur die 3 Zeilen :D

    Naja, also deine Funktion brauch ja einen String und keinen integer.


    Da steht ja: ocmd:gethere(playerid, params[])


    Das params sagt aus, dass ein String benötigt wird und da kannst du keinen Integer übergeben. Kann sein, dass das der Compiler nicht richtig checkt wegen den Makros, aber wenn du crashdetect reinhauen würdest oder so, würde dir bestimmt ein Fehler ausgegeben werden ^^


    valstr packt einen Integer in einen String, wie ein format mit %d quasi, ist nur um einiges schneller und einfacher :)


    //Edit:
    Nein, das musst du dann z.B. so machen:



    new string[128];
    format(string,sizeof(string),"%d %s",pClicked[playerid],inputtext); //inputtext = der eingegebene Grund, kp wie du das regelst :D
    ocmd_ban(playerid, string);

    will es mit einem Query lösen

    Wenn du es so machst, wie ich es beschrieben habe, dann löst du es doch mit einem Query.


    Deine Art ist nicht nur ein Query, sondern mehrere Sub-Querys, welche doch jeweils wieder als eigenständiges Query interpretiert werden.


    Somit ist die Methode die ich vorschlage wesentlich performanter und besser für den Server ^^

    Nein, also überall static zu verwenden ist kompletter Quatsch, da du es dann genauso gut global deklarieren könntest.


    static hat 2 Eigenschaften.


    • Angenommen wir befinden uns in einem Include, dann kannst du dort global static verwende. Das sorgt dafür, dass in deinem Haupt Gamemode dieser Variablen Name nicht existiert und nur vom Include auf diese Variable zugegriffen werden kann. Dies ermöglicht eine Kapselung der Daten vom Include & Gamemode und somit eine sehr saubere Programmierung! :)
    • Du kannst static in einer Funktion verwenden, hier dazu mal ein Beispiel:

    Wir sagen du hast folgende Funktion:


    Wir sehen also, der Wert wird gespeichert, wie bei einer globalen Variable, nur ist diese nur innerhalb der Funktion verfügbar.


    Kann man machen, macht aber wie man sehen sollte nicht immer wirklich Sinn und kann bei falscher Anwendung zu schweren Fehlern führen! :)

    Ich rate dir davon ab strings global zu deklarieren die du in sub-Funktionen nutzt.


    Wenn schnelle Änderungen im ns-ms Takt auftreten, kann es da zu erheblichen Fehlern / Überschreibungen kommen.


    Zudem blockieren sie sehr viel Heap Speicher, dann kannst du weniger auf den Stack packen, der belegt wird, wenn du solche Strings in sub-Funktionen deklarierst, was dann schneller zu einer Heap/Stack Collission führen kann, wie man es in einigen Skripten heutzutage sieht.


    Deklarier einfach in der Sub-Funktion einen String so klein wie es möglich ist und gut ist. Dieser wird ja nach beenden der Routine wieder vom Stack geschmissen. Der nimmt also nur kurz Platz weg wohingegen der im Heap reservierte Speicher permanent Platz einnimmt + die .amx größer macht + sehr Fehler anfällig sein kann :)

    viel zu Rescourcen-Fressend

    Inwiefern darf man das verstehen?


    Wieso hast du überhaupt den String global deklariert?!


    Versuchs mal so:



    Musst halt auch immer neu den String auf deinen alten String packen und nicht immer überschreiben, sonst wird dir natürlich immer nur der Letzte Spieler angezeigt ^^

    Doofe Frage, aber willst echt da immer so n verschachteltes Query an den Server senden?


    Hast du seine Daten nicht eh schon in den Session Daten gespeichert?


    Dann kannst nämlich einfach diese addieren...dann wäreste direkt fertig, anstatt da so einen Mist zu machen ^^

    Dann zeigt er mir diesen error an:

    Schauen wir uns die Funktion doch einfach mal an:


    native SetDynamicObjectMaterialText(STREAMER_TAG_OBJECT objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0);
    Bedeutet der Materialindex und den Text musst du tauschen :D


    SetDynamicObjectMaterialText(g_Object[858], 0, "CT - Raum 3", 90, "Arial", 20, 1, 0xFF000000, 0x0, 1);


    Übrigens anstatt 0x0 kannst auch einfach 0 schreiben ^^