Take over project

Changes:
 + Update macros for crits
 + update lookup for Abwehr and Zaubern to display correct value
This commit is contained in:
2023-11-17 09:10:29 +01:00
parent c8f111dd18
commit 0e67ab06dc
15 changed files with 571 additions and 577 deletions
+118 -127
View File
@@ -1,19 +1,18 @@
import Logger from "../../utils/Logger"
import { M5Character } from "../actors/M5Character"
import { M5Item } from "../items/M5Item"
import { M5SkillLearned, M5SkillUnlearned } from "../M5Base"
import { M5Roll } from "../rolls/M5Roll"
import Logger from "../../utils/Logger";
import { M5Character } from "../actors/M5Character";
import { M5Item } from "../items/M5Item";
import { M5SkillLearned, M5SkillUnlearned } from "../M5Base";
import { M5Roll } from "../rolls/M5Roll";
export default class M5CharacterSheet extends ActorSheet {
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
template: "systems/midgard5/templates/sheets/character/main.hbs",
width: 800,
height: 800,
classes: ["midgard5", "sheet", "character"],
tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }]
})
tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }],
});
}
// get template() {
@@ -21,155 +20,152 @@ export default class M5CharacterSheet extends ActorSheet {
// }Options extends ActorSheet.Options = ActorSheet.Options, Data extends object = ActorSheet.Data<Options>
override getData(options?: Partial<ActorSheet.Options>): ActorSheet.Data<ActorSheet.Options> | Promise<ActorSheet.Data<ActorSheet.Options>> {
const actor = this.actor as M5Character
const actor = this.actor as M5Character;
//console.log("Sheet getData", (actor as any).data)
return Promise.resolve(super.getData(options)).then(context => {
actor.prepareDerivedData()
return Promise.resolve(super.getData(options)).then((context) => {
actor.prepareDerivedData();
context.actor = (actor as any).toObject(false);
context.data = (actor as any).system;
context.actor = (actor as any).toObject(false)
context.data = (actor as any).system
//console.log("Sheet Promise", context.actor, context.data)
return context
})
return context;
});
}
override setPosition(options = {}) {
const position = super.setPosition(options)
const fillerWidth = this.element.find(".attributes .filler:first").width()
this.element.find(".attributes .attribute-filler-fixed").width(fillerWidth)
const position = super.setPosition(options);
const fillerWidth = this.element.find(".attributes .filler:first").width();
this.element.find(".attributes .attribute-filler-fixed").width(fillerWidth);
return position;
}
override activateListeners(html: JQuery) {
super.activateListeners(html)
super.activateListeners(html);
html.find(".update-lp").on("click", async (event) => {
const valueStr = event.target.dataset["value"]
const value = parseInt(valueStr)
const valueStr = event.target.dataset["value"];
const value = parseInt(valueStr);
this.actor.update({
data: {
lp: {
value: value + 1
}
}
})
})
value: value + 1,
},
},
});
});
html.find(".update-ap").on("click", async (event) => {
const valueStr = event.target.dataset["value"]
const value = parseInt(valueStr)
const valueStr = event.target.dataset["value"];
const value = parseInt(valueStr);
this.actor.update({
data: {
ap: {
value: value + 1
}
}
})
})
value: value + 1,
},
},
});
});
html.find(".roll-attribute-button").on("click", async (event) => {
let elem = event.target
let attributeStr = elem.dataset["attribute"]
let elem = event.target;
let attributeStr = elem.dataset["attribute"];
while (!attributeStr) {
elem = elem.parentElement
if (!elem)
return
attributeStr = elem.dataset["attribute"]
elem = elem.parentElement;
if (!elem) return;
attributeStr = elem.dataset["attribute"];
}
const attributeValue = parseInt(elem.dataset["value"])
const attributeValue = parseInt(elem.dataset["value"]);
const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue)
const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue);
//console.log("roll-attribute-button", parent, attributeStr, attributeValue, roll)
await roll.toMessage()
})
await roll.toMessage();
});
html.find(".edit-item").on("click", async (event) => {
let row = event.target.parentElement
let itemId = row.dataset["item"]
let row = event.target.parentElement;
let itemId = row.dataset["item"];
while (!itemId) {
row = row.parentElement
if (!row)
return
itemId = row.dataset["item"]
row = row.parentElement;
if (!row) return;
itemId = row.dataset["item"];
}
const context = this.actor as any
const item = context.items.get(itemId)
console.log("edit-item", item)
item.sheet.render(true)
})
const context = this.actor as any;
const item = context.items.get(itemId);
console.log("edit-item", item);
item.sheet.render(true);
});
html.find(".item-delete").on("click", async (event) => {
let row = event.target.parentElement
let itemId = row.dataset["item"]
let row = event.target.parentElement;
let itemId = row.dataset["item"];
while (!itemId) {
row = row.parentElement
if (!row)
return
itemId = row.dataset["item"]
row = row.parentElement;
if (!row) return;
itemId = row.dataset["item"];
}
const context = this.actor as any
const item = context.items.get(itemId)
item.delete()
this.render(false)
})
const context = this.actor as any;
const item = context.items.get(itemId);
item.delete();
this.render(false);
});
html.find(".roll-learned-button").on("click", async (event) => {
const row = event.target.parentElement.parentElement
let skillId = row.dataset["item"]
const row = event.target.parentElement.parentElement;
let skillId = row.dataset["item"];
const actor = this.actor as any
const item = actor.items.get(skillId) as M5Item
await item.roll()
})
const actor = this.actor as any;
const item = actor.items.get(skillId) as M5Item;
await item.roll();
});
html.find(".roll-general-button").on("click", async (event) => {
const row = event.target.parentElement.parentElement
let skillName = row.dataset["skill"]
const row = event.target.parentElement.parentElement;
let skillName = row.dataset["skill"];
const data = this.actor.system
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned
const data = this.actor.system;
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned;
const roll = M5Roll.fromUnlearnedSkill(this.actor, unlearnedSkill, skillName)
await roll.toMessage()
})
const roll = M5Roll.fromUnlearnedSkill(this.actor, unlearnedSkill, skillName);
await roll.toMessage();
});
html.find(".learn-button").on("click", async (event) => {
const row = event.target.parentElement.parentElement
let skillName = row.dataset["skill"]
const row = event.target.parentElement.parentElement;
let skillName = row.dataset["skill"];
const data = this.actor.system
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned
const data = this.actor.system;
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned;
const character = this.actor as M5Character
character.createSkill((game as Game).i18n.localize("midgard5." + skillName)).then(skill => {
const item = skill as any
const character = this.actor as M5Character;
character.createSkill((game as Game).i18n.localize("midgard5." + skillName)).then((skill) => {
const item = skill as any;
item.update({
data: {
fw: unlearnedSkill.initial,
attribute: unlearnedSkill.attribute,
skill: skillName,
type: "general"
}
})
})
})
type: "general",
},
});
});
});
html.find(".roll-weapon-button").on("click", async (event) => {
const row = event.target.parentElement.parentElement
let itemId = row.dataset["item"]
const row = event.target.parentElement.parentElement;
let itemId = row.dataset["item"];
const context = this.actor as any
const item = context.items.get(itemId) as M5Item
await item.roll()
})
const context = this.actor as any;
const item = context.items.get(itemId) as M5Item;
await item.roll();
});
html.find(".roll-brawl-button").on("click", async (event) => {
const roll = M5Roll.brawl(this.actor)
await roll.toMessage()
})
const roll = M5Roll.brawl(this.actor);
await roll.toMessage();
});
// Drag & Drop
const dragDrop = new DragDrop({
@@ -177,8 +173,8 @@ export default class M5CharacterSheet extends ActorSheet {
dropSelector: ".sheet-body",
permissions: { dragstart: this._canDragStart.bind(this), drop: this._canDragDrop.bind(this) },
callbacks: { dragstart: this._onTransferItemDragStart.bind(this), drop: this._onTransferItemDrop.bind(this) },
})
dragDrop.bind(html[0])
});
dragDrop.bind(html[0]);
}
_canDragStart(selector) {
@@ -190,9 +186,9 @@ export default class M5CharacterSheet extends ActorSheet {
}
_onTransferItemDragStart(event) {
const li = event.currentTarget
$(event.currentTarget).attr("data-item-actorid", this.actor.id)
const item = this.actor.items.get(li.dataset.itemId)
const li = event.currentTarget;
$(event.currentTarget).attr("data-item-actorid", this.actor.id);
const item = this.actor.items.get(li.dataset.itemId);
// limit transfer on personal weapons/armour/gear
if (["skill", "item", "weapon", "defensiveWeapon", "armor", "spell"].includes(item.type)) {
@@ -200,45 +196,40 @@ export default class M5CharacterSheet extends ActorSheet {
type: "Transfer",
actorId: this.actor.id,
data: item.toObject(false),
tokenId: null
}
tokenId: null,
};
if (this.actor.isToken)
dragData.tokenId = this.actor.token.id
if (this.actor.isToken) dragData.tokenId = this.actor.token.id;
event.dataTransfer.setData("text/plain", JSON.stringify(dragData))
event.dataTransfer.setData("text/plain", JSON.stringify(dragData));
} else {
return false
return false;
}
}
async _onTransferItemDrop(event) {
// Try to extract the data
let data = null
let data = null;
try {
data = JSON.parse(event.dataTransfer.getData("text/plain"))
if (data.type !== "Transfer")
return false
data = JSON.parse(event.dataTransfer.getData("text/plain"));
if (data.type !== "Transfer") return false;
} catch (err) {
return false
return false;
}
if (!data.data)
return false
if (!data.data) return false;
if (data.actorId === this.actor.id)
return false
if (data.actorId === this.actor.id) return false;
try {
this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]) // Create a new Item
const actor = (game as any).actors.get(data.actorId)
await actor.items.get(data.data._id)?.delete() // Delete originating item from other actor
this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]); // Create a new Item
const actor = (game as any).actors.get(data.actorId);
await actor.items.get(data.data._id)?.delete(); // Delete originating item from other actor
} catch (e) {
console.error("Error transfering item between actors", e)
return false
console.error("Error transfering item between actors", e);
return false;
}
return true
return true;
}
}