Holzfäller

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, bin gerade beim Holzfäller Job.
    Jetzt die Frage, kann man das machen, dass das Objekt immer ein Stückchen mehr fällt?


    MoveObject(Baeume[i][baumid_x],2039.2761,1334.7701,10.6719,2.0,0.0,90.0,0.0);


    Also kann man da irgendwie bei dem Y Rot Wert eingeben dass er jedes mal + 20 oder sowas geändert wird ?

  • Speichere den Wert der Rotation in einer Variable (so wie baumid_x) und erhöhe diese immer um 20, wenn es bewegt werden soll.
    Baeume[i][moverot_y] += 20.0;
    MoveObject(Baeume[i][baumid_x],2039.2761,1334.7701,10.6719,2.0,0.0,Baeume[i][moverot_y],0.0);

  • Finde gerade meinen Fehler nicht hier:
    MoveObject(Baeume[i][baumid_x],Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z],10.0,0.0,90.0,0.0);
    Der Baum fällt sofort um und nicht in der Zeit von 10 Sekunden

  • MoveObject(Baeume[i][baumid_x],Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z]+0.1,0.005,0.0,90.0,0.0);


    Du musst die Position ein kleines Bisschen ändern, und den Baum gaaanz langsam bewegen lassen. Gegebenenfalls musst du die Geschwindigkeit noch anpassen (0.005).

  • if(newkeys == KEY_FIRE)
    {
    if(!IsPlayerInJob(playerid,3)||jobduty[playerid]==false)return 1;
    if(GetPlayerWeapon(playerid) == 9)
    {
    for(new i = 0; i < sizeof(Baeume); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z]))
    {
    if(Baeume[i][baum_ry]==0.0)
    {
    MoveObject(Baeume[i][baumid_x],Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z]+0.01,0.005,0.0,10.0,0.0);
    Baeume[i][baum_ry] = 10.0;
    return 1;
    }
    else if(Baeume[i][baum_ry]==10.0)
    {
    MoveObject(Baeume[i][baumid_x],Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z]+0.02,0.005,0.0,20.0,0.0);
    Baeume[i][baum_ry] = 20.0;
    return 1;
    }
    else if(Baeume[i][baum_ry]==20.0)
    {
    MoveObject(Baeume[i][baumid_x],Baeume[i][baum_x],Baeume[i][baum_y],Baeume[i][baum_z]+0.03,0.008,0.0,90.0,0.0);
    Baeume[i][baum_ry] = 90.0;
    return 1;
    }
    else if(Baeume[i][baum_ry]==90.0)
    {
    GameTextForPlayer(playerid,"~w~Baum bereits gefallen",2000,3);
    return 1;
    }

    //baumtimer[playerid] = SetTimerEx("BaumTimer",5000,true,"i",playerid);
    return 1;
    }
    else
    {
    continue;
    }
    }
    return GameTextForPlayer(playerid,"~w~Zu weit vom Baum ~r~entfernt",2000,3);
    }
    return 1;
    }
    return 1;


    Bin jetzt so weit, jedoch ist das noch etwas unlogisch, man muss ja nur 3 mal hintereinander Linksklick machen dann fällt er..

  • Dann musst du die Zeit etwas eingrenzen.


    Unter den Includes:
    new warteZeit[MAX_PLAYERS];


    Beim Klicken:
    if(warteZeit[playerid] > GetTickCount()) return 1;
    warteZeit[playerid] = GetTickCount() + 1000;


    OnPlayerConnect:
    warteZeit[playerid] = 0;

  • Okay, Danke.
    Das Problem was ich aber dann noch hätte wäre ja dass er OnPlayerKeyStateChange nur aufruft wenn ich die Taste erneut drücke.
    Wie löse ich das dann? Mit einem Timer der sich wiederholt ?



    Wegen dem GetTickCount, das ist die Uhrzeit oder ?
    und bedeuten die 1000 dann 1 Sekunde?

  • Das Problem was ich aber dann noch hätte wäre ja dass er OnPlayerKeyStateChange nur aufruft wenn ich die Taste erneut drücke.


    Ich verstehe nicht, worauf du hinaus willst.


    Wegen dem GetTickCount, das ist die Uhrzeit oder ?


    Das ist der TickCount: https://wiki.sa-mp.com/wiki/GetTickCount
    Das ist die Zeit in Millisekunden, seit der Server eingeschaltet wurde (die .exe).
    Ja, 1000 = 1 Sekunde.