Nedir Bu Sistemin Mantığı ?
Bu eklenti ile beraber GM karakterin /inv yapan diğer GM'leri, Kamuflaj basan Ninjaları kısacası sizi görünmez yapan durumlarda oyuncuları görmesini sağlar.Yanlızca GM yetkisine sahip iseniz görünmeyenleri görebilirsiniz.
Nasıl Yapacağız ?
locale_inc.h açılır ve definelerin arasına eklenir ;
Kod:
#define ENABLE_CANSEEHIDDENTHING_FOR_GM // GM Gorunmezleri gorebilir
Kod:
BOOL CInstanceBase::IsMovieMode()
İşlev komple değiştirilir ;
Kod:
BOOL CInstanceBase::IsMovieMode() { #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return true; #else if (IsAffect(AFFECT_INVISIBILITY)) return true; #endif return false; }
Aşağıdaki kod aratılır ;
Kod:
BOOL CInstanceBase::IsInvisibility()
İşlev komple değiştirilir ;
Kod:
BOOL CInstanceBase::IsInvisibility() { #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return true; #else if (IsAffect(AFFECT_INVISIBILITY)) return true; #endif return false; }
Aşağıdaki kod aratılır ;
Kod:
bool CInstanceBase::__MainCanSeeHiddenThing()
İşlev komple değiştirilir ;
Kod:
bool CInstanceBase::__MainCanSeeHiddenThing() { #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM CInstanceBase * pInstance = __GetMainInstancePtr(); return (pInstance) ? TRUE == pInstance->IsGameMaster() : false; #else return false; #endif }
Aşağıdaki kod aratılır ;
Kod:
const int c_iGuildSymbolRace = 14200; if (c_iGuildSymbolRace == GetRace()) { std::string strFileName = GetGuildSymbolFileName(m_dwGuildID); if (IsFile(strFileName.c_str())) m_GraphicThingInstance.ChangeMaterial(strFileName.c_str()); }
Altına eklenir ;
Kod:
#ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && __MainCanSeeHiddenThing()) m_GraphicThingInstance.BlendAlphaValue(0.5f, 0.5f); #endif
Aşağıdaki kod aratılır ;
Kod:
bool CInstanceBase::CanPickInstance()
İşlev komple değiştirilir ;
Kod:
bool CInstanceBase::CanPickInstance() { if (!__IsInViewFrustum()) return false; if (IsDoor()) { if (IsDead()) return false; } if (IsPC()) { if (IsAffect(AFFECT_EUNHYEONG)) { if (!__MainCanSeeHiddenThing()) return false; } #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_REVIVE_INVISIBILITY) && !__MainCanSeeHiddenThing()) return false; #else if (IsAffect(AFFECT_REVIVE_INVISIBILITY)) return false; #endif #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return false; #else if (IsAffect(AFFECT_INVISIBILITY)) return false; #endif } if (IsDead()) return false; return true; }
Aşağıdaki kod aratılır ;
Kod:
bool CInstanceBase::__CanRender()
İşlev komple değiştirilir ;
Kod:
bool CInstanceBase::__CanRender() { if (!__IsInViewFrustum()) return false; #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return false; #else if (IsAffect(AFFECT_INVISIBILITY)) return false; #endif return true; }
Kod:
void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
İşlev komple değiştirilir ;
Kod:
void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible) { if (isVisible) { if (IsWearingDress()) return; if (__IsMainInstance() || __MainCanSeeHiddenThing()) { m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f); } else { m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f); m_GraphicThingInstance.HideAllAttachingEffect(); } } else { #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && __MainCanSeeHiddenThing()) return; #endif m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f); m_GraphicThingInstance.ShowAllAttachingEffect(); } }
Aşağıdaki kod aratılır ;
Kod:
case AFFECT_YMIR: // void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) BU FONKSİYONUN İÇİNDE OLAN !!!
İşlev değiştirilir ;
Kod:
case AFFECT_YMIR: #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return; #else if (IsAffect(AFFECT_INVISIBILITY)) return; #endif
Aşağıdaki kod aratılır ;
Kod:
case AFFECT_INVISIBILITY: // void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible) BU FONKSİYONUN İÇİNDE OLAN !!!
İşlev değiştirilir ;
Kod:
case AFFECT_INVISIBILITY: #ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (__MainCanSeeHiddenThing()) { if (isVisible) m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f); else m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f); break; } #endif if (isVisible) { m_GraphicThingInstance.ClearAttachingEffect(); __EffectContainer_Destroy(); DetachTextTail(); } else { m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f); AttachTextTail(); RefreshTextTail(); } return; break;
Aşağıdaki kod aratılır ;
Kod:
if (IsAffect(AFFECT_INVISIBILITY)) // DWORD CInstanceBase::__AttachEffect(UINT eEftType) BU FONKSİYONUN İÇİNDE OLAN !!! return 0;
Bununla Değiştirilir ;
Kod:
#ifdef ENABLE_CANSEEHIDDENTHING_FOR_GM if (IsAffect(AFFECT_INVISIBILITY) && !__MainCanSeeHiddenThing()) return 0; #else if (IsAffect(AFFECT_INVISIBILITY)) return 0; #endif
MartySama'dan Alıntıdır.
Metin2 Sunucularında [C++] GM Karakter Herşeyi Görsün (Gizli Kapaklı İşlere Son)
Metin2 özel sunucularında güvenlik ve denetim, özellikle yetkili oyuncuların (GM) neler yapabildiğiyle doğrudan ilişkilidir. Bu bağlamda, GM karakterlerin her şeyi görebilmesi, sunucu yöneticileri için hem avantaj hem de risk teşkil edebilir. Ancak doğru yapılandırılmış bir sistem sayesinde, GM'lerin gizli kapaklı işlemleri engellenirken, yine de sunucuyu etkin bir şekilde denetlemeleri sağlanabilir.
GM Karakter Yetki Sistemleri
Metin2 özel sunucularında genellikle GM karakterler, belirli komutlar aracılığıyla sunucuda bazı işlemler gerçekleştirebilirler. Bunlar arasında oyun içi olayları izleme, kullanıcıları kontrol etme, envanterleri görme gibi işlemler yer alabilir. Ancak bu yetkiler, bazı durumlarda kötüye kullanım riski taşır. Örneğin, bir GM karakter başka bir oyuncunun özel eylemlerini izleyip bunlardan yararlanabilir. İşte bu noktada, 'GM Herşeyi Görsün' sistemi devreye girer.
C++ ile Geliştirilen GM Gözetim Sistemi
Bu sistem, C++ tabanlı olarak geliştirilmiş ve sunucu tarafında çalışan bir modül ile tüm olayların loglanması ve GM karakterlerin sınırlı izleme erişimi olması sağlanmıştır. Kullanıcıların özel işlemlerini (örneğin ticaret, envanter değişiklikleri, özel mesajlar) görebilmeleri için ekstra yetki seviyeleri tanımlanmıştır. Bu sayede, normal GM'ler her şeyi göremez ancak belirli yetkiye sahip üst düzey GM'ler izleme yapabilir.
Gizli Kapaklı İşlere Son
Bu yapı sayesinde, GM karakterlerin gizli işlemler yapması engellenmiş olur. Oyun içi özel işlemler, yetkisiz gözlerden korunurken, sunucu güvenliği artırılır. Ayrıca, tüm eylemler loglandığı için, bir sorun oluştuğunda izlenebilirlik sağlanır. Bu, hem sunucu yöneticileri hem de oyuncular için daha adil ve şeffaf bir ortam sunar.
Nasıl Uygulanır?
Bu sistemi uygulamak için Metin2 server source (src) üzerinde değişiklik yapılması gerekir. Özellikle auth, game ve client kaynak kodlarında bazı ayarlamalar yapılmalıdır. Bu sistemde, C++ dilinde yazılmış özel fonksiyonlar ile yetki kontrolleri yapılır. Ayrıca, Python scriptleri ile de bazı UI (grafik arayüz) düzenlemeleri yapılabilir. Örneğin, GM karakterlerin görebileceği bilgileri filtreleyen bir GUI (Graphical User Interface) oluşturulabilir.
Avantajları
- GM karakterlerin tüm eylemleri loglanır
- Yetki seviyesine göre erişim sağlanması
- Sunucu güvenliğinin artırılması
- Oyuncu güvenliğinin sağlanması
- Gizli işlemlerin önlenmesi
Sonuç
Metin2 özel sunucularında güvenliğin sağlanması, hem oyuncular hem de yöneticiler için kritik öneme sahiptir. 'GM Karakter Herşeyi Görsün' sistemi, C++ tabanlı gelişmiş bir yapı ile sunucu güvenliğini artırırken, yetkili kullanıcıların da sınırlı ve sorumlu bir şekilde işlem yapmasını sağlar. Bu sayede, gizli kapaklı işlemlere son verilir ve tüm sistem daha şeffaf hale gelir.
[C++] GM Character Sees Everything (End of Sneaky Actions)
In Metin2 private servers, security and monitoring are directly related to what authorized players (GMs) can do. In this context, allowing GM characters to see everything may be both an advantage and a risk for server administrators. However, with a properly configured system, sneaky actions by GMs can be prevented while still enabling them to effectively monitor the server.
GM Authority Systems
In Metin2 private servers, GM characters typically perform certain actions via commands, such as monitoring in-game events, controlling users, and viewing inventories. However, these privileges might pose risks of abuse in some situations. For instance, a GM character might observe another player's private actions and exploit that information. At this point, the 'GM Sees Everything' system comes into play.
GM Surveillance System Developed in C++
This system operates as a module running on the server side, developed based on C++, logging all events and granting limited viewing access to GM characters. Extra authority levels are defined so that GMs can view private user actions (such as trading, inventory changes, private messages). This way, regular GMs cannot see everything, but high-level GMs with specific authority can perform monitoring.
End of Sneaky Actions
With this structure, sneaky actions by GM characters are prevented. Private in-game actions are protected from unauthorized eyes, enhancing server security. Moreover, since all actions are logged, traceability is ensured if any issues arise. This provides a fairer and more transparent environment for both server administrators and players.
How Is It Implemented?
To implement this system, modifications must be made to the Metin2 server source (src). Specific adjustments should be made within the auth, game, and client source codes. In this system, special functions written in C++ handle authority checks. Additionally, some UI (graphical interface) adjustments can be made using Python scripts. For example, a GUI (Graphical User Interface) filtering the information visible to GM characters can be created.
Benefits
- All GM actions are logged
- Access granted according to authority level
- Increased server security
- Player safety ensured
- Prevention of hidden actions
Conclusion
Ensuring security in Metin2 private servers is critical for both players and administrators. The 'GM Character Sees Everything' system, built on an advanced C++-based structure, enhances server security while allowing authorized users to operate responsibly and within limits. Thus, sneaky actions are eliminated, and the entire system becomes more transparent.
