2 Commits

Author SHA1 Message Date
uberwald cb41123020 Icons fix
Release Creation / build (release) Successful in 1m13s
2026-06-08 23:40:55 +02:00
uberwald 58db55d1ad Add quantity field for all items
Release Creation / build (release) Successful in 2m8s
2026-06-06 09:21:01 +02:00
22 changed files with 325 additions and 104 deletions
+42 -2
View File
@@ -720,6 +720,26 @@ i.prismrpg {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-qty {
display: flex;
align-items: center;
gap: 2px;
font-size: 11px;
min-width: 48px;
justify-content: center;
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-qty a {
font-size: 9px;
cursor: pointer;
color: rgba(0, 0, 0, 0.4);
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-qty a:hover {
color: rgba(0, 0, 0, 0.8);
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-qty span {
min-width: 16px;
text-align: center;
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-enc, .prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-enc,
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-uses, .prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-uses,
.prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-capacity { .prismrpg .tab.character-equipment .main-div .inv-section .inv-item .inv-capacity {
@@ -784,6 +804,26 @@ i.prismrpg {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-qty {
display: flex;
align-items: center;
gap: 2px;
font-size: 10px;
min-width: 40px;
justify-content: center;
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-qty a {
font-size: 8px;
cursor: pointer;
color: rgba(0, 0, 0, 0.4);
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-qty a:hover {
color: rgba(0, 0, 0, 0.8);
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-qty span {
min-width: 14px;
text-align: center;
}
.prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-enc { .prismrpg .tab.character-equipment .main-div .inv-section .inv-container-item .inv-enc {
font-size: 10px; font-size: 10px;
color: #555; color: #555;
@@ -4901,14 +4941,14 @@ i.prismrpg {
background: linear-gradient(135deg, #dcedfc 0%, #b0d0f0 100%); background: linear-gradient(135deg, #dcedfc 0%, #b0d0f0 100%);
border-color: #3a5a7a; border-color: #3a5a7a;
} }
.palette.status-effects .status-separator { .status-separator {
grid-column: 1 / -1; grid-column: 1 / -1;
display: block;
width: 100%; width: 100%;
height: 2px; height: 2px;
border: none; border: none;
border-top: 2px solid rgba(255, 255, 255, 0.35); border-top: 2px solid rgba(255, 255, 255, 0.35);
margin: 5px 0; margin: 5px 0;
position: relative;
} }
.application.dialog.prismrpg { .application.dialog.prismrpg {
color: var(--color-dark-1); color: var(--color-dark-1);
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

+25 -2
View File
@@ -15,6 +15,9 @@
"armorType": { "armorType": {
"label": "Armor Type" "label": "Armor Type"
}, },
"quantity": {
"label": "Qty"
},
"cost": { "cost": {
"label": "Cost" "label": "Cost"
}, },
@@ -366,6 +369,9 @@
"description": { "description": {
"label": "Description" "label": "Description"
}, },
"quantity": {
"label": "Qty"
},
"encLoad": { "encLoad": {
"label": "Load" "label": "Load"
}, },
@@ -479,6 +485,7 @@
"Wounded": "Wounded" "Wounded": "Wounded"
}, },
"Label": { "Label": {
"quantity": "Qty",
"agility": "Dexterity", "agility": "Dexterity",
"gotoToken": "Go to token", "gotoToken": "Go to token",
"combatAction": "Combat action", "combatAction": "Combat action",
@@ -943,13 +950,17 @@
"excessBurden": "Equipped burden exceeds max — excess reduces Movement Rating", "excessBurden": "Equipped burden exceeds max — excess reduces Movement Rating",
"assignToContainer": "Assign to container", "assignToContainer": "Assign to container",
"removeFromContainer": "Remove from container", "removeFromContainer": "Remove from container",
"packBurden": "Pack Burden" "packBurden": "Pack Burden",
"quantityPlus": "Increase quantity",
"quantityMinus": "Decrease quantity"
}, },
"RollSavingThrow": "Roll Saving Throw", "RollSavingThrow": "Roll Saving Throw",
"Dialog": { "Dialog": {
"useConsumable": "Use Consumable", "useConsumable": "Use Consumable",
"useConsumableContent": "Use one charge of <strong>{name}</strong>? ({uses} remaining)", "useConsumableContent": "Use one charge of <strong>{name}</strong>? ({uses} remaining)",
"assignToContainer": "Assign to Container" "assignToContainer": "Assign to Container",
"deleteItem": "Delete Item",
"deleteItemContent": "Remove last copy of <strong>{name}</strong>?"
}, },
"Message": { "Message": {
"selectCoreSkill": "You must select a Core Skill for your character. Each character chooses one Core Skill at creation.", "selectCoreSkill": "You must select a Core Skill for your character. Each character chooses one Core Skill at creation.",
@@ -1111,6 +1122,9 @@
"cost": { "cost": {
"label": "Cost" "label": "Cost"
}, },
"quantity": {
"label": "Qty"
},
"defense": { "defense": {
"label": "Defense Bonus" "label": "Defense Bonus"
}, },
@@ -1372,6 +1386,9 @@
"cost": { "cost": {
"label": "Cost" "label": "Cost"
}, },
"quantity": {
"label": "Qty"
},
"encLoad": { "encLoad": {
"label": "Encumbrance Load" "label": "Encumbrance Load"
}, },
@@ -1480,6 +1497,9 @@
"uses": { "uses": {
"label": "Uses" "label": "Uses"
}, },
"quantity": {
"label": "Qty"
},
"encLoad": { "encLoad": {
"label": "Enc. Load" "label": "Enc. Load"
}, },
@@ -1496,6 +1516,9 @@
"description": { "description": {
"label": "Description" "label": "Description"
}, },
"quantity": {
"label": "Qty"
},
"encLoad": { "encLoad": {
"label": "Enc. Load" "label": "Enc. Load"
}, },
+29 -2
View File
@@ -30,6 +30,8 @@ export default class PrismRPGCharacterSheet extends PrismRPGActorSheet {
hpTempMinus: PrismRPGCharacterSheet.#onHpTempMinus, hpTempMinus: PrismRPGCharacterSheet.#onHpTempMinus,
postItemToChat: PrismRPGCharacterSheet.#onPostItemToChat, postItemToChat: PrismRPGCharacterSheet.#onPostItemToChat,
useConsumable: PrismRPGCharacterSheet.#onUseConsumable, useConsumable: PrismRPGCharacterSheet.#onUseConsumable,
quantityPlus: PrismRPGCharacterSheet.#onQuantityPlus,
quantityMinus: PrismRPGCharacterSheet.#onQuantityMinus,
toggleContainerEquipped: PrismRPGCharacterSheet.#onToggleContainerEquipped, toggleContainerEquipped: PrismRPGCharacterSheet.#onToggleContainerEquipped,
toggleEquipped: PrismRPGCharacterSheet.#onToggleEquipped, toggleEquipped: PrismRPGCharacterSheet.#onToggleEquipped,
assignToContainer: PrismRPGCharacterSheet.#onAssignToContainer, assignToContainer: PrismRPGCharacterSheet.#onAssignToContainer,
@@ -129,7 +131,7 @@ export default class PrismRPGCharacterSheet extends PrismRPGActorSheet {
] ]
const burdenEquipped = equippableTypes const burdenEquipped = equippableTypes
.filter(i => i.system.equipped) .filter(i => i.system.equipped)
.reduce((sum, i) => sum + (i.system.encLoad ?? 0), 0) .reduce((sum, i) => sum + (i.system.encLoad ?? 0) * (i.system.quantity ?? 1), 0)
context.burdenUsed = burdenEquipped context.burdenUsed = burdenEquipped
// Excess equipped burden reduces Movement Rating // Excess equipped burden reduces Movement Rating
const excessBurden = Math.max(0, burdenEquipped - context.burdenMax) const excessBurden = Math.max(0, burdenEquipped - context.burdenMax)
@@ -202,7 +204,7 @@ export default class PrismRPGCharacterSheet extends PrismRPGActorSheet {
// Pack burden = items stored in an existing container // Pack burden = items stored in an existing container
context.packBurdenUsed = allStorable context.packBurdenUsed = allStorable
.filter(i => i.system.containerId && containerGroups[i.system.containerId]) .filter(i => i.system.containerId && containerGroups[i.system.containerId])
.reduce((sum, i) => sum + (i.system.encLoad ?? 0), 0) .reduce((sum, i) => sum + (i.system.encLoad ?? 0) * (i.system.quantity ?? 1), 0)
break break
case "biography": case "biography":
context.tab = context.tabs.biography context.tab = context.tabs.biography
@@ -365,6 +367,31 @@ export default class PrismRPGCharacterSheet extends PrismRPGActorSheet {
await item.update({ "system.equipped": !item.system.equipped }) await item.update({ "system.equipped": !item.system.equipped })
} }
static async #onQuantityPlus(event, target) {
const itemElement = target.closest("[data-item-id]")
if (!itemElement) return
const item = this.document.items.get(itemElement.dataset.itemId)
if (!item) return
await item.update({ "system.quantity": (item.system.quantity ?? 1) + 1 })
}
static async #onQuantityMinus(event, target) {
const itemElement = target.closest("[data-item-id]")
if (!itemElement) return
const item = this.document.items.get(itemElement.dataset.itemId)
if (!item) return
const newQty = (item.system.quantity ?? 1) - 1
if (newQty < 1) {
const confirmed = await foundry.applications.api.DialogV2.confirm({
window: { title: game.i18n.localize("PRISMRPG.Dialog.deleteItem") },
content: `<p>${game.i18n.format("PRISMRPG.Dialog.deleteItemContent", { name: item.name })}</p>`,
})
if (confirmed) await item.delete()
return
}
await item.update({ "system.quantity": newQty })
}
static async #onAssignToContainer(event, target) { static async #onAssignToContainer(event, target) {
const itemElement = target.closest("[data-item-id]") const itemElement = target.closest("[data-item-id]")
if (!itemElement) return if (!itemElement) return
+71 -71
View File
@@ -4,51 +4,51 @@
*/ */
export const AFFLICTIONS = [ export const AFFLICTIONS = [
// ── Mundane ──────────────────────────────────────────────────────────────── // ── Mundane ────────────────────────────────────────────────────────────────
{ id: "aff-alkalized", name: "PRISMRPG.Status.Alkalized", icon: "icons/svg/acid.svg", category: "affliction", typing: "mundane" }, { id: "aff-alkalized", name: "PRISMRPG.Status.Alkalized", img: "icons/svg/acid.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-bleed", name: "PRISMRPG.Status.Bleed", icon: "icons/svg/blood.svg", category: "affliction", typing: "mundane" }, { id: "aff-bleed", name: "PRISMRPG.Status.Bleed", img: "icons/svg/blood.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-blind", name: "PRISMRPG.Status.Blind", icon: "icons/svg/blind.svg", category: "affliction", typing: "mundane" }, { id: "aff-blind", name: "PRISMRPG.Status.Blind", img: "icons/svg/blind.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-deaf", name: "PRISMRPG.Status.Deaf", icon: "icons/svg/deaf.svg", category: "affliction", typing: "mundane" }, { id: "aff-deaf", name: "PRISMRPG.Status.Deaf", img: "icons/svg/deaf.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-diseased", name: "PRISMRPG.Status.Diseased", icon: "icons/svg/biohazard.svg", category: "affliction", typing: "mundane" }, { id: "aff-diseased", name: "PRISMRPG.Status.Diseased", img: "icons/svg/biohazard.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-distracted", name: "PRISMRPG.Status.Distracted", icon: "icons/svg/daze.svg", category: "affliction", typing: "mundane" }, { id: "aff-distracted", name: "PRISMRPG.Status.Distracted", img: "icons/svg/daze.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-exhaustion", name: "PRISMRPG.Status.Exhaustion", icon: "icons/svg/sleep.svg", category: "affliction", typing: "mundane" }, { id: "aff-exhaustion", name: "PRISMRPG.Status.Exhaustion", img: "icons/svg/sleep.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-frightened", name: "PRISMRPG.Status.Frightened", icon: "icons/svg/terror.svg", category: "affliction", typing: "mundane" }, { id: "aff-frightened", name: "PRISMRPG.Status.Frightened", img: "icons/svg/terror.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-marked", name: "PRISMRPG.Status.Marked", icon: "icons/svg/target.svg", category: "affliction", typing: "both" }, { id: "aff-marked", name: "PRISMRPG.Status.Marked", img: "icons/svg/target.svg", category: "affliction", group: "afflictions", order: 1, typing: "both" },
{ id: "aff-mute", name: "PRISMRPG.Status.Mute", icon: "icons/svg/silenced.svg", category: "affliction", typing: "mundane" }, { id: "aff-mute", name: "PRISMRPG.Status.Mute", img: "icons/svg/silenced.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-paralyzed", name: "PRISMRPG.Status.Paralyzed", icon: "icons/svg/paralysis.svg", category: "affliction", typing: "mundane" }, { id: "aff-paralyzed", name: "PRISMRPG.Status.Paralyzed", img: "icons/svg/paralysis.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-petrified", name: "PRISMRPG.Status.Petrified", icon: "icons/svg/frozen.svg", category: "affliction", typing: "mundane" }, { id: "aff-petrified", name: "PRISMRPG.Status.Petrified", img: "icons/svg/frozen.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-poison", name: "PRISMRPG.Status.Poison", icon: "icons/svg/poison.svg", category: "affliction", typing: "mundane" }, { id: "aff-poison", name: "PRISMRPG.Status.Poison", img: "icons/svg/poison.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-prone", name: "PRISMRPG.Status.Prone", icon: "icons/svg/falling.svg", category: "affliction", typing: "mundane" }, { id: "aff-prone", name: "PRISMRPG.Status.Prone", img: "icons/svg/falling.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-rage", name: "PRISMRPG.Status.Rage", icon: "icons/svg/fire.svg", category: "affliction", typing: "mundane" }, { id: "aff-rage", name: "PRISMRPG.Status.Rage", img: "icons/svg/fire.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-sealed", name: "PRISMRPG.Status.Sealed", icon: "icons/svg/net.svg", category: "affliction", typing: "mundane" }, { id: "aff-sealed", name: "PRISMRPG.Status.Sealed", img: "icons/svg/net.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-staggered", name: "PRISMRPG.Status.Staggered", icon: "icons/svg/daze.svg", category: "affliction", typing: "mundane" }, { id: "aff-staggered", name: "PRISMRPG.Status.Staggered", img: "icons/svg/daze.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-stunned", name: "PRISMRPG.Status.Stunned", icon: "icons/svg/stun.svg", category: "affliction", typing: "mundane" }, { id: "aff-stunned", name: "PRISMRPG.Status.Stunned", img: "icons/svg/explosion.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-taunt", name: "PRISMRPG.Status.Taunt", icon: "icons/svg/eye.svg", category: "affliction", typing: "mundane" }, { id: "aff-taunt", name: "PRISMRPG.Status.Taunt", img: "icons/svg/eye.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-unconscious",name: "PRISMRPG.Status.Unconscious",icon: "icons/svg/unconscious.svg", category: "affliction", typing: "mundane" }, { id: "aff-unconscious",name: "PRISMRPG.Status.Unconscious",img: "icons/svg/unconscious.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
{ id: "aff-wounded", name: "PRISMRPG.Status.Wounded", icon: "icons/svg/degen.svg", category: "affliction", typing: "mundane" }, { id: "aff-wounded", name: "PRISMRPG.Status.Wounded", img: "icons/svg/degen.svg", category: "affliction", group: "afflictions", order: 1, typing: "mundane" },
// ── Magic ────────────────────────────────────────────────────────────────── // ── Magic ──────────────────────────────────────────────────────────────────
{ id: "aff-banished", name: "PRISMRPG.Status.Banished", icon: "icons/svg/wing.svg", category: "affliction", typing: "magic" }, { id: "aff-banished", name: "PRISMRPG.Status.Banished", img: "icons/svg/wing.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-seep", name: "PRISMRPG.Status.Seep", icon: "icons/svg/acid.svg", category: "affliction", typing: "magic" }, { id: "aff-seep", name: "PRISMRPG.Status.Seep", img: "icons/svg/acid.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-sightless", name: "PRISMRPG.Status.Sightless", icon: "icons/svg/blind.svg", category: "affliction", typing: "magic" }, { id: "aff-sightless", name: "PRISMRPG.Status.Sightless", img: "icons/svg/blind.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-cursed", name: "PRISMRPG.Status.Cursed", icon: "icons/svg/sun.svg", category: "affliction", typing: "magic" }, { id: "aff-cursed", name: "PRISMRPG.Status.Cursed", img: "icons/svg/sun.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-soundless", name: "PRISMRPG.Status.Soundless", icon: "icons/svg/deaf.svg", category: "affliction", typing: "magic" }, { id: "aff-soundless", name: "PRISMRPG.Status.Soundless", img: "icons/svg/deaf.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-plagued", name: "PRISMRPG.Status.Plagued", icon: "icons/svg/biohazard.svg", category: "affliction", typing: "magic" }, { id: "aff-plagued", name: "PRISMRPG.Status.Plagued", img: "icons/svg/biohazard.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-compulsed", name: "PRISMRPG.Status.Compulsed", icon: "icons/svg/eye.svg", category: "affliction", typing: "magic" }, { id: "aff-compulsed", name: "PRISMRPG.Status.Compulsed", img: "icons/svg/eye.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-fatigue", name: "PRISMRPG.Status.Fatigue", icon: "icons/svg/sleep.svg", category: "affliction", typing: "magic" }, { id: "aff-fatigue", name: "PRISMRPG.Status.Fatigue", img: "icons/svg/sleep.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-horror", name: "PRISMRPG.Status.Horror", icon: "icons/svg/terror.svg", category: "affliction", typing: "magic" }, { id: "aff-horror", name: "PRISMRPG.Status.Horror", img: "icons/svg/terror.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-madness", name: "PRISMRPG.Status.Madness", icon: "icons/svg/daze.svg", category: "affliction", typing: "magic" }, { id: "aff-madness", name: "PRISMRPG.Status.Madness", img: "icons/svg/daze.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-silenced", name: "PRISMRPG.Status.Silenced", icon: "icons/svg/silenced.svg", category: "affliction", typing: "magic" }, { id: "aff-silenced", name: "PRISMRPG.Status.Silenced", img: "icons/svg/silenced.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-locked", name: "PRISMRPG.Status.Locked", icon: "icons/svg/net.svg", category: "affliction", typing: "magic" }, { id: "aff-locked", name: "PRISMRPG.Status.Locked", img: "icons/svg/net.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-dazed", name: "PRISMRPG.Status.Dazed", icon: "icons/svg/daze.svg", category: "affliction", typing: "magic" }, { id: "aff-dazed", name: "PRISMRPG.Status.Dazed", img: "icons/svg/daze.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-numbed", name: "PRISMRPG.Status.Numbed", icon: "icons/svg/frozen.svg", category: "affliction", typing: "magic" }, { id: "aff-numbed", name: "PRISMRPG.Status.Numbed", img: "icons/svg/frozen.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-comatose", name: "PRISMRPG.Status.Comatose", icon: "icons/svg/unconscious.svg", category: "affliction", typing: "magic" }, { id: "aff-comatose", name: "PRISMRPG.Status.Comatose", img: "icons/svg/unconscious.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-shattered", name: "PRISMRPG.Status.Shattered", icon: "icons/svg/blood.svg", category: "affliction", typing: "magic" }, { id: "aff-shattered", name: "PRISMRPG.Status.Shattered", img: "icons/svg/blood.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
// ── Elemental (Magic) ────────────────────────────────────────────────────── // ── Elemental (Magic) ──────────────────────────────────────────────────────
{ id: "aff-burning", name: "PRISMRPG.Status.Burning", icon: "icons/svg/fire.svg", category: "affliction", typing: "magic" }, { id: "aff-burning", name: "PRISMRPG.Status.Burning", img: "icons/svg/fire.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-chilled", name: "PRISMRPG.Status.Chilled", icon: "icons/svg/frozen.svg", category: "affliction", typing: "magic" }, { id: "aff-chilled", name: "PRISMRPG.Status.Chilled", img: "icons/svg/frozen.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-corroded", name: "PRISMRPG.Status.Corroded", icon: "icons/svg/acid.svg", category: "affliction", typing: "magic" }, { id: "aff-corroded", name: "PRISMRPG.Status.Corroded", img: "icons/svg/acid.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-necrosis", name: "PRISMRPG.Status.Necrosis", icon: "icons/svg/degen.svg", category: "affliction", typing: "magic" }, { id: "aff-necrosis", name: "PRISMRPG.Status.Necrosis", img: "icons/svg/degen.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-radiated", name: "PRISMRPG.Status.Radiated", icon: "icons/svg/lightning.svg", category: "affliction", typing: "magic" }, { id: "aff-radiated", name: "PRISMRPG.Status.Radiated", img: "icons/svg/lightning.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
{ id: "aff-shocked", name: "PRISMRPG.Status.Shocked", icon: "icons/svg/lightning.svg", category: "affliction", typing: "magic" }, { id: "aff-shocked", name: "PRISMRPG.Status.Shocked", img: "icons/svg/lightning.svg", category: "affliction", group: "afflictions", order: 1, typing: "magic" },
] ]
/** /**
@@ -57,33 +57,33 @@ export const AFFLICTIONS = [
*/ */
export const IMBUEMENTS = [ export const IMBUEMENTS = [
// ── Mundane ──────────────────────────────────────────────────────────────── // ── Mundane ────────────────────────────────────────────────────────────────
{ id: "imb-aided", name: "PRISMRPG.Status.Aided", icon: "icons/svg/upgrade.svg", category: "imbuement", typing: "mundane" }, { id: "imb-aided", name: "PRISMRPG.Status.Aided", img: "icons/svg/upgrade.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-alert", name: "PRISMRPG.Status.Alert", icon: "icons/svg/eye.svg", category: "imbuement", typing: "mundane" }, { id: "imb-alert", name: "PRISMRPG.Status.Alert", img: "icons/svg/eye.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-alkalized", name: "PRISMRPG.Status.Alkalized", icon: "icons/svg/acid.svg", category: "imbuement", typing: "mundane" }, { id: "imb-alkalized", name: "PRISMRPG.Status.Alkalized", img: "icons/svg/acid.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-bestowed", name: "PRISMRPG.Status.Bestowed", icon: "icons/svg/angel.svg", category: "imbuement", typing: "both" }, { id: "imb-bestowed", name: "PRISMRPG.Status.Bestowed", img: "icons/svg/angel.svg", category: "imbuement", group: "imbuements", order: 2, typing: "both" },
{ id: "imb-concealed", name: "PRISMRPG.Status.Concealed", icon: "icons/svg/invisible.svg", category: "imbuement", typing: "mundane" }, { id: "imb-concealed", name: "PRISMRPG.Status.Concealed", img: "icons/svg/invisible.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-enhance", name: "PRISMRPG.Status.Enhance", icon: "icons/svg/upgrade.svg", category: "imbuement", typing: "mundane" }, { id: "imb-enhance", name: "PRISMRPG.Status.Enhance", img: "icons/svg/upgrade.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-inspired", name: "PRISMRPG.Status.Inspired", icon: "icons/svg/regen.svg", category: "imbuement", typing: "mundane" }, { id: "imb-inspired", name: "PRISMRPG.Status.Inspired", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-keen", name: "PRISMRPG.Status.Keen", icon: "icons/svg/eye.svg", category: "imbuement", typing: "mundane" }, { id: "imb-keen", name: "PRISMRPG.Status.Keen", img: "icons/svg/eye.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-life-drain", name: "PRISMRPG.Status.LifeDrain", icon: "icons/svg/regen.svg", category: "imbuement", typing: "mundane" }, { id: "imb-life-drain", name: "PRISMRPG.Status.LifeDrain", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-madness", name: "PRISMRPG.Status.Madness", icon: "icons/svg/daze.svg", category: "imbuement", typing: "mundane" }, { id: "imb-madness", name: "PRISMRPG.Status.Madness", img: "icons/svg/daze.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-prepared", name: "PRISMRPG.Status.Prepared", icon: "icons/svg/upgrade.svg", category: "imbuement", typing: "mundane" }, { id: "imb-prepared", name: "PRISMRPG.Status.Prepared", img: "icons/svg/upgrade.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-rage", name: "PRISMRPG.Status.Rage", icon: "icons/svg/fire.svg", category: "imbuement", typing: "mundane" }, { id: "imb-rage", name: "PRISMRPG.Status.Rage", img: "icons/svg/fire.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-reinforced", name: "PRISMRPG.Status.Reinforced", icon: "icons/svg/mage-shield.svg", category: "imbuement", typing: "mundane" }, { id: "imb-reinforced", name: "PRISMRPG.Status.Reinforced", img: "icons/svg/mage-shield.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-renewed", name: "PRISMRPG.Status.Renewed", icon: "icons/svg/regen.svg", category: "imbuement", typing: "mundane" }, { id: "imb-renewed", name: "PRISMRPG.Status.Renewed", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-supplied", name: "PRISMRPG.Status.Supplied", icon: "icons/svg/upgrade.svg", category: "imbuement", typing: "mundane" }, { id: "imb-supplied", name: "PRISMRPG.Status.Supplied", img: "icons/svg/upgrade.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-surged", name: "PRISMRPG.Status.Surged", icon: "icons/svg/lightning.svg", category: "imbuement", typing: "mundane" }, { id: "imb-surged", name: "PRISMRPG.Status.Surged", img: "icons/svg/lightning.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
{ id: "imb-trance", name: "PRISMRPG.Status.Trance", icon: "icons/svg/sleep.svg", category: "imbuement", typing: "mundane" }, { id: "imb-trance", name: "PRISMRPG.Status.Trance", img: "icons/svg/sleep.svg", category: "imbuement", group: "imbuements", order: 2, typing: "mundane" },
// ── Magic ────────────────────────────────────────────────────────────────── // ── Magic ──────────────────────────────────────────────────────────────────
{ id: "imb-blessed", name: "PRISMRPG.Status.Blessed", icon: "icons/svg/angel.svg", category: "imbuement", typing: "magic" }, { id: "imb-blessed", name: "PRISMRPG.Status.Blessed", img: "icons/svg/angel.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-anchored", name: "PRISMRPG.Status.Anchored", icon: "icons/svg/net.svg", category: "imbuement", typing: "magic" }, { id: "imb-anchored", name: "PRISMRPG.Status.Anchored", img: "icons/svg/net.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-saturated", name: "PRISMRPG.Status.Saturated", icon: "icons/svg/regen.svg", category: "imbuement", typing: "magic" }, { id: "imb-saturated", name: "PRISMRPG.Status.Saturated", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-invisible", name: "PRISMRPG.Status.Invisible", icon: "icons/svg/invisible.svg", category: "imbuement", typing: "magic" }, { id: "imb-invisible", name: "PRISMRPG.Status.Invisible", img: "icons/svg/invisible.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-enchanted", name: "PRISMRPG.Status.Enchanted", icon: "icons/svg/mage-shield.svg", category: "imbuement", typing: "magic" }, { id: "imb-enchanted", name: "PRISMRPG.Status.Enchanted", img: "icons/svg/mage-shield.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-heroism", name: "PRISMRPG.Status.Heroism", icon: "icons/svg/upgrade.svg", category: "imbuement", typing: "magic" }, { id: "imb-heroism", name: "PRISMRPG.Status.Heroism", img: "icons/svg/upgrade.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-mana-drain", name: "PRISMRPG.Status.ManaDrain", icon: "icons/svg/regen.svg", category: "imbuement", typing: "magic" }, { id: "imb-mana-drain", name: "PRISMRPG.Status.ManaDrain", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-fury", name: "PRISMRPG.Status.Fury", icon: "icons/svg/fire.svg", category: "imbuement", typing: "magic" }, { id: "imb-fury", name: "PRISMRPG.Status.Fury", img: "icons/svg/fire.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-warded", name: "PRISMRPG.Status.Warded", icon: "icons/svg/holy-shield.svg", category: "imbuement", typing: "magic" }, { id: "imb-warded", name: "PRISMRPG.Status.Warded", img: "icons/svg/holy-shield.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-regeneration", name: "PRISMRPG.Status.Regeneration", icon: "icons/svg/regen.svg", category: "imbuement", typing: "magic" }, { id: "imb-regeneration", name: "PRISMRPG.Status.Regeneration", img: "icons/svg/regen.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
{ id: "imb-haste", name: "PRISMRPG.Status.Haste", icon: "icons/svg/wingfoot.svg", category: "imbuement", typing: "magic" }, { id: "imb-haste", name: "PRISMRPG.Status.Haste", img: "icons/svg/wingfoot.svg", category: "imbuement", group: "imbuements", order: 2, typing: "magic" },
] ]
+1
View File
@@ -19,6 +19,7 @@ export default class PrismRPGArmor extends foundry.abstract.TypeDataModel {
schema.augment = new fields.StringField({ required: false, initial: "", label: "Armor Augment" }) schema.augment = new fields.StringField({ required: false, initial: "", label: "Armor Augment" })
schema.augmentDescription = new fields.HTMLField({ required: false, textSearch: true, label: "Augment Description" }) schema.augmentDescription = new fields.HTMLField({ required: false, textSearch: true, label: "Augment Description" })
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.equipped = new fields.BooleanField({ required: true, initial: false }) schema.equipped = new fields.BooleanField({ required: true, initial: false })
schema.isHelmet = new fields.BooleanField({ required: true, initial: false }) schema.isHelmet = new fields.BooleanField({ required: true, initial: false })
+1
View File
@@ -7,6 +7,7 @@ export default class PrismRPGConsumable extends foundry.abstract.TypeDataModel {
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.usesMax = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }) schema.usesMax = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.uses = new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }) schema.uses = new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 })
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.notes = new fields.HTMLField({ required: true }) schema.notes = new fields.HTMLField({ required: true })
+1
View File
@@ -9,6 +9,7 @@ export default class PrismRPGEquipment extends foundry.abstract.TypeDataModel {
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.category = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.EQUIPMENT_CATEGORIES }) schema.category = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.EQUIPMENT_CATEGORIES })
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY }) schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY })
+1
View File
@@ -5,6 +5,7 @@ export default class PrismRPGLoot extends foundry.abstract.TypeDataModel {
const schema = {} const schema = {}
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.notes = new fields.HTMLField({ required: true }) schema.notes = new fields.HTMLField({ required: true })
+1
View File
@@ -59,6 +59,7 @@ export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
}) })
// Equipment properties // Equipment properties
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY }) schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY })
+1
View File
@@ -122,6 +122,7 @@ export default class PrismRPGWeapon extends foundry.abstract.TypeDataModel {
defenseBonus: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) defenseBonus: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
}) })
schema.quantity = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.encLoad = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY }) schema.money = new fields.StringField({ required: true, initial: "coppercoin", choices: SYSTEM.MONEY })
+40 -6
View File
@@ -90,7 +90,7 @@ Hooks.once("init", function () {
// Status Effects — Afflictions & Imbuements // Status Effects — Afflictions & Imbuements
CONFIG.statusEffects = [ CONFIG.statusEffects = [
{ id: "dead", name: "EFFECT.StatusDead", icon: "icons/svg/skull.svg" }, { id: "dead", name: "EFFECT.StatusDead", img: "icons/svg/skull.svg" },
...AFFLICTIONS, ...AFFLICTIONS,
...IMBUEMENTS, ...IMBUEMENTS,
] ]
@@ -280,18 +280,52 @@ Hooks.on("updateCombat", async (combat, change, _options, _userId) => {
}) })
/** /**
* Inject a visual separator between Afflictions and Imbuements in the Token HUD status tray * Inject a visual separator between Afflictions and Imbuements in the Token HUD status tray.
* Supports V11 (jQuery html, .palette.status-effects), V12 (.token-hud .status-effects),
* and V14+ (ApplicationV2, possible restructured DOM).
*/ */
Hooks.on("renderTokenHUD", (_app, html) => { function _injectStatusSeparator(root) {
const tray = html.querySelector(".status-effects") const tray = (
if (!tray) return root.querySelector(".status-effects")
|| root.querySelector(".palette.status-effects")
|| root.querySelector("[data-application-part='status-effects']")
|| root.querySelector("section.status-effects")
|| (root.id === "token-hud" && root.querySelector(".status-effects"))
)
if (!tray) return false
const firstImb = tray.querySelector("[data-status-id^='imb-']") const firstImb = tray.querySelector("[data-status-id^='imb-']")
if (!firstImb) return if (!firstImb) return false
if (tray.querySelector(".status-separator")) return true
const sep = document.createElement("div") const sep = document.createElement("div")
sep.className = "status-separator" sep.className = "status-separator"
firstImb.before(sep) firstImb.before(sep)
return true
}
Hooks.on("renderTokenHUD", (app, html) => {
const root = html instanceof jQuery ? html[0] : html
console.log("PRISM HUD hook", {id: root?.id, class: root?.className, trayFound: !!root?.querySelector?.(".status-effects")})
_injectStatusSeparator(root)
}) })
// V14 may render effects asynchronously / swap them without re-triggering
// renderTokenHUD; use a MutationObserver on #token-hud as safety net
{
let observed = false
const obs = new MutationObserver((mutations, self) => {
const hud = document.getElementById("token-hud")
if (!hud) return
if (!observed) {
observed = true
// once the HUD exists, watch its subtree for dynamic effect swaps
const inner = new MutationObserver(() => _injectStatusSeparator(hud))
inner.observe(hud, { childList: true, subtree: true })
_injectStatusSeparator(hud)
}
})
obs.observe(document.body, { childList: true, subtree: true })
}
/** /**
* Create a macro when dropping an entity on the hotbar * Create a macro when dropping an entity on the hotbar
* Item - open roll dialog * Item - open roll dialog
+36
View File
@@ -648,6 +648,24 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.inv-qty {
display: flex;
align-items: center;
gap: 2px;
font-size: 11px;
min-width: 48px;
justify-content: center;
a {
font-size: 9px;
cursor: pointer;
color: rgba(0,0,0,0.4);
&:hover { color: rgba(0,0,0,0.8); }
}
span {
min-width: 16px;
text-align: center;
}
}
.inv-enc, .inv-uses, .inv-capacity { .inv-enc, .inv-uses, .inv-capacity {
font-size: 11px; font-size: 11px;
color: #555; color: #555;
@@ -710,6 +728,24 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.inv-qty {
display: flex;
align-items: center;
gap: 2px;
font-size: 10px;
min-width: 40px;
justify-content: center;
a {
font-size: 8px;
cursor: pointer;
color: rgba(0,0,0,0.4);
&:hover { color: rgba(0,0,0,0.8); }
}
span {
min-width: 14px;
text-align: center;
}
}
.inv-enc { .inv-enc {
font-size: 10px; font-size: 10px;
color: #555; color: #555;
+2 -4
View File
@@ -624,14 +624,12 @@
} }
// Token HUD — separator between Afflictions and Imbuements // Token HUD — separator between Afflictions and Imbuements
.palette.status-effects { .status-separator {
.status-separator {
grid-column: 1 / -1; grid-column: 1 / -1;
display: block;
width: 100%; width: 100%;
height: 2px; height: 2px;
border: none; border: none;
border-top: 2px solid rgba(255, 255, 255, 0.35); border-top: 2px solid rgba(255, 255, 255, 0.35);
margin: 5px 0; margin: 5px 0;
position: relative;
}
} }
+8
View File
@@ -46,6 +46,14 @@
label="PRISMRPG.Label.mrr" label="PRISMRPG.Label.mrr"
}} }}
{{! Quantity }}
{{formField
systemFields.quantity
value=system.quantity
localize=true
label="PRISMRPG.Label.quantity"
}}
{{! Encumbrance Load }} {{! Encumbrance Load }}
{{formField {{formField
systemFields.encLoad systemFields.encLoad
+42 -7
View File
@@ -33,7 +33,12 @@
<div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
@@ -60,7 +65,12 @@
<div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
@@ -86,8 +96,13 @@
<div class="inv-item inv-consumable" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item inv-consumable" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-uses" data-tooltip="{{localize 'PRISMRPG.Tooltip.uses'}}">{{item.system.uses}}/{{item.system.usesMax}}</div> <div class="inv-uses" data-tooltip="{{localize 'PRISMRPG.Tooltip.uses'}}">{{item.system.uses}}/{{item.system.usesMax}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.useConsumable'}}" data-action="useConsumable" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" {{#unless item.system.uses}}aria-disabled="true" class="disabled"{{/unless}}><i class="fas fa-flask"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.useConsumable'}}" data-action="useConsumable" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" {{#unless item.system.uses}}aria-disabled="true" class="disabled"{{/unless}}><i class="fas fa-flask"></i></a>
@@ -111,7 +126,12 @@
<div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
@@ -137,7 +157,12 @@
<div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name" data-tooltip="{{{item.system.description}}}">{{item.name}}</div> <div class="inv-name" data-tooltip="{{{item.system.description}}}">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.toggleEquipped'}}" data-action="toggleEquipped" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
@@ -163,7 +188,12 @@
<div class="inv-item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="inv-item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.assignToContainer'}}" data-action="assignToContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-bag-shopping"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
@@ -203,7 +233,12 @@
<span class="inv-container-type-badge">{{item.type}}</span> <span class="inv-container-type-badge">{{item.type}}</span>
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" data-action="postItemToChat" />
<div class="inv-name">{{item.name}}</div> <div class="inv-name">{{item.name}}</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{item.system.encLoad}}</div> <div class="inv-qty">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityMinus'}}" data-action="quantityMinus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-minus"></i></a>
<span>{{item.system.quantity}}</span>
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.quantityPlus'}}" data-action="quantityPlus" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-plus"></i></a>
</div>
<div class="inv-enc" data-tooltip="{{localize 'PRISMRPG.Label.encLoad'}}">{{mul item.system.encLoad item.system.quantity}}</div>
<div class="controls"> <div class="controls">
<a data-tooltip="{{localize 'PRISMRPG.Tooltip.removeFromContainer'}}" data-action="removeFromContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-arrow-up-from-bracket"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Tooltip.removeFromContainer'}}" data-action="removeFromContainer" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-arrow-up-from-bracket"></i></a>
<a data-tooltip="{{localize 'PRISMRPG.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> <a data-tooltip="{{localize 'PRISMRPG.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
+1 -4
View File
@@ -324,13 +324,10 @@
<div class="burden-mr-item"> <div class="burden-mr-item">
<div class="burden-display-row"> <div class="burden-display-row">
<div class="burden-label" data-tooltip="{{localize 'PRISMRPG.Tooltip.burdenCharacter'}}">BURDEN</div> <div class="burden-label" data-tooltip="{{localize 'PRISMRPG.Tooltip.burdenCharacter'}}">BURDEN</div>
<div class="burden-used-max {{#if excessBurden}}burden-overloaded{{/if}}"> <div class="burden-used-max {{#if excessBurden}}burden-overloaded{{/if}}" {{#if excessBurden}}data-tooltip="{{localize 'PRISMRPG.Tooltip.excessBurden'}}"{{/if}}>
<span class="burden-used">{{burdenUsed}}</span> <span class="burden-used">{{burdenUsed}}</span>
<span class="burden-separator">/</span> <span class="burden-separator">/</span>
<span class="burden-max">{{burdenMax}}</span> <span class="burden-max">{{burdenMax}}</span>
{{#if excessBurden}}
<span class="burden-excess" data-tooltip="{{localize 'PRISMRPG.Tooltip.excessBurden'}}">(-{{excessBurden}} MR)</span>
{{/if}}
</div> </div>
</div> </div>
{{#if isEditMode}} {{#if isEditMode}}
+1
View File
@@ -16,6 +16,7 @@
<legend>{{localize "PRISMRPG.Label.consumable"}}</legend> <legend>{{localize "PRISMRPG.Label.consumable"}}</legend>
{{formField systemFields.usesMax value=system.usesMax localize=true}} {{formField systemFields.usesMax value=system.usesMax localize=true}}
{{formField systemFields.uses value=system.uses localize=true}} {{formField systemFields.uses value=system.uses localize=true}}
{{formField systemFields.quantity value=system.quantity localize=true}}
{{formField systemFields.encLoad value=system.encLoad localize=true}} {{formField systemFields.encLoad value=system.encLoad localize=true}}
{{formField systemFields.cost value=system.cost localize=true}} {{formField systemFields.cost value=system.cost localize=true}}
</fieldset> </fieldset>
+1
View File
@@ -19,6 +19,7 @@
{{! Onglet Details }} {{! Onglet Details }}
<div class="tab {{tabs.details.cssClass}}" data-group="primary" data-tab="details"> <div class="tab {{tabs.details.cssClass}}" data-group="primary" data-tab="details">
{{formField systemFields.quantity value=system.quantity localize=true}}
{{formField systemFields.encLoad value=system.encLoad localize=true}} {{formField systemFields.encLoad value=system.encLoad localize=true}}
{{formField systemFields.cost value=system.cost localize=true}} {{formField systemFields.cost value=system.cost localize=true}}
{{formField systemFields.money value=system.money localize=true}} {{formField systemFields.money value=system.money localize=true}}
+1
View File
@@ -14,6 +14,7 @@
<div class="tab {{tabs.details.cssClass}}" data-group="primary" data-tab="details"> <div class="tab {{tabs.details.cssClass}}" data-group="primary" data-tab="details">
<fieldset> <fieldset>
<legend>{{localize "PRISMRPG.Label.loot"}}</legend> <legend>{{localize "PRISMRPG.Label.loot"}}</legend>
{{formField systemFields.quantity value=system.quantity localize=true}}
{{formField systemFields.encLoad value=system.encLoad localize=true}} {{formField systemFields.encLoad value=system.encLoad localize=true}}
{{formField systemFields.cost value=system.cost localize=true}} {{formField systemFields.cost value=system.cost localize=true}}
</fieldset> </fieldset>
+7
View File
@@ -68,6 +68,13 @@
<div class="align-top"> <div class="align-top">
{{formField
systemFields.quantity
value=system.quantity
localize=true
label="PRISMRPG.Label.quantity"
}}
{{formField {{formField
systemFields.encLoad systemFields.encLoad
value=system.encLoad value=system.encLoad
+7
View File
@@ -92,6 +92,13 @@
label="PRISMRPG.Label.reloadAPC" label="PRISMRPG.Label.reloadAPC"
}} }}
{{formField
systemFields.quantity
value=system.quantity
localize=true
label="PRISMRPG.Label.quantity"
}}
{{formField {{formField
systemFields.encLoad systemFields.encLoad
value=system.encLoad value=system.encLoad