@@ -0,0 +1,368 @@
use crate ::prelude ::* ;
use super ::* ;
impl Dashboard {
pub fn mock ( ) -> Self {
Dashboard {
campaign : " В Поисках Дмитрия Шардалина " . to_owned ( ) ,
date : NaiveDate ::from_ymd ( 1488 , 3 , 19 ) ,
player : PlayerData {
name : " Ней Гигга Визард " . to_owned ( ) ,
image : String ::new ( ) ,
level : 8 ,
xp : 3231 ,
temp_hp : 12 ,
hp : 1 ,
max_hp : 61 ,
balance : Balance { platinum : 12 , gold : 200 , electrum : 1 , silver : 101 , copper : 129021021 } ,
spell_slots : SpellSlots ( core ::array ::from_fn ( | i | SpellSlotLevel { used : 1 , total : 9 - i as u8 } ) ) ,
attunements : Attunements ( [ const { None } ; 3 ] ) ,
hit_dice : HitDice { used : 1 , total : 7 } ,
death_save_throws : DeathSaveThrows { failed : 1 , succeeded : 3 } ,
prepared : PreparedSpells ( vec! [ Spell { name : " Fire Bolt " . to_owned ( ) } ] ) ,
inventory : generate_mock_inventory ( ) ,
} ,
common : CommonData {
balance : Balance { platinum : 1312 , gold : 3211200 , electrum : 231 , silver : 1 , copper : 21021 } ,
inventory : generate_mock_inventory ( ) ,
} ,
quest_book : QuestBook (
vec! [
Quest { title : " Slay the Bandit Chief " . to_string ( ) , location_taken : Some ( " Waterdeep " . to_string ( ) ) , location_task : Some ( " Phandalin " . to_string ( ) ) , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 4 , 15 ) . unwrap ( ) ) , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 5 , 15 ) . unwrap ( ) ) , description : Some ( " Kill the bandit leader. " . to_string ( ) ) , from : Some ( " Lord Neverember " . to_string ( ) ) , reward : Some ( Balance { platinum : 0 , gold : 100 , electrum : 0 , silver : 0 , copper : 0 } ) } ,
Quest { title : " Find the Lost Artifact " . to_string ( ) , location_taken : Some ( " Baldur's Gate " . to_string ( ) ) , location_task : None , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 6 , 1 ) . unwrap ( ) ) , date_by : None , description : Some ( " Seek a relic in ruins. " . to_string ( ) ) , from : Some ( " Elminster " . to_string ( ) ) , reward : Some ( Balance { platinum : 10 , gold : 50 , electrum : 0 , silver : 0 , copper : 0 } ) } ,
Quest { title : " Escort the Caravan " . to_string ( ) , location_taken : Some ( " Neverwinter " . to_string ( ) ) , location_task : Some ( " Luskan " . to_string ( ) ) , date_taken : None , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 7 , 30 ) . unwrap ( ) ) , description : Some ( " Protect traders. " . to_string ( ) ) , from : None , reward : Some ( Balance { platinum : 0 , gold : 20 , electrum : 0 , silver : 50 , copper : 0 } ) } ,
Quest { title : " Clear the Goblin Den " . to_string ( ) , location_taken : Some ( " Daggerford " . to_string ( ) ) , location_task : Some ( " Cragmaw Hideout " . to_string ( ) ) , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 3 , 10 ) . unwrap ( ) ) , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 4 , 10 ) . unwrap ( ) ) , description : None , from : Some ( " Local Militia " . to_string ( ) ) , reward : Some ( Balance { platinum : 0 , gold : 30 , electrum : 0 , silver : 0 , copper : 100 } ) } ,
Quest { title : " Rescue the Noble " . to_string ( ) , location_taken : None , location_task : Some ( " Underdark " . to_string ( ) ) , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 5 , 20 ) . unwrap ( ) ) , date_by : None , description : Some ( " Save a kidnapped noble. " . to_string ( ) ) , from : Some ( " Silverhand Family " . to_string ( ) ) , reward : Some ( Balance { platinum : 5 , gold : 200 , electrum : 0 , silver : 0 , copper : 0 } ) } ,
Quest { title : " Steal the Zhentarim Plans " . to_string ( ) , location_taken : Some ( " Zhentil Keep " . to_string ( ) ) , location_task : Some ( " Zhentil Keep " . to_string ( ) ) , date_taken : None , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 8 , 15 ) . unwrap ( ) ) , description : None , from : Some ( " Harpers " . to_string ( ) ) , reward : Some ( Balance { platinum : 0 , gold : 75 , electrum : 0 , silver : 0 , copper : 0 } ) } ,
Quest { title : " Hunt the Dire Wolf " . to_string ( ) , location_taken : Some ( " Silverymoon " . to_string ( ) ) , location_task : Some ( " Evermoors " . to_string ( ) ) , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 2 , 5 ) . unwrap ( ) ) , date_by : None , description : Some ( " Track and kill a beast. " . to_string ( ) ) , from : None , reward : Some ( Balance { platinum : 0 , gold : 15 , electrum : 0 , silver : 20 , copper : 50 } ) } ,
Quest { title : " Recover the Spellbook " . to_string ( ) , location_taken : Some ( " Candlekeep " . to_string ( ) ) , location_task : None , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 1 , 10 ) . unwrap ( ) ) , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 2 , 10 ) . unwrap ( ) ) , description : Some ( " Find a stolen tome. " . to_string ( ) ) , from : Some ( " Candlekeep Scholars " . to_string ( ) ) , reward : None } ,
Quest { title : " Guard the Temple " . to_string ( ) , location_taken : Some ( " Suzail " . to_string ( ) ) , location_task : Some ( " Temple of Lathander " . to_string ( ) ) , date_taken : None , date_by : None , description : Some ( " Protect the shrine. " . to_string ( ) ) , from : Some ( " Clerics of Lathander " . to_string ( ) ) , reward : Some ( Balance { platinum : 0 , gold : 50 , electrum : 0 , silver : 0 , copper : 0 } ) } ,
Quest { title : " Explore the Ruins " . to_string ( ) , location_taken : Some ( " Cormyr " . to_string ( ) ) , location_task : Some ( " Netherese Ruins " . to_string ( ) ) , date_taken : Some ( NaiveDate ::from_ymd_opt ( 1481 , 9 , 1 ) . unwrap ( ) ) , date_by : Some ( NaiveDate ::from_ymd_opt ( 1481 , 10 , 1 ) . unwrap ( ) ) , description : None , from : None , reward : None } ,
] ) ,
notes : NoteBook (
vec! [
Note ( " Met Elminster in Waterdeep; he hinted at a Netherese ruin nearby. " . to_string ( ) ) ,
Note ( " Avoid Zhentarim agents in Baldur's Gate; they're watching the tavern. " . to_string ( ) ) ,
Note ( " Phandalin: Redbrand thugs extorting locals, hideout in manor basement. " . to_string ( ) ) ,
Note ( " Neverwinter's Lord Neverember offering 100gp for bandit leader's head. " . to_string ( ) ) ,
Note ( " Found a strange rune in Underdark; ask Candlekeep scholars about it. " . to_string ( ) ) ,
Note ( " Luskan pirates smuggling in the docks; check crates for clues. " . to_string ( ) ) ,
Note ( " Silverymoon's wards flicker at midnight; possible arcane sabotage? " . to_string ( ) ) ,
Note ( " Daggerford militia needs help with goblin raids from Cragmaw. " . to_string ( ) ) ,
Note ( " Temple of Lathander in Suzail requests guards for festival. " . to_string ( ) ) ,
Note ( " Heard rumors of a dragon in Evermoors; prepare fire resistance. " . to_string ( ) ) ,
Note ( " Harpers want Zhentarim plans stolen from Zhentil Keep by next tenday. " . to_string ( ) ) ,
Note ( " Keep an eye on that shady merchant in Cormyr; might be a doppelganger. " . to_string ( ) ) ,
] ) ,
people : generate_mock_contact_book ( ) ,
}
}
}
fn generate_mock_inventory ( ) -> Inventory {
let items = vec! [
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Vorpal Sword " . to_string ( ) ,
weight : Some ( 4.0 ) ,
description : Some ( " A blade that severs heads with a single swing. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " weapon " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " legendary " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 3 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Potion of Healing " . to_string ( ) ,
weight : Some ( 0.5 ) ,
description : Some ( " A vial of red liquid that restores vitality. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " potion " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " common " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Cloak of Elvenkind " . to_string ( ) ,
weight : Some ( 1.0 ) ,
description : Some ( " A cloak that blends into shadows. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " uncommon " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 2 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Bag of Holding " . to_string ( ) ,
weight : Some ( 15.0 ) ,
description : Some ( " A small bag with vast internal space. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " uncommon " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Mithril Chainmail " . to_string ( ) ,
weight : Some ( 20.0 ) ,
description : Some ( " Lightweight armor that gleams like silver. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " armor " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Wand of Fireballs " . to_string ( ) ,
weight : Some ( 0.2 ) ,
description : Some ( " A wand that unleashes fiery explosions. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wand " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Ring of Invisibility " . to_string ( ) ,
weight : Some ( 0.1 ) ,
description : Some ( " Grants the wearer invisibility. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " ring " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " legendary " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 2 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Boots of Speed " . to_string ( ) ,
weight : Some ( 1.5 ) ,
description : Some ( " Boots that enhance the wearer's speed. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Dagger of Venom " . to_string ( ) ,
weight : Some ( 1.0 ) ,
description : Some ( " A dagger coated with deadly poison. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " weapon " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Staff of Power " . to_string ( ) ,
weight : Some ( 5.0 ) ,
description : Some ( " A staff pulsing with arcane might. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " staff " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " very rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 4 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Torch " . to_string ( ) ,
weight : Some ( 1.0 ) ,
description : Some ( " A simple torch for illumination. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " tool " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " common " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Amulet of Health " . to_string ( ) ,
weight : Some ( 0.3 ) ,
description : Some ( " Boosts the wearer's vitality. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Flame Tongue " . to_string ( ) ,
weight : Some ( 3.0 ) ,
description : Some ( " A sword that ignites on command. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " weapon " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 5 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Arrow of Slaying " . to_string ( ) ,
weight : Some ( 0.1 ) ,
description : Some ( " An arrow designed to kill a specific foe. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " ammunition " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " very rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Cloak of Displacement " . to_string ( ) ,
weight : Some ( 1.0 ) ,
description : Some ( " Makes the wearer hard to hit. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Helm of Teleportation " . to_string ( ) ,
weight : Some ( 3.0 ) ,
description : Some ( " Allows teleportation to known locations. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Crystal Ball " . to_string ( ) ,
weight : Some ( 7.0 ) ,
description : Some ( " A magical orb for scrying. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " very rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Gauntlets of Ogre Power " . to_string ( ) ,
weight : Some ( 2.0 ) ,
description : Some ( " Grants the strength of an ogre. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " uncommon " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Robe of the Archmagi " . to_string ( ) ,
weight : Some ( 1.0 ) ,
description : Some ( " Enhances a wizard's spellcasting. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " legendary " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
InventoryEntry {
quantity : 1 ,
item : InventoryItem ::Custom ( CustomInventoryItem {
name : " Horn of Blasting " . to_string ( ) ,
weight : Some ( 2.0 ) ,
description : Some ( " Emits a destructive sonic blast. " . to_string ( ) ) ,
tags : HashMap ::from ( [
( " type " . to_string ( ) , " wondrous " . to_string ( ) ) ,
( " rarity " . to_string ( ) , " rare " . to_string ( ) ) ,
] ) ,
} ) ,
} ,
] ;
Inventory ( items )
}
fn generate_mock_contact_book ( ) -> ContactBook {
let mut contacts = HashMap ::new ( ) ;
// 40 Characters Met by Party (80%)
contacts . insert ( " Elminster " . to_string ( ) , Contact { name : " Elminster " . to_string ( ) , image : None , alias : Some ( " The Sage of Shadowdale " . to_string ( ) ) , status : Some ( ContactStatus ::Alive ) , location : Some ( " Shadowdale " . to_string ( ) ) , notes : Some ( " Wise but cryptic wizard. " . to_string ( ) ) } ) ;
contacts . insert ( " Drizzt Do'Urden " . to_string ( ) , Contact { name : " Drizzt Do'Urden " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Icewind Dale " . to_string ( ) ) , notes : Some ( " Renegade drow ranger. " . to_string ( ) ) } ) ;
contacts . insert ( " Lord Neverember " . to_string ( ) , Contact { name : " Lord Neverember " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Neverwinter " . to_string ( ) ) , notes : Some ( " Ruler seeking bandit leader. " . to_string ( ) ) } ) ;
contacts . insert ( " Minsc " . to_string ( ) , Contact { name : " Minsc " . to_string ( ) , image : None , alias : Some ( " Rascal of Rashemen " . to_string ( ) ) , status : Some ( ContactStatus ::Alive ) , location : Some ( " Baldur's Gate " . to_string ( ) ) , notes : Some ( " Loud warrior with hamster. " . to_string ( ) ) } ) ;
contacts . insert ( " Jarlaxle " . to_string ( ) , Contact { name : " Jarlaxle " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Luskan " . to_string ( ) ) , notes : Some ( " Sly drow mercenary leader. " . to_string ( ) ) } ) ;
contacts . insert ( " Volo " . to_string ( ) , Contact { name : " Volo " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Exaggerates his travel tales. " . to_string ( ) ) } ) ;
contacts . insert ( " Laeral Silverhand " . to_string ( ) , Contact { name : " Laeral Silverhand " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Open Lord, powerful mage. " . to_string ( ) ) } ) ;
contacts . insert ( " Hammond Ardeep " . to_string ( ) , Contact { name : " Hammond Ardeep " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Daggerford " . to_string ( ) ) , notes : Some ( " Militia leader vs. goblins. " . to_string ( ) ) } ) ;
contacts . insert ( " Sister Garaele " . to_string ( ) , Contact { name : " Sister Garaele " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Harper agent in temple. " . to_string ( ) ) } ) ;
contacts . insert ( " Gundren Rockseeker " . to_string ( ) , Contact { name : " Gundren Rockseeker " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Dwarf seeking lost mine. " . to_string ( ) ) } ) ;
contacts . insert ( " Sildar Hallwinter " . to_string ( ) , Contact { name : " Sildar Hallwinter " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Lord's Alliance knight. " . to_string ( ) ) } ) ;
contacts . insert ( " Qelline Alderleaf " . to_string ( ) , Contact { name : " Qelline Alderleaf " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Halfling farmer, kind. " . to_string ( ) ) } ) ;
contacts . insert ( " Toblen Stonehill " . to_string ( ) , Contact { name : " Toblen Stonehill " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Innkeeper, knows rumors. " . to_string ( ) ) } ) ;
contacts . insert ( " Darathra Shendrel " . to_string ( ) , Contact { name : " Darathra Shendrel " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Triboar " . to_string ( ) ) , notes : Some ( " Lord Protector, fair. " . to_string ( ) ) } ) ;
contacts . insert ( " Ziraj the Hunter " . to_string ( ) , Contact { name : " Ziraj the Hunter " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Neverwinter Wood " . to_string ( ) ) , notes : Some ( " Tracks orcs. " . to_string ( ) ) } ) ;
contacts . insert ( " Eldrin Thalindra " . to_string ( ) , Contact { name : " Eldrin Thalindra " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Silverymoon " . to_string ( ) ) , notes : Some ( " Arcane ward keeper. " . to_string ( ) ) } ) ;
contacts . insert ( " Randal Morn " . to_string ( ) , Contact { name : " Randal Morn " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Daggerdale " . to_string ( ) ) , notes : Some ( " Fights Zhentarim. " . to_string ( ) ) } ) ;
contacts . insert ( " Khelben Blackstaff " . to_string ( ) , Contact { name : " Khelben Blackstaff " . to_string ( ) , image : None , alias : Some ( " The Blackstaff " . to_string ( ) ) , status : Some ( ContactStatus ::Dead ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Former archmage, deceased. " . to_string ( ) ) } ) ;
contacts . insert ( " Mirt the Moneylender " . to_string ( ) , Contact { name : " Mirt the Moneylender " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Harper ally, wealthy. " . to_string ( ) ) } ) ;
contacts . insert ( " Durnan " . to_string ( ) , Contact { name : " Durnan " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Yawning Portal owner. " . to_string ( ) ) } ) ;
contacts . insert ( " Fzoul Chembryl " . to_string ( ) , Contact { name : " Fzoul Chembryl " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Dead ) , location : Some ( " Zhentil Keep " . to_string ( ) ) , notes : Some ( " Former Zhentarim leader. " . to_string ( ) ) } ) ;
contacts . insert ( " Bruenor Battlehammer " . to_string ( ) , Contact { name : " Bruenor Battlehammer " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Mithral Hall " . to_string ( ) ) , notes : Some ( " Dwarf king, ally. " . to_string ( ) ) } ) ;
contacts . insert ( " Catti-brie " . to_string ( ) , Contact { name : " Catti-brie " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Mithral Hall " . to_string ( ) ) , notes : Some ( " Skilled archer. " . to_string ( ) ) } ) ;
contacts . insert ( " Regis " . to_string ( ) , Contact { name : " Regis " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Icewind Dale " . to_string ( ) ) , notes : Some ( " Halfling, sneaky. " . to_string ( ) ) } ) ;
contacts . insert ( " Artemis Entreri " . to_string ( ) , Contact { name : " Artemis Entreri " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Calimport " . to_string ( ) ) , notes : Some ( " Dangerous assassin. " . to_string ( ) ) } ) ;
contacts . insert ( " Storm Silverhand " . to_string ( ) , Contact { name : " Storm Silverhand " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Shadowdale " . to_string ( ) ) , notes : Some ( " Bard and Chosen. " . to_string ( ) ) } ) ;
contacts . insert ( " Halia Thornton " . to_string ( ) , Contact { name : " Halia Thornton " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Zhentarim agent, subtle. " . to_string ( ) ) } ) ;
contacts . insert ( " Darlia Greystone " . to_string ( ) , Contact { name : " Darlia Greystone " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Triboar " . to_string ( ) ) , notes : Some ( " Blacksmith, reliable. " . to_string ( ) ) } ) ;
contacts . insert ( " Eldric Varn " . to_string ( ) , Contact { name : " Eldric Varn " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Luskan " . to_string ( ) ) , notes : Some ( " Ship captain, shady. " . to_string ( ) ) } ) ;
contacts . insert ( " Tymora’ s Priest " . to_string ( ) , Contact { name : " Tymora’ s Priest " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Suzail " . to_string ( ) ) , notes : Some ( " Blesses adventurers. " . to_string ( ) ) } ) ;
contacts . insert ( " Redbrand Leader " . to_string ( ) , Contact { name : " Redbrand Leader " . to_string ( ) , image : None , alias : Some ( " Glasstaff " . to_string ( ) ) , status : Some ( ContactStatus ::Alive ) , location : Some ( " Phandalin " . to_string ( ) ) , notes : Some ( " Runs thug gang. " . to_string ( ) ) } ) ;
contacts . insert ( " Brynna of Lathander " . to_string ( ) , Contact { name : " Brynna of Lathander " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Suzail " . to_string ( ) ) , notes : Some ( " Temple cleric. " . to_string ( ) ) } ) ;
contacts . insert ( " Korgul the Tumbler " . to_string ( ) , Contact { name : " Korgul the Tumbler " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Baldur's Gate " . to_string ( ) ) , notes : Some ( " Thieves’ guild contact. " . to_string ( ) ) } ) ;
contacts . insert ( " Tharivol the Mage " . to_string ( ) , Contact { name : " Tharivol the Mage " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Silverymoon " . to_string ( ) ) , notes : Some ( " Studies arcane wards. " . to_string ( ) ) } ) ;
contacts . insert ( " Gorlag the Orc " . to_string ( ) , Contact { name : " Gorlag the Orc " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Dead ) , location : Some ( " Neverwinter Wood " . to_string ( ) ) , notes : Some ( " Slain orc chieftain. " . to_string ( ) ) } ) ;
contacts . insert ( " Lhara the Merchant " . to_string ( ) , Contact { name : " Lhara the Merchant " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Cormyr " . to_string ( ) ) , notes : Some ( " Sells rare goods. " . to_string ( ) ) } ) ;
contacts . insert ( " Ebon the Rogue " . to_string ( ) , Contact { name : " Ebon the Rogue " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Zhentil Keep " . to_string ( ) ) , notes : Some ( " Sneaky informant. " . to_string ( ) ) } ) ;
contacts . insert ( " Father Llymic " . to_string ( ) , Contact { name : " Father Llymic " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Dead ) , location : Some ( " Icewind Dale " . to_string ( ) ) , notes : Some ( " Evil priest, defeated. " . to_string ( ) ) } ) ;
contacts . insert ( " Sylvara the Druid " . to_string ( ) , Contact { name : " Sylvara the Druid " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " High Forest " . to_string ( ) ) , notes : Some ( " Protects the woods. " . to_string ( ) ) } ) ;
contacts . insert ( " Raul the Barkeep " . to_string ( ) , Contact { name : " Raul the Barkeep " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Daggerford " . to_string ( ) ) , notes : Some ( " Hears local gossip. " . to_string ( ) ) } ) ;
// 5 Contacts (10%)
contacts . insert ( " Valthor the Fence " . to_string ( ) , Contact { name : " Valthor the Fence " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Baldur's Gate " . to_string ( ) ) , notes : Some ( " Buys stolen goods. " . to_string ( ) ) } ) ;
contacts . insert ( " Zyra the Alchemist " . to_string ( ) , Contact { name : " Zyra the Alchemist " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Waterdeep " . to_string ( ) ) , notes : Some ( " Sells potions. " . to_string ( ) ) } ) ;
contacts . insert ( " Kren the Smuggler " . to_string ( ) , Contact { name : " Kren the Smuggler " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Luskan " . to_string ( ) ) , notes : Some ( " Moves contraband. " . to_string ( ) ) } ) ;
contacts . insert ( " Mira the Scribe " . to_string ( ) , Contact { name : " Mira the Scribe " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Candlekeep " . to_string ( ) ) , notes : Some ( " Deciphers texts. " . to_string ( ) ) } ) ;
contacts . insert ( " Thok the Armorer " . to_string ( ) , Contact { name : " Thok the Armorer " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : Some ( " Neverwinter " . to_string ( ) ) , notes : Some ( " Crafts fine armor. " . to_string ( ) ) } ) ;
// 3 Present-Day Legends (6%)
contacts . insert ( " Tiamat " . to_string ( ) , Contact { name : " Tiamat " . to_string ( ) , image : None , alias : Some ( " The Dragon Queen " . to_string ( ) ) , status : Some ( ContactStatus ::Alive ) , location : None , notes : Some ( " Evil dragon goddess. " . to_string ( ) ) } ) ;
contacts . insert ( " Vecna " . to_string ( ) , Contact { name : " Vecna " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::Alive ) , location : None , notes : Some ( " Lich god of secrets. " . to_string ( ) ) } ) ;
contacts . insert ( " Claugiyliamatar " . to_string ( ) , Contact { name : " Claugiyliamatar " . to_string ( ) , image : None , alias : Some ( " Old Gnawbone " . to_string ( ) ) , status : Some ( ContactStatus ::Alive ) , location : Some ( " Kryptgarden Forest " . to_string ( ) ) , notes : Some ( " Ancient green dragon. " . to_string ( ) ) } ) ;
// 2 Past Legends (4%, DeadBygone)
contacts . insert ( " Manshoon " . to_string ( ) , Contact { name : " Manshoon " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::DeadBygone ) , location : Some ( " Zhentil Keep " . to_string ( ) ) , notes : Some ( " Zhentarim founder, long dead. " . to_string ( ) ) } ) ;
contacts . insert ( " Netherese Archwizard " . to_string ( ) , Contact { name : " Netherese Archwizard " . to_string ( ) , image : None , alias : None , status : Some ( ContactStatus ::DeadBygone ) , location : None , notes : Some ( " Ancient mage of lost empire. " . to_string ( ) ) } ) ;
ContactBook ( contacts )
}