Kretanje aktora od tacke A do tacke B

Započeo Sinner.man, Jun 11, 2020, 18:04:33 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Problem(error/warning): Pitanje, kako da ubacim aktora u igru koji se krece od tacke A do tacke B i nazad i na kojem mjestu u modu, (ATH MOD)
Dio skripte: [ pawn ]vaš odgovor[ /pawn ]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ][ /code ]
Slika/video ingame problema(obavezno ako je ingame problem):
:)


credits: Xunder, Ino420, Muma

Citat: Pottus;3903994SetPlayerPos("dreni1998", 666.666, 666.666, 666.666, 666.666);    ///// GO IN HELL MOTHERFUCKER

https://i.imgur.com/XHLx9oj.gif
https://i.ibb.co/ZJqQKWT/NXRX.gif

Citat: ᗪ卂乂 poslato Jun 11, 2020, 18:08:21 POSLE PODNE
To se ne zove aktor nego NPC
https://forum.sa-mp.com/showthread.php?t=95034
Tehnicki ako ne zelis NPC-a mozes i sa actorom da uradis posto imas one animacije za hodanje i slicno, upotreba tajmera, animacija moze da uradi nesto slicno sto i NPC-ovi rade a da ti pritom ostane slot

znam ja to sve, nebitno jel actor ili NPC, pitanje je kako ??
:)

Citat: Sinner.man poslato Jun 11, 2020, 18:36:15 POSLE PODNE
znam ja to sve, nebitno jel actor ili NPC, pitanje je kako ??
[pawn]

new actorid;
CMD:startactor(playerid)
{
     actorid = CreateActor(294,5,5,5,5);
     ApplyActorAnimation(actorid,"PED","WALK_gang1",4.1,1,1,1,1,1);
     // procenis koliko mu vremena treba da ode do tacke b
     SetTimerEx("StopActorAnim",10000,false,"i",actorid);
     return(true);
}


forward StopActorAnim(actor);
public StopActorAnim(actor)
{
     printf("Actor je stigao na lokaciju");
     ClearActorAnimations(actor);
     return(true);
}
[/pawn]


Za NPC-ove imas pun kurac tutorijala, udjes ig snimis ga stavis ucitavanje rute koju si snimio konektujes itd

Citat: //>> Vedran poslato Jun 11, 2020, 18:41:44 POSLE PODNE
[pawn]

new actorid;
CMD:startactor(playerid)
{
     actorid = CreateActor(294,5,5,5,5);
     ApplyActorAnimation(actorid,"PED","WALK_gang1",4.1,1,1,1,1,1);
     // procenis koliko mu vremena treba da ode do tacke b
     SetTimerEx("StopActorAnim",10000,false,"i",actorid);
     return(true);
}


forward StopActorAnim(actor);
public StopActorAnim(actor)
{
     printf("Actor je stigao na lokaciju");
     ClearActorAnimations(actor);
     return(true);
}
[/pawn]


Za NPC-ove imas pun kurac tutorijala, udjes ig snimis ga stavis ucitavanje rute koju si snimio konektujes itd
Pitanja,
gdje u skripti tu podesavam lokacije, odakle-dokle ide,
I treba mi da stalno se krece da se ne zaustavlja, gdje ubacujem ovo new actorid;
:)

Moras da napises svoju skriptu, ti mu govoris gde ce se kreirati nemas odredjeno gde moras ...

Ne moze sa aktorom jer ne može da se kreće radi animaciju u mestu

credits: Xunder, Ino420, Muma

Citat: Pottus;3903994SetPlayerPos("dreni1998", 666.666, 666.666, 666.666, 666.666);    ///// GO IN HELL MOTHERFUCKER

https://i.imgur.com/XHLx9oj.gif
https://i.ibb.co/ZJqQKWT/NXRX.gif

Koji kurac trazis kad nemas blage veze

[Filterscript] Simple Treasure Hunt
[Filterscript] Sistem pecanja
[Filterscript] Meditacija
[Filterscript] Molitva
[Include] Alarm
[Include] Posao Taxi

Malo je teze za tebe ovo da odradis, nauci jos malo pa onda probaj ili smisli neki drugi nacin da uradis to sto hoces...

credits: Xunder, Ino420, Muma

Citat: Pottus;3903994SetPlayerPos("dreni1998", 666.666, 666.666, 666.666, 666.666);    ///// GO IN HELL MOTHERFUCKER

https://i.imgur.com/XHLx9oj.gif
https://i.ibb.co/ZJqQKWT/NXRX.gif

Moguce je pomeranje actora.
Na ovaj nacin mu postavljas ugao gledista ka putanji, imas odredjivanje sledeceg koraka i kada se priblizi dovoljno pozvace se cusom callback OnActorMoved.
Dole sam ti napravio komande za test pa mozes isprobati. Ako planiras da koristis ovo uzmi mapandreas i za svaki korak actora mu nadji odredjenu Z poziciju za odredjene XY koordinate kako bi se on kretao uvek po podlozi.  Mozes mu povecati i brzinu(povecas 4 parametar iz funkcije GetXYInFrontOfActor u HandleActorMovement callback-u), takodje i animaciju ali ako je budes menjao lockx i locky parametre drzi na 0 kako se actor ne bi vracao na prvobitne pozicije.
Ovde vidis koncept i kako se radi, na tebi je da li ces koristiti i unaprediti ovo.

Koristenje:
new actor = CreateActor(skin, X, Y, Z, ugao);
MoveActor(actor, 15.0, 15.0);

[pawn]
forward HandleActorMovement(actorid, Float:dX, Float:dY);
forward OnActorMoved(actorid);

new actor, a_timer;

static Float:absoluteangle(Float:a)
{
   while(a < 0.0) a += 360.0;
   while(a > 360.0) a -= 360.0;

   return a;
}

static Float:GetAngleToPoint(Float:fPointX, Float:fPointY, Float:fDestX, Float:fDestY)
{
   return absoluteangle(-(90-(atan2((fDestY - fPointY), (fDestX - fPointX)))));
}

static Float:GetDistanceBetweenTwoPoints(Float:x1, Float:y1, Float:x2, Float:y2)
{
    return floatsqroot(floatabs((floatpower((x2 - x1), 2) + floatpower((y2 - y1), 2))));
}

static GetXYInFrontOfActor(actorid, &Float:x, &Float:y, Float:distance)
{
    new Float:a;
    GetActorPos(actorid, x, y, a);
    GetActorFacingAngle(actorid, a);
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
}

static MoveActor(actorid, Float:PosX, Float:PosZ)
{
   if(IsValidActor(actorid))
   {
       if(a_timer)
       {
           KillTimer(a_timer);
       }
       a_timer = SetTimerEx("HandleActorMovement", 800, true, "iff", actorid, PosX, PosZ);
       return 1;
    }
    return 0;
}

public HandleActorMovement(actorid, Float:dX, Float:dY)
{
    new Float:X, Float:Y, Float:Z, Float:x, Float:y;
    GetActorPos(actorid, X, Y, Z);
    SetActorFacingAngle(actorid, GetAngleToPoint(X, Y, dX, dY));
    GetXYInFrontOfActor(actorid, x, y, 0.9);
    SetActorPos(actorid, x, y, Z);
    ApplyActorAnimation(actorid, "PED", "WALK_civi", 4.0, 1, 1, 1, 0, 0);
    if(GetDistanceBetweenTwoPoints(X, Y, dX, dY) <= 3.0)
    {
        if(a_timer)
        {
            KillTimer(a_timer);
      }
        ClearActorAnimations(actorid);
      OnActorMoved(actorid);
   }
   return 1;
}

public OnActorMoved(actorid)
{
   SendClientMessageToAll(-1, "Pomerio se.");
   // Kada actor zavrsi sa kretanjem
   return 1;
}

/*----------------------------
   Komande za testiranje
-----------------------------*/

CMD:newactor(playerid, params[])
{
   CreateActor(294, 15.0, 15.0, 5.0, 0.0);
   return 1;
}

CMD:moveactor(playerid, params[])
{
    MoveActor(actor, 30.0, 30.0);
   return 1;
}

CMD:moveactor2(playerid, params[])
{
    MoveActor(actor, 45.0, 15.0);
   return 1;
[/pawn]
[Include] > Optidraw
[Include] > Model-Sizes-SQL