Boss isimlerini slotların arasından seçmek zor olduğu için böyle bir sistem yapma gereği duydum.
Daha önce yapıldı mı bilmiyorum ama böyle bir sistem bulamadım.
Bosslar normal canavarlardan farklı olarak beyaz-turkuaz arası bir renkte gözüküyor.
Colorinfo.py deki değerlerden istediğiniz rengi verebilirsiniz.
/////////////////////////////////////////////////
Client
/////////////////////////////////////////////////
userinterface/InstanceBase.cpp
Ara:
BOOL CInstanceBase::IsFlag()
{
if (GetRace() == 20035)
return TRUE;
if (GetRace() == 20036)
return TRUE;
if (GetRace() == 20037)
return TRUE;
return FALSE;
}
Bu kod blogunun altina bunu ekleyin:
BOOL CInstanceBase::IsBoss()
{
if (GetRace() == 691)
return TRUE;
if (GetRace() == 692)
return TRUE;
if (GetRace() == 693)
return TRUE;
if (GetRace() == 791)
return TRUE;
if (GetRace() == 991)
return TRUE;
if (GetRace() == 992)
return TRUE;
if (GetRace() == 993)
return TRUE;
if (GetRace() == 1091)
return TRUE;
if (GetRace() == 1092)
return TRUE;
if (GetRace() == 1093)
return TRUE;
if (GetRace() == 1094)
return TRUE;
if (GetRace() == 1095)
return TRUE;
if (GetRace() == 2191)
return TRUE;
if (GetRace() == 1191)
return TRUE;
if (GetRace() == 1192)
return TRUE;
if (GetRace() == 1304)
return TRUE;
if (GetRace() == 1306)
return TRUE;
if (GetRace() == 1307)
return TRUE;
if (GetRace() == 1901)
return TRUE;
if (GetRace() == 1902)
return TRUE;
if (GetRace() == 1903)
return TRUE;
if (GetRace() == 2206)
return TRUE;
if (GetRace() == 2207)
return TRUE;
if (GetRace() == 2291)
return TRUE;
if (GetRace() == 2306)
return TRUE;
if (GetRace() == 2307)
return TRUE;
if (GetRace() == 2492)
return TRUE;
if (GetRace() == 2493)
return TRUE;
if (GetRace() == 2494)
return TRUE;
if (GetRace() == 2598)
return TRUE;
if (GetRace() == 3090)
return TRUE;
if (GetRace() == 3091)
return TRUE;
if (GetRace() == 3190)
return TRUE;
if (GetRace() == 3191)
return TRUE;
if (GetRace() == 3290)
return TRUE;
if (GetRace() == 3291)
return TRUE;
if (GetRace() == 3390)
return TRUE;
if (GetRace() == 3391)
return TRUE;
if (GetRace() == 3490)
return TRUE;
if (GetRace() == 3491)
return TRUE;
if (GetRace() == 3590)
return TRUE;
if (GetRace() == 3591)
return TRUE;
if (GetRace() == 3690)
return TRUE;
if (GetRace() == 3691)
return TRUE;
if (GetRace() == 3790)
return TRUE;
if (GetRace() == 3791)
return TRUE;
if (GetRace() == 3890)
return TRUE;
if (GetRace() == 3891)
return TRUE;
if (GetRace() == 5001)
return TRUE;
if (GetRace() == 5004)
return TRUE;
if (GetRace() == 5002)
return TRUE;
if (GetRace() == 5161)
return TRUE;
if (GetRace() == 5162)
return TRUE;
if (GetRace() == 5163)
return TRUE;
if (GetRace() == 6091)
return TRUE;
if (GetRace() == 6191)
return TRUE;
return FALSE;
}
/////////////////////////////////////////////////
userinterface/InstanceBase.h
Ara:
NAMECOLOR_MOB,
Altina ekle:
NAMECOLOR_BOSS,
Ara:
BOOLIsEnemy();
Altina Ekle:
BOOLIsBoss();
/////////////////////////////////////////////////
userinterface/InstanceBaseEffect.cpp
Ara:
else if (IsEnemy())
{
return NAMECOLOR_MOB;
}
Bu sekilde degistirin:
else if (IsEnemy())
{
if (IsBoss())
return NAMECOLOR_BOSS;
else
return NAMECOLOR_MOB;
}
/////////////////////////////////////////////////
userinterface/PythonCharacterManagerModule.cpp
Ara:
PyModule_AddIntConstant(poModule, "NAMECOLOR_MOB", CInstanceBase::NAMECOLOR_NORMAL_MOB);
PyModule_AddIntConstant(poModule, "NAMECOLOR_NPC", CInstanceBase::NAMECOLOR_NORMAL_NPC);
/////////////////////////////////////////////////
userinterface/PythonMinimap.cpp
Ara:
m_NPCPositionVector.clear();
Altina ekleyin:
m_BossPositionVector.clear();
Bu kod blogunu bulun:
else if (pkInstEach->IsEnemy())
{
aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;
m_MonsterPositionVector.push_back(aMarkPosition);
}
Altina ekleyin:
else if (pkInstEach->IsBoss())
{
aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;
m_BossPositionVector.push_back(aMarkPosition);
}
Bu kod blogunu bulun:
// NPC
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_NPC));
aIterator = m_NPCPositionVector.begin();
while (aIterator != m_NPCPositionVector.end())
{
TMarkPosition & rPosition = *aIterator;
m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
m_WhiteMark.Render();
++aIterator;
}
Altina ekleyin:
// BOSS
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_BOSS));
aIterator = m_BossPositionVector.begin();
while (aIterator != m_BossPositionVector.end())
{
TMarkPosition & rPosition = *aIterator;
m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
m_WhiteMark.Render();
++aIterator;
}
/////////////////////////////////////////////////
PythonMiniMap.h
Arat:
TInstanceMarkPositionVectorm_MonsterPositionVector;
Altina ekleyin:
TInstanceMarkPositionVectorm_BossPositionVector;
/////////////////////////////////////////////////
PACK
/////////////////////////////////////////////////
root/colorinfo.py
Arat:
CHR_NAME_RGB_MOB = (235, 22, 9)
Altina ekleyin:
CHR_NAME_RGB_BOSS = (204, 255, 255)
/////////////////////////////////////////////////
root/introloading.py
Arat:
chrmgr.NAMECOLOR_MOB : colorInfo.CHR_NAME_RGB_MOB,
Altina ekleyin:
chrmgr.NAMECOLOR_BOSS : colorInfo.CHR_NAME_RGB_BOSS,
Ben bu rengi beğenmedim. Renk nasıl değiştiririm?
Vereceğim sitedeki uygulamadan istediğiniz renge ait RGB kodunu alıp, colorinfo.py deki parantez içine yazarsanız renk değişir.
Boss İsim Sistemi[C++] Nedir?
Metin2 özel sunucularında oyuncuların dikkatini çekecek güçlü ve özgün sistemlerden biri olan Boss İsim Sistemi[C++] , sunucuda devreye girdiğinde haritada belirli aralıklarla spawnlanan boss karakterlerinin adını dinamik olarak değiştiren gelişmiş bir sistemdir. Bu sistem sayesinde boss karakterler daha dikkat çekici hale gelir ve oyuncular için sürpriz etkisi yaratılır. Bu yazıda, C++ dilinde yazılmış bu sistemi nasıl uygulayacağınızı adım adım anlatacağız.
Sistem Özellikleri
Bu sistem sayesinde;
- Harita üzerinde spawnlanan bossların isimleri rastgele olarak değişebilir.
- Oyuncular boss ismini görünce neyle karşılaştıklarını kolayca anlayabilirler.
- Sunucu yöneticileri, boss isim listesini kolayca düzenleyebilir.
- Sistem C++ tabanlı olduğu için performansı yüksektir.
Sistemin Kurulumu
Öncelikle game_src dosyasının içine girerek char_manager.cpp ve char_manager.h dosyalarını açmalısınız. Burada boss karakterlerin spawnlandığı yerleri bulup, spawn sırasında rastgele bir isim atamak için küçük değişiklikler yapmanız gerekiyor. Örnek olarak:
std::vector<std::string> bossNames = {'DarkLord','ShadowReaper','DragonSlayer'};
int randomIndex = rand() % bossNames.size();
pMob->SetName(bossNames[randomIndex].c_str());
Sistemde Kullanılan Fonksiyonlar
- SetName(): Mob nesnesine yeni ismi atar.
- rand(): Rastgele bir indeks üretir.
- std::vector: Boss isimlerini tutan yapıdır.
Avantajları
Bu sistem sayesinde:
- Sunucunuzdaki oyun deneyimi artırılır.
- Oyuncuların dikkati artar.
- Sunucu daha profesyonel bir hale alır.
- PvP odaklı sunucularda boss savaşları daha eğlenceli hale gelir.
Not: Bu sistem Martysama tarafından geliştirilmiş Metin2Dev platformuna uygundur ve Metin2Lobby.com tarafından test edilmiştir.
What is Boss Name System[C++]?
The Boss Name System[C++] is one of the powerful and original systems that attract players' attention in Metin2 private servers. This advanced system dynamically changes the names of boss characters spawning on the map at certain intervals when activated. This way, boss characters become more eye-catching and create a surprise effect for players. In this article, we will explain step by step how to implement this system written in C++.
System Features
With this system;
- The names of bosses spawning on the map can change randomly.
- Players can easily identify what they are facing upon seeing the boss name.
- Server administrators can easily edit the boss name list.
- Since the system is based on C++, it offers high performance.
Installation of the System
Firstly, navigate into the game_src directory and open the files char_manager.cpp and char_manager.h. Find where boss characters are spawned and make small modifications to assign a random name during spawn. For example:
std::vector<std::string> bossNames = {'DarkLord','ShadowReaper','DragonSlayer'};
int randomIndex = rand() % bossNames.size();
pMob->SetName(bossNames[randomIndex].c_str());
Functions Used in the System
- SetName(): Assigns a new name to the mob object.
- rand(): Generates a random index.
- std::vector: Stores the list of boss names.
Advantages
With this system:
- The gaming experience on your server increases.
- Player attention rises.
- The server gains a more professional look.
- Boss battles become more fun in PvP-focused servers.
Note: This system is compatible with the Metin2Dev platform developed by Martysama and has been tested by Metin2Lobby.com.
Daha önce yapıldı mı bilmiyorum ama böyle bir sistem bulamadım.
Bosslar normal canavarlardan farklı olarak beyaz-turkuaz arası bir renkte gözüküyor.
Colorinfo.py deki değerlerden istediğiniz rengi verebilirsiniz.
/////////////////////////////////////////////////
Client
/////////////////////////////////////////////////
userinterface/InstanceBase.cpp
Ara:
BOOL CInstanceBase::IsFlag()
{
if (GetRace() == 20035)
return TRUE;
if (GetRace() == 20036)
return TRUE;
if (GetRace() == 20037)
return TRUE;
return FALSE;
}
Bu kod blogunun altina bunu ekleyin:
BOOL CInstanceBase::IsBoss()
{
if (GetRace() == 691)
return TRUE;
if (GetRace() == 692)
return TRUE;
if (GetRace() == 693)
return TRUE;
if (GetRace() == 791)
return TRUE;
if (GetRace() == 991)
return TRUE;
if (GetRace() == 992)
return TRUE;
if (GetRace() == 993)
return TRUE;
if (GetRace() == 1091)
return TRUE;
if (GetRace() == 1092)
return TRUE;
if (GetRace() == 1093)
return TRUE;
if (GetRace() == 1094)
return TRUE;
if (GetRace() == 1095)
return TRUE;
if (GetRace() == 2191)
return TRUE;
if (GetRace() == 1191)
return TRUE;
if (GetRace() == 1192)
return TRUE;
if (GetRace() == 1304)
return TRUE;
if (GetRace() == 1306)
return TRUE;
if (GetRace() == 1307)
return TRUE;
if (GetRace() == 1901)
return TRUE;
if (GetRace() == 1902)
return TRUE;
if (GetRace() == 1903)
return TRUE;
if (GetRace() == 2206)
return TRUE;
if (GetRace() == 2207)
return TRUE;
if (GetRace() == 2291)
return TRUE;
if (GetRace() == 2306)
return TRUE;
if (GetRace() == 2307)
return TRUE;
if (GetRace() == 2492)
return TRUE;
if (GetRace() == 2493)
return TRUE;
if (GetRace() == 2494)
return TRUE;
if (GetRace() == 2598)
return TRUE;
if (GetRace() == 3090)
return TRUE;
if (GetRace() == 3091)
return TRUE;
if (GetRace() == 3190)
return TRUE;
if (GetRace() == 3191)
return TRUE;
if (GetRace() == 3290)
return TRUE;
if (GetRace() == 3291)
return TRUE;
if (GetRace() == 3390)
return TRUE;
if (GetRace() == 3391)
return TRUE;
if (GetRace() == 3490)
return TRUE;
if (GetRace() == 3491)
return TRUE;
if (GetRace() == 3590)
return TRUE;
if (GetRace() == 3591)
return TRUE;
if (GetRace() == 3690)
return TRUE;
if (GetRace() == 3691)
return TRUE;
if (GetRace() == 3790)
return TRUE;
if (GetRace() == 3791)
return TRUE;
if (GetRace() == 3890)
return TRUE;
if (GetRace() == 3891)
return TRUE;
if (GetRace() == 5001)
return TRUE;
if (GetRace() == 5004)
return TRUE;
if (GetRace() == 5002)
return TRUE;
if (GetRace() == 5161)
return TRUE;
if (GetRace() == 5162)
return TRUE;
if (GetRace() == 5163)
return TRUE;
if (GetRace() == 6091)
return TRUE;
if (GetRace() == 6191)
return TRUE;
return FALSE;
}
/////////////////////////////////////////////////
userinterface/InstanceBase.h
Ara:
NAMECOLOR_MOB,
Altina ekle:
NAMECOLOR_BOSS,
Ara:
BOOLIsEnemy();
Altina Ekle:
BOOLIsBoss();
/////////////////////////////////////////////////
userinterface/InstanceBaseEffect.cpp
Ara:
else if (IsEnemy())
{
return NAMECOLOR_MOB;
}
Bu sekilde degistirin:
else if (IsEnemy())
{
if (IsBoss())
return NAMECOLOR_BOSS;
else
return NAMECOLOR_MOB;
}
/////////////////////////////////////////////////
userinterface/PythonCharacterManagerModule.cpp
Ara:
PyModule_AddIntConstant(poModule, "NAMECOLOR_MOB", CInstanceBase::NAMECOLOR_NORMAL_MOB);
PyModule_AddIntConstant(poModule, "NAMECOLOR_NPC", CInstanceBase::NAMECOLOR_NORMAL_NPC);
/////////////////////////////////////////////////
userinterface/PythonMinimap.cpp
Ara:
m_NPCPositionVector.clear();
Altina ekleyin:
m_BossPositionVector.clear();
Bu kod blogunu bulun:
else if (pkInstEach->IsEnemy())
{
aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;
m_MonsterPositionVector.push_back(aMarkPosition);
}
Altina ekleyin:
else if (pkInstEach->IsBoss())
{
aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX;
aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY;
m_BossPositionVector.push_back(aMarkPosition);
}
Bu kod blogunu bulun:
// NPC
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_NPC));
aIterator = m_NPCPositionVector.begin();
while (aIterator != m_NPCPositionVector.end())
{
TMarkPosition & rPosition = *aIterator;
m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
m_WhiteMark.Render();
++aIterator;
}
Altina ekleyin:
// BOSS
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, CInstanceBase::GetIndexedNameColor(CInstanceBase::NAMECOLOR_BOSS));
aIterator = m_BossPositionVector.begin();
while (aIterator != m_BossPositionVector.end())
{
TMarkPosition & rPosition = *aIterator;
m_WhiteMark.SetPosition(rPosition.m_fX, rPosition.m_fY);
m_WhiteMark.Render();
++aIterator;
}
/////////////////////////////////////////////////
PythonMiniMap.h
Arat:
TInstanceMarkPositionVectorm_MonsterPositionVector;
Altina ekleyin:
TInstanceMarkPositionVectorm_BossPositionVector;
/////////////////////////////////////////////////
PACK
/////////////////////////////////////////////////
root/colorinfo.py
Arat:
CHR_NAME_RGB_MOB = (235, 22, 9)
Altina ekleyin:
CHR_NAME_RGB_BOSS = (204, 255, 255)
/////////////////////////////////////////////////
root/introloading.py
Arat:
chrmgr.NAMECOLOR_MOB : colorInfo.CHR_NAME_RGB_MOB,
Altina ekleyin:
chrmgr.NAMECOLOR_BOSS : colorInfo.CHR_NAME_RGB_BOSS,
Ben bu rengi beğenmedim. Renk nasıl değiştiririm?
Vereceğim sitedeki uygulamadan istediğiniz renge ait RGB kodunu alıp, colorinfo.py deki parantez içine yazarsanız renk değişir.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Boss İsim Sistemi[C++] Nedir?
Metin2 özel sunucularında oyuncuların dikkatini çekecek güçlü ve özgün sistemlerden biri olan Boss İsim Sistemi[C++] , sunucuda devreye girdiğinde haritada belirli aralıklarla spawnlanan boss karakterlerinin adını dinamik olarak değiştiren gelişmiş bir sistemdir. Bu sistem sayesinde boss karakterler daha dikkat çekici hale gelir ve oyuncular için sürpriz etkisi yaratılır. Bu yazıda, C++ dilinde yazılmış bu sistemi nasıl uygulayacağınızı adım adım anlatacağız.
Sistem Özellikleri
Bu sistem sayesinde;
- Harita üzerinde spawnlanan bossların isimleri rastgele olarak değişebilir.
- Oyuncular boss ismini görünce neyle karşılaştıklarını kolayca anlayabilirler.
- Sunucu yöneticileri, boss isim listesini kolayca düzenleyebilir.
- Sistem C++ tabanlı olduğu için performansı yüksektir.
Sistemin Kurulumu
Öncelikle game_src dosyasının içine girerek char_manager.cpp ve char_manager.h dosyalarını açmalısınız. Burada boss karakterlerin spawnlandığı yerleri bulup, spawn sırasında rastgele bir isim atamak için küçük değişiklikler yapmanız gerekiyor. Örnek olarak:
std::vector<std::string> bossNames = {'DarkLord','ShadowReaper','DragonSlayer'};
int randomIndex = rand() % bossNames.size();
pMob->SetName(bossNames[randomIndex].c_str());
Sistemde Kullanılan Fonksiyonlar
- SetName(): Mob nesnesine yeni ismi atar.
- rand(): Rastgele bir indeks üretir.
- std::vector: Boss isimlerini tutan yapıdır.
Avantajları
Bu sistem sayesinde:
- Sunucunuzdaki oyun deneyimi artırılır.
- Oyuncuların dikkati artar.
- Sunucu daha profesyonel bir hale alır.
- PvP odaklı sunucularda boss savaşları daha eğlenceli hale gelir.
Not: Bu sistem Martysama tarafından geliştirilmiş Metin2Dev platformuna uygundur ve Metin2Lobby.com tarafından test edilmiştir.
What is Boss Name System[C++]?
The Boss Name System[C++] is one of the powerful and original systems that attract players' attention in Metin2 private servers. This advanced system dynamically changes the names of boss characters spawning on the map at certain intervals when activated. This way, boss characters become more eye-catching and create a surprise effect for players. In this article, we will explain step by step how to implement this system written in C++.
System Features
With this system;
- The names of bosses spawning on the map can change randomly.
- Players can easily identify what they are facing upon seeing the boss name.
- Server administrators can easily edit the boss name list.
- Since the system is based on C++, it offers high performance.
Installation of the System
Firstly, navigate into the game_src directory and open the files char_manager.cpp and char_manager.h. Find where boss characters are spawned and make small modifications to assign a random name during spawn. For example:
std::vector<std::string> bossNames = {'DarkLord','ShadowReaper','DragonSlayer'};
int randomIndex = rand() % bossNames.size();
pMob->SetName(bossNames[randomIndex].c_str());
Functions Used in the System
- SetName(): Assigns a new name to the mob object.
- rand(): Generates a random index.
- std::vector: Stores the list of boss names.
Advantages
With this system:
- The gaming experience on your server increases.
- Player attention rises.
- The server gains a more professional look.
- Boss battles become more fun in PvP-focused servers.
Note: This system is compatible with the Metin2Dev platform developed by Martysama and has been tested by Metin2Lobby.com.
