Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Shaw Salcedo poslato Maj 26, 2024, 23:12:09 POSLE PODNE

Naslov: [Savet] Actors
Poruka od: Shaw Salcedo poslato Maj 26, 2024, 23:12:09 POSLE PODNE
Problem(error/warning): Imam dinamicno kreiranje actora ingame, sad me zanima jedno pitanje, kad kreiram actora u nekom interijeru, koji je izmapan i korisceno je CreateDynamicObject, da li postoji neka mogucnost da actori ne propadaju kroz mapu zbog toga, ne bih bas koristio CreateObject, tj da kreiram neki sitni objekat ispod svakog aktora, da ne bi propadali, da li postoji alternativno resenje koje je vise funkcionalno?
Deo skripte: /
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): /
Slika/video ingame problema(obavezno ako je ingame problem):/
Naslov: Odg: [Savet] Actors
Poruka od: CroherzeNonRPer poslato Maj 27, 2024, 07:51:55 PRE PODNE
Postavljanje Z koordinata

Prilikom kreiranja: Kada dinamički kreiraš actora, potrudi se da precizno odrediš njegovu Z koordinatu. Možeš koristiti funkciju GetGroundZFor3DCoord da dobiješ točnu visinu terena na toj lokaciji.
Provjera i korekcija: Nakon kreiranja, provjeri da li actor i dalje propada. Ako da, blago povećaj njegovu Z koordinatu dok ne "sleti" na čvrsto tlo.

Korištenje Checkpointa

Postavi checkpoint (ili nekoliko njih) unutar interijera.
Kada se actor kreira, teleportiraj ga na checkpoint. Ovo bi ga trebalo postaviti na ispravnu visinu.

Isključivanje gravitacije

SetActorInvulnerable: Postavi actora kao neranjivog (SetActorInvulnerable) i isključi gravitaciju za njega (SetActorGravity).

Ovo je najjednostavnije rješenje, ali je moguce da actor neće realistično reagirati na okruženje (npr. neće padati ako ga nešto gurne).

Collision detection

OnActorCollision: Koristi callback OnActorCollision da detektiraš kada actor dodirne nešto.
Reakcija: Ako actor propada, podigni ga blago na Z osi dok se ne prestane sudarati. Ovo je zahtjevnije rješenje, ali može biti najpreciznije.

Mappanje: Provjeri da li je interijer dobro mappan. Ponekad problemi sa propadanjem mogu biti uzrokovani greškama u mappanju.
Alternativa za CreateObject: Ako baš želiš izbjeci CreateObject, možeš koristiti CreateDynamicObjectEx i postaviti objekat kao nevidljiv.

Primjer (postavljanje Z koordinata) u PAWN-u:

new Float:groundZ;
GetGroundZFor3DCoord(interiorX, interiorY, interiorZ, groundZ);
new actorid = CreateActor(actor_model, interiorX, interiorY, groundZ + 1.0); // +1.0 da actor ne bude zaglavljen u podu
Naslov: Odg: [Savet] Actors
Poruka od: markosimic poslato Maj 27, 2024, 08:00:37 PRE PODNE
Izvini ali koriscenje ChatGPT-a ne moze da resi probleme na SAMP-u pogotovo sto pola stvari koje si kopirao/zalepio ne postoje...

Mozda nisam na SAMPu i nisam nikada gledao ali me je iskreno zanimalo da pogledam dokumentaciju, pa pogodi sta ? - nema pola stvari koje si naveo.

Naslov: Odg: [Savet] Actors
Poruka od: CroherzeNonRPer poslato Maj 27, 2024, 09:29:30 PRE PODNE
Kako nema?

Nemam ja uopce chatgpt
Naslov: Odg: [Savet] Actors
Poruka od: V01D poslato Maj 27, 2024, 11:08:02 PRE PODNE
Imao sam slicnih problema, gde su actori propadali i stvarali se u blizini, ne vezano za tlo niti da li su kreirani putem CreateActor ili CreateDynamicActor. Solucija koju sam nasao je da sam napravio timer koji vrti na tipa svakih 10 sekundi, i postavi opet poziciju actora koje sam kreirao i koristio.

primer :

task ActorPozicijeReset[4000]() {

    SetActorPos(LesterActor, -2164.4719,1041.3716,96.9375);
    SetActorFacingAngle(LesterActor, 262.0000);

    SetActorPos(ZlataraCuvar, 1671.0142,1630.8594,-70.4210);

    SetActorPos(EnemyActor1, 222.6090,1899.6664,17.6481);
    SetActorPos(EnemyActor2, 246.3216,1843.0695,8.7578);

    return 1;
}

Najjednostavnije resenje
Naslov: Odg: [Savet] Actors
Poruka od: Galardo poslato Maj 27, 2024, 12:41:21 POSLE PODNE
Citat: V01D poslato Maj 27, 2024, 11:08:02 PRE PODNEImao sam slicnih problema, gde su actori propadali i stvarali se u blizini, ne vezano za tlo niti da li su kreirani putem CreateActor ili CreateDynamicActor. Solucija koju sam nasao je da sam napravio timer koji vrti na tipa svakih 10 sekundi, i postavi opet poziciju actora koje sam kreirao i koristio.

primer :

task ActorPozicijeReset[4000]() {

    SetActorPos(LesterActor, -2164.4719,1041.3716,96.9375);
    SetActorFacingAngle(LesterActor, 262.0000);

    SetActorPos(ZlataraCuvar, 1671.0142,1630.8594,-70.4210);

    SetActorPos(EnemyActor1, 222.6090,1899.6664,17.6481);
    SetActorPos(EnemyActor2, 246.3216,1843.0695,8.7578);

    return 1;
}

Najjednostavnije resenje
Jeste rjesenje, ali radije bi kreirao objekat ako nemam neku bolju i pametniju soluciju.
Naslov: Odg: [Savet] Actors
Poruka od: Shaw Salcedo poslato Maj 27, 2024, 19:15:16 POSLE PODNE
Nikako ne bih radio na tajmer, gledam da je mod sto vise optimizovan, da kazem te "nepotrebne" tajmere vrteti u krug svakih 10 sekundi. Evo proverih u skripti dinamicno kreiranje, stavih CreateActor, nisam mu stavio invulnerable, videcu sad da li ce da "baguju".
Naslov: Odg: [Savet] Actors
Poruka od: markosimic poslato Maj 27, 2024, 21:13:51 POSLE PODNE
Pitao sam prinatelja i poslao mi je ovo.
https://www.open.mp/docs/scripting/functions/IsActorStreamedIn

"Resenje je jednostavno, kada su u pitanju dinamicni treba napraviti custom funkciju na principu InActorStreamedIn, jednostavno kada si u blizini aktora tj pojavis im se u blizini od nebitno pet il deset metara, obnovi mu koordinate i nece propasti"

Sad ja se ne bavim SAMPom ali znam da je on bio vrhunski u tome tako da probaj ovako.
Naslov: Odg: [Savet] Actors
Poruka od: roman42O poslato Maj 28, 2024, 14:00:07 POSLE PODNE
Citat: Shaw Salcedo poslato Maj 27, 2024, 19:15:16 POSLE PODNEinvulnerable

Kakve veze ima invulnerable sa propadanjem aktora.

Ili uradi Tajmer sto ti je poslao Void ili uradi IsActorStreamedIn