mirror of
https://github.com/ethanrusz/scouter.git
synced 2025-04-20 14:06:32 -04:00
Compare commits
No commits in common. "28b162fb0f62f22416165ff89e712d80390a25e3" and "19150301d6dd3206bb93ff7cda3cdcab10c1eb48" have entirely different histories.
28b162fb0f
...
19150301d6
4 changed files with 37 additions and 176 deletions
40
app.py
40
app.py
|
@ -2,32 +2,38 @@ import streamlit as st
|
||||||
import database as db
|
import database as db
|
||||||
|
|
||||||
|
|
||||||
|
class Creature:
|
||||||
|
def __init__(self, name, nickname, power, max_spawns, hits_to_kill):
|
||||||
|
self.name = name
|
||||||
|
self.nickname = nickname
|
||||||
|
self.power = power
|
||||||
|
self.max_spawns = max_spawns
|
||||||
|
self.hits_to_kill = hits_to_kill
|
||||||
|
|
||||||
|
|
||||||
class Run:
|
class Run:
|
||||||
def __init__(self, moon: db.Moon):
|
def __init__(self, moon):
|
||||||
self.moon: db.Moon = moon
|
self.moon = moon
|
||||||
self.inside_power: int = moon.inside_max_power
|
self.inside_power = moon.inside_max_power
|
||||||
self.outside_power: int = moon.outside_max_power
|
self.outside_power = moon.outside_max_power
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
st.set_page_config("Lethal Company Scouter", "🛰️")
|
st.set_page_config("Lethal Company Scouter", "🛰️")
|
||||||
|
|
||||||
st.markdown("# :red[Lethal Company] Scouter")
|
|
||||||
st.markdown(":rainbow[What does the scouter say about this moon's power level?]")
|
|
||||||
|
|
||||||
moon_name = st.selectbox(
|
moon_name = st.selectbox(
|
||||||
"Moon",
|
"Moon",
|
||||||
db.get_moon_list(),
|
db.get_moon_list(),
|
||||||
placeholder="Moon! Pick a moon!",
|
placeholder="Moon! Pick a moon!",
|
||||||
help="Pick your current moon.",
|
help="Pick your current moon.",
|
||||||
)
|
)
|
||||||
moon_id: int = db.get_moon_id_by_name(moon_name)
|
moon_id = db.get_moon_id_by_name(moon_name)
|
||||||
run: Run = Run(db.get_moon_by_id(moon_id))
|
run = Run(db.get_moon_by_id(moon_id))
|
||||||
|
|
||||||
st.markdown(f"## {run.moon.name} ({run.moon.tier})")
|
st.markdown(f"## {run.moon.name} ({run.moon.tier})")
|
||||||
|
|
||||||
st.write(run)
|
st.info(f"Risk: {run.moon.risk_level} | Min scrap: {run.moon.min_scrap} "
|
||||||
st.write(run.moon)
|
f"| Max scrap: {run.moon.max_scrap} | Default layout: {run.moon.default_layout}")
|
||||||
|
|
||||||
# Begin column layout
|
# Begin column layout
|
||||||
left_column, right_column = st.columns(2)
|
left_column, right_column = st.columns(2)
|
||||||
|
@ -38,18 +44,6 @@ def main():
|
||||||
with right_column:
|
with right_column:
|
||||||
st.markdown("### Inside")
|
st.markdown("### Inside")
|
||||||
|
|
||||||
st.markdown('## Scrap Lookup')
|
|
||||||
|
|
||||||
scrap_name = st.selectbox(
|
|
||||||
'Scrap',
|
|
||||||
db.get_scrap_list(),
|
|
||||||
placeholder='Select a scrap name!'
|
|
||||||
)
|
|
||||||
scrap_id: int = db.get_scrap_id_by_name(scrap_name)
|
|
||||||
scrap: db.Scrap = db.get_scrap_by_id(scrap_id)
|
|
||||||
|
|
||||||
st.write(scrap)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -1,53 +1 @@
|
||||||
insert into main.scrap (scrap_id, scrap_name, min_value, max_value, weight, conductive, two_handed)
|
;
|
||||||
values (1, 'Air Horn', 52, 72, 0, 0, 0),
|
|
||||||
(2, 'Apparatus', 80, 80, 31, 1, 1),
|
|
||||||
(3, 'Bee Hive', 50, 156, 0, 1, 1),
|
|
||||||
(4, 'Bottles', 44, 56, 19, 0, 1),
|
|
||||||
(5, 'Brass Bell', 48, 80, 24, 1, 0),
|
|
||||||
(6, 'Candy', 6, 36, 11, 0, 0),
|
|
||||||
(7, 'Cash Register', 80, 160, 84, 1, 1),
|
|
||||||
(8, 'Chemical Jug', 32, 84, 32, 0, 1),
|
|
||||||
(9, 'Clown Horn', 52, 72, 0, 1, 0),
|
|
||||||
(10, 'Coffee Mug', 24, 68, 5, 0, 0),
|
|
||||||
(11, 'Comedy Mask', 28, 52, 11, 0, 0),
|
|
||||||
(12, 'Cookie Mold Pan', 12, 40, 16, 0, 0),
|
|
||||||
(13, 'Dustpan', 12, 32, 0, 0, 0),
|
|
||||||
(14, 'Egg Beater', 12, 44, 11, 1, 0),
|
|
||||||
(15, 'Fancy Lamp', 60, 128, 21, 1, 1),
|
|
||||||
(16, 'Flask', 16, 44, 19, 1, 0),
|
|
||||||
(17, 'Gift', 12, 28, 19, 0, 0),
|
|
||||||
(18, 'Gold Bar', 102, 210, 77, 1, 0),
|
|
||||||
(19, 'Golden Cup', 40, 80, 16, 0, 0),
|
|
||||||
(20, 'Hair Brush', 8, 36, 11, 0, 0),
|
|
||||||
(21, 'Hairdryer', 60, 100, 7, 0, 0),
|
|
||||||
(22, 'Homemade Flashbang', 10, 28, 5, 0, 0),
|
|
||||||
(23, 'Jar of Pickles', 32, 60, 16, 0, 0),
|
|
||||||
(24, 'Large Axle', 36, 56, 16, 1, 1),
|
|
||||||
(25, 'Large Bolt', 20, 32, 19, 1, 0),
|
|
||||||
(26, 'Laser Pointer', 32, 100, 0, 0, 0),
|
|
||||||
(27, 'Magic 7 Ball', 36, 72, 16, 0, 0),
|
|
||||||
(28, 'Magnifying Glass', 44, 60, 11, 0, 0),
|
|
||||||
(29, 'Metal Sheet', 10, 22, 26, 1, 0),
|
|
||||||
(30, 'Old Phone', 48, 64, 5, 0, 0),
|
|
||||||
(31, 'Painting', 60, 124, 32, 0, 1),
|
|
||||||
(32, 'Perfume Bottle', 48, 104, 0, 0, 0),
|
|
||||||
(33, 'Pill Bottle', 16, 40, 0, 0, 0),
|
|
||||||
(34, 'Plastic Fish', 28, 40, 0, 0, 0),
|
|
||||||
(35, 'Player Body', 5, 5, 11, 0, 1),
|
|
||||||
(36, 'Red Soda', 18, 90, 7, 1, 0),
|
|
||||||
(37, 'Remote', 20, 48, 0, 0, 0),
|
|
||||||
(38, 'Robot Toy', 56, 88, 21, 1, 0),
|
|
||||||
(39, 'Rubber Duckie', 2, 100, 0, 0, 0),
|
|
||||||
(40, 'Shotgun', 30, 90, 16, 0, 0),
|
|
||||||
(41, 'Shotgun Shell', 0, 0, 0, 0, 0),
|
|
||||||
(42, 'Steering Wheel', 16, 32, 16, 0, 0),
|
|
||||||
(43, 'Stop Sign', 20, 52, 21, 1, 0),
|
|
||||||
(44, 'Tea Kettle', 32, 56, 21, 1, 0),
|
|
||||||
(45, 'Teeth', 60, 84, 0, 0, 0),
|
|
||||||
(46, 'Toothpaste', 14, 48, 0, 0, 0),
|
|
||||||
(47, 'Toy Cube', 24, 44, 0, 0, 0),
|
|
||||||
(48, 'Tragedy Mask', 28, 52, 11, 0, 0),
|
|
||||||
(49, 'V-Type Engine', 20, 56, 16, 1, 1),
|
|
||||||
(50, 'Wedding Ring', 52, 80, 16, 1, 0),
|
|
||||||
(51, 'Whoopie Cushion', 6, 20, 0, 1, 0),
|
|
||||||
(52, 'Yield Sign', 18, 36, 42, 1, 0);
|
|
|
@ -3,32 +3,19 @@ import sqlite3
|
||||||
|
|
||||||
|
|
||||||
class Moon:
|
class Moon:
|
||||||
def __init__(self, moon_id: int, name: str, risk_level: str, cost: int, default_layout: str,
|
def __init__(self, moon_id, name, risk_level, cost, default_layout, map_size_multiplier, min_scrap, max_scrap,
|
||||||
map_size_multiplier: float, min_scrap: int, max_scrap: int, outside_max_power: int,
|
outside_max_power, inside_max_power, tier):
|
||||||
inside_max_power: int, tier: str):
|
self.id = moon_id
|
||||||
self.moon_id: int = moon_id
|
self.name = name
|
||||||
self.name: str = name
|
self.risk_level = risk_level
|
||||||
self.risk_level: str = risk_level
|
self.cost = cost
|
||||||
self.cost: int = cost
|
self.default_layout = default_layout,
|
||||||
self.default_layout: str = default_layout
|
self.map_size_multiplier = map_size_multiplier
|
||||||
self.map_size_multiplier: float = map_size_multiplier
|
self.min_scrap = min_scrap
|
||||||
self.min_scrap: int = min_scrap
|
self.max_scrap = max_scrap
|
||||||
self.max_scrap: int = max_scrap
|
self.outside_max_power = outside_max_power
|
||||||
self.outside_max_power: int = outside_max_power
|
self.inside_max_power = inside_max_power
|
||||||
self.inside_max_power: int = inside_max_power
|
self.tier = tier
|
||||||
self.tier: str = tier
|
|
||||||
|
|
||||||
|
|
||||||
class Scrap:
|
|
||||||
def __init__(self, scrap_id: int, name: str, min_value: int,
|
|
||||||
max_value: int, weight: int, conductive: int, two_handed: int):
|
|
||||||
self.scrap_id: int = scrap_id
|
|
||||||
self.name: str = name
|
|
||||||
self.min_value: int = min_value
|
|
||||||
self.max_value: int = max_value
|
|
||||||
self.weight: int = weight
|
|
||||||
self.conductive: bool = bool(conductive)
|
|
||||||
self.two_handed: bool = bool(two_handed)
|
|
||||||
|
|
||||||
|
|
||||||
def get_connection() -> sqlite3.Connection:
|
def get_connection() -> sqlite3.Connection:
|
||||||
|
@ -72,13 +59,13 @@ def get_moon_list() -> list[str] | None:
|
||||||
"""
|
"""
|
||||||
with get_connection() as connection:
|
with get_connection() as connection:
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
moon_names = cursor.execute(
|
moons = cursor.execute(
|
||||||
"select moon_name from moon order by moon_id"
|
"select moon_name from moon order by moon_id"
|
||||||
).fetchall()
|
).fetchall()
|
||||||
|
|
||||||
if moon_names:
|
if moons:
|
||||||
moon_names = [moon[0] for moon in moon_names]
|
moons = [moon[0] for moon in moons]
|
||||||
return moon_names
|
return moons
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -90,6 +77,7 @@ def get_moon_by_id(moon_id: int) -> Moon | None:
|
||||||
:return: A moon object or None if no moon is found
|
:return: A moon object or None if no moon is found
|
||||||
"""
|
"""
|
||||||
with get_connection() as connection:
|
with get_connection() as connection:
|
||||||
|
connection.text_factory = str
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
query = """
|
query = """
|
||||||
|
@ -109,8 +97,7 @@ from moon as m
|
||||||
join main.layout l on l.layout_id = m.default_layout_id
|
join main.layout l on l.layout_id = m.default_layout_id
|
||||||
join main.moon_tier mt on mt.moon_tier_id = m.moon_tier_id
|
join main.moon_tier mt on mt.moon_tier_id = m.moon_tier_id
|
||||||
where m.moon_id = ?
|
where m.moon_id = ?
|
||||||
limit 1;
|
limit 1;"""
|
||||||
"""
|
|
||||||
|
|
||||||
moon = cursor.execute(
|
moon = cursor.execute(
|
||||||
query,
|
query,
|
||||||
|
@ -121,71 +108,3 @@ limit 1;
|
||||||
return Moon(*moon)
|
return Moon(*moon)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_scrap_list() -> list[str] | None:
|
|
||||||
"""Provides a list of all scrap names from the database.
|
|
||||||
|
|
||||||
:return: All scrap names as a list of strings or None if no scrap is found
|
|
||||||
"""
|
|
||||||
with get_connection() as connection:
|
|
||||||
cursor = connection.cursor()
|
|
||||||
scrap_names = cursor.execute(
|
|
||||||
"select scrap_name from scrap order by scrap_id"
|
|
||||||
)
|
|
||||||
|
|
||||||
if scrap_names:
|
|
||||||
scrap_names = [scrap[0] for scrap in scrap_names]
|
|
||||||
return scrap_names
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def get_scrap_id_by_name(scrap_name: str) -> int | None:
|
|
||||||
"""Queries the database for a scrap ID that matches the given name.
|
|
||||||
|
|
||||||
:param scrap_name: Moon name as a string
|
|
||||||
:return: The scrap's ID as an int or None if no scrap is found
|
|
||||||
"""
|
|
||||||
with get_connection() as connection:
|
|
||||||
cursor = connection.cursor()
|
|
||||||
scrap_id = cursor.execute(
|
|
||||||
"select scrap_id "
|
|
||||||
"from scrap "
|
|
||||||
"where scrap_name = ? "
|
|
||||||
"order by scrap_name "
|
|
||||||
"limit 1;",
|
|
||||||
(scrap_name,)
|
|
||||||
).fetchone()
|
|
||||||
|
|
||||||
if scrap_id:
|
|
||||||
return scrap_id[0]
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def get_scrap_by_id(scrap_id: int) -> Scrap | None:
|
|
||||||
with get_connection() as connection:
|
|
||||||
cursor = connection.cursor()
|
|
||||||
|
|
||||||
query = """
|
|
||||||
select s.scrap_id,
|
|
||||||
s.scrap_name,
|
|
||||||
s.min_value,
|
|
||||||
s.max_value,
|
|
||||||
s.weight,
|
|
||||||
s.conductive,
|
|
||||||
s.two_handed
|
|
||||||
from scrap as s
|
|
||||||
where scrap_id = ?
|
|
||||||
limit 1;
|
|
||||||
"""
|
|
||||||
scrap = cursor.execute(
|
|
||||||
query,
|
|
||||||
(scrap_id,)
|
|
||||||
).fetchone()
|
|
||||||
|
|
||||||
if scrap:
|
|
||||||
return Scrap(*scrap)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
BIN
scouter.db
BIN
scouter.db
Binary file not shown.
Loading…
Add table
Reference in a new issue