Compare commits
37 Commits
fvtt-dark-
...
fvtt-dark-
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f93849a9d | |||
| 14c7e54b3d | |||
| ce3359b2f0 | |||
| 02bf6cc10a | |||
| dc5a1056b7 | |||
| c7ccc50db0 | |||
| 1f8275e153 | |||
| e19e6df228 | |||
| 714485b688 | |||
| ceed6efc0b | |||
| 06e265586b | |||
| 78edf6b80b | |||
| 60112d1a79 | |||
| 652f24b863 | |||
| 69322cccfe | |||
| 5d0c53f52b | |||
| 9557f18eb2 | |||
| c3758da16b | |||
| 7dbc5e44b7 | |||
| 880109f189 | |||
| 2dbf8fc336 | |||
| 9b7519afa7 | |||
| 285d095d91 | |||
| 79333f8b14 | |||
| 5477e2be4b | |||
| f98852c69f | |||
| 32b5868646 | |||
| 606271e725 | |||
| 2da3d19dbe | |||
| 7ceada98fb | |||
| 580b044c77 | |||
| 83119a2b82 | |||
| 04365a93d0 | |||
| 5f36a58805 | |||
| 55a2d3f4d4 | |||
| 4d6c0cdc4a | |||
| 9ff24b536f |
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
.history
|
||||
todo.md
|
||||
/.vscode
|
||||
/ignored/
|
||||
/node_modules/
|
||||
/jsconfig.json
|
||||
/package.json
|
||||
/package-lock.json
|
||||
BIN
images/icons/magic.webp
Normal file
BIN
images/icons/magic.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
BIN
images/icons/psychicpowers.webp
Normal file
BIN
images/icons/psychicpowers.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
@@ -13,10 +13,10 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-dark-stars", "sheet", "actor"],
|
||||
template: "systems/fvtt-dark-stars/templates/actor-sheet.hbs",
|
||||
template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs",
|
||||
width: 960,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: true
|
||||
});
|
||||
@@ -35,23 +35,24 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
system: actorData,
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills( ),
|
||||
perks: this.actor.getPerks( ),
|
||||
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
||||
ammos: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getAmmos()) ),
|
||||
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getSpells()) ),
|
||||
powers: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getPowers()) ),
|
||||
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
||||
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
||||
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
|
||||
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
|
||||
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
|
||||
cybers: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getCybers()) ),
|
||||
genetics: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getGenetics()) ),
|
||||
equippedArmor: this.actor.getEquippedArmor(),
|
||||
equippedShield: this.actor.getEquippedShield(),
|
||||
feats: duplicate(this.actor.getFeats()),
|
||||
subActors: duplicate(this.actor.getSubActors()),
|
||||
race: duplicate(this.actor.getRace()),
|
||||
moneys: duplicate(this.actor.getMoneys()),
|
||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||
saveRolls: this.actor.getSaveRoll(),
|
||||
conditions: this.actor.getConditions(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}),
|
||||
@@ -98,17 +99,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.equip-activate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipActivate( itemId)
|
||||
});
|
||||
html.find('.equip-deactivate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipDeactivate( itemId)
|
||||
});
|
||||
|
||||
html.find('.subactor-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
@@ -121,6 +111,17 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
let actorId = li.data("actor-id");
|
||||
this.actor.delSubActor(actorId);
|
||||
});
|
||||
|
||||
html.find('.edit-weapon-ammo').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let weaponId = li.data("item-id")
|
||||
this.actor.setWeaponAmmo( weaponId, ev.currentTarget.value )
|
||||
})
|
||||
html.find('.skill-used-id').change(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.setSkillUsed( li.data("item-id"), event.currentTarget.checked );
|
||||
} );
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
@@ -139,10 +140,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.incDecAmmo( li.data("item-id"), +1 )
|
||||
} );
|
||||
|
||||
html.find('.roll-ability').click((event) => {
|
||||
const abilityKey = $(event.currentTarget).data("ability-key");
|
||||
this.actor.rollAbility(abilityKey);
|
||||
});
|
||||
html.find('.roll-skill').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const skillId = li.data("item-id")
|
||||
@@ -154,20 +151,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
});
|
||||
html.find('.roll-armor-die').click((event) => {
|
||||
this.actor.rollArmorDie()
|
||||
});
|
||||
html.find('.roll-shield-die').click((event) => {
|
||||
this.actor.rollShieldDie()
|
||||
});
|
||||
html.find('.roll-target-die').click((event) => {
|
||||
this.actor.rollDefenseRanged()
|
||||
});
|
||||
|
||||
html.find('.roll-save').click((event) => {
|
||||
const saveKey = $(event.currentTarget).data("save-key")
|
||||
this.actor.rollSave(saveKey)
|
||||
});
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
|
||||
@@ -64,26 +64,35 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
computeHitPoints() {
|
||||
if (this.type == "character") {
|
||||
let hp = duplicate(this.system.secondary.hp)
|
||||
let max = (this.system.abilities.str.value + this.system.abilities.con.value) * 6
|
||||
if (max != hp.max || hp.value > max) {
|
||||
hp.max = max
|
||||
hp.value = max // Init case
|
||||
this.update({ 'system.secondary.hp': hp })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeEffortPoints() {
|
||||
if (this.type == "character") {
|
||||
let effort = duplicate(this.system.secondary.effort)
|
||||
let max = (this.system.abilities.con.value + this.system.abilities.int.value) * 6
|
||||
if (max != effort.max || effort.value > max) {
|
||||
effort.max = max
|
||||
effort.value = max // Init case
|
||||
this.update({ 'system.secondary.effort': effort })
|
||||
}
|
||||
computeDerivated() {
|
||||
let attr = this.system.attributes
|
||||
let deriv = this.system.derivated
|
||||
let secondary = this.system.secondary
|
||||
|
||||
deriv.csb.value = Math.round((attr.dex.value + attr.sel.value) / 2) + deriv.csb.bonus
|
||||
deriv.asb.value = Math.round((attr.int.value + attr.edu.value) / 2) + deriv.asb.bonus
|
||||
deriv.ssb.value = Math.round((attr.cha.value + attr.emp.value + attr.att.value) / 3) + deriv.ssb.bonus
|
||||
deriv.msb.value = Math.round((attr.con.value + attr.str.value ) / 2) + deriv.msb.bonus
|
||||
deriv.psb.value = Math.round((attr.str.value + attr.dex.value + attr.con.value) / 3) + deriv.psb.bonus
|
||||
|
||||
deriv.ego.value = attr.str.value + attr.cha.value + attr.sel.value + attr.emp.value + deriv.ego.bonus
|
||||
deriv.hup.value = (attr.emp.value * 10) + deriv.hup.bonus
|
||||
deriv.ss.value = (attr.edu.value * 10) + (attr.int.value * 10) + 250 + deriv.ss.bonus
|
||||
|
||||
deriv.mcdb.value = Math.round( (attr.str.value + attr.siz.value) / 4) + deriv.mcdb.bonus
|
||||
deriv.si.value = Math.round( ((attr.dex.value + attr.sel.value) / 5) + 0.5) + deriv.si.bonus
|
||||
|
||||
secondary.hp.max = ((attr.con.value + attr.siz.value ) * 2) + secondary.hp.bonus
|
||||
for(let key in this.system.hitlocations) {
|
||||
let loc = this.system.hitlocations[key]
|
||||
loc.max = Math.floor(secondary.hp.max * loc.ratio)
|
||||
}
|
||||
|
||||
secondary.fp.max = 10 + attr.str.value + attr.con.value + secondary.fp.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -91,9 +100,9 @@ export class DarkStarsActor extends Actor {
|
||||
|
||||
if (this.type == 'character' || game.user.isGM) {
|
||||
this.system.encCapacity = this.getEncumbranceCapacity()
|
||||
this.computeDerivated()
|
||||
this.buildContainerTree()
|
||||
this.computeHitPoints()
|
||||
this.computeEffortPoints()
|
||||
}
|
||||
|
||||
super.prepareDerivedData();
|
||||
@@ -110,35 +119,6 @@ export class DarkStarsActor extends Actor {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMoneys() {
|
||||
let comp = this.items.filter(item => item.type == 'money');
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeats() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeatsWithDie() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.isfeatdie) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getFeatsWithSL() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.issl) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getLore() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'spell') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getEquippedWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@@ -150,6 +130,16 @@ export class DarkStarsActor extends Actor {
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getSpells() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'spell') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getPowers() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'psychic') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getEquippedArmor() {
|
||||
let comp = this.items.find(item => item.type == 'armor' && item.system.equipped)
|
||||
if (comp) {
|
||||
@@ -158,6 +148,17 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCybers() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'cyber') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getGenetics() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'genetic') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getShields() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'shield') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@@ -171,12 +172,14 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getRace() {
|
||||
let race = this.items.filter(item => item.type == 'race')
|
||||
return race[0] ?? [];
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
checkAndPrepareEquipment(item) {
|
||||
// Dynamic assign ammo for the weapon
|
||||
if (item.type == "weapon" && item.system.needammo) {
|
||||
let ammo = this.items.find(ammo => ammo.type == "ammo" && item.system.ammoid == ammo.id)
|
||||
if (ammo) {
|
||||
item.ammo = duplicate(ammo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -200,6 +203,12 @@ export class DarkStarsActor extends Actor {
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getAmmos() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'ammo') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
@@ -207,23 +216,50 @@ export class DarkStarsActor extends Actor {
|
||||
}
|
||||
return item;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
setWeaponAmmo(weaponId, ammoId) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if(weapon) {
|
||||
this.updateEmbeddedDocuments('Item', [ {_id: weapon.id, 'system.ammoid': ammoId} ])
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
setSkillUsed( skillId, checked) {
|
||||
let skill = this.items.get(skillId)
|
||||
if(skill) {
|
||||
this.updateEmbeddedDocuments('Item', [ {_id: skill.id, 'system.used': checked} ])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateSkill(skill) {
|
||||
skill.derivated = duplicate(this.system.derivated[skill.system.base])
|
||||
skill.total = skill.system.value + skill.derivated.value + skill.system.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
this.computeDerivated()
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
||||
for (let skill of comp) {
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
this.updateSkill(skill)
|
||||
}
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getRelevantAbility(statKey) {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill' && item.system.ability == ability) || []);
|
||||
return comp;
|
||||
getPerks() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'perk') || [])
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getJobs() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'job') || [])
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
@@ -372,7 +408,7 @@ export class DarkStarsActor extends Actor {
|
||||
} else {
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
|
||||
}
|
||||
} else if (object && object.system.containerid) { // remove from container
|
||||
} else if (object?.system.containerid) { // remove from container
|
||||
console.log("Removeing: ", object)
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
||||
}
|
||||
@@ -389,18 +425,20 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system) {
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore(combatId, combatantId) {
|
||||
if (this.type == 'character') {
|
||||
this.rollMR(true, combatId, combatantId)
|
||||
hasLastWord() {
|
||||
return this.items.find(i => i.type == "perk" && i.name.toLowerCase() === "last word")
|
||||
}
|
||||
console.log("Init required !!!!")
|
||||
return -1;
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
let initFormula = (this.system.derivated.si.value + this.system.derivated.si.bonus) + "d6"
|
||||
let initRoll = new Roll(initFormula).roll({ async: false })
|
||||
return initRoll.total
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -428,12 +466,6 @@ export class DarkStarsActor extends Actor {
|
||||
await this.update({ 'system.subactors': newArray });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
syncRoll(rollData) {
|
||||
this.lastRollId = rollData.rollId;
|
||||
DarkStarsUtility.saveRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getOneSkill(skillId) {
|
||||
let skill = this.items.find(item => item.type == 'skill' && item.id == skillId)
|
||||
@@ -488,7 +520,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantity + incDec
|
||||
if (newQ >= 0) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -498,7 +530,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.ammocurrent + incDec;
|
||||
if (newQ >= 0 && newQ <= objetQ.system.ammomax) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -532,6 +564,13 @@ export class DarkStarsActor extends Actor {
|
||||
return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
modifyRerolls( value) {
|
||||
let rerolls = duplicate(this.system.various.rerolls)
|
||||
rerolls.value += value
|
||||
this.update({ 'system.various.rerolls': rerolls })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(abilityKey = undefined) {
|
||||
let noAction = this.isNoAction()
|
||||
@@ -545,20 +584,10 @@ export class DarkStarsActor extends Actor {
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.featsDie = this.getFeatsWithDie()
|
||||
rollData.featsSL = this.getFeatsWithSL()
|
||||
rollData.armors = this.getArmors()
|
||||
rollData.conditions = this.getConditions()
|
||||
rollData.featDieName = "none"
|
||||
rollData.featSLName = "none"
|
||||
rollData.rollAdvantage = "none"
|
||||
rollData.advantage = "none"
|
||||
rollData.disadvantage = "none"
|
||||
rollData.forceAdvantage = this.isForcedAdvantage()
|
||||
rollData.forceDisadvantage = this.isForcedDisadvantage()
|
||||
rollData.forceRollAdvantage = this.isForcedRollAdvantage()
|
||||
rollData.forceRollDisadvantage = this.isForcedRollDisadvantage()
|
||||
rollData.noAdvantage = this.isNoAdvantage()
|
||||
rollData.rerolls = this.system.various.rerolls.value
|
||||
|
||||
if (rollData.defenderTokenId) {
|
||||
let defenderToken = game.canvas.tokens.get(rollData.defenderTokenId)
|
||||
let defender = defenderToken.actor
|
||||
@@ -607,15 +636,11 @@ export class DarkStarsActor extends Actor {
|
||||
rollSkill(skillId) {
|
||||
let skill = this.items.get(skillId)
|
||||
if (skill) {
|
||||
if (skill.system.islore && skill.system.level == 0) {
|
||||
ui.notifications.warn("You can't use Lore Skills with a SL of 0.")
|
||||
return
|
||||
}
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "skill"
|
||||
rollData.title = "Skill " + skill.name
|
||||
rollData.skill = skill
|
||||
rollData.img = skill.img
|
||||
if (rollData.target) {
|
||||
@@ -634,20 +659,13 @@ export class DarkStarsActor extends Actor {
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "weapon"
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
this.checkAndPrepareEquipment(weapon)
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isAttackDisadvantage()
|
||||
}
|
||||
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > DarkStarsUtility.getWeaponMaxRange(rollData.weapon) ) {
|
||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${DarkStarsUtility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
||||
return
|
||||
}*/
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
@@ -655,152 +673,8 @@ export class DarkStarsActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseMelee(attackRollData) {
|
||||
let weapon = this.items.get(attackRollData.defenseWeaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "weapondefense"
|
||||
rollData.shield = this.getEquippedShield()
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isDefenseDisadvantage()
|
||||
}
|
||||
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Weapon not found ! ")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseRanged(attackRollData) {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "rangeddefense"
|
||||
if ( attackRollData) {
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.effectiveRange = DarkStarsUtility.getWeaponRange(attackRollData.weapon)
|
||||
rollData.tokensDistance = attackRollData.tokensDistance // QoL copy
|
||||
}
|
||||
rollData.sizeDice = DarkStarsUtility.getSizeDice(this.system.biodata.size)
|
||||
rollData.distanceBonusDice = 0 //Math.max(0, Math.floor((rollData.tokensDistance - rollData.effectiveRange) + 0.5))
|
||||
rollData.hasCover = "none"
|
||||
rollData.situational = "none"
|
||||
rollData.useshield = false
|
||||
rollData.shield = this.getEquippedShield()
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollShieldDie() {
|
||||
let shield = this.getEquippedShield()
|
||||
if (shield) {
|
||||
shield = duplicate(shield)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "shield"
|
||||
rollData.shield = shield
|
||||
rollData.useshield = true
|
||||
rollData.img = shield.img
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmorDie(rollData = undefined) {
|
||||
let armor = this.getEquippedArmor()
|
||||
if (armor) {
|
||||
armor = duplicate(armor)
|
||||
let reduce = 0
|
||||
let multiply = 1
|
||||
let disadvantage = false
|
||||
let advantage = false
|
||||
let messages = ["Armor applied"]
|
||||
|
||||
if (rollData) {
|
||||
if (DarkStarsUtility.isArmorLight(armor) && DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["Armor ignored : Penetrating weapons ignore Light Armors."] }
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Penetrating weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponLight(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with advantage (Light weapon)")
|
||||
advantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHeavy(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with disadvantage (Heavy weapon)")
|
||||
disadvantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHack(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Hack weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponUndamaging(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor multiplied by 2 (Undamaging weapon)")
|
||||
multiply = 2
|
||||
}
|
||||
}
|
||||
let diceColor = armor.system.absorprionroll
|
||||
let armorResult = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
console.log("Armor log", armorResult)
|
||||
let armorValue = Math.max(0, (Number(armorResult.text) + reduce) * multiply)
|
||||
if (advantage || disadvantage) {
|
||||
let armorResult2 = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
let armorValue2 = Math.max(0, (Number(armorResult2.text) + reduce) * multiply)
|
||||
if (advantage) {
|
||||
armorValue = (armorValue2 > armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor advantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
if (disadvantage) {
|
||||
armorValue = (armorValue2 < armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor disadvantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
}
|
||||
armorResult.armorValue = armorValue
|
||||
if (!rollData) {
|
||||
ChatMessage.create({ content: "Armor result : " + armorValue })
|
||||
}
|
||||
messages.push("Armor result : " + armorValue)
|
||||
return { armorIgnored: false, nbSuccess: armorValue, rawArmor: armorResult.text, messages: messages }
|
||||
}
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["No armor equipped."] }
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSave(saveKey) {
|
||||
let saves = this.getSaveRoll()
|
||||
let save = saves[saveKey]
|
||||
if (save) {
|
||||
save = duplicate(save)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "save"
|
||||
rollData.save = save
|
||||
if (rollData.target) {
|
||||
ui.notifications.warn("You are targetting a token with a save roll - Not authorized.")
|
||||
return
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async startRoll(rollData) {
|
||||
this.syncRoll(rollData)
|
||||
let rollDialog = await DarkStarsRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
@@ -4,27 +4,44 @@ import { DarkStarsUtility } from "./dark-stars-utility.js";
|
||||
export class DarkStarsCombat extends Combat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId]);
|
||||
let id = c._id || c.id;
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
|
||||
processOtherTurns(c, initScore) {
|
||||
let toCreate = []
|
||||
let token = canvas.tokens.get(c.tokenId)
|
||||
let hasLastWord = token.actor.hasLastWord()
|
||||
while ( (initScore > 5) || (hasLastWord && initScore >= 5)) {
|
||||
initScore -= 5;
|
||||
toCreate.push({tokenId: c.tokenId, sceneId: c.sceneId, actorId: c.actorId, hidden: c.hidden, initiative: initScore, flags: { world: { isDuplicated: true} } } );
|
||||
}
|
||||
this.createEmbeddedDocuments("Combatant", toCreate);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
let id = c._id || c.id;
|
||||
let initScore = c.actor ? c.actor.getInitiativeScore(this.id, id) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initScore }]);
|
||||
setTimeout(() => this.processOtherTurns(c, initScore), 400)
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
nextRound() {
|
||||
super.nextRound()
|
||||
let toDelete = []
|
||||
for (let c of this.combatants) {
|
||||
if (c.flags?.world?.isDuplicated) {
|
||||
toDelete.push(c._id)
|
||||
}
|
||||
}
|
||||
this.deleteEmbeddedDocuments("Combatant", toDelete);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(changed, options, userId) {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async checkTurnPosition() {
|
||||
while (game.combat.turn > 0) {
|
||||
await game.combat.previousTurn()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ export const DARKSTARS_CONFIG = {
|
||||
|
||||
basebonus : {
|
||||
"csb": "CSB",
|
||||
"asb": "SSB",
|
||||
"ssb": "SSB",
|
||||
"msb": "MSB",
|
||||
"psb": "PSB",
|
||||
@@ -30,6 +29,25 @@ export const DARKSTARS_CONFIG = {
|
||||
"slug": "Slug throwers",
|
||||
"energy": "Energy"
|
||||
},
|
||||
perktypes: {
|
||||
"normal": "Normal",
|
||||
"advanced": "Advanced",
|
||||
"role": "Role"
|
||||
},
|
||||
magicTypes: {
|
||||
"lemurian": "Lemurian",
|
||||
"bloodmagic": "Blood Magic Ritual",
|
||||
"ritual": "Ritual",
|
||||
"miracle": "Miracle"
|
||||
},
|
||||
cyberTypes: {
|
||||
"I": "I",
|
||||
"P": "P",
|
||||
"U": "U",
|
||||
"W": "W",
|
||||
"E": "E",
|
||||
"GS": "GS"
|
||||
},
|
||||
range: {
|
||||
"1": "Close",
|
||||
"2": "Short",
|
||||
|
||||
@@ -59,8 +59,7 @@ export class DarkStarsItemSheet extends ItemSheet {
|
||||
name: this.object.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
weaponSkills: DarkStarsUtility.getWeaponSkills(),
|
||||
shieldSkills: DarkStarsUtility.getShieldSkills(),
|
||||
skills: DarkStarsUtility.getSkills(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.darkstars.config,
|
||||
system: objectData,
|
||||
@@ -133,21 +132,9 @@ export class DarkStarsItemSheet extends ItemSheet {
|
||||
this.deleteSubitem(ev);
|
||||
});
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
this.viewSubitem(ev);
|
||||
});
|
||||
|
||||
html.find('.view-spec').click(ev => {
|
||||
this.manageSpec();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,9 @@ export const defaultItemImg = {
|
||||
perk: "systems/fvtt-dark-stars/images/icons/perk.webp",
|
||||
ability: "systems/fvtt-dark-stars/images/icons/ability.webp",
|
||||
genetic: "systems/fvtt-dark-stars/images/icons/genetic.webp",
|
||||
cyber: "systems/fvtt-dark-stars/images/icons/cyber.webp"
|
||||
cyber: "systems/fvtt-dark-stars/images/icons/cyber.webp",
|
||||
spell: "systems/fvtt-dark-stars/images/icons/magic.webp",
|
||||
psychic: "systems/fvtt-dark-stars/images/icons/psychicpowers.webp",
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,8 +5,8 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["DarkStarsDialog"], width: 540, height: 340, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/roll-dialog-generic.hbs', rollData);
|
||||
let options = { classes: ["DarkStarsDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/apps/roll-dialog-generic.hbs', rollData);
|
||||
|
||||
return new DarkStarsRollDialog(actor, rollData, html, options);
|
||||
}
|
||||
@@ -58,27 +58,17 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#advantage').change((event) => {
|
||||
this.rollData.advantage = event.currentTarget.value
|
||||
html.find('#bonusMalus').change((event) => {
|
||||
this.rollData.bonusMalus = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#disadvantage').change((event) => {
|
||||
this.rollData.disadvantage = event.currentTarget.value
|
||||
html.find('#above-effective-range').change((event) => {
|
||||
this.rollData.isAboveEffectiveRange = event.currentTarget.checked
|
||||
})
|
||||
html.find('#rollAdvantage').change((event) => {
|
||||
this.rollData.rollAdvantage = event.currentTarget.value
|
||||
})
|
||||
html.find('#useshield').change((event) => {
|
||||
this.rollData.useshield = event.currentTarget.checked
|
||||
})
|
||||
html.find('#hasCover').change((event) => {
|
||||
this.rollData.hasCover = event.currentTarget.value
|
||||
})
|
||||
html.find('#situational').change((event) => {
|
||||
this.rollData.situational = event.currentTarget.value
|
||||
})
|
||||
html.find('#distanceBonusDice').change((event) => {
|
||||
this.rollData.distanceBonusDice = Number(event.currentTarget.value)
|
||||
html.find('#weapon-aiming').change((event) => {
|
||||
this.rollData.weaponAiming = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -50,22 +50,6 @@ export class DarkStarsUtility {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
static gameSettings() {
|
||||
/*game.settings.register("fvtt-dark-stars", "dice-color-skill", {
|
||||
name: "Dice color for skills",
|
||||
hint: "Set the dice color for skills",
|
||||
scope: "world",
|
||||
config: true,
|
||||
requiresReload: true ,
|
||||
default: "#101010",
|
||||
type: String
|
||||
})
|
||||
|
||||
Hooks.on('renderSettingsConfig', (event) => {
|
||||
const element = event.element[0].querySelector(`[name='fvtt-dark-stars.dice-color-skill']`)
|
||||
if (!element) return
|
||||
// Replace placeholder element
|
||||
console.log("Element Found !!!!")
|
||||
}) */
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@@ -78,24 +62,11 @@ export class DarkStarsUtility {
|
||||
static getSkills() {
|
||||
return duplicate(this.skills)
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
static getWeaponSkills() {
|
||||
return duplicate(this.weaponSkills)
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
static getShieldSkills() {
|
||||
return duplicate(this.shieldSkills)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async ready() {
|
||||
const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.skills")
|
||||
this.skills = skills.map(i => i.toObject())
|
||||
this.weaponSkills = duplicate(this.skills.filter(item => item.system.isweaponskill))
|
||||
this.shieldSkills = duplicate(this.skills.filter(item => item.system.isshieldskill))
|
||||
|
||||
const rollTables = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.rolltables")
|
||||
this.rollTables = rollTables.map(i => i.toObject())
|
||||
|
||||
}
|
||||
|
||||
@@ -116,26 +87,16 @@ export class DarkStarsUtility {
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.view-item-from-chat', event => {
|
||||
game.system.crucible.creator.openItemView(event)
|
||||
game.system.darkstars.creator.openItemView(event)
|
||||
})
|
||||
html.on("click", '.roll-defense-melee', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
rollData.defenseWeaponId = $(event.currentTarget).data("defense-weapon-id")
|
||||
let actor = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (actor && (game.user.isGM || actor.isOwner)) {
|
||||
actor.rollDefenseMelee(rollData)
|
||||
}
|
||||
html.on("click", '.chat-reroll', event => {
|
||||
let messageId = this.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "darkstars-roll-data")
|
||||
rollData.reroll = true
|
||||
rollData.roll = undefined
|
||||
this.rollDarkStars(rollData)
|
||||
})
|
||||
html.on("click", '.roll-defense-ranged', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (defender && (game.user.isGM || defender.isOwner)) {
|
||||
defender.rollDefenseRanged(rollData)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -278,176 +239,97 @@ export class DarkStarsUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAimingMalus(location) {
|
||||
if (location == "arm" || location == "head") {
|
||||
return -50
|
||||
}
|
||||
if (location == "torso" || location == "leg") {
|
||||
return -30
|
||||
}
|
||||
if (location == "hand") {
|
||||
return -70
|
||||
}
|
||||
return 0
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getAimingLocation(roll) {
|
||||
if (roll == 1) return "head"
|
||||
if (roll >= 2 && roll <= 4) return "chest"
|
||||
if (roll >= 5 && roll <= 6) return "abdomen"
|
||||
if (roll == 7) return "leftarm"
|
||||
if (roll == 8) return "rightarm"
|
||||
if (roll == 9) return "rightleg"
|
||||
if (roll == 10) return "leftleg"
|
||||
return "abdomen"
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static locationMultiplier(location) {
|
||||
if (location == "head") return 0.3
|
||||
if (location.includes("arm")) return 0.2
|
||||
if (location.includes("leg")) return 0.4
|
||||
if (location == "chest") return 0.5
|
||||
return 0.3 // Abdomen case
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDarkStars(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
|
||||
// ability/save/size => 0
|
||||
let diceFormula
|
||||
let startFormula = "0d6cs>=5[blue]"
|
||||
if (rollData.ability) {
|
||||
startFormula = String(rollData.ability.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.save) {
|
||||
startFormula = String(rollData.save.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.sizeDice) {
|
||||
let nb = rollData.sizeDice.nb + rollData.distanceBonusDice + this.getDiceFromCover(rollData.hasCover) + this.getDiceFromSituational(rollData.situational)
|
||||
startFormula = String(nb) + String(rollData.sizeDice.dice) + "cs>=5[blue]"
|
||||
}
|
||||
diceFormula = startFormula
|
||||
|
||||
// skill => 2
|
||||
// feat => 4
|
||||
// bonus => 6
|
||||
rollData.percentValue = 0
|
||||
if (rollData.skill) {
|
||||
let level = rollData.skill.system.level
|
||||
if (rollData.skill.system.issl2) {
|
||||
rollData.hasSLBonus = true
|
||||
level += 2
|
||||
if (level > 7) { level = 7 }
|
||||
rollData.percentValue = rollData.skill.total
|
||||
}
|
||||
rollData.skill.system.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5[black]"
|
||||
rollData.percentValue += rollData.bonusMalus
|
||||
rollData.diceFormula = "1d100"
|
||||
|
||||
if (rollData.skill.system.skilltype == "complex" && rollData.skill.system.level == 0) {
|
||||
rollData.complexSkillDisadvantage = true
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
if (rollData.isAboveEffectiveRange) {
|
||||
rollData.percentValue -= 30
|
||||
rollData.percentValue = Math.max(0, rollData.percentValue)
|
||||
}
|
||||
|
||||
if (rollData.skill.system.isfeatdie) {
|
||||
rollData.hasFeatDie = true
|
||||
diceFormula += "+ 1d10cs>=5[dark-stars-purple]"
|
||||
} else {
|
||||
diceFormula += `+ 0d10cs>=5[dark-stars-purple]`
|
||||
if (rollData.mode == "weapon") {
|
||||
rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming)
|
||||
rollData.percentValue += rollData.locationMalus
|
||||
}
|
||||
if (rollData.skill.system.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.system.bonusdice
|
||||
diceFormula += `+ ${rollData.hasBonusDice}cs>=5[black]`
|
||||
} else {
|
||||
diceFormula += `+ 0d6cs>=5[black]`
|
||||
}
|
||||
} else {
|
||||
diceFormula += `+ 0d8cs=>5 + 0d10cs>=5 + 0d6cs>=5`
|
||||
}
|
||||
|
||||
// advantage => 8
|
||||
let advFormula = "+ 0d8cs>=5"
|
||||
if (rollData.advantage == "advantage1" || rollData.forceAdvantage) {
|
||||
advFormula = "+ 1d8cs>=5[dark-stars-darkgreen]"
|
||||
}
|
||||
if (rollData.advantage == "advantage2") {
|
||||
advFormula = "+ 2d8cs>=5[dark-stars-darkgreen]"
|
||||
}
|
||||
diceFormula += advFormula
|
||||
|
||||
// disadvantage => 10
|
||||
let disFormula = "- 0d8cs>=5"
|
||||
if (rollData.disadvantage == "disadvantage1" || rollData.forceDisadvantage) {
|
||||
disFormula = "- 1d8cs>=5[red]"
|
||||
}
|
||||
if (rollData.disadvantage == "disadvantage2") {
|
||||
disFormula = "- 2d8cs>=5[red]"
|
||||
}
|
||||
diceFormula += disFormula
|
||||
|
||||
// armor => 12
|
||||
let skillArmorPenalty = 0
|
||||
for (let armor of rollData.armors) {
|
||||
if (armor.system.equipped) {
|
||||
skillArmorPenalty += armor.system.skillpenalty
|
||||
}
|
||||
}
|
||||
if (rollData.skill && rollData.skill.system.armorpenalty && skillArmorPenalty > 0) {
|
||||
rollData.skillArmorPenalty = skillArmorPenalty
|
||||
diceFormula += `- ${skillArmorPenalty}d8cs>=5`
|
||||
} else {
|
||||
diceFormula += `- 0d8cs>=5`
|
||||
}
|
||||
|
||||
// shield => 14
|
||||
if (rollData.useshield && rollData.shield) {
|
||||
diceFormula += "+ 1" + String(rollData.shield.system.shielddie) + "cs>=5[yellow]"
|
||||
} else {
|
||||
diceFormula += " + 0d6cs>=5"
|
||||
}
|
||||
|
||||
// Performs roll
|
||||
console.log("Roll formula", diceFormula)
|
||||
console.log("Roll formula", rollData.diceFormula)
|
||||
let myRoll = rollData.roll
|
||||
if (!myRoll) { // New rolls only of no rerolls
|
||||
myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
}
|
||||
rollData.rollOrder = 0
|
||||
rollData.roll = myRoll
|
||||
rollData.nbSuccess = myRoll.total
|
||||
rollData.roll = duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.total
|
||||
rollData.isCriticalSuccess = rollData.diceResult <= rollData.skill.derivated.value
|
||||
rollData.isCriticalFailure = rollData.diceResult == 100
|
||||
rollData.isSuccess = rollData.diceResult == 1 || rollData.diceResult <= rollData.percentValue
|
||||
rollData.isFailure = rollData.diceResult == 100 || rollData.diceResult > rollData.percentValue
|
||||
rollData.degrees = Math.floor(rollData.percentValue / 10) - Math.floor(rollData.diceResult / 10)
|
||||
rollData.damageMultiplier = rollData.isCriticalSuccess ? 2 : 1
|
||||
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollAdvantage) {
|
||||
rollData.rollAdvantage = "roll-advantage"
|
||||
if (rollData.reroll) {
|
||||
actor.modifyRerolls(-1)
|
||||
rollData.rerolls = 0 // DIsable rerolls
|
||||
}
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollDisadvantage) {
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
if (rollData.rollAdvantage != "none") {
|
||||
|
||||
rollData.rollOrder = 1
|
||||
rollData.rollType = (rollData.rollAdvantage == "roll-advantage") ? "Advantage" : "Disadvantage"
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
if (rollData.mode == "weapon") {
|
||||
if (rollData.weaponAiming == "none") {
|
||||
let rollLoc = new Roll("1d10").roll({ async: false })
|
||||
rollData.weaponAiming = this.getAimingLocation(rollLoc.total)
|
||||
}
|
||||
// Compute
|
||||
rollData.locationMultiplier = this.locationMultiplier(rollData.weaponAiming)
|
||||
}
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
rollData.rollOrder = 2
|
||||
let myRoll2 = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll2, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll2 // Tmp switch to display the proper results
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
rollData.roll = myRoll // Revert the tmp switch
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "roll-advantage") {
|
||||
if (myRoll2.total > rollData.nbSuccess) {
|
||||
hasChanged = true
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
} else {
|
||||
if (myRoll2.total < rollData.nbSuccess) {
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
}
|
||||
rollData.rollOrder = 3
|
||||
}
|
||||
rollData.nbSuccess = Math.max(0, rollData.nbSuccess)
|
||||
|
||||
rollData.isFirstRollAdvantage = false
|
||||
// Manage exp
|
||||
if (rollData.skill && rollData.skill.system.level > 0) {
|
||||
let nbSkillSuccess = rollData.roll.terms[2].total
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.system.level) {
|
||||
actor.incrementSkillExp(rollData.skill.id, 1)
|
||||
}
|
||||
}
|
||||
|
||||
this.saveRollData(rollData)
|
||||
actor.lastRoll = rollData
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
console.log("Rolldata result", rollData)
|
||||
|
||||
// Message response
|
||||
this.displayDefenseMessage(rollData)
|
||||
|
||||
// Manage defense result
|
||||
this.processAttackDefense(rollData)
|
||||
msg.setFlag("world", "darkstars-roll-data", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -541,7 +423,7 @@ export class DarkStarsUtility {
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
ChatMessage.create(chatOptions);
|
||||
return ChatMessage.create(chatOptions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -549,7 +431,9 @@ export class DarkStarsUtility {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
advantage: "none"
|
||||
bonusMalus: 0,
|
||||
isAboveEffectiveRange: false,
|
||||
weaponAiming: "none"
|
||||
}
|
||||
DarkStarsUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@@ -565,7 +449,7 @@ export class DarkStarsUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
return this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
BIN
packs/aldebaran/000033.ldb
Normal file
BIN
packs/aldebaran/000033.ldb
Normal file
Binary file not shown.
1
packs/aldebaran/CURRENT
Normal file
1
packs/aldebaran/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000036
|
||||
7
packs/aldebaran/LOG
Normal file
7
packs/aldebaran/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.148290 7fd092bff6c0 Recovering log #35
|
||||
2023/11/25-11:53:56.158572 7fd092bff6c0 Delete type=0 #35
|
||||
2023/11/25-11:53:56.158657 7fd092bff6c0 Delete type=3 #34
|
||||
2023/11/25-11:54:27.006917 7fd090bfb6c0 Level-0 table #39: started
|
||||
2023/11/25-11:54:27.006997 7fd090bfb6c0 Level-0 table #39: 0 bytes OK
|
||||
2023/11/25-11:54:27.015085 7fd090bfb6c0 Delete type=0 #37
|
||||
2023/11/25-11:54:27.015315 7fd090bfb6c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zWXriFfWH4wiyUzv' @ 0 : 0; will stop at (end)
|
||||
3
packs/aldebaran/LOG.old
Normal file
3
packs/aldebaran/LOG.old
Normal file
@@ -0,0 +1,3 @@
|
||||
2023/11/25-09:41:59.042296 ffff7a7cf0a0 Recovering log #31
|
||||
2023/11/25-09:41:59.045670 ffff7a7cf0a0 Delete type=3 #29
|
||||
2023/11/25-09:41:59.045713 ffff7a7cf0a0 Delete type=0 #31
|
||||
BIN
packs/aldebaran/MANIFEST-000036
Normal file
BIN
packs/aldebaran/MANIFEST-000036
Normal file
Binary file not shown.
BIN
packs/armor/000005.ldb
Normal file
BIN
packs/armor/000005.ldb
Normal file
Binary file not shown.
1
packs/armor/CURRENT
Normal file
1
packs/armor/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
8
packs/armor/LOG
Normal file
8
packs/armor/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:55.987706 7fd091bfd6c0 Recovering log #144
|
||||
2023/11/25-11:53:55.997898 7fd091bfd6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:55.997959 7fd091bfd6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.939109 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.939141 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.946683 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.959662 7fd090bfb6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:26.959698 7fd090bfb6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
8
packs/armor/LOG.old
Normal file
8
packs/armor/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:17.929984 7f56117fa6c0 Recovering log #140
|
||||
2023/10/29-23:31:17.982863 7f56117fa6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:17.982953 7f56117fa6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.276844 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.276878 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.283239 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.283442 7f56037fe6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.283477 7f56037fe6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/armor/MANIFEST-000146
Normal file
BIN
packs/armor/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/beyondtheblacksea/000036.ldb
Normal file
BIN
packs/beyondtheblacksea/000036.ldb
Normal file
Binary file not shown.
1
packs/beyondtheblacksea/CURRENT
Normal file
1
packs/beyondtheblacksea/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000039
|
||||
7
packs/beyondtheblacksea/LOG
Normal file
7
packs/beyondtheblacksea/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.161415 7fd0913fc6c0 Recovering log #38
|
||||
2023/11/25-11:53:56.170729 7fd0913fc6c0 Delete type=0 #38
|
||||
2023/11/25-11:53:56.170780 7fd0913fc6c0 Delete type=3 #37
|
||||
2023/11/25-11:54:27.021721 7fd090bfb6c0 Level-0 table #42: started
|
||||
2023/11/25-11:54:27.021762 7fd090bfb6c0 Level-0 table #42: 0 bytes OK
|
||||
2023/11/25-11:54:27.028409 7fd090bfb6c0 Delete type=0 #40
|
||||
2023/11/25-11:54:27.028540 7fd090bfb6c0 Manual compaction at level-0 from '!folders!Gh3dOV5MWEUqOK83' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end)
|
||||
3
packs/beyondtheblacksea/LOG.old
Normal file
3
packs/beyondtheblacksea/LOG.old
Normal file
@@ -0,0 +1,3 @@
|
||||
2023/11/25-09:41:59.034802 ffff79fbf0a0 Recovering log #34
|
||||
2023/11/25-09:41:59.038133 ffff79fbf0a0 Delete type=3 #32
|
||||
2023/11/25-09:41:59.038176 ffff79fbf0a0 Delete type=0 #34
|
||||
BIN
packs/beyondtheblacksea/MANIFEST-000039
Normal file
BIN
packs/beyondtheblacksea/MANIFEST-000039
Normal file
Binary file not shown.
1
packs/conditions/CURRENT
Normal file
1
packs/conditions/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
7
packs/conditions/LOG
Normal file
7
packs/conditions/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.037176 7fd091bfd6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.047186 7fd091bfd6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.047263 7fd091bfd6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.966421 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.966444 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.972594 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.986318 7fd090bfb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/conditions/LOG.old
Normal file
7
packs/conditions/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/29-23:31:18.172067 7f56117fa6c0 Recovering log #140
|
||||
2023/10/29-23:31:18.222141 7f56117fa6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.222239 7f56117fa6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.304351 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.304405 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.310587 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.310811 7f56037fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/conditions/MANIFEST-000146
Normal file
BIN
packs/conditions/MANIFEST-000146
Normal file
Binary file not shown.
1
packs/currency/CURRENT
Normal file
1
packs/currency/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
7
packs/currency/LOG
Normal file
7
packs/currency/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.048914 7fd0923fe6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.058887 7fd0923fe6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.058947 7fd0923fe6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.959805 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.959829 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.966338 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.986308 7fd090bfb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/currency/LOG.old
Normal file
7
packs/currency/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/29-23:31:18.223966 7f5611ffb6c0 Recovering log #140
|
||||
2023/10/29-23:31:18.265607 7f5611ffb6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.265707 7f5611ffb6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.310911 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.311047 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.317632 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.337853 7f56037fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/currency/MANIFEST-000146
Normal file
BIN
packs/currency/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/cybernetics/000066.ldb
Normal file
BIN
packs/cybernetics/000066.ldb
Normal file
Binary file not shown.
1
packs/cybernetics/CURRENT
Normal file
1
packs/cybernetics/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000075
|
||||
8
packs/cybernetics/LOG
Normal file
8
packs/cybernetics/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.123402 7fd091bfd6c0 Recovering log #73
|
||||
2023/11/25-11:53:56.133061 7fd091bfd6c0 Delete type=3 #71
|
||||
2023/11/25-11:53:56.133163 7fd091bfd6c0 Delete type=0 #73
|
||||
2023/11/25-11:54:27.000544 7fd090bfb6c0 Level-0 table #78: started
|
||||
2023/11/25-11:54:27.000572 7fd090bfb6c0 Level-0 table #78: 0 bytes OK
|
||||
2023/11/25-11:54:27.006700 7fd090bfb6c0 Delete type=0 #76
|
||||
2023/11/25-11:54:27.015300 7fd090bfb6c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:27.015342 7fd090bfb6c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
|
||||
8
packs/cybernetics/LOG.old
Normal file
8
packs/cybernetics/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:18.438487 7f56117fa6c0 Recovering log #69
|
||||
2023/10/29-23:31:18.492811 7f56117fa6c0 Delete type=3 #67
|
||||
2023/10/29-23:31:18.492904 7f56117fa6c0 Delete type=0 #69
|
||||
2023/10/29-23:37:49.324508 7f56037fe6c0 Level-0 table #74: started
|
||||
2023/10/29-23:37:49.324550 7f56037fe6c0 Level-0 table #74: 0 bytes OK
|
||||
2023/10/29-23:37:49.330736 7f56037fe6c0 Delete type=0 #72
|
||||
2023/10/29-23:37:49.337897 7f56037fe6c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.337946 7f56037fe6c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/cybernetics/MANIFEST-000075
Normal file
BIN
packs/cybernetics/MANIFEST-000075
Normal file
Binary file not shown.
BIN
packs/equipment/000137.ldb
Normal file
BIN
packs/equipment/000137.ldb
Normal file
Binary file not shown.
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
8
packs/equipment/LOG
Normal file
8
packs/equipment/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.000006 7fd0923fe6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.009809 7fd0923fe6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.009912 7fd0923fe6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.946787 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.946809 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.952758 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.959673 7fd090bfb6c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!xNmOdMs4rQ0yiVzg' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:26.959705 7fd090bfb6c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!xNmOdMs4rQ0yiVzg' @ 0 : 0; will stop at (end)
|
||||
8
packs/equipment/LOG.old
Normal file
8
packs/equipment/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:17.984959 7f5611ffb6c0 Recovering log #140
|
||||
2023/10/29-23:31:18.036613 7f5611ffb6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.036664 7f5611ffb6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.283537 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.283589 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.290495 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.310755 7f56037fe6c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!xNmOdMs4rQ0yiVzg' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.310826 7f56037fe6c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!xNmOdMs4rQ0yiVzg' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/equipment/MANIFEST-000146
Normal file
BIN
packs/equipment/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/genetics/000014.ldb
Normal file
BIN
packs/genetics/000014.ldb
Normal file
Binary file not shown.
1
packs/genetics/CURRENT
Normal file
1
packs/genetics/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000023
|
||||
8
packs/genetics/LOG
Normal file
8
packs/genetics/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.135361 7fd0923fe6c0 Recovering log #21
|
||||
2023/11/25-11:53:56.145751 7fd0923fe6c0 Delete type=3 #19
|
||||
2023/11/25-11:53:56.145806 7fd0923fe6c0 Delete type=0 #21
|
||||
2023/11/25-11:54:26.993034 7fd090bfb6c0 Level-0 table #26: started
|
||||
2023/11/25-11:54:26.993055 7fd090bfb6c0 Level-0 table #26: 0 bytes OK
|
||||
2023/11/25-11:54:27.000358 7fd090bfb6c0 Delete type=0 #24
|
||||
2023/11/25-11:54:27.015280 7fd090bfb6c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:27.015355 7fd090bfb6c0 Manual compaction at level-1 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
|
||||
8
packs/genetics/LOG.old
Normal file
8
packs/genetics/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:18.494918 7f5611ffb6c0 Recovering log #17
|
||||
2023/10/29-23:31:18.543367 7f5611ffb6c0 Delete type=3 #15
|
||||
2023/10/29-23:31:18.543420 7f5611ffb6c0 Delete type=0 #17
|
||||
2023/10/29-23:37:49.338046 7f56037fe6c0 Level-0 table #22: started
|
||||
2023/10/29-23:37:49.338094 7f56037fe6c0 Level-0 table #22: 0 bytes OK
|
||||
2023/10/29-23:37:49.344365 7f56037fe6c0 Delete type=0 #20
|
||||
2023/10/29-23:37:49.344491 7f56037fe6c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.344516 7f56037fe6c0 Manual compaction at level-1 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/genetics/MANIFEST-000023
Normal file
BIN
packs/genetics/MANIFEST-000023
Normal file
Binary file not shown.
BIN
packs/nightborough/000036.ldb
Normal file
BIN
packs/nightborough/000036.ldb
Normal file
Binary file not shown.
1
packs/nightborough/CURRENT
Normal file
1
packs/nightborough/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000039
|
||||
7
packs/nightborough/LOG
Normal file
7
packs/nightborough/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.174133 7fd091bfd6c0 Recovering log #38
|
||||
2023/11/25-11:53:56.184063 7fd091bfd6c0 Delete type=0 #38
|
||||
2023/11/25-11:53:56.184110 7fd091bfd6c0 Delete type=3 #37
|
||||
2023/11/25-11:54:27.015463 7fd090bfb6c0 Level-0 table #42: started
|
||||
2023/11/25-11:54:27.015494 7fd090bfb6c0 Level-0 table #42: 0 bytes OK
|
||||
2023/11/25-11:54:27.021563 7fd090bfb6c0 Delete type=0 #40
|
||||
2023/11/25-11:54:27.028525 7fd090bfb6c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zv07ZCqoczWKdT2b' @ 0 : 0; will stop at (end)
|
||||
3
packs/nightborough/LOG.old
Normal file
3
packs/nightborough/LOG.old
Normal file
@@ -0,0 +1,3 @@
|
||||
2023/11/25-09:41:59.048691 ffff79fbf0a0 Recovering log #34
|
||||
2023/11/25-09:41:59.051889 ffff79fbf0a0 Delete type=3 #31
|
||||
2023/11/25-09:41:59.051928 ffff79fbf0a0 Delete type=0 #34
|
||||
BIN
packs/nightborough/MANIFEST-000039
Normal file
BIN
packs/nightborough/MANIFEST-000039
Normal file
Binary file not shown.
BIN
packs/perks/000005.ldb
Normal file
BIN
packs/perks/000005.ldb
Normal file
Binary file not shown.
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
0
packs/perks/LOCK
Normal file
0
packs/perks/LOCK
Normal file
8
packs/perks/LOG
Normal file
8
packs/perks/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.109779 7fd0913fc6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.120897 7fd0913fc6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.120965 7fd0913fc6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.986457 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.986489 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.992967 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:27.015253 7fd090bfb6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:27.015329 7fd090bfb6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
8
packs/perks/LOG.old
Normal file
8
packs/perks/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:18.352208 7f5610ff96c0 Recovering log #140
|
||||
2023/10/29-23:31:18.436200 7f5610ff96c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.436263 7f5610ff96c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.330846 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.330869 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.337661 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.337914 7f56037fe6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.337961 7f56037fe6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/perks/MANIFEST-000146
Normal file
BIN
packs/perks/MANIFEST-000146
Normal file
Binary file not shown.
0
packs/shields/000148.log
Normal file
0
packs/shields/000148.log
Normal file
1
packs/shields/CURRENT
Normal file
1
packs/shields/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
0
packs/shields/LOCK
Normal file
0
packs/shields/LOCK
Normal file
7
packs/shields/LOG
Normal file
7
packs/shields/LOG
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/11/25-11:53:56.013578 7fd092bff6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.023494 7fd092bff6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.023547 7fd092bff6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.952877 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.952930 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.959512 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.959683 7fd090bfb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
7
packs/shields/LOG.old
Normal file
7
packs/shields/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
||||
2023/10/29-23:31:18.040442 7f5603fff6c0 Recovering log #140
|
||||
2023/10/29-23:31:18.100074 7f5603fff6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.100170 7f5603fff6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.290582 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.290606 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.296703 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.310776 7f56037fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/shields/MANIFEST-000146
Normal file
BIN
packs/shields/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/skills/000005.ldb
Normal file
BIN
packs/skills/000005.ldb
Normal file
Binary file not shown.
0
packs/skills/000148.log
Normal file
0
packs/skills/000148.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000146
|
||||
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.060684 7fd092bff6c0 Recovering log #144
|
||||
2023/11/25-11:53:56.071237 7fd092bff6c0 Delete type=3 #142
|
||||
2023/11/25-11:53:56.071323 7fd092bff6c0 Delete type=0 #144
|
||||
2023/11/25-11:54:26.980220 7fd090bfb6c0 Level-0 table #149: started
|
||||
2023/11/25-11:54:26.980243 7fd090bfb6c0 Level-0 table #149: 0 bytes OK
|
||||
2023/11/25-11:54:26.986189 7fd090bfb6c0 Delete type=0 #147
|
||||
2023/11/25-11:54:26.986336 7fd090bfb6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:26.986355 7fd090bfb6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:18.266929 7f5603fff6c0 Recovering log #140
|
||||
2023/10/29-23:31:18.350204 7f5603fff6c0 Delete type=3 #138
|
||||
2023/10/29-23:31:18.350298 7f5603fff6c0 Delete type=0 #140
|
||||
2023/10/29-23:37:49.317738 7f56037fe6c0 Level-0 table #145: started
|
||||
2023/10/29-23:37:49.317765 7f56037fe6c0 Level-0 table #145: 0 bytes OK
|
||||
2023/10/29-23:37:49.324369 7f56037fe6c0 Delete type=0 #143
|
||||
2023/10/29-23:37:49.337878 7f56037fe6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.337930 7f56037fe6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/skills/MANIFEST-000146
Normal file
BIN
packs/skills/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/weapons/000018.ldb
Normal file
BIN
packs/weapons/000018.ldb
Normal file
Binary file not shown.
0
packs/weapons/000149.log
Normal file
0
packs/weapons/000149.log
Normal file
1
packs/weapons/CURRENT
Normal file
1
packs/weapons/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000147
|
||||
0
packs/weapons/LOCK
Normal file
0
packs/weapons/LOCK
Normal file
8
packs/weapons/LOG
Normal file
8
packs/weapons/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/11/25-11:53:56.025155 7fd0913fc6c0 Recovering log #145
|
||||
2023/11/25-11:53:56.034729 7fd0913fc6c0 Delete type=3 #143
|
||||
2023/11/25-11:53:56.034992 7fd0913fc6c0 Delete type=0 #145
|
||||
2023/11/25-11:54:26.972747 7fd090bfb6c0 Level-0 table #150: started
|
||||
2023/11/25-11:54:26.972787 7fd090bfb6c0 Level-0 table #150: 0 bytes OK
|
||||
2023/11/25-11:54:26.980115 7fd090bfb6c0 Delete type=0 #148
|
||||
2023/11/25-11:54:26.986328 7fd090bfb6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/11/25-11:54:26.986362 7fd090bfb6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
8
packs/weapons/LOG.old
Normal file
8
packs/weapons/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2023/10/29-23:31:18.101982 7f5610ff96c0 Recovering log #141
|
||||
2023/10/29-23:31:18.169683 7f5610ff96c0 Delete type=3 #139
|
||||
2023/10/29-23:31:18.169778 7f5610ff96c0 Delete type=0 #141
|
||||
2023/10/29-23:37:49.296947 7f56037fe6c0 Level-0 table #146: started
|
||||
2023/10/29-23:37:49.296972 7f56037fe6c0 Level-0 table #146: 0 bytes OK
|
||||
2023/10/29-23:37:49.304142 7f56037fe6c0 Delete type=0 #144
|
||||
2023/10/29-23:37:49.310795 7f56037fe6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/10/29-23:37:49.310843 7f56037fe6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/weapons/MANIFEST-000147
Normal file
BIN
packs/weapons/MANIFEST-000147
Normal file
Binary file not shown.
@@ -238,14 +238,15 @@ table {border: 1px solid #7a7971;}
|
||||
|
||||
.fvtt-dark-stars .sheet-header .profile-img {
|
||||
-webkit-box-flex: 0;
|
||||
-ms-flex: 0 0 128px;
|
||||
flex: 0 0 128px;
|
||||
width: 196px;
|
||||
-ms-flex: 0 0 96px;
|
||||
flex: 0 0 96px;
|
||||
width: 96px;
|
||||
height: auto;
|
||||
max-height:260px;
|
||||
max-height:96px;
|
||||
margin-top: 0px;
|
||||
margin-right: 10px;
|
||||
object-fit: cover;
|
||||
border-width: 0px;
|
||||
object-position: 50% 0;
|
||||
}
|
||||
|
||||
@@ -569,7 +570,7 @@ ul, li {
|
||||
}
|
||||
.list-item-shadow {
|
||||
background:rgba(87, 60, 32, 0.35);
|
||||
flex-grow: 0;
|
||||
/*flex-grow: 0;*/
|
||||
flex-wrap: nowrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
@@ -1144,23 +1145,6 @@ ul, li {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.river-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
background-color: #7d5d3b00;
|
||||
border-radius: 3px;
|
||||
border: 2px ridge #846109;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
font-size: 0.8rem;
|
||||
padding: 2px 4px 0px 4px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
margin:4px;
|
||||
}
|
||||
|
||||
.chat-card-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
@@ -1350,9 +1334,6 @@ Focus FOC: #ff0084
|
||||
.color-class-foc {
|
||||
background-color: #ff0084;
|
||||
}
|
||||
.color-class-common {
|
||||
background: rgba(185, 183, 40, 0.45);
|
||||
}
|
||||
.status-small-label {
|
||||
font-size: 0.65rem;
|
||||
}
|
||||
@@ -1436,26 +1417,31 @@ Focus FOC: #ff0084
|
||||
}
|
||||
.item-name-label-header-long {
|
||||
flex-grow:2;
|
||||
margin-top: 4px;
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
}
|
||||
.item-name-label-header-long2 {
|
||||
flex-grow:2;
|
||||
margin-top: 4px;
|
||||
max-width: 24rem;
|
||||
min-width: 24rem;
|
||||
}
|
||||
.item-name-label {
|
||||
flex-grow:2;
|
||||
margin-top: 4px;
|
||||
max-width: 10rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
.item-name-label-long {
|
||||
flex-grow:2;
|
||||
margin-top: 4px;
|
||||
max-width: 12rem;
|
||||
min-width: 12rem;
|
||||
}
|
||||
.item-name-label-long2 {
|
||||
flex-grow:2;
|
||||
margin-top: 4px;
|
||||
max-width: 22rem;
|
||||
min-width: 22rem;
|
||||
}
|
||||
@@ -1466,19 +1452,34 @@ Focus FOC: #ff0084
|
||||
}
|
||||
.item-field-label-short {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
}
|
||||
.item-field-label-medium {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 6rem;
|
||||
min-width: 6rem;
|
||||
}
|
||||
.item-field-label-long {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 8rem;
|
||||
min-width: 8rem;
|
||||
}
|
||||
.item-field-label-vlong {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
}
|
||||
.item-field-label-vlong2 {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 22rem;
|
||||
min-width: 22rem;
|
||||
}
|
||||
.item-control-end {
|
||||
align-self: flex-end;
|
||||
}
|
||||
@@ -1494,7 +1495,9 @@ Focus FOC: #ff0084
|
||||
min-width:2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
|
||||
.margin-left-4 {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.dice-pool-stack {
|
||||
flex: 1 1 5rem;
|
||||
display: flex !important;
|
||||
@@ -1510,7 +1513,19 @@ Focus FOC: #ff0084
|
||||
margin-bottom: 1rem;
|
||||
background-color: #403f3e40;
|
||||
}
|
||||
|
||||
.stat-column-size {
|
||||
max-width: 12rem;
|
||||
min-width: 12rem;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.derivated-column-size {
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.hplocation-column {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.dice-pool-image {
|
||||
border: 0;
|
||||
margin-left: 4px;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user