Eine Nachricht (via string) nur an Spieler in der Reichweite schicken

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
  • Hey Leute,


    ich möchte, wenn ich /bomb eingebe, dass jeder Spieler in der Nähe die Nachricht "%s platziert eine Bombe!" erhält. (%s = name).


    Wie kann ich es machen, dass nur Spieler in der Nähe (z.B. 5 Metern) diese Nachricht lesen können? :O


  • new Float:x, Float:y, Float:z; // Fließkommavariablen definieren
    GetPlayerPos(playerid, x, y, z); // Position des Jenigen in diesen Variablen speichern, der den Befehl ausführt
    for(new i=0; i<MAX_PLAYERS; i++){ //Schleife, welche in der Anzahl aller möglichen Spieler durchläuft
    if(IsPlayerInRangeOfPoint(playerid, 5, x, y, z)){ //Abfragen, ob der Spieler mit der ID, die gerade von der Schleife durchlaufen wird, in der Nähe des Spielers playerid befindet
    //Nachricht an i senden
    }
    }

  • also du möchtest eine Nachricht an alle Spieler in der näche eines anderen Spielers senden?


    Ja genau!


    Sprich der Spieler X gibt dem Befehl /bomb ein und Spieler Y steht neben Spieler X und sieht deswegen auch im Chat, dass Spieler X eine Bombee platziert.


    Spieler Z hingegen befindet sich ganz wo anders und bekommt daher nicht mit, dass Spieler X eine Bombe platziert! :)

  • stock SendMessageNearPlayer(playerid,Float:range,color, string[])
    {
    Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,range,Pos[0],Pos[1],Pos[2]))
    {
    SendClientMessage(i, color, string);
    }
    }
    return 1;
    }


    nutzbar mit SendMessageNearPlayer(playerid,15.0,COLOR_BLUE,string);

  • Dankeschön Leute!


    Ich habe jetzt den stock von [DT]Sniper genommen und ansich funktioniert auch alles.


    Sobald ich aber den Stock benutze, kommen folgende Fehler :


    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : warning 221: label name "Float" shadows tag name
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : error 017: undefined symbol "Pos"
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : warning 215: expression has no effect
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : error 001: expected token: ";", but found "]"
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : error 029: invalid expression, assumed zero
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5032) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Die Zeilen:


    stock SendMessageNearPlayer(playerid,Float:range,color, string[])
    {
    Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,range,Pos[0],Pos[1],Pos[2]))
    {
    SendClientMessage(i, color, string);
    }
    }
    return 1;
    }


    Wenn ich komischerweise den stock nicht Benutze (sprich SendMessageNearPlayer auskommentiere) kommen keine Fehler, keine Warnings und alles läuft! :o

  • new Float:Pos[3];


    So ist es korrekt, sie wurde ja noch nicht definiert.


    //E:

    Zitat

    Wenn ich komischerweise den stock nicht Benutze (sprich SendMessageNearPlayer auskommentiere) kommen keine Fehler,


    Das ist nicht komisch, sondern normal, denn es gibt keine "Stocks", sondern nur Funktionen. Das Keyword "Stock" definiert nur, dass die Funktion nicht vom Compiler beachtet wird, wenn sie nie aufgerufen wird. Ergo: Es erscheinen keine Errors.

  • Nun kommen folgende Errors :/


    Fehler:
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5033) : warning 221: label name "Float" shadows tag name
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5033) : error 032: array index out of bounds (variable "Pos")
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5033) : warning 215: expression has no effect
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5033) : warning 203: symbol is never used: "Float"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Der komplette Stock:


    stock SendMessageNearPlayer(playerid,Float:range,color, string[])
    {
    new Float:Pos[3];
    Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,range,Pos[0],Pos[1],Pos[2]))
    {
    SendClientMessage(i, color, string);
    }
    }
    return 1;
    }


    Mit dem benutzen meinte ich das hier:


    ...
    SendMessageNearPlayer(playerid,15.0,COLOR_PURPLE,string2);
    ...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von Kinimod ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Du solltest den Code von mir nicht einfach einfügen, sondern mit der Zeile
    Float:pos[3]; ersetzen. :X


    Nun habe ich 1 Error & 1 Warning:


    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5040) : error 036: empty statement
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(5041) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Der Stock:




    stock SendMessageNearPlayer(playerid,Float:range,color, string[])
    {;
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,range,Pos[0],Pos[1],Pos[2]))
    {
    SendClientMessage(i, color, string);
    }
    }
    return 1;
    }

  • Finde den Fehler. ^^



    stock SendMessageNearPlayer(playerid,Float:range,color, string[])
    {; // Das ; hier entfernen ^^
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,range,Pos[0],Pos[1],Pos[2]))
    {
    SendClientMessage(i, color, string);
    }
    }
    return 1;
    }