Compare commits

...

12 commits

18 changed files with 252 additions and 114 deletions

View file

@ -1,13 +1,11 @@
name: Build and Push to git.beans.team
on:
on:
push:
branches:
- main
tags:
- '*'
jobs:
jobs:
update-registry:
name: Update Registry Image
runs-on: ubuntu-latest
@ -28,6 +26,4 @@ jobs:
context: .
file: ./Dockerfile
push: true
tags: |
git.beans.team/em/scouter:latest
git.beans.team/em/scouter:${{ github.sha }}
tags: git.beans.team/em/scouter:latest

28
.github/workflows/build-release.yml vendored Normal file
View file

@ -0,0 +1,28 @@
name: Build and Push Releases
on:
release:
types: [ published ]
jobs:
update-registry:
name: Update Registry Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to git.beans.team
uses: docker/login-action@v3
with:
registry: git.beans.team
username: em
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and Push Image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: git.beans.team/em/scouter:${{ github.event.release.tag_name }}

View file

@ -8,7 +8,7 @@ RUN apt-get update && apt-get install -y \
software-properties-common \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt app.py ./
COPY requirements.txt app.py scouter.db ./
RUN pip3 install -r requirements.txt

9
app.py
View file

@ -1,4 +1,5 @@
import streamlit as st
import database as db
class Moon:
@ -92,9 +93,11 @@ def main():
st.markdown("# :red[Lethal Company] Scouter")
st.markdown(":rainbow[What does the scouter say about this moon's power level?]")
moon_strings = db.get_moon_list()
moon = st.selectbox(
"Moon",
sorted(m.name for m in moons),
moon_strings,
placeholder="Moon! Pick a moon!",
help="Pick your current moon.",
)
@ -142,7 +145,7 @@ def main():
st.write(find_spawn_list(run.outside_power, outside_creatures))
else:
st.error(
f"Power level exceedes maximum possible for {run.moon.name}."
f"Power level exceeds maximum possible for {run.moon.name}."
)
with right_column:
@ -181,7 +184,7 @@ def main():
st.write(find_spawn_list(run.inside_power, inside_creatures))
else:
st.error(
f"Power level exceedes maximum possible for {run.moon.name}."
f"Power level exceeds maximum possible for {run.moon.name}."
)

View file

@ -1,103 +0,0 @@
create table if not exists moon_tier
(
moon_tier_id int primary key,
tier_name text not null
);
create table if not exists risk_level
(
risk_level_id int primary key,
risk_level_name text not null
);
create table if not exists layout
(
layout_id int primary key,
layout_name text not null
);
create table if not exists weather
(
weather_id int primary key,
weather_name text not null,
effect text
);
create table if not exists moon
(
moon_id int primary key,
moon_name text not null,
risk_level_id int not null,
cost int not null,
default_layout_id int not null,
map_size_multiplier real not null,
min_scrap int not null,
max_scrap int not null,
outside_max_power int not null,
inside_max_power int not null,
moon_tier_id int not null,
foreign key (risk_level_id)
references risk_level (risk_level_id),
foreign key (default_layout_id)
references layout (layout_id),
foreign key (moon_tier_id)
references moon_tier (moon_tier_id)
);
create table if not exists creature_type
(
creature_type_id int primary key,
type_name text not null
);
create table if not exists creature
(
creature_id int primary key,
creature_name text not null,
creature_nickname text,
health int,
power_level int not null,
max_spawn int not null,
stunnable int not null,
stun_multiplier real,
door_open_speed real,
hostile int not null,
creature_type_id int not null,
favorite_moon_id int not null,
foreign key (creature_type_id)
references creature_type (creature_type_id),
foreign key (favorite_moon_id)
references moon (moon_id)
);
create table if not exists scrap
(
scrap_id int primary key,
scrap_name text not null,
min_value int not null,
max_value int not null,
weight int not null,
conductive int not null,
two_handed int not null
);
create table if not exists viable_weather
(
moon_id int not null,
weather_id int not null,
foreign key (moon_id)
references moon (moon_id),
foreign key (weather_id)
references weather (weather_id)
);
create table if not exists spawn_chance
(
moon_id int not null,
creature_id int not null,
spawn_chance real not null,
foreign key (moon_id)
references moon (moon_id),
foreign key (creature_id)
references creature (creature_id)
);

104
database-scripts/create.sql Normal file
View file

@ -0,0 +1,104 @@
create table creature_type
(
creature_type_id int
primary key,
type_name text not null
);
create table layout
(
layout_id int
primary key,
layout_name text not null
);
create table moon_tier
(
moon_tier_id int
primary key,
tier_name text not null
);
create table risk_level
(
risk_level_id int
primary key,
risk_level_name text not null
);
create table moon
(
moon_id int
primary key,
moon_name text not null,
risk_level_id int not null
references risk_level,
cost int not null,
default_layout_id int not null
references layout,
map_size_multiplier real not null,
min_scrap int not null,
max_scrap int not null,
outside_max_power int not null,
inside_max_power int not null,
moon_tier_id int not null
references moon_tier
);
create table creature
(
creature_id int
primary key,
creature_name text not null,
creature_nickname text,
health int,
power_level int not null,
max_spawn int not null,
stunnable int not null,
stun_multiplier real,
door_open_speed real,
hostile int not null,
creature_type_id int not null
references creature_type,
favorite_moon_id int not null
references moon
);
create table scrap
(
scrap_id int
primary key,
scrap_name text not null,
min_value int not null,
max_value int not null,
weight int not null,
conductive int not null,
two_handed int not null
);
create table spawn_chance
(
moon_id int not null
references moon,
creature_id int not null
references creature,
spawn_chance real not null
);
create table weather
(
weather_id int
primary key,
weather_name text not null,
effect text
);
create table viable_weather
(
moon_id int not null
references moon,
weather_id int not null
references weather
);

View file

@ -0,0 +1,20 @@
insert into main.creature (creature_id, creature_name, creature_nickname, health, power_level, max_spawn, stunnable, stun_multiplier, door_open_speed, hostile, creature_type_id, favorite_moon_id)
values (1, 'Snare Flea', 'Head Bug', 2, 1, 4, 1, 3, 4.35, 1, 2, 2),
(2, 'Bunker Spider', null, 5, 3, 1, 1, 1, 6.67, 1, 2, 1),
(3, 'Hoarding Bug', 'Yippee Bug', 2, 1, 8, 1, 0.5, 0.67, 1, 2, 2),
(4, 'Bracken', 'Flower Man', 3, 3, 1, 1, 0.25, 0.8, 1, 2, 3),
(5, 'Thumper', null, 4, 3, 4, 1, 1, 3.33, 1, 2, 4),
(6, 'Hygrodere', 'Goo', null, 1, 2, 1, 4, 0, 1, 2, 4),
(7, 'Ghost Girl', null, null, 2, 1, 0, null, 0.25, 1, 3, 6),
(8, 'Spore Lizard', null, null, 1, 2, 1, 0.6, 3.33, 1, 2, 1),
(9, 'Nutcracker', null, 5, 1, 10, 1, 0.5, 0.5, 1, 2, 6),
(10, 'Coil-Head', null, null, 1, 5, 1, 3.25, 16.67, 1, 2, 4),
(11, 'Jester', null, null, 3, 1, 1, 0.6, 2, 1, 2, 6),
(12, 'Masked', 'Mimic', 4, 1, 10, 1, 0.75, 0.25, 1, 3, 6),
(13, 'Eyeless Dog', null, 12, 2, 8, 1, 0.7, null, 1, 1, 8),
(14, 'Forest Keeper', 'Giant', null, 3, 3, 1, 1.2, null, 1, 1, 3),
(15, 'Earth Leviathan', 'Worm', null, 2, 3, 0, null, null, 1, 1, 2),
(16, 'Baboon Hawk', null, 6, 1, 15, 1, 0.4, null, 1, 1, 5),
(17, 'Circuit Bees', null, null, 1, 6, 0, null, null, 1, 1, 5),
(18, 'Manticoil', null, 2, 1, 16, 1, 1.1, null, 0, 1, 4),
(19, 'Roaming Locusts', null, null, 1, 16, 0, null, null, 0, 1, 1);

View file

@ -0,0 +1,4 @@
insert into main.creature_type (creature_type_id, type_name)
values (1, 'Outside'),
(2, 'Inside'),
(3, 'Hybrid');

View file

@ -0,0 +1,3 @@
insert into main.layout (layout_id, layout_name)
values (1, 'Factory'),
(2, 'Mansion');

View file

@ -0,0 +1,9 @@
insert into main.moon (moon_id, moon_name, risk_level_id, cost, default_layout_id, map_size_multiplier, min_scrap, max_scrap, outside_max_power, inside_max_power, moon_tier_id)
values (1, '41-Experimentation', 4, 0, 1, 1, 0, 11, 8, 4, 1),
(2, '220-Assurance', 6, 0, 1, 1, 13, 16, 8, 6, 1),
(3, '56-Vow', 5, 0, 1, 1.15, 10, 12, 6, 7, 1),
(4, '21-Offense', 4, 0, 1, 1.25, 14, 17, 8, 12, 2),
(5, '61-March', 4, 0, 1, 2, 18, 25, 12, 14, 2),
(6, '85-Rend', 3, 550, 2, 1.2, 18, 25, 6, 10, 3),
(7, '7-Dine', 2, 600, 2, 1.3, 20, 27, 6, 15, 3),
(8, '8-Titan', 1, 700, 1, 2.35, 23, 37, 7, 18, 3);

View file

@ -0,0 +1,4 @@
insert into main.moon_tier (moon_tier_id, tier_name)
values (1, 'Tier 1'),
(2, 'Tier 2'),
(3, 'Tier 3');

View file

@ -0,0 +1,7 @@
insert into main.risk_level (risk_level_id, risk_level_name)
values (1, 'S+'),
(2, 'S'),
(3, 'A'),
(4, 'B'),
(5, 'C'),
(6, 'D');

View file

@ -0,0 +1 @@
;

View file

@ -0,0 +1 @@
;

View file

@ -0,0 +1,37 @@
insert into main.viable_weather (moon_id, weather_id)
values (1, 1),
(1, 2),
(1, 4),
(1, 5),
(1, 6),
(1, 3),
(2, 1),
(2, 2),
(2, 3),
(2, 5),
(2, 6),
(3, 1),
(3, 5),
(3, 3),
(3, 4),
(3, 6),
(4, 1),
(4, 2),
(4, 3),
(4, 6),
(4, 5),
(5, 1),
(5, 5),
(5, 3),
(5, 4),
(5, 6),
(6, 1),
(6, 3),
(6, 6),
(7, 1),
(7, 5),
(7, 6),
(8, 1),
(8, 3),
(8, 4),
(8, 6);

1
database/__init__.py Normal file
View file

@ -0,0 +1 @@
from .database import *

23
database/database.py Normal file
View file

@ -0,0 +1,23 @@
import os
import sqlite3
def get_connection() -> sqlite3.Connection:
if os.getenv("DATABASE_FILE"):
return sqlite3.connect(os.getenv("DATABASE_FILE"))
else:
return sqlite3.connect("./scouter.db")
def get_moon_list() -> list[str] | None:
with get_connection() as connection:
cursor = connection.cursor()
moons = cursor.execute(
"select moon_name from moon order by moon_id"
)
if moons:
moons = [moon[0] for moon in moons]
return moons
else:
return None

BIN
scouter.db Normal file

Binary file not shown.