Beiträge von alva

    stock SendAdminMessage(color,const message[])
    {
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pAdmin] >= 0)
    {
    SendClientMessage(i,color,message);
    }
    else
    {
    return 1;
    }
    }
    return 1;
    }


    So sollte das ganze funktionieren, aus dem "> 0" ein ">=" und ein else hinzugefügt.
    Übrigends, sollte der stock eigentlich schon funtionieren (?)
    Mach es doch einfach mal so:


    else
    {
    SendClientMessage(i,0x000FFFFF,"Bestätigung: Du bist kein Admin");
    }
    Dann einfach beim Admin Befehl die Abfrage rausmachen, ob der Spieler ein Admin ist zmb.

    Hi,


    IsPlayerAdmin(playerid)// Fragt ab, ob du dich ingame mit dem Rcon Passwort eingeloggt hast, also /rcon login [pw aus der server.cfg].
    Also, überprüf mal, ob du dich ingame auch eingeloggt hast.


    Gruß,

    Ich habe das ",.." entfernt, da bei mir ein Warning kam.
    Habe nun anstatt ",.." ",..." benutzt, also 3 Punkte anstatt 2.
    Jedenfalls sieht der Befehl nun so aus:


    Bei Onplayerconnect, wird KilledBy auf Invalid_Player_id gesetzt.
    KilledBy[playerid] = INVALID_PLAYER_ID;


    Beim Sterben auf killerid.
    KilledBy[playerid] = killerid;


    und hier nun der Befehl.
    ocmd:punish(playerid,params[])
    {
    #pragma unused params
    new jailplayer;
    jailplayer = KilledBy[playerid];
    if(KilledBy[playerid] != INVALID_PLAYER_ID)
    {
    new string[128];
    format(string,sizeof(string),"%s wurde von %s ins Prison teleportiert, Grund: Kill in einer NO DM Zone.",PlayerName(jailplayer),PlayerName(playerid));
    SendClientMessageToAll(COLOR_RED,string);
    }
    else
    {
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest von niemanden getötet.");
    }
    return 1;
    }


    Tut mir leid, das ich mich ein wenig dumm anstelle, mit soetwas kannte ich mich noch nicht so gut aus :)
    BTW: Finde ich es richtig gut, das du es richtig erklärst und nicht einfach den Code postest und dann einfach Copy & Paste.
    Ich habe es zwar verstanden, aber konnte es Anfangs nicht so gut umsetzen, da ich nicht genau wusste, wie :)
    Jedenfalls geht es nur in einer No DM Zone und zwar in der 1:
    Hier mal die Positionen, ich glaube es liegt daran, das die anderen Zonen zu groß sind (?)


    new NoDmSystem[][nodm]=
    {
    /*MinX, MinY, MaxX, MaxY*/
    {1687.613, -1962.151, 1820.712, -1859.51},// Hier gehts
    {1387.189, -1879.249, 1592.542, -1725.287}, // hier gehts nicht
    {2323.897, -712.3504, 2639.2, -478.7929} // Hier gehts nicht
    };

    Okey, bisher habe ich alles so:
    ( Die Strafe wird später eingeführt, habe zuerst nur eine Message an alle geschickt.)


    new KilledBy[MAX_PLAYERS] = {INVALID_PLAYER_ID};


    public OnPlayerDeath(playerid, killerid, reason)
    {
    for(new nodmsys;nodmsys<sizeof(NoDmSystem);nodmsys++)
    {
    if(IsPlayerInArea(playerid,NoDmSystem[nodmsys][nMinX],NoDmSystem[nodmsys][nMinY],NoDmSystem[nodmsys][nMaxX],NoDmSystem[nodmsys][nMaxY]))
    {
    KilledBy[playerid] = killerid;
    new string[128];
    format(string,sizeof(string),"[NO-DM Zone] %s hat dich in einer NO-DM Zone getötet, tippe /punish um ihn zu bestrafen. Nach 30 Sekunden ist dies nicht mehr möglich.",PlayerName(killerid));
    SendClientMessage(playerid,COLOR_WHITE,string);
    }
    else
    {
    return 0;
    }
    }
    }



    ocmd:punish(playerid,params[])
    {
    #pragma unused params
    new jailplayer;
    jailplayer = KilledBy[playerid];
    new string[128];
    format(string,sizeof(string),"%s wurde von %s ins Prison teleportiert, Grund: Kill in einer NO DM Zone.",PlayerName(jailplayer),PlayerName(playerid));
    SendClientMessageToAll(COLOR_RED,string);
    return 1;
    }


    Jetzt müsste ich es nurnoch hinkriegen, bein /punish ob der Spieler überhaupt getötet wurde von jemanden.
    Nur weiß ich nicht ganz wie ich das hinkriegen soll:


    if(KilledBy[playerid] = jailplayer) oder wie :D?

    Das Problem ist einfach folgendes:
    Der Spieler der den /punish Befehl schreibt, portet - falls es mehrere Leute gibt, die in einer No DM Zone getötet haben - Alle von den Leuten ins Prison.
    Jedoch soll playerid nur seine killerid ins Prison porten, sonst könnte ja einfach jeder /punish eingeben und alle kommen ins Prison.


    Mellnik
    Diese Methode könnte ich ausprobieren, jedoch weiß ich nicht wie ich anfangen soll.


    Gruß,

    Heyho, wie kann man einen "/punish" für eine No DM Zone scripten.
    Zmb. wenn ab, xy in einer No DM Zone tötet , das man den befehl /punish schreiben kann, damit der Spieler für 120 Minuten in den Knast kommt.
    Ich hatte mir da schon was gedacht:


    Unter onplayerdeath, setzt man eine PVar von einem Spieler auf 1, (von killerid), dann schreibt man den Befehl ( ich bevorzuge ocmd ) dieser geht eine for schleife durch und fragt die Spieler ab, die jemanden in einer NO DM Zone getötet haben und wenn true -> Prison und wenn false -> kein Prison.
    Jedenfalls habe ich mir das vorgestellt, das man nur den killerid von sich selbst ins Prison stecken kann.


    Jemand eine Idee, wie man es anders machen könnte?

    Hallo Leute,




    Man sieht, dass in einer No DM Zone das Textdraw angezeigt wird und in der anderen nicht.
    Hier das Sript, falls ihr mehr braucht einfach sagen :D
    ( Das Enum ist auf jedenfall richtig ^^ )


    new Text:Textdraw0;
    Textdraw0 = TextDrawCreate(540.000000, 420.000000, "NO-DM ZONE");
    TextDrawBackgroundColor(Textdraw0, -1);
    TextDrawFont(Textdraw0, 1);
    TextDrawLetterSize(Textdraw0, 0.360000, 1.500000);
    TextDrawColor(Textdraw0, -16776961);
    TextDrawSetOutline(Textdraw0, 1);
    TextDrawSetProportional(Textdraw0, 1);
    new NoDmSystem[][nodm]=
    {
    /*MinX, MinY, MaxX, MaxY*/
    {1687.613, -1962.151, 1820.712, -1859.51},// zivispawn
    {1387.189, -1879.249, 1592.542, -1725.287}, // sh ( noch fail )
    {2323.897, -712.3504, 2639.2, -478.7929} // test ( sobald hier wieder eins runter kommt, wird es in diesem nicht mehr angezeigt, also immer nur in der Zone die hier ganz unten ist. )
    };
    public Nodm_Abfrage()
    {
    for(new i;i<MAX_PLAYERS; i++)
    for(new nodmsys;nodmsys<sizeof(NoDmSystem);nodmsys ++)
    {
    if(GetPVarInt(i,"loggedin") == 0)continue;
    if(IsPlayerInArea(i,NoDmSystem[nodmsys][nMinX],NoDmSystem[nodmsys][nMinY],NoDmSystem[nodmsys][nMaxX],NoDmSystem[nodmsys][nMaxY]))
    {
    SetPlayerArmedWeapon(i, 0);
    TextDrawShowForPlayer(i, Text:Textdraw0);
    }
    else
    {
    TextDrawHideForPlayer(i, Text:Textdraw0);
    }
    }
    return 1;
    }


    Ich hoffe ihr wisst eine Lösung


    /e: Die koordinaten sind auch richtig.

    Genau, kann man aber leider durch Einfg einfach umgehen.
    Du kannst dir ja dennoch einen /explosion Befehl einfügen.


    ocmd:explosion(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,COLOR_GREY,"Du bist kein Admin Rang 1!");
    new pid;
    new Float:x,Float:y,Float:z;
    if(sscanf(params,"u",pid))return SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /explosion [ID]");
    GetPlayerPos(pid,x,y,z);
    CreateExplosion(x, y, z, 12, 10.0);
    SendClientMessage(pid,COLOR_YELLOW,"Du wurdest auf Healhack kontrolliert!");
    return 1;
    }


    Ich weiß nicht ob er gerade richtig ist, ist hier im Editor geschrieben :)


    Gruß,

    Das System ist eigentlich von Dracoblue entwickelt worden.
    Also von GTA:T.
    Habe es nur nachgeschrieben, von daher bedanken wir uns bei Dracoblue, dafür dass er ein Scriptgenie ist.

    new Text:blackTD;
    #define DIALOG_MODCHECK 6
    blackTD = TextDrawCreate(-20.000000,2.000000,"|");
    TextDrawUseBox(blackTD,1);
    TextDrawBoxColor(blackTD,0x000000ff);
    TextDrawTextSize(blackTD,660.000000,22.000000);
    TextDrawAlignment(blackTD,0);
    TextDrawBackgroundColor(blackTD,0x000000ff);
    TextDrawFont(blackTD,3);
    TextDrawLetterSize(blackTD,1.000000,52.200000);
    TextDrawColor(blackTD,0x000000ff);
    TextDrawSetOutline(blackTD,1);
    TextDrawSetProportional(blackTD,1);
    TextDrawSetShadow(blackTD,1);


    ocmd:modcheck(playerid,params[])
    {
    new string[128];
    new para;
    new pID;
    if(!IsPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,COLOR_GREY,"Du bist kein Admin Rang 4!");
    if(sscanf(params,"ui",pID,para))return SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /modcheck [Name/ID] [1 =(freeze) 2 =(unfreezed) 3 =(Aus)]");
    if(para < 1 || para > 3)return SendClientMessage(playerid,COLOR_WHITE,"** Fehler: Verwende als Parameter 1-3 ( 3 = Aus ) **");
    if(pID == playerid)return SendClientMessage(playerid,COLOR_WHITE,"Du kannst dich nicht selbst überprüfen!");
    if(para == 1) // modcheck 1 ( freeze )
    {
    format(string,sizeof(string),"[Modcheck]: %s überprüft %s auf Illegale Modifikationen. ( Type 1 (Freeze) )",PlayerName(playerid),PlayerName(pID));
    SendAdminMessage(string);
    SetPlayerInterior(pID,0);
    TextDrawShowForPlayer(pID,Text:blackTD);
    ShowPlayerDialog(pID,DIALOG_MODCHECK,DIALOG_STYLE_MSGBOX,"Modcheck","{FF0000}Du wirst nun auf Illegale Modifikationen überprüft!","OK","");
    SetPVarInt(pID,"modcheck",1);
    SetPlayerPos(pID,-672.1529,962.2229,12.1328); // cheater wird geportet
    SetPlayerVirtualWorld(pID,33); // virtuelle welt
    SetPlayerPos(playerid,-675.8786,961.8928,12.1328); // sollte klar sein ^^
    SetPlayerVirtualWorld(playerid,33); // ebenfalls
    GivePlayerWeapon(playerid,24,9999);
    GivePlayerWeapon(playerid,25,9999);
    GivePlayerWeapon(playerid,38,9999);
    SendClientMessage(pID,COLOR_RED,"[Modcheck] Du wirst nun auf Illegale Modifikationen überprüft!");
    SendClientMessage(pID,COLOR_RED,"[Modcheck] Solltest du diesen Modcheck umgehen indem du dich Ausloggst");
    SendClientMessage(pID,COLOR_RED,"[Modcheck] Oder auf eine andere Art den Modcheck umgehst");
    SendClientMessage(pID,COLOR_RED,"[Modcheck] Droht die Permanente Sperre!!");
    TogglePlayerControllable(pID,0);
    SetPlayerHealth(playerid,100.0);
    SetPlayerHealth(pID,100.0);
    SendAdminMessage(string);
    }
    if(para == 2)
    {
    format(string,sizeof(string),"[Modcheck]: %s überprüft %s auf Illegale Modifikationen. ( Type 2 (Unfreeze) )",PlayerName(playerid),PlayerName(pID));
    SendAdminMessage(string);
    TextDrawShowForPlayer(pID,Text:blackTD);
    ShowPlayerDialog(pID,DIALOG_MODCHECK,DIALOG_STYLE_MSGBOX,"Modcheck","{FF0000}Du wirst nun auf Illegale Modifikationen überprüft!","OK","");
    SetPVarInt(pID,"modcheck",1);
    SetPlayerPos(pID,-672.1529,962.2229,12.1328); // cheater wird geportet
    SetPlayerVirtualWorld(pID,33); // virtuelle welt
    SetPlayerPos(playerid,-675.8786,961.8928,12.1328); // sollte klar sein ^^
    SetPlayerVirtualWorld(playerid,33); // ebenfalls
    GivePlayerWeapon(playerid,24,9999);
    GivePlayerWeapon(playerid,25,9999);
    GivePlayerWeapon(playerid,38,9999);
    TogglePlayerControllable(pID,1);
    SendAdminMessage(string);
    SetPlayerHealth(playerid,100.0);
    SetPlayerHealth(pID,100.0);
    }
    if(para == 3)
    {
    format(string,sizeof(string),"[Modcheck]: %s hat die Überprüfung von %s beendet.",PlayerName(playerid),PlayerName(pID));
    SendAdminMessage(string);
    TextDrawHideForPlayer(pID,Text:blackTD);
    ShowPlayerDialog(pID,DIALOG_BEENDET,DIALOG_STYLE_MSGBOX,"Modcheck","Modcheck Beendet!","OK","");
    DeletePVar(playerid,"modcheck");
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerVirtualWorld(pID,0);
    SetPlayerHealth(playerid,100.0);
    SetPlayerHealth(pID,100.0);
    SendAdminMessage(string);
    SpawnPlayer(pID);
    SpawnPlayer(playerid);
    }
    return 1;
    }


    stock SendAdminMessage(const message[])
    {
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"admin") >= 1)
    {
    SendClientMessage(i,AMSG,message);
    }
    else
    {
    return 1;
    }
    }
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(GetPVarInt(playerid,"modcheck") == 1)
    {
    SetPlayerPos(playerid,-672.1529,962.2229,12.1328);
    SpawnPlayer(playerid);
    }
    return 1;
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid==DIALOG_MODCHECK)
    {
    if(response==0)
    {
    ShowPlayerDialog(playerid,DIALOG_MODCHECK,DIALOG_STYLE_MSGBOX,"Modcheck","{FF0000}Du wirst nun auf Illegale Modifikationen überprüft!","OK","");
    }
    if(response==1)
    {
    ShowPlayerDialog(playerid,DIALOG_MODCHECK,DIALOG_STYLE_MSGBOX,"Modcheck","{FF0000}Du wirst nun auf Illegale Modifikationen überprüft!","OK","");
    }
    }
    return 1;
    }
    Have fun, kannste ja noch anpassen.
    Wenn er bei Modcheck 1 HP verliert, hat er Hacks an.
    Wenn er bei Modcheck 2 keine HP verliert, hat er Hacks an.
    Du kannst noch bei Ondialogresponse das Dialog wieder anzeigen lassen, damit der Spieler die ganze Zeit auf ein OK Button drücken muss(so hab ichs bei mir)

    Hm ok, ich mach es nun so:
    Hier unten nun die Saves:
    AddPlayerClass(166,1164.3928,-877.2994,43.9815,104.3437,0,0,0,0,0,0); //1
    AddPlayerClass(166,1236.1652,-925.6865,42.5068,283.1373,0,0,0,0,0,0); // 2
    ( vielleicht hilft euch das hier oben weiter )
    Dann schreibe ich es oben so hinein:


    enum nodm
    {
    Float:nMinX,
    Float:nMinY,
    Float:nMaxX,
    Float:nMaxY,
    ZoneID
    };


    new NoDmSystem[][nodm]=
    {
    /*MinX, MinY, MaxX, MaxY*/
    {1164.3928,-877.2994,1236.1652,-925.6865}// BSN
    };


    Dann so im Public:
    if(IsPlayerInArea(i,NoDmSystem[nodmsys][nMinX],NoDmSystem[nodmsys][nMinY],NoDmSystem[nodmsys][nMaxX],NoDmSystem[nodmsys][nMaxY]))


    Tut mir leid, ich finde den Fehler einfach nicht..