Apr
15
14
1
Guide to Implementing GM Movement Without Collisions in Metin2
1. Modify Locale_inc.h
Add the following define:
Kod:
#define ENABLE_GM_WITHOUT_COLLISIONS
2. Update ActorInstanceCollisionDetection.cpp
Replace the following functions with their updated versions:
- CActorInstance::AvoidObject
Kod:
bool CActorInstance::AvoidObject(const CGraphicObjectInstance& c_rkBGObj)
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return false;
}
#endif
#ifdef __MOVIE_MODE__
if (IsMovieMode())
return false;
#endif
if (this == &c_rkBGObj)
return false;
if (!__TestObjectCollision(&c_rkBGObj))
return false;
__AdjustCollisionMovement(&c_rkBGObj);
return true;
}
- CActorInstance::IsBlockObject
Kod:
bool CActorInstance::IsBlockObject(const CGraphicObjectInstance& c_rkBGObj)
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return false;
}
#endif
if (this == &c_rkBGObj)
return false;
if (!__TestObjectCollision(&c_rkBGObj))
return false;
return true;
}
- CActorInstance::CanSkipCollision
Kod:
bool CActorInstance::CanSkipCollision()
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return true;
}
#endif
return m_canSkipCollision;
}
3. Modify AbstractPlayer.h
Add the following method declaration:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
virtual bool IsGameMasterInstance(DWORD dwVID) = 0;
#endif
4. Update PythonPlayer.h
Add the following method declaration:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
bool IsGameMasterInstance(DWORD dwVID);
#endif
5. Update PythonPlayer.cpp
Add the following method implementation:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
bool CPythonPlayer::IsGameMasterInstance(DWORD dwVID)
{
CInstanceBase* pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVID);
if (!pTargetInstance)
return false;
return pTargetInstance->IsGameMaster();
}
#endif
This how it looks like:
These changes will implement a system allowing GMs to move without collision in Game
1. Modify Locale_inc.h
Add the following define:
Kod:
#define ENABLE_GM_WITHOUT_COLLISIONS
2. Update ActorInstanceCollisionDetection.cpp
Replace the following functions with their updated versions:
- CActorInstance::AvoidObject
Kod:
bool CActorInstance::AvoidObject(const CGraphicObjectInstance& c_rkBGObj)
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return false;
}
#endif
#ifdef __MOVIE_MODE__
if (IsMovieMode())
return false;
#endif
if (this == &c_rkBGObj)
return false;
if (!__TestObjectCollision(&c_rkBGObj))
return false;
__AdjustCollisionMovement(&c_rkBGObj);
return true;
}
- CActorInstance::IsBlockObject
Kod:
bool CActorInstance::IsBlockObject(const CGraphicObjectInstance& c_rkBGObj)
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return false;
}
#endif
if (this == &c_rkBGObj)
return false;
if (!__TestObjectCollision(&c_rkBGObj))
return false;
return true;
}
- CActorInstance::CanSkipCollision
Kod:
bool CActorInstance::CanSkipCollision()
{
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
if (IAbstractPlayer::GetSingleton().IsGameMasterInstance(GetVirtualID())) {
return true;
}
#endif
return m_canSkipCollision;
}
3. Modify AbstractPlayer.h
Add the following method declaration:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
virtual bool IsGameMasterInstance(DWORD dwVID) = 0;
#endif
4. Update PythonPlayer.h
Add the following method declaration:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
bool IsGameMasterInstance(DWORD dwVID);
#endif
5. Update PythonPlayer.cpp
Add the following method implementation:
Kod:
#ifdef ENABLE_GM_WITHOUT_COLLISIONS
bool CPythonPlayer::IsGameMasterInstance(DWORD dwVID)
{
CInstanceBase* pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVID);
if (!pTargetInstance)
return false;
return pTargetInstance->IsGameMaster();
}
#endif
This how it looks like:
These changes will implement a system allowing GMs to move without collision in Game

