JobChange karakteri seçtikten sonra arkadaki uif'in kapanması için nereyi kontrol etmem lazım ?
Job değiştikten sonra uif'i kendim kapatıyorum seçtiğim anda kapanmıyor.
Hocam Close() fonksiyonu ekli ama işlevi yerine getirmiyor.Hooktaki jobchange ye ait cpp icerisindeki Recivemessage fonksiyonunda job seçimi sonrasında her buton için Close() fonksiyonunu çağırabilirsiniz hocam.
bool CJobChange::ReceiveMessage(CN3UIBase* pSender, uint32_t dwMsg)
{
#define MIN_LEVEL 10
#define MAX_LEVEL 83
enum class Class {
Warrior = 1,
Rogue = 2,
Priest = 3,
Mage = 4
};
if (dwMsg == UIMSG_BUTTON_CLICK) {
if (Engine->m_PlayerBase == NULL)
return false;
if (Engine->m_PlayerBase->GetLevel() < MIN_LEVEL
|| Engine->m_PlayerBase->GetLevel() > MAX_LEVEL) {
Close();
if (Engine->m_PlayerBase->GetLevel() < MIN_LEVEL)
Engine->m_UiMgr->ShowMessageBox(xorstr("Job Change Failed"), xorstr("You do not have enough level. You must be a least 10 level."), Ok);
else if (Engine->m_PlayerBase->GetLevel() > MAX_LEVEL)
Engine->m_UiMgr->ShowMessageBox(xorstr("Job Change Failed"), xorstr("You cannot use this feature.You must be level 83 maximum."), Ok);
return false;
}
if (pSender == btn_warrior) {
if (!Engine->m_PlayerBase->isRogue()
&& !Engine->m_PlayerBase->isMage()
&& !Engine->m_PlayerBase->isPriest()) {
Close();
Engine->m_UiMgr->ShowMessageBox(xorstr("Failed"), xorstr("You cannot select the same job again. Please choose a different job."), Ok);
return false;
}
Packet test(WIZ_GUARD_HOOK, uint8(GGACSOpCodes::WIZ_JOBCHANGE));
test << uint8(Class::Warrior) << Engine->m_PlayerBase->GetClass();
Engine->Send(&test);
}
else if (pSender == btn_rogue) {
if (!Engine->m_PlayerBase->isWarrior()
&& !Engine->m_PlayerBase->isMage()
&& !Engine->m_PlayerBase->isPriest()) {
Close();
Engine->m_UiMgr->ShowMessageBox(xorstr("Failed"), xorstr("You cannot select the same job again. Please choose a different job."), Ok);
return false;
}
Packet test(WIZ_GUARD_HOOK, uint8(GGACSOpCodes::WIZ_JOBCHANGE));
test << uint8(Class::Rogue) << Engine->m_PlayerBase->GetClass();
Engine->Send(&test);
}
else if (pSender == btn_priest) {
if (!Engine->m_PlayerBase->isWarrior()
&& !Engine->m_PlayerBase->isMage()
&& !Engine->m_PlayerBase->isRogue()) {
Close();
Engine->m_UiMgr->ShowMessageBox(xorstr("Failed"), xorstr("You cannot select the same job again. Please choose a different job."), Ok);
return false;
}
Packet test(WIZ_GUARD_HOOK, uint8(GGACSOpCodes::WIZ_JOBCHANGE));
test << uint8(Class::Priest) << Engine->m_PlayerBase->GetClass();
Engine->Send(&test);
}
else if (pSender == btn_mage) {
if (!Engine->m_PlayerBase->isWarrior()
&& !Engine->m_PlayerBase->isPriest()
&& !Engine->m_PlayerBase->isRogue()) {
Close();
Engine->m_UiMgr->ShowMessageBox(xorstr("Failed"), xorstr("You cannot select the same job again. Please choose a different job."), Ok);
return false;
}
Packet test(WIZ_GUARD_HOOK, uint8(GGACSOpCodes::WIZ_JOBCHANGE));
test << uint8(Class::Mage) << Engine->m_PlayerBase->GetClass();
Engine->Send(&test);
}
else if (pSender == btn_close) {
Close();
}
}
return true;
}
Knight Online PVP server yönetimi ve oyun geliştirme üzerine yapılan tartışmalar, geliştiricilerin karşılaştığı her türlü sorun için etkili çözüm önerileri sunar. Server kurulumu, performans optimizasyonu, hata ayıklama ve veri tabanı yönetimi gibi teknik konularda, geliştiriciler karşılaştıkları zorlukları çözüme kavuşturmak için çeşitli rehberler ve kaynaklar paylaşmaktadır. Örneğin, SSL sertifikası ve Cloudflare ayarları gibi ağ yönetimi üzerine yapılan tartışmalar, server güvenliği ve hızını artırmaya yönelik öneriler sunar.
Diğer taraftan, NPC görevleri ve Emblem yapımı gibi oyun içi işlevlerin iyileştirilmesi, oyuncu deneyimini zenginleştirir. İstirap gibi özel sistemler ve Ko-panel yapılandırması da geliştirilmesi gereken alanlar arasında yer alır. Ayrıca, Genie gibi araçlar ve manual drop ekleme gibi işlemlerle ilgili çözümler, geliştiricilerin oyunları daha işlevsel hale getirmelerine yardımcı olur.
Source kodu geliştirme, yükseltme ve SQL Query gibi konularla ilgili tartışmalar, geliştiricilere teknik bilgilere dayalı derinlemesine rehberlik sağlar. Bu tür kaynaklar, sorunları hızlıca çözmek ve oyun serverlarını optimize etmek isteyen geliştiriciler için oldukça değerlidir.
Eğer siz de bir Knight Online geliştiricisiyseniz ve server yönetimindeki sorunlara çözüm arıyorsanız, bu topluluk, en güncel bilgileri ve pratik çözümleri bulabileceğiniz bir platform sunuyor.