TR26SkyWalker26TR

Yeni üye
16 Ağu 2019
182
10
0
(26) Eskişehir
Arkadaşlar selamlar, nihayet skor sistemini hallettim. Her oyuncu kendi skor değişkeni ile oynayabiliyor. Ancak şöyle bir problem oluştu, mesela ben sunucuyum. Siz de bana bağlandınız, oynuyoruz. Ben, skor kazandığımda sadece benim değişkenim değişiyor. Ama client skor kazandığında, hem benim hem kendi değişkenini değiştiriyor. Nasıl çözebilirim? Daha açık bir örnek;

Sunucu tıkladı -> Kendi Skoru +1
Client tıkladı -> Sunucunun skoru ve kendi Skoru +1
 
TR26SkyWalker26TR' Alıntı:
Arkadaşlar selamlar, nihayet skor sistemini hallettim. Her oyuncu kendi skor değişkeni ile oynayabiliyor. Ancak şöyle bir problem oluştu, mesela ben sunucuyum. Siz de bana bağlandınız, oynuyoruz. Ben, skor kazandığımda sadece benim değişkenim değişiyor. Ama client skor kazandığında, hem benim hem kendi değişkenini değiştiriyor. Nasıl çözebilirim? Daha açık bir örnek;

Sunucu tıkladı -> Kendi Skoru +1
Client tıkladı -> Sunucunun skoru ve kendi Skoru +1

Skor değişkenini nereden ve nasıl tanımladın skor alma drumunda neler gerçekleşiyor vb bilgileri vermeden yardımcı olmak zor. Blueprint lazım  :D
 
Hocam, vallaha spagetti oldu ama isterseniz buyrun;
https://blueprintue.com/blueprint/wnfnblza/
Ne var ne yok kullandım. Skor değişkeni, PlayerState üzerinde "Instance editable", "Expose on spawn" ve replicate edilmiş şekilde duruyor. Oyuncu ateş ettiğinde player state'e ulaşarak skor değişkenine 1 koyuyor. Blueprintin bu kadar karışık olmasının asıl nedeni, 4 vuruşta bir mermileri yenilemesi ve ateş etmeyi engellemesi. Beceremeyince karıştırdım hepsini. :d
 
TR26SkyWalker26TR' Alıntı:
Hocam, vallaha spagetti oldu ama isterseniz buyrun;
https://blueprintue.com/blueprint/wnfnblza/
Ne var ne yok kullandım. Skor değişkeni, PlayerState üzerinde "Instance editable", "Expose on spawn" ve replicate edilmiş şekilde duruyor. Oyuncu ateş ettiğinde player state'e ulaşarak skor değişkenine 1 koyuyor. Blueprintin bu kadar karışık olmasının asıl nedeni, 4 vuruşta bir mermileri yenilemesi ve ateş etmeyi engellemesi. Beceremeyince karıştırdım hepsini. :d

Çok fazla, hemde çok faz yanlış yol izliyorsunuz. Multiplayer alt yapınızı tekrar güncellemenizi tavsiye ediyorum.

ÖZET

-
Birincisi bütün kodlar çoklu yayın (multicast) yapılmaz, sadece gerekli kodları, nesneleri sunucudan istemciye (Client) gönderilip ve ya çoklu yayın (Multicast) yapılır ya da gereksiz ve önemsiz kodları istemcide çalştırılır.
(Sunucu upload kapasitesini ve istemci dwonload kapasitesini zorlamamak için istemciden alınan bilgilere göre kodlar sunucuda çalışır ve gerekli bilgiler istemciye gider yada kod tamamen istemcide çalışır.)

-Kodlar sunucuda çalıştıktan sonra çoklu yayın yapılır ve ya istemciye gönderilir.(Güvenliğe önem vermiyorsanız 'actor, değişken vb.' Raplication tikini işaretleyebilirsiniz.)

-Güvenlik için  UE4 altyapının bize sunmuş olduğu öncelikle  görevi güvenlik ile ilgi olan ve farklı amaçlarda kullanılan  switch has authority kodunu kullanmalıyız.(Farklı amaç derken; online veri alış verişi alanında, farklı amaçlarda kullanılmakta.)

ÖNEMLİ !!!!!!


-Multiplayer oyunlarda güvenlik olayı bi kaç konu dışında  ele alınmaz. Mesela rekor, kullanıcı bilgileri vb. Bu olayları ele almak için wep sunucusuna benzer yani  verileri saklayabileceğimiz online tepolama alanına ihtiyaç duymaktayız. Aynı zamanda host daima istemci olur; istemci host oluşturur, diyer oyuncular hosta katılabilir.
          Benim düşüncem multiplayer oyunlarda hiçbirşekilde güvenlik ele alınmamalı. Kullanıcı bilgilerini sunucuda barındırsanız bile rekor vs. verilerini oyuncu, oyun içi hileden dolayı bu tarz verileri kısa süre içinde kasabilir.

-
İlk 3 madde online alt yapıya sahip olan oyunlar için geçerlidir.

DAHADA ÖNMLİSİ!!!!!!

-Sunucu ve istemci için upload ve dwonload ve de sunucuyu yormamak adına bunları göz önünde bulundurarak dengede tutulmalı. 
 
Hocam, yardım etseniz hani? Spagetti kısımları oyun bittikten sonra tek tek düzelteceğim. Acaba skoru başka nasıl çağırayım? Her oyuncu için tek tek çağırılan tek şey player state değil mi? Karakter blueprinti üzerinden mi çağırayım skor değişkenini?
Çok fazla, hemde çok faz yanlış yol izliyorsunuz. Multiplayer alt yapınızı tekrar güncellemenizi tavsiye ediyorum.

ÖZET

-
Birincisi bütün kodlar çoklu yayın (multicast) yapılmaz, sadece gerekli kodları, nesneleri sunucudan istemciye (Client) gönderilip ve ya çoklu yayın (Multicast) yapılır ya da gereksiz ve önemsiz kodları istemcide çalştırılır.
(Sunucu upload kapasitesini ve istemci dwonload kapasitesini zorlamamak için istemciden alınan bilgilere göre kodlar sunucuda çalışır ve gerekli bilgiler istemciye gider yada kod tamamen istemcide çalışır.)

-Kodlar sunucuda çalıştıktan sonra çoklu yayın yapılır ve ya istemciye gönderilir.(Güvenliğe önem vermiyorsanız 'actor, değişken vb.' Raplication tikini işaretleyebilirsiniz.)

-Güvenlik için  UE4 altyapının bize sunmuş olduğu öncelikle  görevi güvenlik ile ilgi olan ve farklı amaçlarda kullanılan  switch has authority kodunu kullanmalıyız.(Farklı amaç derken; online veri alış verişi alanında, farklı amaçlarda kullanılmakta.)

ÖNEMLİ !!!!!!


-Multiplayer oyunlarda güvenlik olayı bi kaç konu dışında  ele alınmaz. Mesela rekor, kullanıcı bilgileri vb. Bu olayları ele almak için wep sunucusuna benzer yani  verileri saklayabileceğimiz online tepolama alanına ihtiyaç duymaktayız. Aynı zamanda host daima istemci olur; istemci host oluşturur, diyer oyuncular hosta katılabilir.
          Benim düşüncem multiplayer oyunlarda hiçbirşekilde güvenlik ele alınmamalı. Kullanıcı bilgilerini sunucuda barındırsanız bile rekor vs. verilerini oyuncu, oyun içi hileden dolayı bu tarz verileri kısa süre içinde kasabilir.

-
İlk 3 madde online alt yapıya sahip olan oyunlar için geçerlidir.

DAHADA ÖNMLİSİ!!!!!!

-Sunucu ve istemci için upload ve dwonload ve de sunucuyu yormamak adına bunları göz önünde bulundurarak dengede tutulmalı.
Hocam güvenlik kısmında pek endişelenmiyorum, çünkü multiplayer kısmını oluştururken Unreal Engine'nin kendi tutorialini kullandım. Sadece karakter blueprintinde ateş etme kısmı böyle spagetti oldu.
 
1- Actor bp'de aşağıdaki hit olayını sunucuda yürütülmesi gerekir. (Güvenlik için switch has authory kullanılabilir.)


Ac1.PNG



2- İki widget oluşturuyoruz.


1.PNG


3_  Scor Tex Box ve player name adına iki farklı  fonctions oluşturmalıyız. 


4.PNG


4- Değişkenleri Create widget' de  referans alınacak  şekilde ayarlanmalı.


5.PNG


4- Ana Widget' imizde tasırımı yapıyoruz.


3.PNG


5- PlayerRef değişkenini.  Create widget' den referans alınacak şekilde ayarlıyoruz. 
Event construct olayı altında oyuncularn adını ve skor bilgilerini  child ediyoruz.


6.PNG


6- Son olrak widgetimizi ekrana yazdırmak için actor bp gidip widgetimizi ekrana yazdırıyoruz. Tabiki bu olayları ele alırken sadece istemcide çalıştırıyoruz. Actor bp'de ki skor değişkenini raplicated etmeyi unutmuyoruz.


2.PNG


Son olarak bu şekide gözükmekte.


Ekran_Alnts.PNG
 
zoraki' Alıntı:
1- Actor bp'de aşağıdaki hit olayını sunucuda yürütülmesi gerekir. (Güvenlik için switch has authory kullanılabilir.)





2- İki widget oluşturuyoruz.




3_  Scor Tex Box ve player name adına iki farklı  fonctions oluşturmalıyız. 




4- Değişkenleri Create widget' de  referans alınacak  şekilde ayarlanmalı.




4- Ana Widget' imizde tasırımı yapıyoruz.




5- PlayerRef değişkenini.  Create widget' den referans alınacak şekilde ayarlıyoruz. 
Event construct olayı altında oyuncularn adını ve skor bilgilerini  child ediyoruz.




6- Son olrak widgetimizi ekrana yazdırmak için actor bp gidip widgetimizi ekrana yazdırıyoruz. Tabiki bu olayları ele alırken sadece istemcide çalıştırıyoruz. Actor bp'de ki skor değişkenini raplicated etmeyi unutmuyoruz.




Son olarak bu şekide gözükmekte.













Hocam Actor bp'deki Hit eventini nerede ne zaman çağıracağım? InputAction'dan sonra koydum ama, tam emin değilim. Ben "Alt" tuşuna basıldığında Widgetin oluşturulmasını istediğimden, "Tab" yerine "Alt" koydum ama sunucu widget oluşturamıyor ve her alt tuşuna bastığımda aynı karakterleri child olarak ekliyor. Switch has authoriy'i kaldırdım olmadı, hem authoriy hem de remote'yi exece bağladım ama yine olmadı. Son olarak, karakter öldüğünde skor sıfırlanıyor. Nereye nasıl kaydedebilirim hocam?