[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo ich hab ein kleines Problem:


    Sobald ich sterbe:

    Code
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Attempted to read/write array element at index 65535 in array of size 1000
    [debug] AMX backtrace:
    [debug] #0 0002f768 in public OnPlayerDeath (0, 65535, 255) in selfmade.amx

    Public OPD:

    Ich bin Localhost drauf und konnte es nicht Testen wenn mich jemand mit einer waffe tötet.


    Aber ich vermute die Fehlermeldung kommt, weil killerid nicht gefunden werden konnte oder was meint ihr?

    Und wie könnte ich abfragen ob der TOD durch eine Explosion oder Kanten Bug passiert ist?


    //EDIT Hat sich erledigt, habe

    Code
    if(killerid != INVALID_PLAYER_ID)

    Benutzt.

    Du willst mich kennenlernen? Kauf mein Buch, Bia*ch!


  • Guten Abend,

    ich hab mal eine Frage, ich habe einen '_' in meinem Namen, diesen möchte ich gerne Splitten, um "Vorname" und "Nachnamen" getrennt anzeigen zu lassen.


    Code
    new splStr[2][20], strMsg[256];
    printf("Create - Name: %s", CharInfo[playerid][Name]);
    sscanf(CharInfo[playerid][Name], "p<_>s[20]s[20]", splStr[0], splStr[1]);
    format(strMsg, sizeof(strMsg), "{E68A00}Datenbank ID: {FFFFFF}%d {E68A00}| Vorname: {FFFFFF}%s {E68A00}| Nachname: {FFFFFF}%s {E68A00}| Geburtsdatum: {FFFFFF}%s",
        CharInfo[playerid][ID], splStr[0], splStr[1], CharInfo[playerid][Birthdate]);
    SendClientMessage(playerid, -1, strMsg);

    Leider spuckt er mir den strMsg nicht in den Chat aus.


    Oder kann sscanf ein '_' nicht Splitten?


    LG, DomeTastisch.

    Mich interessiert nicht, wessen Schuld es ist, vor allem nicht, wenn es meine eigene ist!

  • Tatsache, die Nachricht war einfach nur zu lang, ich danke euch.

    Dummer Fehler von mir.


    LG, DomeTastisch.

    Mich interessiert nicht, wessen Schuld es ist, vor allem nicht, wenn es meine eigene ist!

  • hey, hab folgenden code:

    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.

  • 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

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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:


    bekomme bei dieser zeile:

    Code
        else dmgLabel[playerid] = CreatePlayer3DTextLabel(playerid,string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0);

    folgende warnung:

    Code
    warning 213: tag mismatch
  • Ich habe den Code nochmal aktualisiert, schau nochmal rein und nimm den Neusten :)

    Danke, das scheint zu funktionieren aber nicht wie gewollt (da hätte ich auch gleich die ChatBubble funktion nehmen können wie du schon erwähnt hast.)


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

  • 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.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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.

    bekomme folgende fehlermeldungen:

    Code
    new string[32],Float:x,Float:y,Float:z,Text3D:label; //warning 219: local variable "label" shadows a variable at a preceding level   und    warning 203: symbol is never used: "label"
    label = Create3DTextLabel(string, 0xFF0000FF, x,y,z, 20.0, GetPlayerVirtualWorld(playerid), 0); //error 022: must be lvalue (non-constant)
  • 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);
    }

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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);
    }

    Wir kommen der sache näher aber das textlabel wird an der gleichen stelle (genau in der mitte des spielers) erstellt. bei meinem code (wo ich onplayerweaponshot benutzt habe) hat es das textlabel genau dort erstellt wo auch die kugel den spieler getroffen hat.

  • Achsoooo, schreib das doch hahahaha xD


    Mach es so:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Achsoooo, schreib das doch hahahaha xD


    Mach es so:


    vielen dank für deine hilfe jetzt funktioniert alles wie gewollt :)

    edit: 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

    2 Mal editiert, zuletzt von Herolot ()