Compare commits

...

46 Commits

Author SHA1 Message Date
92684b0d32 Fix skills 2024-02-26 14:20:54 +01:00
9786c07f1b Sprawl compendium fixed 2024-02-25 13:18:02 +01:00
2520bec30f v1.0 release 2024-02-15 06:57:35 +01:00
9ad34b4672 Enhance stats 2024-02-08 13:03:06 +01:00
ae36be975d Add missing compendiums 2024-01-26 16:46:41 +01:00
69eaa8fc66 Add missing compendiums 2024-01-26 08:45:59 +01:00
b741cffd96 Correction sur Items 2023-11-26 22:59:44 +01:00
e5296a4bcd Correction sur Items 2023-11-26 22:59:38 +01:00
9f93849a9d Add new compendiums 2023-11-25 11:54:49 +01:00
14c7e54b3d Add Jobs 2023-11-25 09:20:54 +01:00
ce3359b2f0 New icons 2023-10-31 16:35:44 +01:00
02bf6cc10a Add spells and psychics powers 2023-10-29 23:38:10 +01:00
dc5a1056b7 Add spells and psychics powers 2023-10-29 23:24:54 +01:00
c7ccc50db0 Fix HP location and damages 2023-10-24 07:05:01 +02:00
1f8275e153 Fix HP location and damages 2023-10-23 16:38:34 +02:00
e19e6df228 Add initiative and ammo 2023-10-21 14:16:28 +02:00
714485b688 Add initiative and ammo 2023-10-21 14:16:17 +02:00
ceed6efc0b Add initiative and ammo 2023-10-21 14:16:06 +02:00
06e265586b Add initiative and ammo 2023-10-21 10:25:39 +02:00
78edf6b80b New release with compendiums 2023-10-20 20:57:24 +02:00
60112d1a79 Sync compendiusm 2023-10-20 20:56:27 +02:00
652f24b863 Update compendiusm 2023-10-19 14:22:50 +02:00
69322cccfe Update compendiusm 2023-10-19 14:21:44 +02:00
5d0c53f52b Upgrade compendium 2023-10-19 11:43:22 +02:00
9557f18eb2 Fix cyber/genetic 2023-10-15 14:48:11 +02:00
c3758da16b Fix cyber/genetic 2023-10-14 11:25:30 +02:00
7dbc5e44b7 Lanage cyber stuff 2023-10-10 13:04:38 +02:00
880109f189 Lanage cyber stuff 2023-10-10 13:04:14 +02:00
2dbf8fc336 Weapons Damage stuff 2023-10-02 23:14:45 +02:00
9b7519afa7 Weapons Damage stuff 2023-10-02 23:07:58 +02:00
285d095d91 Update to v11 2023-09-30 08:25:57 +02:00
79333f8b14 Update to v11 2023-09-30 08:22:45 +02:00
5477e2be4b Add weapons attacks 2023-04-14 17:36:22 +02:00
f98852c69f Add weapons attacks 2023-04-14 17:28:40 +02:00
32b5868646 Add weapons attacks 2023-04-14 17:01:29 +02:00
606271e725 Fix weapons 2023-04-10 00:01:36 +02:00
2da3d19dbe Better rolls + perks 2023-01-02 14:54:59 +01:00
7ceada98fb Actor sheet v1.1 2022-12-31 10:22:49 +01:00
580b044c77 Actor sheet v1 2022-12-30 22:27:38 +01:00
83119a2b82 Fixes perks 2022-12-28 09:18:00 +01:00
04365a93d0 Fixes perks 2022-12-28 09:17:19 +01:00
5f36a58805 Fixes perks 2022-12-28 00:25:00 +01:00
55a2d3f4d4 Fixes ASB 2022-12-27 09:32:43 +01:00
4d6c0cdc4a Fixes ASB 2022-12-27 09:32:19 +01:00
9ff24b536f Fixes ASB 2022-12-27 09:16:53 +01:00
4de7215478 Fixes ASB 2022-12-26 21:14:37 +01:00
139 changed files with 1771 additions and 1233 deletions

10
.gitignore vendored Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -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) => {

View File

@ -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)
}
}
}
/* -------------------------------------------- */
@ -196,6 +199,12 @@ export class DarkStarsActor extends Actor {
/* -------------------------------------------- */
getWeapons() {
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
/* -------------------------------------------- */
getAmmos() {
let comp = duplicate(this.items.filter(item => item.type == 'ammo') || []);
DarkStarsUtility.sortArrayObjectsByName(comp)
return comp;
}
@ -207,24 +216,45 @@ 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
}
/* -------------------------------------------- */
async equipItem(itemId) {
let item = this.items.find(item => item.id == itemId)
@ -343,7 +373,7 @@ export class DarkStarsActor extends Actor {
/* -------------------------------------------- */
async incDecHP(formula) {
let dmgRoll = new Roll(formula+"[dark-starsorange]").roll({ async: false })
let dmgRoll = new Roll(formula + "[dark-starsorange]").roll({ async: false })
await DarkStarsUtility.showDiceSoNice(dmgRoll, game.settings.get("core", "rollMode"))
let hp = duplicate(this.system.secondary.hp)
hp.value = Number(hp.value) + Number(dmgRoll.total)
@ -372,7 +402,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 +419,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)
}
console.log("Init required !!!!")
return -1;
hasLastWord() {
return this.items.find(i => i.type == "perk" && i.name.toLowerCase() === "last word")
}
/* -------------------------------------------- */
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 +460,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 +514,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 +524,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 +558,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 +578,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 +630,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 +653,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 +667,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)
}

View File

@ -2,29 +2,46 @@ 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()
}
}
}

View File

@ -3,10 +3,10 @@ export const DARKSTARS_CONFIG = {
basebonus : {
"csb": "CSB",
"asb": "SSB",
"ssb": "SSB",
"msb": "MSB",
"psb": "PSB"
"psb": "PSB",
"asb": "ASB"
},
location : {
"head": "Head",
@ -29,6 +29,26 @@ export const DARKSTARS_CONFIG = {
"slug": "Slug throwers",
"energy": "Energy"
},
perktypes: {
"normal": "Normal",
"advanced": "Advanced",
"role": "Role",
"job": "Job"
},
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",

View File

@ -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();
});
}

View File

@ -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",
}
/**

View File

@ -18,6 +18,7 @@ import { DarkStarsItem } from "./dark-stars-item.js";
import { DarkStarsHotbar } from "./dark-stars-hotbar.js"
import { DarkStarsCommands } from "./dark-stars-commands.js"
import { DARKSTARS_CONFIG } from "./dark-stars-config.js";
import { ClassCounter} from "https://www.uberwald.me/fvtt_appcount/count-class-ready.js"
/* -------------------------------------------- */
/* Foundry VTT Initialization */
@ -91,15 +92,11 @@ Hooks.once("ready", function () {
});
}
// CSS patch for v9
if (game.version) {
let sidebar = document.getElementById("sidebar");
sidebar.style.width = "min-content";
}
welcomeMessage();
DarkStarsUtility.ready()
DarkStarsCommands.init()
ClassCounter.registerUsageCount()
})
/* -------------------------------------------- */

View File

@ -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)
})
}
}

View File

@ -42,7 +42,7 @@ export class DarkStarsUtility {
Handlebars.registerHelper('locationLabel', function (key) {
return __locationNames[key]
})
this.gameSettings()
@ -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,25 +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())
const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.sprawl");
this.skills = skills.filter(i=> i.type =="skill").map(i => i.toObject() );
}
/* -------------------------------------------- */
@ -116,26 +86,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 +238,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.skill.system.skilldice = __skillLevel2Dice[level]
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5[black]"
rollData.percentValue = rollData.skill.total
}
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.skill.system.isfeatdie) {
rollData.hasFeatDie = true
diceFormula += "+ 1d10cs>=5[dark-stars-purple]"
} else {
diceFormula += `+ 0d10cs>=5[dark-stars-purple]`
}
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`
if (rollData.isAboveEffectiveRange) {
rollData.percentValue -= 30
rollData.percentValue = Math.max(0, rollData.percentValue)
}
// advantage => 8
let advFormula = "+ 0d8cs>=5"
if (rollData.advantage == "advantage1" || rollData.forceAdvantage) {
advFormula = "+ 1d8cs>=5[dark-stars-darkgreen]"
if (rollData.mode == "weapon") {
rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming)
rollData.percentValue += rollData.locationMalus
}
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)
})
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
}
if (rollData.mode == "weapon") {
if (rollData.weaponAiming == "none") {
let rollLoc = new Roll("1d10").roll({ async: false })
rollData.weaponAiming = this.getAimingLocation(rollLoc.total)
}
rollData.rollOrder = 3
// Compute
rollData.locationMultiplier = this.locationMultiplier(rollData.weaponAiming)
}
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)
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/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 +422,7 @@ export class DarkStarsUtility {
break;
}
chatOptions.alias = chatOptions.alias || name;
ChatMessage.create(chatOptions);
return ChatMessage.create(chatOptions);
}
/* -------------------------------------------- */
@ -549,7 +430,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 +448,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)
}
/* -------------------------------------------- */

6
packs/.directory Normal file
View File

@ -0,0 +1,6 @@
[Dolphin]
HeaderColumnWidths=301,118,148,122
Timestamp=2024,1,26,8,35,29.906
Version=4
ViewMode=1
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

BIN
packs/aldebaran/000119.ldb Normal file

Binary file not shown.

1
packs/aldebaran/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000164

7
packs/aldebaran/LOG Normal file
View File

@ -0,0 +1,7 @@
2024/02/26-14:13:38.988782 7f13374006c0 Recovering log #162
2024/02/26-14:13:38.999307 7f13374006c0 Delete type=3 #160
2024/02/26-14:13:38.999433 7f13374006c0 Delete type=0 #162
2024/02/26-14:20:24.273426 7f132fe006c0 Level-0 table #167: started
2024/02/26-14:20:24.273466 7f132fe006c0 Level-0 table #167: 0 bytes OK
2024/02/26-14:20:24.280039 7f132fe006c0 Delete type=0 #165
2024/02/26-14:20:24.287744 7f132fe006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end)

7
packs/aldebaran/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2024/02/25-13:25:19.760043 7f0428e006c0 Recovering log #158
2024/02/25-13:25:19.770300 7f0428e006c0 Delete type=3 #156
2024/02/25-13:25:19.770349 7f0428e006c0 Delete type=0 #158
2024/02/25-15:40:12.540906 7f0421a006c0 Level-0 table #163: started
2024/02/25-15:40:12.541352 7f0421a006c0 Level-0 table #163: 0 bytes OK
2024/02/25-15:40:12.547853 7f0421a006c0 Delete type=0 #161
2024/02/25-15:40:12.555529 7f0421a006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armor/000186.ldb Normal file

Binary file not shown.

1
packs/armor/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000199

8
packs/armor/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.806524 7f0422a006c0 Recovering log #197
2024/02/25-13:11:04.817703 7f0422a006c0 Delete type=3 #195
2024/02/25-13:11:04.817799 7f0422a006c0 Delete type=0 #197
2024/02/25-13:14:07.532693 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.532731 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.539153 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.539281 7f0421a006c0 Manual compaction at level-0 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.539306 7f0421a006c0 Manual compaction at level-1 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

8
packs/armor/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.224949 7f0428e006c0 Recovering log #193
2024/02/25-13:04:05.236046 7f0428e006c0 Delete type=3 #191
2024/02/25-13:04:05.236134 7f0428e006c0 Delete type=0 #193
2024/02/25-13:10:09.480522 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.480555 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.486678 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.493365 7f0421a006c0 Manual compaction at level-0 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.499939 7f0421a006c0 Manual compaction at level-1 from '!items!0JWjCJaD6OOouqTj' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

BIN
packs/armor/MANIFEST-000199 Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000157

View File

@ -0,0 +1,7 @@
2024/02/26-14:13:39.006215 7f133ce006c0 Recovering log #155
2024/02/26-14:13:39.017058 7f133ce006c0 Delete type=3 #153
2024/02/26-14:13:39.017184 7f133ce006c0 Delete type=0 #155
2024/02/26-14:20:24.266061 7f132fe006c0 Level-0 table #160: started
2024/02/26-14:20:24.266133 7f132fe006c0 Level-0 table #160: 0 bytes OK
2024/02/26-14:20:24.273275 7f132fe006c0 Delete type=0 #158
2024/02/26-14:20:24.287729 7f132fe006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,7 @@
2024/02/25-13:25:19.773014 7f04234006c0 Recovering log #151
2024/02/25-13:25:19.782933 7f04234006c0 Delete type=3 #149
2024/02/25-13:25:19.782991 7f04234006c0 Delete type=0 #151
2024/02/25-15:40:12.548028 7f0421a006c0 Level-0 table #156: started
2024/02/25-15:40:12.548061 7f0421a006c0 Level-0 table #156: 0 bytes OK
2024/02/25-15:40:12.555343 7f0421a006c0 Delete type=0 #154
2024/02/25-15:40:12.555542 7f0421a006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end)

Binary file not shown.

1
packs/conditions/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000210

7
packs/conditions/LOG Normal file
View File

@ -0,0 +1,7 @@
2024/02/26-14:13:38.913763 7f13374006c0 Recovering log #208
2024/02/26-14:13:38.925039 7f13374006c0 Delete type=3 #206
2024/02/26-14:13:38.925223 7f13374006c0 Delete type=0 #208
2024/02/26-14:20:24.237608 7f132fe006c0 Level-0 table #213: started
2024/02/26-14:20:24.237681 7f132fe006c0 Level-0 table #213: 0 bytes OK
2024/02/26-14:20:24.244690 7f132fe006c0 Delete type=0 #211
2024/02/26-14:20:24.259041 7f132fe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

7
packs/conditions/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2024/02/25-13:25:19.703338 7f0428e006c0 Recovering log #204
2024/02/25-13:25:19.713635 7f0428e006c0 Delete type=3 #202
2024/02/25-13:25:19.713706 7f0428e006c0 Delete type=0 #204
2024/02/25-15:40:12.512691 7f0421a006c0 Level-0 table #209: started
2024/02/25-15:40:12.512744 7f0421a006c0 Level-0 table #209: 0 bytes OK
2024/02/25-15:40:12.519870 7f0421a006c0 Delete type=0 #207
2024/02/25-15:40:12.526721 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

1
packs/currency/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000210

7
packs/currency/LOG Normal file
View File

@ -0,0 +1,7 @@
2024/02/26-14:13:38.930692 7f133ce006c0 Recovering log #208
2024/02/26-14:13:38.941919 7f133ce006c0 Delete type=3 #206
2024/02/26-14:13:38.942031 7f133ce006c0 Delete type=0 #208
2024/02/26-14:20:24.244869 7f132fe006c0 Level-0 table #213: started
2024/02/26-14:20:24.244926 7f132fe006c0 Level-0 table #213: 0 bytes OK
2024/02/26-14:20:24.251440 7f132fe006c0 Delete type=0 #211
2024/02/26-14:20:24.259056 7f132fe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

7
packs/currency/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2024/02/25-13:25:19.716119 7f04234006c0 Recovering log #204
2024/02/25-13:25:19.727169 7f04234006c0 Delete type=3 #202
2024/02/25-13:25:19.727244 7f04234006c0 Delete type=0 #204
2024/02/25-15:40:12.520043 7f0421a006c0 Level-0 table #209: started
2024/02/25-15:40:12.520077 7f0421a006c0 Level-0 table #209: 0 bytes OK
2024/02/25-15:40:12.526536 7f0421a006c0 Delete type=0 #207
2024/02/25-15:40:12.533719 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000128

8
packs/cybernetics/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.911848 7f0422a006c0 Recovering log #126
2024/02/25-13:11:04.922320 7f0422a006c0 Delete type=3 #124
2024/02/25-13:11:04.922392 7f0422a006c0 Delete type=0 #126
2024/02/25-13:14:07.578457 7f0421a006c0 Level-0 table #131: started
2024/02/25-13:14:07.578513 7f0421a006c0 Level-0 table #131: 0 bytes OK
2024/02/25-13:14:07.585654 7f0421a006c0 Delete type=0 #129
2024/02/25-13:14:07.592632 7f0421a006c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.592676 7f0421a006c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.332283 7f0428e006c0 Recovering log #122
2024/02/25-13:04:05.343337 7f0428e006c0 Delete type=3 #120
2024/02/25-13:04:05.343387 7f0428e006c0 Delete type=0 #122
2024/02/25-13:10:09.539934 7f0421a006c0 Level-0 table #127: started
2024/02/25-13:10:09.539956 7f0421a006c0 Level-0 table #127: 0 bytes OK
2024/02/25-13:10:09.546327 7f0421a006c0 Delete type=0 #125
2024/02/25-13:10:09.552649 7f0421a006c0 Manual compaction at level-0 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.552755 7f0421a006c0 Manual compaction at level-1 from '!items!0SbSmYdxJSlcNr6x' @ 72057594037927935 : 1 .. '!items!yyCPVVl8vmMOfPcN' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000022

8
packs/darkstars-sf/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/26-14:13:38.966465 7f13374006c0 Recovering log #20
2024/02/26-14:13:38.977463 7f13374006c0 Delete type=3 #18
2024/02/26-14:13:38.977548 7f13374006c0 Delete type=0 #20
2024/02/26-14:20:24.259303 7f132fe006c0 Level-0 table #25: started
2024/02/26-14:20:24.259357 7f132fe006c0 Level-0 table #25: 0 bytes OK
2024/02/26-14:20:24.265823 7f132fe006c0 Delete type=0 #23
2024/02/26-14:20:24.287708 7f132fe006c0 Manual compaction at level-0 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/26-14:20:24.287792 7f132fe006c0 Manual compaction at level-1 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2024/02/25-13:25:19.744621 7f0428e006c0 Recovering log #16
2024/02/25-13:25:19.754834 7f0428e006c0 Delete type=3 #14
2024/02/25-13:25:19.754885 7f0428e006c0 Delete type=0 #16
2024/02/25-15:40:12.533736 7f0421a006c0 Level-0 table #21: started
2024/02/25-15:40:12.533778 7f0421a006c0 Level-0 table #21: 0 bytes OK
2024/02/25-15:40:12.540676 7f0421a006c0 Delete type=0 #19
2024/02/25-15:40:12.555489 7f0421a006c0 Manual compaction at level-0 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)
2024/02/25-15:40:12.555554 7f0421a006c0 Manual compaction at level-1 from '!folders!La3YsNYFddQnmsba' @ 72057594037927935 : 1 .. '!items!zzDfuUJpQzzz262R' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/equipment/000186.ldb Normal file

Binary file not shown.

1
packs/equipment/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000199

8
packs/equipment/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.819236 7f0428e006c0 Recovering log #197
2024/02/25-13:11:04.829162 7f0428e006c0 Delete type=3 #195
2024/02/25-13:11:04.829232 7f0428e006c0 Delete type=0 #197
2024/02/25-13:14:07.545758 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.545813 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.552067 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.565492 7f0421a006c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.565529 7f0421a006c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)

8
packs/equipment/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.239972 7f0423e006c0 Recovering log #193
2024/02/25-13:04:05.249512 7f0423e006c0 Delete type=3 #191
2024/02/25-13:04:05.249560 7f0423e006c0 Delete type=0 #193
2024/02/25-13:10:09.473431 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.473459 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.480345 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.493344 7f0421a006c0 Manual compaction at level-0 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.499930 7f0421a006c0 Manual compaction at level-1 from '!items!05RVU3UcRabogEvL' @ 72057594037927935 : 1 .. '!items!zaxcUsWUZ1vvl0p8' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/genetics/000014.ldb Normal file

Binary file not shown.

1
packs/genetics/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000075

8
packs/genetics/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.925036 7f0428e006c0 Recovering log #73
2024/02/25-13:11:04.935090 7f0428e006c0 Delete type=3 #71
2024/02/25-13:11:04.935353 7f0428e006c0 Delete type=0 #73
2024/02/25-13:14:07.585843 7f0421a006c0 Level-0 table #78: started
2024/02/25-13:14:07.585896 7f0421a006c0 Level-0 table #78: 0 bytes OK
2024/02/25-13:14:07.592513 7f0421a006c0 Delete type=0 #76
2024/02/25-13:14:07.592640 7f0421a006c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.592670 7f0421a006c0 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
View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.347457 7f0423e006c0 Recovering log #69
2024/02/25-13:04:05.356885 7f0423e006c0 Delete type=3 #67
2024/02/25-13:04:05.356934 7f0423e006c0 Delete type=0 #69
2024/02/25-13:10:09.533502 7f0421a006c0 Level-0 table #74: started
2024/02/25-13:10:09.533526 7f0421a006c0 Level-0 table #74: 0 bytes OK
2024/02/25-13:10:09.539823 7f0421a006c0 Delete type=0 #72
2024/02/25-13:10:09.552630 7f0421a006c0 Manual compaction at level-0 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.552738 7f0421a006c0 Manual compaction at level-1 from '!items!56A3sVsiN7KI6a45' @ 72057594037927935 : 1 .. '!items!zJiASbV3QqH2oHb1' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000177

0
packs/nightborough/LOCK Normal file
View File

7
packs/nightborough/LOG Normal file
View File

@ -0,0 +1,7 @@
2024/02/26-14:13:39.028984 7f13374006c0 Recovering log #175
2024/02/26-14:13:39.040662 7f13374006c0 Delete type=3 #173
2024/02/26-14:13:39.040750 7f13374006c0 Delete type=0 #175
2024/02/26-14:20:24.280431 7f132fe006c0 Level-0 table #180: started
2024/02/26-14:20:24.280468 7f132fe006c0 Level-0 table #180: 0 bytes OK
2024/02/26-14:20:24.287553 7f132fe006c0 Delete type=0 #178
2024/02/26-14:20:24.287767 7f132fe006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,7 @@
2024/02/25-13:25:19.786914 7f0428e006c0 Recovering log #171
2024/02/25-13:25:19.797512 7f0428e006c0 Delete type=3 #169
2024/02/25-13:25:19.797578 7f0428e006c0 Delete type=0 #171
2024/02/25-15:40:12.555728 7f0421a006c0 Level-0 table #176: started
2024/02/25-15:40:12.555778 7f0421a006c0 Level-0 table #176: 0 bytes OK
2024/02/25-15:40:12.562473 7f0421a006c0 Delete type=0 #174
2024/02/25-15:40:12.562645 7f0421a006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/perks/000186.ldb Normal file

Binary file not shown.

0
packs/perks/000201.log Normal file
View File

1
packs/perks/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000199

0
packs/perks/LOCK Normal file
View File

8
packs/perks/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.899830 7f0428e006c0 Recovering log #197
2024/02/25-13:11:04.909890 7f0428e006c0 Delete type=3 #195
2024/02/25-13:11:04.909976 7f0428e006c0 Delete type=0 #197
2024/02/25-13:14:07.614576 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.614602 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.621467 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.628014 7f0421a006c0 Manual compaction at level-0 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.628055 7f0421a006c0 Manual compaction at level-1 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)

8
packs/perks/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.318599 7f0423e006c0 Recovering log #193
2024/02/25-13:04:05.328529 7f0423e006c0 Delete type=3 #191
2024/02/25-13:04:05.328597 7f0423e006c0 Delete type=0 #193
2024/02/25-13:10:09.519595 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.519645 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.526863 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.527031 7f0421a006c0 Manual compaction at level-0 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.527062 7f0421a006c0 Manual compaction at level-1 from '!items!0K3CVEKsq67oKiYE' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)

BIN
packs/perks/MANIFEST-000199 Normal file

Binary file not shown.

0
packs/shields/000200.log Normal file
View File

1
packs/shields/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000198

0
packs/shields/LOCK Normal file
View File

7
packs/shields/LOG Normal file
View File

@ -0,0 +1,7 @@
2024/02/25-13:11:04.832847 7f0422a006c0 Recovering log #196
2024/02/25-13:11:04.844534 7f0422a006c0 Delete type=3 #194
2024/02/25-13:11:04.844584 7f0422a006c0 Delete type=0 #196
2024/02/25-13:14:07.539362 7f0421a006c0 Level-0 table #201: started
2024/02/25-13:14:07.539386 7f0421a006c0 Level-0 table #201: 0 bytes OK
2024/02/25-13:14:07.545589 7f0421a006c0 Delete type=0 #199
2024/02/25-13:14:07.565459 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

7
packs/shields/LOG.old Normal file
View File

@ -0,0 +1,7 @@
2024/02/25-13:04:05.255291 7f0428e006c0 Recovering log #192
2024/02/25-13:04:05.265834 7f0428e006c0 Delete type=3 #190
2024/02/25-13:04:05.265885 7f0428e006c0 Delete type=0 #192
2024/02/25-13:10:09.486767 7f0421a006c0 Level-0 table #197: started
2024/02/25-13:10:09.486786 7f0421a006c0 Level-0 table #197: 0 bytes OK
2024/02/25-13:10:09.493210 7f0421a006c0 Delete type=0 #195
2024/02/25-13:10:09.499919 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/skills/000186.ldb Normal file

Binary file not shown.

0
packs/skills/000201.log Normal file
View File

1
packs/skills/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000199

0
packs/skills/LOCK Normal file
View File

8
packs/skills/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:11:04.885568 7f0422a006c0 Recovering log #197
2024/02/25-13:11:04.896289 7f0422a006c0 Delete type=3 #195
2024/02/25-13:11:04.896428 7f0422a006c0 Delete type=0 #197
2024/02/25-13:14:07.572202 7f0421a006c0 Level-0 table #202: started
2024/02/25-13:14:07.572243 7f0421a006c0 Level-0 table #202: 0 bytes OK
2024/02/25-13:14:07.578291 7f0421a006c0 Delete type=0 #200
2024/02/25-13:14:07.592622 7f0421a006c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!z3j0TW0hqigz6UP5' @ 0 : 0; will stop at (end)
2024/02/25-13:14:07.592664 7f0421a006c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!z3j0TW0hqigz6UP5' @ 0 : 0; will stop at (end)

8
packs/skills/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/02/25-13:04:05.306405 7f0428e006c0 Recovering log #193
2024/02/25-13:04:05.315767 7f0428e006c0 Delete type=3 #191
2024/02/25-13:04:05.315959 7f0428e006c0 Delete type=0 #193
2024/02/25-13:10:09.513533 7f0421a006c0 Level-0 table #198: started
2024/02/25-13:10:09.513561 7f0421a006c0 Level-0 table #198: 0 bytes OK
2024/02/25-13:10:09.519495 7f0421a006c0 Delete type=0 #196
2024/02/25-13:10:09.527015 7f0421a006c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!z3j0TW0hqigz6UP5' @ 0 : 0; will stop at (end)
2024/02/25-13:10:09.527047 7f0421a006c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!z3j0TW0hqigz6UP5' @ 0 : 0; will stop at (end)

Some files were not shown because too many files have changed in this diff Show More