Anti Car Jack

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
  • hmmm ok wie mache ich das dann das er bei 2x car jack gekickt wird. beim 1x "Hol dir ein eigenes Auto, wenn du das nochmal machst wirst du gekickt"
    und beim 2ten mal in rot an alle "Blala wurde gekickt grund Car Jacking"
    und an ihn "wir haben dich gewarnt"
    :thumbup:

  • am Besten schaust du dir mal im Wiki die Funktionsbeschreibung von OnPlayerStateChange an. Es gibt sowohl newstate und oldstate. Die if Abfrage war
    else if(newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER)
    welche ing, ich aber trotzdem zu
    oldstate == PLAYER_STATE_DRIVER
    verbessert habe, da dies genauso ausreicht. Trotzdem würde die Erste Variante das selbe bewirken

  • Beim Tod oder Auloggen wird die Variable wieder zurückgesetzt, damit keine Fehler auftreten mit den Autos und Lete die sich ausloggen oder sterben
    #define MAX_CARJACK 2


    new
    bool:vDriver[MAX_VEHICLES],
    pOldCar[MAX_PLAYERS],
    pCarJacked[MAX_PLAYERS];
    public OnPlayerConnect(playerid)
    {
    pCarJacked[playerid] = 0;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new
    carid = GetPlayerVehicleID(playerid);
    vDriver[carid] = true;
    pOldCar[playerid] = carid;
    }
    else if(oldstate == PLAYER_STATE_DRIVER)
    {
    vDriver[pOldCar[playerid]] = false;
    }
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(!ispassenger)
    {
    if(vDriver[vehicleid])
    {
    // Nachricht senden?
    pCarJacked[playerid]++;
    if(pCarJacked[playerid] == MAX_CARJACK)
    {
    // Nachricht senden?
    Kick(playerid);
    }
    }
    }
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    if(vDriver[GetPlayerVehicleID(playerid)])
    {
    vDriver[GetPlayerVehicleID(playerid)] = false;
    }
    }


    }


    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    if(vDriver[GetPlayerVehicleID(playerid)])
    {
    vDriver[GetPlayerVehicleID(playerid)] = false;
    }
    }


    }

  • C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1277) : error 017: undefined symbol "GetPlayervehicleID"
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1284) : error 010: invalid function or declaration
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1584) : error 017: undefined symbol "GetPlayervehicleID"
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1589) : error 010: invalid function or declaration
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1693) : error 017: undefined symbol "pCarjacked"
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1693) : warning 215: expression has no effect
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1693) : error 001: expected token: ";", but found "]"
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1693) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Alex\Eigene Dateien\samp02Xserver.win32\gamemodes\Atlanta_island.pwn(1693) : fatal error 107: too many error messages on one line


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



    8 Errors.

  • esmal keine fehler, aber was ist dort das nachricht 1 und 2. also welche nachricht von 1 und 2 is überhaupt was XD.
    ich muss das doch irgendwie so machen:
    new string[100];
    format(string, sizeof(string), "%s Hol dir gefälligst ein eigenes auto. Mach das nochmal und du wirst gekickt");
    SendClientMessage (0xAAAAAAAA, string); ich weis ja nich wie da was is xD.ok di

  • ok jetz brauch ich nurnoch jemanden zum testen aus meiner icq liste. aber da is keiner on xD und eine ip einfach geben geht nich xD (hamachi netzwerk xD -immoment noch-)
    //ok ich habs getestet (endlich xD) und mir sind 2 sachen aufgefallen. wenn ich jemanden sein auto das erste mal jacke alles ok und das 2te mal werde ich gekickt und bekomme die 2te warnung aber es kommst auch die warnung vom 1x


    und das 2te ich bin in mein auto wier eingestieen und bekam die 1ste warnung. oO

    Einmal editiert, zuletzt von Jack_xD ()

  • Zitat

    //ok ich habs getestet (endlich xD) und mir sind 2 sachen aufgefallen. wenn ich jemanden sein auto das erste mal jacke alles ok und das 2te mal werde ich gekickt und bekomme die 2te warnung aber es kommst auch die warnung vom 1x


    if(pCarJacked[playerid] == MAX_CARJACK)
    {
    // Nachricht 2 senden
    Kick(playerid);
    }
    else
    {
    // Nachricht 1 senden
    }


    Zitat

    und das 2te ich bin in mein auto wier eingestieen und bekam die 1ste warnung. oO


    Genauer, wann bist du wieder eingesteigen, nach dem Login? In das gleiche Auto und due bekamst ne warnung?

  • ich weis nichtmehr genau ich bin jemanden hinterher gefahren bin ausgestiegen und wollte wieder einsteigen dann kahm die warnung
    //edit:
    wenn ich
    if(pCarJacked[playerid] == MAX_CARJACK)
    {
    // Nachricht 2 senden
    Kick(playerid);
    }
    else
    {
    // Nachricht 1 senden
    }
    einfügen würde. also:
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new
    carid = GetPlayerVehicleID(playerid);
    vDriver[carid] = true;
    pOldCar[playerid] = carid;
    }
    else if(oldstate == PLAYER_STATE_DRIVER)
    {
    vDriver[pOldCar[playerid]] = false;
    }
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(!ispassenger)
    {
    if(pCarJacked[playerid] == MAX_CARJACK)
    {
    // Nachricht 2 senden
    Kick(playerid);
    }
    else
    {
    // Nachricht 1 senden
    }
    }
    }
    return 1;
    }
    würde der dann nicht die nachricht 2 senden und mich dann kicken und dann wenn man sich das so denkt das er mich dann warnt wenn ichs nochmal mache xD oO

    Einmal editiert, zuletzt von Jack_xD ()

  • Idi


    Ne, echt?
    Es ging nur darum, dass PLAYER_STATE_ONFOOT & PLAYER_STATE_DRIVER soweit ich weiß nicht gleichzeitig aufgerufen wird !


    Erst denken bzw. lesen und dann schreiben. Deshalb war auch die Abfrage bei ONFOOT ob newstate gleich ONFOOT ist, und bei DRIVER die Abfrage war, oldstate gleich DRIVER.
    Was bedeutet, das die Abfrage erfüllt worden wäre, wenn du nun zu Fuß bist und vorher im Auto saßt.