+161
-68
@@ -1,4 +1,5 @@
|
||||
@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");
|
||||
@import url('https://fonts.googleapis.com/css2?family=Hind:wght@300;400;500;600;700&display=swap');
|
||||
|
||||
@include-when-export url(https://fonts.loli.net/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext);
|
||||
|
||||
@@ -83,7 +84,7 @@
|
||||
grid-column: span 2 / span 2;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 2px;
|
||||
margin: 10px 0;
|
||||
/* margin: 10px 0; */
|
||||
padding: 0;
|
||||
}
|
||||
.grid-1col {
|
||||
@@ -92,8 +93,7 @@
|
||||
}
|
||||
|
||||
.widegap {
|
||||
gap: 30px;
|
||||
padding: 6px;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.grid-3col {
|
||||
@@ -190,6 +190,14 @@
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
justify-content:space-evenly;
|
||||
align-items: center;
|
||||
flex: auto;
|
||||
}
|
||||
|
||||
|
||||
/* Styles limited to mosh sheets */
|
||||
.mosh .item-form {
|
||||
font-family: "Roboto", sans-serif;
|
||||
@@ -234,12 +242,11 @@
|
||||
display: grid;
|
||||
grid-template-areas:
|
||||
'header header header'
|
||||
'abilities centercol saves '
|
||||
'abilities b saves';
|
||||
'abilities centercol saves ';
|
||||
grid-gap: 10px;
|
||||
/* background-color: rgb(226, 226, 226); */
|
||||
padding: 2px;
|
||||
grid-template-columns: 256px auto 82px;
|
||||
grid-template-columns: 238px auto 82px;
|
||||
}
|
||||
|
||||
.mosh .abilities {grid-area: abilities;}
|
||||
@@ -247,7 +254,7 @@
|
||||
|
||||
.mosh .stress {grid-area: stress;}
|
||||
.mosh .health {grid-area: centercol;}
|
||||
.mosh .healthspread {width:100px;}
|
||||
.mosh .healthspread {width:96%;}
|
||||
|
||||
.mosh .char-header h1.charname {
|
||||
height: auto;
|
||||
@@ -282,6 +289,13 @@
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.sheet nav.sheet-tabs {
|
||||
/* border-top: 2px solid black;
|
||||
border-bottom: 2px solid black; */
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.mosh .tox .tox-editor-container {
|
||||
background: #fff;
|
||||
}
|
||||
@@ -290,10 +304,38 @@
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
.mosh .origin {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.mosh .seperatorLine{
|
||||
border-bottom: 2px solid #111;
|
||||
height: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mosh .skill_training_frame{
|
||||
height: 47px;
|
||||
background: rgb(230,230,230);
|
||||
border-radius: 9px;
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-size: 11pt;
|
||||
font-weight: 400;
|
||||
padding: 8px;
|
||||
}
|
||||
.mosh .skill_training_text{
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-size: 11pt;
|
||||
font-weight: 500;
|
||||
color: grey;
|
||||
}
|
||||
|
||||
.mosh .resource-label {
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mosh .faded-label {
|
||||
@@ -400,6 +442,7 @@
|
||||
padding-left: 8px;
|
||||
border-radius: 21px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.mosh .items-list .item-controls {
|
||||
@@ -413,7 +456,7 @@
|
||||
font-size: medium;
|
||||
font-weight: bold;
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
color: #111;
|
||||
color: white;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -441,37 +484,40 @@
|
||||
}
|
||||
|
||||
.mosh .mainstatmod-input {
|
||||
margin-top: 13px;
|
||||
height: 26px;
|
||||
width: 44px;
|
||||
padding: 0;
|
||||
border: 2px solid rgb(129, 129, 129);
|
||||
border-radius: 0.1em 1em 0.11em;
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
width: 28px;
|
||||
/* padding: 0; */
|
||||
border: 0;
|
||||
border-radius: 7.7em;
|
||||
color: rgb(151, 100, 100);
|
||||
font-size: 0.85rem;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin-left: -22px;
|
||||
z-index: 5;
|
||||
background: white;
|
||||
top: 7px;
|
||||
left: 13px;
|
||||
position: relative;
|
||||
background: lightgrey;
|
||||
}
|
||||
|
||||
.mosh .mainstatmod-title {
|
||||
position: relative;
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
font-size: 0.7rem;
|
||||
color: rgb(77, 77, 77);
|
||||
color: lightgrey;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
margin-left: -35px;
|
||||
margin-left: -38px;
|
||||
pointer-events: none;
|
||||
top: 13px;
|
||||
left: 12px;
|
||||
}
|
||||
|
||||
.mosh .maxhealth-input {
|
||||
margin: auto;
|
||||
border: 0px solid #111;
|
||||
font-size: 1.8rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
background: transparent;
|
||||
@@ -485,50 +531,63 @@
|
||||
color: rgb(56, 56, 56);
|
||||
}
|
||||
|
||||
.mosh .sizelarge{
|
||||
font-size: 1.1rem;
|
||||
.mosh .whiteText{
|
||||
color: white;
|
||||
}
|
||||
|
||||
.mosh .minmaxwrapper{
|
||||
grid-column: 1/-1;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1px 1fr;
|
||||
align-items: start;
|
||||
width: 145px;
|
||||
height: 50px;
|
||||
padding: 0;
|
||||
border: 4px solid #111;
|
||||
border-radius: 1.5em;
|
||||
background: 0;
|
||||
.mosh .sizelarge{
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.mosh .valuewrapper{
|
||||
grid-column: 1/-1;
|
||||
display: grid;
|
||||
width: 145px;
|
||||
height: 50px;
|
||||
align-items: start;
|
||||
height: 40px;
|
||||
padding: 0;
|
||||
border: 4px solid #111;
|
||||
border: 2px solid #111;
|
||||
border-radius: 1.5em;
|
||||
background: 0;
|
||||
margin-top: -15px;
|
||||
}
|
||||
|
||||
.mosh .armorWrapper{
|
||||
grid-column: 1/-1;
|
||||
display: grid;
|
||||
align-items: start;
|
||||
height: 40px;
|
||||
padding: 0;
|
||||
border: 2px solid #111;
|
||||
border-radius: 0.3em;
|
||||
background: black;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.mosh .minmaxtopstat{
|
||||
width: 8.5rem;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-rows: 0.3fr 1.1fr 0.4fr;
|
||||
justify-self: center;
|
||||
display: grid;
|
||||
justify-items: center;
|
||||
gap: 3px;
|
||||
margin-bottom: 7px;
|
||||
}
|
||||
|
||||
.mosh .minmaxwrapper{
|
||||
grid-column: 1/-1;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1px 1fr;
|
||||
align-items: start;
|
||||
height: 40px;
|
||||
padding: 0;
|
||||
border: 2px solid #111;
|
||||
border-radius: 1.5em;
|
||||
background: 0;
|
||||
}
|
||||
|
||||
.mosh .minmaxtext{
|
||||
text-align: left;
|
||||
grid-column: 1/-1;
|
||||
/* font-family: "Montserrat", "Arial Black", sans-serif; */
|
||||
font-size: 1.15rem;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
@@ -542,11 +601,9 @@
|
||||
}
|
||||
|
||||
.mosh .healthmaxtext{
|
||||
text-align: left;
|
||||
grid-column: span 1;
|
||||
font-size: 0.8rem;
|
||||
/* font-family: "Montserrat", "Arial Black", sans-serif; */
|
||||
font-weight: bold;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -560,6 +617,7 @@
|
||||
|
||||
.mosh .mainstatwrapper {
|
||||
display: flex;
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.mosh .mainstat {
|
||||
@@ -568,7 +626,7 @@
|
||||
grid-template-columns: 1fr 5em;
|
||||
align-items: center;
|
||||
gap: 0;
|
||||
width: 100%;
|
||||
width: 98%;
|
||||
}
|
||||
|
||||
.mosh .creature-mainstat {
|
||||
@@ -583,15 +641,18 @@
|
||||
border-top-left-radius: 2em;
|
||||
border-bottom-left-radius: 2em;
|
||||
background: #111;
|
||||
padding: 2px 0.5rem;
|
||||
padding: 5px 0.5rem;
|
||||
left: 5px;
|
||||
position: relative;
|
||||
height: 35px;
|
||||
}
|
||||
|
||||
.mosh .mainstattext {
|
||||
width: 100%;
|
||||
padding: 0.5rem;
|
||||
color: white;
|
||||
font-family: "Montserrat", "Arial Black", sans-serif;
|
||||
font-size: 1.1rem;
|
||||
/* font-family: "Montserrat", "Arial Black", sans-serif; */
|
||||
font-size: 1.3rem;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
text-transform: uppercase;
|
||||
@@ -602,31 +663,46 @@
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
padding: 0;
|
||||
border: 4px solid #111;
|
||||
border: 2px solid #111;
|
||||
border-radius: 3em;
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
background: white;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.mosh .textarea-input {
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
font-family: "Roboto", sans-serif;
|
||||
margin: -0.15em;
|
||||
padding: 9px;
|
||||
padding-top: 2px;
|
||||
/* padding: 9px; */
|
||||
border: 2px solid #111;
|
||||
border-radius: 0.8em;
|
||||
font-size: 0.8rem;
|
||||
/* font-weight: bold; */
|
||||
background: white;
|
||||
font-size: 11pt;
|
||||
color: white;
|
||||
font-weight: 500;
|
||||
background: black;
|
||||
resize: none;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mosh .textarea-input-grey {
|
||||
font-family: "Roboto", sans-serif;
|
||||
border: 0;
|
||||
border-radius: 0.8em;
|
||||
font-size: 11pt;
|
||||
font-weight: 500;
|
||||
resize: none;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.mosh .square-input {
|
||||
margin: -0.15em;
|
||||
height: 45px;
|
||||
height: 42px;
|
||||
width: 45px;
|
||||
padding: 0;
|
||||
border: 4px solid #111;
|
||||
@@ -638,9 +714,9 @@
|
||||
}
|
||||
|
||||
.mosh .armor-mod {
|
||||
margin: -8px;
|
||||
margin: 3px;
|
||||
height: 24px;
|
||||
width: 35px;
|
||||
width: 28px;
|
||||
/* padding: 0; */
|
||||
border: 3px solid #111;
|
||||
background-color: #111;
|
||||
@@ -650,7 +726,7 @@
|
||||
text-align: center;
|
||||
position: relative;
|
||||
color: white;
|
||||
top: 8px;
|
||||
top: -2px;
|
||||
right: -19px;
|
||||
}
|
||||
|
||||
@@ -667,13 +743,11 @@
|
||||
}
|
||||
|
||||
.mosh .savebackground {
|
||||
border-radius: 1em;
|
||||
border-radius: 0.3em;
|
||||
background: #111;
|
||||
padding: 0 0.5rem;
|
||||
padding-bottom: 0.3rem;
|
||||
padding-top: 0.5rem;
|
||||
width: 80px;
|
||||
margin-top: -1px;
|
||||
padding-top: 0.4rem;
|
||||
height: 225px;
|
||||
}
|
||||
|
||||
.mosh .header {
|
||||
@@ -733,9 +807,9 @@
|
||||
|
||||
.mosh .ship-stats-grid{
|
||||
display: grid;
|
||||
grid-template-columns: 17em 1fr 15em;
|
||||
grid-template-columns: 17em 1fr 18em;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.mosh .whiteline {
|
||||
border-top: 2px solid white;
|
||||
@@ -851,6 +925,25 @@
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.mosh .circle{
|
||||
color: rgb(22, 22, 22);
|
||||
background: white;
|
||||
border-radius: 10px;
|
||||
/* border: 2px solid black; */
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
.mosh .circle-f{ /*Filled circle*/
|
||||
color: rgb(22, 22, 22);
|
||||
background: rgb(100, 100, 100);
|
||||
border-radius: 10px;
|
||||
/* border: 2px solid black; */
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
|
||||
.mosh .profile {
|
||||
width: 140px;
|
||||
height: auto;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"Mosh.ActorName" : "Name",
|
||||
"Mosh.ActorBackground" : "Background",
|
||||
"Mosh.ActorPronouns" : "Pronouns"
|
||||
}
|
||||
|
||||
+110
-2
@@ -9,7 +9,7 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["mosh", "sheet", "actor", "character"],
|
||||
template: "systems/mosh/templates/actor/actor-sheet.html",
|
||||
width: 742,
|
||||
width: 700,
|
||||
height: 800,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "character" }]
|
||||
});
|
||||
@@ -22,7 +22,9 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
const data = super.getData();
|
||||
|
||||
data.dtypes = ["String", "Number", "Boolean"];
|
||||
|
||||
|
||||
const superData = data.data.data;
|
||||
|
||||
for (let attr of Object.values(data.data.data.attributes)) {
|
||||
attr.isCheckbox = attr.dtype === "Boolean";
|
||||
}
|
||||
@@ -38,8 +40,40 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
}
|
||||
data.data.data.settings.useCalm = game.settings.get("mosh", "useCalm");
|
||||
data.data.data.settings.hideWeight = game.settings.get("mosh", "hideWeight");
|
||||
data.data.data.settings.firstEdition = game.settings.get("mosh", "firstEdition");
|
||||
|
||||
|
||||
//SKILL XP BUTTONS
|
||||
superData.xp.html = '';
|
||||
if(superData.xp.html == ''){
|
||||
for(let i = 1; i <= 15; i ++){
|
||||
if(i > superData.xp.value){
|
||||
if(i % 5){
|
||||
superData.xp.html += '<div class="circle"></div>';
|
||||
}
|
||||
else { //If a special one
|
||||
let trainLevel = 'Trained';
|
||||
if(i == 10) trainLevel = 'Expert';
|
||||
else if(i == 15) trainLevel = 'Master';
|
||||
superData.xp.html += '<div class="circle" style="background:rgb(200,200,200);"><div class="skill_training_text" style="position: relative; top: 17px; text-align: center; left: -60px;">'+trainLevel+'</div></div>';
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(i % 5){
|
||||
superData.xp.html += '<div class="circle-f"></div>';
|
||||
}
|
||||
else { //If a special one
|
||||
let trainLevel = 'Trained';
|
||||
if(i == 10) trainLevel = 'Expert';
|
||||
else if(i == 15) trainLevel = 'Master';
|
||||
superData.xp.html += '<div class="circle-f" style="background:black;"><div class="skill_training_text" style="position: relative; top: 17px; text-align: center; left: -60px; color:black;">'+trainLevel+'</div></div>';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
//END SKILL XP
|
||||
|
||||
return data.data;
|
||||
}
|
||||
|
||||
@@ -57,6 +91,7 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
const skills = [];
|
||||
const weapons = [];
|
||||
const armors = [];
|
||||
const conditions = [];
|
||||
|
||||
let curWeight = 0;
|
||||
// Iterate through items, allocating to containers
|
||||
@@ -74,6 +109,27 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
armors.push(i);
|
||||
} else if (i.type === 'weapon') {
|
||||
weapons.push(i);
|
||||
} else if (i.type === 'condition') {
|
||||
// We'll handle the pip html here.
|
||||
if (item.treatment == null) {
|
||||
item.treatment = {
|
||||
"value": 0,
|
||||
"html": ""
|
||||
};
|
||||
}
|
||||
let pipHtml = "";
|
||||
for (let i = 0; i < 3; i++) {
|
||||
if (i < item.treatment.value){
|
||||
pipHtml += '<i class="fas fa-circle"></i>';
|
||||
}
|
||||
else{
|
||||
pipHtml += '<i class="far fa-circle"></i>';
|
||||
}
|
||||
}
|
||||
|
||||
item.treatment.html = pipHtml;
|
||||
|
||||
conditions.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +154,7 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
actorData.skills = skills;
|
||||
actorData.armors = armors;
|
||||
actorData.weapons = weapons;
|
||||
actorData.conditions = conditions;
|
||||
|
||||
}
|
||||
|
||||
@@ -108,6 +165,57 @@ export class MothershipActorSheet extends ActorSheet {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
html.on('mousedown', '.char-pip-button', ev => {
|
||||
const data = super.getData();
|
||||
|
||||
const div = $(ev.currentTarget);
|
||||
const targetName = div.data("key");
|
||||
const attribute = data.data.data[targetName];
|
||||
|
||||
let amount = attribute.value;
|
||||
let max = div.data("max");
|
||||
let min = div.data("min");
|
||||
|
||||
if (event.button == 0) {
|
||||
if (amount < max) {
|
||||
attribute.value = Number(amount) + 1;
|
||||
}
|
||||
} else if (event.button == 2) {
|
||||
if (amount > min) {
|
||||
attribute.value = Number(amount) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
let updated = {
|
||||
html: '',
|
||||
value: attribute.value
|
||||
}
|
||||
|
||||
const updateString = "data."+targetName;
|
||||
|
||||
this.actor.update({[updateString] : updated});
|
||||
});
|
||||
|
||||
html.on('mousedown', '.treatment-button', ev => {
|
||||
const li = ev.currentTarget.closest(".item");
|
||||
const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId))
|
||||
|
||||
let amount = item.data.treatment.value;
|
||||
|
||||
if (event.button == 0) {
|
||||
if (amount < 3) {
|
||||
item.data.treatment.value = Number(amount) + 1;
|
||||
}
|
||||
} else if (event.button == 2) {
|
||||
if (amount > 0) {
|
||||
item.data.treatment.value = Number(amount) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
this.actor.updateEmbeddedDocuments('Item', [item]);
|
||||
});
|
||||
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = ev.currentTarget.closest(".item");
|
||||
|
||||
+27
-4
@@ -325,15 +325,18 @@ export class MothershipActor extends Actor {
|
||||
t.render(true);
|
||||
}
|
||||
|
||||
rollAttribute(attribute, advantage, item = "", rollOver = false) {
|
||||
async rollAttribute(attribute, advantage, item = "", rollOver = false) {
|
||||
let attributeName = attribute.label?.charAt(0).toUpperCase() + attribute.label?.toLowerCase().slice(1);
|
||||
if (!attribute.label && isNaN(attributeName))
|
||||
attributeName = attribute.charAt(0)?.toUpperCase() + attribute.toLowerCase().slice(1);
|
||||
|
||||
let isStress = (attribute.label == "Stress" ? true : false);
|
||||
// Roll
|
||||
let diceformular = (isStress ? "2d10" : "1d100");
|
||||
|
||||
let firstEdition = game.settings.get("mosh", "firstEdition");
|
||||
|
||||
let diceformular = (isStress ? (firstEdition ? "1d20" : "2d10") : "1d100");
|
||||
|
||||
|
||||
// if (advantage != undefined && advantage != NaN && advantage != 0) {
|
||||
// diceformular = diceformular + "+" + advantage + "d6kh";
|
||||
// }
|
||||
@@ -376,6 +379,24 @@ export class MothershipActor extends Actor {
|
||||
if (r._total == 0 && !isStress || rSplit[0] == rSplit[1] && !isStress)
|
||||
critical = true;
|
||||
|
||||
|
||||
let panic = false;
|
||||
let panicText = '';
|
||||
if(isStress && r._total < attribute.value && firstEdition){
|
||||
await(async () => {
|
||||
// const contents = await game.packs.get("Tables").getContent();
|
||||
// const table= contents.find(i => i.name === `Panic`);
|
||||
let tableLocation = game.settings.get("mosh", "panicTable");
|
||||
const documentIndex = game.packs.get(tableLocation).index.getName("Panic");
|
||||
const doc = await game.packs.get(tableLocation).getDocument(documentIndex._id);
|
||||
panic = true;
|
||||
panicText = doc.getResultsForRoll(r._total)[0].data.text;
|
||||
|
||||
//then just put your normal table rolling command using `table`
|
||||
})()
|
||||
|
||||
}
|
||||
|
||||
//Here's where we handle the result text.
|
||||
let resultText = "";
|
||||
|
||||
@@ -408,7 +429,9 @@ export class MothershipActor extends Actor {
|
||||
},
|
||||
isCreature: {
|
||||
value: this.data.type == "creature" ? true : false
|
||||
}
|
||||
},
|
||||
panic: panic,
|
||||
panicText : panicText
|
||||
},
|
||||
target: attribute.value,
|
||||
mod: mod,
|
||||
|
||||
+44
-21
@@ -1,7 +1,7 @@
|
||||
export const registerSettings = function () {
|
||||
game.settings.register('mosh', 'newArmor', {
|
||||
name: "1e Armor System",
|
||||
hint: "[COMING SOON] Use the 1st edition Armor system.",
|
||||
game.settings.register('mosh', 'firstEdition', {
|
||||
name: "1e Rules",
|
||||
hint: "Use the 1st edition rules and character sheet.",
|
||||
default: true,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
@@ -10,28 +10,52 @@ export const registerSettings = function () {
|
||||
console.log("newArmorandCombat set to " + value)
|
||||
}
|
||||
});
|
||||
game.settings.register('mosh', 'newStress', {
|
||||
name: "1e Stress System",
|
||||
hint: "[COMING SOON] Use the 1st edition stress system with the roll under d20 and stress table.",
|
||||
default: true,
|
||||
|
||||
game.settings.register('mosh', 'panicTable', {
|
||||
name: "Panic Table",
|
||||
hint: "Where is our panic table located?",
|
||||
default: "mosh.tables",
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
type: String,
|
||||
config: true,
|
||||
onChange: value => { // A callback function which triggers when the setting is changed
|
||||
console.log("newStress set to " + value)
|
||||
}
|
||||
});
|
||||
game.settings.register('mosh', 'newWounds', {
|
||||
name: "1e Wound System",
|
||||
hint: "[COMING SOON] Instead of the 0e health system, use the 1e wounds and health system.",
|
||||
default: true,
|
||||
scope: 'world',
|
||||
type: Boolean,
|
||||
config: true,
|
||||
onChange: value => { // A callback function which triggers when the setting is changed
|
||||
console.log("newWounds set to " + value)
|
||||
console.log("panicTable set to " + value)
|
||||
}
|
||||
});
|
||||
|
||||
// game.settings.register('mosh', 'newArmor', {
|
||||
// name: "1e Armor System",
|
||||
// hint: "Use the 1st edition Armor system.",
|
||||
// default: true,
|
||||
// scope: 'world',
|
||||
// type: Boolean,
|
||||
// config: true,
|
||||
// onChange: value => { // A callback function which triggers when the setting is changed
|
||||
// console.log("newArmorandCombat set to " + value)
|
||||
// }
|
||||
// });
|
||||
// game.settings.register('mosh', 'newStress', {
|
||||
// name: "1e Stress System",
|
||||
// hint: "Use the 1st edition stress system with the roll under d20 and stress table.",
|
||||
// default: true,
|
||||
// scope: 'world',
|
||||
// type: Boolean,
|
||||
// config: true,
|
||||
// onChange: value => { // A callback function which triggers when the setting is changed
|
||||
// console.log("newStress set to " + value)
|
||||
// }
|
||||
// });
|
||||
// game.settings.register('mosh', 'newWounds', {
|
||||
// name: "1e Wound System",
|
||||
// hint: "[Instead of the 0e health system, use the 1e wounds and health system.",
|
||||
// default: true,
|
||||
// scope: 'world',
|
||||
// type: Boolean,
|
||||
// config: true,
|
||||
// onChange: value => { // A callback function which triggers when the setting is changed
|
||||
// console.log("newWounds set to " + value)
|
||||
// }
|
||||
// });
|
||||
game.settings.register('mosh', 'hideWeight', {
|
||||
name: "Hide Weight",
|
||||
hint: "Hide weight in the items list for players and ships?",
|
||||
@@ -54,5 +78,4 @@ export const registerSettings = function () {
|
||||
console.log("useCalm set to " + value)
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
+10
-2
@@ -2,7 +2,7 @@
|
||||
"name": "mosh",
|
||||
"title": "MoSh - Unofficial Mothership",
|
||||
"description": "The unofficial Mothership system for FoundryVTT.",
|
||||
"version": "0.1.7b",
|
||||
"version": "0.2.0",
|
||||
"minimumCoreVersion": "0.8.6",
|
||||
"compatibleCoreVersion": "V9",
|
||||
"templateVersion": 2,
|
||||
@@ -10,7 +10,15 @@
|
||||
"esmodules": ["module/mosh.js"],
|
||||
"styles": ["css/mosh.css"],
|
||||
"scripts": [],
|
||||
"packs": [],
|
||||
"packs": [
|
||||
{
|
||||
"name": "tables",
|
||||
"label": "Tables",
|
||||
"system": "mosh",
|
||||
"path": "packs/tables.db",
|
||||
"entity": "RollTable"
|
||||
}
|
||||
],
|
||||
"languages": [
|
||||
{
|
||||
"lang": "en",
|
||||
|
||||
+19
-3
@@ -37,6 +37,9 @@
|
||||
"rank": {
|
||||
"value": ""
|
||||
},
|
||||
"pronouns": {
|
||||
"value": ""
|
||||
},
|
||||
"credits": {
|
||||
"value": ""
|
||||
},
|
||||
@@ -44,7 +47,9 @@
|
||||
"value": ""
|
||||
},
|
||||
"xp": {
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"html" : 0,
|
||||
"selectedSkill" : ""
|
||||
},
|
||||
"attributes": {
|
||||
"level": {
|
||||
@@ -103,7 +108,8 @@
|
||||
"biography": "",
|
||||
"description": "This is a description",
|
||||
"xp": {
|
||||
"value": 1
|
||||
"value": 1,
|
||||
"html": ""
|
||||
},
|
||||
"stats": {
|
||||
"combat": {
|
||||
@@ -197,7 +203,8 @@
|
||||
"weapon",
|
||||
"armor",
|
||||
"ability",
|
||||
"module"
|
||||
"module",
|
||||
"condition"
|
||||
],
|
||||
"templates": {
|
||||
"base": {
|
||||
@@ -246,6 +253,15 @@
|
||||
],
|
||||
"bonus": 10
|
||||
},
|
||||
"condition": {
|
||||
"templates": [
|
||||
"base"
|
||||
],
|
||||
"treatment" : {
|
||||
"value" : 0,
|
||||
"html" : ""
|
||||
}
|
||||
},
|
||||
"ability": {
|
||||
"templates": [
|
||||
"base"
|
||||
|
||||
@@ -44,16 +44,25 @@
|
||||
value="{{data.rank.value}}" placeholder="" /></div>
|
||||
</div>
|
||||
|
||||
{{#if data.settings.firstEdition}}
|
||||
<!-- Pronouns -->
|
||||
<div class="">
|
||||
<div class="headerinputtext">Pronouns</div>
|
||||
<div class="headerinputfield charname"><input name="data.pronouns.value" class="noborder" type="text"
|
||||
value="{{data.pronouns.value}}" placeholder="" /></div>
|
||||
</div>
|
||||
{{else}}
|
||||
<!-- XP -->
|
||||
<div class="">
|
||||
<div class="headerinputtext">XP</div>
|
||||
<div class="headerinputfield charname"><input name="data.xp.value" class="noborder" type="text"
|
||||
value="{{data.xp.value}}" placeholder="" /></div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<!-- LEVEL -->
|
||||
<div class="">
|
||||
<div class="headerinputtext">LEVEL</div>
|
||||
<div class="headerinputtext">{{#if data.settings.firstEdition}}High Score{{else}}LEVEL{{/if}}</div>
|
||||
<div class="headerinputfield charname"><input name="data.attributes.level.value" class="noborder"
|
||||
type="text" value="{{data.attributes.level.value}}" placeholder="" /></div>
|
||||
</div>
|
||||
@@ -61,8 +70,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="health grid grid-1col" style="margin-top: 0;">
|
||||
<div class="grid">
|
||||
<div class="health grid grid-2col" style="margin-top: 0; grid-template-rows: 76px 77px 72px;">
|
||||
<!-- Health -->
|
||||
<div class="resource healthspread minmaxtopstat">
|
||||
<label for="data.health.value" class="resource-label minmaxtext">Health</label>
|
||||
@@ -81,7 +89,13 @@
|
||||
|
||||
<!-- Hits -->
|
||||
<div class="resource healthspread minmaxtopstat">
|
||||
<label for="data.hits.value" class="resource-label minmaxtext">Hits</label>
|
||||
<label for="data.hits.value" class="resource-label minmaxtext">
|
||||
{{#if data.settings.firstEdition}}
|
||||
Wounds
|
||||
{{else}}
|
||||
Hits
|
||||
{{/if}}
|
||||
</label>
|
||||
|
||||
<div class="minmaxwrapper">
|
||||
<input class="maxhealth-input darkGreyText" type="text" name="data.hits.value" value="{{data.hits.value}}"
|
||||
@@ -129,6 +143,8 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if data.settings.firstEdition}}
|
||||
{{else}}
|
||||
<!-- Resolve -->
|
||||
<div class="resource healthspread minmaxtopstat">
|
||||
<label for="data.other.stress.value" class="resource-label minmaxtext">Resolve</label>
|
||||
@@ -138,16 +154,40 @@
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
{{#if data.settings.firstEdition}}
|
||||
<!-- Armor -->
|
||||
<div class="resource healthspread minmaxtopstat" style="grid-column-start: 2; grid-column-end: 3;">
|
||||
<label for="data.stats.armor.value" class="resource-label minmaxtext">Armor Points</label>
|
||||
|
||||
<!-- CLASS -->
|
||||
<div class="" style="margin-left: 17px; margin-right: 13px;">
|
||||
<div class="resource-label">STRESS & PANIC</div>
|
||||
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
|
||||
data-target="data.stressdesc.value" placeholder="">{{data.stressdesc.value}}</textarea>
|
||||
</div>
|
||||
<div class="armorWrapper" style=" width: 100%;">
|
||||
<div class="maxhealth-input whiteText" type="text"
|
||||
data-dtype="Number" >{{data.stats.armor.mod}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<!-- CLASS -->
|
||||
<div class="" style="margin-left: 6px; margin-right: 0px; flex: 0; grid-column-start: 1; grid-column-end: 3;">
|
||||
{{#if data.settings.firstEdition}}
|
||||
<div class="resource-label">TRAUMA RESPONSE</div>
|
||||
{{else}}
|
||||
<div class="resource-label">STRESS RESPONSE</div>
|
||||
{{/if}}
|
||||
{{#if data.settings.firstEdition}}
|
||||
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
|
||||
data-target="data.stressdesc.value" placeholder="" style="height: 50px;">{{data.stressdesc.value}}</textarea>
|
||||
{{else}}
|
||||
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
|
||||
data-target="data.stressdesc.value" placeholder="" style="height: 90px;">{{data.stressdesc.value}}</textarea>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<!-- XP -->
|
||||
<!-- <div class="char-pip-button list-roll flex" data-key="xp" data-label="XP" data-max="8" data-min="0">
|
||||
{{{data.xp.html}}}
|
||||
</div> -->
|
||||
|
||||
</div>
|
||||
|
||||
@@ -172,7 +212,12 @@
|
||||
</div> -->
|
||||
<!-- </div> -->
|
||||
|
||||
{{#if data.settings.firstEdition}}
|
||||
<div class="grid grid-1col widegap">
|
||||
{{else}}
|
||||
<div class="grid grid-1col widegap" style="gap: 24px">
|
||||
{{/if}}
|
||||
|
||||
<!-- Strength -->
|
||||
<div class="mainstatwrapper">
|
||||
<div class="resource mainstat">
|
||||
@@ -185,7 +230,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.strength.mod"
|
||||
value="{{data.stats.strength.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Speed -->
|
||||
@@ -200,7 +245,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.speed.mod" value="{{data.stats.speed.mod}}"
|
||||
data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Intellect -->
|
||||
@@ -215,7 +260,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.intellect.mod"
|
||||
value="{{data.stats.intellect.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Combat -->
|
||||
@@ -230,12 +275,16 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.combat.mod" value="{{data.stats.combat.mod}}"
|
||||
data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- SAVES -->
|
||||
{{#if data.settings.firstEdition}}
|
||||
<div class="saves grid grid-1col savebackground">
|
||||
{{else}}
|
||||
<div class="saves grid grid-1col savebackground" style = "height: 264px;">
|
||||
{{/if}}
|
||||
<!-- Sanity -->
|
||||
<div class="resource flex-group-center">
|
||||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-label="Sanity" data-key="sanity"
|
||||
@@ -257,6 +306,8 @@
|
||||
<input class="square-input" type="text" name="data.stats.body.value" value="{{data.stats.body.value}}"
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
|
||||
{{#unless data.settings.firstEdition}}
|
||||
<!-- Armor -->
|
||||
<div class="resource flex-group-center">
|
||||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-key="armor"
|
||||
@@ -266,11 +317,16 @@
|
||||
<div class="armor-mod" type="text" name="data.stats.armor.total" value=""
|
||||
data-dtype="Number" >{{data.stats.armor.total}}</div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="mosh sheet-tabs tabs" data-group="primary">
|
||||
<a class="tab-select" data-tab="skills">Skills</a>
|
||||
@@ -299,7 +355,11 @@
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-image"></div>
|
||||
<div class="skill-stat">Armor Name</div>
|
||||
{{#if data.settings.firstEdition}}
|
||||
<div class="skill-stat" style="flex-grow: 0.5;">Armor Points</div>
|
||||
{{else}}
|
||||
<div class="skill-stat" style="flex-grow: 0.5;">Save Bonus</div>
|
||||
{{/if}}
|
||||
<div class="skill-stat">Features</div>
|
||||
<div class="skill-stat" style="flex-grow: 0.5;">Equipped</div>
|
||||
<div class="item-controls">
|
||||
@@ -311,7 +371,7 @@
|
||||
<li class="item flexrow dropitem" data-item-id="{{armor._id}}">
|
||||
<div class="item-image"><img src="{{armor.img}}" title="{{armor.name}}" width="24" height="24" /></div>
|
||||
<h4 class="skill-name list-roll description-roll">{{armor.name}}</h4>
|
||||
<div class="skill-stat" style="flex-grow: 0.5;">{{armor.data.bonus}}%</div>
|
||||
<div class="skill-stat" style="flex-grow: 0.5;">{{armor.data.bonus}}</div>
|
||||
<div class="skill-stat">{{armor.data.features}}</div>
|
||||
<div class="skill-stat item-equip" style="flex-grow: 0.5;"><input type="checkbox" name="armor.data.equipped" data-dtype="Boolean"
|
||||
{{checked armor.data.equipped}} /></div>
|
||||
@@ -402,7 +462,51 @@
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
||||
|
||||
{{#if data.settings.firstEdition}}
|
||||
|
||||
<!-- XP -->
|
||||
<div class="minmaxtext" style="line-height: 1.5; text-transform: none; font-weight: 500;">Skill Training</div>
|
||||
<div class ="skill_training_frame">
|
||||
<div class="grid grid-2col" style="grid-template-columns: 283px auto;">
|
||||
<div class="char-pip-button list-roll flex" style="position: relative; top: -7px;" data-key="xp" data-label="XP" data-max="16" data-min="0">
|
||||
{{{data.xp.html}}}
|
||||
</div>
|
||||
<textarea name="data.xp.selectedSkill" rows="2" class="textarea-input-grey" type="text"
|
||||
data-target="data.xp.selectedSkill" placeholder="" style="height: 32px;">{{data.xp.selectedSkill}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</br>
|
||||
<div class="seperatorLine"></div>
|
||||
|
||||
<!-- Conditions -->
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="skill-stat">Condition</div>
|
||||
<div class="skill-stat" style = "flex: 0.2;">Treatment</div>
|
||||
<div class="item-controls">
|
||||
<a class="item-control item-create" title="Create Condition" data-type="condition"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each conditions as |condition id|}}
|
||||
<li class="item flexrow dropitem" data-item-id="{{condition._id}}">
|
||||
<div class="skill-name description-roll list-roll" style = "background: #1b0000;">{{condition.data.description}}</div>
|
||||
<div class="treatment-button list-roll flex" style="position: relative; flex: 0.2;" data-key="condition" data-label="condition" data-max="3" data-min="0">
|
||||
{{{condition.data.treatment.html}}}
|
||||
</div>
|
||||
<div class="item-controls">
|
||||
<a class="item-control skill-edit" title="Edit Condition"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Condition"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
||||
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Owned Weapons Tab --}}
|
||||
<div class="tab items" data-group="primary" data-tab="weapons">
|
||||
<!-- WEAPONS -->
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ship-stats-grid">
|
||||
<div class="ship-stats-grid" style="margin-top: 10px;">
|
||||
|
||||
<!-- Stats -->
|
||||
<div class="grid grid-1col widegap">
|
||||
<div class="grid grid-1col widegap" style="width: 98%;">
|
||||
<!-- Armor -->
|
||||
<div class="mainstatwrapper">
|
||||
<div class="resource mainstat">
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.armor.mod"
|
||||
value="{{data.stats.armor.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Speed -->
|
||||
@@ -74,7 +74,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.speed.mod"
|
||||
value="{{data.stats.speed.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Intellect -->
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.intellect.mod"
|
||||
value="{{data.stats.intellect.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
|
||||
<!-- Combat -->
|
||||
@@ -104,14 +104,13 @@
|
||||
</div>
|
||||
<input class="mainstatmod-input" type="text" name="data.stats.combat.mod"
|
||||
value="{{data.stats.combat.mod}}" data-dtype="Number" />
|
||||
<div class="mainstatmod-title">mod</div>
|
||||
<div class="mainstatmod-title">+</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display: grid;">
|
||||
<br />
|
||||
<div class="grid grid-1col">
|
||||
<!-- Hull -->
|
||||
<div class="resource healthspread minmaxtopstat flex-center">
|
||||
<div class="resource healthspread minmaxtopstat flex-center" style="grid-template-rows: 12px 19px;">
|
||||
<label for="data.supplies.hull.value" class="resource-label minmaxtext">Hull</label>
|
||||
<div class="faded-label">{{data.supplies.hull.percentage}}</div>
|
||||
|
||||
@@ -159,7 +158,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="creature-abilities" style="height: 300px;">
|
||||
<div class="creature-abilities" style="height: 220px;">
|
||||
<div class="creature-ability-container creature-ability-title">Notes</div>
|
||||
<div class="whiteline"></div>
|
||||
{{#each abilities as |ability id|}}
|
||||
|
||||
@@ -104,4 +104,11 @@
|
||||
<div class="body">{{{item.data.description}}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if data.panic}}
|
||||
<div class="description">
|
||||
<div class="header padding" style="color: red;">Panic</div>
|
||||
<div class="body">{{{data.panicText}}}</div>
|
||||
<br/>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,26 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||
<div class="resource">
|
||||
<label class="resource-label">Description</label>
|
||||
<input type="text" name="data.description" value="{{data.description}}" data-dtype="Text"/>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- {{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">Description</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab" data-group="primary" data-tab="description">
|
||||
{{editor content=data.description target="data.description" button=true owner=owner editable=true}}
|
||||
</div>
|
||||
</section> -->
|
||||
</form>
|
||||
Reference in New Issue
Block a user