Problem mit Megaphon (Selfmade)

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, liebe Scripter!
    Ich habe ein Problem mit dem Befehl /m(egaphon) [Text].
    Wenn ich z.B. /m Test eingebe, steht dort Unknown Command, obwohl ich den Befehl
    bei OnPlayerCommandText definiert habe.
    Hier der Befehl:


    dcmd_m(playerid,params[])
    {
    new Float:x,Float:y,Float:z;
    new text[64];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,0xC8C8C8FF,"/m(egaphon) [Text]");
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    if(GetPlayerVehicleID(playerid) == policecars[i] && gTeam[playerid] != TEAM_COPS)
    {
    if(IsPlayerInRangeOfPoint(i,100.0,x,y,z))
    {
    new Player[20], string[128];
    GetPlayerName(playerid,Player, sizeof(Player));
    format(string,sizeof(string),"[[Officer %s: %s]]", Player,text);
    SendClientMessage(i,0xF5FF00FF, string);
    }
    }
    return 1;
    }


    Bitte helft mir.
    mfG
    Walker


    Edit:
    Irgendwie verschieben sich hier alle Zeilen..Ist aber alles richtig eingerückt.
    Edit2:
    Befehl geändert. Trotzdem selbes Problem..

  • OnPlayerCommandText <---- Da ist dein problem. Dcmd cmds gehören da nicht rein nur die defines mit richtiger längenangabe. Lies dir bitte ein dcmd tut durch.


    E: Logigfehler


    Hab auch nicht gesagt das er es nicht definiert hat oder? Ich hab nur gesagt wo der Fehler ist.


    Erst lesen. thx :>

  • sicher das es so darstehen muss : i,100.0,x,y,z


    ??



    MFG

  • Hast du vllt schonmal probiert den Command einfach nochmal neu zu scripten ?


    lg

  • http://wiki.sa-mp.com/wiki/OnPlayerCommandText


    Zitat

    /Returning '0' is used to inform the server that the command
    has not been successfully processed, and passes it to other scripts.
    If there hasn't been a successful process, then you will get that
    'SERVER: Unknown Command.' error.

    überprüf mal was du da hast...
    EDIT:// zeig mal die Abfrage
    edit²: meine natürlich wie du policecars definiert hast. Ich denk mal es liegt einfach daran, dass du policecars[i] gemacht hast aber die Schleife für playerid ist. Weiß nicht wie ichs sonst erklären soll ^^

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • dcmd_m(playerid,params[])
    {
    new Float:x,Float:y,Float:z;
    new text[64];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,0xC8C8C8FF,"/m(egaphon) [Text]");
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++) {
    if(GetPlayerVehicleID() == policecars[playerid] && gTeam[playerid] == TEAM_COPS) {
    if(IsPlayerInRangeOfPoint(i,100.0,x,y,z)) {
    new Player[20], string[128];
    GetPlayerName(playerid,Player, sizeof(Player));
    format(string,sizeof(string),"[[Officer %s: %s]]", Player,text);
    SendClientMessage(i,0xF5FF00FF, string);
    }
    }
    }
    return 1;
    }



    So müsste es gehen, du hast erstens die Klammern bei for vergessen... und du hast "!=" statt "==" verwendet, bei der Abfrage, ob derjenige im Cop-Team ist.


    e// Farbcodes entfernt, die gehen ja im PWN-Code net. ^^


    e²// Glaub bei der Abfrage des Vehikels musst du überprüfen, ob die VehicleID == der VehicleID deines momentanigen Fahrzeugs ist, ich glaube das "policecars[playerid]" spricht die falsche variable an.. vermute ich!

  • Der Kollegah El_Cid hat es fast geschafft nur ich glaube das du das mit dem
    gTeam[playerid]!= TEAM_COPS
    so wolltest ^^



    Zum eigentlichen, zeig mal die Definition von policecars


    Bei einem Array Overflow wird der Code ja abgebrochen.


    EDIT://


    Solltest du das neue sscanf nützen, so bitte nutz es bei Strings so..


    sscanf(params,"s[64]",text)


    damit sscanf weiß, wie groß der Text sein darf, da er sonst standartmäßig glaube nur 32 Zeichen verwendet.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • new policecars[17];


    policecars[0] = AddStaticVehicle(427,1526.9020,-1645.7832,6.0292,180.5378,79,1); // Enforcer1
    policecars[1] = AddStaticVehicle(427,1530.5446,-1645.8856,6.0231,180.8919,79,1); // Enforcer2
    policecars[2] = AddStaticVehicle(427,1534.4513,-1645.7061,6.0228,181.1396,79,1); // Enforcer3
    policecars[3] = AddStaticVehicle(596,1574.4653,-1709.7980,5.6182,0.8002,79,1); // Streife1
    policecars[4] = AddStaticVehicle(596,1578.7090,-1709.9410,5.6135,359.0930,79,1); // Streife2
    policecars[5] = AddStaticVehicle(596,1583.1799,-1709.9551,5.6135,359.5174,79,1); // Streife3
    policecars[6] = AddStaticVehicle(596,1587.7135,-1710.0685,5.6137,359.5329,79,1); // Streife4
    policecars[7] = AddStaticVehicle(596,1600.4574,-1696.0933,5.6115,90.8372,79,1); // Streife5
    policecars[8] = AddStaticVehicle(596,1600.5017,-1691.8801,5.6116,90.5212,79,1); // Streife6
    policecars[9] = AddStaticVehicle(497,1567.5167,-1648.2770,28.5811,88.0347,79,1); // Heli1
    policecars[10] = AddStaticVehicle(497,1567.2305,-1659.2357,28.5610,89.1926,79,1); // Heli2
    policecars[11] = AddStaticVehicle(599,1544.4087,-1672.2642,6.0778,90.2491,79,1); // Ranger1
    policecars[12] = AddStaticVehicle(599,1544.5160,-1680.4310,6.0799,89.9911,79,1); // Ranger2
    policecars[13] = AddStaticVehicle(523,1544.7126,-1608.5378,12.9487,269.6245,0,0); // Motorad1
    policecars[14] = AddStaticVehicle(523,1544.2008,-1611.3737,12.9500,270.4173,0,0); // Motorad2
    policecars[15] = AddStaticVehicle(523,1547.6266,-1611.3483,12.9523,270.4173,0,0); // Motorad3
    policecars[16] = AddStaticVehicle(523,1548.0281,-1608.5801,12.9528,267.1387,0,0); // Motorad4


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    policecar(playerid);
    }
    return 1;
    }


    public policecar(playerid)
    {
    for(new i = 0; i < sizeof(policecars); i++)
    {
    if(GetPlayerVehicleID(playerid) == policecars[i] && gTeam[playerid] != TEAM_COPS)
    {//und dann..
    SendClientMessage(playerid,0xC8C8C8FF,"Du bist kein Mitglied des SAPD!");
    RemovePlayerFromVehicle(playerid);
    }
    }
    return 0;
    }


    Edit:
    Nach der selben Struktur hab ich z.B. /me oder /s gescriptet..es liegt NUR an der Abfrage.
    Nehme ich diese raus, funktioniert alles.


    Edit2:
    dcmd_m(playerid,params[])
    {
    new Float:x,Float:y,Float:z;
    new text[64];
    if(sscanf(params, "s",text))return SendClientMessage(playerid,0xC8C8C8FF,"/m(egaphon) [Text]");
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,100.0,x,y,z))
    {
    new Player[20], string[128];
    GetPlayerName(playerid,Player, sizeof(Player));
    format(string,sizeof(string),"[[ Officer %s: %s ]]", Player,text);
    SendClientMessage(i,0xFFFF00FF, string);
    }
    }
    return 1;
    }


    So funktioniert es, nur das nun jeder den Befehl nutzen kann.

  • Probiers mal aus:


    IsAPoliceCar(vehicleid)
    {
    for(new i = 0; i < sizeof(policecars); i++) if(vehicleid==policecars[i]) return true;
    return false;
    }


    dcmd_m(playerid,params[])
    {
    if(gTeam[playerid] != TEAM_COPS) return SendClientMessage(playerid,0xC8C8C8FF,"Sie sind kein Polizist.");
    if(!IsAPoliceCar(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid,0xC8C8C8FF,"Sie sind in keinem Polizeiwagen.");
    new playername[MAX_PLAYER_NAME],string[128],Float:PlayerPos[3];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),"[[Officer %s: %s]]", playername,string);
    GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]);
    if(sscanf(params,"s[64]",string))return SendClientMessage(playerid,0xC8C8C8FF,"/m(egaphon) [Text]");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerInRangeOfPoint(i,100.0,PlayerPos[0],PlayerPos[1],PlayerPos[2])) continue;
    SendClientMessage(i,0xF5FF00FF, string);
    }
    return 1;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Kopier den obigen Code neu, hatte ganz am Anfang nen Fehler ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ah scheiße, entschuldige... Kommt aus schlampigkeit ^^


    dcmd_m(playerid,params[])
    {
    if(gTeam[playerid] != TEAM_COPS) return SendClientMessage(playerid,0xC8C8C8FF,"Sie sind kein Polizist.");
    if(!IsAPoliceCar(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid,0xC8C8C8FF,"Sie sind in keinem Polizeiwagen.");
    new playername[MAX_PLAYER_NAME],string[128],Float:PlayerPos[3];
    GetPlayerName(playerid,playername,sizeof(playername));
    if(sscanf(params,"s[64]",string))return SendClientMessage(playerid,0xC8C8C8FF,"/m(egaphon) [Text]");
    format(string,sizeof(string),"[[Officer %s: %s]]", playername,string);
    GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerInRangeOfPoint(i,100.0,PlayerPos[0],PlayerPos[1],PlayerPos[2])) continue;
    SendClientMessage(i,0xF5FF00FF, string);
    }
    return 1;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!