fix skill bugs by rewriting function (#5906)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||
<input name="attr_version" type="hidden" value="4.0"/>
|
||||
<input name="attr_version" type="hidden" value="4.01"/>
|
||||
<input class="sheet_type" name="attr_sheet_type" type="hidden" value="pc"/>
|
||||
<input class="character-type" name="attr_flag_special" type="hidden" value="mundane"/>
|
||||
<div class="pc">
|
||||
@@ -435,12 +435,12 @@
|
||||
<input name="attr_display_limit" type="hidden" value="Physical"/>
|
||||
<input name="attr_display_attribute" type="hidden" value="Agility"/>
|
||||
<input name="attr_dicepool" type="hidden" value="0"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="undefined_flag}"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_active_${x}_flag}"/>
|
||||
<div class="buttons">
|
||||
<button name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit}}}"><span name="attr_display"></span></button>
|
||||
<button name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit}}}"><span name="attr_display_specialization"></span></button>
|
||||
</div><span class="text-align-center" name="attr_display_rating" title="@{repeating_active_${x}_display_rating}"></span>
|
||||
<select class="attribute-select" name="attr_attribute" title="undefined_attribute}">
|
||||
<select class="attribute-select" name="attr_attribute" title="@{repeating_active_${x}_attribute}">
|
||||
<option data-i18n="body" value="@{body}">Body</option>
|
||||
<option data-i18n="agility" value="@{agility}" selected="selected">Agility</option>
|
||||
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
||||
@@ -452,7 +452,7 @@
|
||||
<option data-i18n="magic" value="@{magic}">Magic</option>
|
||||
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
||||
</select>
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="undefined_limit}">
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_active_${x}_limit}">
|
||||
<option value="none">-</option>
|
||||
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
||||
<option data-i18n="physical" value="@{physical_limit}" selected="selected">Physical</option>
|
||||
@@ -466,7 +466,7 @@
|
||||
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
|
||||
<div class="collapse"><span name="attr_notes"></span></div>
|
||||
<div class="settings">
|
||||
<select class="skill-select" name="attr_skill" value="Close Combat Group" title="undefined_skill}"><option class="option-headers" disabled="true" data-i18n="combatskills">Combat Skills</option>
|
||||
<select class="skill-select" name="attr_skill" value="Close Combat Group" title="@{repeating_active_${x}_skill}"><option class="option-headers" disabled="true" data-i18n="combatskills">Combat Skills</option>
|
||||
<option class="option-groups" value="Close Combat Group" data-i18n="closecombat">Close Combat Group</option>
|
||||
<option class="option-groups" value="Firearms Group" data-i18n="firearms">Firearms Group</option>
|
||||
<option value="Archery" data-i18n="archery">Archery</option>
|
||||
@@ -564,16 +564,16 @@
|
||||
<option value="Software" data-i18n="software">Software</option>
|
||||
</select>
|
||||
<label data-i18n-title="rating" title="rating">
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="undefined_rating}"/>
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_active_${x}_rating}"/>
|
||||
</label>
|
||||
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><span data-i18n="ratingmodifier">Rating Modifier</span>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="undefined_rating_modifier}"/>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_active_${x}_rating_modifier}"/>
|
||||
</label>
|
||||
<label data-i18n-title="specialization" title="specialization"> <span data-i18n="specialization">specialization</span>
|
||||
<input name="attr_specialization}" placeholder="Specalizations" type="text" title="undefined_specialization}"/>
|
||||
<input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_active_${x}_specialization}"/>
|
||||
</label>
|
||||
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="undefined_notes}"></textarea>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_active_${x}_notes}"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -588,12 +588,12 @@
|
||||
<input name="attr_display_limit" type="hidden" value="Mental"/>
|
||||
<input name="attr_display_attribute" type="hidden" value="Logic"/>
|
||||
<input name="attr_dicepool" type="hidden" value="0"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="undefined_flag}"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_knowledge_${x}_flag}"/>
|
||||
<div class="buttons">
|
||||
<button name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit}}}"><span name="attr_display"></span></button>
|
||||
<button name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit}}}"><span name="attr_display_specialization"></span></button>
|
||||
</div><span class="text-align-center" name="attr_display_rating" title="@{repeating_know_${x}_display_rating}"></span>
|
||||
<select class="attribute-select" name="attr_attribute" title="undefined_attribute}">
|
||||
</div><span class="text-align-center" name="attr_display_rating" title="@{repeating_knowledge_${x}_display_rating}"></span>
|
||||
<select class="attribute-select" name="attr_attribute" title="@{repeating_knowledge_${x}_attribute}">
|
||||
<option data-i18n="body" value="@{body}">Body</option>
|
||||
<option data-i18n="agility" value="@{agility}">Agility</option>
|
||||
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
||||
@@ -605,7 +605,7 @@
|
||||
<option data-i18n="magic" value="@{magic}">Magic</option>
|
||||
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
||||
</select>
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="undefined_limit}">
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_knowledge_${x}_limit}">
|
||||
<option value="none">-</option>
|
||||
<option data-i18n="mental" value="@{mental_limit}" selected="selected">Mental</option>
|
||||
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
||||
@@ -620,19 +620,19 @@
|
||||
<div class="collapse"><span name="attr_notes"></span></div>
|
||||
<div class="settings">
|
||||
<label data-i18n-title="skill" title="skill">
|
||||
<input name="attr_skill" placeholder="knowledge" type="text" title="undefined_skill}"/>
|
||||
<input name="attr_skill" placeholder="knowledge" type="text" title="@{repeating_knowledge_${x}_skill}"/>
|
||||
</label>
|
||||
<label data-i18n-title="rating" title="rating">
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="undefined_rating}"/>
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_knowledge_${x}_rating}"/>
|
||||
</label>
|
||||
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><span data-i18n="ratingmodifier">Rating Modifier</span>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="undefined_rating_modifier}"/>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_knowledge_${x}_rating_modifier}"/>
|
||||
</label>
|
||||
<label data-i18n-title="specialization" title="specialization"> <span data-i18n="specialization">specialization</span>
|
||||
<input name="attr_specialization}" placeholder="Specalizations" type="text" title="undefined_specialization}"/>
|
||||
<input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_knowledge_${x}_specialization}"/>
|
||||
</label>
|
||||
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="undefined_notes}"></textarea>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_knowledge_${x}_notes}"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -647,12 +647,12 @@
|
||||
<input name="attr_display_limit" type="hidden" value="Social"/>
|
||||
<input name="attr_display_attribute" type="hidden" value="Charisma"/>
|
||||
<input name="attr_dicepool" type="hidden" value="0"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="undefined_flag}"/>
|
||||
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_language_${x}_flag}"/>
|
||||
<div class="buttons">
|
||||
<button name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit}}}"><span name="attr_display"></span></button>
|
||||
<button name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit}}}"><span name="attr_display_specialization"></span></button>
|
||||
</div><span class="text-align-center" name="attr_display_rating" title="@{repeating_lang_${x}_display_rating}"></span>
|
||||
<select class="attribute-select" name="attr_attribute" title="undefined_attribute}">
|
||||
</div><span class="text-align-center" name="attr_display_rating" title="@{repeating_language_${x}_display_rating}"></span>
|
||||
<select class="attribute-select" name="attr_attribute" title="@{repeating_language_${x}_attribute}">
|
||||
<option data-i18n="body" value="@{body}">Body</option>
|
||||
<option data-i18n="agility" value="@{agility}">Agility</option>
|
||||
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
||||
@@ -664,7 +664,7 @@
|
||||
<option data-i18n="magic" value="@{magic}">Magic</option>
|
||||
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
||||
</select>
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="undefined_limit}">
|
||||
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_language_${x}_limit}">
|
||||
<option value="none">-</option>
|
||||
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
||||
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
||||
@@ -679,19 +679,19 @@
|
||||
<div class="collapse"><span name="attr_notes"></span></div>
|
||||
<div class="settings">
|
||||
<label data-i18n-title="skill" title="skill">
|
||||
<input name="attr_skill" placeholder="language" type="text" title="undefined_skill}"/>
|
||||
<input name="attr_skill" placeholder="language" type="text" title="@{repeating_language_${x}_skill}"/>
|
||||
</label>
|
||||
<label data-i18n-title="rating" title="rating">
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="undefined_rating}"/>
|
||||
<input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_language_${x}_rating}"/>
|
||||
</label>
|
||||
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><span data-i18n="ratingmodifier">Rating Modifier</span>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="undefined_rating_modifier}"/>
|
||||
<input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_language_${x}_rating_modifier}"/>
|
||||
</label>
|
||||
<label data-i18n-title="specialization" title="specialization"> <span data-i18n="specialization">specialization</span>
|
||||
<input name="attr_specialization}" placeholder="Specalizations" type="text" title="undefined_specialization}"/>
|
||||
<input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_language_${x}_specialization}"/>
|
||||
</label>
|
||||
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="undefined_notes}"></textarea>
|
||||
<textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_language_${x}_notes}"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -3493,6 +3493,11 @@ const onepointthreefive = () => {
|
||||
return values
|
||||
}
|
||||
|
||||
const getRepeatingSection = triggerName => {
|
||||
const split = triggerName.split('_');
|
||||
return `${split[0]}_${split[1]}_${split[2]}`
|
||||
}
|
||||
|
||||
const calculateLimitTotal = (values, type) => {
|
||||
const attributes = sheetAttribues[`${type}Limits`];
|
||||
values.essence ? Math.ceil(values.essence) || 0 : false;
|
||||
@@ -4147,78 +4152,102 @@ const onepointthreefive = () => {
|
||||
});
|
||||
|
||||
//REFACTORED Skills
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}`, eventinfo => {
|
||||
const source = eventinfo.sourceAttribute;
|
||||
const type = eventinfo.sourceType;
|
||||
if (source.includes("rating")) {
|
||||
getAttrs([`${field}_rating`, `${field}_rating_modifier`], (v) => {
|
||||
const bas = parseInt(v[`${field}_rating`]) || 0;
|
||||
const mod = parseInt(v[`${field}_rating_modifier`]) || 0;
|
||||
const tot = bas + mod;
|
||||
setAttrs({
|
||||
[`${field}_dicepool`]: tot,
|
||||
[`${field}_display_rating`]: (mod === 0) ? bas : `${bas} (${tot})`
|
||||
});
|
||||
});
|
||||
} else if (source.includes("attribute") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
const attribute = v[`${source}`].slice(2, -1);
|
||||
const translation = getTranslationByKey(`${attribute}`);
|
||||
setAttrs({
|
||||
[`${field}_display_attribute`]: translation
|
||||
});
|
||||
});
|
||||
} else if (source.includes("limit") && type === "player") {
|
||||
const limit = eventinfo.newValue.slice(2, -1);
|
||||
if (eventinfo.newValue === "none") {
|
||||
setAttrs({
|
||||
[`${field}_display_limit`]: ""
|
||||
});
|
||||
} else {
|
||||
const translation = getTranslationByKey(`${limit}`);
|
||||
setAttrs({
|
||||
[`${field}_display_limit`]: `${translation} ${eventinfo.newValue}`
|
||||
});
|
||||
}
|
||||
} else if (source.includes("specialization") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
const bas = v[`${source}`];
|
||||
const size = bas.length;
|
||||
let display = (size > 0 && size <= 20) ? `(${bas})` : (size > 20 ) ? "(" + bas.slice(0, 20) + "...)" : " ";
|
||||
setAttrs({
|
||||
[`${eventinfo.triggerName}_display_specialization`]: display
|
||||
});
|
||||
});
|
||||
} else if (source.includes("skill") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
console.log(eventinfo)
|
||||
const bas = v[`${source}`];
|
||||
const size = bas.length;
|
||||
let display = (size > 0 && size <= 20) ? bas : (size > 20 ) ? bas.slice(0, 20) + "..." : " ";
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:rating change:repeating_${field}:rating_modifier`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
console.log(display)
|
||||
console.log(field)
|
||||
setAttrs({
|
||||
[`${eventinfo.triggerName}_display`]: display
|
||||
});
|
||||
});
|
||||
} else if (source.includes("dicepool") && type === "player") {
|
||||
getAttrs([`${source}`, `${field}_skill`], (v) => {
|
||||
const skill = v[`${field}_skill`];
|
||||
let lowercase = skill.toLowerCase();
|
||||
let removeGroup = (lowercase.includes("group")) ? lowercase.slice(0, -6) : lowercase;
|
||||
let skillSet = (removeGroup.includes(" ")) ? removeGroup.replace(/ /g,"") : removeGroup;
|
||||
setAttrs({
|
||||
[`${skillSet}`]: v[`${source}`]
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log(`Change to ${field} did not set attr`);
|
||||
};
|
||||
});
|
||||
});
|
||||
getAttrs([`${section}_rating`, `${section}_rating_modifier`], value => {
|
||||
const numbers = parseIntegers(value);
|
||||
const base = numbers[`${section}_rating`];
|
||||
const total = calculateSum(Object.values(numbers));
|
||||
|
||||
setAttrs({
|
||||
[`${section}_dicepool`]: total,
|
||||
[`${section}_display_rating`]: numbers[`${section}_rating_modifier`] === 0 ? base : `${base} (${total})`
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:attribute`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const attribute = eventinfo.newValue.slice(2, -1)
|
||||
const translation = getTranslationByKey(`${attribute}`)
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_attribute`]: translation
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:limit`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const limit = eventinfo.newValue.slice(2, -1);
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_limit`]: eventinfo.newValue === "none" ? "" : `${getTranslationByKey(`${limit}`)} ${eventinfo.newValue}`
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:specialization`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const base = eventinfo.newValue;
|
||||
const size = base.length;
|
||||
const display = size > 0 && size <= 20 ? `(${base})` : size > 20 ? "(" + base.slice(0, 20) + "...)" : " ";
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_specialization`]: display
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:skill`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const base = eventinfo.newValue;
|
||||
const size = base.length;
|
||||
const display = size > 0 && size <= 20 ? base : size > 20 ? base.slice(0, 20) + "...)" : " ";
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display`]: display
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:dicepool`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
getAttrs([`${section}_skill`], value => {
|
||||
let skill = value[`${section}_skill`];
|
||||
skill = skill.toLowerCase();
|
||||
skill = skill.includes("group") ? skill.split(' group')[0] : skill
|
||||
skill = skill.includes(" ") ? skill.replace(/ /g,"") : skill
|
||||
|
||||
setAttrs({
|
||||
[`${skill}`]: eventinfo.newValue
|
||||
});
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
//Setting the Default attribute name for default skill
|
||||
on("change:default_attribute", (eventinfo) => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
input(name='attr_version' type='hidden' value='4.0')
|
||||
input(name='attr_version' type='hidden' value='4.01')
|
||||
|
||||
//- CHARACTER SHEET PAGE
|
||||
input.sheet_type(name='attr_sheet_type' type='hidden' value='pc')
|
||||
@@ -12,7 +12,6 @@ include src/pug/_mixins.pug
|
||||
//- VARIABLES
|
||||
include src/pug/_variables.pug
|
||||
|
||||
|
||||
.pc
|
||||
.tabs
|
||||
img(alt='Shadowrun black and metallic logo' src='https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/images/ShadowrunLogo.png')
|
||||
@@ -74,8 +73,8 @@ include src/pug/_variables.pug
|
||||
+attributeSelect('Agility')
|
||||
select.limit-select(name='attr_limit' title='Skill limit')
|
||||
+limitSelect('Physical')
|
||||
fieldset(class='repeating_' + key)
|
||||
- const skillsRepeatingSection = `@{repeating_${val[0]}`+'_${x}';
|
||||
fieldset(class=`repeating_${key}`)
|
||||
- const skillsRepeatingSection = `@{repeating_${key}_`+'${x}';
|
||||
|
||||
input(name='attr_display' type='hidden')
|
||||
input(name='attr_display_rating' type='hidden')
|
||||
@@ -84,36 +83,36 @@ include src/pug/_variables.pug
|
||||
input(name='attr_display_attribute' type='hidden' value=val[1])
|
||||
input(name='attr_dicepool' type='hidden' value='0')
|
||||
|
||||
input.settings-flag(name='attr_flag' type='hidden' value='settings' title=`${repeatingSection}_flag}`)
|
||||
input.settings-flag(name='attr_flag' type='hidden' value='settings' title=`${skillsRepeatingSection}_flag}`)
|
||||
.buttons
|
||||
//- SKILL BUTTON
|
||||
+skillButton(false)
|
||||
//- SPECILIZATION BUTTON
|
||||
+skillButton(true)
|
||||
span.text-align-center(name='attr_display_rating' title=`${skillsRepeatingSection}_display_rating}`)
|
||||
select.attribute-select(name='attr_attribute' title=`${repeatingSection}_attribute}`)
|
||||
select.attribute-select(name='attr_attribute' title=`${skillsRepeatingSection}_attribute}`)
|
||||
+attributeSelect(val[1])
|
||||
select.limit-select(name='attr_limit' value='physical_limit' title=`${repeatingSection}_limit}`)
|
||||
select.limit-select(name='attr_limit' value='physical_limit' title=`${skillsRepeatingSection}_limit}`)
|
||||
+limitSelect(val[2])
|
||||
+repeatingSectionFlags()
|
||||
.settings
|
||||
if key === 'active'
|
||||
select.skill-select(name='attr_skill' value='Close Combat Group' title=`${repeatingSection}_skill}`)
|
||||
select.skill-select(name='attr_skill' value='Close Combat Group' title=`${skillsRepeatingSection}_skill}`)
|
||||
include src/html/skillselect.html
|
||||
else
|
||||
label(data-i18n-title='skill' title='skill')
|
||||
input(name='attr_skill' placeholder=key type='text' title=`${repeatingSection}_skill}`)
|
||||
input(name='attr_skill' placeholder=key type='text' title=`${skillsRepeatingSection}_skill}`)
|
||||
label(data-i18n-title='rating' title='rating')
|
||||
input(name='attr_rating' min='0' placeholder='0' type='number' title=`${repeatingSection}_rating}`)
|
||||
input(name='attr_rating' min='0' placeholder='0' type='number' title=`${skillsRepeatingSection}_rating}`)
|
||||
label(data-i18n-title='ratingmodifier' title='Rating Modifier')
|
||||
span(data-i18n='ratingmodifier') Rating Modifier
|
||||
input(name='attr_rating_modifier' placeholder='0' type='number' title=`${repeatingSection}_rating_modifier}`)
|
||||
input(name='attr_rating_modifier' placeholder='0' type='number' title=`${skillsRepeatingSection}_rating_modifier}`)
|
||||
label(data-i18n-title='specialization' title='specialization')
|
||||
span(data-i18n='specialization') specialization
|
||||
input(name='attr_specialization}' placeholder='Specalizations' type='text' title=`${repeatingSection}_specialization}`)
|
||||
input(name='attr_specialization' placeholder='Specalizations' type='text' title=`${skillsRepeatingSection}_specialization}`)
|
||||
label(data-i18n-title='notes' title='notes')
|
||||
span(data-i18n='notes') Notes
|
||||
textarea(name='attr_notes' value='' placeholder='Notes' title=`${repeatingSection}_notes}`)
|
||||
textarea(name='attr_notes' value='' placeholder='Notes' title=`${skillsRepeatingSection}_notes}`)
|
||||
|
||||
|
||||
//- CORE TAB
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
return values
|
||||
}
|
||||
|
||||
const getRepeatingSection = triggerName => {
|
||||
const split = triggerName.split('_');
|
||||
return `${split[0]}_${split[1]}_${split[2]}`
|
||||
}
|
||||
|
||||
const calculateLimitTotal = (values, type) => {
|
||||
const attributes = sheetAttribues[`${type}Limits`];
|
||||
values.essence ? Math.ceil(values.essence) || 0 : false;
|
||||
|
||||
@@ -449,78 +449,102 @@
|
||||
});
|
||||
|
||||
//REFACTORED Skills
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}`, eventinfo => {
|
||||
const source = eventinfo.sourceAttribute;
|
||||
const type = eventinfo.sourceType;
|
||||
if (source.includes("rating")) {
|
||||
getAttrs([`${field}_rating`, `${field}_rating_modifier`], (v) => {
|
||||
const bas = parseInt(v[`${field}_rating`]) || 0;
|
||||
const mod = parseInt(v[`${field}_rating_modifier`]) || 0;
|
||||
const tot = bas + mod;
|
||||
setAttrs({
|
||||
[`${field}_dicepool`]: tot,
|
||||
[`${field}_display_rating`]: (mod === 0) ? bas : `${bas} (${tot})`
|
||||
});
|
||||
});
|
||||
} else if (source.includes("attribute") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
const attribute = v[`${source}`].slice(2, -1);
|
||||
const translation = getTranslationByKey(`${attribute}`);
|
||||
setAttrs({
|
||||
[`${field}_display_attribute`]: translation
|
||||
});
|
||||
});
|
||||
} else if (source.includes("limit") && type === "player") {
|
||||
const limit = eventinfo.newValue.slice(2, -1);
|
||||
if (eventinfo.newValue === "none") {
|
||||
setAttrs({
|
||||
[`${field}_display_limit`]: ""
|
||||
});
|
||||
} else {
|
||||
const translation = getTranslationByKey(`${limit}`);
|
||||
setAttrs({
|
||||
[`${field}_display_limit`]: `${translation} ${eventinfo.newValue}`
|
||||
});
|
||||
}
|
||||
} else if (source.includes("specialization") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
const bas = v[`${source}`];
|
||||
const size = bas.length;
|
||||
let display = (size > 0 && size <= 20) ? `(${bas})` : (size > 20 ) ? "(" + bas.slice(0, 20) + "...)" : " ";
|
||||
setAttrs({
|
||||
[`${eventinfo.triggerName}_display_specialization`]: display
|
||||
});
|
||||
});
|
||||
} else if (source.includes("skill") && type === "player") {
|
||||
getAttrs([`${source}`], (v) => {
|
||||
console.log(eventinfo)
|
||||
const bas = v[`${source}`];
|
||||
const size = bas.length;
|
||||
let display = (size > 0 && size <= 20) ? bas : (size > 20 ) ? bas.slice(0, 20) + "..." : " ";
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:rating change:repeating_${field}:rating_modifier`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
console.log(display)
|
||||
console.log(field)
|
||||
setAttrs({
|
||||
[`${eventinfo.triggerName}_display`]: display
|
||||
});
|
||||
});
|
||||
} else if (source.includes("dicepool") && type === "player") {
|
||||
getAttrs([`${source}`, `${field}_skill`], (v) => {
|
||||
const skill = v[`${field}_skill`];
|
||||
let lowercase = skill.toLowerCase();
|
||||
let removeGroup = (lowercase.includes("group")) ? lowercase.slice(0, -6) : lowercase;
|
||||
let skillSet = (removeGroup.includes(" ")) ? removeGroup.replace(/ /g,"") : removeGroup;
|
||||
setAttrs({
|
||||
[`${skillSet}`]: v[`${source}`]
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.log(`Change to ${field} did not set attr`);
|
||||
};
|
||||
});
|
||||
});
|
||||
getAttrs([`${section}_rating`, `${section}_rating_modifier`], value => {
|
||||
const numbers = parseIntegers(value);
|
||||
const base = numbers[`${section}_rating`];
|
||||
const total = calculateSum(Object.values(numbers));
|
||||
|
||||
setAttrs({
|
||||
[`${section}_dicepool`]: total,
|
||||
[`${section}_display_rating`]: numbers[`${section}_rating_modifier`] === 0 ? base : `${base} (${total})`
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:attribute`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const attribute = eventinfo.newValue.slice(2, -1)
|
||||
const translation = getTranslationByKey(`${attribute}`)
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_attribute`]: translation
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:limit`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const limit = eventinfo.newValue.slice(2, -1);
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_limit`]: eventinfo.newValue === "none" ? "" : `${getTranslationByKey(`${limit}`)} ${eventinfo.newValue}`
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:specialization`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const base = eventinfo.newValue;
|
||||
const size = base.length;
|
||||
const display = size > 0 && size <= 20 ? `(${base})` : size > 20 ? "(" + base.slice(0, 20) + "...)" : " ";
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display_specialization`]: display
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:skill`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
const base = eventinfo.newValue;
|
||||
const size = base.length;
|
||||
const display = size > 0 && size <= 20 ? base : size > 20 ? base.slice(0, 20) + "...)" : " ";
|
||||
|
||||
setAttrs({
|
||||
[`${section}_display`]: display
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
sheetAttribues.repeatingSkills.forEach(field => {
|
||||
on(`change:repeating_${field}:dicepool`, eventinfo => {
|
||||
const section = getRepeatingSection(eventinfo.triggerName);
|
||||
|
||||
if (eventinfo.sourceType === "player") {
|
||||
getAttrs([`${section}_skill`], value => {
|
||||
let skill = value[`${section}_skill`];
|
||||
skill = skill.toLowerCase();
|
||||
skill = skill.includes("group") ? skill.split(' group')[0] : skill
|
||||
skill = skill.includes(" ") ? skill.replace(/ /g,"") : skill
|
||||
|
||||
setAttrs({
|
||||
[`${skill}`]: eventinfo.newValue
|
||||
});
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
//Setting the Default attribute name for default skill
|
||||
on("change:default_attribute", (eventinfo) => {
|
||||
|
||||
Reference in New Issue
Block a user