Problem mit PlayerMessage

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
  • Tag Leute,
    habe mir soeben ein Handy-Menü gebastelt.
    Das Menü "Mein Profil" klappt wunderbar, aber das Menü "Services" will noch nicht so ganz hinhauen.
    Habe es so versucht:
    SendPlayerMessageToPlayer(medic_im_dienst[MAX_PLAYERS]==1,playerid,"Ich benötige hier einen Arzt!");
    SetPlayerMarkerForPlayer(medic_im_dienst[MAX_PLAYERS]==1,playerid,RED);
    Dies soll bezwecken, dass er eine Playernachricht ann alle Medic sendet, die momentan im DIenst sind.
    Allerdings kommen dann diese beiden Errors:
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : error 032: array index out of bounds (variable "medic_im_dienst")
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2245) : error 032: array index out of bounds (variable "medic_im_dienst")
    Ich hoffe ihr könnt mir helfen.


    Gruß,
    Nicorotom

  • D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : error 012: invalid function call, not a valid address
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : warning 215: expression has no effect
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : error 001: expected token: ";", but found ")"
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : error 029: invalid expression, assumed zero
    D:\gta server\0.3\gamemodes\nicorotom_real_life.pwn(2244) : fatal error 107: too many error messages on one line


    SendPlayerMessageToPlayer(medic_im_dienst(0-499)==1,playerid,"Ich benötige hier einen Arzt!");
    SetPlayerMarkerForPlayer(medic_im_dienst(0-499)==1,playerid,RED);

  • Statt unsinniges Zeugs zu posten hätte man ihm in der Zwischenzeit die kurze Lösung schreiben können...


    for(new i,a = GetMaxPlayers();i < a;i++)
    {
    if(IsPlayerConnected(i) && medic_im_dienst[i] == 1)
    {
    SendPlayerMessageToPlayer(i, playerid, "Ich benötige hier einen Arzt (Rote Makierung)!");
    SetPlayerMarkerForPlayer(i, playerid, RED);
    }
    }

    [align=center]
    Mta Script Editor - Work in Progress

  • Keine Sache.


    for(new i,a = GetMaxPlayers();i < a;i++)


    for ist im Prinzip nichts anderes als eine sich wiederholende Schleife die sich nach den in der Klammer stehenden Ziffern richtet.
    Zuerst mal definierst du oben new i das Standartmässig den Wert 0 hat, danach gibst du der mitdefinierten Variable a den Wert
    deiner derzeit spielenden User die sich auf dem Server befinden. (new i,a = GetMaxPlayers();)
    Das i in diesem Fall ist die Startposition des Loops (der sich wiederholenden Schleife) die hier bei 0 startet.
    0 deswegen weil es 0-499 Spielerid´s gibt.


    Im zweiten Abschnitt wird überprüft ob i < a -> i kleiner als a (deine Useranzahl) ist, das ist das Limit der Schleife.
    Sooft wiederholt sich der Loop, also einfach erklärt sooft bis alle Nummern bis zu der Spielerid des letzten Benutzers dranwaren. (i < a;)


    Am Ende eines Loops kommt optional noch die Schrittweite, das kannst du dir so vorstellen...
    i++;
    ist nichts anderes als
    i = i + 1;
    Das heißt jetzt im Verständlichen das er immer eine Id nach vorne hüpft, wäre natürlich auch möglich nach hinten oder Dezimalstellen (Kommastellen/Floats) nach vorne zu hüpfen
    was wir aber hier nicht brauchen, weil die Playerid´s Vollzahlen = Integer´s sind, Ziffern ohne Kommas.


    0
    1
    2
    3
    4
    5
    6
    7
    ...


    Dass was danach folgt ist eigentlich einfach, man überprüft ob die Id die gerade überprüft wird, sich auf dem Server befindet.
    Kann ja sein, das Playerid: 8 unbesetzt ist aber 9, 10 auf dem Server sind, weil der Benutzer frühzeitig ging.
    if(IsPlayerConnected(i))


    Danach kommt deine Variable die checkt ob die Spielerid die Variable auf 1 gestellt hat.
    Anschließend deine Funktionen :rolleyes:

    [align=center]
    Mta Script Editor - Work in Progress

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ja :D
    Danke Jason, hab meine Methode genommen ;)
    Funzt perfekt :D


    Wird manchmal nicht gesendet o.o
    Hier der Code:
    if(dialogid==8)
    {
    if(response)
    {
    if(listitem==0)//Arzt
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(medic_im_dienst[i]==1)
    {
    SendPlayerMessageToPlayer(i,playerid,"Ich benötige hier einen Arzt!");
    SetPlayerMarkerForPlayer(i,playerid,RED);
    }
    }
    }
    if(listitem==1)//Mechaniker
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(adac_im_dienst[i]==1)
    {
    SendPlayerMessageToPlayer(adac_im_dienst[playerid]==1,playerid,"Ich benötige hier einen Mechaniker!");
    SetPlayerMarkerForPlayer(adac_im_dienst[playerid]==1,playerid,RED);
    }
    }
    }
    if(listitem==2)//Polizei
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(pd_im_dienst[i]==1)
    {
    SendPlayerMessageToPlayer(pd_im_dienst[playerid]==1,playerid,"Ich benötige hier die Polizei!");
    SetPlayerMarkerForPlayer(pd_im_dienst[playerid]==1,playerid,RED);
    }
    }
    }
    }
    }

    Einmal editiert, zuletzt von Nicorotom ()