@rpg-engine/long-bow 0.8.81 → 0.8.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/SkillProgressBar.d.ts +3 -1
- package/dist/components/SkillsContainer.d.ts +2 -2
- package/dist/long-bow.cjs.development.js +79 -41
- package/dist/long-bow.cjs.development.js.map +1 -1
- package/dist/long-bow.cjs.production.min.js +1 -1
- package/dist/long-bow.cjs.production.min.js.map +1 -1
- package/dist/long-bow.esm.js +80 -42
- package/dist/long-bow.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/components/SkillProgressBar.tsx +52 -18
- package/src/components/SkillsContainer.tsx +14 -13
- package/src/mocks/skills.mocks.ts +21 -9
- package/src/stories/Character/skills/SkillsContainer.stories.tsx +3 -0
package/dist/long-bow.esm.js
CHANGED
|
@@ -2,7 +2,7 @@ import React, { useState, useEffect, Component, useRef, useCallback, useContext,
|
|
|
2
2
|
import styled, { css, keyframes, createGlobalStyle } from 'styled-components';
|
|
3
3
|
import { BeatLoader } from 'react-spinners';
|
|
4
4
|
import { v4 } from 'uuid';
|
|
5
|
-
import { GRID_WIDTH, GRID_HEIGHT, ShortcutType, getItemTextureKeyPath, ItemContainerType, ItemType, DepotSocketEvents, ItemSocketEvents, ItemSocketEventsDisplayLabels, ActionsForInventory, ActionsForEquipmentSet, ActionsForLoot, ActionsForMapContainer, ItemQualityLevel, ItemRarities, ItemSubType, isMobile, TaskType, TaskStatus, isMobileOrTablet, RewardType, ItemSlotType, NPCSubtype, EntityAttackType, NPCAlignment, VideoGuideCategory, VideoGuideLanguage, CharacterClass, QuestStatus,
|
|
5
|
+
import { GRID_WIDTH, GRID_HEIGHT, ShortcutType, getItemTextureKeyPath, ItemContainerType, ItemType, DepotSocketEvents, ItemSocketEvents, ItemSocketEventsDisplayLabels, ActionsForInventory, ActionsForEquipmentSet, ActionsForLoot, ActionsForMapContainer, ItemQualityLevel, ItemRarities, ItemSubType, isMobile, TaskType, TaskStatus, isMobileOrTablet, RewardType, ItemSlotType, NPCSubtype, EntityAttackType, NPCAlignment, VideoGuideCategory, VideoGuideLanguage, CharacterClass, QuestStatus, getSkillConstants, getLevelFromSP, getSPForLevel, getSPForLevelExponential, getXPForLevel, MetadataType, PurchaseType, UserAccountTypes, PaymentCurrency, PeriodOfDay } from '@rpg-engine/shared';
|
|
6
6
|
import dayjs from 'dayjs';
|
|
7
7
|
import { ErrorBoundary as ErrorBoundary$1 } from 'react-error-boundary';
|
|
8
8
|
import { FaTimes, FaDiscord, FaWhatsapp, FaSearch, FaThumbtack, FaBoxOpen, FaChevronLeft, FaChevronRight, FaClipboardList, FaChevronUp, FaChevronDown, FaReddit, FaTrash, FaShoppingBag, FaInfoCircle, FaCartPlus, FaArrowLeft, FaHistory, FaShoppingCart } from 'react-icons/fa';
|
|
@@ -36509,22 +36509,52 @@ var Tooltip = /*#__PURE__*/styled.div.withConfig({
|
|
|
36509
36509
|
var SkillProgressBar = function SkillProgressBar(_ref) {
|
|
36510
36510
|
var bgColor = _ref.bgColor,
|
|
36511
36511
|
skillName = _ref.skillName,
|
|
36512
|
+
skillKey = _ref.skillKey,
|
|
36513
|
+
characterClass = _ref.characterClass,
|
|
36512
36514
|
level = _ref.level,
|
|
36513
36515
|
currentSkillPoints = _ref.skillPoints,
|
|
36514
|
-
skillPointsToNextLevel = _ref.skillPointsToNextLevel,
|
|
36515
|
-
skillPointsForCurrentLevel = _ref.skillPointsForCurrentLevel,
|
|
36516
36516
|
texturePath = _ref.texturePath,
|
|
36517
36517
|
_ref$showSkillPoints = _ref.showSkillPoints,
|
|
36518
36518
|
showSkillPoints = _ref$showSkillPoints === void 0 ? true : _ref$showSkillPoints,
|
|
36519
36519
|
atlasIMG = _ref.atlasIMG,
|
|
36520
36520
|
atlasJSON = _ref.atlasJSON,
|
|
36521
36521
|
buffAndDebuff = _ref.buffAndDebuff;
|
|
36522
|
-
//
|
|
36523
|
-
var
|
|
36522
|
+
// Use CharacterClass.None as default if skillKey is provided but characterClass is not
|
|
36523
|
+
var effectiveClass = characterClass != null ? characterClass : CharacterClass.None;
|
|
36524
|
+
// Calculate the effective level based on actual SP (handles data inconsistencies)
|
|
36525
|
+
var calculateEffectiveLevel = function calculateEffectiveLevel() {
|
|
36526
|
+
if (!skillKey) {
|
|
36527
|
+
return level; // Fallback to stored level for general "Level" display
|
|
36528
|
+
}
|
|
36529
|
+
var _getSkillConstants = getSkillConstants(skillKey, effectiveClass),
|
|
36530
|
+
A = _getSkillConstants.A,
|
|
36531
|
+
b = _getSkillConstants.b,
|
|
36532
|
+
c = _getSkillConstants.c;
|
|
36533
|
+
var actualLevel = Math.floor(getLevelFromSP(currentSkillPoints, A, b, c));
|
|
36534
|
+
return Math.max(c, actualLevel); // At least starting level
|
|
36535
|
+
};
|
|
36536
|
+
var effectiveLevel = calculateEffectiveLevel();
|
|
36537
|
+
// Calculate progress based on actual SP position
|
|
36524
36538
|
var calculateProgress = function calculateProgress() {
|
|
36525
|
-
|
|
36526
|
-
|
|
36527
|
-
|
|
36539
|
+
if (!skillKey) {
|
|
36540
|
+
// Fallback for general "Level" display: simple ratio of current SP to next level
|
|
36541
|
+
var spForCurrentLevel = getSPForLevel(level);
|
|
36542
|
+
var _spForNextLevel = getSPForLevel(level + 1);
|
|
36543
|
+
var _range = _spForNextLevel - spForCurrentLevel;
|
|
36544
|
+
var _progress = currentSkillPoints - spForCurrentLevel;
|
|
36545
|
+
return Math.min(100, Math.max(0, _progress / _range * 100));
|
|
36546
|
+
}
|
|
36547
|
+
var _getSkillConstants2 = getSkillConstants(skillKey, effectiveClass),
|
|
36548
|
+
A = _getSkillConstants2.A,
|
|
36549
|
+
b = _getSkillConstants2.b,
|
|
36550
|
+
c = _getSkillConstants2.c;
|
|
36551
|
+
// Calculate SP thresholds for current effective level
|
|
36552
|
+
var spForEffectiveLevel = getSPForLevelExponential(effectiveLevel, A, b, c);
|
|
36553
|
+
var spForNextLevel = getSPForLevelExponential(effectiveLevel + 1, A, b, c);
|
|
36554
|
+
// Progress within current effective level
|
|
36555
|
+
var range = spForNextLevel - spForEffectiveLevel;
|
|
36556
|
+
var progressInLevel = currentSkillPoints - spForEffectiveLevel;
|
|
36557
|
+
return Math.min(100, Math.max(0, progressInLevel / Math.max(1, range) * 100));
|
|
36528
36558
|
};
|
|
36529
36559
|
var progress = calculateProgress();
|
|
36530
36560
|
var formatBuffAndDebuff = function formatBuffAndDebuff(value) {
|
|
@@ -36535,7 +36565,7 @@ var SkillProgressBar = function SkillProgressBar(_ref) {
|
|
|
36535
36565
|
var result = level * (buffAndDebuff / 100);
|
|
36536
36566
|
return result > 0 ? "+" + result.toFixed(2) : "" + result.toFixed(2);
|
|
36537
36567
|
};
|
|
36538
|
-
return React.createElement(React.Fragment, null, React.createElement(ProgressTitle, null, buffAndDebuff !== undefined && React.createElement(React.Fragment, null, buffAndDebuff > 0 ? React.createElement(BuffAndDebuffContainer, null, React.createElement(TitleNameContainer, null, React.createElement(TitleNameBuff, null, skillName), React.createElement(TitleNameBuff, null, "lv ",
|
|
36568
|
+
return React.createElement(React.Fragment, null, React.createElement(ProgressTitle, null, buffAndDebuff !== undefined && React.createElement(React.Fragment, null, buffAndDebuff > 0 ? React.createElement(BuffAndDebuffContainer, null, React.createElement(TitleNameContainer, null, React.createElement(TitleNameBuff, null, skillName), React.createElement(TitleNameBuff, null, "lv ", effectiveLevel, " (", skillsBuffsCalc(effectiveLevel, buffAndDebuff), ")")), React.createElement(TitleNameBuffContainer, null, React.createElement(TitleNameBuff, null, "(+", formatBuffAndDebuff(buffAndDebuff), "%)"))) : buffAndDebuff < 0 ? React.createElement(React.Fragment, null, React.createElement(TitleNameContainer, null, React.createElement(TitleNameDebuff, null, skillName), React.createElement(TitleNameDebuff, null, "lv ", effectiveLevel, " (", skillsBuffsCalc(effectiveLevel, buffAndDebuff), ")")), React.createElement("div", null, React.createElement(TitleNameDebuff, null, "(", formatBuffAndDebuff(buffAndDebuff), "%)"))) : React.createElement(TitleName, null, skillName)), !buffAndDebuff && React.createElement(TitleNameContainer, null, React.createElement(TitleName, null, skillName), React.createElement(ValueDisplay, null, "lv ", effectiveLevel))), React.createElement(ProgressBody, null, React.createElement(ProgressIconContainer, null, atlasIMG && atlasJSON ? React.createElement(SpriteContainer$4, null, React.createElement(ErrorBoundary, null, React.createElement(SpriteFromAtlas, {
|
|
36539
36569
|
atlasIMG: atlasIMG,
|
|
36540
36570
|
atlasJSON: atlasJSON,
|
|
36541
36571
|
spriteKey: texturePath,
|
|
@@ -36674,39 +36704,48 @@ var SkillsContainer = function SkillsContainer(_ref) {
|
|
|
36674
36704
|
var skillCategory = skillProps[category];
|
|
36675
36705
|
var skillCategoryColor = skillCategory.color;
|
|
36676
36706
|
var output = [];
|
|
36707
|
+
var _loop = function _loop() {
|
|
36708
|
+
var _Object$entries$_i = _Object$entries[_i],
|
|
36709
|
+
key = _Object$entries$_i[0],
|
|
36710
|
+
value = _Object$entries$_i[1];
|
|
36711
|
+
if (key === 'stamina') {
|
|
36712
|
+
return 0; // continue
|
|
36713
|
+
}
|
|
36714
|
+
//@ts-ignore
|
|
36715
|
+
var skillDetails = skill[key];
|
|
36716
|
+
if (!skillDetails) {
|
|
36717
|
+
return 0; // continue
|
|
36718
|
+
}
|
|
36719
|
+
// Calculate skillPointsToNextLevel using exponential formula if characterClass available
|
|
36720
|
+
var calcSkillPointsToNextLevel = function calcSkillPointsToNextLevel() {
|
|
36721
|
+
if (characterClass) {
|
|
36722
|
+
var _getSkillConstants = getSkillConstants(key, characterClass),
|
|
36723
|
+
A = _getSkillConstants.A,
|
|
36724
|
+
b = _getSkillConstants.b,
|
|
36725
|
+
c = _getSkillConstants.c;
|
|
36726
|
+
return Math.round(getSPForLevelExponential(skillDetails.level + 1, A, b, c));
|
|
36727
|
+
}
|
|
36728
|
+
return Math.round(getSPForLevel(skillDetails.level + 1));
|
|
36729
|
+
};
|
|
36730
|
+
output.push(React.createElement(SkillProgressBar, {
|
|
36731
|
+
key: key,
|
|
36732
|
+
skillName: skillNameMap[key],
|
|
36733
|
+
skillKey: key,
|
|
36734
|
+
characterClass: characterClass,
|
|
36735
|
+
bgColor: skillCategoryColor,
|
|
36736
|
+
level: skillDetails.level || 0,
|
|
36737
|
+
skillPoints: Math.round(skillDetails.skillPoints) || 0,
|
|
36738
|
+
skillPointsToNextLevel: calcSkillPointsToNextLevel(),
|
|
36739
|
+
texturePath: value,
|
|
36740
|
+
atlasIMG: atlasIMG,
|
|
36741
|
+
atlasJSON: atlasJSON,
|
|
36742
|
+
buffAndDebuff: skillDetails.buffAndDebuff
|
|
36743
|
+
}));
|
|
36744
|
+
},
|
|
36745
|
+
_ret;
|
|
36677
36746
|
for (var _i = 0, _Object$entries = Object.entries(skillCategory.values); _i < _Object$entries.length; _i++) {
|
|
36678
|
-
|
|
36679
|
-
|
|
36680
|
-
value = _Object$entries$_i[1];
|
|
36681
|
-
if (key === 'stamina') {
|
|
36682
|
-
continue;
|
|
36683
|
-
}
|
|
36684
|
-
//@ts-ignore
|
|
36685
|
-
var skillDetails = skill[key];
|
|
36686
|
-
if (!skillDetails) {
|
|
36687
|
-
continue;
|
|
36688
|
-
}
|
|
36689
|
-
// Get the skill constants for this skill and character class
|
|
36690
|
-
var _getSkillConstants = getSkillConstants(key, characterClass),
|
|
36691
|
-
A = _getSkillConstants.A,
|
|
36692
|
-
b = _getSkillConstants.b,
|
|
36693
|
-
c = _getSkillConstants.c;
|
|
36694
|
-
// Calculate SP thresholds using exponential formula
|
|
36695
|
-
var skillPointsForCurrentLevel = getSPForLevelExponential(skillDetails.level, A, b, c);
|
|
36696
|
-
var skillPointsToNextLevel = getSPForLevelExponential(skillDetails.level + 1, A, b, c);
|
|
36697
|
-
output.push(React.createElement(SkillProgressBar, {
|
|
36698
|
-
key: key,
|
|
36699
|
-
skillName: skillNameMap[key],
|
|
36700
|
-
bgColor: skillCategoryColor,
|
|
36701
|
-
level: skillDetails.level || 0,
|
|
36702
|
-
skillPoints: Math.round(skillDetails.skillPoints) || 0,
|
|
36703
|
-
skillPointsToNextLevel: skillPointsToNextLevel,
|
|
36704
|
-
skillPointsForCurrentLevel: skillPointsForCurrentLevel,
|
|
36705
|
-
texturePath: value,
|
|
36706
|
-
atlasIMG: atlasIMG,
|
|
36707
|
-
atlasJSON: atlasJSON,
|
|
36708
|
-
buffAndDebuff: skillDetails.buffAndDebuff
|
|
36709
|
-
}));
|
|
36747
|
+
_ret = _loop();
|
|
36748
|
+
if (_ret === 0) continue;
|
|
36710
36749
|
}
|
|
36711
36750
|
return output;
|
|
36712
36751
|
};
|
|
@@ -36727,7 +36766,6 @@ var SkillsContainer = function SkillsContainer(_ref) {
|
|
|
36727
36766
|
level: Math.round(skill.level) || 0,
|
|
36728
36767
|
skillPoints: Math.round(skill.experience) || 0,
|
|
36729
36768
|
skillPointsToNextLevel: Math.round(getXPForLevel(skill.level + 1)) || 0,
|
|
36730
|
-
skillPointsForCurrentLevel: Math.round(getXPForLevel(skill.level)) || 0,
|
|
36731
36769
|
texturePath: 'swords/broad-sword.png',
|
|
36732
36770
|
atlasIMG: atlasIMG,
|
|
36733
36771
|
atlasJSON: atlasJSON
|