Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
hepinize selamlar arkadaşlar bugün @BekirAKDEMIR'inde katkılarıyla tamamladığım sistem demeyelimde konuyu paylaşıcam daha önce hiç bir forumda görmedim bunu bi neno rare vardı ama o çalışıyor mu emin değilim her neyse uzatmadan konuya geçelim.
öncelikle game sourcemizi açalım ve aşağıdakilere uyalım
açılır constants.cpp
bulunur
[CODE title="constants.cpp"]const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =[/CODE]
değiştirilir
[CODE title="değişicek olan aşağıdaki sayılardır yanlış bişey değiştirmeyelim"] 100, 100, 100, 100, 100, 100, 100, 100, [/CODE]
sayıların 100 olma sebebi arttırma kağıdının hangi oranla efsunu ekleyeceğinden kaynaklı değiştirebilirsiniz size kalmış.
açılır char_item.cpp
bulunur
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 4)[/CODE]
bunu bulamayanlar 5 olarak aratsınlar
değiştirilir
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 6)[/CODE]
bu sizin normal efsun sayınıza göre değişir ve kutsama küresi olmadan ekler eğer kutsama küresi ile ekletmek istiyorsanız iş değişir (yıl olmuş 2020 kutsama küresi kullanan var mı onuda tartışmak lazım)
açılır item.h
bulunur
[CODE title="item.h"]void PutAttributeWithLevel(BYTE bLevel);[/CODE]
altına iki satır boşluk bırakılıp eklenir
[CODE title="item.h"] public:
void AddRareAttribute2(const int * aiAttrPercentTable = NULL);
protected:
void AddRareAttr(BYTE bApply, BYTE bLevel);
void PutRareAttribute(const int * aiAttrPercentTable);
void PutRareAttributeWithLevel(BYTE bLevel);[/CODE]
açılır item_attribute.cpp
bulunur
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()[/CODE]
komple değiştirilir
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()
{
int ret = 0;
for (DWORD dwIdx = ITEM_ATTRIBUTE_RARE_START; dwIdx < ITEM_ATTRIBUTE_RARE_END; dwIdx++)
{
if (m_aAttr[dwIdx].bType != 0)
ret++;
}
return ret;
}[/CODE]
yine aynı dosyada bulunur
[CODE title="item_attribute.cpp"] m_aAttr[i + 5].bType = 0;
m_aAttr[i + 5].sValue = 0;[/CODE]
ikiside değiştirilir
[CODE title="item_attribute.cpp"] m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].bType = 0;
m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].sValue = 0;[/CODE]
aranır
[CODE title="item_attribute.cpp"]if (count >= 2)[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]if (count >= ITEM_ATTRIBUTE_RARE_NUM)[/CODE]
aranır
[CODE title="item_attribute.cpp"]int pos = count + 5;[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]int pos = count + ITEM_ATTRIBUTE_RARE_START;[/CODE]
cpp nin en altına eklenir
[CODE title="item_attribute.cpp"]void CItem::AddRareAttribute2(const int * aiAttrPercentTable)
{
static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
{
40, 50, 10, 0, 0
};
if (aiAttrPercentTable == NULL)
aiAttrPercentTable = aiItemAddAttributePercent;
if (GetRareAttrCount() < MAX_RARE_ATTR_NUM)
PutRareAttribute(aiAttrPercentTable);
}
void CItem:
utRareAttribute(const int * aiAttrPercentTable)
{
int iAttrLevelPercent = number(1, 100);
int i;
for (i = 0; i < ITEM_ATTRIBUTE_MAX_LEVEL; ++i)
{
if (iAttrLevelPercent <= aiAttrPercentTable)
break;
iAttrLevelPercent -= aiAttrPercentTable;
}
PutRareAttributeWithLevel(i + 1);
}
void CItem:
utRareAttributeWithLevel(BYTE bLevel)
{
int iAttributeSet = GetAttributeSetIndex();
if (iAttributeSet < 0)
return;
if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)
return;
std::vector<int> avail;
int total = 0;
// ºÙÀÏ ¼ö ÀÖ´Â ¼Ó¼º ¹è¿À» ±¸Ãà
for (int i = 0; i < MAX_APPLY_NUM; ++i)
{
const TItemAttrTable & r = g_map_itemRare;
if (r.bMaxLevelBySet[iAttributeSet] && !HasRareAttr(i))
{
avail.push_back(i);
total += r.dwProb;
}
}
// ±¸ÃàµÈ ¹è¿·Î È®·ü °è»êÀ» ÅëÇØ ºÙÀÏ ¼Ó¼º ¼±Á¤
unsigned int prob = number(1, total);
int attr_idx = APPLY_NONE;
for (DWORD i = 0; i < avail.size(); ++i)
{
const TItemAttrTable & r = g_map_itemRare[avail];
if (prob <= r.dwProb)
{
attr_idx = avail;
break;
}
prob -= r.dwProb;
}
if (!attr_idx)
{
sys_err("Cannot put item rare attribute %d %d", iAttributeSet, bLevel);
return;
}
const TItemAttrTable & r = g_map_itemRare[attr_idx];
// Á¾·ùº° ¼Ó¼º ·¹º§ ÃÖ´ë°ª Á¦ÇÑ
if (bLevel > r.bMaxLevelBySet[iAttributeSet])
bLevel = r.bMaxLevelBySet[iAttributeSet];
AddRareAttr(attr_idx, bLevel);
}
void CItem::AddRareAttr(BYTE bApply, BYTE bLevel)
{
if (HasRareAttr(bApply))
return;
if (bLevel <= 0)
return;
int i = ITEM_ATTRIBUTE_RARE_START + GetRareAttrCount();
if (i == ITEM_ATTRIBUTE_RARE_END)
sys_err("item rare attribute overflow!");
else
{
const TItemAttrTable & r = g_map_itemRare[bApply];
long lVal = r.lValues[MIN(4, bLevel - 1)];
if (lVal)
SetForceAttribute(i, bApply, lVal);
}
}[/CODE]
item_manager.h açılır
aranır
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = 5;
const static int MAX_RARE_ATTR_NUM = 2;[/CODE]
değiştirilir
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = ITEM_ATTRIBUTE_NORM_NUM;
const static int MAX_RARE_ATTR_NUM = ITEM_ATTRIBUTE_RARE_NUM;[/CODE]
game ile işimiz bu kadar şimdi dbye geçelim
db/src cache.cpp açılır
aranır
komple değişilir
[CODE title="cache.cpp"]if (isAttr)
{
iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen,
", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"
", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, attrtype7, attrvalue7");
iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
", attrtype0=%d, attrvalue0=%d"
", attrtype1=%d, attrvalue1=%d"
", attrtype2=%d, attrvalue2=%d"
", attrtype3=%d, attrvalue3=%d"
", attrtype4=%d, attrvalue4=%d"
", attrtype5=%d, attrvalue5=%d"
", attrtype6=%d, attrvalue6=%d"
", attrtype7=%d, attrvalue7=%d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
}[/CODE]
clientmanager.cpp açılır
aranır
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6 "[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6, "
"attrtype7, attrvalue7 "[/CODE]
aranır
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6, "
"attrtype7, attrvalue7) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
aranır
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue);[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);[/CODE]
clientmanagerplayer.cpp açılır
aranır
değiştirilir
aranır
değiştirilir
common item_lenght.h açılır
aranır
değiştirilir
client source userinterface/gametype.h açılır
aranır
değiştirilir
navicat item.sql tablosuna eklenir
kanıt olarak
fileste rare efsunları ekli değildi o yüzden rare efsunlarıyla beraber çekemedim fakat gördüğünüz gibi 6 efsun sorunsuz çalışıyor rebootta kaybolma gibi sorunu yoktur herkese iyi forumlar.
daha önceden rare efsunlarıyla yaptığım kanıt
Laleci16 Kanıt
öncelikle game sourcemizi açalım ve aşağıdakilere uyalım
açılır constants.cpp
bulunur
[CODE title="constants.cpp"]const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =[/CODE]
değiştirilir
[CODE title="değişicek olan aşağıdaki sayılardır yanlış bişey değiştirmeyelim"] 100, 100, 100, 100, 100, 100, 100, 100, [/CODE]
sayıların 100 olma sebebi arttırma kağıdının hangi oranla efsunu ekleyeceğinden kaynaklı değiştirebilirsiniz size kalmış.
açılır char_item.cpp
bulunur
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 4)[/CODE]
bunu bulamayanlar 5 olarak aratsınlar
değiştirilir
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 6)[/CODE]
bu sizin normal efsun sayınıza göre değişir ve kutsama küresi olmadan ekler eğer kutsama küresi ile ekletmek istiyorsanız iş değişir (yıl olmuş 2020 kutsama küresi kullanan var mı onuda tartışmak lazım)
açılır item.h
bulunur
[CODE title="item.h"]void PutAttributeWithLevel(BYTE bLevel);[/CODE]
altına iki satır boşluk bırakılıp eklenir
[CODE title="item.h"] public:
void AddRareAttribute2(const int * aiAttrPercentTable = NULL);
protected:
void AddRareAttr(BYTE bApply, BYTE bLevel);
void PutRareAttribute(const int * aiAttrPercentTable);
void PutRareAttributeWithLevel(BYTE bLevel);[/CODE]
açılır item_attribute.cpp
bulunur
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()[/CODE]
komple değiştirilir
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()
{
int ret = 0;
for (DWORD dwIdx = ITEM_ATTRIBUTE_RARE_START; dwIdx < ITEM_ATTRIBUTE_RARE_END; dwIdx++)
{
if (m_aAttr[dwIdx].bType != 0)
ret++;
}
return ret;
}[/CODE]
yine aynı dosyada bulunur
[CODE title="item_attribute.cpp"] m_aAttr[i + 5].bType = 0;
m_aAttr[i + 5].sValue = 0;[/CODE]
ikiside değiştirilir
[CODE title="item_attribute.cpp"] m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].bType = 0;
m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].sValue = 0;[/CODE]
aranır
[CODE title="item_attribute.cpp"]if (count >= 2)[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]if (count >= ITEM_ATTRIBUTE_RARE_NUM)[/CODE]
aranır
[CODE title="item_attribute.cpp"]int pos = count + 5;[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]int pos = count + ITEM_ATTRIBUTE_RARE_START;[/CODE]
cpp nin en altına eklenir
[CODE title="item_attribute.cpp"]void CItem::AddRareAttribute2(const int * aiAttrPercentTable)
{
static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
{
40, 50, 10, 0, 0
};
if (aiAttrPercentTable == NULL)
aiAttrPercentTable = aiItemAddAttributePercent;
if (GetRareAttrCount() < MAX_RARE_ATTR_NUM)
PutRareAttribute(aiAttrPercentTable);
}
void CItem:
utRareAttribute(const int * aiAttrPercentTable){
int iAttrLevelPercent = number(1, 100);
int i;
for (i = 0; i < ITEM_ATTRIBUTE_MAX_LEVEL; ++i)
{
if (iAttrLevelPercent <= aiAttrPercentTable)
break;
iAttrLevelPercent -= aiAttrPercentTable;
}
PutRareAttributeWithLevel(i + 1);
}
void CItem:
utRareAttributeWithLevel(BYTE bLevel){
int iAttributeSet = GetAttributeSetIndex();
if (iAttributeSet < 0)
return;
if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)
return;
std::vector<int> avail;
int total = 0;
// ºÙÀÏ ¼ö ÀÖ´Â ¼Ó¼º ¹è¿À» ±¸Ãà
for (int i = 0; i < MAX_APPLY_NUM; ++i)
{
const TItemAttrTable & r = g_map_itemRare;
if (r.bMaxLevelBySet[iAttributeSet] && !HasRareAttr(i))
{
avail.push_back(i);
total += r.dwProb;
}
}
// ±¸ÃàµÈ ¹è¿·Î È®·ü °è»êÀ» ÅëÇØ ºÙÀÏ ¼Ó¼º ¼±Á¤
unsigned int prob = number(1, total);
int attr_idx = APPLY_NONE;
for (DWORD i = 0; i < avail.size(); ++i)
{
const TItemAttrTable & r = g_map_itemRare[avail];
if (prob <= r.dwProb)
{
attr_idx = avail;
break;
}
prob -= r.dwProb;
}
if (!attr_idx)
{
sys_err("Cannot put item rare attribute %d %d", iAttributeSet, bLevel);
return;
}
const TItemAttrTable & r = g_map_itemRare[attr_idx];
// Á¾·ùº° ¼Ó¼º ·¹º§ ÃÖ´ë°ª Á¦ÇÑ
if (bLevel > r.bMaxLevelBySet[iAttributeSet])
bLevel = r.bMaxLevelBySet[iAttributeSet];
AddRareAttr(attr_idx, bLevel);
}
void CItem::AddRareAttr(BYTE bApply, BYTE bLevel)
{
if (HasRareAttr(bApply))
return;
if (bLevel <= 0)
return;
int i = ITEM_ATTRIBUTE_RARE_START + GetRareAttrCount();
if (i == ITEM_ATTRIBUTE_RARE_END)
sys_err("item rare attribute overflow!");
else
{
const TItemAttrTable & r = g_map_itemRare[bApply];
long lVal = r.lValues[MIN(4, bLevel - 1)];
if (lVal)
SetForceAttribute(i, bApply, lVal);
}
}[/CODE]
item_manager.h açılır
aranır
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = 5;
const static int MAX_RARE_ATTR_NUM = 2;[/CODE]
değiştirilir
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = ITEM_ATTRIBUTE_NORM_NUM;
const static int MAX_RARE_ATTR_NUM = ITEM_ATTRIBUTE_RARE_NUM;[/CODE]
game ile işimiz bu kadar şimdi dbye geçelim
db/src cache.cpp açılır
aranır
Kod:
if (isAttr)
komple değişilir
[CODE title="cache.cpp"]if (isAttr)
{
iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen,
", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"
", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, attrtype7, attrvalue7");
iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
", attrtype0=%d, attrvalue0=%d"
", attrtype1=%d, attrvalue1=%d"
", attrtype2=%d, attrvalue2=%d"
", attrtype3=%d, attrvalue3=%d"
", attrtype4=%d, attrvalue4=%d"
", attrtype5=%d, attrvalue5=%d"
", attrtype6=%d, attrvalue6=%d"
", attrtype7=%d, attrvalue7=%d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
}[/CODE]
clientmanager.cpp açılır
aranır
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6 "[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6, "
"attrtype7, attrvalue7 "[/CODE]
aranır
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6, "
"attrtype7, attrvalue7) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
aranır
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue);[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);[/CODE]
clientmanagerplayer.cpp açılır
aranır
Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "
değiştirilir
Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "
aranır
Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "
değiştirilir
Kod:
attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "
common item_lenght.h açılır
aranır
Kod:
ITEM_ATTRIBUTE_MAX_NUM = 7,
değiştirilir
Kod:
ITEM_ATTRIBUTE_NORM_NUM = 6,
ITEM_ATTRIBUTE_RARE_NUM = 2,
ITEM_ATTRIBUTE_NORM_START = 0,
ITEM_ATTRIBUTE_NORM_END = ITEM_ATTRIBUTE_NORM_START + ITEM_ATTRIBUTE_NORM_NUM,
ITEM_ATTRIBUTE_RARE_START = ITEM_ATTRIBUTE_NORM_END,
ITEM_ATTRIBUTE_RARE_END = ITEM_ATTRIBUTE_RARE_START + ITEM_ATTRIBUTE_RARE_NUM,
ITEM_ATTRIBUTE_MAX_NUM = ITEM_ATTRIBUTE_RARE_END, // 8
client source userinterface/gametype.h açılır
aranır
Kod:
ITEM_ATTRIBUTE_SLOT_MAX_NUM
değiştirilir
Kod:
ITEM_ATTRIBUTE_SLOT_MAX_NUM = 8,
navicat item.sql tablosuna eklenir
Kod:
`attrtype7` tinyint(4) NOT NULL DEFAULT 0,
`attrvalue7` smallint(6) NOT NULL DEFAULT 0,
kanıt olarak
fileste rare efsunları ekli değildi o yüzden rare efsunlarıyla beraber çekemedim fakat gördüğünüz gibi 6 efsun sorunsuz çalışıyor rebootta kaybolma gibi sorunu yoktur herkese iyi forumlar.
daha önceden rare efsunlarıyla yaptığım kanıt
Laleci16 Kanıt
Ekli dosyalar
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Yararlı konu arayanlar vardıüşenmeyip yapacaklara başarılar
hepinize selamlar arkadaşlar bugün @BekirAKDEMIR'inde katkılarıyla tamamladığım sistem demeyelimde konuyu paylaşıcam daha önce hiç bir forumda görmedim bunu bi neno rare vardı ama o çalışıyor mu emin değilim her neyse uzatmadan konuya geçelim.
öncelikle game sourcemizi açalım ve aşağıdakilere uyalım
açılır constants.cpp
bulunur
[CODE title="constants.cpp"]const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =[/CODE]
değiştirilir
[CODE title="değişicek olan aşağıdaki sayılardır yanlış bişey değiştirmeyelim"] 100, 100, 100, 100, 100, 100, 100, 100, [/CODE]
sayıların 100 olma sebebi arttırma kağıdının hangi oranla efsunu ekleyeceğinden kaynaklı değiştirebilirsiniz size kalmış.
açılır char_item.cpp
bulunur
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 4)[/CODE]
bunu bulamayanlar 5 olarak aratsınlar
değiştirilir
[CODE title="char_item.cpp"]if (item2->GetAttributeCount() < 6)[/CODE]
bu sizin normal efsun sayınıza göre değişir ve kutsama küresi olmadan ekler eğer kutsama küresi ile ekletmek istiyorsanız iş değişir (yıl olmuş 2020 kutsama küresi kullanan var mı onuda tartışmak lazım)
açılır item.h
bulunur
[CODE title="item.h"]void PutAttributeWithLevel(BYTE bLevel);[/CODE]
altına iki satır boşluk bırakılıp eklenir
[CODE title="item.h"] public:
void AddRareAttribute2(const int * aiAttrPercentTable = NULL);
protected:
void AddRareAttr(BYTE bApply, BYTE bLevel);
void PutRareAttribute(const int * aiAttrPercentTable);
void PutRareAttributeWithLevel(BYTE bLevel);[/CODE]
açılır item_attribute.cpp
bulunur
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()[/CODE]
komple değiştirilir
[CODE title="item_attribute.cpp"]int CItem::GetRareAttrCount()
{
int ret = 0;
for (DWORD dwIdx = ITEM_ATTRIBUTE_RARE_START; dwIdx < ITEM_ATTRIBUTE_RARE_END; dwIdx++)
{
if (m_aAttr[dwIdx].bType != 0)
ret++;
}
return ret;
}[/CODE]
yine aynı dosyada bulunur
[CODE title="item_attribute.cpp"] m_aAttr[i + 5].bType = 0;
m_aAttr[i + 5].sValue = 0;[/CODE]
ikiside değiştirilir
[CODE title="item_attribute.cpp"] m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].bType = 0;
m_aAttr[i + ITEM_ATTRIBUTE_RARE_START].sValue = 0;[/CODE]
aranır
[CODE title="item_attribute.cpp"]if (count >= 2)[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]if (count >= ITEM_ATTRIBUTE_RARE_NUM)[/CODE]
aranır
[CODE title="item_attribute.cpp"]int pos = count + 5;[/CODE]
değiştirilir
[CODE title="item_attribute.cpp"]int pos = count + ITEM_ATTRIBUTE_RARE_START;[/CODE]
cpp nin en altına eklenir
[CODE title="item_attribute.cpp"]void CItem::AddRareAttribute2(const int * aiAttrPercentTable)
{
static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] =
{
40, 50, 10, 0, 0
};
if (aiAttrPercentTable == NULL)
aiAttrPercentTable = aiItemAddAttributePercent;
if (GetRareAttrCount() < MAX_RARE_ATTR_NUM)
PutRareAttribute(aiAttrPercentTable);
}
void CItem:utRareAttribute(const int * aiAttrPercentTable)
{
int iAttrLevelPercent = number(1, 100);
int i;
for (i = 0; i < ITEM_ATTRIBUTE_MAX_LEVEL; ++i)
{
if (iAttrLevelPercent <= aiAttrPercentTable)
break;
iAttrLevelPercent -= aiAttrPercentTable;
}
PutRareAttributeWithLevel(i + 1);
}
void CItem:utRareAttributeWithLevel(BYTE bLevel)
{
int iAttributeSet = GetAttributeSetIndex();
if (iAttributeSet < 0)
return;
if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)
return;
std::vector<int> avail;
int total = 0;
// ºÙÀÏ ¼ö ÀÖ´Â ¼Ó¼º ¹è¿À» ±¸Ãà
for (int i = 0; i < MAX_APPLY_NUM; ++i)
{
const TItemAttrTable & r = g_map_itemRare;
if (r.bMaxLevelBySet[iAttributeSet] && !HasRareAttr(i))
{
avail.push_back(i);
total += r.dwProb;
}
}
// ±¸ÃàµÈ ¹è¿·Î È®·ü °è»êÀ» ÅëÇØ ºÙÀÏ ¼Ó¼º ¼±Á¤
unsigned int prob = number(1, total);
int attr_idx = APPLY_NONE;
for (DWORD i = 0; i < avail.size(); ++i)
{
const TItemAttrTable & r = g_map_itemRare[avail];
if (prob <= r.dwProb)
{
attr_idx = avail;
break;
}
prob -= r.dwProb;
}
if (!attr_idx)
{
sys_err("Cannot put item rare attribute %d %d", iAttributeSet, bLevel);
return;
}
const TItemAttrTable & r = g_map_itemRare[attr_idx];
// Á¾·ùº° ¼Ó¼º ·¹º§ ÃÖ´ë°ª Á¦ÇÑ
if (bLevel > r.bMaxLevelBySet[iAttributeSet])
bLevel = r.bMaxLevelBySet[iAttributeSet];
AddRareAttr(attr_idx, bLevel);
}
void CItem::AddRareAttr(BYTE bApply, BYTE bLevel)
{
if (HasRareAttr(bApply))
return;
if (bLevel <= 0)
return;
int i = ITEM_ATTRIBUTE_RARE_START + GetRareAttrCount();
if (i == ITEM_ATTRIBUTE_RARE_END)
sys_err("item rare attribute overflow!");
else
{
const TItemAttrTable & r = g_map_itemRare[bApply];
long lVal = r.lValues[MIN(4, bLevel - 1)];
if (lVal)
SetForceAttribute(i, bApply, lVal);
}
}[/CODE]
item_manager.h açılır
aranır
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = 5;
const static int MAX_RARE_ATTR_NUM = 2;[/CODE]
değiştirilir
[CODE title="item_manager.h"] const static int MAX_NORM_ATTR_NUM = ITEM_ATTRIBUTE_NORM_NUM;
const static int MAX_RARE_ATTR_NUM = ITEM_ATTRIBUTE_RARE_NUM;[/CODE]
game ile işimiz bu kadar şimdi dbye geçelim
db/src cache.cpp açılır
aranır
Kod:if (isAttr)
komple değişilir
[CODE title="cache.cpp"]if (isAttr)
{
iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen,
", attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3"
", attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, attrtype7, attrvalue7");
iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
", %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
", attrtype0=%d, attrvalue0=%d"
", attrtype1=%d, attrvalue1=%d"
", attrtype2=%d, attrvalue2=%d"
", attrtype3=%d, attrvalue3=%d"
", attrtype4=%d, attrvalue4=%d"
", attrtype5=%d, attrvalue5=%d"
", attrtype6=%d, attrvalue6=%d"
", attrtype7=%d, attrvalue7=%d",
p->aAttr[0].bType, p->aAttr[0].sValue,
p->aAttr[1].bType, p->aAttr[1].sValue,
p->aAttr[2].bType, p->aAttr[2].sValue,
p->aAttr[3].bType, p->aAttr[3].sValue,
p->aAttr[4].bType, p->aAttr[4].sValue,
p->aAttr[5].bType, p->aAttr[5].sValue,
p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);
}[/CODE]
clientmanager.cpp açılır
aranır
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6 "[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]"attrtype6, attrvalue6, "
"attrtype7, attrvalue7 "[/CODE]
aranır
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"] "attrtype6, attrvalue6, "
"attrtype7, attrvalue7) "
"VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",[/CODE]
aranır
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue);[/CODE]
değiştirilir
[CODE title="clientmanager.cpp"]p->aAttr[6].bType, p->aAttr[6].sValue,
p->aAttr[7].bType, p->aAttr[7].sValue);[/CODE]
clientmanagerplayer.cpp açılır
aranır
Kod:attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "
değiştirilir
Kod:attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "
aranır
Kod:attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "
değiştirilir
Kod:attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,attrtype7,attrvalue7 "
common item_lenght.h açılır
aranır
Kod:ITEM_ATTRIBUTE_MAX_NUM = 7,
değiştirilir
Kod:ITEM_ATTRIBUTE_NORM_NUM = 6, ITEM_ATTRIBUTE_RARE_NUM = 2, ITEM_ATTRIBUTE_NORM_START = 0, ITEM_ATTRIBUTE_NORM_END = ITEM_ATTRIBUTE_NORM_START + ITEM_ATTRIBUTE_NORM_NUM, ITEM_ATTRIBUTE_RARE_START = ITEM_ATTRIBUTE_NORM_END, ITEM_ATTRIBUTE_RARE_END = ITEM_ATTRIBUTE_RARE_START + ITEM_ATTRIBUTE_RARE_NUM, ITEM_ATTRIBUTE_MAX_NUM = ITEM_ATTRIBUTE_RARE_END, // 8
client source userinterface/gametype.h açılır
aranır
Kod:ITEM_ATTRIBUTE_SLOT_MAX_NUM
değiştirilir
Kod:ITEM_ATTRIBUTE_SLOT_MAX_NUM = 8,
navicat item.sql tablosuna eklenir
Kod:`attrtype7` tinyint(4) NOT NULL DEFAULT 0, `attrvalue7` smallint(6) NOT NULL DEFAULT 0,
kanıt olarak
Ekli dosyayı görüntüle 28509
fileste rare efsunları ekli değildi o yüzden rare efsunlarıyla beraber çekemedim fakat gördüğünüz gibi 6 efsun sorunsuz çalışıyor rebootta kaybolma gibi sorunu yoktur herkese iyi forumlar.Ekli dosyayı görüntüle 28529
daha önceden rare efsunlarıyla yaptığım kanıt
Arayanlar vardı eline sağlık paylaşım için teşekkürler.
rica ederim yorumun için teşekkürler bende arıyordum baktım olmuyo yaptık bişeyler .dArayanlar vardı eline sağlık paylaşım için teşekkürler.
yorum için teşekkürlerPaylaşım için teşekkürler.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 4
- Görüntüleme
- 276
- Cevaplar
- 14
- Görüntüleme
- 640
- Cevaplar
- 11
- Görüntüleme
- 536
- Cevaplar
- 33
- Görüntüleme
- 2K
- Cevaplar
- 37
- Görüntüleme
- 2K
üşenmeyip yapacaklara başarılar