romegames 1
romegames
Bvural41 1
Bvural41
Best Studio 1
Best Studio
BlackFullMoon 1
BlackFullMoon
NovaLst 1
NovaLst
SLyFeLLowTR 1
SLyFeLLowTR
xranzei 1
xranzei
InfernoShade 1
InfernoShade
shrpnl 1
shrpnl
D 1
delimuratt
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Altın Konu [C++] Client-Game Paket Transferi

  • Konuyu başlatan Konuyu başlatan olkan41
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 12
  • Görüntüleme Görüntüleme 1K

olkan41

Müzik Prodüktörü ve Ses Tasarımcısı
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
TM Üye
Katılım
4 Ağu 2010
Konular
356
Mesajlar
4,122
Çözüm
74
Online süresi
3mo 14d
Reaksiyon Skoru
2,235
Altın Konu
82
Başarım Puanı
292
Yaş
32
MmoLira
3,067
DevLira
138
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Anlatım Tamamen Bana Aittir.

DungeonInfo Sisteminden Örnek Vereceğim.

Benim DungeonInfo Sistemim'de Zindan Süre Sıfırlama Buton İle Yapılıyor.

self.dungeonIndex İsimli Bir Tanımlamam Var. Bu Tanımlama DungeonInfo'daki Butonlara Bastığımda Bana Bir Sayı Verir.

Örneğin : Zodyak Tapınağı-> self.dungeonIndex = 0 , Ork Labirenti-> self.dungeonIndex = 1

(Zindan Süre Sıfırlama Butonunu Nasıl Yaptım Gibi İşlemleri Anlatmayacağım.)

Geçelim İşin Özüne;

Zodyak Tapınağı Butonuna Basıyorum ve Ardından Zindan Süre Sıfırlama Butonuna Bastığımda ClientSource/PythonNetworkStreamModule.cpp'deki Modül Dizisindeki Fonksiyonu Kullanmasını Söylüyorum.

net.DungeonInfoResetTime(self.dungeonIndex)

1db3ef6460a0708aa.png


Argüman Olarak self.dungeonIndex Alıyor. (self.dungeonIndex Ne İşe Yaradığını Yukarıda Anlattım.)

Şimdi Gelelim PythonNetworkStreamModule.cpp'ye

1.png


BYTE Veri Tipinde Bir Tanımlama Yapıyorum. Karşısına Bir Değer Yazmıyorum Çünkü Değerin Kullanıcıdan Gelmesini İstiyorum.

Bu Tanımlama Benim 1.Argümanım ve Zaten 1 Tane Argümanımız Var.

if (!PyTuple_GetByte(poArgs, 0, &dungeonIdx)) = Buradaki 0 Aslında 1.ci Argümanımız. 2.ci Bir Argümanımız Olsaydı Yeni Bir Tanımlama Yapıp Veri Tipine Göre Tuplemimizi Alıp İçine 1 Yazacaktık.

rkNetStream.DungeonInfoResetTime(dungeonIdx);

CPythonNetworkStream Sınıfından Bir Fonksiyona Göndereceğimizi Söylüyoruz Argüman İle Birlikte.

2.png


O Fonksiyona Geldik.

Bir struct Türünde Yapımız Var ve Bu Yapımızın Değişkeni ve Elemenları Var. Küçük P ise Bu Değişkeni Temsil Ediyor.

Ayrıca Tanımlaması + Ek

6.png


Packet.h

4.png


5.png



Burada Client Artık Game'ye Gönderiyor. Gelelim Game Tarafına

ClientSource/Packet.h 'deki Olayı Game/Packet.h'de Anlatmayacağım Bir Fark Yok. Copy - Paste

GameSource/InputMain.cpp

8.png


Client'den Gelen Paketimiz. Paket Çalıştığında Nelerin Olacağını, Altta Bir Fonksiyona Göndereceğimizi Söylüyoruz.

7.png


Burada DungeonInfo Sınıfından DungeonInfoResetTime İsimli Bir Fonksiyonu Çalıştıracağımı ve Argümanı Olarak LPCHARACTER Sınıfının ve Packet.h'deki Struct Yapımızdan dungeonIdx isimli Elemanı Alacağımı Söylüyorum.

Gelelim DungeonInfo.cpp'ye

10.png


Karakter Ölü İse ve ClientSourceden Gelen Sayının 0'dan Küçük ve 16'dan Büyük ise İşlemin Durdurulmasını Söylüyorum.

(Daha Farklı Engeller Var Konu Uzamasın Diye Bu Kadarını Gösteriyorum.)

11.png

71129 Vnumlu İtem Envanterimde Yok ise Hata Mesajı Vermesini ve İşlemi Durdurmasını Söylüyorum.

14c6eb3d2df7cf873.png

1 Adet Sabit Tanımlı std::string Türü ve flag_dungeon ismini veriyorum.

İçeriğinden Örnek:

2e9841c89df07d772.png


Sabitler İçin DungeonInfo.h

3dec1b849ed732e47.png



16.png



Burada flag_dungeon Dizisindeki Sayıları Client'den Gelen dungeonIdx = idx Sayısına Karşılık Belirtiyorum. ve Burada Süre Kontrolü Yapıyorum.

Örneğin: Client'den Gelen idx == 6 'ya Dizideki 6.cı Diziyi Alacak.

17.png


Burada İtemi Sildiriyorum, SetQuestFlag İle Süreyi Sıfırlıyorum ve Oyuna Zindan Süresinin Sıfırlandığını Söyleyen Bir Mesaj Gönderiyorum.
Bu Pencerede Anlık Yenilenmez. Anlık Yenilenmesi İçin Client Tarafına Tekrar Bir Paket Göndermeniz Gerekir. Fakat Işınlandığınızda Pencere'de Güncellenecektir.

Tekrar Client Tarafına Gönderimi'de Ekleyeceğim.

packet_info.cpp

10a0fe7c4e9e7bf97.png


İnput.h

2.png


DungeonInfo.h

3.png


KANIT:


giphy.gif
 

Ekli dosyalar

  • 12.png
    12.png
    1.5 KB · Görüntüleme: 0
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Paylaşım için teşekkürler
 
50 yıl sonra böyle bir paylaşımın gelmesi gerçekten şaşırtıyor. Lafta paylaşım, bilgilendirme forumuyuz ama herkes bilgilerini kendisine saklıyor. Paylaşım için teşekkürler inşallah bir şeyler için öncü olur bu.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst