Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod Yeni Karakter Dereceleri Ekleme: Trickster ve Sucker

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
4,517
Tepkime puanı
5,799
Puanları
113
Yaş
32
Konum
Türkiye
Dc
fatihbulut
Yeni Karakter Dereceleri Ekleme: Trickster ve Sucker

Bu sistemde mevcut derece sistemine iki yeni derece ekleyeceğiz:

  • Trickster → Kahraman derecesinin üstünde olacak.
  • Sucker → Zalim derecesinin altında olacak.

Öncelikle Client tarafıyla başlayalım.



CLIENT

InstanceBase.h
dosyasını açın.

Aşağıdaki satırları bulun:

Kod:
TITLE_NUM = 9,
TITLE_NONE = 4,

Şu şekilde değiştirin:

Kod:
TITLE_NUM = 11, // +2 yeni derece
TITLE_NONE = 5, // Neutral derece 1 sıra kaydığı için +1

TITLE_NONE tarafının 5 olmasının sebebi, bu değerin Neutral derecesini temsil etmesidir.

Neutral derecenin altına yeni bir derece eklendiği için Neutral'ın index değeri de 1 artmaktadır.



InstanceBase.cpp dosyasını açın.

GetAlignmentGrade() fonksiyonunu bulun ve aşağıdaki şekilde düzenleyin:

Kod:
UINT CInstanceBase::GetAlignmentGrade()
{
if (m_sAlignment >= 16000)
return 0; // Yeni pozitif derece

if (m_sAlignment >= 12000)
    return 1; // Önceden 0

if (m_sAlignment >= 8000)
    return 2; // Önceden 1

if (m_sAlignment >= 4000)
    return 3; // Önceden 2

if (m_sAlignment >= 1000)
    return 4; // Önceden 3

if (m_sAlignment >= 0)
    return 5; // Önceden 4 - Neutral

if (m_sAlignment > -4000)
    return 6; // Önceden 5

if (m_sAlignment > -8000)
    return 7; // Önceden 6

if (m_sAlignment > -12000)
    return 8; // Önceden 7

if (m_sAlignment > -16000)
    return 9; // Önceden 8

return 10; // Yeni negatif derece

}

Yine InstanceBase.cpp içerisinde aşağıdaki fonksiyonu bulun:

Kod:
int CInstanceBase::GetAlignmentType()
{
switch (GetAlignmentGrade())
{
case 0: // Yeni pozitif derece
case 1:
case 2:
case 3:
case 4:
return ALIGNMENT_TYPE_WHITE;

    case 6:
    case 7:
    case 8:
    case 9:
    case 10: // Yeni negatif derece
        return ALIGNMENT_TYPE_DARK;

    default: // case 5 = TITLE_NONE
        return ALIGNMENT_TYPE_NORMAL;
}
}


Burada pozitif ve negatif derece indexleri yeni sisteme göre birer sıra kaydırılmış oluyor.



InstanceBaseEffect.cpp dosyasını açın.

Derece isimlerinin renklerinin tanımlandığı bölümü bulun:

Kod:
D3DXCOLOR CInstanceBase::ms_kD3DXClrTitle[CInstanceBase::TITLE_MAX_NUM] =
{
D3DXCOLOR(...),
};

Buradaki renk değerleri source yapısına göre değişebileceği için doğrudan hazır bir değer vermek doğru olmayacaktır.

Yeni eklediğiniz iki derece için istediğiniz renkleri mevcut sıralamaya uygun şekilde ekleyebilirsiniz.

Örneğin:

  • Trickster için mevcut en yüksek pozitif dereceden farklı bir renk
  • Sucker için mevcut en düşük negatif dereceden farklı bir renk

kullanabilirsiniz.



locale_game.txt dosyasını açın ve yeni derece isimlerini ekleyin:

Kod:
PVP_LEVEL_SMECHER Trickster
PVP_LEVEL_FRAIER Sucker

İsterseniz bunların karşılıklarını Türkçe olarak da kullanabilirsiniz.

Örneğin:

Kod:
PVP_LEVEL_SMECHER Düzenbaz
PVP_LEVEL_FRAIER Enayi


localeinfo.py dosyasını açın.

Aşağıdaki satırı bulun:

Kod:
TITLE_NAME_LIST = (
PVP_LEVEL0,
PVP_LEVEL1,
PVP_LEVEL2,
PVP_LEVEL3,
PVP_LEVEL4,
PVP_LEVEL5,
PVP_LEVEL6,
PVP_LEVEL7,
PVP_LEVEL8,
)

Şu şekilde değiştirin:

Kod:
TITLE_NAME_LIST = (
PVP_LEVEL_SMECHER,
PVP_LEVEL0,
PVP_LEVEL1,
PVP_LEVEL2,
PVP_LEVEL3,
PVP_LEVEL4,
PVP_LEVEL5,
PVP_LEVEL6,
PVP_LEVEL7,
PVP_LEVEL8,
PVP_LEVEL_FRAIER,
)

Böylece yeni pozitif derece listenin başına, yeni negatif derece ise listenin sonuna eklenmiş olur.



introloading.py dosyasını açın.

Alignment kontrolünün yapıldığı bölümü bulun.

Mevcut yapı yaklaşık olarak şu şekildedir:

Kod:
if alignment >= 12000:
return TITLE_NAME_LIST[0]
elif alignment >= 8000:
return TITLE_NAME_LIST[1]

[HEADING=2]...[/HEADING]
return TITLE_NAME_LIST[8]

Yeni derece sistemine göre şu şekilde düzenleyin:

Kod:
if alignment >= 16000:
return TITLE_NAME_LIST[0] # Trickster

elif alignment >= 12000:
return TITLE_NAME_LIST[1]

elif alignment >= 8000:
return TITLE_NAME_LIST[2]

elif alignment >= 4000:
return TITLE_NAME_LIST[3]

elif alignment >= 1000:
return TITLE_NAME_LIST[4]

elif alignment >= 0:
return TITLE_NAME_LIST[5]

elif alignment > -4000:
return TITLE_NAME_LIST[6]

elif alignment > -8000:
return TITLE_NAME_LIST[7]

elif alignment > -12000:
return TITLE_NAME_LIST[8]

elif alignment > -16000:
return TITLE_NAME_LIST[9]

return TITLE_NAME_LIST[10] # Sucker

Böylece Client tarafındaki derece sistemi toplam 11 derece olacak şekilde tamamlanmış olur.



SERVER

Şimdi Server tarafına geçelim.

server/src/game/src/char_battle.cpp dosyasını açın.

Aşağıdaki tanımı bulun:

Kod:
TItemDropPenalty aItemDropPenalty_kor[9] =
{

Yeni sistemde toplam 11 derece bulunduğu için bunu şu şekilde değiştirin:

Kod:
TItemDropPenalty aItemDropPenalty_kor[11] =
{
{ 0, 0, 0, 0 }, // Tier 0: Trickster - eşya düşürme cezası yok

// Diğer dereceleri kendi sisteminize göre buraya ekleyin.
};

Buradaki eşya düşürme cezalarını istediğiniz şekilde düzenleyebilirsiniz.

Yeni eklenen iki derece nedeniyle mevcut değerleri toplam 11 dereceye uygun hale getirmeniz gerekmektedir.

Örneğin Trickster pozitif bir derece olduğu için eşya düşürme cezasını 0 bırakabilirsiniz.

Sucker için ise mevcut en düşük negatif dereceden daha yüksek bir ceza tanımlayabilirsiniz.



Aynı dosyada aşağıdaki Alignment kontrolünü bulun:

Kod:
if (GetRealAlignment() >= 120000)
iAlignIndex = 0;
else if (GetRealAlignment() >= 80000)
iAlignIndex = 1;
else if (GetRealAlignment() >= 40000)
iAlignIndex = 2;
else if (GetRealAlignment() >= 10000)
iAlignIndex = 3;
else if (GetRealAlignment() >= 0)
iAlignIndex = 4;
else if (GetRealAlignment() > -40000)
iAlignIndex = 5;
else if (GetRealAlignment() > -80000)
iAlignIndex = 6;
else if (GetRealAlignment() > -120000)
iAlignIndex = 7;
else
iAlignIndex = 8;

Şu şekilde değiştirin:

Kod:
C++:Panoya kopyala
if (GetRealAlignment() >= 160000)
iAlignIndex = 0; // Yeni pozitif derece

else if (GetRealAlignment() >= 120000)
iAlignIndex = 1;

else if (GetRealAlignment() >= 80000)
iAlignIndex = 2;

else if (GetRealAlignment() >= 40000)
iAlignIndex = 3;

else if (GetRealAlignment() >= 10000)
iAlignIndex = 4;

else if (GetRealAlignment() >= 0)
iAlignIndex = 5; // Neutral - önceden 4

else if (GetRealAlignment() > -40000)
iAlignIndex = 6;

else if (GetRealAlignment() > -80000)
iAlignIndex = 7;

else if (GetRealAlignment() > -120000)
iAlignIndex = 8;

else if (GetRealAlignment() > -160000)
iAlignIndex = 9;

else
iAlignIndex = 10; // Yeni negatif derece

Dikkat:

Client tarafında Alignment değerleri 16000, 12000 şeklinde kontrol edilirken Server tarafında GetRealAlignment() kullanıldığı için değerler 10 katı şeklindedir.

Yani:

Kod:
Client: 16000
Server: 160000

Bu nedenle Client ve Server tarafındaki sınırların birbirleriyle uyumlu olduğundan emin olun.


Yeni dereceler için renkleri, eşya düşürme cezalarını ve Alignment sınırlarını tamamen kendi sisteminize göre değiştirebilirsiniz.

Alıntıdır.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar