metin2 de iç itemlerinize eklediğin cevherlerin vermiş olduğu özellikler constants.cpp dosyasındaki aiAccessorySocketEffectivePct kısmındaki oranlara göre hesaplanır.
constants.cpp:
const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
{
0, 10, 20, 40
};
tabi teoride öyle ama pratikte pekte öyle çalışmıyor. Bu fix bu durumu düzeltmenize yarar.
Fixden Önce
Fixten Sonra
Fix;
item.cpp:
//Arat;
for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
if (m_pProto->aApplies.bType == APPLY_NONE)
continue;
long value = m_pProto->aApplies.lValue;
if (m_pProto->aApplies.bType == APPLY_SKILL)
{
m_pOwner->ApplyPoint(m_pProto->aApplies.bType, bAdd ? value : value ^ 0x00800000);
}
else
{
if (0 != accessoryGrade)
value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100);
m_pOwner->ApplyPoint(m_pProto->aApplies.bType, bAdd ? value : -value);
}
}
//Değiştir;
for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
const auto& apply = m_pProto->aApplies;
if (apply.bType == APPLY_NONE)
continue;
long value = apply.lValue;
if (apply.bType == APPLY_SKILL)
{
m_pOwner->ApplyPoint(apply.bType, bAdd ? value : value ^ 0x00800000);
}
else
{
if (accessoryGrade > 0)
{
long totalBonus = 0;
for (int j = 0; j < accessoryGrade; ++j)
{
totalBonus += MAX(1, value * aiAccessorySocketEffectivePct[j + 1] / 100);
}
value += totalBonus;
m_pOwner->ApplyPoint(apply.bType, bAdd ? value : -value);
}
}
}
uitooltip.py:
#Arat;
def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum):
ACCESSORY_SOCKET_MAX_SIZE = 3
cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE)
end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE)
affectType1, affectValue1 = item.GetAffect(0)
affectList1=[0, max(1, affectValue1*10/100), max(2, affectValue1*20/100), max(3, affectValue1*40/100)]
affectType2, affectValue2 = item.GetAffect(1)
affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)]
mtrlPos=0
mtrlList=[mtrlVnum]*cur+[player.METIN_SOCKET_TYPE_SILVER]*(end-cur)
for mtrl in mtrlList:
affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1]-affectList1[mtrlPos])
affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1]-affectList2[mtrlPos])
leftTime = 0
if cur == mtrlPos+1:
leftTime=metinSlot[2]
self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime)
mtrlPos+=1
#Değiştir;
def #DeğiştirsoryMetinSl#DeğiştiressoryMetinSlotInfo(self ACCESSORY_SOCKET_MAX_SIZE = 3
cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE)
end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE)
affectType1, affectValue1 = item.GetAffect(0)
affectType2, affectValue2 = item.GetAffect(1)
percentList = [0, 10, 20, 40]
affectList1=[0]
affectList2=[0]
for pct in percentList[1:]:
affectList1.append(max(1, affectValue1 * pct / 100))
affectList2.append(max(1, affectValue2 * pct / 100))
mtrlPos=0
mtrlList = [mtrlVnum] * cur + [player.METIN_SOCKET_TYPE_SILVER] * (end - cur)
for mtrl in mtrlList:
affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1])
affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1])
leftTime = 0
if cur == mtrlPos+1:
leftTime=metinSlot[2]
self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime)
mtrlPos+=1
constants.cpp:
const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
{
0, 10, 20, 40
};
tabi teoride öyle ama pratikte pekte öyle çalışmıyor. Bu fix bu durumu düzeltmenize yarar.
Fixden Önce
Fixten Sonra
Fix;
item.cpp:
//Arat;
for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
if (m_pProto->aApplies.bType == APPLY_NONE)
continue;
long value = m_pProto->aApplies.lValue;
if (m_pProto->aApplies.bType == APPLY_SKILL)
{
m_pOwner->ApplyPoint(m_pProto->aApplies.bType, bAdd ? value : value ^ 0x00800000);
}
else
{
if (0 != accessoryGrade)
value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100);
m_pOwner->ApplyPoint(m_pProto->aApplies.bType, bAdd ? value : -value);
}
}
//Değiştir;
for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
const auto& apply = m_pProto->aApplies;
if (apply.bType == APPLY_NONE)
continue;
long value = apply.lValue;
if (apply.bType == APPLY_SKILL)
{
m_pOwner->ApplyPoint(apply.bType, bAdd ? value : value ^ 0x00800000);
}
else
{
if (accessoryGrade > 0)
{
long totalBonus = 0;
for (int j = 0; j < accessoryGrade; ++j)
{
totalBonus += MAX(1, value * aiAccessorySocketEffectivePct[j + 1] / 100);
}
value += totalBonus;
m_pOwner->ApplyPoint(apply.bType, bAdd ? value : -value);
}
}
}
uitooltip.py:
#Arat;
def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum):
ACCESSORY_SOCKET_MAX_SIZE = 3
cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE)
end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE)
affectType1, affectValue1 = item.GetAffect(0)
affectList1=[0, max(1, affectValue1*10/100), max(2, affectValue1*20/100), max(3, affectValue1*40/100)]
affectType2, affectValue2 = item.GetAffect(1)
affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)]
mtrlPos=0
mtrlList=[mtrlVnum]*cur+[player.METIN_SOCKET_TYPE_SILVER]*(end-cur)
for mtrl in mtrlList:
affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1]-affectList1[mtrlPos])
affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1]-affectList2[mtrlPos])
leftTime = 0
if cur == mtrlPos+1:
leftTime=metinSlot[2]
self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime)
mtrlPos+=1
#Değiştir;
def #DeğiştirsoryMetinSl#DeğiştiressoryMetinSlotInfo(self ACCESSORY_SOCKET_MAX_SIZE = 3
cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE)
end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE)
affectType1, affectValue1 = item.GetAffect(0)
affectType2, affectValue2 = item.GetAffect(1)
percentList = [0, 10, 20, 40]
affectList1=[0]
affectList2=[0]
for pct in percentList[1:]:
affectList1.append(max(1, affectValue1 * pct / 100))
affectList2.append(max(1, affectValue2 * pct / 100))
mtrlPos=0
mtrlList = [mtrlVnum] * cur + [player.METIN_SOCKET_TYPE_SILVER] * (end - cur)
for mtrl in mtrlList:
affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1])
affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1])
leftTime = 0
if cur == mtrlPos+1:
leftTime=metinSlot[2]
self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime)
mtrlPos+=1