Files
dwroller/database/backups/andreas.before.1755336112623.json
Alex dde3abda55 feat: Add validation and normalization utilities for player records
- Implemented `validatePlayer` and `normalizeTabInfo` functions in `database/validate.js` for player data validation and normalization.
- Added error handling for required fields and enforced data types and constraints.
- Introduced standardization for characteristics and skills.

feat: Create script for extracting rules from PDF files

- Developed `extract-rules.js` to extract text from PDF rulebooks and categorize rules.
- Integrated `pdftotext` for PDF processing and created a searchable rules database.
- Implemented rule categorization and indexing for efficient searching.

feat: Implement RulesTab component for rule searching

- Created `RulesTab.jsx` for searching and displaying rules with filtering options.
- Added recent searches and quick reference buttons for user convenience.
- Integrated API calls for fetching rules and displaying results dynamically.

feat: Add test script for Rules API

- Created `test-rules.js` to test the functionality of the Rules API endpoints.
- Included tests for search and stats endpoints to ensure proper response handling.
2025-08-16 12:15:32 +02:00

261 lines
5.3 KiB
JSON

{
"name": "andreas",
"rollerInfo": {},
"shopInfo": {},
"tabInfo": {
"charName": "Brother Lucian",
"playerName": "andreas",
"chapter": "ultramarines",
"speciality": "apothecary",
"rank": "1",
"characteristics": {
"ws": 46,
"bs": 40,
"s": 41,
"t": 40,
"ag": 43,
"int": 43,
"per": 41,
"wp": 42,
"fel": 43
},
"skills": {
"Acrobatics (Ag)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Awareness (Per)": {
"trained": true,
"plus10": false,
"plus20": false
},
"Charm (Fel)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Climb (S)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Command (Fel)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Common Lore (Int)": {
"trained": true,
"plus10": false,
"plus20": false
},
"Deathwatch": {
"trained": false,
"plus10": false,
"plus20": false
},
"Imperium": {
"trained": false,
"plus10": false,
"plus20": false
},
"War": {
"trained": false,
"plus10": false,
"plus20": false
},
"Dodge (Ag)": {
"trained": true,
"plus10": false,
"plus20": false
},
"Forbidden Lore (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Xenos": {
"trained": false,
"plus10": false,
"plus20": false
},
"Intimidate (S)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Literacy (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Medicae (Int)": {
"trained": true,
"plus10": false,
"plus20": false
},
"Navigation (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Pilot (Ag)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Scholastic Lore (Int)": {
"trained": true,
"plus10": false,
"plus20": false
},
"Codex Astartes": {
"trained": false,
"plus10": false,
"plus20": false
},
"Scrutiny (Per)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Search (Per)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Silent Move (Ag)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Speak Language (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"High Gothic": {
"trained": false,
"plus10": false,
"plus20": false
},
"Low Gothic": {
"trained": false,
"plus10": false,
"plus20": false
},
"Survival (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Tactics (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Tracking (Int)": {
"trained": false,
"plus10": false,
"plus20": false
},
"Tech-Use (Int)": {
"trained": false,
"plus10": false,
"plus20": false
}
},
"weapons": [
{
"name": "Astartes Chainsword",
"class": "One-Handed Melee - Chain",
"damage": "1d10+3 R; Pen 3; Balanced, Tearing",
"type": "Melee Weapon",
"pen": "3",
"range": "",
"rof": "",
"clip": "",
"rld": "",
"special": "Living Errata v1.1 p153"
},
{
"name": "Astartes Bolt Pistol",
"class": "Pistol - Bolt",
"damage": "Range 30m; S/2/-; 1d10+9 X; Pen 4; Clip 14; Reload 1 Full; Tearing",
"type": "Ranged Weapon",
"pen": "4",
"range": "30m",
"rof": "",
"clip": "14",
"rld": "1 Full",
"special": "Living Errata v1.1 p146"
}
],
"inventory": [
{
"name": "Astartes Frag Grenade",
"count": 3
},
{
"name": "Astartes Krak Grenade",
"count": 3
}
],
"gear": [
{
"name": "Astartes Frag Grenade",
"qty": 3
},
{
"name": "Astartes Krak Grenade",
"qty": 3
},
{
"name": "Astartes Chainsword",
"qty": 1
},
{
"name": "Astartes Power Armour",
"qty": 1
}
],
"armour": {
"body": "Astartes Power Armour",
"ap": 10,
"head": 0,
"ra": 8,
"la": 8,
"rl": 8,
"ll": 8
},
"talents": [
"Enhance Healing",
"Deathwatch Training"
],
"fate": {
"total": 2,
"current": 2
},
"wounds": {
"total": 19,
"current": 19,
"fatigue": 0
},
"movement": {
"half": 5,
"full": 10,
"charge": 15,
"halfAction": 5,
"fullAction": 10,
"run": 30
},
"renown": "Rank 1",
"powerArmour": true
},
"pw": "",
"pwHash": "",
"_id": 67,
"createdAt": "2025-08-16 09:18:29",
"updatedAt": "2025-08-16 09:18:29"
}