Martysama server fileslerde büyük ihtimal ekli geliyor ama genede anlatımını yapmak istedim.
char.cpp açılır ve aratılır
p.lAddr = lAddr;
altına
if (!g_stProxyIP.empty())
p.lAddr = inet_addr(g_stProxyIP.c_str());
yapıştırılır
config.cpp açılır ve bulunur
uint32_t g_dwSkillBookNextReadMax = 43200;
altına
std::string g_stProxyIP = "";
yapıştırılır
aratılır
fprintf(stdout, "SKILLBOOK_NEXTREAD_MAX: %u\n", g_dwSkillBookNextReadMax);
altına
TOKEN("proxy_ip")
{
g_stProxyIP = value_string;
}
yapıştırılır
config.h açılır
ve
bulunur
extern uint32_t g_dwSkillBookNextReadMax;
altına
extern std::string g_stProxyIP;
eklenir.
desc.cpp açılır ve bulunur
for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
{
CGuild* g = CGuildManager::instance().GetLinkedGuild(rTable.players.dwID);
if (g)
{
p.guild_id = g->GetID();
strlcpy(p.guild_name, g->GetName(), sizeof(p.guild_name));
}
else
{
p.guild_id = 0;
p.guild_name[0] = '\0';
}
}
altına
if (!g_stProxyIP.empty())
rTable.players.lAddr=inet_addr(g_stProxyIP.c_str());
eklenir
input_db.cpp açılır ve bulunur
if (!CMapLocation::instance().Get(rTab.players.x, rTab.players.y, lIndex, rTab.players.lAddr, rTab.players.wPort))
{
sys_err("cannot find server for mapindex %d %d x %d (name %s)",
lIndex,
rTab.players.x,
rTab.players.y,
rTab.players.szName);
continue;
}
altına eklenir
if (!g_stProxyIP.empty())
rTab.players.lAddr=inet_addr(g_stProxyIP.c_str());
bulunur
struct in_addr in;
altına eklenir
if (!g_stProxyIP.empty())
rTab.players.lAddr=inet_addr(g_stProxyIP.c_str());
aratılır
pack.player = pPacketDB->player;
altına eklenilir
if (!g_stProxyIP.empty())
pack.player.lAddr=inet_addr(g_stProxyIP.c_str());
Oyunu derledikten sonra CONFIG'lere eklenir
PROXY_IP: senin ip
BIND_IP:10.0.0.x
KAYNAK : FUNKY EMULATOR
char.cpp açılır ve aratılır
p.lAddr = lAddr;
altına
if (!g_stProxyIP.empty())
p.lAddr = inet_addr(g_stProxyIP.c_str());
yapıştırılır
config.cpp açılır ve bulunur
uint32_t g_dwSkillBookNextReadMax = 43200;
altına
std::string g_stProxyIP = "";
yapıştırılır
aratılır
fprintf(stdout, "SKILLBOOK_NEXTREAD_MAX: %u\n", g_dwSkillBookNextReadMax);
altına
TOKEN("proxy_ip")
{
g_stProxyIP = value_string;
}
yapıştırılır
config.h açılır
ve
bulunur
extern uint32_t g_dwSkillBookNextReadMax;
altına
extern std::string g_stProxyIP;
eklenir.
desc.cpp açılır ve bulunur
for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
{
CGuild* g = CGuildManager::instance().GetLinkedGuild(rTable.players.dwID);
if (g)
{
p.guild_id = g->GetID();
strlcpy(p.guild_name, g->GetName(), sizeof(p.guild_name));
}
else
{
p.guild_id = 0;
p.guild_name[0] = '\0';
}
}
altına
if (!g_stProxyIP.empty())
rTable.players.lAddr=inet_addr(g_stProxyIP.c_str());
eklenir
input_db.cpp açılır ve bulunur
if (!CMapLocation::instance().Get(rTab.players.x, rTab.players.y, lIndex, rTab.players.lAddr, rTab.players.wPort))
{
sys_err("cannot find server for mapindex %d %d x %d (name %s)",
lIndex,
rTab.players.x,
rTab.players.y,
rTab.players.szName);
continue;
}
altına eklenir
if (!g_stProxyIP.empty())
rTab.players.lAddr=inet_addr(g_stProxyIP.c_str());
bulunur
struct in_addr in;
altına eklenir
if (!g_stProxyIP.empty())
rTab.players.lAddr=inet_addr(g_stProxyIP.c_str());
aratılır
pack.player = pPacketDB->player;
altına eklenilir
if (!g_stProxyIP.empty())
pack.player.lAddr=inet_addr(g_stProxyIP.c_str());
Oyunu derledikten sonra CONFIG'lere eklenir
PROXY_IP: senin ip
BIND_IP:10.0.0.x
KAYNAK : FUNKY EMULATOR
Azure ve Google Cloud VPS'lerde Metin2 Sunucu Geliştirme: Karakter Ekranından Ch Ekranına Geçişte Tekme Sorunu ve Çözümü
Metin2 özel sunucularında çalışırken karşılaşılan sorunlardan birisi, Azure veya Google Cloud gibi bulut sağlayıcılarından alınan VPS üzerinde çalışan sunucularda, oyuncunun karakter ekranından doğrudan ch (channel) ekranına geçerken sunucudan atılmasıdır. Bu durum, genellikle ağ yapılandırması, bağlantı zaman aşımı ayarları veya VPS sunucusunun ağ politikalarından kaynaklanabilir. Bu yazıda bu sorunun detaylarına inerek, Metin2 sunucu geliştirme sürecinde karşılaşılabilecek bu teknik problemi nasıl çözebileceğimizi ele alacağız.
Sorunun Temel Nedenleri
Bu sorun genellikle iki temel nedenden dolayı meydana gelir:
1. Ağ Gecikmesi ve Zaman Aşımı: Azure ve Google Cloud gibi platformlarda bazı sunucular, düşük gecikme süresi sunarken bazılarında bağlantı sürekliliği sağlanamaz. Bu da oyuncunun karakter seçim ekranından kanal seçim ekranına geçerken bağlantısının kopmasına neden olur.
2. Güvenlik Duvarı ve NAT Ayarları: Bulut sağlayıcıların kullandığı güvenlik yapılandırmaları, bazı Metin2 sunucu sistemlerinin doğru çalışmasını engelleyecek şekilde ayarlanmış olabilir. Özellikle auth server ile game server arasındaki bağlantılar etkilenebilir.
Çözüm Adımları
1. Sunucu Zaman Aşımı Ayarlarını Değiştirin: Metin2 server_src dosyalarında bulunan clientmanager_imp.cpp veya heartbeat.cpp gibi dosyalarda yer alan ping zamanlayıcı değerlerini artırarak, bağlantı sürekliliğini sağlayabilirsiniz. Örneğin, ping değeri varsayılan olarak 60 sn ise, bunu 120 sn yapabilirsiniz.
2. NAT ve Güvenlik Duvarı Ayarlarını Kontrol Edin: Azure portal üzerinden 'Network Security Group' veya Google Cloud Console üzerinden 'Firewall Rules' üzerinden gelen ve giden trafiğin tamamının açık olduğundan emin olun. Özellikle 13000-15000 port aralıklarında açık olmalıdır.
3. Sunucu IP Ayarlarını Doğru Yapın: clientinfo.py veya addr files dosyalarında belirttiğiniz IP adresinin, VPS'nin dış IP'siyle aynı olduğundan emin olun. Aksi takdirde, istemci doğru sunucuya bağlanamaz ve bağlantı kopabilir.
4. Python Root ve Py GUI Ayarları: Eğer Py GUI tabanlı bir yönetim paneli kullanıyorsanız, buradaki IP ve port ayarlarının, gerçek VPS ayarlarıyla uyumlu olduğundan emin olun. Py Root üzerinden yapılan ayarlar doğrudan sunucu bağlantısını etkileyebilir.
Ekstra Notlar
Metin2 özel sunucu dünyasında, özellikle PvP sistemleri ve C++ source düzenlemeleriyle çalışan geliştiriciler için, bu tür bağlantı problemleri ciddi performans ve kullanıcı deneyimi kaybına yol açabilir. Bu nedenle, sunucu altyapısı seçerken hem fiyat hem de ağ stabilitesi göz önünde bulundurulmalıdır. Martysama[/COORD] ve diğer geliştirici toplulukları bu konuda birçok kaynak sunmaktadır.
Sonuç
Azure veya Google Cloud üzerinde barındırılan Metin2 sunucularında, karakter ekranından ch ekranına geçerken kopmalar, doğru yapılandırma ile çözülebilir. Ağ ayarlarını, zaman aşımını ve güvenlik duvarını kontrol ederek bu sorunu ortadan kaldırabilirsiniz. Metin2 lobby olarak, bu tür teknik zorluklarla karşılaşan geliştiricilere destek olmayı amaçlıyoruz.
Metin2 Server Development on Azure and Google Cloud: Solving the Kick Issue from Character Screen to Channel Screen
One of the issues encountered during Metin2 private server development occurs when players are kicked from the server upon transitioning directly from the character selection screen to the channel selection screen on VPS servers hosted by providers like Azure or Google Cloud. This issue typically stems from network configurations, connection timeout settings, or the network policies of the VPS provider. In this article, we will examine the details of this problem and explore how to solve this technical issue during the Metin2 server development process.
Root Causes of the Problem
This issue generally arises due to two main reasons:
1. Network Latency and Timeout: While some servers on platforms like Azure and Google Cloud offer low latency, others may not maintain consistent connections. This can cause disconnections when players transition from the character selection screen to the channel selection screen.
2. Firewall and NAT Settings: The security configurations used by cloud providers might interfere with the correct operation of certain Metin2 server systems. Especially the connection between auth server and game server can be affected.
Solution Steps
1. Adjust Server Timeout Settings: Increase the ping timer values found in files such as clientmanager_imp.cpp or heartbeat.cpp within the Metin2 server_src. For instance, if the default ping value is 60 seconds, you can increase it to 120 seconds to ensure connection continuity.
2. Check NAT and Firewall Settings: Ensure that all incoming and outgoing traffic is allowed through the 'Network Security Group' on Azure Portal or 'Firewall Rules' on Google Cloud Console. Particularly, port ranges between 13000-15000 should be open.
3. Verify Server IP Configuration: Confirm that the IP address specified in files like clientinfo.py or addr files matches the external IP of your VPS. Otherwise, the client cannot connect to the correct server, resulting in disconnection.
4. Configure Python Root and Py GUI Settings: If you are using a management panel based on Py GUI, ensure that IP and port settings match the actual VPS configuration. Settings made via Py Root can directly affect server connections.
Additional Notes
In the world of Metin2 private servers, especially for developers working with PvP systems and C++ source modifications, such connection issues can lead to significant performance and user experience losses. Therefore, both price and network stability should be considered when selecting server infrastructure. Martysama and other developer communities provide numerous resources on this topic.
Conclusion
Disconnections from the character screen to the channel screen on Metin2 servers hosted on Azure or Google Cloud can be resolved with proper configuration. By checking network settings, timeouts, and firewall rules, you can eliminate this issue. As Metin2 lobby, we aim to support developers facing such technical challenges.
