- Mesaj
- 1.507
- Çözümler
- 84
- Beğeni
- 6.869
- Puan
- 2.859
- Ticaret Puanı
- 0
Pet sistemi yazdım. Pet'e buff vermek için GetPoint kullanarak DEF ve STR değerlerini çekiyorum.Ancak çekilen değerler, "C" ekranında gösterilen değerlerle uyuşmuyor. Bunun sebebi, buff fonksiyonunda GetPoint(POINT_DEF_GRADE) ve GetPoint(POINT_ATT_GRADE) kullanılmasıdır.
Ve bu durum piyasadaki bir çok levelli pet sistemin bu şekilde. Bunun yerine, client source içerisindeki CPythonPlayer::__GetTotalAtk mantığını server tarafında da uygulayarak STR değerini doğru şekilde hesaplayabilir ve kullanabilirsiniz.
Kullanmak isteyen kendi pet sistemine uyarlayıp kullanabilir
Ve bu durum piyasadaki bir çok levelli pet sistemin bu şekilde. Bunun yerine, client source içerisindeki CPythonPlayer::__GetTotalAtk mantığını server tarafında da uygulayarak STR değerini doğru şekilde hesaplayabilir ve kullanabilirsiniz.
Kullanmak isteyen kendi pet sistemine uyarlayıp kullanabilir
pet_buff.cpp:
void CNewPet::GiveBuff()
{
if (!m_pkChar || !m_petItem)
return;
m_pkOwner->RemoveAffect(EPetConstants::PET_AFFECT_TYPE);
// ---- ATTACK (like client) ----
LPITEM weapon = m_pkOwner->GetWear(WEAR_WEAPON);
int weaponMin = 0, weaponMax = 0, weaponBonus = 0;
if (weapon && weapon->GetType() == ITEM_WEAPON)
{
weaponMin = weapon->GetValue(3);
weaponMax = weapon->GetValue(4);
weaponBonus = weapon->GetValue(5);
}
int raceStat = 0;
switch (m_pkOwner->GetJob())
{
case JOB_WARRIOR:
case JOB_SURA:
raceStat = m_pkOwner->GetPoint(POINT_ST);
break;
case JOB_ASSASSIN:
raceStat = m_pkOwner->GetPoint(POINT_DX);
break;
case JOB_SHAMAN:
raceStat = m_pkOwner->GetPoint(POINT_IQ);
break;
#ifdef ENABLE_WOLFMAN_CHARACTER
case JOB_WOLFMAN:
raceStat = m_pkOwner->GetPoint(POINT_DX);
break;
#endif
default:
raceStat = m_pkOwner->GetPoint(POINT_ST);
break;
}
int levelAtk = m_pkOwner->GetLevel() * 2;
int statAtk = (4 * m_pkOwner->GetPoint(POINT_ST) + 2 * raceStat) / 3;
int hitRateSrc = (m_pkOwner->GetPoint(POINT_DX) * 4 + m_pkOwner->GetLevel() * 2) / 6;
int hitRate = 100 * (MIN(90, hitRateSrc) + 210) / 300;
int weaponAtk = (((weaponMin + weaponMax) / 2) + weaponBonus) * 2;
int attValue = levelAtk + (statAtk + weaponAtk) * hitRate / 100;
attValue += m_pkOwner->GetPoint(POINT_ATT_GRADE_BONUS);
// -----------------------------------------------
int baseValues[3] =
{
m_pkOwner->GetMaxHP(),
m_pkOwner->GetPoint(POINT_CLIENT_DEF_GRADE),
attValue
};
// m_pkOwner->ChatPacket(CHAT_TYPE_INFO, "MaxHP:%d ,Def:%d, Str:%d", baseValues[0], baseValues[1], baseValues[2]);
// m_pkOwner->ChatPacket(CHAT_TYPE_INFO, "MaxHP:%d ,Def:%d, Str:%d", m_pkOwner->GetMaxHP(), m_pkOwner->GetPoint(POINT_DEF_GRADE), m_pkOwner->GetPoint(POINT_ATT_GRADE));
for (int i = 0; i < 3; ++i)
{
m_pkOwner->AddAffect(
EPetConstants::PET_AFFECT_TYPE,
aApplyInfo[petBonusType[i]].bPointType,
static_cast<int>(baseValues[i] * m_bonus[i] / 1000),
0,
INFINITE_AFFECT_DURATION,
0,
false
);
}
}