leonscottkfm

Unreal MVP
31 May 2015
1,493
5
213
63
28
(34) İstanbul Avrupa
store.steampowered.com
MMORPG oyunlarında ya da bazı multiplayer oyunlarda chat içerisine komut yazılabiliyor. Mesela SAMP ya da MTA gibi oyunlarda da vardı. CS1.6 da da vardı.
Aynısını Blueprint ile yapmaya çalıştığımda bir karmaşa söz konusu. Switch on string şeklinde yapıyorum genelde. Ve her komut için Custom Event çağırıyorum. Aslında direkt string verilerek bir komut çağırılsa çok iyi olurdu. Mesela bir event var diyelim adı önceden belli. GiveCoin olsun ismi. Aynı set timer by function name gibi fonksiyon çağırıcı bir şey olsa. TMapArray gibi bir şey ile "komut,çağırılacak fonksiyon" şeklinde ayırabilsek, komutları yazar bırakırdım. O çağırması gerektiği fonksiyonu bulurdu. Mesela GiveCoin eklerdim GiveHP. Mapte karşılıklarını verirdim. Mesela GiveCoin- GivePlayerToCoin ya da GiveHP - SetPlayerMaxHP gibi. Chate yazılan şey map ile karşılaştırılır "Run Function By Name" gibi bir şey ile çalıştırılırdı. Fakat böyle bir node yok sanırım unrealde.

1775133414804.png

Fotoğrafta gördüğünüz gibi benim yaptığım sistem sürekli switch ekleyerek , custom eventleri yan yana diziyor böyle alt alta gidiyor. 200 komutum olsa burası kasmaya başlar ve şişer. Bunun bir çözümü yok mudur bilen bir arkadaşımız anlatırsa iyi olur. Ben C++ bilmem. C++ olsa çok basit bir şekilde yapısı kurulurdu bunun.
Sadece isim ile fonksiyon çağırılmaz mı?


1775133737646.png

Bu çalışıyor mesela. Loop olmadığı için de 1 kez çalışıyor. Fakat bunun timer olmayan hali yok mu bu garip kaçar. Belki garip değildir sonuçta çağırıyor fonksiyonu. Fakat bunun normal halinin olması gerekiyordu bence. Şu anda commandsMap listesine bakıyor ve chate yazılan şey ile oradaki komut aynıysa karşılığını set timer by function ile orada eşleşmiş functionu çağırtıyor. 1 kez çağırıyor çünkü loop değil.
Fakat bunun timer olmayan direkt "CallFunction" olan versiyonu olmalıydı.


1775134021586.png
Bu arada bu da çalışıyor fakat ne iş yaptığını bilmiyorum umarım arkada sürekli loop yapmıyordur.
 
Son düzenleme:
Alttaki işini görür işte BP de, aradaki fark 1 tick bekleyip fonksiyonu çağırıyor, kötü bir durum değil sonuçta, next tick timer handle kullanmaz, şişmez, clear gerektirmez. Bal börek işte çözmüşsün zaten
 
  • Beğen
Tepkiler: leonscottkfm
Alttaki işini görür işte BP de, aradaki fark 1 tick bekleyip fonksiyonu çağırıyor, kötü bir durum değil sonuçta, next tick timer handle kullanmaz, şişmez, clear gerektirmez. Bal börek işte çözmüşsün zaten
Sağolasın Evet işimi görüyor. Peki işi biraz daha zorlaştıralım :D
Sence parameter [Args] verilen komutlar nasıl yapılır ?

Mesela : !Kick [ID] [Sebep]
!Teleplayer [Player1ID] [Player2ID]

Ya da işi en üst boyuta çıkaralım. Komut gruplarının belli permissionları olsun.

Mesela

Rcon Level "ServerRestart,ServerShutdown,ServerPassword"
Admin Level "ban,machineban,killall,OpenNewLevel"
Moderatör Level "Warn,Kick,Mute,Announce,Spectator"

Her üst level alt leveli kapsar. Mesela Rcon bunların hepsini yapabilirken , admin rconu yapamaz ama moderatörün yaptıklarını yapar. Moderatörden daha aşağı seviye yoksa moderatör sadece kendi komutlarını uygulayabilir. Büyük ihtimalle arka planda integer ile bir level veririz. Mesela Rcon 3 admin 2 mod 1 . Kural ise - "Şimdiki Levelim < KomutunLeveli" komutu uygulama ve gereken leveli belirt. Tersi ise uygula. Gerisi sadece bir Label. Örneğin Leveli 2 olan birini Admin olarak göster gibi.

Benim merak ettiğim asıl olay, bu tip bir şey blueprint ile yapılabilir mi?

*Komutlar sadece bir listeye yazılarak ekleniyor ve her komutun bir işlevi var ayrıca kendi permissionları var ve parametre alabiliyor. Yani ben yeni komut eklemek istersem komutu ve parametreleri ekleyeceğim ve bu komut çalıştıracağı eventi ya da functionu kendisi bulacak.

@Khubur

Bu tip bir şey sadece C++ ile mi yapılabilir?
 
Son düzenleme:
cpp lik bir tarafı yok bu istediğinin, yeni bir structure oluştur, içine şu an kullandığın TMap i koy sadece (Commands Map), yeni bir TMap oluşur, key olarak int, value olarak yeni structure ekle (böyle olmak zorunda çünkü BP de cpp deki gib TMap e value olarak TMap eklenemiyor) şimdi dediğin hesap, priority 0 ise admin -> sadece admin structure çağıracak dolayısıyla sadece admin command list etkin, priority 1 .... devam, kaç çeşit permission varsa o kadar structure dolayısıyla erişebildikleri o kadar listen olacak, ayrıca şu priority üst kademeye erişim sağlar mı derdine düşmezsin ;)
 
  • Beğen
Tepkiler: leonscottkfm