From ea6ad8d02fecd2e5b3e8c8c5c57e619b4db322f5 Mon Sep 17 00:00:00 2001 From: hmqgg Date: Tue, 6 Oct 2020 21:43:23 +0800 Subject: [PATCH 1/7] Create cn.json --- lang/cn.json | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 lang/cn.json diff --git a/lang/cn.json b/lang/cn.json new file mode 100644 index 0000000..d422934 --- /dev/null +++ b/lang/cn.json @@ -0,0 +1,119 @@ +{ + "C5ETRAINING.Ability": "属性", + "C5ETRAINING.AbilityCha": "魅力", + "C5ETRAINING.AbilityCheck": "属性检定", + "C5ETRAINING.AbilityCon": "体质", + "C5ETRAINING.AbilityDex": "敏捷", + "C5ETRAINING.AbilityInt": "智力", + "C5ETRAINING.AbilitySkillToolCheck": "属性/技能/工具检定", + "C5ETRAINING.AbilityStr": "力量", + "C5ETRAINING.AbilityWis": "感知", + "C5ETRAINING.Action": "动作", + "C5ETRAINING.Activity": "活动", + "C5ETRAINING.ActivityProgress": "活动进度", + "C5ETRAINING.Add": "添加", + "C5ETRAINING.Advantage": "优势", + "C5ETRAINING.AdjustProgressValue": "调整进度", + "C5ETRAINING.AdvanceActivityProgress": "推进活动进度", + "C5ETRAINING.AnnounceActivityCompletionFor": "宣告活动完成:", + "C5ETRAINING.AnnounceActivityCompletionForHint": "选择一种角色类型,该类角色会在活动完成时触发发送聊天消息。", + "C5ETRAINING.Apply": "应用", + "C5ETRAINING.Attempt": "尝试", + "C5ETRAINING.AttemptsToComplete": "尝试完成", + "C5ETRAINING.AuditLog": "变更记录", + "C5ETRAINING.AuditLogDeleteNote": "注意: 取消变更并不会回滚。 如果你想要回滚这里看到的更改的内容,你必须手动处理。但如果需要的话这个记录可以帮助你找出变更的部分。", + "C5ETRAINING.AuditLogInstructionsGm": "该记录展示了对该角色休整活动的进度产生的所有变更的列表。你可以在查看时通过点击‘取消’栏的勾选框并点击窗口底部的按钮来从该列表中移除项目。一旦确认,你或者玩家都无法看到被删除的项目。", + "C5ETRAINING.AuditLogInstructionsPlayer": "该记录展示了GM还没有审阅的你的休整活动的进度产生的所有变更的列表。检查后,这些记录将不再在这里显示。", + + "C5ETRAINING.Cancel": "取消", + "C5ETRAINING.CheckDC": "检定DC", + "C5ETRAINING.CheckWithDC": "检定DC", + "C5ETRAINING.Completed": "已完成", + "C5ETRAINING.CompletedADowntimeActivity": "完成了一项休整活动。", + "C5ETRAINING.CompletionTarget": "完成目标", + "C5ETRAINING.Create": "创建", + "C5ETRAINING.CreateNewDowntimeActivity": "创建一个新的休整活动", + "C5ETRAINING.CurrentProgress": "当前进度", + "C5ETRAINING.Custom": "自定义", + "C5ETRAINING.CustomRoll": "自定义掷骰", + + "C5ETRAINING.DC": "DC", + "C5ETRAINING.DefaultAbility": "基于检定进度的默认属性/技能", + "C5ETRAINING.DefaultAbilityHint": "为基于检定进度的休整活动,在创建时设置默认的属性/技能。在创建后可以编辑。", + "C5ETRAINING.DefaultAbilityCompletion": "默认活动完成目标(属性/技能/工具检定)", + "C5ETRAINING.DefaultAbilityCompletionHint": "为基于检定进度的休整活动,设定完成100%活动完成度默认所需要的目标数值。通常来说,平均每个人每次检定可以为活动进度贡献10点。默认值是300(也就是说每人每天独立训练平均需要30天)。", + "C5ETRAINING.DefaultDcDifficulty": "默认检定难度(检定DC)", + "C5ETRAINING.DefaultDcDifficultyHint": "为基于检定DC的休整活动,设定默认所需要的能力检定DC。默认值是10。", + "C5ETRAINING.DefaultDcSuccesses": "默认活动完成目标(检定DC)", + "C5ETRAINING.DefaultDcSuccessesHint": "为基于检定DC的休整活动,设定完成100%活动完成度默认所需要的检定成功次数。默认值是5次成功。", + "C5ETRAINING.DefaultSimpleCompletion": "默认活动完成目标(简单)", + "C5ETRAINING.DefaultSimpleCompletionHint": "为基于简单进度的休整活动,设定完成100%活动完成度默认所需要的尝试目标次数。默认值是10次尝试。", + "C5ETRAINING.DefaultTimeCompletion": "默认活动完成目标(时间)", + "C5ETRAINING.DefaultTimeCompletionHint": "为基于时间进度的休整活动,设定完成100%活动完成度默认所需要的天数。默认值是30天。(需要使用 About Time 模组)。", + "C5ETRAINING.Delete": "删除", + "C5ETRAINING.DeleteConfirmation": "你确定要删除该项目吗?", + "C5ETRAINING.DeleteDowntimeActivity": "删除休整活动", + "C5ETRAINING.Description": "描述", + "C5ETRAINING.Disadvantage": "劣势", + "C5ETRAINING.Dismiss": "取消", + "C5ETRAINING.DismissSelected": "取消已选择的", + "C5ETRAINING.DowntimeActivityComplete": "修正活动完成", + "C5ETRAINING.DowntimeTabName": "休整活动选项卡名称", + "C5ETRAINING.DowntimeTabNameHint": "设定训练选项卡的标题。默认值是'Downtime,'但你可以任意更改。", + + "C5ETRAINING.Edit": "编辑", + "C5ETRAINING.EditDowntimeActivity": "编辑休整活动", + "C5ETRAINING.EnableDowntimeReminders": "启用休整活动提醒", + "C5ETRAINING.EnableDowntimeRemindersHint": "启用该选项将会给GM在每天开始时显示一个提示,提醒让有休整活动的玩家是否推进进度。(需要使用 About Time 模组)。", + + "C5ETRAINING.InvalidNumberWarning": "无效输入值。请输入一个数字。", + "C5ETRAINING.InvalidTool": "未找到工具", + + "C5ETRAINING.Name": "名称", + "C5ETRAINING.NewDowntimeActivity": "新的休整活动", + "C5ETRAINING.None": "无", + "C5ETRAINING.Normal": "正常", + "C5ETRAINING.NpcsOnly": "仅限NPC", + + "C5ETRAINING.PcsAndNpcs": "PC和NPC", + "C5ETRAINING.PcsOnly": "仅限PC", + "C5ETRAINING.ProgressChange": "进度变更", + "C5ETRAINING.ProgressionType": "进度类型", + + "C5ETRAINING.ReviewChanges": "审阅变更", + "C5ETRAINING.Roll": "掷骰", + + "C5ETRAINING.SelectAnAbility": "选择一项进度使用的属性", + "C5ETRAINING.ShowDowntimeTabPc": "显示休整选项卡(PC)", + "C5ETRAINING.ShowDowntimeTabPcHint": "开启该项将会在所有PC的角色卡上显示休整活动选项卡。需要关闭重开角色卡来生效。", + "C5ETRAINING.ShowDowntimeTabNpc": "显示休整选项卡(NPC)", + "C5ETRAINING.ShowDowntimeTabNpcHint": "开启该项将会在所有NPC的角色卡上显示休整活动选项卡。需要关闭重开角色卡来生效。", + "C5ETRAINING.Simple": "简单", + "C5ETRAINING.Skill": "技能", + "C5ETRAINING.SkillAcr": "特技", + "C5ETRAINING.SkillAni": "驯兽", + "C5ETRAINING.SkillArc": "奥秘", + "C5ETRAINING.SkillAth": "运动", + "C5ETRAINING.SkillDec": "欺瞒", + "C5ETRAINING.SkillHis": "历史", + "C5ETRAINING.SkillIns": "洞悉", + "C5ETRAINING.SkillInv": "调查", + "C5ETRAINING.SkillItm": "威吓", + "C5ETRAINING.SkillMed": "医疗", + "C5ETRAINING.SkillNat": "自然", + "C5ETRAINING.SkillPer": "游说", + "C5ETRAINING.SkillPrc": "察觉", + "C5ETRAINING.SkillPrf": "表演", + "C5ETRAINING.SkillRel": "宗教", + "C5ETRAINING.SkillSlt": "巧手", + "C5ETRAINING.SkillSte": "隐匿", + "C5ETRAINING.SkillSur": "生存", + "C5ETRAINING.SuccessesRequired": "需要成功", + + "C5ETRAINING.Time": "时间(UTC)", + "C5ETRAINING.ToggleInfo": "切换信息", + "C5ETRAINING.Tool": "工具", + "C5ETRAINING.ToolNotFoundWarning": "没有找到选择的工具。请编辑该活动并选择新的。", + + "C5ETRAINING.User": "用户" +} From 81ff2a19a8c5b1c9c6a2946699b88444376a77af Mon Sep 17 00:00:00 2001 From: hmqgg Date: Tue, 6 Oct 2020 21:44:59 +0800 Subject: [PATCH 2/7] Update module.json --- module.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module.json b/module.json index 763bc44..d885ce9 100644 --- a/module.json +++ b/module.json @@ -19,6 +19,11 @@ "lang": "ko", "name": "Korean", "path": "lang/ko.json" + }, + { + "lang": "cn", + "name": "中文", + "path": "lang/cn.json" } ], "url": "https://github.com/crash1115/5e-training", From 07b2c548f45180e59d8c0a213be565069e063195 Mon Sep 17 00:00:00 2001 From: Chelsea Ash Date: Wed, 7 Oct 2020 16:48:01 -0400 Subject: [PATCH 3/7] Change over to using actor.setFlag rather than actor.update for activity updates --- audit-log.js | 15 ++------- training.js | 93 ++++++++++++++++++++++------------------------------ 2 files changed, 42 insertions(+), 66 deletions(-) diff --git a/audit-log.js b/audit-log.js index 5ee5356..4f36c94 100644 --- a/audit-log.js +++ b/audit-log.js @@ -57,8 +57,7 @@ export default class AuditLog extends FormApplication { let actorId = formData.actorId; let actor = game.actors.get(actorId); - let flags = actor.data.flags['5e-training']; - let activities = flags.trainingItems; + let activities = await actor.getFlag("5e-training", "trainingItems"); // Same loop as before. Cycle through each activity, if it's got no change array, // move on to the next one. If it does, cycle through it and see if the timestamp @@ -76,17 +75,7 @@ export default class AuditLog extends FormApplication { } // Update actor and flags - flags.trainingItems = activities; - // Foundry versions 0.7.0 and earlier required the use of a workaround to get the flags to set properly - // In 0.7.1 and onward, this workaround resulted in data loss and was no longer required. - // Check for core version here, and do the right thing so nothing gets nuked. - if(game.data.version < "0.7.1"){ - actor.update({'flags.5e-training': null}).then(function(){ - actor.update({'flags.5e-training': flags}); - }); - } else { - actor.update({'flags.5e-training': flags}); - } + await actor.setFlag("5e-training", "trainingItems", activities); } diff --git a/training.js b/training.js index 3a7142b..4de4635 100644 --- a/training.js +++ b/training.js @@ -169,16 +169,9 @@ async function addTrainingTab(app, html, data) { if (showTrainingTab){ - // Get our actor + // Get our actor and our flags let actor = game.actors.entities.find(a => a.data._id === data.actor._id); - // Make sure flags exist if they don't already - if (actor.data.flags['5e-training'] === undefined || actor.data.flags['5e-training'] === null) { - let trainingList = []; - const flags = {trainingItems: trainingList}; - actor.data.flags['5e-training'] = flags; - actor.update({'flags.5e-training': flags}); - } - let flags = actor.data.flags['5e-training']; + let trainingItems = await actor.getFlag("5e-training", "trainingItems"); // Update the nav menu let tabName = game.settings.get("5e-training", "tabName"); @@ -244,9 +237,9 @@ async function addTrainingTab(app, html, data) { let dialogContent = await renderTemplate('modules/5e-training/templates/add-training-dialog.html', {training: newActivity}); - // Set up flags if they don't exist - if (flags.trainingItems === undefined){ - flags.trainingItems = []; + // If there is no flag, create an empty array to use as a placeholder + if (!trainingItems) { + trainingItems = []; } // Create dialog @@ -258,7 +251,7 @@ async function addTrainingTab(app, html, data) { no: {icon: "", label: game.i18n.localize("C5ETRAINING.Cancel"), callback: () => add = false}, }, default: "yes", - close: html => { + close: async (html) => { if (add) { // Set up basic info newActivity.name = html.find('#nameInput').val(); @@ -280,8 +273,9 @@ async function addTrainingTab(app, html, data) { newActivity.dc = game.settings.get("5e-training", "defaultDcDifficulty"); } // Update flags and actor - flags.trainingItems.push(newActivity); - updateDowntimeFlag(actor, flags) + trainingItems.push(newActivity); + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); } } }).render(true); @@ -295,7 +289,7 @@ async function addTrainingTab(app, html, data) { // Set up some variables let fieldId = event.currentTarget.id; let trainingIdx = parseInt(fieldId.replace('crash-edit-','')); - let activity = flags.trainingItems[trainingIdx]; + let activity = trainingItems[trainingIdx]; let edit = false; let dialogContent = await renderTemplate('modules/5e-training/templates/training-details-dialog.html', {training: activity, options: DROPDOWN_OPTIONS}); @@ -308,7 +302,7 @@ async function addTrainingTab(app, html, data) { no: {icon: "", label: game.i18n.localize("C5ETRAINING.Cancel"), callback: () => edit = false}, }, default: "yes", - close: html => { + close: async (html) => { if (edit) { // Set up base values activity.name = html.find('#nameInput').val(); @@ -329,8 +323,9 @@ async function addTrainingTab(app, html, data) { activity.dc = html.find('#dcInput').val(); } // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); } } }).render(true); @@ -344,7 +339,7 @@ async function addTrainingTab(app, html, data) { // Set up some variables let fieldId = event.currentTarget.id; let trainingIdx = parseInt(fieldId.replace('crash-delete-','')); - let activity = flags.trainingItems[trainingIdx]; + let activity = trainingItems[trainingIdx]; let del = false; let dialogContent = await renderTemplate('modules/5e-training/templates/delete-training-dialog.html'); @@ -357,11 +352,12 @@ async function addTrainingTab(app, html, data) { no: {icon: "", label: game.i18n.localize("C5ETRAINING.Cancel"), callback: () => del = false}, }, default: "yes", - close: html => { + close: async (html) => { if (del) { // Delete item and update actor - flags.trainingItems.splice(trainingIdx, 1); - updateDowntimeFlag(actor, flags); + trainingItems.splice(trainingIdx, 1); + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); } } }).render(true); @@ -376,7 +372,7 @@ async function addTrainingTab(app, html, data) { let fieldId = event.currentTarget.id; let field = event.currentTarget; let trainingIdx = parseInt(fieldId.replace('crash-override-','')); - let activity = flags.trainingItems[trainingIdx]; + let activity = trainingItems[trainingIdx]; let adjustment = 0; // Format text field input and change @@ -400,8 +396,9 @@ async function addTrainingTab(app, html, data) { checkCompletion(actor, activity); // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); }); // ROLL TO TRAIN @@ -412,14 +409,14 @@ async function addTrainingTab(app, html, data) { // Set up some variables let fieldId = event.currentTarget.id; let trainingIdx = parseInt(fieldId.replace('crash-roll-','')); - let activity = flags.trainingItems[trainingIdx]; + let activity = trainingItems[trainingIdx]; let rollType = determineRollType(activity); // Progression Type: Ability Check or DC - ABILITY if (rollType === "ability"){ let abilityName = getAbilityName(activity.ability); // Roll to increase progress - actor.rollAbilityTest(activity.ability).then(function(r){ + actor.rollAbilityTest(activity.ability).then(async function(r){ let rollMode = getRollMode(r._formula); let attemptName = game.i18n.localize("C5ETRAINING.Roll") + " " + abilityName + " (" + rollMode + ")"; // Increase progress @@ -427,15 +424,16 @@ async function addTrainingTab(app, html, data) { // Log activity completion checkCompletion(actor, activity); // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); }); } // Progression Type: Ability Check or DC - SKILL else if (rollType === "skill"){ let abilityName = getAbilityName(activity.ability); // Roll to increase progress - actor.rollSkill(activity.ability).then(function(r){ + actor.rollSkill(activity.ability).then(async function(r){ let rollMode = getRollMode(r._formula); let attemptName = game.i18n.localize("C5ETRAINING.Roll") + " " + abilityName + " (" + rollMode + ")"; // Increase progress @@ -443,8 +441,9 @@ async function addTrainingTab(app, html, data) { // Log activity completion checkCompletion(actor, activity); // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); }); } // Progression Type: Ability Check or DC - TOOL @@ -454,7 +453,7 @@ async function addTrainingTab(app, html, data) { if(tool){ let toolName = tool.name; // Roll to increase progress - tool.rollToolCheck().then(function(r){ + tool.rollToolCheck().then(async function(r){ let rollMode = getRollMode(r._formula); let attemptName = game.i18n.localize("C5ETRAINING.Roll") + " " + toolName + " (" + rollMode + ")"; // Increase progress @@ -462,8 +461,9 @@ async function addTrainingTab(app, html, data) { // Log activity completion checkCompletion(actor, activity); // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); }); } else { ui.notifications.warn("Crash's 5e Downtime Tracking: " + game.i18n.localize("C5ETRAINING.ToolNotFoundWarning")); @@ -477,8 +477,9 @@ async function addTrainingTab(app, html, data) { // Log activity completion checkCompletion(actor, activity); // Update flags and actor - flags.trainingItems[trainingIdx] = activity; - updateDowntimeFlag(actor, flags); + trainingItems[trainingIdx] = activity; + await actor.unsetFlag("5e-training", "trainingItems"); + await actor.setFlag("5e-training", "trainingItems", trainingItems); } }); @@ -492,7 +493,7 @@ async function addTrainingTab(app, html, data) { // Set up some variables let fieldId = event.currentTarget.id; let trainingIdx = parseInt(fieldId.replace('crash-toggle-desc-','')); - let activity = flags.trainingItems[trainingIdx]; + let activity = trainingItems[trainingIdx]; let desc = activity.description || ""; let li = $(event.currentTarget).parents(".item"); @@ -671,20 +672,6 @@ function determineRollType(activity){ return rollType; } -// Updates the actor flags -// Foundry versions 0.7.0 and earlier required the use of a workaround to get the flags to set properly -// In 0.7.1 and onward, this workaround resulted in data loss and was no longer required. -// Check for core version here, and do the right thing so nothing gets nuked. -async function updateDowntimeFlag(actor, flags){ - if(game.data.version < "0.7.1"){ - actor.update({'flags.5e-training': null}).then(function(){ - actor.update({'flags.5e-training': flags}); - }); - } else { - actor.update({'flags.5e-training': flags}); - } -} - Hooks.on(`renderActorSheet`, (app, html, data) => { addTrainingTab(app, html, data).then(function(){ if (app.activateTrainingTab) { From 5d9f28ef4d80c58813d2595359aa1a55f3740ef6 Mon Sep 17 00:00:00 2001 From: Chelsea Ash Date: Wed, 7 Oct 2020 17:03:34 -0400 Subject: [PATCH 4/7] Fix roll names being logged as as ??? --- training.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/training.js b/training.js index 4de4635..b1ca31e 100644 --- a/training.js +++ b/training.js @@ -414,7 +414,7 @@ async function addTrainingTab(app, html, data) { // Progression Type: Ability Check or DC - ABILITY if (rollType === "ability"){ - let abilityName = getAbilityName(activity.ability); + let abilityName = getAbilityName(activity, actor); // Roll to increase progress actor.rollAbilityTest(activity.ability).then(async function(r){ let rollMode = getRollMode(r._formula); @@ -431,7 +431,7 @@ async function addTrainingTab(app, html, data) { } // Progression Type: Ability Check or DC - SKILL else if (rollType === "skill"){ - let abilityName = getAbilityName(activity.ability); + let abilityName = getAbilityName(activity, actor); // Roll to increase progress actor.rollSkill(activity.ability).then(async function(r){ let rollMode = getRollMode(r._formula); From eb3284074458c16d26f103e4654ee9ae2e288939 Mon Sep 17 00:00:00 2001 From: Chelsea Ash Date: Wed, 7 Oct 2020 17:09:17 -0400 Subject: [PATCH 5/7] Remove those settings for About Time enhancements that I'm probably never going to get done. --- training.js | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/training.js b/training.js index b1ca31e..727b252 100644 --- a/training.js +++ b/training.js @@ -122,26 +122,6 @@ Hooks.once("init", () => { type: Number }); - // IF ABOUT TIME IS ENABLED - // game.settings.register("5e-training", "timeToComplete", { - // name: game.i18n.localize("C5ETRAINING.DefaultTimeCompletion"), - // hint: game.i18n.localize("C5ETRAINING.DefaultTimeCompletionHint"), - // scope: "world", - // config: true, - // default: 30, - // type: Number - // }); - - // IF ABOUT TIME IS ENABLED - // game.settings.register("5e-training", "enableDowntimeReminders", { - // name: game.i18n.localize("C5ETRAINING.EnableDowntimeReminders"), - // hint: game.i18n.localize("C5ETRAINING.EnableDowntimeRemindersHint"), - // scope: "world", - // config: true, - // default: false, - // type: Boolean - // }); - game.settings.register("5e-training", "announceCompletionFor", { name: game.i18n.localize("C5ETRAINING.AnnounceActivityCompletionFor"), hint: game.i18n.localize("C5ETRAINING.AnnounceActivityCompletionForHint"), From 8d87ebd4ba97b71aed5a96f832cf3b4be08ed023 Mon Sep 17 00:00:00 2001 From: Chelsea Ash Date: Wed, 7 Oct 2020 17:09:44 -0400 Subject: [PATCH 6/7] Module.json and changelog for 0.4.6 --- changelog.md | 8 +++++++- module.json | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 8c21ec1..0492483 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Change Log +## Version 0.4.6 +Improvements: +- Changed the way activity data is updated behind the scenes so things don't explode for no good reason. Special thanks to Ethck#6879 for slogging through it with me. + +Fixes: +- Fixed a bug where the names of the rolls were displaying as ??? in the audit log. This doesn't fix any activities that have been logged as ??? already, but will prevent them from saving that way going forward. + ## Version 0.4.5 Compatibility patch for 0.7.1+ - Modifies the way flags are updated to prevent data loss when using Foundry core versions higher than 0.7.0 @@ -9,7 +16,6 @@ Improvements: - Added the ability to select tools in addition to skills and ability checks. Tools are limited to those the actor has in their inventory. This means they're not available on NPC sheets. Changes: - - "Ability" progression mode is now called "Ability/Skill/Tool Check" mode. - "DC" progression mode is now called "Check with DC". - Together, these modes are referred to as "Check-Based" progression modes, since they both utilize checks. You'll see them referred to this way in the module settings. diff --git a/module.json b/module.json index 763bc44..7ab67b6 100644 --- a/module.json +++ b/module.json @@ -2,10 +2,10 @@ "name": "5e-training", "title": "Crash's 5e Downtime Tracking", "description": "Adds a section to the character sheet to keep track of downtime activity progression. Track proficiency training, spell scribing, and anything else you can think of.", - "version": "0.4.5", + "version": "0.4.6", "author": "CRASH1115#2944", "minimumCoreVersion": "0.6.6", - "compatibleCoreVersion": "0.7.2", + "compatibleCoreVersion": "0.7.3", "systems": ["dnd5e"], "esmodules": ["training.js"], "styles": ["styles/training.css"], @@ -23,5 +23,5 @@ ], "url": "https://github.com/crash1115/5e-training", "manifest": "https://raw.githubusercontent.com/crash1115/5e-training/master/module.json", - "download": "https://github.com/crash1115/5e-training/releases/download/v0.4.5/5e-training.zip" + "download": "https://github.com/crash1115/5e-training/releases/download/v0.4.6/5e-training.zip" } From 7be7fcce8a201853b4f47d9651bc42e739f89402 Mon Sep 17 00:00:00 2001 From: Chelsea Ash Date: Wed, 7 Oct 2020 17:15:33 -0400 Subject: [PATCH 7/7] Update readme and changelog for 0.4.6 --- README.md | 4 +--- changelog.md | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3b1d56c..2106d70 100644 --- a/README.md +++ b/README.md @@ -66,15 +66,13 @@ If you'd like to contribute, please get in touch with me or create a pull reques ### Unsupported Modules - Obsidian (no plans to support at this time) -### Known Issues -- Roll dialog does not show up if you're using Downtime Tracker along with the Use Average Rolls setting of Group Roll Checks and Saves. This issue has been reports here, and this page will be updated when it gets fixed: https://github.com/trdischat/grouproll/issues/10 - ## Got Questions? Find a Bug? Contact me on Discord (CRASH1115#2944) to chat, or create an issue right here on GitHub. ## Attributions and Special Thanks - Thanks to platypus_pi for help with English localization - Thanks to KLO#1490 for Korean localization +- Thanks to hmqgg#5775 for Chinese localization ## License - This work is licensed under a [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/legalcode). diff --git a/changelog.md b/changelog.md index 0492483..aeaab6b 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,7 @@ ## Version 0.4.6 Improvements: - Changed the way activity data is updated behind the scenes so things don't explode for no good reason. Special thanks to Ethck#6879 for slogging through it with me. +- Added Chinese localization thanks to hmqgg#5775 Fixes: - Fixed a bug where the names of the rolls were displaying as ??? in the audit log. This doesn't fix any activities that have been logged as ??? already, but will prevent them from saving that way going forward.