Files
dwroller/database/scripts/upsert_chris_librarian.js
2026-06-29 13:37:02 +02:00

142 lines
3.5 KiB
JavaScript

const { playerHelpers, pool } = require('../mariadb');
const name = 'chris';
const characteristics = {
WS: 43,
BS: 41,
S: 40,
T: 42,
Ag: 39,
Int: 48,
Per: 45,
Wp: 51,
Fel: 37
};
function skill(trained = false) {
return { trained, plus10: false, plus20: false };
}
const skills = {
'Awareness (Per)': skill(true),
'Common Lore (Int)': skill(true),
'Dodge (Ag)': skill(true),
'Forbidden Lore (Int) - Xenos': skill(true),
'Intimidate (S)': skill(true),
'Literacy (Int)': skill(true),
'Psyniscience (Per)': skill(true),
'Scholastic Lore (Int) - Codex Astartes': skill(true),
'Scholastic Lore (Int) - Occult': skill(true),
'Search (Per)': skill(true),
'Speak Language (Int) - High Gothic': skill(true),
'Speak Language (Int) - Low Gothic': skill(true),
'Silent Move (Ag)': skill(false),
'Tech-Use (Int)': skill(false),
'Navigation (Int)': skill(false),
'Command (Fel)': skill(false)
};
const tabInfo = {
charName: 'Brother Malachiel',
playerName: name,
chapter: 'dark angels',
speciality: 'librarian',
rank: '1',
characteristics,
skills,
weapons: [
{
name: 'Astartes Bolter',
class: 'Basic',
damage: '2d10+5',
type: 'Explosive',
pen: '5',
range: '100',
rof: 'S/2/4',
clip: '28',
rld: 'Full',
special: 'Tearing, Fire selector'
},
{
name: 'Astartes Bolt Pistol',
class: 'Pistol',
damage: '2d10+5',
type: 'Explosive',
pen: '5',
range: '30',
rof: 'S/2/-',
clip: '14',
rld: 'Full',
special: 'Tearing'
},
{
name: 'Astartes Force Sword',
class: 'Melee',
damage: '1d10+5 + SB',
type: 'Rending',
pen: '5',
range: '',
rof: '',
clip: '',
rld: '',
special: 'Balanced, Special, Psy Rating 3 included'
}
],
gear: [
{ name: 'Astartes Power Armour', qty: 1 },
{ name: 'Astartes Bolter with Fire Selector', qty: 1 },
{ name: 'Astartes Bolt Pistol', qty: 1 },
{ name: 'Astartes Force Sword', qty: 1 },
{ name: 'Astartes Frag Grenade', qty: 3 },
{ name: 'Astartes Krak Grenade', qty: 3 },
{ name: 'Astartes Combat Knife', qty: 1 },
{ name: 'Emperor Tarot Deck', qty: 1 }
],
armour: { body: 'Mark VII Power Armour', ap: 8, head: 8, ra: 8, la: 8, rl: 8, ll: 8 },
talents: [
'Astartes Weapon Training',
'Deathwatch Training',
'Psy Rating 3',
'Resistance (Psychic Powers)',
'Nerves of Steel',
'True Grit',
'Unnatural Strength (x2)',
'Unnatural Toughness (x2)'
],
psychicPowers: ['Smite', 'Inspire', 'Reading'],
fate: 3,
wounds: 20,
movement: { half: 4, full: 8, charge: 12, halfAction: 4, fullAction: 8, run: 24 },
renown: 'Initiated',
rp: 0,
xp: 0,
xpSpent: 0,
notes: 'Dark Angels Deathwatch Librarian introduced during Operation Vesalius Scene 4.'
};
(async function main() {
const existing = await playerHelpers.getByName(name);
if (existing) {
await playerHelpers.update(name, {
rollerInfo: existing.rollerInfo || {},
shopInfo: existing.shopInfo || {},
tabInfo,
pw: existing.pw || '',
pwHash: existing.pwHash || ''
});
console.log(JSON.stringify({ status: 'updated', name }, null, 2));
} else {
const id = await playerHelpers.create({
name,
rollerInfo: {},
shopInfo: {},
tabInfo,
pw: '1234',
pwHash: ''
});
console.log(JSON.stringify({ status: 'created', id, name }, null, 2));
}
await pool.end();
})();