Beiträge von Kaliber

    if(!PlayerInfo[pID][LoggedIn]) return NO_CONNECT_P

    Schreib das so:


    C
    if(!IsPlayerConnected(pID) || !PlayerInfo[pID][LoggedIn]) return NO_CONNECT_P

    Denn pID wird auf INVALID_PLAYER_ID durch sscanf gesetzt ergo (65535) und da du das in das Array packst, das aber nur eine größe von 1000 hat, kommt es hier zu einem Fehler. Das bedeutet, dass du das abfangen musst.

    Das kannst du so machen oder auch:


    C
    if(pID == INVALID_PLAYER_ID || !PlayerInfo[pID][LoggedIn]) return NO_CONNECT_P

    Wobei der IsPlayerConnected sicherer ist, da er auch ohne sscanf funktionieren würde :)

    Muss ich in der Datenbank oder bei OnPlayerRegister Default Werte eintragen oder wo liegt der Fehler?

    Gibt 2 Möglichkeiten.


    Entweder du trägst in der Datenbank (also in der Tabelle) den Default Wert für die Spalte Euro ein und zwar auf 0.

    Oder du gibst diese beim Insert einfach mit, machst halt einfach noch ein `Euro` dazu und den Wert eben auf 0.

    Also in der Datenbank hat die erste crew die ID 1 ka wieso nicht null.

    Ja, da wird ab 1 gezählt.


    Aaaaaber trotzdem sind doch in deinem Array alle Einträge bei 0.


    Ich würde es definitiv bei 0 starten lassen und bei den Abfragen einfach sowas machen:


    C
    CrewInfo[PlayerInfo[playerid][Crew]-1][cName]

    noch eine frage bezüglich dazu: wie kann ich es umändern sodass das textlabel nur dem spieler angezeigt wird, der schießt (issuerid) Kaliber

    Nächstes mal, am Besten direkt in den ersten Thread deine Vorstellung schreiben, wie du dir das System vorstellst hahaha xD

    Mit allen Details, sowas ist nur schwer vorherzusehen hahaha xD


    Machste so:


    Achsoooo, schreib das doch hahahaha xD


    Mach es so:


    folgende fehlermeldungen

    Dann hast du wohl eine globale Variable die Label heißt, das nicht so juuut, aber auch egal, dann machs einfach so:


    C
    new string[32],Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof(string),"DMG: %.02f",amount);
    SetTimerEx("@DeleteDmgDraw",1000*10,0,"i",_:Create3DTextLabel(string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0)); //1000*10 = 10 Sekunden
    
    //Und dann außerhalb:
    @DeleteDmgDraw(i);@DeleteDmgDraw(i) {
        Delete3DTextLabel(Text3D:i);
    }

    Das hier erstellt das textlabel dort, wo die kugel den spieler trifft.

    Achsooo, ja sag das doch, dass du das willst :D


    Dann lösch das alles..und mach es so:

    Dann bleibt das Label 10 Sekunden da, wo der Spieler getroffen wurde.

    gibt es keine möglichkeit dies umzusetzen

    Doch natürlich, nur dachte so wäre es deutlich leichter, weil diese Funktion genau dafür ist...und kp, inwiefern da ein TextLabel überhaupt den Unterschied macht...


    Naja, du könntest folgendes machen:


    funktioniert alles wie gewollt, will aber dass das textlabel sagt wie viel damage man dem spieler hinzugefügt hat und nach 1ner sekunde wieder verschwindet/zerstört wird. weiß nicht wie weil der callback kein parameter für damage amount hat (wie bei OnPlayerTakeDamage). danke im voraus.

    Nutze am Besten: https://wiki.sa-mp.com/wiki/OnPlayerTakeDamage


    und dann zum Anzeigen: https://wiki.sa-mp.com/wiki/SetPlayerChatBubble