Meldung beim kaputten Auto

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
  • Hallo Breadfish-Community!


    Ich weiss nicht, obs das schon gab, aber ich hab auf jeden fall nix gefunden ^^


    Also, ich möchte jetzt, dass wenn jemand fährt, und nachher sein Auto zu schrott fährt, aber der Spieler nicht mehr im Auto ist, das dann eine Meldung kommt, dass das Auto kaputt gegangen ist. Mit dem Callback "OnVehicleDeath" geht das ja nicht, oder irre ich mich da?


    MFG selEcT

  • new kaputt[MAX_VEHICLES];
    public OnVehicleDeath(vehicleid, killerid) {
    kaputt[vehicleid] = 1;
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
    if(kaputt[vehicleid] == 1 && !ispassenger) {
    SendClientMessage(playerid, 0xFF0000FF, "Das Auto ist kaputt!");
    TogglePlayerControllable(playerid, false);
    }
    return 1;
    }


    Sollte funktionieren, habs ned getestet.

  • forward CheckVehicle();
    new AutoKaputt[MAX_PLAYERS];
    public CheckVehicle()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i) == 2)
    {
    new Float:veh_h;
    GetVehicleHealth(GetPlayerVehicleID(i),veh_h);
    if(veh_h < 100.0)
    {
    if(AutoKaputt[i] == 0)
    {
    TogglePlayerControllable(i,0);
    // Nachricht : Auto Kaputt
    AutoKaputt[i] = 1;
    }
    }

    }
    }
    }
    nur noch Timer setzen, nachrichten einfügen und fertig


    //EDIT: Such dir ne Methode aus , Brights oder meine egal ^^

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • hast recht.. werd ich mal probiern.. also bist du dir sicher, dass wenn das auto auf dem rücken liegt und anfang zu brennen, ich aussteige, das auto explodiert, dass ich dann auch ne meldung bekomme? xD



    Hmm.. geht net... ich hab einfach noch was eingebaut (gesamter Code):



    forward CheckVehicle();
    new AutoKaputt[MAX_PLAYERS];


    public OnGameModeInit()
    //...
    //...
    SetTimer("CheckVehicle",1000,1);
    //...
    //...


    public CheckVehicle()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i) == 2)
    {
    new Float:veh_h;
    new vehid = GetPlayerVehicleID(i);
    GetVehicleHealth(vehid, veh_h);
    if(veh_h < 100.0)
    {
    if(AutoKaputt[i] == 0)
    {
    if(IsACopCar(vehid))
    {
    TogglePlayerControllable(i,0);
    SendClientMessage(i, COLOR_RED,"Dein Copcar ist kaputt!");
    AutoKaputt[i] = 1;
    }
    else if(IsAAmbulanz(vehid))
    {
    TogglePlayerControllable(i,0);
    SendClientMessage(i, COLOR_RED,"Dein Ambulanzcar ist kaputt!");
    AutoKaputt[i] = 1;
    }
    }
    }


    }
    }
    }


    public IsAnAmbulance(carid)
    {
    for(new i = 0; i < sizeof(ambulanzcars); i++)
    {
    if(carid == ambulanzcars[i])
    {
    return 1;
    }
    }
    return 0;
    }
    //(dasselbe mit dem Copcar)



    was kann da noch falsch sein? Also ich bin einfach ausgestiegen, als das auto auf dem kopf war, dann ist es auch explodiert, bekam aber keine Meldung...

  • 1. wenn Auto auf dem Kopf liegt, kannst du nix gegen eine Explosion machen (außer nen Timer vielleicht, aber das wäre irrsinn)
    2.
    erstell einen Timer, der einmal in der Sekunde aufgerufen wird
    Frag darin deine Cars per For...Schleife ab, ob deren Health<350 ist.
    Falls ja, carhealth[carid]=350;cardestroyed[carid]=1;


    Wenn man nun in ein Auto einsteigen möchte, frag bei OnPlayerStateChange(...) ab, welche carid das Auto hat (nicht vehicleid!!!). Wenn das Auto mit carid einen Schaden hat (cardestroyed[carid]==1), dann freeze den Spielern einfach. Fertig.
    Bei OnPlayerKeyChange(...) fragst du einfach ab, ob Spieler im Auto sitzt, dieses kaputt ist (cardestroyed) und ob Spieler Taste ENTER (Auto ein/aussteigen) drückt, falls ja, removeplayerfromvehicle und unfreeze (toggelplayercontrollable)


    Nachtrag zu 2.
    wenn Auto Totalschaden hat und du carhealth[carid]=350; machst, mußt du natürlich auch per SetVehicleHealth den Wert 350 setzen.


    Nachtrag zu 2. zweite Runde ^^:
    vor der IF Abfrage mit Health<350 wäre es natürlich sinnvoll, wenn du die Health Variable mit den aktuellen Wert aus dem jeweiligem Car bestückst ;) (zur Erinnerung: GetVehicleHealth)