GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi
04 Nisan 2025, 16:14:46

[Anlatım] Pet Sistemi

Başlatan Maverick, 25 Mart 2021, 19:57:20

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Maverick

Sistemin açıklaması aşağıdaki kod satırlarında, keyifli kullanmalar.
//Bu anlatımda sadece pet sisteminin iskeletini anlatıyorum, iskeleti siz geliştirebilirsiniz. :=)
//CreateActor SAMP'ın fonksiyonu olduğundan MAX_ACTORS(1000) adet aktör oluşturabilirsiniz.
//Bunu streamer eklentisini kullanarak arttırabilirsiniz. Bknz: https://github.com/samp-incognito/samp-streamer-plugin/wiki
//Ek olarak aktörün/petin Z kordinatını bulmamız lazım bunun için MapAndreas veya ColAndreas eklentilerini kullanabilirsiniz.
//https://github.com/Southclaws/samp-plugin-mapandreas / https://github.com/Pottus/ColAndreas/wiki

//örnek olarak bir tane pet modeli veriyorum isterseniz indirip kullanabilirsiniz.
//models klasörünün içindeki artconfig.txt ye AddCharModel(305, 29989, "blackpitbull.dff", "blackpitbull.txd"); ekleyin.
// https://download.erenumutozdemir.com/blackpitbull.dff
// https://download.erenumutozdemir.com/blackpitbull.txd

// 2018 yılında yaptığım sistemin videosunu aşağıya ekledim, bakabilirsiniz.


// konunun altına düşüncelerenizi belirtirseniz sevinirim.

new PET[MAX_PLAYERS], PET_Timer[MAX_PLAYERS]; // pet değişkenleri

PET[playerid] = CreateActor(29989, ...); // aktörü/peti oluşturuyorsunuz fonksiyonun tamamı için wikiye bakın.
DestroyActor(PET[playerid]); // aktörü kaldırabilirsiniz.

PET_Timer[playerid] = SetTimerEx("ChangeActorPos", 10, true, "ii", playerid, PET[playerid]); // aktörü/peti haraket ettirmek için timer oluşturabilirsiniz. parametreler için wikiye bakın.
KillTimer(PET_Timer[playerid]); //aktörü/peti durdurmak için kullanabilirsiniz.


forward ChangeActorPos(playerid, actorid);
public ChangeActorPos(playerid, actorid)
{
if(IsValidActor(actorid))
  {
    new Float:aPos[5], Float:pPos[3];
GetPlayerPos(playerid, pPos[0], pPos[1], pPos[3]);
  GetActorPos(actorid, aPos[0], aPos[1], aPos[2]);
if((pPos[0] >= aPos[0] -1.8 && pPos[0] <= aPos[0] + 1.8) && (pPos[1] >= aPos[1] - 1.8 && pPos[1] <= aPos[1] + 1.8)) {
ClearActorAnimations(PET[playerid]); // aktörün/petin oyuncuya yakın olup olmadığını kontrol ediyorsunuz yakınsa haraket etmeyi bırakıyor.
ApplyActorAnimation(PET[playerid], "OTB", "wtchrace_win", 4.0, 1, 0, 0, 0, 0);
continue;
}
else {
// aktör/pet haraket ediyor.
GetActorFacingAngle(actorid, aPos[3]);
ApplyActorAnimation(PET[playerid], "ped", "run_player", 4.1, 1, 1, 1, 0, 0);
aPos[0] += 0.062 * floatsin(-aPos[3], degrees);
aPos[1] += 0.062 * floatcos(-aPos[3], degrees);
MapAndreas_FindZ_For2DCoord(aPos[0], aPos[1], aPos[4]); //MapAndreas eklentisininin fonksiyonu
//CA_FindZ_For2DCoord(aPos[0], aPos[1], aPos[4]); //ColAndreas eklentisininin fonksiyonu
ChangeActorLookAt(actorid, pPos[0], pPos[1], aPos[0], aPos[1], aPos[3]);
SetActorPos(actorid, aPos[0], aPos[1], aPos[4] + 1);
}
}
return 1;
}

stock ChangeActorLookAt(actorid, Float:X, Float:Y, Float:Ax, Float:Ay, Float:Aa)
{
Aa = floatabs(atan((Y - Ay) / (X - Ax)));
if (X <= Ax && Y >= Ay) Aa = floatsub(180, Aa);
else if (X < Ax && Y < Ay) Aa = floatadd(Aa, 180);
else if (X >= Ax && Y <= Ay) Aa = floatsub(360.0, Aa);
Aa = floatsub(Aa, 90.0);
if (Aa >= 360.0) Aa = floatsub(Aa, 360.0);
SetActorFacingAngle(actorid, Aa);
return 1;
}
Son düzenlenme: 25 Mart 2021, 20:25:10 Maverick

merddz

Gayet güzel gözüküyor, başarılar elinize sağlık.

birazcik pawn birazcik web iste

Maverick

Alıntı yapılan: merddz - 25 Mart 2021, 20:35:01
Gayet güzel gözüküyor, başarılar elinize sağlık.
Teşekkürler.


Rodeiun

elinize sağlık baya iyi


Amper

Bu yöntemle muhtemelen köprü altı gibi yerlerde problem çıkacaktır. Aktörler köprü altından üstüne ışınlanır veya yeni eklenen objeleri algılayamaz.

Çözüm: ColAndreas kullanarak RayCastLine fonksiyonu yardımıyla oyuncunun altını gerçek zamanlı taratarak bulmanız.


Maverick

Alıntı yapılan: Amper - 25 Mart 2021, 21:38:58
Bu yöntemle muhtemelen köprü altı gibi yerlerde problem çıkacaktır. Aktörler köprü altından üstüne ışınlanır veya yeni eklenen objeleri algılayamaz.

Çözüm: ColAndreas kullanarak RayCastLine fonksiyonu yardımıyla oyuncunun altını gerçek zamanlı taratarak bulmanız.

Açıklama satırına zaten ColAndreas wiki bıraktım gerisi geliştiriciye kaldı, yorum için teşekkürler. @Amper
Son düzenlenme: 25 Mart 2021, 22:02:27 Maverick

Belkide Gameover

Eline sağlık kolay gelsin :)

bloodsucker

Efsun



sharax



Feick

Eline sağlık, gayet başarılı bir sistem.


Gladiator

Anlatım için teşekkürler.


Impeccable

Anlatım için teşekkürler.