@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.
@@ -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, getXPForLevel, getSkillConstants, getSPForLevelExponential, MetadataType, PurchaseType, UserAccountTypes, PaymentCurrency, PeriodOfDay } from '@rpg-engine/shared';
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
- // Skill points needed to start the current level (passed from parent, calculated with correct formula)
36523
- var baseSkillPoints = skillPointsForCurrentLevel;
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
- var totalPointsForLevelUp = Math.max(1, skillPointsToNextLevel - baseSkillPoints);
36526
- var excessSkillPoints = Math.max(0, currentSkillPoints - baseSkillPoints);
36527
- return Math.min(100, Math.max(0, excessSkillPoints / totalPointsForLevelUp * 100));
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 ", level, " (", skillsBuffsCalc(level, 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 ", level, " (", skillsBuffsCalc(level, 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 ", level))), React.createElement(ProgressBody, null, React.createElement(ProgressIconContainer, null, atlasIMG && atlasJSON ? React.createElement(SpriteContainer$4, null, React.createElement(ErrorBoundary, null, React.createElement(SpriteFromAtlas, {
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
- var _Object$entries$_i = _Object$entries[_i],
36679
- key = _Object$entries$_i[0],
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