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.
açıldığında çıkan sorun, pluginlerin tam olarak kurulmamasından kaynaklı olabilir.
Alıntı yapılan: sharax - 13 Şubat 2022, 11:14:58açı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.
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)
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)
Alıntı yapılan: VERITAS - 13 Şubat 2022, 13:31:56Dediğ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?
Alıntı yapılan: sharax - 13 Şubat 2022, 13:46:56Alıntı yapılan: VERITAS - 13 Şubat 2022, 13:31:56Dediğ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.
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;
}
Alıntı yapılan: ThePosition - 13 Şubat 2022, 14:35:03Timer 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.
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;
}
Alıntı yapılan: ThePosition - 13 Şubat 2022, 15:00:26Peki, 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.
Neredeyse 10 gün geçti. Bilgisi olan var mıdır acaba bu konu hakkında?
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;
}
Teşekkürler sorun çözüldü.