Скорость бега (Armor Penalty)
final int penalty = getActiveChar().getExpertiseArmorPenalty();
if (penalty > 0)
baseValue *= Math.pow(0.84, penalty);
Уклонение (Armor Penalty)
final int penalty = getActiveChar().getExpertiseArmorPenalty();
if (penalty > 0)
val -= (2 * penalty);
Точность (Weapon Penalty)
if (getActiveChar().getExpertiseWeaponPenalty())
val -= 20;
Шанс успеха магии (Weapon Penalty)
if (attacker instanceof Player && ((Player) attacker).getExpertiseWeaponPenalty())
rate += 6000;
@Override
public int getMAtkSpd()
{
double base = 333;
if (_actor.isMounted())
{
if (_actor.checkFoodState(_actor.getPetTemplate().getHungryLimit()))
base /= 2;
}
final int penalty = _actor.getArmorGradePenalty();
if (penalty > 0)
base *= Math.pow(0.84, penalty);
return (int) calcStat(Stats.MAGIC_ATTACK_SPEED, base, null, null);
}
<skill id="4267" levels="1" name="Grade Penalty">
<!-- A penalty applied when the grade of equipment one is wearing is not appropriate for one's level. -->
<table name="#rate">0.22 0.19 0.16 0.13 0.1</table>
<set name="target" val="TARGET_SELF"/>
<set name="skillType" val="DEBUFF"/>
<set name="operateType" val="OP_PASSIVE"/>
<set name="castRange" val="-1"/>
<set name="effectRange" val="-1"/>
<for>
<mul order="0x30" stat="pAtkSpd" val="#rate"/>
<mul order="0x30" stat="mAtkSpd" val="#rate"/>
<mul order="0x30" stat="rEvas" val="#rate"/>
<mul order="0x30" stat="rExp" val="#rate"/>
<mul order="0x30" stat="runSpd" val="#rate"/>
<mul order="0x30" stat="regHp" val="#rate"/>
<mul order="0x30" stat="regCp" val="#rate"/>
<mul order="0x30" stat="regMp" val="#rate"/>
<sub order="0x40" stat="accCombat" val="20"/>
</for>
</skill>
Существует градация штрафа (например на оружие действует только точность), а вот армор зависит от того сколько одето вещей на персонаже. (максимальный штраф за 5 вещей / 2), но это то как работает на С4, что там дальше и как менялось увы информации нет.Ну я смотрю, если умение GRADE_PENALTY = 4267 есть только 1го уровня, значит разницы в грейде не существует, а именно, если разрешено носить D, а одел S даст штраф одинаковый как будь-то одел A или B или C. Тогда логичнее сделать пассивное умение 4267 как положено, что-бы отнимало характеристики, так оно будет оправданно, уменьшит разброс по коду в ядре разных модификаторов, и перенесет учет негативных характеристик от данного штрафа в ядро обработки всех характеристик. Так и код чище, и намного эффективнее как по мне, и придает тогда смысл умению
про точность точно не помню (значение) но да, на С4 птс работает так.То есть ты хочешь сказать, что если я одену на 1 уровне S лук, у меня просто отнимется 20 точности?
Ну то что я нашел, скорость атаки так же срезается. (там не 4 уровень максимальный, а 5 (4 потому что с 0 считаем).Хммм.. ну я такое вот нашел, штраф от оружия, там уровень не важен, просто если оружие выше грейда разрешенного, то -20 точности и уменьшает фейл магией. А вот для брони там для каждой части добавляется к 1 уровню, к примеру если только перчатки большего грейда, то будет уровень 1, если цельная броня, то +2, так же для бижи по +1, но максимальный уровень 4, даже если все не по грейду одеть, и вот от брони там идет на скорость бега, скорость маг атаки, и ловкость. Что скажете на такое? странно но на скорость физ атаки тут нет.
/**
* Refresh expertise level ; weapon got one rank, when armor got 4 ranks.<br>
*/
public void refreshExpertisePenalty()
{
final int expertiseLevel = getSkillLevel(L2Skill.SKILL_EXPERTISE);
int armorPenalty = 0;
boolean weaponPenalty = false;
for (final ItemInstance item : getInventory().getPaperdollItems())
{
if (item.getItemType() != EtcItemType.ARROW && item.getItem().getCrystalType().getId() > expertiseLevel)
{
if (item.isWeapon())
weaponPenalty = true;
else
armorPenalty += (item.getItem().getBodyPart() == Item.SLOT_FULL_ARMOR) ? 2 : 1;
}
}
armorPenalty = Math.min(armorPenalty, 4);
// Found a different state than previous ; update it.
if (_weaponGradePenalty != weaponPenalty || _armorGradePenalty != armorPenalty)
{
_weaponGradePenalty = weaponPenalty;
_armorGradePenalty = armorPenalty;
// Passive skill "Grade Penalty" is either granted or dropped.
if (_weaponGradePenalty || _armorGradePenalty > 0)
addSkill(SkillTable.getInstance().getInfo(4267, 1), false);
else
removeSkill(4267, false);
sendSkillList();
sendPacket(new EtcStatusUpdate(this));
// Activate / desactivate weapon effects.
final ItemInstance item = getActiveWeaponInstance();
if (item != null)
{
if (_weaponGradePenalty)
ItemPassiveSkillsListener.getInstance().onUnequip(Paperdoll.NULL, item, this);
else
ItemPassiveSkillsListener.getInstance().onEquip(Paperdoll.NULL, item, this);
}
}
}
Ну в том то и дело, что в Interlude есть только :А разве всего один скил?
4267 - Grade Penalty
6209 - Weapon Grade Penalty
6213 - Armor Grade Penalty
В мобиусе интерлюда вот такое:Ну в том то и дело, что в Interlude есть только :
4267 - Grade Penalty
Вот это появилось в высших хрониках:
6209 - Weapon Grade Penalty
6213 - Armor Grade Penalty
public void refreshExpertisePenalty()
{
if (!Config.EXPERTISE_PENALTY)
{
return;
}
final int expertiseLevel = getExpertiseLevel();
int armorPenalty = 0;
int weaponPenalty = 0;
int crystaltype;
for (Item item : _inventory.getItems())
{
if ((item != null) && item.isEquipped() && (item.getItemType() != EtcItemType.ARROW))
{
crystaltype = item.getTemplate().getCrystalType().getLevel();
if (crystaltype > expertiseLevel)
{
if (item.isWeapon() && (crystaltype > weaponPenalty))
{
weaponPenalty = crystaltype;
}
else if (crystaltype > armorPenalty)
{
armorPenalty = crystaltype;
}
}
}
}
// calc weapon penalty
weaponPenalty = weaponPenalty - expertiseLevel - _expertisePenaltyBonus;
weaponPenalty = Math.min(Math.max(weaponPenalty, 0), 4);
// calc armor penalty
armorPenalty = armorPenalty - expertiseLevel - _expertisePenaltyBonus;
armorPenalty = Math.min(Math.max(armorPenalty, 0), 4);
if ((_expertiseWeaponPenalty != weaponPenalty) || (_expertiseArmorPenalty != armorPenalty))
{
_expertiseWeaponPenalty = weaponPenalty;
_expertiseArmorPenalty = armorPenalty;
if ((_expertiseWeaponPenalty > 0) || (_expertiseArmorPenalty > 0))
{
addSkill(SkillData.getInstance().getSkill(4267, 1), false);
}
else
{
removeSkill(getKnownSkill(CommonSkill.GRADE_PENALTY.getId()), false, true);
}
sendPacket(new EtcStatusUpdate(this));
}
}
<skill id="4267" levels="10" name="Grade Penalty">
<!-- A penalty applied when the grade of equipment one is wearing is not appropriate for one's level. -->
<table name="#rate">0.22 0.19 0.16 0.13 0.1 0.1 0.1 0.1 0.1 0.1</table>
<set name="icon" val="icon.skill4267" />
<set name="operateType" val="P" />
<set name="targetType" val="SELF" />
<set name="magicLevel" val="1" />
<set name="stayAfterDeath" val="true" />
<effects>
<effect name="Buff">
<mul stat="pAtkSpd" val="#rate" />
<mul stat="mAtkSpd" val="#rate" />
<mul stat="rEvas" val="#rate" />
<mul stat="rExp" val="#rate" />
<mul stat="runSpd" val="#rate" />
<mul stat="regHp" val="#rate" />
<mul stat="regCp" val="#rate" />
<mul stat="regMp" val="#rate" />
<sub stat="accCombat" val="20" />
</effect>
</effects>
</skill>
Мне кажется, что 6 лвлов это автогенерация в лучших традициях мобиуса.ну тут все понятно, 10 уровней, то есть на каждый предмет+ 1 уровень, то есть 5 бижи и 5 брони, оружие отдельно. Хотя в коде идет ограничение до 4, то есть 6 уровней последние вообще не используются, потом в клиенте если посмотреть, там уровень только 1 для данного умения (штрафа/дебафа).
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?