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.

dsgn kguard
vsupload kguardedgeakademi

MT2 Paylaşım Metin2 P2P Bağlantısını Kullanarak Web Sitesine Oyundan Anlık Veri Gönderip Almak

  • Konbuyu başlatan Üye silindi 505
  • Başlangıç tarihi
Ü

Üye silindi 505

Merhaba arkadaşlar,
P2P dediğimiz zaman bir çoğumuz korkabilir. Bu zıkkım yüzünden başınıza gelmeyen kalmamıştır lakin ne işe yaradığını öğrendiğinizde kesinlikle çok seveceksiniz. <3

Öncelikle Nedur Bu P2P?
Peer-to-peer
ya da P2P olarak tanımlanır. Peer eş, denk demektir. İki veya daha fazla istemci arasında veri paylaşmak için kullanılan bir ağ protokolüdür.

Eşler, sunucuları veya sabit bilgisayarlar tarafından merkezi koordinasyon ihtiyacı olmadan, işlemci gücü, disk depolama veya ağ bant genişliği gibi kendi kaynaklarının bir kısmını, doğrudan diğer ağ katılımcıları için kullanılabilir yapabilir. Sadece sunucuların tedarikçi ve istemcilerin tüketici olduğu geleneksel istemci-sunucu modelinin aksine, eşler, hem tedarikçi hem de tüketicidir.

Metin2 Neden P2P'ye İhtiyaç Duyar?
Kanallar arası iletişimi sağlamak, anlık veri alıp göndermek için kullanılır.

Web Sitemiz İle Oyuna P2P İle Bağlanmak Mümkün Mü?
Evet mümkün fakat güvenlik önlemlerini çok iyi şekilde almanız gerekmektedir. P2P kodları ile serverinizi bir yönetici gibi yönetebilir..

Web Sitesinde P2P Bağlantısını Kullanarak Verileri Almak Mı Yoksa Veritabanı Kullanarak Almak Mı Karlı?
Bu çok az bilinen bir konudur fakat bu zamana kadar edindiğin tecrübelerde. Oyundaki her işlem anlık olarak veritabanına kayıt edilmez. Genelde fileslerde her 30dk'da bir oyun veritabanına yazılır. Bu süreyi düşürebilirsiniz.
Reboot atarken item kaybıda bu yüzden yaşanmaktadır.

Online sayacından örnek vermek gerekirse. Her bir karakteri alıp onun en son girdiği saate bakıp hepsini saydırmanız gereken bir sql cümlesi yazmanız gereklidir. Buda tabikide belli bir işlem gücü demektir. Bu veriler ise oyun ile eş bir şekilde çalışmaz. Oyunda veritabanı yedeğini ne kadar süre belirlediyseniz 30dk ise 30dk önce olanları gösterir..

Kısacası P2P kullanarak anlık olarak oyunda etkileşimde bulunabilir, veriler alabilirsiniz ve daha az kaynak tüketirsiniz.

Web Sitemizde P2P Yardımı İle Hangi İşlemleri Yaparız?
  • Anlık online sayacı yapabilirsiniz. Her bayrak için ayrı ayrı'da alabilirsiniz.
  • Oyuncuları dc atabilirsiniz.
  • GM kodlarını kullanabilirsiniz. (Panelden birisine gold gönderecekseniz p2p ile anlık gönderebilirsiniz. Veritabanı ile bu mümkün değildir! Karakterin 30dk oyunda olmaması gerekli.)
  • Anlık olarak item gönderebilirsiniz.
  • Ban, chat banı atabilrisiniz.
  • Serveri bakım moduna alabilirsiniz.
  • Eventleri açıp kapatabilirsiniz. (Panel üzerinden otomatik event başlatıcı ve bitirici sistem yapabilirsiniz.)
  • Panel üzerinden oyuna notlar gönderebilirsiniz.
Gördüğünüz gibi yapılacak çok şey var.

Tabi ben size burada her özelliği tek tek nasıl yazacağınızı anlatmayacağım.

P2P komutlarını öğrenmek için ilk önce serverinizin server kaynak kodunda;
game/src/input.cpp açıp;
Kod (C++):
  1. int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
bu satırı bulmanız.
Bunun altında "USER_COUNT" gibi komutlar var.

Örnek PHP komutu;
PHP:
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Whistle | MMO Tutkunları | mmotutkunlari.com
  5. * Date: 1/6/2017
  6. * Time: 9:47 PM
  7. */
  8. /**
  9. * Servere p2p ile bağlantı göndermek için kullanılır.
  10. *
  11. * @param $yazi
  12. * @param string $tip
  13. * @param int $port
  14. * @return array|string
  15. */
  16. function P2PSendServer($yazi, $tip = "NOTICE", $port = 13000)
  17. {
  18. // Metin2 serverin IP ve ADMINPAGE_PASSWORD
  19. $serverIp = "192.168.1.105"; $sifre = "buraya p2p adminpage_password gelecek!";
  20. // CREATE
  21. $socket = (AF_INET, SOCK_STREAM, SOL_TCP);
  22. if ($socket < 0)
  23. {
  24. echo "\n Gecersiz socket...\n";
  25. ;
  26. }
  27. $sonuc = ($socket, $serverIp, $port);
  28. if ($sonuc < 0)
  29. echo "\n Bağlantı hatası. Hata : ". ($sonuc)."\n";
  30. if($tip == "USER_COUNT")
  31. $sorgu = "\x40".$tip."\x0A";
  32. else
  33. {
  34. $sorgu2 = "\x40".$sifre."\x0A";
  35. $sorguBoyut2 = ($sorgu2);
  36. $sorguSonuc2 = ($socket, $sorgu2, $sorguBoyut2);
  37. ($socket, $sonuc2, 256, 0);
  38. $sorgu = "\x40".$tip." ".$yazi."\x0A";
  39. }
  40. $sorguBoyut = ($sorgu);
  41. $sorguSonuc = ($socket, $sorgu, $sorguBoyut);
  42. if ($sorguSonuc < 0)
  43. echo "Hata: ". ($sorguSonuc)."\n";
  44. else
  45. $sonuc1 = ($socket, $sonuc2, 256, 0);
  46. if ($tip == "USER_COUNT")
  47. {
  48. $say = ($sonuc2);
  49. $say = (' ', $say);
  50. //$say[0] = Kanaldaki toplam online
  51. //$say[1] = Kırmızı bayrak toplam online
  52. //$say[2] = Sarı bayrak toplam online
  53. //$say[3] = Mavi bayrak toplam online
  54. //$say[4] = Çekirdek toplam online
  55. return $say;
  56. }
  57. else
  58. {
  59. return "$sonuc2\n";
  60. }
  61. // P2P Baglantı kapat.
  62. ($socket);
  63. }
  64. $say1 = P2PSendServer("", "USER_COUNT", 14000); //CH1
  65. ?>
 
AdBlock Detected

Anlıyoruz, reklamlar can sıkıcı!

Elbette, reklam engelleme yazılımı reklamları engellemede harika bir iş çıkarır, ancak aynı zamanda web sitemizin faydalı özelliklerini de engeller. En iyi site deneyimi için lütfen AdBlocker'ınızı devre dışı bırakın.

AdBlock'u Devre Dışı Bıraktım.