Add furnishing list page
|
@ -104,13 +104,14 @@
|
||||||
{mobile}
|
{mobile}
|
||||||
{segment}
|
{segment}
|
||||||
on:clicked={close}
|
on:clicked={close}
|
||||||
active={segment === 'items' || segment === 'achievement' || segment === 'reminder'}
|
active={['items', 'achievement', 'reminder', 'furnishing'].includes(segment)}
|
||||||
image="/images/items.png"
|
image="/images/items.png"
|
||||||
label={$t('sidebar.database')}
|
label={$t('sidebar.database')}
|
||||||
items={[
|
items={[
|
||||||
{ label: $t('sidebar.items'), href: '/items' },
|
{ label: $t('sidebar.items'), href: '/items' },
|
||||||
{ label: $t('sidebar.achievement'), href: '/achievement' },
|
{ label: $t('sidebar.achievement'), href: '/achievement' },
|
||||||
{ label: $t('sidebar.reminder'), href: '/reminder' },
|
{ label: $t('sidebar.reminder'), href: '/reminder' },
|
||||||
|
{ label: $t('sidebar.furnishing'), href: '/furnishing' },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
|
|
1
src/data/furnishing/en.json
Normal file
1
src/data/furnishing/id.json
Normal file
1
src/data/furnishing/ko.json
Normal file
1
src/data/furnishing/ru.json
Normal file
|
@ -10,6 +10,7 @@
|
||||||
"reminder": "Reminder",
|
"reminder": "Reminder",
|
||||||
"todoList": "Todo List",
|
"todoList": "Todo List",
|
||||||
"timeline": "Timeline",
|
"timeline": "Timeline",
|
||||||
|
"furnishing": "Furnishing",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"donate": "Donate"
|
"donate": "Donate"
|
||||||
},
|
},
|
||||||
|
@ -580,5 +581,19 @@
|
||||||
"achievement": {
|
"achievement": {
|
||||||
"title": "Achievement",
|
"title": "Achievement",
|
||||||
"of": "of"
|
"of": "of"
|
||||||
|
},
|
||||||
|
"furnishing": {
|
||||||
|
"title": "Furnishing",
|
||||||
|
"name": "Name",
|
||||||
|
"energy": "Energy",
|
||||||
|
"load": "Load",
|
||||||
|
"ratio": "Ratio",
|
||||||
|
"using": "Amount",
|
||||||
|
"interior": "Interior",
|
||||||
|
"exterior": "Exterior",
|
||||||
|
"info": [
|
||||||
|
"This shows how much load the area can take. Each furniture has a hidden load value that can be viewed below.",
|
||||||
|
"(the maximum value is not comfirmed yet!)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -10,6 +10,7 @@
|
||||||
"reminder": "Reminder",
|
"reminder": "Reminder",
|
||||||
"todoList": "Todo List",
|
"todoList": "Todo List",
|
||||||
"timeline": "Timeline",
|
"timeline": "Timeline",
|
||||||
|
"furnishing": "Furnitur",
|
||||||
"settings": "Pengaturan",
|
"settings": "Pengaturan",
|
||||||
"donate": "Donasi"
|
"donate": "Donasi"
|
||||||
},
|
},
|
||||||
|
@ -549,5 +550,19 @@
|
||||||
"achievement": {
|
"achievement": {
|
||||||
"title": "Achievement",
|
"title": "Achievement",
|
||||||
"of": "dari"
|
"of": "dari"
|
||||||
|
},
|
||||||
|
"furnishing": {
|
||||||
|
"title": "Furnitur",
|
||||||
|
"name": "Nama",
|
||||||
|
"energy": "Energi",
|
||||||
|
"load": "Beban",
|
||||||
|
"ratio": "Rasio",
|
||||||
|
"using": "Jumlah",
|
||||||
|
"interior": "Interior",
|
||||||
|
"exterior": "Exterior",
|
||||||
|
"info": [
|
||||||
|
"Ini menunjukkan berapa beban yang bisa ditampung dalam pulau. Masing-masing furnitur mempunyai nilai beban yang tersembunyi yang bisa dilihat di bawah.",
|
||||||
|
"(Beban maximum belum dikonfirmasi!)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
278
src/routes/furnishing/index.svelte
Normal file
|
@ -0,0 +1,278 @@
|
||||||
|
<script context="module">
|
||||||
|
import data from '../../data/furnishing/en.json';
|
||||||
|
export async function preload() {
|
||||||
|
return { data };
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
import { locale, t } from 'svelte-i18n';
|
||||||
|
import debounce from 'lodash/debounce';
|
||||||
|
import { mdiInformationOutline, mdiMinus, mdiPlus } from '@mdi/js';
|
||||||
|
|
||||||
|
import TableHeader from '../../components/Table/TableHeader.svelte';
|
||||||
|
import Icon from '../../components/Icon.svelte';
|
||||||
|
import { getAccountPrefix } from '../../stores/account';
|
||||||
|
import { readSave, updateSave } from '../../stores/saveManager';
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
|
||||||
|
let type = 'interior';
|
||||||
|
let items = [];
|
||||||
|
let max = 0;
|
||||||
|
|
||||||
|
const maxLoad = {
|
||||||
|
exterior: 4500,
|
||||||
|
interior: 2000,
|
||||||
|
};
|
||||||
|
let currentUsage = {
|
||||||
|
interior: {},
|
||||||
|
exterior: {},
|
||||||
|
};
|
||||||
|
$: currentLoad = Object.entries(currentUsage[type]).reduce((prev, [id, val]) => {
|
||||||
|
prev += data[id].load * val;
|
||||||
|
return prev;
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
let sortBy = 'ratio';
|
||||||
|
let sortOrder = false;
|
||||||
|
|
||||||
|
async function parseFurnishing() {
|
||||||
|
items = Object.values(data)
|
||||||
|
.filter((e) => e.type === type || e.type === '')
|
||||||
|
.sort((a, b) => {
|
||||||
|
switch (sortBy) {
|
||||||
|
case 'ratio':
|
||||||
|
if (sortOrder) return a.ratio - b.ratio;
|
||||||
|
else return b.ratio - a.ratio;
|
||||||
|
case 'energy':
|
||||||
|
if (sortOrder) return a.energy - b.energy;
|
||||||
|
else return b.energy - a.energy;
|
||||||
|
case 'load':
|
||||||
|
if (sortOrder) return a.load - b.load;
|
||||||
|
else return b.load - a.load;
|
||||||
|
case 'using':
|
||||||
|
if (sortOrder) return (currentUsage[type][a.id] || 0) - (currentUsage[type][b.id] || 0);
|
||||||
|
else return (currentUsage[type][b.id] || 0) - (currentUsage[type][a.id] || 0);
|
||||||
|
case 'name':
|
||||||
|
if (sortOrder) return a.name.localeCompare(b.name);
|
||||||
|
else return b.name.localeCompare(a.name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function sort(by) {
|
||||||
|
if (sortBy === by) {
|
||||||
|
sortOrder = !sortOrder;
|
||||||
|
} else {
|
||||||
|
sortBy = by;
|
||||||
|
}
|
||||||
|
parseFurnishing();
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeType(_type) {
|
||||||
|
type = _type;
|
||||||
|
sortBy = 'ratio';
|
||||||
|
sortOrder = false;
|
||||||
|
parseFurnishing();
|
||||||
|
max = items[0].ratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeUsage(id, val) {
|
||||||
|
if (currentUsage[type][id] === undefined) currentUsage[type][id] = 0;
|
||||||
|
currentUsage[type][id] = Math.max(0, currentUsage[type][id] + val);
|
||||||
|
if (currentUsage[type][id] === 0) delete currentUsage[type][id];
|
||||||
|
saveData();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function changeLocale(locale) {
|
||||||
|
data = (await import(`../../data/furnishing/${locale}.json`)).default;
|
||||||
|
parseFurnishing();
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateColor(percentage) {
|
||||||
|
const hue = (percentage / max) * 120;
|
||||||
|
return `color: hsl(${hue}, 100%, 60%);`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculateColorLoad(percentage) {
|
||||||
|
const hue = Math.max((1 - percentage) * 120, 0);
|
||||||
|
return `color: hsl(${hue}, 100%, 60%);`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveData = debounce(() => {
|
||||||
|
const data = JSON.stringify(currentUsage);
|
||||||
|
|
||||||
|
const prefix = getAccountPrefix();
|
||||||
|
updateSave(`${prefix}furnishing`, data);
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
function readLocalData() {
|
||||||
|
const prefix = getAccountPrefix();
|
||||||
|
const furnishingData = readSave(`${prefix}furnishing`);
|
||||||
|
if (furnishingData !== null) {
|
||||||
|
currentUsage = JSON.parse(furnishingData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
parseFurnishing();
|
||||||
|
max = items[0].ratio;
|
||||||
|
readLocalData();
|
||||||
|
|
||||||
|
locale.subscribe((val) => {
|
||||||
|
changeLocale(val);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<title>Furnishing - Paimon.moe</title>
|
||||||
|
<meta name="description" content="Genshin Impact Furnishing list with the load and energy values" />
|
||||||
|
<meta property="og:description" content="Genshin Impact Furnishing list with the load and energy values" />
|
||||||
|
</svelte:head>
|
||||||
|
<div class="lg:ml-64 pt-20 lg:px-8 lg:pt-8 max-w-screen-xl">
|
||||||
|
<div class="px-4 flex md:space-x-2 items-start md:items-center flex-col md:flex-row">
|
||||||
|
<h1 class="font-display font-black text-3xl md:text-4xl text-white">{$t('furnishing.title')}</h1>
|
||||||
|
<div
|
||||||
|
class="rounded-2xl border-2 border-white border-opacity-25 text-white px-4 py-2 group relative"
|
||||||
|
style={calculateColorLoad(currentLoad / maxLoad[type])}
|
||||||
|
>
|
||||||
|
<Icon path={mdiInformationOutline} />
|
||||||
|
{$t('furnishing.load')}
|
||||||
|
{currentLoad} / {maxLoad[type]}
|
||||||
|
<div
|
||||||
|
class="hidden group-hover:block absolute left-0 transform translate-y-full
|
||||||
|
bg-white rounded-xl z-50 text-gray-900 px-4 py-2 w-screen max-w-xs md:max-w-sm"
|
||||||
|
style="bottom: -10px;"
|
||||||
|
>
|
||||||
|
<p>{$t('furnishing.info.0')}</p>
|
||||||
|
<p>{$t('furnishing.info.1')}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="px-4 flex space-x-2 mt-2 mb-4">
|
||||||
|
<button on:click={() => changeType('interior')} class="pill {type === 'interior' ? 'active' : ''}"
|
||||||
|
>{$t('furnishing.interior')}</button
|
||||||
|
>
|
||||||
|
<button on:click={() => changeType('exterior')} class="pill {type === 'exterior' ? 'active' : ''}"
|
||||||
|
>{$t('furnishing.exterior')}</button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="flex mt-4 wrapper">
|
||||||
|
<div class="block overflow-x-auto xl:overflow-x-visible whitespace-no-wrap">
|
||||||
|
<div class="px-4 table">
|
||||||
|
<table class="w-full block pl-4 pr-4 py-2 md:pl-8 md:py-4 bg-item rounded-xl">
|
||||||
|
<tr>
|
||||||
|
<th />
|
||||||
|
<TableHeader
|
||||||
|
className="sticky top-0 bg-item z-30"
|
||||||
|
on:click={() => sort('name')}
|
||||||
|
sort={sortBy === 'name'}
|
||||||
|
order={sortOrder}
|
||||||
|
align="left"
|
||||||
|
>
|
||||||
|
{$t('furnishing.name')}
|
||||||
|
</TableHeader>
|
||||||
|
<TableHeader
|
||||||
|
className="sticky top-0 bg-item z-30"
|
||||||
|
on:click={() => sort('energy')}
|
||||||
|
sort={sortBy === 'energy'}
|
||||||
|
order={sortOrder}
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
{$t('furnishing.energy')}
|
||||||
|
</TableHeader>
|
||||||
|
<TableHeader
|
||||||
|
className="sticky top-0 bg-item z-30"
|
||||||
|
on:click={() => sort('load')}
|
||||||
|
sort={sortBy === 'load'}
|
||||||
|
order={sortOrder}
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
{$t('furnishing.load')}
|
||||||
|
</TableHeader>
|
||||||
|
<TableHeader
|
||||||
|
className="sticky top-0 bg-item z-30"
|
||||||
|
on:click={() => sort('ratio')}
|
||||||
|
sort={sortBy === 'ratio'}
|
||||||
|
order={sortOrder}
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
{$t('furnishing.ratio')}
|
||||||
|
</TableHeader>
|
||||||
|
<TableHeader
|
||||||
|
className="sticky top-0 bg-item z-30"
|
||||||
|
on:click={() => sort('using')}
|
||||||
|
sort={sortBy === 'using'}
|
||||||
|
order={sortOrder}
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
{$t('furnishing.using')}
|
||||||
|
</TableHeader>
|
||||||
|
</tr>
|
||||||
|
{#each items as item (item.id)}
|
||||||
|
<tr>
|
||||||
|
<td class="pr-4 h-12">
|
||||||
|
<img
|
||||||
|
src="/images/furnishing/{item.id}.png"
|
||||||
|
alt=""
|
||||||
|
class="h-12 w-12 image relative"
|
||||||
|
style="min-width: 3rem;"
|
||||||
|
/>
|
||||||
|
</td>
|
||||||
|
<td class="px-4 text-gray-200">{item.name}</td>
|
||||||
|
<td class="px-4 text-gray-200 text-center">{item.energy}</td>
|
||||||
|
<td class="px-4 text-gray-200 text-center">{item.load}</td>
|
||||||
|
<td class="px-4 text-gray-200 text-center" style={calculateColor(item.ratio)}>{item.ratio.toFixed(2)}</td>
|
||||||
|
<td class="px-4">
|
||||||
|
<div
|
||||||
|
class="flex justify-between items-center border-2 border-white border-opacity-25 rounded-xl text-gray-200"
|
||||||
|
>
|
||||||
|
<button class="hover:text-primary" on:click={() => changeUsage(item.id, 1)}>
|
||||||
|
<Icon path={mdiPlus} />
|
||||||
|
</button>
|
||||||
|
<p class="h-full text-gray-200 px-2">{currentUsage[type][item.id] || 0}</p>
|
||||||
|
<button class="hover:text-primary" on:click={() => changeUsage(item.id, -1)}>
|
||||||
|
<Icon path={mdiMinus} />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/each}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.pill {
|
||||||
|
@apply rounded-2xl;
|
||||||
|
@apply border-2;
|
||||||
|
@apply border-white;
|
||||||
|
@apply border-opacity-25;
|
||||||
|
@apply text-white;
|
||||||
|
@apply px-4;
|
||||||
|
@apply py-1;
|
||||||
|
@apply outline-none;
|
||||||
|
@apply transition;
|
||||||
|
@apply duration-100;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@apply border-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
@apply bg-primary;
|
||||||
|
@apply border-primary;
|
||||||
|
@apply text-background;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.image[alt]:after {
|
||||||
|
@apply block absolute top-0 left-0 w-full h-full bg-item;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -152,6 +152,7 @@
|
||||||
'characters',
|
'characters',
|
||||||
'achievement',
|
'achievement',
|
||||||
'collectables-updated',
|
'collectables-updated',
|
||||||
|
'furnishing',
|
||||||
];
|
];
|
||||||
|
|
||||||
for (let k of keyWillBeDeleted) {
|
for (let k of keyWillBeDeleted) {
|
||||||
|
@ -186,6 +187,7 @@
|
||||||
'characters',
|
'characters',
|
||||||
'achievement',
|
'achievement',
|
||||||
'collectables-updated',
|
'collectables-updated',
|
||||||
|
'furnishing',
|
||||||
];
|
];
|
||||||
|
|
||||||
for (let k of keyWillBeDeleted) {
|
for (let k of keyWillBeDeleted) {
|
||||||
|
|
BIN
static/images/furnishing/a_seat_in_the_wilderness.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
static/images/furnishing/adeptus_amber_a_striking_sight.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
static/images/furnishing/adeptus_amber_trespassers_beware.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/images/furnishing/adeptus_gate.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
static/images/furnishing/alchemic_component_burden_of_dust.png
Normal file
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 18 KiB |
BIN
static/images/furnishing/amber_irontrunk_tree.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
static/images/furnishing/amber_knotwood_tree.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
static/images/furnishing/amber_pearlroot_tree.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
static/images/furnishing/archivists_treasure_trove.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
static/images/furnishing/ashen_stone.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/images/furnishing/ballad-spinning_windwheel.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/images/furnishing/bamboo_outdoor_tea_table.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
static/images/furnishing/birch_double_drawer_nightstand.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
static/images/furnishing/birch_main_courtyard_gate.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
static/images/furnishing/birch_sapling.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
static/images/furnishing/bird_and_blossom_design_fountain.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
static/images/furnishing/blooming_hedge.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/images/furnishing/bountiful_harvest_fruit_cart.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
static/images/furnishing/breeze-blessed_bed.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
static/images/furnishing/brightcrown_plumebush.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
static/images/furnishing/bustling_sundry_stand.png
Normal file
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 21 KiB |
BIN
static/images/furnishing/carved_courtyard_fence.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
static/images/furnishing/carved_courtyard_fence_ending.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
static/images/furnishing/chasms_doorstep.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
static/images/furnishing/clear_blue_afternoon.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/images/furnishing/clouds_east_of_bishui.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
static/images/furnishing/cloudy_haze_bed.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
static/images/furnishing/concealing_leaves.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
static/images/furnishing/country_home_with_tall_attic.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
static/images/furnishing/courtyard_wall_all_in_a_row.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
static/images/furnishing/courtyard_wall_peace_across.png
Normal file
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 30 KiB |
BIN
static/images/furnishing/crude_double-decker_pallet.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
static/images/furnishing/crystalflys_perch.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
static/images/furnishing/cuihua_sapling.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
static/images/furnishing/dainty_fists.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/images/furnishing/deadwood_road_sign.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
static/images/furnishing/doorless_pine_cupboard.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/images/furnishing/economy_cuihua_bookshelf.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
static/images/furnishing/eight-sided_lantern_lucky_day.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/images/furnishing/entrance_rug_a_warm_welcome.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
static/images/furnishing/etiquette_of_correspondence.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 20 KiB |
BIN
static/images/furnishing/exquisite_hourglass_ornament.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
static/images/furnishing/farmers_scarecrow.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
static/images/furnishing/favonius_conference_table.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
static/images/furnishing/favonius_office_table.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/images/furnishing/fir_case_shelf_combination.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
static/images/furnishing/fir_shelves.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
static/images/furnishing/fir_weapon_rack.png
Normal file
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 5.5 KiB |
BIN
static/images/furnishing/formation_rock.png
Normal file
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 17 KiB |
BIN
static/images/furnishing/fragrant_cedar_vegetable_rack.png
Normal file
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 30 KiB |
BIN
static/images/furnishing/fruit_sellers_caution.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
static/images/furnishing/fruit_sellers_toil.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
static/images/furnishing/gemini_jasmine.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
static/images/furnishing/gemini_verdance.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
static/images/furnishing/gold-lined_sandbearer_nightstand.png
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
static/images/furnishing/gold-lined_sandbearer_wardrobe.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
static/images/furnishing/goldbud_stone.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
static/images/furnishing/goldchime_stone.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/images/furnishing/golden_irontrunk_tree.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
static/images/furnishing/golden_knotwood_tree.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
static/images/furnishing/golden_pearlroot_tree.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
static/images/furnishing/golden_triple-arm_candelabrum.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
static/images/furnishing/green_fountain.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
static/images/furnishing/green_irontrunk_tree.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
static/images/furnishing/green_knotwood_tree.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
static/images/furnishing/green_pearlroot_tree.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
static/images/furnishing/hardened_glazed_vase.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/images/furnishing/hardwood_weapon_rack.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
static/images/furnishing/hazel_wildvest.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
static/images/furnishing/heavy_fir_forging_table.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/images/furnishing/heavy_hay_bale.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/images/furnishing/hiding_grazestone.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
static/images/furnishing/hilichurl_archery_target.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
static/images/furnishing/hilichurl_chieftain_hall.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
static/images/furnishing/hilichurl_horned_pot.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/images/furnishing/hilichurl_outpost_hut.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
static/images/furnishing/hilichurl_spiral_watchtower.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/images/furnishing/hilichurl_straw_hut.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
static/images/furnishing/hilichurl_totem_fence.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
static/images/furnishing/hunters_vantage.png
Normal file
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 9.8 KiB |
BIN
static/images/furnishing/kindletree.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
static/images/furnishing/large_birch_wardrobe.png
Normal file
After Width: | Height: | Size: 23 KiB |