Devlog №4 . Браузерный проект на React + Tailwind. Механика блокирования

Devlog №4 . Браузерный проект на React + Tailwind. Механика блокирования
Devlog №4 . Браузерный проект на React + Tailwind. Механика блокирования
Devlog №4 . Браузерный проект на React + Tailwind. Механика блокирования
Devlog №4 . Браузерный проект на React + Tailwind. Механика блокирования
export const calcBlockCostSM = ( incomingDamage, defenderMainHandItem, defenderOffHandItem, ) => { const safeIncomingDamage = Math.max(0, incomingDamage || 0); // Убеждаемся, что урон не отрицательный. const weaponMass = (defenderMainHandItem?.mass || 0) + (defenderOffHandItem?.mass || 0); const isShieldEquipped = defenderOffHandItem?.itemType === "shield"; const baseCost = safeIncomingDamage * 0.45; const massMitigation = weaponMass * 0.25; const shieldMitigation = isShieldEquipped ? 2.5 : 0; const minCost = isShieldEquipped ? 1 : 2; return Math.max( minCost, Math.round(baseCost - massMitigation - shieldMitigation), ); };

Формула блокирования

if (pIsBlocking) { if (eIsAttacking) { const enemyShieldMass = Number(selectedEnemy.equippedItems?.OFF_HAND?.mass) || 0; const incomingToPlayer = eSkill?.id === "shield_bash" ? (eSkill?.multiplier || 1) * enemyShieldMass : (Number(selectedEnemy.combat_mods?.DAMAGE) || 5) * (eSkill?.multiplier || 1); pCostSM = calcBlockCostSM( incomingToPlayer, equippedItems.MAIN_HAND, equippedItems.OFF_HAND, ); } else { pCostSM = 0; } }

Логика блокирования

{ id: "wooden_shield", itemType: "shield", name: "Деревянный Щит", rarity: ITEM_RARITY.COMMON, category: ITEM_CATEGORY.ARMOR, slot: ITEM_SLOT.WEAPON_OFF_HAND, durability: 100, description: "Простой деревянный щит, годится для защиты от слабых ударов.", stats: { STR: 0, AGI: -1, END: 1, INT: 0, WIL: 0, LUK: 0 }, combat_mods: { DEFENSE_RATING: 5, DEFENSE_RATING_COLD: 1 }, mass: 5, iconSrc: WoodenShield, price: 15, vendor: VENDOR_TYPES.BLACKSMITH, minLevel: 1, minStats: { END: 5 }, },

Объект конфигурации навыка блокирования

Начать дискуссию