- 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:
Öncelikle Client tarafıyla başlayalım.
CLIENT
InstanceBase.h dosyasını açın.
Aşağıdaki satırları bulun:
Şu şekilde değiştirin:
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:
Yine InstanceBase.cpp içerisinde aşağıdaki fonksiyonu bulun:
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:
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:
kullanabilirsiniz.
locale_game.txt dosyasını açın ve yeni derece isimlerini ekleyin:
İsterseniz bunların karşılıklarını Türkçe olarak da kullanabilirsiniz.
Örneğin:
localeinfo.py dosyasını açın.
Aşağıdaki satırı bulun:
Şu şekilde değiştirin:
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:
Yeni derece sistemine göre şu şekilde düzenleyin:
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:
Yeni sistemde toplam 11 derece bulunduğu için bunu şu şekilde değiştirin:
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:
Şu şekilde değiştirin:
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:
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.
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.
