Actor - SetActorFacingAngle - Frage

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
  • Ich bin gerade dabei ein wenig an Actor's rumzuschrauben und wollte mal fragen, wieso
    mein Actor sich nicht zu mir dreht, wenn ich zuerst nach der "playerid"-FacingAngle abfrage
    und dann die "playerid"-FacingAngle dem Actor setze.


    forward OnPlayerTargetActor(playerid);
    public OnPlayerTargetActor(playerid)
    {
    new actorid = GetPlayerTargetActor(playerid), Float:pAng;
    if(actorid == ActorBANKLS)
    {
    if(developemode[playerid] == true) //Developer-Modus
    {
    new string[32];
    format(string, sizeof(string), "You are aiming at Actor Bank LS, actor id %d", actorid);
    SendClientMessage(playerid, -1, string);
    }
    GetPlayerFacingAngle(playerid, Float:pAng);
    SetActorFacingAngle(ActorBANKLS, Float:pAng);
    }
    return 1;
    }

  • Ich setze einen Timer ganz oben in OnGameModeInit auf Repeat = 1
    Dieser heißt "OnPlayerTargetActor" und genauso heißt auch das
    Public, wo "OnPlayerTargetActor" auch jede Sekunde zum Aufruf kommt, weil im
    Timer 1000 steht.



    SetTimer("OnPlayerTargetActor", 1000, 1);


    forward OnPlayerTargetActor(playerid);
    public OnPlayerTargetActor(playerid)
    {
    new actorid = GetPlayerTargetActor(playerid), Float:pAng;
    if(actorid == ActorBANKLS)
    {
    if(developemode[playerid] == true) //Developer-Modus
    {
    new string[32];
    format(string, sizeof(string), "You are aiming at Actor Bank LS, actor id %d", actorid);
    SendClientMessage(playerid, -1, string);
    }
    GetPlayerFacingAngle(playerid, Float:pAng);
    SetActorFacingAngle(ActorBANKLS, Float:pAng);
    }
    return 1;
    }


    2. Ja, ich ziele immer mal von einer anderen Position auf ihn, aber er bleibt halt stur auf den definierten Koordinaten stehen,
    ohne sich irgendwie mal zu mir zu rotieren.


    Und ja... oben sieht man ja, dass ich GetPlayerTargetActor genutzt habe.



    @Kevin1

  • SetTimer ruft nur Funktionen OHNE Parameter auf.
    Einfach in der Funktion alle Spieler durchgehen (mit foreach oder einer for-Schleife).

  • SetTimer ruft nur Funktionen OHNE Parameter auf.
    Einfach in der Funktion alle Spieler durchgehen (mit foreach oder einer for-Schleife).

    So. Das habe ich mal gemacht. Ich habe eine "for"-Schleife eingesetzt. So sehe das
    dann aus. Eine wirklich große Wirkung habe ich dadurch leider nicht erhalten.
    Der Actor bewegt sich, aber das er mal kurz die Hand hebt und sie dann wieder runter
    macht, als würde er eine Anim abbrechen, ist nicht mein gewünschtes Ergebnis. Nein
    ich habe auch noch keine Animationen für Actors verwendet.


    So sehe dann nun der Code aus:


    forward OnPlayerTargetActor(playerid);
    public OnPlayerTargetActor(playerid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new actorid = GetPlayerTargetActor(i), Float:pAng;
    if(actorid == ActorBANKLS)
    {
    if(developemode[playerid] == true) //Developer-Modus
    {
    new string[32];
    format(string, sizeof(string), "You are aiming at Actor Bank LS, actor id %d", actorid);
    SendClientMessage(i, -1, string);
    }
    GetPlayerFacingAngle(i, Float:pAng);
    SetActorFacingAngle(ActorBANKLS, Float:pAng);
    }
    }
    return 1;
    }

  • Zwei Sachen sind mir noch aufgefallen:
    1.
    GetPlayerFacingAngle(i, Float:pAng);
    SetActorFacingAngle(ActorBANKLS, Float:pAng);
    ->
    GetPlayerFacingAngle(i, pAng);
    SetActorFacingAngle(ActorBANKLS, pAng);


    2. So guckt er dann (eigentlich) immer in die gleiche Richtung wie du ...
    http://forum.sa-mp.com/showthread.php?t=573806

  • Der erste Punkt ist nicht falsch. Den Tag kann man da ruhig mit reinschreiben. :)