- Katılım
- 8 Haz 2024
- Konular
- 85
- Mesajlar
- 526
- Online süresi
- 2ay 12g
- Reaksiyon Skoru
- 405
- Altın Konu
- 0
- Başarım Puanı
- 121
- TM Yaşı
- 1 Yıl 10 Ay 15 Gün
- MmoLira
- 3,272
- DevLira
- 189
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
denizeriye saygılar alıntıdır 
char.h içinde aratılır:
değiştirilir:
tekrar aratılır:
ve değiştirilir:
char_skill.cpp içinde aratılır:
fonksiyon ve içeriği değiştirilir:
Değişiklik yapılan fonksiyonun hemen üstüne eklenir;
aynı dosya içerisinde aratılır:
ve fonksiyon içeriği değiştirilir;
tekrar aratılır:
ve fonksiyon içeriği değiştirilir;
input_login.cpp içerisinde üst kısımda eğer yoksa eklenir:
aynı dosyada aratılır:
ve aratılan fonksiyonun en altına eklenir;
item.cpp içerisinde aratılır:
ve fonksiyonun içerisine eklenir;
tekrar aratılır:
ve fonksiyonun içerisine eklenir;
questlua_pc.cpp içerisinde aratılır:
ve fonksiyon içeriği komple değiştirilir;
unique_item.h içerisine eklenir:
item_proto.txt:
item_names.txt
denizeri notes
----------------------
item kodu 70059 dur. isteğe göre değiştirilebilir. client/pack kısmından item_list.txt ve item_desc.txt kısmını düzenlemeniz gerekir (yoksa oyun içinde item gözükmez)
bug varmıdır bilmiyorum, aklıma gelen türden denemeler yaptım ve sıkıntı yaşamadım ayrıca fonksiyonda constexpr ve noexcept kullandığım için c++ sürümü düşük dosyalarda derlenmeyebilir, eğer düşük c++ sürümüyle derlemek istiyorsanız constexpr kısmını inline ile değiştirip noexcept kısmını silin.
char.h içinde aratılır:
void SkillLevelPacket();
değiştirilir:
void SkillLevelPacket(bool temporary = false) const;
tekrar aratılır:
int GetSkillLevel(DWORD dwVnum) const;
ve değiştirilir:
int GetSkillLevel(DWORD dwVnum, bool skilltraining = false) const;
char_skill.cpp içinde aratılır:
void CHARACTER::SkillLevelPacket()
fonksiyon ve içeriği değiştirilir:
void CHARACTER::SkillLevelPacket(const bool temporary)
{
if (!GetDesc())
return;
TPacketGCSkillLevel pack;
pack.bHeader = HEADER_GC_SKILL_LEVEL;
thecore_memcpy(&pack.skills, m_pSkillLevels, sizeof(TPlayerSkill) * SKILL_MAX_NUM);
if (temporary)
{
UpgradeSkillsTemporary(pack, GetJob(), GetSkillGroup());
}
GetDesc()->Packet(&pack, sizeof(TPacketGCSkillLevel));
}
Değişiklik yapılan fonksiyonun hemen üstüne eklenir;
constexpr void UpgradeSkillsTemporary(TPacketGCSkillLevel & packet, BYTE job, BYTE skillgroup) noexcept
{
switch (job)
{
case JOB_WARRIOR:
{
if (skillgroup == 1)
{
for (BYTE i = 1; i <= 5; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
else if (skillgroup == 2)
{
for (BYTE i = 16; i <= 20; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
}
case JOB_ASSASSIN:
{
if (skillgroup == 1)
{
for (BYTE i = 31; i <= 35; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
else if (skillgroup == 2)
{
for (BYTE i = 46; i <= 50; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
}
case JOB_SURA:
{
if (skillgroup == 1)
{
for (BYTE i = 61; i <= 66; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
else if (skillgroup == 2)
{
for (BYTE i = 76; i <= 81; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
}
case JOB_SHAMAN:
{
if (skillgroup == 1)
{
for (BYTE i = 91; i <= 96; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
else if (skillgroup == 2)
{
for (BYTE i = 106; i <= 111; i++)
{
if (30 > packet.skills.bLevel)
{
packet.skills.bLevel = 30;
packet.skills.bMasterType = SKILL_GRAND_MASTER;
}
}
}
}
}
}
aynı dosya içerisinde aratılır:
int CHARACTER::GetSkillMasterType(DWORD dwVnum) const
ve fonksiyon içeriği değiştirilir;
if (!IsPC())
return 0;
if (dwVnum >= SKILL_MAX_NUM)
{
sys_err("%s skill vnum overflow %u", GetName(), dwVnum);
return 0;
}
if (m_pSkillLevels)
{
if (IsEquipUniqueItem(UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER))
{
return (SKILL_GRAND_MASTER > m_pSkillLevels[dwVnum].bMasterType) ? SKILL_GRAND_MASTER : m_pSkillLevels[dwVnum].bMasterType;
}
else
{
return m_pSkillLevels[dwVnum].bMasterType;
}
}
return SKILL_NORMAL;
tekrar aratılır:
int CHARACTER::GetSkillLevel(DWORD dwVnum) const
ve fonksiyon içeriği değiştirilir;
if (dwVnum >= SKILL_MAX_NUM)
{
sys_err("%s skill vnum overflow %u", GetName(), dwVnum);
sys_log(0, "%s skill vnum overflow %u", GetName(), dwVnum);
return 0;
}
if (m_pSkillLevels)
{
if (IsEquipUniqueItem(UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER) && !skilltraining)
{
return (30 > m_pSkillLevels[dwVnum].bLevel) ? 30 : m_pSkillLevels[dwVnum].bLevel;
}
else
{
return std::min<int>(SKILL_MAX_LEVEL, m_pSkillLevels[dwVnum].bLevel);
}
}
return 0;
}
input_login.cpp içerisinde üst kısımda eğer yoksa eklenir:
#include "unique_item.h"
aynı dosyada aratılır:
void CInputLogin::Entergame(LPDESC d, const char * data)
ve aratılan fonksiyonun en altına eklenir;
if (ch->IsEquipUniqueItem(UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER))
{
ch->SkillLevelPacket(true);
}
item.cpp içerisinde aratılır:
void CItem::StartUniqueExpireEvent()
ve fonksiyonun içerisine eklenir;
bu kısımın altına;
// HARD CODING
if (GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
m_pOwner->ShowAlignment(false);
bu eklenecek;
if (GetVnum() == UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER)
m_pOwner->SkillLevelPacket(true);
tekrar aratılır:
void CItem::StopUniqueExpireEvent()
ve fonksiyonun içerisine eklenir;
bu kısımın altına;
// HARD CODING
if (GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
m_pOwner->ShowAlignment(false);
bu eklenecek;
if (GetVnum() == UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER)
m_pOwner->SkillLevelPacket();
questlua_pc.cpp içerisinde aratılır:
int pc_get_skill_level(lua_State * L)
ve fonksiyon içeriği komple değiştirilir;
if (!lua_isnumber(L, 1))
{
sys_err("invalid argument");
lua_pushnumber(L, 0);
return 1;
}
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
DWORD dwVnum = (DWORD) lua_tonumber(L, 1);
lua_pushnumber(L, ch->GetSkillLevel(dwVnum, true));
return 1;
unique_item.h içerisine eklenir:
UNIQUE_ITEM_TEMP_SKILL_GRAND_MASTER = 70059,
item_proto.txt:
70059 ¼±ՀǠÀ尩 ITEM_UNIQUE UNIQUE_NONE 1 NONE NONE WEAR_SHIELD 0 50000 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 120 0 0 0 0 0 0 0 0
item_names.txt
70059 Büyük Usta'nın Yüzüğü
denizeri notes
----------------------
item kodu 70059 dur. isteğe göre değiştirilebilir. client/pack kısmından item_list.txt ve item_desc.txt kısmını düzenlemeniz gerekir (yoksa oyun içinde item gözükmez)
bug varmıdır bilmiyorum, aklıma gelen türden denemeler yaptım ve sıkıntı yaşamadım ayrıca fonksiyonda constexpr ve noexcept kullandığım için c++ sürümü düşük dosyalarda derlenmeyebilir, eğer düşük c++ sürümüyle derlemek istiyorsanız constexpr kısmını inline ile değiştirip noexcept kısmını silin.
- Katılım
- 16 Tem 2019
- Konular
- 714
- Mesajlar
- 3,540
- Online süresi
- 6ay 20g
- Reaksiyon Skoru
- 2,107
- Altın Konu
- 34
- Başarım Puanı
- 309
- TM Yaşı
- 6 Yıl 9 Ay 9 Gün
- MmoLira
- 26,224
- DevLira
- 122
Paylaşım için teşekkürler.
24 saat içerisinde kanıt ekleyiniz.
24 saat içerisinde kanıt ekleyiniz.
- Katılım
- 6 Şub 2025
- Konular
- 726
- Mesajlar
- 1,044
- Online süresi
- 1ay 9g
- Reaksiyon Skoru
- 302
- Altın Konu
- 0
- Başarım Puanı
- 195
- TM Yaşı
- 1 Yıl 2 Ay 12 Gün
- MmoLira
- 15,064
- DevLira
- 9
Paylaşım için teşekkürler.
- Durum
- Üzgünüz bu konu cevaplar için kapatılmıştır...
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 14
- Görüntüleme
- 1K
- Cevaplar
- 6
- Görüntüleme
- 688
- Cevaplar
- 12
- Görüntüleme
- 1K








