Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 4 #2017

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions lang/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -1103,6 +1103,18 @@
"GURPS.saveRollforEffect": "Wurf speichern, um Effekte zu vermeiden.",
"GURPS.toDefenseBonus": "zu Verteidigungsbonus",
"GURPS.toDefensePenalty": "zu Verteidigungsabzug",
"GURPS.removedShockEffect": "Schockeffekt in der nächsten Runde entfernt.",
"GURPS.addedShockEffect": "Schockeffekt in der nächsten Runde hinzugefügt."
"GURPS.removeShockAtNextTurnEffect": "Schockeffekt in der nächsten Runde entfernt.",
"GURPS.addShockAtNextTurnEffect": "Schockeffekt in der nächsten Runde hinzugefügt.",
"GURPS.removeShockImmediatelyEffect": "Schockeffekt auf Ziel entfernt.",
"GURPS.addShockImmediatelyEffect": "Schockeffekt auf Ziel hinzugefügt.",
"GURPS.removedShockImmediatelyEffect": "Schockeffekt auf Ziel entfernt.",
"GURPS.addedShockImmediatelyEffect": "Schockeffekt auf Ziel hinzugefügt.",
"GURPS.settingAddShockAtTurn": "Wann der Schockeffekt hinzugefügt wird",
"GURPS.settingHintAddShockAtTurn": "Wann der Schockeffekt auf das Ziel hinzugefügt wird.",
"GURPS.immediately": "Sofort",
"GURPS.atNextTurn": "In der nächsten Runde",
"GURPS.removestunEffect": "Betäubungseffekt auf Ziel entfernt.",
"GURPS.addstunEffect": "Betäubungseffekt auf Ziel hinzugefügt.",
"GURPS.addedShockAtNextTurnEffect": "Schockeffekt in der nächsten Runde hinzugefügt.",
"GURPS.removedShockEffect": "Schockeffekt auf Ziel entfernt."
}
14 changes: 12 additions & 2 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1421,6 +1421,16 @@
"GURPS.saveRollforEffect": "Save Roll to avoid effects",
"GURPS.toDefenseBonus": "to Defense Bonus",
"GURPS.toDefensePenalty": "to Defense Penalty",
"GURPS.removedShockEffect": "Removed Shock effect on next round.",
"GURPS.addedShockEffect": "Added Shock effect on next round."
"GURPS.removeShockAtNextTurnEffect": "Remove Shock effect on next round.",
"GURPS.addShockAtNextTurnEffect": "Add Shock effect on next round.",
"GURPS.removeShockImmediatelyEffect": "Remove Shock effect on target.",
"GURPS.addShockImmediatelyEffect": "Add Shock effect on target.",
"GURPS.settingAddShockAtTurn": "When to add Shock effect",
"GURPS.settingHintAddShockAtTurn": "When to add Shock effect on target.",
"GURPS.immediately": "Immediately",
"GURPS.atNextTurn": "At Next Turn",
"GURPS.removestunEffect": "Remove Stun effect on target.",
"GURPS.addstunEffect": "Add Stun effect on target.",
"GURPS.addedShockAtNextTurnEffect": "Added Shock effect on next round.",
"GURPS.removedShockEffect": "Removed Shock effect on target."
}
13 changes: 12 additions & 1 deletion lang/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -1276,5 +1276,16 @@
"GURPS.toDefenseBonus": "au Bonus de Défense",
"GURPS.toDefensePenalty": "à la Pénalité de Défense",
"GURPS.removedShockEffect": "Effet de choc retiré au tour suivant.",
"GURPS.addedShockEffect": "Effet de choc ajouté au tour suivant."
"GURPS.addedShockEffect": "Effet de choc ajouté au tour suivant.",
"GURPS.removeShockAtNextTurnEffect": "Effet de choc supprimé au prochain tour.",
"GURPS.addShockAtNextTurnEffect": "Effet de choc ajouté au prochain tour.",
"GURPS.removeShockImmediatelyEffect": "Effet de choc supprimé sur la cible.",
"GURPS.addShockImmediatelyEffect": "Effet de choc ajouté sur la cible.",
"GURPS.settingAddShockAtTurn": "Quand ajouter l'effet de choc",
"GURPS.settingHintAddShockAtTurn": "Quand ajouter l'effet de choc sur la cible.",
"GURPS.immediately": "Immédiatement",
"GURPS.atNextTurn": "Au prochain tour",
"GURPS.removestunEffect": "Effet d'étourdissement supprimé sur la cible.",
"GURPS.addstunEffect": "Effet d'étourdissement ajouté sur la cible.",
"GURPS.addedShockAtNextTurnEffect": "Effet de choc ajouté au prochain tour."
}
26 changes: 13 additions & 13 deletions lang/pt_br.json
Original file line number Diff line number Diff line change
Expand Up @@ -1236,18 +1236,7 @@
"GURPS.settingShowConfirmationRollDialog": "Exibir Diálogo de Confirmação de Rolagem",
"GURPS.settingHintShowConfirmationRoll": "Se marcado, o sistema exibirá um diálogo para confirmar a rolagem antes de ser feita.",
"GURPS.confirmRoll": "Confirmação de Rolagem",
"GURPS.quickRollMenu": "Menu de Rolagem Rápida",
"GURPS.settingUseQuickRolls": "Usar Botão de Rolagem Rápida",
"GURPS.settingHintUseQuickRolls": "Quando ativado, o sistema exibirá um botão de Rolagem Rápida no Rastreador de Combate.",
"GURPS.settingLabelUseQuickRolls": "Configuração de Rolagem Rápida",
"GURPS.quickRollUse": "Ativar/Desativar Botão de Rolagem Rápida",
"GURPS.quickRollShowAttributes": "Mostrar Rolagens de Atributos",
"GURPS.quickRollShowOther": "Mostrar Rolagens de Verificações Secundárias",
"GURPS.quickRollShowAttacks": "Mostrar Rolagens de Ataque",
"GURPS.quickRollShowDefenses": "Mostrar Rolagens de Defesa",
"GURPS.quickRollShowMarked": "Mostrar Habilidades e Magias Selecionadas da Ficha de Personagem",
"GURPS.settingAnnounceCriticalRolls": "Anunciar Rolagens Críticas",
"GURPS.quickRollAlwaysBlind": "Sempre fazer Rolagens Ocultas",
"GURPS.settingAnnounceCriticalRolls": "Anunciar Rolagens Críticas",
"GURPS.settingHintAnnounceCriticalRolls": "Se marcado, o sistema anunciará, com animação e som, acertos e falhas críticas. Apenas para jogadores e rolagens não ocultas. Necessita do Sequencer instalado.",
"GURPS.otherTab": "Verificações",
"GURPS.defenseTab": "Defesas",
Expand Down Expand Up @@ -1364,5 +1353,16 @@
"GURPS.toDefenseBonus": "para bônus de defesa",
"GURPS.toDefensePenalty": "de penalidade de defesa",
"GURPS.removedShockEffect": "Efeito de Choque removido do próximo turno.",
"GURPS.addedShockEffect": "Efeito de Choque adicionado no próximo turno."
"GURPS.addedShockEffect": "Efeito de Choque adicionado no próximo turno.",
"GURPS.removeShockAtNextTurnEffect": "Efeito de choque removido na próxima rodada.",
"GURPS.addShockAtNextTurnEffect": "Efeito de choque adicionado na próxima rodada.",
"GURPS.removeShockImmediatelyEffect": "Efeito de choque removido no alvo.",
"GURPS.addShockImmediatelyEffect": "Efeito de choque adicionado no alvo.",
"GURPS.settingAddShockAtTurn": "Quando adicionar o efeito de choque",
"GURPS.settingHintAddShockAtTurn": "Quando adicionar o efeito de choque no alvo.",
"GURPS.immediately": "Imediatamente",
"GURPS.atNextTurn": "Na próxima rodada",
"GURPS.removestunEffect": "Efeito de atordoamento removido no alvo.",
"GURPS.addstunEffect": "Efeito de atordoamento adicionado no alvo.",
"GURPS.addedShockAtNextTurnEffect": "Efeito de choque adicionado na próxima rodada."
}
16 changes: 14 additions & 2 deletions lang/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,18 @@
"GURPS.saveRollforEffect": "Сохранить бросок, чтобы избежать эффектов.",
"GURPS.toDefenseBonus": "Бонус к защите",
"GURPS.toDefensePenalty": "Штраф к защите",
"GURPS.removedShockEffect": "Эффект шока удален в следующем раунде.",
"GURPS.addedShockEffect": "Эффект шока добавлен в следующем раунде."
"GURPS.removeShockAtNextTurnEffect": "Эффект шока удален в следующем раунде.",
"GURPS.addShockAtNextTurnEffect": "Эффект шока добавлен в следующем раунде.",
"GURPS.removeShockImmediatelyEffect": "Эффект шока удален на цели.",
"GURPS.addShockImmediatelyEffect": "Эффект шока добавлен на цели.",
"GURPS.removedShockImmediatelyEffect": "Эффект шока удален на цели.",
"GURPS.addedShockImmediatelyEffect": "Эффект шока добавлен на цели.",
"GURPS.settingAddShockAtTurn": "Когда добавлять эффект шока",
"GURPS.settingHintAddShockAtTurn": "Когда добавлять эффект шока на цели.",
"GURPS.immediately": "Немедленно",
"GURPS.atNextTurn": "В следующем раунде",
"GURPS.removestunEffect": "Эффект оглушения удален на цели.",
"GURPS.addstunEffect": "Эффект оглушения добавлен на цели.",
"GURPS.addedShockAtNextTurnEffect": "Эффект шока добавлен в следующем раунде.",
"GURPS.removedShockEffect": "Эффект шока удален на цели."
}
15 changes: 15 additions & 0 deletions lib/miscellaneous-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ export const SETTING_ALLOW_TARGETED_ROLLS = 'allow-targeted-rolls'
export const SETTING_USE_TAGGED_MODIFIERS = 'use-tagged-modifiers'
export const SETTING_MODIFY_DICE_PLUS_ADDS = 'modify-dice-plus-adds'
export const SETTING_ALLOW_AFTER_MAX_ACTIONS = 'allow-after-max-actions'
export const SETTING_ADD_SHOCK_AT_TURN = 'add-shock-at-turn'

export const VERSION_096 = SemanticVersion.fromString('0.9.6')
export const VERSION_097 = SemanticVersion.fromString('0.9.7')
Expand Down Expand Up @@ -975,5 +976,19 @@ export function initializeSettings() {
default: true,
onChange: value => console.log(`Use Modifying Dice + Adds rule : ${value}`),
})

game.settings.register(SYSTEM_NAME, SETTING_ADD_SHOCK_AT_TURN, {
name: i18n('GURPS.settingAddShockAtTurn'),
hint: i18n('GURPS.settingHintAddShockAtTurn'),
scope: 'world',
config: true,
type: String,
choices: {
Immediately: i18n('GURPS.immediately'),
AtNextTurn: i18n('GURPS.atNextTurn'),
},
default: 'AtNextTurn',
onChange: value => console.log(`Adding Shock at Target : ${value}`),
})
})
}
36 changes: 27 additions & 9 deletions module/actor/actor.js
Original file line number Diff line number Diff line change
Expand Up @@ -2881,7 +2881,7 @@ export class GurpsActor extends Actor {
let checks = []
const data = {}
let size = 0

switch (checkType) {
case 'attributeChecks':
const keys = ['ST', 'DX', 'IQ', 'HT', 'WILL', 'PER']
Expand Down Expand Up @@ -3070,12 +3070,10 @@ export class GurpsActor extends Actor {
case 'm':
refTags = taggedSettings.allAttackRolls.split(',').map(it => it.trim().toLowerCase())
refTags = refTags.concat(taggedSettings.allMeleeRolls.split(',').map(it => it.trim().toLowerCase()))
isDamageRoll = true
break
case 'r':
refTags = taggedSettings.allAttackRolls.split(',').map(it => it.trim().toLowerCase())
refTags = refTags.concat(taggedSettings.allRangedRolls.split(',').map(it => it.trim().toLowerCase()))
isDamageRoll = true
break
case 'p':
refTags = taggedSettings.allDefenseRolls.split(',').map(it => it.trim().toLowerCase())
Expand Down Expand Up @@ -3237,13 +3235,15 @@ export class GurpsActor extends Actor {
* @returns {Promise<{canRoll: boolean, [message]: string, [targetMessage]: string, [maxActionMessage]: string, [maxBlockMessage]: string, [maxParryMessage]: string }>}
*/
async canRoll(action, token) {
let result = {
canRoll: true,
}
const isAttack = action.type === 'attack'
const isDefense = action.attribute === 'dodge' || action.type === 'weapon-parry' || action.type === 'weapon-block'
const isAttribute = action.type === 'attribute'
if (token && game.combat?.isActive) {
const isSlam = action.type === 'damage' && action.orig.includes('slam') && action.orig.includes('@')
let result = {
canRoll: true,
isSlam,
}
if (token && game.combat?.isActive && !isSlam) {
const actions = await TokenActions.fromToken(token)

// Check Attack or Defense vs Maneuver
Expand Down Expand Up @@ -3294,7 +3294,7 @@ export class GurpsActor extends Actor {
}
}
// Check if roll need Target
const needTarget = isAttack || action.isSpellOnly || action.type === 'damage'
const needTarget = !isSlam && (isAttack || action.isSpellOnly || action.type === 'damage')
const checkForTargetSettings = game.settings.get(Settings.SYSTEM_NAME, Settings.SETTING_ALLOW_TARGETED_ROLLS)
if (needTarget && game.user.targets.size === 0) {
result = {
Expand Down Expand Up @@ -3327,7 +3327,7 @@ export class GurpsActor extends Actor {
switch (originType) {
case 'attack':
name = action.name.split('(')[0].trim()
mode = action.name.match(/\((.+?)\)/)?.[1]
mode = action.name.match(/\((.+)\)/)?.[1]
const path = action.orig.toLowerCase().startsWith('m:') ? 'melee' : 'ranged'
recurselist(this.system[path], (obj, _k, _d) => {
if ((obj.originalName === name || obj.name === name) && (!mode || obj.mode === mode)) {
Expand All @@ -3340,6 +3340,15 @@ export class GurpsActor extends Actor {
}
}
})
if (!Object.keys(result).length) {
result = {
name: thing,
uuid: null,
itemId: null,
fromItem: null,
pageRef: null,
}
}
break

case 'weapon-block':
Expand All @@ -3357,6 +3366,15 @@ export class GurpsActor extends Actor {
}
}
})
if (!Object.keys(result).length) {
result = {
name: thing,
uuid: null,
itemId: null,
fromItem: null,
pageRef: null,
}
}
break
case 'skill-spell':
const item = this.findByOriginalName(action.name)
Expand Down
11 changes: 5 additions & 6 deletions module/actor/effect-modifier-popout.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,10 @@ export class EffectModifierPopout extends Application {

/** @override */
getData(options) {
if (!this._token?.actor) return
let selfMods = []
if (this._token) {
selfMods = this.convertModifiers(this._token.actor.system.conditions.self.modifiers)
selfMods.push(...this.convertModifiers(this._token.actor.system.conditions.usermods))
}
selfMods = this.convertModifiers(this._token.actor.system.conditions.self.modifiers)
selfMods.push(...this.convertModifiers(this._token.actor.system.conditions.usermods))
selfMods.sort((a, b) => {
if (a.itemName === b.itemName) {
return a.desc.localeCompare(b.desc)
Expand Down Expand Up @@ -118,7 +117,7 @@ export class EffectModifierPopout extends Application {
}

convertModifiers(list) {
return list
return Array.isArray(list)
? list.map(it => {
const tags = this.getTags(it)
let itemReference = it.match(/@(\S+)/)?.[1] || 'custom'
Expand All @@ -142,7 +141,7 @@ export class EffectModifierPopout extends Application {
break
}
} else {
obj = this._token.actor.items.get(itemReference)
obj = this._token?.actor.items.get(itemReference) || {}
}
const itemName = obj?.name || itemReference
const itemType = obj?.type
Expand Down
19 changes: 9 additions & 10 deletions module/chat/slam-calc.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,15 @@ export class SlamCalculator {
sound: this.rollThemBones([targetRoll]),
}

ChatMessage.create(messageData).then(async () => {
let targets = []
game.user.targets.forEach(t => targets.push(t))
game.user.targets.clear()
await GURPS.executeOTF(`/r [${attackerResult} cr @${data.targetToken.name}]`)
GURPS.LastActor = data.targetToken.actor
await GURPS.executeOTF(`/r [${targetResult} cr @${data.attackerToken.name}]`)
GURPS.LastActor = data.attackerToken.actor
targets.forEach(t => game.user.targets.add(t))
})
await ChatMessage.create(messageData)
let targets = []
game.user.targets.forEach(t => targets.push(t))
game.user.targets.clear()
await GURPS.executeOTF(`/r [${attackerResult} cr @${data.targetToken.name} "slam damage"]`)
GURPS.LastActor = data.targetToken.actor
await GURPS.executeOTF(`/r [${targetResult} cr @${data.attackerToken.name} "slam damage"]`)
GURPS.LastActor = data.attackerToken.actor
targets.forEach(t => game.user.targets.add(t))
}

targetFallsDown(attackerResult, targetResult) {
Expand Down
2 changes: 2 additions & 0 deletions module/combat-tracker/maneuver-menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import Maneuvers from '../actor/maneuver.js'
import { TokenActions } from '../token-actions.js'

export const addManeuverMenu = async (html, combatant, token) => {
// If token doesn't have an actor, return
if (!token.actor) return html
// Find Current Maneuver element
const tokenEffectsDiv = $(html).find('.token-effects')
let currentManeuver = null
Expand Down
2 changes: 1 addition & 1 deletion module/combat-tracker/quick-roll-menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { TokenActions } from '../token-actions.js'
export const addQuickRollButton = async (html, combatant, token) => {
const quickRollSettings = game.settings.get(Settings.SYSTEM_NAME, Settings.SETTING_USE_QUICK_ROLLS)
const canShowButtons = quickRollSettings.enabled && (game.user.isGM || combatant.isOwner)
if (!canShowButtons) return html
if (!canShowButtons || !token.actor) return html

const buttonClass = `combatant-control`
let quickRollButton = $(
Expand Down
Loading