diff --git a/src/GeneralStore/JS/createGeneralStore.d.ts b/src/GeneralStore/JS/createGeneralStore.d.ts deleted file mode 100644 index f1c14f8e3..000000000 --- a/src/GeneralStore/JS/createGeneralStore.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { GeneralStore } from '../../../lib/general-store/_common' - -interface Setup { - createGeneralStore(town: Town, opts?: Partial): GeneralStore -} - -interface Options { - newBuilding(town: Town, type?: string): Building - npc: Partial -} diff --git a/src/GeneralStore/JS/createGeneralStore.js b/src/GeneralStore/JS/createGeneralStore.ts similarity index 55% rename from src/GeneralStore/JS/createGeneralStore.js rename to src/GeneralStore/JS/createGeneralStore.ts index 8c3e11d28..b65525500 100644 --- a/src/GeneralStore/JS/createGeneralStore.js +++ b/src/GeneralStore/JS/createGeneralStore.ts @@ -1,6 +1,15 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { articles, Building, createBuildingRelationship, createStructure, defineRollDataGetter, generalStoreModifiers, NPC, Town } from '@lib' + +interface Options { + newBuilding?(town: Town, type?: string): Building + npc?: Partial +} + // uses setup.createNPC, setup.createGeneralStoreName -setup.createGeneralStore = (town, opts = {}) => { - const createBuilding = opts.newBuilding || lib.createBuilding +export const createGeneralStore = (town: Town, opts: Options = {}) => { + const createBuilding = opts.newBuilding || createBuilding + // @ts-ignore const createShopkeep = opts.newShopkeep || setup.createNPC const generalStore = createBuilding(town, 'generalStore') @@ -11,27 +20,27 @@ setup.createGeneralStore = (town, opts = {}) => { greeting: ['nods at you', 'welcomes you warmly', 'smiles and greets you', 'raises a hand with a wave', 'checks you out for just a moment before smiling at you'], owner: ['owner', 'caretaker', 'proud owner', 'proprietor', 'current owner', 'manager', 'assistant manager', 'acting manager'].random() }, opts.npc)) - lib.createBuildingRelationship(town, generalStore, generalStore.associatedNPC, { relationship: 'owner', reciprocalRelationship: 'business' }) + createBuildingRelationship(town, generalStore, generalStore.associatedNPC, { relationship: 'owner', reciprocalRelationship: 'business' }) Object.assign(generalStore, { - note: lib.generalStore.get.note(generalStore), - shopkeepNote: lib.generalStore.get.shopkeepNote(generalStore), - say: lib.generalStore.get.say(generalStore), + note: generalStore.get.note(generalStore), + shopkeepNote: generalStore.get.shopkeepNote(generalStore), + say: generalStore.get.say(generalStore), wordNoun: ['general store', 'shop'].random(), - crud: lib.generalStore.crud.random(), - idle: lib.generalStore.idle.random(), + crud: generalStore.crud.random(), + idle: generalStore.idle.random(), notableFeature: 'wide range of goods on sale', passageName: 'generalStoreOutput', initPassage: 'InitgeneralStore', buildingType: 'generalStore' }) - lib.createStructure(town, generalStore) - generalStore.structure.descriptor = `${lib.articles.output(generalStore.structure.material.wealth)} ${generalStore.structure.material.noun} ${generalStore.wordNoun} with ${lib.articles.output(generalStore.structure.roof.verb)} roof` + createStructure(town, generalStore) + generalStore.structure.descriptor = `${articles.output(generalStore.structure.material.wealth)} ${generalStore.structure.material.noun} ${generalStore.wordNoun} with ${articles.output(generalStore.structure.roof.verb)} roof` setup.createGeneralStoreName(town, generalStore) - lib.generalStoreModifiers(town, generalStore) + generalStoreModifiers(town, generalStore) const props = ['wealth', 'cleanliness', 'size', 'expertise'] for (const propName of props) { - lib.defineRollDataGetter(generalStore, lib.generalStore.rollData[propName].rolls, propName) + defineRollDataGetter(generalStore, generalStore.rollData[propName].rolls, propName) } if (generalStore.roll.cleanliness <= 40) { @@ -41,7 +50,7 @@ setup.createGeneralStore = (town, opts = {}) => { `In one corner of the store there is a large pile of ${generalStore.crud}.`, `Several bins seemed to be cluttered with ${generalStore.crud}.`].random() } - // lib.generalStoreRenders(generalStore) + // generalStoreRenders(generalStore) console.log(generalStore) console.groupEnd() return generalStore diff --git a/src/GeneralStore/JS/createGeneralStoreName.d.ts b/src/GeneralStore/JS/createGeneralStoreName.d.ts deleted file mode 100644 index f8b99f14d..000000000 --- a/src/GeneralStore/JS/createGeneralStoreName.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface Setup { - createGeneralStoreName(town: Town, generalStore?: Partial): string -} diff --git a/src/GeneralStore/JS/createGeneralStoreName.js b/src/GeneralStore/JS/createGeneralStoreName.ts similarity index 80% rename from src/GeneralStore/JS/createGeneralStoreName.js rename to src/GeneralStore/JS/createGeneralStoreName.ts index 566b94807..15987aa5e 100644 --- a/src/GeneralStore/JS/createGeneralStoreName.js +++ b/src/GeneralStore/JS/createGeneralStoreName.ts @@ -1,8 +1,12 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { GeneralStore, toTitleCase, Town } from '@lib' +import { random } from '../../../lib/src/random' + // uses setup.createNPC -setup.createGeneralStoreName = (town, generalStore) => { +export const createGeneralStoreName = (town: Town, generalStore: GeneralStore) => { const adjective = ['Dependable', 'Reliable', 'Expendable', 'Indispensible', 'Incomparable', 'Incredible', 'Excellent', 'Important', 'Cheap', 'Affordable', 'Affable', 'Discount', 'Low-Cost', 'Fancy'].random() const noun = ['Mount', 'Saddle', 'Guild', 'Fangs', 'Man', 'Pardon', 'Pleasure', 'Belt', 'Staff', 'Shield', 'Prince', 'Master', 'Servant', 'Meal', 'Prince', 'Favor', 'Love', 'Word', 'Scribe', 'Apprentice', 'Acolyte', 'Dress', 'Goddess', 'God', 'Gold', 'Purse', 'Trap', 'King', 'Son', 'Sister', 'Mother', 'Daughter', 'Cry', 'Shout', 'Cupboard', 'Pantry', 'Queen', 'Wealth', 'Star', 'Void', 'Woman', 'Man', 'Whore', 'Butcher', 'Anvil', 'Tome', 'Sacrifice', 'Armor', 'Cup', 'Pot', 'Stove', 'Stool', 'Princess', 'Chain', 'Sword', 'Pork', 'Grain', 'Tooth', 'Lance', 'Axe', 'Scabbard', 'Knife', 'Dagger', 'Spear', 'Bow', 'Crossbow', 'Quarterstaff', 'Staff', 'Fire', 'Ice', 'Wind', 'Earth', 'Water', 'Stone', 'Ladle', 'Monastery', 'Chalice', 'Goblet', 'Dungeon', 'Lust', 'Lantern', 'Bone', 'Life', 'Stone', 'Mistress', 'Mind', 'Treasure', 'Barter', 'Armorer', 'Butler', 'Page', 'Tome', 'Feather', 'Shadow', 'Friend', 'Labyrinth', 'Mountain', 'Hope', 'Boot', 'Gauntlet'].random() - const family = ['son', 'daughter', 'brother', 'sister', 'uncle', 'aunt', 'father', 'friend', 'family', 'employee'].random() + const family = random(['son', 'daughter', 'brother', 'sister', 'uncle', 'aunt', 'father', 'friend', 'family', 'employee']) const rider = ['Shop', 'Bazaar', 'Convenience Store', 'Trading Post', 'Warehouse', 'Antiquerie', 'Adventure Supplier', 'Supplier', 'Goods', 'Goods and Bads', 'Stock Shop', 'Wares'].random() const professions = ['shopkeep', "shopkeep's assistant", "shopkeep's assistant", "shopkeep's assistant"] @@ -112,33 +116,39 @@ setup.createGeneralStoreName = (town, generalStore) => { switch (roll) { case 1: - generalStore.name = lib.toTitleCase(`The ${adjective} ${noun}`) + generalStore.name = toTitleCase(`The ${adjective} ${noun}`) break case 2: - generalStore.name = lib.toTitleCase(`${associatedNPC.firstName}'s ${adjective} ${rider}`) + generalStore.name = toTitleCase(`${associatedNPC.firstName}'s ${adjective} ${rider}`) break case 3: - generalStore.name = lib.toTitleCase(associatedNPC.firstName + ["'s General Goods", "'s Bric-a-Brac", "'s Trading Goods", "'s Shopping Place", `'s ${rider}`].random()) + generalStore.name = toTitleCase(associatedNPC.firstName + ["'s General Goods", "'s Bric-a-Brac", "'s Trading Goods", "'s Shopping Place", `'s ${rider}`].random()) break case 4: - generalStore.name = lib.toTitleCase(`The ${adjective} ${rider}`) + generalStore.name = toTitleCase(`The ${adjective} ${rider}`) break case 5: - generalStore.name = lib.toTitleCase(`The ${adjective} ${noun}`) + generalStore.name = toTitleCase(`The ${adjective} ${noun}`) break case 6: - generalStore.name = lib.toTitleCase(`The ${noun} and ${family.toUpperFirst()}`) + generalStore.name = toTitleCase(`The ${noun} and ${family.toUpperFirst()}`) + // @ts-ignore generalStore.assistant = setup.createNPC(town, fam[family]) + // @ts-ignore setup.createRelationship(town, associatedNPC, generalStore.assistant, family, + // @ts-ignore town.npcRelations[generalStore.assistant.key].filter(r => r.targetNpcKey === associatedNPC.key)[0]?.relation) break case 7: - generalStore.name = lib.toTitleCase(`${associatedNPC.firstName} and ${family.toUpperFirst()}`) + generalStore.name = toTitleCase(`${associatedNPC.firstName} and ${family.toUpperFirst()}`) + // @ts-ignore generalStore.assistant = setup.createNPC(town, fam[family]) + // @ts-ignore setup.createRelationship(town, associatedNPC, generalStore.assistant, family, + // @ts-ignore town.npcRelations[generalStore.assistant.key].filter(r => r.targetNpcKey === associatedNPC.key)[0]?.relation) break default: - generalStore.name = lib.toTitleCase(`The ${adjective} Adventurer's Store`) + generalStore.name = toTitleCase(`The ${adjective} Adventurer's Store`) } } diff --git a/src/main.ts b/src/main.ts index 6d7a81dbf..b1b6e3f23 100644 --- a/src/main.ts +++ b/src/main.ts @@ -32,6 +32,8 @@ import { deleteNPC, deleteThrowawayNPCs } from './NPCGeneration/deleteNPC' import { getLifeEvents } from './NPCGeneration/getLifeEvents' import { graveStone } from './World/graveStone' import { urlSeed } from './World/urlSeed' +import { createGeneralStore } from './GeneralStore/JS/createGeneralStore' +import { createGeneralStoreName } from './GeneralStore/JS/createGeneralStoreName' declare global { interface Setup { @@ -73,6 +75,8 @@ declare global { getPriceMod: typeof getPriceMod graveStone: typeof graveStone urlSeed: typeof urlSeed + createGeneralStore: typeof createGeneralStore + createGeneralStoreName: typeof createGeneralStoreName } } @@ -113,7 +117,9 @@ Object.assign(setup, { deleteThrowawayNPCs, getLifeEvents, graveStone, - urlSeed + urlSeed, + createGeneralStore, + createGeneralStoreName }) /**