Initial commit

This commit is contained in:
Anthony Murphy
2022-08-29 20:22:04 +10:00
parent 0092d71504
commit 09196a90cc
59 changed files with 3506 additions and 2 deletions

View File

@ -0,0 +1,144 @@
export class RMSSActor extends Actor {
/** @override */
prepareData() {
// Prepare data for the actor. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
super.prepareData();
}
prepareDerivedData() {
const actorData = this.data;
const data = actorData.data;
const flags = actorData.flags.rmss || {};
// Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized.
this._prepareCharacterData(actorData);
this._prepareNpcData(actorData);
}
/**
* Prepare Character type specific data
*/
_prepareCharacterData(actorData) {
if (actorData.type !== 'character') return;
// Calculate Stat Bonuses in Actor
this.prepareStatBonuses(actorData)
// Calculate Resistance Rolls in Actor
this.prepareResistanceRolls(actorData);
// Iterate through and apply Stat bonuses for Skill Category Items
this.prepareSkillCatStatBonuses();
}
/**
* Prepare NPC type specific data.
*/
_prepareNpcData(actorData) {
if (actorData.type !== 'npc') return;
// Make modifications to data here. For example:
const data = actorData.data;
data.xp = (data.cr * data.cr) * 100;
}
prepareStatBonuses(actorData) {
const data = actorData.data;
actorData.data.stats.agility.stat_bonus = Number(data.stats.agility.racial_bonus)+Number(data.stats.agility.special_bonus)+Number(data.stats.agility.basic_bonus);
actorData.data.stats.constitution.stat_bonus = Number(data.stats.constitution.racial_bonus)+Number(data.stats.constitution.special_bonus)+Number(data.stats.constitution.basic_bonus);
actorData.data.stats.memory.stat_bonus = Number(data.stats.memory.racial_bonus)+Number(data.stats.memory.special_bonus)+Number(data.stats.memory.basic_bonus);
actorData.data.stats.reasoning.stat_bonus = Number(data.stats.reasoning.racial_bonus)+Number(data.stats.reasoning.special_bonus)+Number(data.stats.reasoning.basic_bonus);
actorData.data.stats.self_discipline.stat_bonus = Number(data.stats.self_discipline.racial_bonus)+Number(data.stats.self_discipline.special_bonus)+Number(data.stats.self_discipline.basic_bonus);
actorData.data.stats.empathy.stat_bonus = Number(data.stats.empathy.racial_bonus)+Number(data.stats.empathy.special_bonus)+Number(data.stats.empathy.basic_bonus);
actorData.data.stats.intuition.stat_bonus = Number(data.stats.intuition.racial_bonus)+Number(data.stats.intuition.special_bonus)+Number(data.stats.intuition.basic_bonus);
actorData.data.stats.presence.stat_bonus = Number(data.stats.presence.racial_bonus)+Number(data.stats.presence.special_bonus)+Number(data.stats.presence.basic_bonus);
actorData.data.stats.quickness.stat_bonus = Number(data.stats.quickness.racial_bonus)+Number(data.stats.quickness.special_bonus)+Number(data.stats.quickness.basic_bonus);
actorData.data.stats.strength.stat_bonus = Number(data.stats.strength.racial_bonus)+Number(data.stats.strength.special_bonus)+Number(data.stats.strength.basic_bonus);
}
prepareResistanceRolls(actorData) {
const data = actorData.data;
actorData.data.resistance_rolls.essence = Number(actorData.data.stats.empathy.stat_bonus * 3)
actorData.data.resistance_rolls.channeling = Number(actorData.data.stats.intuition.stat_bonus * 3)
actorData.data.resistance_rolls.mentalism = Number(actorData.data.stats.presence.stat_bonus * 3)
actorData.data.resistance_rolls.fear = Number(actorData.data.stats.self_discipline.stat_bonus * 3)
actorData.data.resistance_rolls.poison_disease = Number(actorData.data.stats.constitution.stat_bonus * 3)
actorData.data.resistance_rolls.chann_ess = Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.empathy.stat_bonus)
actorData.data.resistance_rolls.chann_ment = Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
actorData.data.resistance_rolls.ess_ment = Number(actorData.data.stats.empathy.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
actorData.data.resistance_rolls.arcane = Number(actorData.data.stats.empathy.stat_bonus) + Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
}
prepareSkillCatStatBonuses() {
console.log("Getting Items");
for (const item of this.items) {
if (item.type === "skill_category") {
// Get all the applicable stats for this skill category
var app_stat_1 = item.data.data.app_stat_1;
var app_stat_2 = item.data.data.app_stat_2;
var app_stat_3 = item.data.data.app_stat_3;
console.log(item.name + " " + app_stat_1 + " " + app_stat_2 + " " + app_stat_3);
// If the first one is None we don't need to do anything further
if (app_stat_1 === "None") {
continue;
}
else
{
var applicable_stat_bonus = 0;
var app_stat_1_found = false;
var app_stat_2_found = false;
var app_stat_3_found = false;
// Iterate through the applicable stats and find their full names
for (const stat in CONFIG.rmss.stats) {
// If the configured App Stat matches the one of the stats in config
if (app_stat_1 === CONFIG.rmss.stats[stat].shortname) {
console.log("Found first stat: " + stat);
app_stat_1_found = true;
// Get the Stat Bonus
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
if (app_stat_2 === CONFIG.rmss.stats[stat].shortname) {
console.log("Found second stat: " + stat);
app_stat_2_found = true;
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
if (app_stat_3 === CONFIG.rmss.stats[stat].shortname) {
console.log("Found third stat: " + stat);
app_stat_3_found = true;
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
}
console.log("Applicable Stat Bonus: " + applicable_stat_bonus)
if (app_stat_1_found === true && app_stat_2_found === true && app_stat_3_found === true) {
// Apply the update if we found stat bonuses for every applicable stat
item.data.data.stat_bonus = applicable_stat_bonus;
// Update the total in the Item
item.calculateSkillCatTotalBonus(item.data);
}
}
}
}
}
}

View File

@ -0,0 +1,77 @@
export class RMSSItem extends Item {
/** @override */
prepareData() {
// Prepare data for the item. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
super.prepareData();
}
// Set the images for newly created images (need to fix for copied images).
async _preCreate(data, options, userId) {
await super._preCreate(data, options, userId);
if (!data.img) {
if (this.data.type == "armor") {
await this.data.update({img: "systems/rmss/assets/default/armor.svg"});
}
else if (this.data.type == "weapon") {
await this.data.update({img: "systems/rmss/assets/default/weapon.svg"});
}
else if (this.data.type == "skill") {
await this.data.update({img: "systems/rmss/assets/default/skill.svg"});
}
else if (this.data.type == "skill_category") {
await this.data.update({img: "systems/rmss/assets/default/skill_category.svg"});
}
else if (this.data.type == "spell") {
await this.data.update({img: "systems/rmss/assets/default/spell.svg"});
}
else if (this.data.type == "herb_or_poison") {
await this.data.update({img: "systems/rmss/assets/default/herb_or_poison.svg"});
}
else if (this.data.type == "transport") {
await this.data.update({img: "systems/rmss/assets/default/transport.svg"});
}
}
}
calculateSkillCatTotalBonus(itemData) {
// Calculate Stat Bonuses
const data = itemData.data;
itemData.data.total_bonus = Number(data.rank_bonus)+Number(data.stat_bonus)+Number(data.prof_bonus)+Number(data.special_bonus_1)+Number(data.special_bonus_2);
}
prepareDerivedData() {
const itemData = this.data;
const data = itemData.data;
const flags = itemData.flags.rmss || {};
// Make separate methods for each item type to keep things organized.
this._prepareSkillCategoryData(itemData);
this._prepareSkillData(itemData);
}
_prepareSkillCategoryData(itemData) {
if (itemData.type !== 'skill_category') return;
// Make modifications to data here. For example:
//const data = itemData.data;
// Calculate Stat Bonuses
this.calculateSkillCatTotalBonus(itemData);
}
_prepareSkillData(itemData) {
if (itemData.type !== 'skill') return;
// Make modifications to data here. For example:
const data = itemData.data;
// Calculate Stat Bonuses
itemData.data.total_bonus = Number(data.rank_bonus)+Number(data.category_bonus)+Number(data.item_bonus)+Number(data.special_bonus_1)+Number(data.special_bonus_2);
}
}