GTAMulti - GTA Türkiye

San Andreas Multiplayer => Yardım Talepleri => PAWN Kodlama => Kilitli Konular => Konuyu başlatan: VERITAS - 13 Şubat 2022, 02:40:51

Başlık: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 02:40:51
https://www.gtamulti.com/forum/anlatimlar/(anlatim)-pet-sistemi/

Bu konuda anlatılan kod satırlarını direkt olarak yazıp sadece mapandreas eklentisi yerine colandreas eklentisi kullandım fakat aktörü yanıma spawn ettikten sonra hareket edince aktöre koşma animasyonu geliyor ve aktör dünyanın altından aşağıya doğru düşüyor. Sorunun colandreas dan ötürü olduğu büyük muhtemel fakat çözümü nasıl olacak yardımcı olur musunuz?

Not: MapAndreas eklentisi ile denediğimde ise PAWN uygulaması derlemede bir sorun vermiyor fakat samp-server.exe uygulamasını açınca file or function denilen hatayı vermekte bundan ötürü colandreas eklentisini tercih etmiştim.
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: sharax - 13 Şubat 2022, 11:14:58
açıldığında çıkan sorun, pluginlerin tam olarak kurulmamasından kaynaklı olabilir.
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 13:31:56
Alıntı yapılan: sharax - 13 Şubat 2022, 11:14:58
açıldığında çıkan sorun, pluginlerin tam olarak kurulmamasından kaynaklı olabilir.

Dediğiniz üzere mapandreas eklentisini en baştan kurup denedim ve aktörler yere düşmemeye başladı fakat şimdi de olduğu yerde koşma animasyonuna giriyor oyuncuya doğru yaklaşmıyor.

PAWN Kodu: Seç
forward ChangeActorPos(playerid, actorid);
public ChangeActorPos(playerid, actorid)
{
if(IsValidActor(actorid))
{
new Float:aPos[5], Float:pPos[3];
GetPlayerPos(playerid, pPos
[list][li], pPos[1], pPos[2]);[/li][/list]
  GetActorPos(actorid, aPos
[list][li], aPos[1], aPos[2]);[/li][/list]
if((pPos
[list][li]>= aPos[/li]
[li]-1.8 && pPos[/li]
[li]<= aPos[/li]
[li]+ 1.8) && (pPos[1] >= aPos[1] - 1.8 && pPos[1] <= aPos[1] + 1.8)) {[/li][/list]
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
[list][li]+= 0.062 * floatsin(-aPos[3], degrees);[/li][/list]
aPos[1] += 0.062 * floatcos(-aPos[3], degrees);
MapAndreas_FindZ_For2DCoord(aPos
[list][li], aPos[1], aPos[4]); //MapAndreas eklentisininin fonksiyonu[/li][/list]
//CA_FindZ_For2DCoord(aPos
[list][li], aPos[1], aPos[4]); //ColAndreas eklentisininin fonksiyonu[/li][/list]
ChangeActorLookAt(actorid, pPos
[list][li], pPos[1], aPos[/li]
[li], aPos[1], aPos[3]);[/li][/list]
SetActorPos(actorid, aPos
[list][li], aPos[1], aPos[4]+1);[/li][/list]
}
}
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;
}

Maverick'in paylaştığı anlatımda continue yazıyor fakat pawnda derlerken hata veriyor. O yüzden continue yazan satırı yorum satırı haline getirmek zorunda kaldım. Yorum satırı haline getirmeyip derlediğimde ise verdiği hata şöyle;

(https://cdn.discordapp.com/attachments/767074905639485464/942367445321150505/unknown.png)
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 13:33:51
Pawno koduna tıkladığımda yazının karıştığını fark ettim o yüzden pawn üzerinden fotoğraf atıyorum;

(https://cdn.discordapp.com/attachments/767074905639485464/942367808841453598/unknown.png)
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: sharax - 13 Şubat 2022, 13:46:56
Alıntı yapılan: VERITAS - 13 Şubat 2022, 13:31:56
Dediğiniz üzere mapandreas eklentisini en baştan kurup denedim ve aktörler yere düşmemeye başladı fakat şimdi de olduğu yerde koşma animasyonuna giriyor oyuncuya doğru yaklaşmıyor.
sebebi continue olan kod satırını pasife almandan kaynaklanıyor, mapandreas kütüphanesini pawnodan ekledin mi?
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 13:58:36
Alıntı yapılan: sharax - 13 Şubat 2022, 13:46:56
Alıntı yapılan: VERITAS - 13 Şubat 2022, 13:31:56
Dediğiniz üzere mapandreas eklentisini en baştan kurup denedim ve aktörler yere düşmemeye başladı fakat şimdi de olduğu yerde koşma animasyonuna giriyor oyuncuya doğru yaklaşmıyor.
sebebi continue olan kod satırını pasife almandan kaynaklanıyor, mapandreas kütüphanesini pawnodan ekledin mi?

evet #include <mapandreas> olarak ekledim ayrıca pawno>include klasörünün içine de mapandreas.inc dosyasını koydum. Pluginini de ekledim bir sorun olmadı.

Fakat continue olan kod satırını pasife almazsam da derlerken attığım hatayı alıyorum.
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: squarepants - 13 Şubat 2022, 14:35:03
Timer sonlandirilmamış aşağıdaki şekilde dener misin :
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);
KillTimer(PET_Timer[playerid]);
}
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;
}
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 14:41:48
Alıntı yapılan: ThePosition - 13 Şubat 2022, 14:35:03
Timer sonlandirilmamış aşağıdaki şekilde dener misin :
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);
KillTimer(PET_Timer[playerid]);
}
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;
}

(https://cdn.discordapp.com/attachments/767074905639485464/942384802806521876/unknown.png)

Timer'ı burada kullandığım için olsa gerek ki KillTimer'ı ekleyince direkt olarak hiç hareket etmiyor pet.
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: squarepants - 13 Şubat 2022, 15:00:26
Peki, aşağıdaki şekilde deneyip tekrar test eder misin :
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.
}
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;
}
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 13 Şubat 2022, 15:21:55
Alıntı yapılan: ThePosition - 13 Şubat 2022, 15:00:26
Peki, aşağıdaki şekilde deneyip tekrar test eder misin :
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.
}
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;
}

Şu an koşuyor fakat yine en başta olduğu gibi olduğu yerde koşuyor pozisyon değiştirmiyor. Benim olduğum yöne doğru dönüyor ve koşma animasyonuna giriyor. Çok garip pozisyon değiştirmemesi.
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 22 Şubat 2022, 01:37:10
Neredeyse 10 gün geçti. Bilgisi olan var mıdır acaba bu konu hakkında?
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: squarepants - 26 Şubat 2022, 17:19:12
Muhtemelen OnGameModeInit ayarlarını eksik yaptığınızdan da kaynaklanıyor olabilir, aşağıda verdiğim örneği kullanmayı deneyin :

new PET[MAX_PLAYERS], PET_Timer[MAX_PLAYERS];
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[2]);
  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);
}
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.5 * floatsin(-aPos[3], degrees);
aPos[1] += 0.5 * 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;
}

public OnGameModeInit()
{
  MapAndreas_Init(MAP_ANDREAS_MODE_FULL);
return 1;
}
CMD:aktorgetir(playerid)
{
new Float:Koord[4];
GetPlayerPos(playerid, Koord[0], Koord[1], Koord[2]);
MapAndreas_FindZ_For2DCoord(Koord[1]+5, Koord[1]+5, Koord[3]);
        PET[playerid] = CreateActor(0, Koord[0]+5, Koord[1]+5, Koord[3] + 0.5, 0.0);
        PET_Timer[playerid] = SetTimerEx("ChangeActorPos", 200 , true, "ii", playerid, PET[playerid]);
return 1;
}
Başlık: Ynt: Dünyanın altına düşen aktör
Gönderen: VERITAS - 03 Mart 2022, 22:15:50
Teşekkürler sorun çözüldü.