Rütbe Sistemi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 103

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Uzun zaman önce bitirdiğim rütbe sisteminin benzerini yapıp paylaşmışlar.
Madem paylaşıldı, anlatımı benden olsun.

Rütbe nedir diyenlere :



Başlamadan söyleyeyim, paylaşılan bu sistemin benim yaptığımla alakası yoktur, inc2 adlı serverdan çalınarak yapıldı. Zaten gördüğünüz gibi quest'e bağlı ilkel bir sistemdir. Yinede hiç yoktan iyidir, serverlara renk katmış olursunuz.
Sistem üzerinden sataşanlara not: Bendeki sistemi bilen herkes pack + db + client + game 4'lü kusursuz sistem olduğunu bilir. 😄


Char.cpp açılır:
Arayın:

Kod:
addPacket.dwLevel

altına ekleyin

Kod:
addPacket.dwRutbe = GetRutbe();

Char.h açın

arayın
Kod:
POINT_RESIST_PENETRATE = 137
altına ekleyin

Kod:
POINT_RUTBE,// 140

arayın:

Kod:
typedef struct character_point
orada
Kod:
BYTElevel;
yazıyor altına ekleyin
Kod:
BYTErutbe;

arayın
GetLevel

ekleyin
Kod:
intGetRutbe() const{ return m_points.rutbe;} voidSetRutbe(BYTE rutbe){ return m_points.rutbe = rutbe; }


Packet.h açın

arayın

Kod:
packet_char_additional_info
dwLevelin altına ekleyin

Kod:
DWORDdwRutbe;

arayın
Kod:
packet_update_char

dwLevelin altına ekleyin yine
Kod:
DWORDdwRutbe;

questlua_pc.cpp açın
arayın

Kod:
int pc_get_level

kodun bittiği yerden sonraya ekleyin


Kod:
int pc_set_rutbe(lua_State * L) { if (!lua_isnumber(L, 1)) { sys_err("invalid argument"); return 0; } else { int rutbe = lua_tonumber(L, 1); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr()  ; ch->PointChange(POINT_RUTBE, rutbe, false, true); ch->UpdatePacket(); return 0; } } int pc_get_rutbe(lua_State * L) { lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetRutbe()); return 1; }


arayın

Kod:
{ "set_dx",pc_set_dx},

ekleyin
Kod:
{ "set_rutbe",pc_set_rutbe}, { "get_rutbe",pc_get_rutbe},


questlua_quest.cpp açın
arayın

Kod:
namespace quest

ekleyin altına
Kod:
int quest_set_rutbe(lua_State * L) { CQuestManager& q = CQuestManager::instance(); if (lua_isstring(L, -1)) q.GetCurrentPC()->SetCurrentQuestTitle(lua_tostring(L, -1)); return 0; } int quest_set_another_rutbe(lua_State* L) { CQuestManager& q = CQuestManager::instance(); if (lua_isstring(L,1) && lua_isstring(L, 2)) q.GetCurrentPC()->SetQuestTitle(lua_tostring(L, 1), lua_tostring(L,2)); return 0; }


aratın
Kod:
{ "set_counter_name",quest_set_counter_name},

ekleyin
Kod:
{ "set_title",quest_set_rutbe}, { "set_title2",quest_set_another_rutbe},


questpc.cpp ve questpc.h dosyalarında eklenecek yerler verilmiş ama gerek yok bunlara zaten mainline ve mainline_rs kullanan herkeste ekli. Hata olan olursa eksikleri veririm.


Game build edebilirsiniz bir şey kalmadı.

Client source açın.

PythonTextTail.cpp açın

aratın:
Kod:
// Mark

ekleyin

Kod:
CGraphicTextInstance * pRutbe = pTextTail->pRutbeTextInstance; if (pRutbe) { int iWidth, iHeight; pRutbe->GetTextSize(&iWidth, &iHeight); pRutbe->SetPosition(pTextTail->x + iWidth/2, pTextTail->y - 15.0f, pTextTail->z); pRutbe->Update(); }


Şimdi
Kod:
//Mark

yerinden biraz aşağı inin
Kod:
int iImageHalfSize = pMa

göreceksiniz. altına şunu ekleyin

Kod:
float rutbekontrol = pRutbe ? 15.0f : 0.0f


az daha altında şu ikisi var

Kod:
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition, pTextTail->z); pMarkInstance->SetPosition(pTextTail->x - iWidth/2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition);

böyle değiştirin

Kod:
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition - rutbekontrol, pTextTail->z); pMarkInstance->SetPosition(pTextTail->x - iWidth/2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition - rutbekontrol);


arayın
Kod:
void CPythonTextTail::Render()
az altında şunu bulun
Kod:
pTextTail->pTextInstance->Render();

altına ekleyin
Kod:
if (pTextTail->pRutbeTextInstance) { pTextTail->pRutbeTextInstance->Render(); }


ara
Kod:
pTextTail->pMarkInstance=NULL;

ekle

Kod:
pTextTail->pRutbeTextInstance=NULL;

ara

Kod:
return pTextTail;

2 satır üstüne ekle (ALTINA DEĞİL ÜSTÜNE !)

Kod:
pTextTail->pRutbeTextInstance = NULL;

arayın

Kod:
m_TextTailPool.Free(pTextTail);

yine 2 satır üstüne ekleyin


Kod:
if (pTextTail->pRutbeTextInstance) { CGraphicTextInstance::Delete(pTextTail->pRutbeTextInstance); pTextTail->pRutbeTextInstance = NULL; }

arayın

Kod:
void CPythonTextTail::AttachTitle(DWORD dwVID, const char * c_szName, const D3DXCOLOR & c_rColor)

üstüne 2 satır boşluk bırakıp ekleyin (BLOĞUN İÇİNE DEĞİL BULDUĞUNUZ YAZIDAN YUKARIDA 2 SATIR BOŞLUK BIRAKIP)

Kod:
void CPythonTextTail::AttachRutbe(DWORD dwVID, const char * c_szText, const D3DXCOLOR & c_rColor) { TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID); if (m_CharacterTextTailMap.end() == itor) return; TTextTail * pTextTail = itor->second; CGraphicTextInstance *& prRutbeTextInstance = pTextTail->pRutbeTextInstance; if (prRutbeTextInstance) { prRutbeTextInstance = CGraphicTextInstance::New(); prRutbeTextInstance->SetTextPointer(ms_pFont); prRutbeTextInstance->SetOutline(true); prRutbeTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL  _ALIGN_CENTER); prRutbeTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_AL  IGN_BOTTOM); prRutbeTextInstance->SetValue(c_szText); prRutbeTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b); prRutbeTextInstance->Update(); } } void CPythonTextTail::DetachRutbe(DWORD dwVID) { TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID); if (m_CharacterTextTailMap.end() == itor) return; TTextTail * pTextTail = itor->second; if (pTextTail->pRutbeTextInstance) { CGraphicTextInstance::Delete(pTextTail->pRutbeTextInstance); pTextTail->pRutbeTextInstance = NULL; } }


ara
Kod:
const float c_fyMarkPosition

ekle

Kod:
BOOL bPKTitleEnable = TRUE;

Client build edebilirsiniz.

Questleri de dosya halinde ekleyeceğim, client ve game hata alanlar aşağıya yazsın çözeriz.

Gerekli questlib.lua ve quest

Metin2 Lobby'da Rütbe Sistemi Nedir ve Nasıl Çalışır?

Metin2 Lobby olarak sunucularınızda oyun deneyimini artırmak için rütbe sistemi gibi önemli bir yapıya sahip olmanız gerekir. Bu sistem, oyuncuların PvP ve PvE aktiviteleriyle kazandıkları puanlara göre sınıflandırılmasını sağlar. Rütbe sistemi, hem rekabet hem de motivasyon açısından oyuncuların uzun süre sunucuda kalmasını teşvik eder.

Rütbe Sisteminin Amacı
Metin2 özel sunucularında rütbe sistemi, oyuncuların performanslarını belirlemek ve karşılaştırmak için kullanılır. Özellikle PvP odaklı sunucularda, oyuncuların güç ve strateji seviyeleri rütbeleriyle belirlenir. Bu da turnuvalar, savaşlar ve liderlik tabloları gibi unsurlarla desteklenir.

Rütbe Tanımlamaları ve Seviye Atlama
Rütbe sisteminde her seviye, belirli bir puan aralığına veya zafer sayısına karşılık gelir. Örneğin:
- Yeni Başlayan: 0 - 100 puan
- Kolej: 101 - 500 puan
- Şövalye: 501 - 1500 puan
- Lord: 1501 - 5000 puan
- Kral: 5001+ puan

Oyuncular, PvP zaferleri, görev tamamlamaları ve etkinliklere katılım gibi yollarla puan kazanabilir. Puanlar sistemdeki DB(core) üzerinden saklanır ve game server[/BR] tarafından güncellenir.

C++ ve Python ile Rütbe Sistemi Geliştirme
Metin2 özel sunucularında rütbe sistemi genellikle server-side olarak C++ dilinde yazılmıştır. Sunucu kaynak kodlarında (src), oyuncu puanlaması ve rütbe güncellemesi için fonksiyonlar tanımlanır. Bu fonksiyonlar, PvP olayları, görev tamamlamaları gibi eylemler sonrası tetiklenir. Aynı zamanda Python dili kullanılarak GUI tabanlı yönetim panelleri de oluşturulabilir. Bu paneller sayesinde adminler rütbeleri takip edebilir, düzenleyebilir veya özel ödüller verebilir.

Rütbe Sistemi ve Liderlik Tablosu
Her oyuncunun rütbesi, liderlik tablosunda listelenir. Bu tablo genellikle oyuncu adı, puanı ve rütbesini içerir. Liderlik tablosu, oyuncuların kendi konumlarını görebilmelerini sağlar. Bu da onların daha fazla ilerlemek istemesine neden olur. Liderlik tablosu genellikle game server tarafından veritabanından çekilir ve istemci tarafında (client) gösterilir.

Rütbe Sistemini Geliştirmek
Sunucunuzdaki rütbe sistemi, sadece PvP değil aynı zamanda PvE, etkinlik ve görev tamamlamalarıyla da genişletilebilir. Örneğin, belirli bir boss'u yenen oyuncuya bonus puan verilebilir. Bu sayede sadece savaş sever oyuncular değil, PvE odaklı oyuncular da sisteme dahil olur. Ayrıca haftalık veya aylık turnuvalarla rütbe sistemine dinamizm kazandırılabilir.

Metin2 Lobby ve Rütbe Sistemi
Metin2 Lobby olarak sunucularınızda rütbe sistemini doğru kurmak, oyuncu sadakatini artırmak açısından kritik öneme sahiptir. Sistemdeki her güncelleme, oyuncuların deneyimini doğrudan etkiler. Bu nedenle hem C++ hem de Python tabanlı geliştirmelerle sistemin sürekli gelişmesi sağlanmalıdır.


What is the Rank System on Metin2 Lobby and How Does It Work?

As Metin2 Lobby, you need to have an important structure like the rank system to enhance the gaming experience on your servers. This system ranks players according to points earned through their PvP and PvE activities. The rank system encourages players to stay longer on the server by fostering both competition and motivation.

Purpose of the Rank System
In Metin2 private servers, the rank system is used to determine and compare player performance. Especially in PvP-focused servers, players' strength and strategy levels are identified by their ranks. This is supported by elements such as tournaments, battles, and leaderboards.

Rank Definitions and Level Advancement
Each level in the rank system corresponds to a specific point range or number of victories. For example:
- Beginner: 0 - 100 points
- College: 101 - 500 points
- Knight: 501 - 1500 points
- Lord: 1501 - 5000 points
- King: 5001+ points

Players can earn points through PvP victories, quest completions, and participation in events. These points are stored via the DB(core) in the system and updated by the game server.

Developing Rank Systems with C++ and Python
In Metin2 private servers, the rank system is typically written in C++ on the server-side. Functions for player scoring and rank updates are defined in the server source code (src). These functions are triggered after actions such as PvP events and quest completions. Additionally, management panels based on Python GUI can be created. Admins can monitor, adjust, or award special prizes through these panels.

Rank System and Leaderboard
Every player's rank appears on the leaderboard. This table generally includes the player name, score, and rank. The leaderboard allows players to see their own position, motivating them to advance further. The leaderboard is usually retrieved from the database by the game server and displayed on the client side.

Improving the Rank System
The rank system on your server can be expanded beyond PvP to include PvE, events, and quests. For instance, extra points can be awarded to players who defeat certain bosses. This way, not only combat-oriented players but also PvE-focused ones become part of the system. Moreover, weekly or monthly tournaments can add dynamism to the rank system.

Metin2 Lobby and the Rank System
At Metin2 Lobby, properly setting up the rank system on your servers is crucial for increasing player loyalty. Every update in the system directly impacts the player experience. Therefore, continuous development should be ensured using both C++ and Python based improvements.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt