#6 : Skill experience management
This commit is contained in:
@ -160,6 +160,11 @@ export class SoSActor extends Actor {
|
||||
return Math.ceil( (this.data.data.stats.strength.value + this.data.data.stats.endurance.value) / 2) + this.data.data.scores.wound.bonusmalus;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkillExperience( skillName ) {
|
||||
return this.data.items.filter( item => item.type == 'skillexperience' && item.data.skill == skillName);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async wornObject( itemID) {
|
||||
let item = this.getOwnedItem(itemID);
|
||||
@ -262,13 +267,15 @@ export class SoSActor extends Actor {
|
||||
selectedStat: 'strength',
|
||||
consequencesList: duplicate( this.getApplicableConsequences() ),
|
||||
wounds: duplicate( this.data.data.wounds),
|
||||
skillExperienceList: this.getSkillExperience( skill.name),
|
||||
skill: duplicate(skill),
|
||||
actor: this,
|
||||
modifierList: SoSUtility.fillRange(-10, +10),
|
||||
tnList: SoSUtility.fillRange(6, 20),
|
||||
malusConsequence: 0,
|
||||
bonusConsequence: 0,
|
||||
woundMalus: 0
|
||||
woundMalus: 0,
|
||||
bonusSkillXP: 0
|
||||
}
|
||||
flipData.statList['nostat'] = { label: "No stat (ie defaulting skills)", value: 0, cardsuit: "none" }
|
||||
let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/dialog-flip.html', flipData);
|
||||
@ -297,6 +304,7 @@ export class SoSActor extends Actor {
|
||||
target: target,
|
||||
selectedStat: selectedStatName,
|
||||
consequencesList: duplicate( this.getApplicableConsequences() ),
|
||||
skillExperienceList: this.getSkillExperience( skill.name),
|
||||
wounds: duplicate( this.data.data.wounds),
|
||||
skill: duplicate(skill),
|
||||
actor: this,
|
||||
@ -304,7 +312,8 @@ export class SoSActor extends Actor {
|
||||
tnList: SoSUtility.fillRange(6, 20),
|
||||
malusConsequence: 0,
|
||||
bonusConsequence: 0,
|
||||
woundMalus: 0
|
||||
woundMalus: 0,
|
||||
bonusSkillXP: 0
|
||||
}
|
||||
|
||||
console.log(flipData);
|
||||
|
@ -45,7 +45,12 @@ export class SoSItemSheet extends ItemSheet {
|
||||
async getData() {
|
||||
let data = super.getData();
|
||||
data.isGM = game.user.isGM;
|
||||
|
||||
if ( data.item.type == 'skillexperience') {
|
||||
data.skillList = await SoSUtility.loadCompendiumNames("foundryvtt-shadows-over-sol.skills");
|
||||
}
|
||||
if ( data.item.type == 'skill' && this.object.options?.actor) {
|
||||
data.skillExperienceList = this.object.options.actor.getSkillExperience( data.item.name );
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -57,6 +62,19 @@ export class SoSItemSheet extends ItemSheet {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.object.options.actor.getOwnedItem(li.data("item-id"));
|
||||
console.log("ITEM", item, li.data("item-id"), li);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.object.options.actor.deleteOwnedItem( li.data("item-id") ).then( this.render(true));
|
||||
//this.render(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@ export class SoSFlipDialog extends Dialog {
|
||||
scoreBase += this.flipData.malusConsequence;
|
||||
scoreBase += this.flipData.bonusConsequence;
|
||||
scoreBase += this.flipData.woundMalus;
|
||||
scoreBase += this.flipData.bonusSkillXP;
|
||||
$('#wound-malus').text(this.flipData.woundMalus);
|
||||
$('#score-base').text( scoreBase);
|
||||
}
|
||||
@ -74,7 +75,18 @@ export class SoSFlipDialog extends Dialog {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateSkillXPBonus(event) {
|
||||
this.flipData.skillXPSelected = $('#skillXPBonus').val();
|
||||
let bonusSkillXP = 0;
|
||||
for (let skillXPId of this.flipData.skillXPSelected) {
|
||||
bonusSkillXP += 1;
|
||||
}
|
||||
$('#skillxp-bonus').text(bonusSkillXP);
|
||||
this.flipData.bonusSkillXP = bonusSkillXP;
|
||||
this.updateScoreBase();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateConsequenceMalus(event) {
|
||||
this.flipData.consequencesSelected = $('#consequenceSelectMalus').val();
|
||||
@ -122,7 +134,9 @@ export class SoSFlipDialog extends Dialog {
|
||||
html.find('#statSelect').change((event) => {
|
||||
this.updateFlip(dialog.flipData );
|
||||
} );
|
||||
|
||||
html.find('#skillXPBonus').change((event) => {
|
||||
this.updateSkillXPBonus( event );
|
||||
} );
|
||||
html.find('#consequenceSelectMalus').change((event) => {
|
||||
this.updateConsequenceMalus( event );
|
||||
} );
|
||||
|
@ -34,7 +34,7 @@ export class SoSUtility extends Entity {
|
||||
static fillRange (start, end) {
|
||||
return Array(end - start + 1).fill().map((item, index) => start + index);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage( msg ) {
|
||||
if( !game.user.isGM ) return; // Only GM
|
||||
|
Reference in New Issue
Block a user