Bónusz érték C++

Indította TheSLESH, 2018-08-27, 12:12:24

2018-08-27, 12:12:24 Utolsó szerkesztés: 2018-08-27, 12:36:05 Szerző: TheSLESH
Sziasztok, csináltam egy tárgyat, ami egy fegyverhez ad bónuszokat.
Na most, a tárgy tökéletesen működik, ráhúzom a tárgyra, belerakja a bónuszt, jelen esetben 15% szörny elleni erőt, írja is.
Viszont amikor felveszem, csak 2%-t kap a karakterem, csak ennél a tárgynál, alap esetben normálisan megadja  a bónuszokat.

SetForceAttribute-ra gondoltam hogy hibásan alkalmazom, de akkor nem lenne jó a kiirás sem szerintem.
Így használom:
(SetForceAttribute(HANYADIKBONUSZ,BONUSZSZAMA,ERTEK)

item2->SetForceAttribute(2,63,15);
item2->AddSocket();
item2->UpdatePacket();
item2->Save();
ChatPacket(CHAT_TYPE_INFO, "Hozzaadtal 15 szorny elleni erot");
item->GetID();
item->GetOriginalVnum();
item->SetCount(item->GetCount() - 1);


Üzenet összefésülés: 2018-08-27, 12:36:05

UI: Kipróbáltam TP-vel is, 3000 helyett 400-at ad.


item2->SetForceAttribute(3,1,3000);
item2->AddSocket();
item2->UpdatePacket();
item2->Save();
ChatPacket(CHAT_TYPE_INFO, "Hozzaadtal 3000TP-t.");
item->GetID();
item->GetOriginalVnum();
item->SetCount(item->GetCount() - 1);
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

A ChatPacket-ed alá csinálj még1-et amivel a tárgy bonijait logoltatod ki, és meglátod h a tárgyban van rosszul az érték v máshol van a gebasz.

Köszönöm a tippet!
A Tárgy bónuszai jók, csak a karakterhez adja hozzá rosszul valamiért.
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Akkor a tárgyfelvételi résznél keresgélj ahol a bónuszokat csapkodja fel a karira.

Jelenleg pántal próbálkozom, lehet az a gond.

Nézegettem, 1% bónusz (bármiből) ténylegesen ad 1%-ot.
50%-nál viszont csak 8%-ot, (Bármiből) Hát, azt nem tudom merre felé keressem, örülök, hogy ezt össze tudtam hozni, tudnál esetleg segíteni, hogy hol keressem a hibát? Vagyis, ha Pántra az álltalam írt "bónuszoló"-val teszek bónuszt, akkor jön elő a hiba. Fegyvernél stb működik.
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.


2018-08-27, 14:44:38 #6 Utolsó szerkesztés: 2018-08-27, 14:55:02 Szerző: TheSLESH
Megnéztem,de nem találtam hibát.

A Hibámról készítettem egy GIF-et, hátha valakinek segít, a megoldáshoz vezető út megtalálásában.

https://gph.is/2Pd0z7N

(Bonusz ablak nem magyar, még csak bevan dobva hogy lássam a bónuszokat)


Üzenet összefésülés: 2018-08-27, 14:50:35

Közben kezdem sejteni, hogy valami olyasmi lehet, hogy az abszorbciós baromság miatt, csak bizonyos %-át számolja a pánthoz. Csakhogy nekem nincs abszorbcióm, mert kicsit más módon oldottam meg a pántokat, nem a megszokott bónuszolással.



Üzenet összefésülés: 2018-08-27, 14:52:42

Pati, te szemed jobban átlátja a dolgokat, látod ebben, hogy melyik részt kellene kiszednem? Nem akarok 50x fordítani, hogy mikor jó:/

void CHARACTER::OpenSash(bool bCombination)
{
if (isSashOpened(bCombination))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The sash window it's already opened."));
return;
}

if (bCombination)
{
if (m_bSashAbsorption)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the sash absorption window."));
return;
}

m_bSashCombination = true;
}
else
{
if (m_bSashCombination)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the sash combine window."));
return;
}

m_bSashAbsorption = true;
}

TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_GC_OPEN;
sPacket.bWindow = bCombination;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketSash));

ClearSashMaterials();
}

void CHARACTER::CloseSash()
{
if ((!m_bSashCombination) && (!m_bSashAbsorption))
return;

bool bWindow = (m_bSashCombination == true ? true : false);

TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_GC_CLOSE;
sPacket.bWindow = bWindow;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketSash));

if (bWindow)
m_bSashCombination = false;
else
m_bSashAbsorption = false;

ClearSashMaterials();
}

void CHARACTER::ClearSashMaterials()
{
LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();
for (int i = 0; i < SASH_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial[i])
continue;

pkItemMaterial[i]->Lock(false);
pkItemMaterial[i] = NULL;
}
}

bool CHARACTER::SashIsSameGrade(long lGrade)
{
LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();
if (!pkItemMaterial[0])
return false;

bool bReturn = (pkItemMaterial[0]->GetValue(SASH_GRADE_VALUE_FIELD) == lGrade ? true : false);
return bReturn;
}

DWORD CHARACTER::GetSashCombinePrice(long lGrade)
{
DWORD dwPrice = 0;
switch (lGrade)
{
case 2:
{
dwPrice = SASH_GRADE_2_PRICE;
}
break;
case 3:
{
dwPrice = SASH_GRADE_3_PRICE;
}
break;
case 4:
{
dwPrice = SASH_GRADE_4_PRICE;
}
break;
default:
{
dwPrice = SASH_GRADE_1_PRICE;
}
break;
}

return dwPrice;
}

BYTE CHARACTER::CheckEmptyMaterialSlot()
{
LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();
for (int i = 0; i < SASH_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial[i])
return i;
}

return 255;
}

void CHARACTER::GetSashCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs)
{
LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();

if (m_bSashCombination)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
long lVal = pkItemMaterial[0]->GetValue(SASH_GRADE_VALUE_FIELD);
if (lVal == 4)
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
dwMinAbs = pkItemMaterial[0]->GetSocket(SASH_ABSORPTION_SOCKET);
DWORD dwMaxAbsCalc = (dwMinAbs + SASH_GRADE_4_ABS_RANGE > SASH_GRADE_4_ABS_MAX ? SASH_GRADE_4_ABS_MAX : (dwMinAbs + SASH_GRADE_4_ABS_RANGE));
dwMaxAbs = dwMaxAbsCalc;
}
else
{
DWORD dwMaskVnum = pkItemMaterial[0]->GetOriginalVnum();
TItemTable * pTable = ITEM_MANAGER::instance().GetTable(dwMaskVnum + 1);
if (pTable)
dwMaskVnum += 1;

dwItemVnum = dwMaskVnum;
switch (lVal)
{
case 2:
{
dwMinAbs = SASH_GRADE_3_ABS;
dwMaxAbs = SASH_GRADE_3_ABS;
}
break;
case 3:
{
dwMinAbs = SASH_GRADE_4_ABS_MIN;
dwMaxAbs = SASH_GRADE_4_ABS_MAX_COMB;
}
break;
default:
{
dwMinAbs = SASH_GRADE_2_ABS;
dwMaxAbs = SASH_GRADE_2_ABS;
}
break;
}
}
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
else
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
dwMinAbs = pkItemMaterial[0]->GetSocket(SASH_ABSORPTION_SOCKET);
dwMaxAbs = dwMinAbs;
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
}

void CHARACTER::AddSashMaterial(TItemPos tPos, BYTE bPos)
{
if (bPos >= SASH_WINDOW_MAX_MATERIALS)
{
if (bPos == 255)
{
bPos = CheckEmptyMaterialSlot();
if (bPos >= SASH_WINDOW_MAX_MATERIALS)
return;
}
else
return;
}

LPITEM pkItem = GetItem(tPos);
if (!pkItem)
return;
else if ((pkItem->GetCell() >= INVENTORY_MAX_NUM) || (pkItem->IsEquipped()) || (tPos.IsBeltInventoryPosition()) || (pkItem->IsDragonSoul()))
return;
else if ((pkItem->GetType() != ITEM_COSTUME) && (m_bSashCombination))
return;
else if ((pkItem->GetType() != ITEM_COSTUME) && (bPos == 0) && (m_bSashAbsorption))
return;
else if (pkItem->isLocked())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't add locked items."));
return;
}
#ifdef __SOULBINDING_SYSTEM__
else if ((pkItem->IsBind()) || (pkItem->IsUntilBind()))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't add binded items."));
return;
}
#endif
else if ((m_bSashCombination) && (bPos == 1) && (!SashIsSameGrade(pkItem->GetValue(SASH_GRADE_VALUE_FIELD))))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can combine just sashes of same grade."));
return;
}
else if ((m_bSashCombination) && (pkItem->GetSocket(SASH_ABSORPTION_SOCKET) >= SASH_GRADE_4_ABS_MAX))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This sash got already maximum absorption chance."));
return;
}
else if ((bPos == 1) && (m_bSashAbsorption))
{
if ((pkItem->GetType() != ITEM_WEAPON) && (pkItem->GetType() != ITEM_ARMOR))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can absorb just the bonuses from armors and weapons."));
return;
}
else if ((pkItem->GetType() == ITEM_ARMOR) && (pkItem->GetSubType() != ARMOR_BODY))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can absorb just the bonuses from armors and weapons."));
return;
}
}
else if ((pkItem->GetSubType() != COSTUME_SASH) && (m_bSashCombination))
return;
else if ((pkItem->GetSubType() != COSTUME_SASH) && (bPos == 0) && (m_bSashAbsorption))
return;
else if ((pkItem->GetSocket(SASH_ABSORBED_SOCKET) > 0) && (bPos == 0) && (m_bSashAbsorption))
return;

LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();
if ((bPos == 1) && (!pkItemMaterial[0]))
return;

if (pkItemMaterial[bPos])
return;

pkItemMaterial[bPos] = pkItem;
pkItemMaterial[bPos]->Lock(true);

DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetSashCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_GC_ADDED;
sPacket.bWindow = m_bSashCombination == true ? true : false;
sPacket.dwPrice = GetSashCombinePrice(pkItem->GetValue(SASH_GRADE_VALUE_FIELD));
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = dwItemVnum;
sPacket.dwMinAbs = dwMinAbs;
sPacket.dwMaxAbs = dwMaxAbs;
GetDesc()->Packet(&sPacket, sizeof(TPacketSash));
}

void CHARACTER::RemoveSashMaterial(BYTE bPos)
{
if (bPos >= SASH_WINDOW_MAX_MATERIALS)
return;

LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();

DWORD dwPrice = 0;

if (bPos == 1)
{
if (pkItemMaterial[bPos])
{
pkItemMaterial[bPos]->Lock(false);
pkItemMaterial[bPos] = NULL;
}

if (pkItemMaterial[0])
dwPrice = GetSashCombinePrice(pkItemMaterial[0]->GetValue(SASH_GRADE_VALUE_FIELD));
}
else
ClearSashMaterials();

TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_GC_REMOVED;
sPacket.bWindow = m_bSashCombination == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketSash));
}

BYTE CHARACTER::CanRefineSashMaterials()
{
BYTE bReturn = 0;
LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();
if (m_bSashCombination)
{
for (int i = 0; i < SASH_WINDOW_MAX_MATERIALS; ++i)
{
if (pkItemMaterial[i])
{
if ((pkItemMaterial[i]->GetType() == ITEM_COSTUME) && (pkItemMaterial[i]->GetSubType() == COSTUME_SASH))
bReturn = 1;
else
{
bReturn = 0;
break;
}
}
else
{
bReturn = 0;
break;
}
}
}
else if (m_bSashAbsorption)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
if ((pkItemMaterial[0]->GetType() == ITEM_COSTUME) && (pkItemMaterial[0]->GetSubType() == COSTUME_SASH))
bReturn = 2;
else
bReturn = 0;

if ((pkItemMaterial[1]->GetType() == ITEM_WEAPON) || ((pkItemMaterial[1]->GetType() == ITEM_ARMOR) && (pkItemMaterial[1]->GetSubType() == ARMOR_BODY)))
bReturn = 2;
else
bReturn = 0;

if (pkItemMaterial[0]->GetSocket(SASH_ABSORBED_SOCKET) > 0)
bReturn = 0;
}
else
bReturn = 0;
}

return bReturn;
}

void CHARACTER::RefineSashMaterials()
{
BYTE bCan = CanRefineSashMaterials();
if (bCan == 0)
return;

LPITEM * pkItemMaterial;
pkItemMaterial = GetSashMaterials();

DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetSashCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);
DWORD dwPrice = GetSashCombinePrice(pkItemMaterial[0]->GetValue(SASH_GRADE_VALUE_FIELD));

if (bCan == 1)
{
int iSuccessChance = 0;
long lVal = pkItemMaterial[0]->GetValue(SASH_GRADE_VALUE_FIELD);
switch (lVal)
{
case 2:
{
iSuccessChance = SASH_COMBINE_GRADE_2;
}
break;
case 3:
{
iSuccessChance = SASH_COMBINE_GRADE_3;
}
break;
case 4:
{
iSuccessChance = SASH_COMBINE_GRADE_4;
}
break;
default:
{
iSuccessChance = SASH_COMBINE_GRADE_1;
}
break;
}

if (GetGold() < dwPrice)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You don't have enough Yang."));
return;
}

int iChance = number(1, 100);
bool bSucces = (iChance <= iSuccessChance ? true : false);
if (bSucces)
{
LPITEM pkItem = ITEM_MANAGER::instance().CreateItem(dwItemVnum, 1, 0, false);
if (!pkItem)
{
sys_err("%d can't be created.", dwItemVnum);
return;
}

ITEM_MANAGER::CopyAllAttrTo(pkItemMaterial[0], pkItem);
LogManager::instance().ItemLog(this, pkItem, "COMBINE SUCCESS", pkItem->GetName());
DWORD dwAbs = (dwMinAbs == dwMaxAbs ? dwMinAbs : number(dwMinAbs + 1, dwMaxAbs));
pkItem->SetSocket(SASH_ABSORPTION_SOCKET, dwAbs);
pkItem->SetSocket(SASH_ABSORBED_SOCKET, pkItemMaterial[0]->GetSocket(SASH_ABSORBED_SOCKET));

PointChange(POINT_GOLD, -dwPrice);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);

WORD wCell = pkItemMaterial[0]->GetCell();
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[0], "COMBINE (REFINE SUCCESS)");
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "COMBINE (REFINE SUCCESS)");

pkItem->AddToCharacter(this, TItemPos(INVENTORY, wCell));
ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
pkItem->AttrLog();

if (lVal == 4)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("New absorption rate: %d%"), dwAbs);
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Success."));

EffectPacket(SE_EFFECT_SASH_SUCCEDED);
LogManager::instance().SashLog(GetPlayerID(), GetX(), GetY(), dwItemVnum, pkItem->GetID(), 1, dwAbs, 1);

ClearSashMaterials();
}
else
{
PointChange(POINT_GOLD, -dwPrice);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);

ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "COMBINE (REFINE FAIL)");

if (lVal == 4)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("New absorption rate: %d%"), pkItemMaterial[0]->GetSocket(SASH_ABSORPTION_SOCKET));
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Failed."));

LogManager::instance().SashLog(GetPlayerID(), GetX(), GetY(), dwItemVnum, 0, 0, 0, 0);

pkItemMaterial[1] = NULL;
}

TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_CG_REFINED;
sPacket.bWindow = m_bSashCombination == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
if (bSucces)
sPacket.dwMaxAbs = 100;
else
sPacket.dwMaxAbs = 0;

GetDesc()->Packet(&sPacket, sizeof(TPacketSash));
}
else
{
pkItemMaterial[1]->CopyAttributeTo(pkItemMaterial[0]);
LogManager::instance().ItemLog(this, pkItemMaterial[0], "ABSORB (REFINE SUCCESS)", pkItemMaterial[0]->GetName());
pkItemMaterial[0]->SetSocket(SASH_ABSORBED_SOCKET, pkItemMaterial[1]->GetOriginalVnum());
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
{
if (pkItemMaterial[0]->GetAttributeValue(i) < 0)
pkItemMaterial[0]->SetForceAttribute(i, pkItemMaterial[0]->GetAttributeType(i), 0);
}

ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "ABSORBED (REFINE SUCCESS)");

ITEM_MANAGER::instance().FlushDelayedSave(pkItemMaterial[0]);
pkItemMaterial[0]->AttrLog();

ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Success."));

ClearSashMaterials();

TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;

TPacketSash sPacket;
sPacket.header = HEADER_GC_SASH;
sPacket.subheader = SASH_SUBHEADER_CG_REFINED;
sPacket.bWindow = m_bSashCombination == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = 255;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 1;
GetDesc()->Packet(&sPacket, sizeof(TPacketSash));
}
}

bool CHARACTER::CleanSashAttr(LPITEM pkItem, LPITEM pkTarget)
{
if (!CanHandleItem())
return false;
else if ((!pkItem) || (!pkTarget))
return false;
else if ((pkTarget->GetType() != ITEM_COSTUME) && (pkTarget->GetSubType() != COSTUME_SASH))
return false;

if (pkTarget->GetSocket(SASH_ABSORBED_SOCKET) <= 0)
return false;

pkTarget->SetSocket(SASH_ABSORBED_SOCKET, 0);
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
pkTarget->SetForceAttribute(i, 0, 0);

pkItem->SetCount(pkItem->GetCount() - 1);
LogManager::instance().ItemLog(this, pkTarget, "USE_DETACHMENT (CLEAN ATTR)", pkTarget->GetName());
return true;
}


Üzenet összefésülés: 2018-08-27, 14:55:02

vagy csak a " sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
átírom 100-ra, és problem solved?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Nem.
absorption_chance = items[0]->GetSocket(1);
type1 = items[1]->GetAttributeType(0);
value1 = items[1]->GetAttributeValue(0) * absorption_chance / 100;
type2 = items[1]->GetAttributeType(1);
value2 = items[1]->GetAttributeValue(1) * absorption_chance / 100;
type3 = items[1]->GetAttributeType(2);
value3 = items[1]->GetAttributeValue(2) * absorption_chance / 100;
type4 = items[1]->GetAttributeType(3);
value4 = items[1]->GetAttributeValue(3) * absorption_chance / 100;
type5 = items[1]->GetAttributeType(4);
value5 = items[1]->GetAttributeValue(4) * absorption_chance / 100;
type6 = items[1]->GetAttributeType(5);
value6 = items[1]->GetAttributeValue(5) * absorption_chance / 100;
type7 = items[1]->GetAttributeType(6);
value7 = items[1]->GetAttributeValue(6) * absorption_chance / 100;

Nem felvételnél számolja a %-ot, hanem eleve a bónusz x%-át teszi a pántba. Legalábbis az én pánt rendszerem, de sztem mind így működik.

Enyém nem, vagy nemtudom. Mivel az adatbázisban az szerepel, hogy " 63 50" vagyis szörny elleni erő 50, viszont a karakteren csak 8%-ot kap meg, de linkeltem a kódot, ránézel?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Nincs benne az abszorpciós kód, de akk lehet h nálad úgy van, ami elég érdekes.

Nincs acce.cpp stb ebben a rendszerben, hanem a tobbi fajlba van benne, ez a resz a char.cpp-bol van.

Üzenet összefésülés: 2018-08-27, 16:01:57

https://forum.turkmmo.com/konu/3514512-c-yeni-official-scaleli-kusak-sistemi/

Ezt hasznalom, esetleg ha időd engedi, megnéznéd hogy hol van ez a rész?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Kövesd vissza pythonból és meglesz. ::) :o

Ide jutottam, az létezik, hogy ez lenne az?


if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_SASH) && (GetSocket(SASH_ABSORBED_SOCKET)))
{
TItemTable * pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(SASH_ABSORBED_SOCKET));
if (pkItemAbsorbed)
{
if ((pkItemAbsorbed->bType == ITEM_ARMOR) && (pkItemAbsorbed->bSubType == ARMOR_BODY))
{
long lDefGrade = pkItemAbsorbed->alValues[1] + long(pkItemAbsorbed->alValues[5] * 2);
double dValue = lDefGrade * GetSocket(SASH_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefGrade = (long) dValue;
if ((pkItemAbsorbed->alValues[1] > 0) && (lDefGrade <= 0) || (pkItemAbsorbed->alValues[5] > 0) && (lDefGrade < 1))
lDefGrade += 1;
else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[5] > 0))
lDefGrade += 1;

m_pOwner->ApplyPoint(APPLY_DEF_GRADE_BONUS, bAdd ? lDefGrade : -lDefGrade);

long lDefMagicBonus = pkItemAbsorbed->alValues[0];
dValue = lDefMagicBonus * GetSocket(SASH_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefMagicBonus = (long) dValue;
if ((pkItemAbsorbed->alValues[0] > 0) && (lDefMagicBonus < 1))
lDefMagicBonus += 1;
else if (pkItemAbsorbed->alValues[0] > 0)
lDefMagicBonus += 1;

m_pOwner->ApplyPoint(APPLY_MAGIC_DEF_GRADE, bAdd ? lDefMagicBonus : -lDefMagicBonus);
}
else if (pkItemAbsorbed->bType == ITEM_WEAPON)
{
long lAttGrade = pkItemAbsorbed->alValues[4] + pkItemAbsorbed->alValues[5];
if (pkItemAbsorbed->alValues[3] > pkItemAbsorbed->alValues[4])
lAttGrade = pkItemAbsorbed->alValues[3] + pkItemAbsorbed->alValues[5];

double dValue = lAttGrade * GetSocket(SASH_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lAttGrade = (long) dValue;
if (((pkItemAbsorbed->alValues[3] > 0) && (lAttGrade < 1)) || ((pkItemAbsorbed->alValues[4] > 0) && (lAttGrade < 1)))
lAttGrade += 1;
else if ((pkItemAbsorbed->alValues[3] > 0) || (pkItemAbsorbed->alValues[4] > 0))
lAttGrade += 1;

m_pOwner->ApplyPoint(APPLY_ATT_GRADE_BONUS, bAdd ? lAttGrade : -lAttGrade);

long lAttMagicGrade = pkItemAbsorbed->alValues[2] + pkItemAbsorbed->alValues[5];
if (pkItemAbsorbed->alValues[1] > pkItemAbsorbed->alValues[2])
lAttMagicGrade = pkItemAbsorbed->alValues[1] + pkItemAbsorbed->alValues[5];

dValue = lAttMagicGrade * GetSocket(SASH_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lAttMagicGrade = (long) dValue;
if (((pkItemAbsorbed->alValues[1] > 0) && (lAttMagicGrade < 1)) || ((pkItemAbsorbed->alValues[2] > 0) && (lAttMagicGrade < 1)))
lAttMagicGrade += 1;
else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[2] > 0))
lAttMagicGrade += 1;

m_pOwner->ApplyPoint(APPLY_MAGIC_ATT_GRADE, bAdd ? lAttMagicGrade : -lAttMagicGrade);
}
}
}
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Nemtom pontosan mi akar lenni de pánthoz van köze :D

2018-08-27, 17:24:02 #14 Utolsó szerkesztés: 2018-08-27, 17:48:37 Szerző: TheSLESH
Kikommenteltem, de még mindig nem okés, akkor keresem tovább, azért köszi.

Üzenet összefésülés: 2018-08-27, 17:48:37

Sikerült végül, köszönöm pati nagyon! Pythonból visszavezetve meglett.
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.