extra content

This commit is contained in:
Jill 2023-11-18 17:53:09 +03:00
parent 37af0ea68f
commit baa32191b4
Signed by: oat
GPG Key ID: 33489AA58A955108
3 changed files with 266 additions and 28 deletions

View File

@ -20,6 +20,34 @@ export function getStation(key: string) {
export const defaultVerb = 'Crafted';
const rollBunch = (outputs: Items[]) => {
const totalItems = outputs.reduce((a, b) => a + b.quantity, 0);
// grab from 1/3 to the entire pool, ensure it never goes below 1
const rolledItems = Math.max(Math.round(totalItems/3 + Math.random() * totalItems*2/3), 1);
const res: Items[] = [];
for (let i = 0; i < rolledItems; i++) {
const rolled = pickRandom(outputs);
const r = res.find(r => r.item.id === rolled.item.id);
if (r) {
if (r.quantity === rolled.quantity) {
// don't roll more than can be rolled
i--;
} else {
r.quantity = r.quantity + 1;
}
} else {
res.push({ item: rolled.item, quantity: 1 });
}
}
return res;
};
const formatMaybeCountable = (inputs: Items[], requirements: Items[], outputs: Items[], disableBold = false) =>
`${formatItemsArray(inputs, disableBold)} ${requirements.length > 0 ? `w/ ${formatItemsArray(requirements, disableBold)}: ` : ''}${outputs.map(i => formatItems(i.item, i.quantity, disableBold) + '?').join(' ')}`;
const formatMaybe = (inputs: Items[], requirements: Items[], outputs: Items[], disableBold = false) =>
`${formatItemsArray(inputs, disableBold)} ${requirements.length > 0 ? `w/ ${formatItemsArray(requirements, disableBold)} ` : ''}=> ${outputs.map(i => formatItem(i.item, disableBold) + '?').join(' ')}`;
export const craftingStations: CraftingStation[] = [
{
key: 'forage',
@ -28,29 +56,8 @@ export const craftingStations: CraftingStation[] = [
description: 'Pick up various sticks and stones from the forest',
emoji: '🌲',
cooldown: 60 * 5,
formatRecipe: (_inputs, requirements, outputs, disableBold = false) =>
`${requirements.length > 0 ? `w/ ${formatItemsArray(requirements, disableBold)}: ` : ''}${outputs.map(i => formatItems(i.item, i.quantity, disableBold) + '?').join(' ')}`,
manipulateResults: (outputs) => {
const totalItems = outputs.reduce((a, b) => a + b.quantity, 0);
// grab from 1/3 to the entire pool, ensure it never goes below 1
const rolledItems = Math.max(Math.round(totalItems/3 + Math.random() * totalItems*2/3), 1);
const res: Items[] = [];
for (let i = 0; i < rolledItems; i++) {
const rolled = pickRandom(outputs);
const r = res.find(r => r.item.id === rolled.item.id);
if (r) {
if (r.quantity === rolled.quantity) {
// don't roll more than can be rolled
i--;
} else {
r.quantity = r.quantity + 1;
}
} else {
res.push({ item: rolled.item, quantity: 1 });
}
}
return res;
}
formatRecipe: formatMaybeCountable,
manipulateResults: rollBunch
},
{
key: 'hand',
@ -72,9 +79,9 @@ export const craftingStations: CraftingStation[] = [
verb: 'Fished up',
description: 'fish gaming wednesday',
emoji: '🎣',
cooldown: 60 * 60 * 2,
requires: getDefaultItem(DefaultItems.FISHING_ROD),
formatRecipe: (inputs, requirements, outputs, disableBold = false) =>
`${formatItemsArray(inputs, disableBold)} => ${outputs.map(i => formatItem(i.item, disableBold) + '?').join(' ')}`,
formatRecipe: formatMaybe,
// weighted random
manipulateResults: (outputs) => {
const pool: Item[] = [];
@ -86,6 +93,26 @@ export const craftingStations: CraftingStation[] = [
return [{ item: pickRandom(pool), quantity: 1 }];
}
},
{
key: 'mining',
name: 'Mining',
verb: 'Mined',
description: 'mine diamonds',
emoji: '⛏️',
cooldown: 60 * 30,
requires: getDefaultItem(DefaultItems.MINESHAFT),
formatRecipe: formatMaybeCountable,
manipulateResults: rollBunch,
},
{
key: 'smelting',
name: 'Smelting',
verb: 'Smelt',
description: 'Smelt ores, minerals, food, whatever you please',
emoji: '🔥',
cooldown: 30,
requires: getDefaultItem(DefaultItems.FURNACE),
},
];
export async function canUseStation(user: string, station: CraftingStation) {

View File

@ -26,6 +26,17 @@ export enum DefaultItems {
EXOTIC_FISH = 14,
SHOVEL = 15,
DIRT = 16,
MINESHAFT = 17,
PICKAXE = 18,
IRON_PICKAXE = 19,
COAL = 20,
IRON_ORE = 21,
IRON_INGOT = 22,
DIAMOND = 23,
RUBY = 24,
EMERALD = 25,
FURNACE = 26,
FRIED_FISH = 27,
}
export const defaultItems: DefaultItem[] = [
@ -172,6 +183,105 @@ export const defaultItems: DefaultItem[] = [
maxStack: 64,
untradable: false,
},
{
id: -17,
name: 'Mineshaft',
description: 'A place for you to mine ores and minerals!',
emoji: '⛏️',
type: 'plain',
maxStack: 1,
untradable: true
},
{
id: -18,
name: 'Pickaxe',
description: 'Basic mining equipment',
emoji: '⛏️',
type: 'plain',
maxStack: 8,
untradable: false
},
{
id: -19,
name: 'Iron Pickaxe',
description: 'More durable and strong mining equipment',
emoji: '⚒️',
type: 'plain',
maxStack: 8,
untradable: false
},
{
id: -20,
name: 'Coal',
description: 'Fuel, NOT EDIBLE',
emoji: '◾️',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -21,
name: 'Iron Ore',
description: 'Unsmelted iron',
emoji: '◽️',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -22,
name: 'Iron Ingot',
description: 'A sturdy material',
emoji: '◻️',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -23,
name: 'Diamond',
description: 'Shiny rock!',
emoji: '💎',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -24,
name: 'Ruby',
description: 'Reference to the progarmiing......g.',
emoji: '🔻',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -25,
name: 'Emerald',
description: 'A currency in some other world',
emoji: '🟩',
type: 'plain',
maxStack: 128,
untradable: false
},
{
id: -26,
name: 'Furnace',
description: 'A smeltery for your own needs',
emoji: '🔥',
type: 'plain',
maxStack: 1,
untradable: false
},
{
id: -27,
name: 'Fried Fish',
description: 'A very nice and filling meal',
emoji: '🍱',
type: 'consumable',
maxStack: 16,
untradable: false
},
];

View File

@ -92,7 +92,7 @@ export const defaultRecipes: DefaultRecipe[] = [
},
{
id: -7,
station: 'hand',
station: 'forage',
inputs: [],
requirements: [
{ item: getDefaultItem(DefaultItems.AXE), quantity: 1 },
@ -134,9 +134,9 @@ export const defaultRecipes: DefaultRecipe[] = [
{ item: getDefaultItem(DefaultItems.SHOVEL), quantity: 1 },
],
outputs: [
{ item: getDefaultItem(DefaultItems.BAIT), quantity: 3 },
{ item: getDefaultItem(DefaultItems.BAIT), quantity: 4 },
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 1 },
{ item: getDefaultItem(DefaultItems.DIRT), quantity: 1 },
{ item: getDefaultItem(DefaultItems.DIRT), quantity: 3 },
],
},
{
@ -151,6 +151,107 @@ export const defaultRecipes: DefaultRecipe[] = [
{ item: getDefaultItem(DefaultItems.SHOVEL), quantity: 1 },
]
},
{
id: -12,
station: 'hand',
inputs: [
{ item: getDefaultItem(DefaultItems.DIRT), quantity: 4 },
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 4 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.MINESHAFT), quantity: 1 },
]
},
{
id: -13,
station: 'mining',
inputs: [
{ item: getDefaultItem(DefaultItems.PICKAXE), quantity: 1 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 10 },
{ item: getDefaultItem(DefaultItems.COAL), quantity: 5 },
{ item: getDefaultItem(DefaultItems.IRON_ORE), quantity: 5 },
]
},
{
id: -14,
station: 'mining',
inputs: [
{ item: getDefaultItem(DefaultItems.IRON_PICKAXE), quantity: 1 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 10 },
{ item: getDefaultItem(DefaultItems.COAL), quantity: 5 },
{ item: getDefaultItem(DefaultItems.IRON_ORE), quantity: 5 },
{ item: getDefaultItem(DefaultItems.DIAMOND), quantity: 1 },
{ item: getDefaultItem(DefaultItems.EMERALD), quantity: 1 },
{ item: getDefaultItem(DefaultItems.RUBY), quantity: 1 },
]
},
{
id: -15,
station: 'workbench',
inputs: [
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 4 },
{ item: getDefaultItem(DefaultItems.TWIG), quantity: 3 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.PICKAXE), quantity: 1 },
]
},
{
id: -16,
station: 'workbench',
inputs: [
{ item: getDefaultItem(DefaultItems.IRON_INGOT), quantity: 4 },
{ item: getDefaultItem(DefaultItems.TWIG), quantity: 3 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.IRON_PICKAXE), quantity: 1 },
]
},
{
id: -17,
station: 'smelting',
inputs: [
{ item: getDefaultItem(DefaultItems.IRON_ORE), quantity: 2 },
{ item: getDefaultItem(DefaultItems.COAL), quantity: 1 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.IRON_INGOT), quantity: 1 },
]
},
{
id: -18,
station: 'smelting',
inputs: [
{ item: getDefaultItem(DefaultItems.CARP), quantity: 1 },
{ item: getDefaultItem(DefaultItems.COAL), quantity: 1 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.FRIED_FISH), quantity: 1 },
]
},
{
id: -19,
station: 'workbench',
inputs: [
{ item: getDefaultItem(DefaultItems.PEBBLE), quantity: 4 },
{ item: getDefaultItem(DefaultItems.COAL), quantity: 1 },
],
requirements: [],
outputs: [
{ item: getDefaultItem(DefaultItems.FURNACE), quantity: 1 },
]
}
];
export function getDefaultRecipe(id: number): DefaultRecipe | undefined {