From be2c1fae3c2ccd785e8d8b7ac3e1cdb7464d492a Mon Sep 17 00:00:00 2001 From: Karmaroms Date: Mon, 29 May 2023 00:32:21 +0200 Subject: [PATCH] update to v11 --- lang/en.json | 88 +++++++++--------- lang/fr.json | 88 +++++++++--------- scripts/config.js | 90 +++++++++---------- .../entities/actors/entityActor-helpers.js | 9 +- scripts/entities/actors/entityActor.js | 2 +- scripts/entities/actors/utilityActor.js | 14 +-- scripts/entities/items/entityItem.js | 2 +- scripts/hooks.js | 6 +- scripts/interface/token.js | 4 +- scripts/rolls/roll-dialog.js | 4 +- scripts/system/effectsList.js | 48 ++++++++++ scripts/system/vision.js | 4 +- system.json | 14 ++- 13 files changed, 220 insertions(+), 153 deletions(-) diff --git a/lang/en.json b/lang/en.json index ae70791d..cbc401b4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,45 +1,51 @@ { - "ACTOR.TypeActoragent": "Agent", - "ACTOR.TypeActordevice": "Device", - "ACTOR.TypeActordrone": "Drone or Vehicle", - "ACTOR.TypeActorgrunt": "Grunt or Creature", - "ACTOR.TypeActorpc": "Character (PC, NPC, or Free Spirit)", - "ACTOR.TypeActorspirit": "Bound Spirit", - "ACTOR.TypeActorsprite": "Sprite", - "ITEM.TypeItemadeptpower": "Adept Power", - "ITEM.TypeItemammunition": "Ammunition", - "ITEM.TypeItemarmor": "Armor", - "ITEM.TypeItemaugmentation": "Augmentation", - "ITEM.TypeItemcomplexform": "Complex Form", - "ITEM.TypeItemcontact": "Contact", - "ITEM.TypeItemdevice": "Device (Commlink, deck...)", - "ITEM.TypeItemdrug": "Drug", - "ITEM.TypeItemecho": "Echo", - "ITEM.TypeItemeffect": "Effect", - "ITEM.TypeItemfocus": "Focus", - "ITEM.TypeItemgear": "Gear", - "ITEM.TypeItemkarma": "Karma (Reward or Advancement)", - "ITEM.TypeItemknowledge": "Knowledge Skill", - "ITEM.TypeItemlanguage": "Language", - "ITEM.TypeItemlifestyle": "Lifestyle", - "ITEM.TypeItemmark": "Mark", - "ITEM.TypeItemmartialart": "Martial Art", - "ITEM.TypeItemmetamagic": "Metamagic", - "ITEM.TypeItemnuyen": "Nuyen (Gain or Spending)", - "ITEM.TypeItempower": "Power", - "ITEM.TypeItempreparation": "Preparation", - "ITEM.TypeItemprogram": "Program", - "ITEM.TypeItemquality": "Quality", - "ITEM.TypeItemritual": "Ritual", - "ITEM.TypeItemsin": "SIN", - "ITEM.TypeItemspell": "Spell", - "ITEM.TypeItemspirit": "Spirit", - "ITEM.TypeItemsprite": "Sprite", - "ITEM.TypeItemspritepower": "Sprite Power", - "ITEM.TypeItemtradition": "Tradition", - "ITEM.TypeItemvehicle": "Vehicle", - "ITEM.TypeItemvehiclemod": "Vehicle Modification", - "ITEM.TypeItemweapon": "Weapon", + "TYPES": { + "Actor":{ + "actorAgent": "Agent", + "actorDevice": "Device", + "actorDrone": "Drone or Vehicle", + "actorGrunt": "Grunt or Creature", + "actorPc": "Character (PC, NPC, or Free Spirit)", + "actorSpirit": "Spirit", + "actorSprite": "Sprite" + }, + "Item":{ + "itemAdeptPower": "Adept Power", + "itemAmmunition": "Ammunition", + "itemArmor": "Armor", + "itemAugmentation": "Augmentation", + "itemComplexForm": "Complex Form", + "itemContact": "Contact", + "itemDevice": "Device (Commlink, deck...)", + "itemDrug": "Drug", + "itemEcho": "Echo", + "itemEffect": "Effect", + "itemFocus": "Focus", + "itemGear": "Gear", + "itemKarma": "Karma (Reward or Advancement)", + "itemKnowledge": "Knowledge Skill", + "itemLanguage": "Language", + "itemLifestyle": "Lifestyle", + "itemMark": "Mark", + "itemMartialArt": "Martial Art", + "itemMetamagic": "Metamagic", + "itemNuyen": "Nuyen (Gain or Spending)", + "itemPower": "Power", + "itemPreparation": "Preparation", + "itemProgram": "Program", + "itemQuality": "Quality", + "itemRitual": "Ritual", + "itemSin": "SIN", + "itemSpell": "Spell", + "itemSpirit": "Spirit", + "itemSprite": "Sprite", + "itemSpritePower": "Sprite Power", + "itemTradition": "Tradition", + "itemVehicle": "Vehicle", + "itemVehicleMod": "Vehicle Modification", + "itemWeapon": "Weapon" + } + }, "SOURCE.AssassinPrimer": "Assassin's Primer", "SOURCE.BetterThanBad": "Better Than Bad", "SOURCE.BulletsAndBandages": "Bullets & Bandages", diff --git a/lang/fr.json b/lang/fr.json index 3724a528..2b73d4b2 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1,45 +1,51 @@ { - "ACTOR.TypeActoragent": "Agent", - "ACTOR.TypeActordevice": "Appareil", - "ACTOR.TypeActordrone": "Drone ou véhicule", - "ACTOR.TypeActorgrunt": "Brute ou créature", - "ACTOR.TypeActorpc": "Personnage", - "ACTOR.TypeActorspirit": "Esprit", - "ACTOR.TypeActorsprite": "Sprite", - "ITEM.TypeItemadeptpower": "Pouvoir d'adepte", - "ITEM.TypeItemammunition": "Munition", - "ITEM.TypeItemarmor": "Armure", - "ITEM.TypeItemaugmentation": "Augmentation", - "ITEM.TypeItemcomplexform": "Forme Complexe", - "ITEM.TypeItemcontact": "Contact", - "ITEM.TypeItemdevice": "Appareil (Commlink, console de rigger, cyberdeck ou persona incarné)", - "ITEM.TypeItemdrug": "Drogue", - "ITEM.TypeItemecho": "Écho", - "ITEM.TypeItemeffect": "Effet", - "ITEM.TypeItemfocus": "Focus", - "ITEM.TypeItemgear": "Équipement", - "ITEM.TypeItemkarma": "Karma (gain ou dépense)", - "ITEM.TypeItemknowledge": "Compétence de connaissance", - "ITEM.TypeItemlanguage": "Langue", - "ITEM.TypeItemlifestyle": "Style de vie", - "ITEM.TypeItemmark": "Mark", - "ITEM.TypeItemmartialart": "Art martial", - "ITEM.TypeItemmetamagic": "Métamagie", - "ITEM.TypeItemnuyen": "Nuyen (gain ou dépense)", - "ITEM.TypeItempower": "Pouvoir", - "ITEM.TypeItempreparation": "Préparation", - "ITEM.TypeItemprogram": "Programme", - "ITEM.TypeItemquality": "Trait", - "ITEM.TypeItemritual": "Rituel", - "ITEM.TypeItemsin": "SIN", - "ITEM.TypeItemspell": "Sort", - "ITEM.TypeItemspirit": "Esprit", - "ITEM.TypeItemsprite": "Sprite", - "ITEM.TypeItemspritepower": "Pouvoir de Sprite", - "ITEM.TypeItemtradition": "Tradition", - "ITEM.TypeItemvehicle": "Véhicule", - "ITEM.TypeItemvehiclemod": "Modification de véhicule", - "ITEM.TypeItemweapon": "Arme", + "TYPES": { + "Actor":{ + "actorAgent": "Agent", + "actorDevice": "Appareil", + "actorDrone": "Drone ou véhicule", + "actorGrunt": "Brute ou créature", + "actorPc": "Personnage", + "actorSpirit": "Esprit", + "actorSprite": "Sprite" + }, + "Item":{ + "itemAdeptPower": "Pouvoir d'adepte", + "itemAmmunition": "Munition", + "itemArmor": "Armure", + "itemAugmentation": "Augmentation", + "itemComplexForm": "Forme Complexe", + "itemContact": "Contact", + "itemDevice": "Appareil (Commlink, console de rigger, cyberdeck ou persona incarné)", + "itemDrug": "Drogue", + "itemEcho": "Écho", + "itemEffect": "Effet", + "itemFocus": "Focus", + "itemGear": "Équipement", + "itemKarma": "Karma (gain ou dépense)", + "itemKnowledge": "Compétence de connaissance", + "itemLanguage": "Langue", + "itemLifestyle": "Style de vie", + "itemMark": "Mark", + "itemMartialArt": "Art martial", + "itemMetamagic": "Métamagie", + "itemNuyen": "Nuyen (gain ou dépense)", + "itemPower": "Pouvoir", + "itemPreparation": "Préparation", + "itemProgram": "Programme", + "itemQuality": "Trait", + "itemRitual": "Rituel", + "itemSin": "SIN", + "itemSpell": "Sort", + "itemSpirit": "Esprit", + "itemSprite": "Sprite", + "itemSpritePower": "Pouvoir de Sprite", + "itemTradition": "Tradition", + "itemVehicle": "Véhicule", + "itemVehicleMod": "Modification de véhicule", + "itemWeapon": "Arme" + } + }, "SOURCE.AssassinPrimer": "Manuel de l'assassin (VF)", "SOURCE.BetterThanBad": "Better Than Bad (VO)", "SOURCE.BulletsAndBandages": "Balles & Pansements (VF)", diff --git a/scripts/config.js b/scripts/config.js index a60f8e15..fa0d797b 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -3220,11 +3220,11 @@ SR5.effectTypes = { signalJam : "SR5.EffectSignalJam", signalJammed : "SR5.EffectSignalJammed", linkLock : "SR5.EffectLinkLockedConnection", - itemComplexForm : "ITEM.TypeItemcomplexform", - itemSpell : "ITEM.TypeItemspell", - itemAdeptPower : "ITEM.TypeItemadeptpower", - itemPreparation : "ITEM.TypeItempreparation", - itemPower : "ITEM.TypeItempower", + itemComplexForm : "TYPES.Item.itemComplexForm", + itemSpell : "TYPES.Item.itemSpell", + itemAdeptPower : "TYPES.Item.itemAdeptPower", + itemPreparation : "TYPES.Item.itemPreparation", + itemPower : "TYPES.Item.itemPower", derezz : "SR5.Derezz", toxinEffect : "SR5.Toxin", toxinEffectDisorientation : "SR5.ToxinEffectDisorientation", @@ -3482,39 +3482,39 @@ SR5.barrierTypes = { //-----------------------------------// SR5.itemTypes = { - itemAdeptPower : "ITEM.TypeItemadeptpower", - itemArmor : "ITEM.TypeItemarmor", - itemAugmentation : "ITEM.TypeItemaugmentation", - itemAmmunition : "ITEM.TypeItemammunition", - itemComplexForm : "ITEM.TypeItemcomplexform", - itemContact : "ITEM.TypeItemcontact", - itemDevice : "ITEM.TypeItemdevice", - itemEcho : "ITEM.TypeItemecho", - itemEffect : "ITEM.TypeItemeffect", - itemFocus : "ITEM.TypeItemfocus", - itemGear : "ITEM.TypeItemgear", - itemKarma : "ITEM.TypeItemkarma", - itemKnowledge : "ITEM.TypeItemknowledge", - itemLanguage : "ITEM.TypeItemlanguage", - itemLifestyle : "ITEM.TypeItemlifestyle", - itemMark : "ITEM.TypeItemmark", - itemMartialArt : "ITEM.TypeItemmartialart", - itemMetamagic : "ITEM.TypeItemmetamagic", - itemNuyen : "ITEM.TypeItemnuyen", - itemPower : "ITEM.TypeItempower", - itemPreparation : "ITEM.TypeItempreparation", - itemProgram : "ITEM.TypeItemprogram", - itemQuality : "ITEM.TypeItemquality", - itemRitual : "ITEM.TypeItemritual", - itemSin : "ITEM.TypeItemsin", - itemSpell : "ITEM.TypeItemspell", - itemSpirit : "ITEM.TypeItemspirit", - itemSprite : "ITEM.TypeItemsprite", - itemSpritePower : "ITEM.TypeItemspritepower", - itemTradition : "ITEM.TypeItemtradition", - itemVehicle : "ITEM.TypeItemvehicle", - itemVehicleMod : "ITEM.TypeItemvehiclemod", - itemWeapon : "ITEM.TypeItemweapon", + itemAdeptPower : "TYPES.Item.itemAdeptPower", + itemArmor : "TYPES.Item.itemArmor", + itemAugmentation : "TYPES.Item.itemAugmentation", + itemAmmunition : "TYPES.Item.itemAmmunition", + itemComplexForm : "TYPES.Item.itemComplexForm", + itemContact : "TYPES.Item.itemContact", + itemDevice : "TYPES.Item.itemDevice", + itemEcho : "TYPES.Item.itemEcho", + itemEffect : "TYPES.Item.itemEffect", + itemFocus : "TYPES.Item.itemFocus", + itemGear : "TYPES.Item.itemGear", + itemKarma : "TYPES.Item.itemKarma", + itemKnowledge : "TYPES.Item.itemKnowledge", + itemLanguage : "TYPES.Item.itemLanguage", + itemLifestyle : "TYPES.Item.itemLifestyle", + itemMark : "TYPES.Item.itemMark", + itemMartialArt : "TYPES.Item.itemMartialArt", + itemMetamagic : "TYPES.Item.itemMetamagic", + itemNuyen : "TYPES.Item.itemNuyen", + itemPower : "TYPES.Item.itemPower", + itemPreparation : "TYPES.Item.itemPreparation", + itemProgram : "TYPES.Item.itemProgram", + itemQuality : "TYPES.Item.itemQuality", + itemRitual : "TYPES.Item.itemRitual", + itemSin : "TYPES.Item.itemSin", + itemSpell : "TYPES.Item.itemSpell", + itemSpirit : "TYPES.Item.itemSpirit", + itemSprite : "TYPES.Item.itemSprite", + itemSpritePower : "TYPES.Item.itemSpritePower", + itemTradition : "TYPES.Item.itemTradition", + itemVehicle : "TYPES.Item.itemVehicle", + itemVehicleMod : "TYPES.Item.itemVehicleMod", + itemWeapon : "TYPES.Item.itemWeapon", }; //-----------------------------------// @@ -3522,13 +3522,13 @@ SR5.itemTypes = { //-----------------------------------// SR5.actorTypes = { - actorDevice : "ACTOR.TypeActordevice", - actorDrone : "ACTOR.TypeActordrone", - actorGrunt : "ACTOR.TypeActorgrunt", - actorPc : "ACTOR.TypeActorpc", - actorSpirit : "ACTOR.TypeActorspirit", - actorSprite : "ACTOR.TypeActorsprite", - actorAgent : "ACTOR.TypeActoragent", + actorDevice : "TYPES.Actor.actorDevice", + actorDrone : "TYPES.Actor.actorDrone", + actorGrunt : "TYPES.Actor.actorGrunt", + actorPc : "TYPES.Actor.actorPc", + actorSpirit : "TYPES.Actor.actorSpirit", + actorSprite : "TYPES.Actor.actorSprite", + actorAgent : "TYPES.Actor.actorAgent", }; //-----------------------------------// diff --git a/scripts/entities/actors/entityActor-helpers.js b/scripts/entities/actors/entityActor-helpers.js index 3517d745..3e8cf74f 100644 --- a/scripts/entities/actors/entityActor-helpers.js +++ b/scripts/entities/actors/entityActor-helpers.js @@ -151,7 +151,7 @@ export class SR5_ActorHelper { actorData = actor.system; for (let e of actor.effects){ - if (e.flags.core?.statusId === "prone") return; + if (e.statuses.has("prone")) return; } //Currently, if duration is null, prone is comming from Damage @@ -172,6 +172,7 @@ export class SR5_ActorHelper { "system.value": 0, "system.durationType": duration.type, "system.duration": duration.duration, + "system.statuses": ["prone"] } let statusEffect = await _getSRStatusEffect("prone"); @@ -185,9 +186,9 @@ export class SR5_ActorHelper { //Handle death effect static async createDeadEffect(actorId){ - let actor = SR5_EntityHelpers.getRealActorFromID(actorId); + let actor = SR5_EntityHelpers.getRealActorFromID(actorId); for (let e of actor.effects){ - if (e.flags.core?.statusId === "dead") return; + if (e.statuses === "dead") return; } let effect = await _getSRStatusEffect("dead"); await actor.createEmbeddedDocuments('ActiveEffect', [effect]); @@ -198,7 +199,7 @@ export class SR5_ActorHelper { static async createKoEffect(actorId){ let actor = SR5_EntityHelpers.getRealActorFromID(actorId); for (let e of actor.effects){ - if (e.flags.core?.statusId === "unconscious") return; + if (e.statuses === "unconscious") return; } let effect = await _getSRStatusEffect("unconscious") await actor.createEmbeddedDocuments('ActiveEffect', [effect]); diff --git a/scripts/entities/actors/entityActor.js b/scripts/entities/actors/entityActor.js index d2674afe..fe89ec06 100644 --- a/scripts/entities/actors/entityActor.js +++ b/scripts/entities/actors/entityActor.js @@ -21,7 +21,7 @@ export class SR5Actor extends Actor { // Collect data const documentName = this.metadata.name; - const hiddenTypes = ["actorAgent"]; + const hiddenTypes = ["actorAgent", "base"]; const originalTypes = game.system.documentTypes[documentName]; const types = originalTypes.filter((actorType) => !hiddenTypes.includes(actorType)); const folders = parent ? [] : game.folders.filter(f => (f.type === documentName) && f.displayed); diff --git a/scripts/entities/actors/utilityActor.js b/scripts/entities/actors/utilityActor.js index 69573875..14b3dd9b 100644 --- a/scripts/entities/actors/utilityActor.js +++ b/scripts/entities/actors/utilityActor.js @@ -1626,17 +1626,17 @@ export class SR5_CharacterUtility extends Actor { case "actorSprite": SR5_EntityHelpers.updateModifier(initMat, game.i18n.localize('SR5.Level'), "linkedAttribute", actorData.level); SR5_EntityHelpers.updateModifier(initMat, game.i18n.localize('SR5.DataProcessing'), "linkedAttribute", matrixAttributes.dataProcessing.value); - SR5_EntityHelpers.updateModifier(initMat.dice, game.i18n.localize(SR5.spriteTypes[actorData.type]), `${game.i18n.localize('ACTOR.TypeActorsprite')}`, 4); + SR5_EntityHelpers.updateModifier(initMat.dice, game.i18n.localize(SR5.spriteTypes[actorData.type]), `${game.i18n.localize('TYPES.Actor.actorsprite')}`, 4); break; case "actorAgent": SR5_EntityHelpers.updateModifier(initMat,`${game.i18n.localize('SR5.Rating')}`, "linkedAttribute", actorData.rating); SR5_EntityHelpers.updateModifier(initMat, `${game.i18n.localize('SR5.DataProcessing')}`, "linkedAttribute", matrixAttributes.dataProcessing.value); - SR5_EntityHelpers.updateModifier(initMat.dice, game.i18n.localize(SR5.spriteTypes[actorData.type]), `${game.i18n.localize('ACTOR.TypeActoragent')}`, 4); + SR5_EntityHelpers.updateModifier(initMat.dice, game.i18n.localize(SR5.spriteTypes[actorData.type]), `${game.i18n.localize('TYPES.Actor.actoragent')}`, 4); break; case "actorDevice": SR5_EntityHelpers.updateModifier(initMat,`${game.i18n.localize('SR5.DeviceRating')}`, "linkedAttribute", actorData.matrix.deviceRating); SR5_EntityHelpers.updateModifier(initMat,`${game.i18n.localize('SR5.DataProcessing')}`, "linkedAttribute", matrixAttributes.dataProcessing.value); - SR5_EntityHelpers.updateModifier(initMat.dice, `${game.i18n.localize(SR5.deviceTypes[actorData.matrix.deviceType])}`, `${game.i18n.localize('ACTOR.TypeActordevice')}`, 4); + SR5_EntityHelpers.updateModifier(initMat.dice, `${game.i18n.localize(SR5.deviceTypes[actorData.matrix.deviceType])}`, `${game.i18n.localize('TYPES.Actor.actordevice')}`, 4); break; default: SR5_SystemHelpers.srLog(1, `Unknown actor type '${actor.type}' in 'updateInitiativeMatrix()'`); @@ -1661,7 +1661,7 @@ export class SR5_CharacterUtility extends Actor { // Switch Actor To New Initiative static async switchToInitiative(entity, initiative) { let actor; - if (entity.token) actor = entity.token.getActor(); + if (entity.token) actor = entity.token.actor; else actor = entity; let actorData = duplicate(actor.system), @@ -3845,9 +3845,9 @@ export class SR5_CharacterUtility extends Actor { SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, item.name, "deviceRating", actorData.matrix.deviceRating); SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, game.i18n.localize('SR5.Firewall'), "matrixAttribute", actorData.matrix.attributes.firewall.value); } else if (actor.type === "actorSprite"){ - SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, game.i18n.localize('ACTOR.TypeActorsprite'), "level", matrix.deviceRating); + SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, game.i18n.localize('TYPES.Actor.actorsprite'), "level", matrix.deviceRating); SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, game.i18n.localize('SR5.Firewall'), "matrixAttribute", matrixAttributes.firewall.value); - SR5_EntityHelpers.updateModifier(matrixResistances.dataBomb, game.i18n.localize('ACTOR.TypeActorsprite'), "level", matrix.deviceRating); + SR5_EntityHelpers.updateModifier(matrixResistances.dataBomb, game.i18n.localize('TYPES.Actor.actorsprite'), "level", matrix.deviceRating); SR5_EntityHelpers.updateModifier(matrixResistances.dataBomb, game.i18n.localize('SR5.Firewall'), "matrixAttribute", matrixAttributes.firewall.value); } else if (actor.type === "actorAgent"){ SR5_EntityHelpers.updateModifier(matrixResistances.matrixDamage, `${game.i18n.localize('SR5.ProgramTypeAgent')}`, "itemRating", actorData.rating); @@ -4145,7 +4145,7 @@ export class SR5_CharacterUtility extends Actor { } } - static async updateMatrixEffect(actor){ + static async updateMatrixEffect(actor){ let status, isStatusEffectOn, statusEffects = []; isStatusEffectOn = actor.effects.find(e => e.flags.core?.statusId === "matrixInit"); if (!actor.system.isDirectlyConnected) { diff --git a/scripts/entities/items/entityItem.js b/scripts/entities/items/entityItem.js index 0ee375d8..e2dbd27b 100644 --- a/scripts/entities/items/entityItem.js +++ b/scripts/entities/items/entityItem.js @@ -598,7 +598,7 @@ export class SR5Item extends Item { static async createDialog(data={}, {parent=null, pack=null, ...options}={}) { // Collect data const documentName = this.metadata.name; - const hiddenTypes = ["itemKarma", "itemMark", "itemNuyen", "itemEffect", "itemCyberdeck"]; + const hiddenTypes = ["itemKarma", "itemMark", "itemNuyen", "itemEffect", "itemCyberdeck", "base"]; const originalTypes = game.system.documentTypes[documentName]; const types = originalTypes.filter((itemType) => !hiddenTypes.includes(itemType)); const folders = parent ? [] : game.folders.filter(f => (f.type === documentName) && f.displayed); diff --git a/scripts/hooks.js b/scripts/hooks.js index 6d70eb36..02ded3e1 100644 --- a/scripts/hooks.js +++ b/scripts/hooks.js @@ -362,7 +362,7 @@ export const registerHooks = function () { Hooks.on("deleteActiveEffect", async (effect) =>{ if (!game.user.isGM ) return; - if (effect.flags.core?.statusId === "prone"){ + if (effect.statuses.has("prone")){ let itemEffect = effect.parent.items.find(i => i.type === "itemEffect" && i.system.type === "prone"); let actorId = (effect.parent.isToken ? effect.parent.token.id : effect.parent.id); if (itemEffect) await SR5_ActorHelper.deleteItemEffectLinkedToActiveEffect(actorId, itemEffect.id); @@ -373,8 +373,8 @@ export const registerHooks = function () { Hooks.on("createActiveEffect", (effect) =>{ if (!game.user.isGM ) return; let actorId = (effect.parent.isToken ? effect.parent.token.id : effect.parent.id); - if (effect.flags.core?.statusId === "signalJam") SR5_EffectArea.onJamCreation(actorId); - if ((effect.flags.core?.statusId === "cover" || effect.flags.core?.statusId === "coverFull") && game.combat) SR5Combat.changeActionInCombat(actorId, [{type: "simple", value: 1, source: "takeCover"}]); + if (effect.statuses === "signalJam") SR5_EffectArea.onJamCreation(actorId); + if ((effect.statuses === "cover" || effect.statuses === "coverFull") && game.combat) SR5Combat.changeActionInCombat(actorId, [{type: "simple", value: 1, source: "takeCover"}]); }); Hooks.on("createActor", async (actor) =>{ diff --git a/scripts/interface/token.js b/scripts/interface/token.js index 8ed892eb..aadb513e 100644 --- a/scripts/interface/token.js +++ b/scripts/interface/token.js @@ -20,13 +20,13 @@ export class SR5Token extends Token { let h = Math.max(canvas.dimensions.size / 12, 8); if (this.height >= 2) h *= 1.6; // Enlarge the bar for large tokens // Draw the bar - bar.clear().beginFill(PIXI.utils.rgb2hex(subColor), 0.7).lineStyle(0.5, 0x000000, 1); + bar.clear().beginFill(new PIXI.Color(subColor).toNumber(), 0.7).lineStyle(0.5, 0x000000, 1); // each max draw a green rectangle in background for (let index = 0; index < data.max; index++) { bar.drawRect(index * (this.w / data.max), 0, this.w / data.max, h); } // each actual value draw a rectangle from dark green to red - bar.beginFill(PIXI.utils.rgb2hex(mainColor), 0.7).lineStyle(0.5, 0x000000, 1); + bar.beginFill(new PIXI.Color(mainColor).toNumber(), 0.7).lineStyle(0.5, 0x000000, 1); for (let index = 0; index < Math.clamped(val, 0, data.max); index++) { bar.drawRect(index * (this.w / data.max), 0, this.w / data.max, h); } diff --git a/scripts/rolls/roll-dialog.js b/scripts/rolls/roll-dialog.js index a421a7b7..b697fa83 100644 --- a/scripts/rolls/roll-dialog.js +++ b/scripts/rolls/roll-dialog.js @@ -350,8 +350,8 @@ export default class SR5_RollDialog extends Dialog { let actor = SR5_EntityHelpers.getRealActorFromID(this.data.data.owner.actorId), targetActor = SR5_EntityHelpers.getRealActorFromID(dialogData.target.actorId), label, - isProned = actor.effects.find(e => e.origin === "prone"); - + isProned = actor.effects.find(e => e.statuses.has("prone")); + for (let e of checkboxs){ modifierName = $(e).attr("data-modifier"); checkboxName = `[data-modifier=${modifierName}]`; diff --git a/scripts/system/effectsList.js b/scripts/system/effectsList.js index 56a583c0..9e5fccd3 100644 --- a/scripts/system/effectsList.js +++ b/scripts/system/effectsList.js @@ -15,6 +15,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "dead" } }, + statuses: ["dead"] } case "unconscious" : @@ -28,6 +29,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "unconscious" } }, + statuses: ["unconscious"] } case "prone": @@ -41,6 +43,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "prone" } }, + statuses: ["prone"] } case "astralVision": @@ -54,6 +57,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "astralVision" } }, + statuses: ["astralVision"] } case "cover": return effect = { @@ -66,6 +70,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "cover" } }, + statuses: ["cover"] } case "coverFull": return effect = { @@ -78,6 +83,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "coverFull" } }, + statuses: ["coverFull"] } case "fireDamage": return effect = { @@ -90,6 +96,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "fireDamage" } }, + statuses: ["fireDamage"] } case "acidDamage": return effect = { @@ -102,6 +109,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "acidDamage" } }, + statuses: ["acidDamage"] } case "electricityDamage": return effect = { @@ -114,6 +122,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "electricityDamage" } }, + statuses: ["electricityDamage"] } case "anticoagulantDamage": return effect = { @@ -126,6 +135,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "anticoagulantDamage", } }, + statuses: ["anticoagulantDamage"] } case "fullDefense": return effect = { @@ -138,6 +148,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "fullDefense" } }, + statuses: ["fullDefense"] } case "sensorLock": return effect = { @@ -150,6 +161,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "sensorLock" } }, + statuses: ["sensorLock"] } case "linkLock": return effect = { @@ -162,6 +174,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "linkLock" } }, + statuses: ["linkLock"] } case "signalJam": return effect = { @@ -175,6 +188,7 @@ export const _getSRStatusEffect = async function(origin, value) { value: value, } }, + statuses: ["signalJam"] } case "signalJammed": return effect = { @@ -188,6 +202,7 @@ export const _getSRStatusEffect = async function(origin, value) { value: value, } }, + statuses: ["signalJammed"] } case "noAction": return effect = { @@ -201,6 +216,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "noAction", } }, + statuses: ["noAction"] } case "toxinEffectNausea": return effect = { @@ -213,6 +229,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "toxinEffectNausea", } }, + statuses: ["toxinEffectNausea"] } case "toxinEffectDisorientation": return effect = { @@ -225,6 +242,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "toxinEffectDisorientation", } }, + statuses: ["toxinEffectDisorientation"] } case "toxinEffectAgony": return effect = { @@ -237,6 +255,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "toxinEffectAgony", } }, + statuses: ["toxinEffectAgony"] } case "toxinEffectArcaneInhibitor": return effect = { @@ -249,6 +268,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "toxinEffectArcaneInhibitor", } }, + statuses: ["toxinEffectArcaneInhibitor"] } case "astralInit": return effect = { @@ -261,6 +281,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "astralInit", } }, + statuses: ["astralInit"] } case "matrixInit": return effect = { @@ -273,6 +294,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "matrixInit", } }, + statuses: ["matrixInit"] } case "slowed": return effect = { @@ -285,6 +307,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "slowed", } }, + statuses: ["slowed"] } case "winded": return effect = { @@ -297,6 +320,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "winded", } }, + statuses: ["winded"] } case "deafened": return effect = { @@ -309,6 +333,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "deafened", } }, + statuses: ["deafened"] } case "blinded": return effect = { @@ -321,6 +346,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "blinded", } }, + statuses: ["blinded"] } case "brokenGrip": return effect = { @@ -333,6 +359,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "brokenGrip", } }, + statuses: ["brokenGrip"] } case "weakSide": return effect = { @@ -345,6 +372,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "weakSide", } }, + statuses: ["weakSide"] } case "nauseous": return effect = { @@ -357,6 +385,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "nauseous", } }, + statuses: ["nauseous"] } case "buckled": return effect = { @@ -369,6 +398,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "buckled", } }, + statuses: ["buckled"] } case "slowDeath": return effect = { @@ -381,6 +411,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "slowDeath", } }, + statuses: ["slowDeath"] } case "unableToSpeak": return effect = { @@ -393,6 +424,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "unableToSpeak", } }, + statuses: ["unableToSpeak"] } case "bleedOut": return effect = { @@ -405,6 +437,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "bleedOut", } }, + statuses: ["bleedOut"] } case "oneArmBandit": return effect = { @@ -417,6 +450,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "oneArmBandit", } }, + statuses: ["oneArmBandit"] } case "pin": return effect = { @@ -429,6 +463,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "pin", } }, + statuses: ["pin"] } case "dirtyTrick": return effect = { @@ -441,6 +476,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "dirtyTrick", } }, + statuses: ["dirtyTrick"] } case "trickShot": return effect = { @@ -453,6 +489,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "trickShot", } }, + statuses: ["trickShot"] } case "entanglement": return effect = { @@ -465,6 +502,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "entanglement", } }, + statuses: ["entanglement"] } case "antenna": return effect = { @@ -477,6 +515,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "antenna", } }, + statuses: ["antenna"] } case "engineBlock": return effect = { @@ -490,6 +529,7 @@ export const _getSRStatusEffect = async function(origin, value) { overlay: true, } }, + statuses: ["engineBlock"] } case "windowMotor": return effect = { @@ -502,6 +542,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "windowMotor", } }, + statuses: ["windowMotor"] } case "doorLock": return effect = { @@ -514,6 +555,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "doorLock", } }, + statuses: ["doorLock"] } case "axle": return effect = { @@ -526,6 +568,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "axle", } }, + statuses: ["axle"] } case "fuelTankBattery": return effect = { @@ -539,6 +582,7 @@ export const _getSRStatusEffect = async function(origin, value) { overlay: true, } }, + statuses: ["fuelTankBattery"] } case "flared": return effect = { @@ -551,6 +595,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "flared", } }, + statuses: ["flared"] } case "shaked": return effect = { @@ -563,6 +608,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "shaked", } }, + statuses: ["shaked"] } case "onPinsAndNeedles": return effect = { @@ -575,6 +621,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "onPinsAndNeedles", } }, + statuses: ["onPinsAndNeedles"] } case "feint": return effect = { @@ -587,6 +634,7 @@ export const _getSRStatusEffect = async function(origin, value) { statusId: "feint", } }, + statuses: ["feint"] } default: return null } diff --git a/scripts/system/vision.js b/scripts/system/vision.js index 12946d14..85e392c0 100644 --- a/scripts/system/vision.js +++ b/scripts/system/vision.js @@ -14,7 +14,7 @@ export const astralVision = new VisionMode({ uniforms: { exposure: 0.8 } }, coloration: { - postProcessingModes: ["SATURATION", "TINT", "EXPOSURE"], + //postProcessingModes: ["SATURATION", "TINT", "EXPOSURE"], BUG in v11 uniforms: { saturation: -0.75, exposure: 8.0, tint: [0.75, 0.75, 1] } }, levels: { @@ -44,7 +44,7 @@ class DetectionModeBasicSightSR extends DetectionModeBasicSight { const tgt = target?.document; if ((tgt instanceof TokenDocument)) { //check if target has astral effect and hide it if true; - detected = tgt.actor?.effects?.find(e => e.flags.core.statusId === "astralInit"); + detected = tgt.actor?.effects?.find(e => e.statuses.has("astralInit")); return !detected; } else return true; } diff --git a/system.json b/system.json index b5968f42..c6aa2f74 100644 --- a/system.json +++ b/system.json @@ -9,10 +9,10 @@ "flags": {} } ], - "version": "0.1.15", + "version": "11.0.0", "compatibility": { - "minimum": "10", - "verified": "10.291" + "minimum": "11", + "maximum": "11" }, "esmodules": [ "sr5.js" @@ -41,5 +41,11 @@ "background": "systems/sr5/img/launcher.jpg", "initiative": "1d6", "gridDistance": 1, - "gridUnits": "m" + "gridUnits": "m", + "flags": { + "hotReload": { + "extensions": ["css", "html", "hbs", "json", "js"], + "paths": ["templates", "css", "lang", "js"] + } + } } \ No newline at end of file