GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Dünyanın altına düşen aktör

Başlatan VERITAS, 13 Şubat 2022, 02:40:51

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

VERITAS

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.


sharax

açıldığında çıkan sorun, pluginlerin tam olarak kurulmamasından kaynaklı olabilir.


VERITAS

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;



VERITAS

Pawno koduna tıkladığımda yazının karıştığını fark ettim o yüzden pawn üzerinden fotoğraf atıyorum;



sharax

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?


VERITAS

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.


squarepants

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;
}


VERITAS

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;
}



Timer'ı burada kullandığım için olsa gerek ki KillTimer'ı ekleyince direkt olarak hiç hareket etmiyor pet.


squarepants

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;
}


VERITAS

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.


VERITAS

Neredeyse 10 gün geçti. Bilgisi olan var mıdır acaba bu konu hakkında?


squarepants

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;
}


VERITAS

Teşekkürler sorun çözüldü.