VoiclessCry

Yeni üye
8 Şub 2021
135
2
0
(16) Bursa
https://pasteboard.co/KecFvx9.png
elimde buna benzer item lar var, ben bunları projede her yere koyduğumda how many item bölümünü el ile giriyorum. yerden bu itemi aldırdığımda örneğin 400 adet var ve bunları sistem 2li 2li stackleyebiliyor. Envanterin slot sayısı da 300 olduğundan 100 item dışarıda kalacak, buraya kadar olan işlemleri yaptırttım fakat aynı yerdeki item ın default ayarlarına erişip onları yeniden oluşturmam gerekiyor ki eskiden 400 adet olan how many item kısmını (400-300=) 100 yapabileyim. Böyle bir komut mevcutmu veya yapmamın başka bir yolu varmıdır?
:huh: :huh:
 
1- ItemBP ye bir integer variable ekle ismi stack olsun. 
2- Item BP ye bir Blueprint Interface ekle ismi de Interact Interface olsun.
3- Interact Interface'e Interact isminde bir fonksiyon ekle. 
4- (opsiyonel)Item BP ye birkaç fonsiyon ekle. OnIventoryFull, OnPickedUp, ReduceStack gibi.
4- Kullanıcı örneğin F tuşu ile itemi almaya çalıştığında bu itemdeki Interact fonskiyonunu çağır.

4- Inventory bilgilerini sakladığın blueprintte bir fonksiyon oluştur. Fonksiyonun ismi GetAvaiableSpace olsun. Input olarak ItemBP class, ya da class yerine ItemID olarak integer de kullanabilirsin. Return olarak da bir integer atayacaksın ismi de avaiable space olsun. Bu fonksiyonda yapacağın şey, fonksiyonda input olarak girilen item ID ve Stack bilgisi ile Inventory de aynı classtan item var mı onu kontrol edeceksin. Varsa stack eksigi var mı ona bakacaksın. Örneğin 1 tane iksir var ve maksimum stack sayısı 2. Toplam 20 slot var ve 19 tanesi boş. Bu durumda 1+19*2 39 tane alabilir anlamına gelecek. Bu fonksiyonda bu işlemi yapıp return olarak 39 döndüreceksin.

5- ItemBP de Interact fonksiyonu çağırılınca Inventory referansını alıp GetAvaiableSpace fonsiyonunu çağırıp input olarak ItemID gireceksin. Fonsiyonun bir çıktısı olacak ve o çıktıya göre işlem yapacağız.

6- a)Diyelim ki fonksiyon 0 cevabı verdi. O zaman bu item hiç alınamaz. Branch ile OnInventoryFull eventini çağır. Bu event içinde işte ekrana yazı mı yazdırırsın, ses mi oynatırsın bunları yaptırabilirsin.
    b)Diyelim ki fonksiyon 39 rakamını verdi ve yerdeki stack 300. O zaman diyorsun ki stack>39 -> ReduceStack eventini çağırıyorsun. ReducaStack eventinde stack-=39 diyorsun yani 269 yapıyorsun. Yerde artık 269 stack iksir var ama henüz Inventorye almadık. Inventory de de bir fonksiyon oluşturuyorsun. AddItemToInventory diye. Input olarak ItemID ve Stack diye iki integer alıyorsun ve bunu çağırıyorsun gerisi Inventoryde.
    c)Diyelim ki fonksiyon 350 çevirdi yani yerdeki itemin tamamını alıyor. Bu sefer OnPickedUp diyip yine AddItemToInventory çağırıyorsun. Sonra Efekt, ses ne istersen yaptırıp destroy actor diyorsun.

Multiplayerde durum farklı olur. AddItemTo Inventory ve ItemBP deki fonsksiyonların çoğunu server ve multicast ta çağırman gerekir.