Neler yeni

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Türkiye'nin İlk ve tek FiveM forum adresi

Forum adresimize hoş geldin FiveMTürk olarak amacımız siz değerli kullanıcılarımıza en aktif fikir ve paylaşım platformu sunmak bir yana en güvenilir şekilde alışveriş yapabileceğiniz bir platform sunmaktır.
DF DF
DF DF
DF DF

Rehber 1. ClientSide Optimizasyonu (FPS++) | Basit Bir Method Anlatımı

tgemre

?????????
FT Kullanıcı
Katılım
3 yıl 6 ay 19 gün
Mesajlar
2,765
Discord
tgemre#6161
Merhaba,

Daha önce ClientSide ve ServerSide ın nasıl optimize edilebileceğini anlattığım bir konum vardı
ancak anlatımımın yetersiz olduğunu düşündüm ve bu konuyu açtım.


Yapacağımız Optimizasyonun Olayı Ne ?: Kod veya kod bloklarını belirlediğimiz mesafe/eylem/olay gibi tetikleyicilerin optimizasyon için kullanacağız. Kısaca event dolayısıyla kodu aktif edeceğiz.

Nasıl Yapılır ? ;


Göreceğiniz örnekte yapacağım optimizasyonu "DrawMarker" Nativesi üzerinde kullanacağım.
DrawMarker nativesi resmon değerlerini fazlasıyla etkilemektedir

methodumu mesafe yi kullanarak uygulayacağım. Eğer oyuncu (client) Marker ın olduğu konumda belirli bir uzaklıkta bulunuyor ise Marker ı sileceğim

İlk olarak kodlarımı yazmamda bana yardımcı olması için local operatörünü kullanacağım. PlayerPedId() veya GetPlayerPed(-1) oyuncuyu temsil etmektedir
ancak yazımları fazlasıyla uzun ve bu beni rahatsız ediyor. Optimize edeceğim Client Scriptini (dosyasını) Açtım ve en üst satıra


Ruby:
local player = PlayerPedId()

Kodunu yerleştiriyorum...

Önemli : PlayerPedId() Oyuncu girdikçe kendini güncellemektedir ancak GetPlayerPed(-1) Limitsiz oyuncu gibi anlama gelir dolayısıyla Kesinlikle PlayerPedId() kullanın (çok bi fark yok)

Dediğim gibi DrawMarker (marker oluşturmak) ı optimize edecektik.


**DrawMarker döngü içerisinde kullanılan bir native dir aksi taktirde çalışmaz**

DrawMarker in bulunduğu döngün içerisine


Ruby:
local playerLoc = GetEntityCoords(player)

Kodunu yerleştiriyorum. Bu sunucuda bulunan oyuncuların kordinatlarını almaktadır.

!! Ve DrawMarker in bulunduğu satırın bir üstüne bir kod yazıyorum

C++:
if GetDistanceBetweenCoords(playerLoc.x, playerLoc.y, playerLoc.z, 1011.34, -692.64, 56.97, true) < 20 then

(( playerLoc.<veri> "." dan sonra playerLoc içerisindeki almak istediğimiz veri ye ulaşıyoruz, sondaki "20" metre cinsinden mesafeyi temsil ediyor ))

ve DrawMarker ın altına "end" ekliyoruz.

Örnek :
36360


GetDistanceBetweenCoords Nativesinin Parametrelerini İnceleyebilirsiniz


Başka Örnekler :

Bu sefer "mesafe" dışında başka birşey kullanalım...

Mesela oyuncu "X" Tuşuna basar ise Marker oluşsun. Bunun için
IsControlPressed Nativesini kullanacağız

Herşeyden önce "X" Tuşunun INDEX yani Buton koduna ulaşmamız gerekiyor
Ulaşabiliriniz (X in kodu 73)
Native in parametrelerine göz atmak için

Hızlı hızlı yapıyorum mantığını kavradığınızı düşünerek direkt olarak örnek vereceğim

36361

Şimdi ise "X" tuşu kullanıldığında Marker oluşuyor

Verilebilecek çok fazla örnek var. Verdiklerimin Optimizasyonun mantığını kavratacağını düşünüyorum sizlere

Aklınıza takılan biryer olursa yorumlarda çekinmeden paylaşabilirsiniz


İyi Günler İyi Forumlar...
 
Moderatör tarafında düzenlendi:
YARARLI
 
Eline koluna sağlık yararlı bir paylaşım.
 
Eline sağlık bir çok kişinin yararına olacaktır.
 
playerLoc tek tek yazmak yerine şöyle kullanabilirsiniz:

Kod:
if GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), x2, y2, z2, true) <= 15 then

Ayrıca sleep methodunu görmedim ben konuda?
 
playerLoc tek tek yazmak yerine şöyle kullanabilirsiniz:

Kod:
if GetDistanceBetweenCoords(GetEntityCoords(PlayerPedId()), x2, y2, z2, true) <= 15 then

Ayrıca sleep methodunu görmedim ben konuda?
Katılıyorum thread ve sleep ile birlikte göstersen daha yararlı olur
 
Konunun mantığı şu arkadaşlar. Client side yani oyundayken bizim ramimizde çalışan kodlar infinity bir döngü veya sürekli bir döngü içerisindeyse bu performans düşüklüğüne sebep olur. Olabildiğince minimum döngü ile büyük işler yapmaya çalışmamız gerekiyor. Kullanmadığınız zaman döngüleri gerek kırmanız gerek timeout verdirmeniz gerekiyor
 
Çok güzel paylaşım eline sağlık. Butun marker çizilmesini oyuncuya özel tek bir yerden yönetse
 
Bu güzel Paylaşım için teşekkür ederim
Serverside için bir tık detaylı rehber bekliyorum sizden
 
+rep
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Bu konuyu görüntüleyen kullanıcılar

Tema düzenleyici

Tema özelletirmeleri

Granit arka planlar

Lütfen Javascript'i etkinleştirin!Javascript'i etkinleştirin!