AufprallKraft ausrechnen

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 user, iich hab mal wieder eine frage.


    Ich wollte ein Crash-System scripten, womit man, wennn man gegen eine Wand fährt, und wenn der aufprall zu stark ist, dass der spieler dann betrunken wirkt. (für eine kurtze zeit). Nur wie mach ich das, mit der aufprallwucht?


    mfg multivan

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • Also ich würde zwei Variablen nehmen pro Vehicle. Eine für HP, die andere für die Geschwindigkeit. Dann kannst du ja berechnen, wenn Geschwindigkeit rapide sinkt (OnPlayerUpdate z.B. packen) und HP auch, wie viel Schaden entsteht (meinetwegen in 10er Schritten des Geschwindigkeitsverlustes)

  • Du machst ein Timer der überprüft ob du gegen die wand gefahren bisst. Dann machst du wie bei speedo Das er geschwindikeit rechnet . Und machst dann einfahc das minimum grentze das er betrunge wir heißt If(kmh) >80 und oder list halt oder == wie auch immer .

  • davon is alles geschwindigkeit :D damit is z.B. gemeint, mit welcher geschwindigkeit mach sich in richtung x, y und z bewegt. Das musst du nur zusammenrechnen, un wenn das schnell auf 0 sinkt, oda fast 0, dann machst du halt setplayerdrunklevel oda wie das heißt^^


    new Float:geschwindigkeit = floatsqroot(X*X + Y*Y + Z*Z) ;


    Damit rechnest du z.B. die geschwindigkeit. Aber so würdest du bei sagen wir ma vollspeed mit infi nur ca 3 rauskommen, musst du noch höher rechnen, damit du damit was anfangen kannst ;=


    MFG, Robdeflop®

  • habs zurzeit so


    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:Velocity[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0], Velocity[1], Velocity[2]);
    if(Velocity < 50 && => 500)
    {
    }
    }


    ich weiß, scheusslich :D

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • OMG xD


    Machs so:


    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:Velocity[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0], Velocity[1], Velocity[2]);
    new Float:geschwindigkeit = floatsqroot(Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]) * 100;

    if(geschwindigkeit > 100 && geschwindigkeit1 < 5)
    {
    //bla
    }

    new Float:Velocity1[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity1[0], Velocity1[1], Velocity1[2]);
    new Float:geschwindigkeit1 = floatsqroot(Velocity1[0]*Velocity1[0] + Velocity1[1]*Velocity1[1] + Velocity1[2]*Velocity1[2]) * 100;
    }


    Das sollte eig gehen ^^ bin mir aber nit sicher, habs so grad hingestrudelt. Das musst du halt in nen Timer machen, am besten von einer halben sekunde, wenn das der server aushält :D

  • ok werds mal gucken, habs jetz so:


    blablabla Onplayerentervehicle
    {
    SetTimerEx("carcrash",500,1,"bla",true);


    }


    public carcrash(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:Velocity[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0], Velocity[1], Velocity[2]);
    new Float:geschwindigkeit = floatsqroot(Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]) * 100;
    new Float:Velocity1[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity1[0], Velocity1[1], Velocity1[2]);
    new Float:geschwindigkeit1 = floatsqroot(Velocity1[0]*Velocity1[0] + Velocity1[1]*Velocity1[1] + Velocity1[2]*Velocity1[2]) * 100;


    if(geschwindigkeit > 100 && geschwindigkeit1 < 5)
    {
    SetPlayerDrunkLevel(playerid,50000);
    SetTimerEx("nodrunkcrash",5000,0,"bla",true);
    }
    }
    }


    public nodrunkcrash(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetPlayerDrunkLevel(playerid,0);
    }
    }


    so richtisch?
    und ich warte, und ich warte, und ich warte, und ich warte, und ich warte...

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

    Einmal editiert, zuletzt von Noneatme ()

  • Also ich habs nur ma eben geschrieben aber ich ich habs nicht getestet ;D
    Schaus dir einfach mal an (Sind keine Errors drin):


    new Float:Velocity[3];
    new Float:Speed[MAX_PLAYERS];
    new Float:Var;
    new UnDrunk[MAX_PLAYERS];
    forward CarCrash();


    // GameModeInit
    SetTimer("CarCrash", 200, true);



    public OnPlayerConnect(playerid)
    {
    UnDrunk[playerid] = 0;
    Speed[playerid] = 0;
    return 1;
    }


    public CarCrash()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(UnDrunk[i] > 0)
    {
    UnDrunk[i]--;
    if(UnDrunk[i] == 1)
    {
    SetPlayerDrunkLevel(i, 0);
    UnDrunk[i] = 0;
    }
    }
    if(IsPlayerInAnyVehicle(i))
    {
    GetVehicleVelocity(GetPlayerVehicleID(i), Velocity[0], Velocity[1], Velocity[2]);
    Var = floatsqroot(Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]) * 100;
    if(Speed[i] > 100 && Var < 10)
    {
    SetPlayerDrunkLevel(i, 50000);
    UnDrunk[i] = 26; // 26 Für 5 Sekunden.. ja es hat nen Sinn ;D
    // Timer tickt mit 200 ms also 1 Sek = 5
    // 5 * 5 Sek = 25.. +1 damit auf 0 einfach nichts passiert und auf 1 das DrunkLevel
    }
    Speed[i] = Var;
    }
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von Rafelder ()

  • Wieso willst du die Geschwindikeit bzw die wucht des Aufpralls mitberechnen?


    Eigentlich würde es ausreichen wenn du nur sinkende car-hp überprüfst. GTA selber berechnet ja die wucht, da je nach stärke des Unfalls die HP des Fahrzeues mehr oder minder sinkt.

  • noep funtz net


    edit: dann mach das einfach mal mit HP, ob es dann geht


    edit:2 doch klappt! nur ich hab mit speedhack gemach^^ xD
    edit3: da is iwas mit der geschwindigkeit net in ordnung



    edit4: wenn ich beschleunige zu 10 KM/H setz der drunkeffekt ein, wenn ich wieder bremse, geht er aus. aber nicht wenn ich gegen eine wand fahre xD

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

    2 Mal editiert, zuletzt von Noneatme ()


  • Bist du jeck ? 8|


    alle 200 MS wird 500 Mal eine for Schleife aufgerufen, na dann viel Spaß bis der Server explodiert ....


    1. Gute Server schaffen das.. ich mein es gibt Rechner die Programme/Spiele wie Crysis von oben bis unten durchrechnen, da ist das ja wohl ma nix dagegen..
    2. Man könnte anstatt MAX_PLAYERS auch was eigenes hinschreiben ? Hm..