Gelişmiş Işınlanma Sistemi[C++&PYTHON]

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 104

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
.
------------------------------------------------------------------

Cmd.cpp açılır-aratılır:
Kod:
ACMD(do_pcbang_check);
Altına eklenir;
Kod:
ACMD(do_isinla_beni_beybi); ACMD(do_isinla_sure); ACMD(do_black_kalan); ACMD(do_hak_ver);
Tekrar aratılır:
Kod:
{ "slow",        do_slow,        0,            POS_DEAD,    GM_LOW_WIZARD    },
Altına eklenir;
Kod:
{ "isinla_beni_beybi",            do_isinla_beni_beybi,            0,            POS_DEAD,    GM_PLAYER    },     { "isinla_sure",            do_isinla_sure,            0,            POS_DEAD,    GM_PLAYER    },     { "black_kalan",            do_black_kalan,            0,            POS_DEAD,    GM_PLAYER    },          { "hak_ver",            do_hak_ver,             0,             POS_DEAD,     GM_LOW_WIZARD },     ///new system by Blackdragonx61
cmd_general.cpp açılır-aratılır:
Kod:
ACMD(do_view_equip)
Altına Eklenir;

Kod:
ACMD(do_black_kalan) {     int kalan = ch->GetQuestFlag("isinlama.black");     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d hakkiniz kaldi"), kalan); } ACMD(do_isinla_sure) {     char arg1[256];     one_argument(argument, arg1, sizeof(arg1));     if (*arg1)     {         switch (LOWER(*arg1))         {             case '1':    // 5 tane    5m             if (ch->GetGold() < 5000000)             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("paprarar yohh"));                 return;             }             else             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?slem tamamlandi"));                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?sinlanma limiti 5 yapildi"));                 ch->PointChange(POINT_GOLD, -5000000, true);                 ch->SetQuestFlag("isinlama.black", 5);             }             break;                         case '2':                    if (ch->GetGold() < 10000000)             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("paprarar yohh"));                 return;             }             else             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?slem tamamlandi"));                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?sinlanma limiti 10 yapildi"));                 ch->PointChange(POINT_GOLD, -10000000, true);//10M                 ch->SetQuestFlag("isinlama.black", 10);             }             //ch->SetQuestFlag("isinlayamam.sure", 0);             break;                         case '3':                    if (ch->GetGold() < 30000000)             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("paprarar yohh"));                 return;             }             else             {                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?slem tamamlandi"));                 ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?sinlanma limiti 50 yapildi"));                 ch->PointChange(POINT_GOLD, -30000000, true);//30M                 ch->SetQuestFlag("isinlama.black", 50);             }             //ch->SetQuestFlag("isinlayamam.sure", 0);             break;         }     } } ACMD(do_isinla_beni_beybi) {     char arg1[256];     one_argument(argument, arg1, sizeof(arg1));     //int son_sure = ch->GetQuestFlag("isinlayamam.sure");     int kalan = ch->GetQuestFlag("isinlama.black");         if (ch->IsDead() || ch->GetHP() <= 0 || !ch->IsPC())     {         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Oluyken bu islem gerceklestirilemez!"));         return;     }         if (ch->GetQuestFlag("isinlama.black") == 0)     {         //ch->SetQuestFlag("isinlayamam.sure", get_global_time());         ch->ChatPacket(CHAT_TYPE_COMMAND, "isinlayamam");         //ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("1 saat beklemelisin"));         return;     }         if (*arg1)     {         switch (LOWER(*arg1))         {             case 'a'://Orumcek Zindanı 1.kat basi                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(59800, 497300);                 ch->Stop();             break;                     case 'b'://Mavi 1.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(959800,268400);                 ch->Stop();                 break;                         case 'c'://Kırmızı 1.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(474300,954800);                 ch->Stop();                 break;                             case 'd'://Sari 1.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(63800,166400);                 ch->Stop();                 break;             case 'e'://Devler Diyarı                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(829900,763300);                 ch->Stop();                 break;             case 'f':// MAVi 2.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(873100,242600);                 ch->Stop();                 break;             case 'g'://Kırmızı 2.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(360800,877600);                 ch->Stop();                 break;             case 'h'://Sari 2.                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(138500,234900);                 ch->Stop();                 break;             case 'i'://Hayalet ormani                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(288700,5700);                 ch->Stop();                 break;             case 'j':// Orumcek zindanı 2.Kat Basi                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 //ch->WarpSet(x, y);                 ch->Stop();                 break;             case 'k'://Seytan kulesi Black ya I love you askimmm                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(590500,110500);                 ch->Stop();                 break;             case 'l'://Yongbi colu                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(296800,547400);                 ch->Stop();                 break;             case 'm'://Surgun girisi                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(284400,810700);                 ch->Stop();                 break;             case 'n'://Kizil Orman                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(1119900,70800);                 ch->Stop();                 break;             case 'o'://Sohan dagi                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(436400,215600);                 ch->Stop();                 break;             case 'p'://Ox haritasi                 if (!ch->IsGM())                 {                     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("yalnizca gmler kullanir"));                 }                 else                 {                     ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                     //ch->WarpSet(x, y);                     ch->Stop();                 }                 break;             case 'r'://Nemere'nin gozetleme kulesi 90 sinir                 if (ch->GetLevel() < 90)                 {                     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("level yeterli degil"));                 }                 else                 {                     ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                     ch->WarpSet(432792,165998);                     ch->Stop();                 }                 break;             case 's'://Kırmızı Ejdeha Kalesi sinir 90                 if (ch->GetLevel() < 90)                 {                     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("level yeterli degil"));                 }                 else                 {                     ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                     ch->WarpSet(613800,707000);                     ch->Stop();                 }                 break;             case 't'://Vadi                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 ch->WarpSet(336000,755600);                 ch->Stop();                 break;             case 'u'://CapeDragon                 if (ch->GetLevel() < 90)                 {                     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("level yeterli degil"));                 }                 else                 {                     ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                     //ch->WarpSet(x, y);                     ch->Stop();                 }                 break;             case 'v'://Maymunlar Zindani                 ch->SetQuestFlag("isinlama.black", ch->GetQuestFlag("isinlama.black")-1);                 //ch->WarpSet(x, y);                 ch->Stop();                 break;         }     } }

---------------------------
cmd_gm.cpp açılır-aratılır:

Kod:
ACMD(do_group_random)
Altına Eklenir;

Kod:
ACMD (do_hak_ver) {     char arg1[256], arg2[256];     long hak;     const char*  Name;     two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));     if (!*arg1 || !*arg2)     {         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("/hak_ver oyuncu hak miktari"));         return;     }     Name = arg1;     hak = atoi(arg2);     LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(Name);     if(!tch)     {         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Oyuncu %s bulunamadi."), Name);         return;     }     tch->SetQuestFlag("isinlama.black", tch->GetQuestFlag("isinlama.black") + hak);     tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Administrator %s hesabiniza %ld hak verdi."), ch->GetName(), hak);     ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%ld hak verdin, bu hesaba; %s."),hak,tch->GetName()); }
-------------------
PYTHON
root.py açılır
İmport'lara eklenir;
Kod:
import isinlama
Sona eklenir:


Tekrar aratılır:

Kod:
onPressKeyDict[app.DIK_F4]    = lambda : self.__PressQuickSlot(7)
Altına Eklenir;
Kod:
onPressKeyDict[app.DIK_F5]  = lambda : self.Black_ac()
Tekrar aratılır:
Kod:
"PlayMusic"                : self.__PlayMusic,
Altına eklenir;
Kod:
"isinlayamam"            : self.Blackcim,
En sona eklenir;

---------------------------------
constinfo.py'ye ekleyin:

mavirenk="|cff00ccff"
yesilrenk="|cff00CC00|Hemp|h"
sarirenk="|cffFDD017|H|h"
kirmizirenk="|cffff0000|Hemp|h"
---------------------------------
Locale_tr/locale_game.txt'ye eklenir:
Kod:
BLACK_DIALOG    Aşağıdan hak satın alabilirsiniz.BLACK_DIALOG2    Işınlanma hakkınız bitti. BLACK_SORU_DIALOG    Bunu almak istediğinize emin misiniz?
root'a atılır:
Kod:
[/FONT][/B]bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)[B][FONT=Verdana]
Bulunur:
Kod:
[/FONT][/B]case ITEM_HAIR:[B][FONT=Verdana]
Altına eklenir;
Kod:
[/FONT][/B]case 40002:        {             ChatPacket(CHAT_TYPE_COMMAND, "accccc");         }         break;[B][FONT=Verdana]
game.py-açılır-aratılır:
Kod:
[/FONT][/B]"PlayMusic"                : self.__PlayMusic,[B][FONT=Verdana]
Altına eklenir;
Kod:
[/FONT][/B]"accccc"                : self.Aclansunu,[B][FONT=Verdana]
game.py sona eklenir;
Kod:
[/FONT][/B]def Aclansunu(self):        self.black = isinlanma.BlackIsinlanma()         self.black.OpenWindow()[B][FONT=Verdana]


Hata alırsanız mutlaka sorun benim py çok karışıktı karışıklık olabilir kodlarda ayrıca benimki başka butondaydı f5'e ekledim sıkıntı çıkmaz inşallah.
KANIT:



Gelişmiş Işınlanma Sistemi[C++&PYTHON]


Metin2 özel sunucularında oyun deneyimini artırmak için geliştirilen gelişmiş ışınlanma sistemleri, oyunculara daha hızlı ve kullanıcı dostu bir hareket imkanı sunar. Bu sistemde hem C++ backend tarafında hem de Python GUI tarafında güçlü entegrasyonlar sağlanmıştır.

C++ Tarafında Işınlanma Mekaniği

Metin2 özel sunucu geliştirme sürecinde, ışınlanma sistemi genellikle oyun sunucusunun çekirdek dosyalarında (game core) C++ ile yazılır. Bu sistem, oyuncuların belirli koordinatlara veya harita alanlarına anlık olarak taşınmasını sağlar. Channel yapısı üzerinde çalışırken, ışınlanma komutları auth ve game sunucuları arasında güvenli veri alışverişine dayanır.

Işınlanma mekaniği, oyuncu pozisyonu kontrol edilerek, hedef konuma göre db core üzerinden doğrulama yapılır. Eğer konum güvenliyse ve izin verilmişse, oyuncu anlık olarak hedefe ışınlanır. Bu işlem sırasında server src üzerindeki güvenlik kontrolleri, yetkilendirme sistemleriyle entegre çalışır.

Python GUI Entegrasyonu

Py GUI ile geliştirilen yönetim panelleri sayesinde, sunucu yöneticileri ışınlanma noktalarını kolayca tanımlayabilir ve düzenleyebilir. UIScript tabanlı arayüzler, kullanıcı dostu bir yapı sunarken, py root üzerinde çalışan komut setleri ile sunucu üzerinde dinamik değişiklikler yapılabilir.

Python tarafında geliştirilen GUI, ışınlanma komutlarını doğrudan C++ backend'e aktarır. Bu sayede hem geliştirici hem de yönetici kullanıcılar için etkili bir kontrol yapısı oluşur. Pack sistemi üzerinden dağıtılan GUI modülleri, farklı sunucu yapılandırmalarında da kolayca entegre edilebilir.

Martysama ve Metin2Dev Katkıları

Toplulukta tanınmış geliştiricilerden biri olan Martysama, Metin2 özel sunucu geliştirme dünyasında önemli projeler geliştirmiştir. Özellikle source edit ve metin2 compile süreçlerinde sunduğu çözümler, geliştiricilerin işini kolaylaştırmaktadır. ışınlanma sistemleri gibi gelişmiş özellikler, Martysama tarafından yayınlanan client src örneklerinde de yer almaktadır.

Metin2Dev platformu ise, Metin2 özel sunucu geliştirme süreçlerinde rehberler, kaynaklar ve topluluk desteği sunar. Bu sistemlerin geliştirilmesinde aktif rol oynamaktadır. Game server programming alanında derin bilgiye sahip geliştiriciler, bu platform aracılığıyla projelerini paylaşabilmektedir.

DB Entegrasyonu ve Güvenlik

Işınlanma sistemi, veritabanı (db) üzerinde özel tablolar kullanarak hedef konum bilgilerini saklar. Bu bilgiler, güvenlik kontrolleri için auth sunucusuna yönlendirilir. Her ışınlanma işlemi, oyuncu kimliği ve hedef konum doğrultusunda veritabanında kontrol edilir.

Olası hile girişimlerine karşı, ışınlanma komutları şifrelenmiş kanallar üzerinden gönderilir. Core seviyesinde uygulanan filtreler, yetkisiz ışınlanmaları engeller. Gelişmiş sistemlerde, IP tabanlı sınırlamalar ve cooldown mekanizmaları da entegre edilebilir.

Sonuç

Metin2 özel sunucularında gelişmiş ışınlanma sistemleri, hem oyun içi deneyimi artırır hem de sunucu yönetimini kolaylaştırır. C++ backend ile Python GUI entegrasyonu sayesinde, güçlü ve esnek bir yapı oluşturulabilir. Metin2Lobby olarak, bu tür sistemlerin geliştirilmesinde size yardımcı olacak kaynaklara ulaşabilirsiniz.


Advanced Teleportation System[C++&PYTHON]


In order to enhance the gaming experience on Metin2 private servers, advanced teleportation systems have been developed to provide players with faster and more user-friendly movement. This system integrates strong backend operations using C++, along with Python GUI implementations.

Teleportation Mechanics in C++

Within the process of Metin2 private server development, the teleportation system is generally coded in C++ within the core game files (game core). This system allows players to instantly travel to specific coordinates or map areas. While working on the channel structure, teleport commands rely on secure data exchange between the auth and game servers.

The teleport mechanism validates player positions and checks if the destination is safe and authorized via the db core. If the location is verified, the player is instantly teleported. During this process, security controls on the server src integrate with authorization mechanisms to ensure safety.

Integration of Python GUI

Py GUI enables server administrators to easily define and modify teleportation points through user-friendly management panels. Interfaces based on UIScript offer intuitive control, while command sets running on py root allow dynamic server-side adjustments.

GUIs developed in Python send teleport commands directly to the C++ backend. This creates an efficient control structure for both developers and admin users. GUI modules distributed via the pack system can be easily integrated into various server configurations.

Contributions by Martysama and Metin2Dev

Among the well-known developers in the community, Martysama has developed significant projects in the field of Metin2 private server development. Especially solutions provided in source edit and metin2 compile processes ease the work of other developers. Advanced features like teleportation systems are also included in client src examples published by Martysama.

Metin2Dev provides guides, resources, and community support in Metin2 private server development processes. This platform plays an active role in developing such systems. Developers with deep knowledge in game server programming share their projects via this platform.

Database Integration and Security

The teleportation system stores target location data in special tables within the database (db). This information is sent to the auth server for security verification. Each teleport action is validated according to the player's identity and the target location.

To prevent cheating attempts, teleport commands are transmitted over encrypted channels. Filters applied at the core level block unauthorized teleports. In advanced systems, IP-based restrictions and cooldown mechanisms can also be implemented.

Conclusion

Advanced teleportation systems in Metin2 private servers both improve in-game experiences and simplify server management. With C++ backend and Python GUI integration, a powerful and flexible structure can be created. Visit Metin2Lobby to access resources that assist you in developing such systems.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Geri
Üst Alt