- Katılım
- 8 Haz 2024
- Konular
- 85
- Mesajlar
- 526
- Online süresi
- 2mo 12d
- Reaksiyon Skoru
- 407
- Altın Konu
- 0
- Başarım Puanı
- 121
- MmoLira
- 3,278
- DevLira
- 189
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ 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
- 715
- Mesajlar
- 3,551
- Çözüm
- 47
- Online süresi
- 6mo 20d
- Reaksiyon Skoru
- 2,109
- Altın Konu
- 34
- Başarım Puanı
- 309
- MmoLira
- 19,556
- 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
- 728
- Mesajlar
- 1,046
- Çözüm
- 1
- Reaksiyon Skoru
- 302
- Altın Konu
- 0
- Başarım Puanı
- 195
- MmoLira
- 15,364
- 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 : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 20
- Görüntüleme
- 779
- Cevaplar
- 3
- Görüntüleme
- 383
- Cevaplar
- 12
- Görüntüleme
- 550
- Cevaplar
- 9
- Görüntüleme
- 430
- Cevaplar
- 14
- Görüntüleme
- 1K





