Beiträge von Kaliber

    Habe gerade iwie ein Kleines Problem.

    Nutze doch Arrays, damit kannst du das viel einfacher alles machen:



    Und dann schau mal aufs print :)

    Ich pushe das mal weil ich immer noch keine Lösung gefunden habe

    Mach das am Besten zu einer Funktion:


    C
    stock GivePlayerHealth(playerid, Float:add)
    {
        new Float:h;
        GetPlayerHealth(playerid, h);
        return SetPlayerHealth(playerid, h+add);
    }
    
    
    //Nutzung dann einfach:
    GivePlayerHealth(playerid, 50.0);

    Mal kurz eine frage...

    Du hast aber keine Plugins in die Server.cfg eingetragen und es scheint, dass ein paar c++ redistributable fehlen :)

    Weiß Jemand warum ?

    Timer sind unpräzise. Es kann gut sein, dass der Timer eig viel länger braucht.
    Dafür gibt es einen TimerFix oder stell die Animationszeit einfach bissl höher :)

    Würde nicht gehen weil die Werte alphabetisch sotiert werden sollen und das auch mit neu Erstellten

    Kannst du doch machen?!


    Ich sagte du kannst nur noch die Reihenfolge im Enum ändern, also etwas über Qualität setzten.
    Allerdings kannst du unten drunter alles erstellen.
    Und zu dem Zeitpunkt wo du das enum speicherst, ist es sortiert und wo du es lädst auch, da verändert sich ja nichts.

    Speichert der die auch einfach so ab und müssen die Werte in einer Reihe sein die bleibt oder kann man auch dynamisch im Nachhinein die Reihenfolge verändern?

    Nichts für ungut, aber das kannst du doch in 5 Sekunden mit einem einfachen Befehl testen, wo du das kurz speicherst die Werte einliest ...abfragst und speicherst..abfragst bla blub.


    Die Werte im Enum müssen aufjedenfall in einer Reihenfolge bleiben, sprich du kannst nicht plötzlich irgendwas über Qualität setzen oder das oberste Array verdoppeln.


    Das führt zu Fehlern, es sei denn du löscht nochmal die gespeicherte Datei und machst das neu, dann ist das egal.


    Aber im Array selbst, lädt er genau das in die Array Spalte..was eben gespeichert wurde, kp was genau du jetzt machen willst.

    Was im doc beschrieben ist wäre ein Klammerfehler.

    Nein, wenn du es testest siehst du auch, dass bei deinem Beispiel Error 14 auftaucht.


    Hier mal ein Beispiel für den Fehler:


    C
    switch(x)
    {
        case 0: print("hi");
    }


    Das geht ohne Probleme, da nur ein Statement auf das case folgt.



    C
    switch(x)
    {
        case 0: print("hi");print("wtf");
    }

    Jetzt geht das aber nicht mehr, da nur eine Anweisung folgen darf.
    Jetzt muss man darum einen Klammerblock machen oder diese durch ein , verbinden :)

    Und jetzt ist gut. Kindergarten hier.

    Klar wer kennt es nicht, man speichert Konstante Strings in Variablen, wäre ja auch zu einfach Konsten für Konsten und Variablen für Variablen zu nutzen.



    new Float:diff = ((playerAngle + 180) % 360) - Pos[1];


    new Float:diff = (floatround(playerAngle + 180) % 360) - Pos[1];


    Modulo ist hier nur für Integer definiert, also aus dem Float einfach einen Integer machen.

    Damit ist diese - mal wieder - völlig sinnfreie Diskussion für mich beendet. Eine direkte Zuweisung ist in diesem expliziten Fall nicht möglich (außer bei exakter Länge). Das kannst du einsehen oder auch nicht. Fakt ist, es geht nicht.

    Du weißt doch gar nicht was er zuweisen will, wtf.


    Er will sicher keinen statischen Wert zuweisen, sondern etwas aus einer Variable.


    Und da kann man das genau so machen:



    C
    enum tEnum {
    	e_Name[MAX_PLAYER_NAME] //24 Zeichen
    };
    new testArray[MAX_PLAYERS][tEnum];
    
    
    //Dann da wo er was zuweisen will, was du auch nicht weißt, deshalb hatte ich ihn gefragt...
    new name[MAX_PLAYER_NAME],x;
    if(sscanf(params,"sd",name,x)) return Bla(..);
    testArray[playerid][e_Name] = name; //Man kann das direkt so zuweisen

    Es kommt halt darauf an, was genau er vor hat.


    Da er aber darauf nicht geantwortet hat und du das nicht gefragt hast, kannst du es auch gar nicht wissen.


    Klar geht es mit format, strcat, strmid oder what ever. Gibt ja viele Möglichkeiten.

    Nicht in dem Fall. Probiere es aus bevor du etwas behauptest.

    Ja ich weiß ja nicht mal genau, was er machen will, das hat er ja nicht gesagt, aber prinzipiell kann man das direkt zuweisen.



    C
    enum pInfo
    {
    	pFunktionName[MAX_PLAYER_NAME]
    };
    new Spieler[pInfo], b[MAX_PLAYER_NAME] = "Hallo";
    
    
    Spieler[pFunktionName]=b;

    Ist ja kein Problem.

    auf einen bestimmten string setzen (den ich noch nicht habe)

    Du bekommst doch einen Fehler, zeig uns doch einfach mal die Zeile, wie du es bis jetzt machst.
    und das new PlayerInfo würde ich gern noch sehen



    zu:

    Das mit dem strcat ist ein richtig schlechter Ratschlag, denn sobald das 2x aufgerufen werden sollte...hat der das 2x da drinnen stehen.


    und format ist ultra lahm, wieso nicht einfach durch eine direkte Zuweisung lösen.


    Nur in den seltensten Fällen ist format nötig.

    (16929) : error 047: array sizes do not match, or destination array is too smal
    enum pInfo
    { // so sieht der anfang vom enum aus
    pFunktionName[MAX_PLAYER_NAME] ( IM ENUM)


    Habs schon mit n paar größen probiert (512 z.B)

    Bitte unterlasse Vollzitate, das ist unnötig.


    Desweiteren, zeig doch mal ganz genau wie du die Variable von dem enum deklariert hast und dann wie du den string deklariert hast, den du zuweisen willst und dann wie du es zuweist ^^


    Gib doch einfach ein wenig von deinem Code preis...oder sollen wir das alles erraten?! :D

    Wie setzte ich einen string auf ein Enum?


    So bspw:


    PlayerInfo[playerid][pFunktionName] = "fname";

    Das kannst du genau so machen...
    Falls es nicht geht...zeige uns Code und erkläre was du vor hast ^^



    Kann mir jemand erklären weshalb, wieso oder warum ?

    Das liegt daran, dass pPlayer immer 0 ist, sobald GetPlayerName aufgerufen wird, da du das vor dem sscanf aufrufst und erst ab dem sscanf aber pPlayer einen Wert zugewiesen bekommt ;)


    Die Lösung, einfach GetPlayerName unter das sscanf packen :)