Create a premium currency that all money exchanges operate with
This commit is contained in:
parent
d8ade16b96
commit
5d05ee372a
16
data.sql
16
data.sql
@ -12,16 +12,18 @@ INSERT INTO users(name) VALUES
|
|||||||
('Plug'),
|
('Plug'),
|
||||||
('Upgrade');
|
('Upgrade');
|
||||||
|
|
||||||
INSERT INTO bank_account(user_id, resource_id, balance) VALUES
|
INSERT INTO resource_account(user_id, resource_id, balance) VALUES
|
||||||
(1, 1, 200),
|
(1, 1, 200),
|
||||||
(1, 2, 175),
|
(1, 2, 175),
|
||||||
(1, 3, 0),
|
(1, 3, 0),
|
||||||
(1, 4, 25),
|
(1, 4, 25),
|
||||||
(1, 5, 10);
|
(1, 5, 10);
|
||||||
|
|
||||||
INSERT INTO store_item(name, currency, target_resource, price, claim_amount) VALUES
|
INSERT INTO bank_account(user_id, balance) VALUES (1, 500);
|
||||||
('Drill 1A', 1, 1, 25, 500),
|
|
||||||
('Drill 1B', 1, 2, 25, 500),
|
INSERT INTO store_item(name, price, claim_amount) VALUES
|
||||||
('Drill 1C', 1, 3, 25, 500),
|
('Drill 1A', 25, 50),
|
||||||
('Drill 1D', 1, 4, 25, 500),
|
('Drill 1B', 25, 50),
|
||||||
('Drill 1E', 1, 5, 25, 500);
|
('Drill 1C', 25, 50),
|
||||||
|
('Drill 1D', 25, 50),
|
||||||
|
('Drill 1E', 25, 50);
|
||||||
|
93
mm.py
93
mm.py
@ -11,20 +11,20 @@ import datetime
|
|||||||
def get_bank():
|
def get_bank():
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT resource.name,balance FROM bank_account
|
SELECT resource_account.id,resource.name,balance FROM resource_account
|
||||||
INNER JOIN resource ON resource.id = bank_account.resource_id
|
INNER JOIN resource ON resource.id = resource_account.resource_id
|
||||||
WHERE user_id = ?
|
WHERE user_id = ?
|
||||||
""", (world.current_user_id,))
|
""", (world.current_user_id,))
|
||||||
bank = {name: balance for name,balance in cursor.fetchall()}
|
resources = {id:(name, balance) for id,name,balance in cursor.fetchall()}
|
||||||
|
cursor.execute("SELECT bank_account.id,balance FROM bank_account WHERE user_id = ?",
|
||||||
|
(world.current_user_id,))
|
||||||
|
bank = cursor.fetchone()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
return bank
|
return (bank, resources)
|
||||||
|
|
||||||
def get_store_items():
|
def get_store_items():
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute("""
|
cursor.execute("SELECT store_item.id,store_item.name,price,claim_amount FROM store_item")
|
||||||
SELECT store_item.id,store_item.name,resource.name,price,claim_amount FROM store_item
|
|
||||||
INNER JOIN resource ON resource.id = currency
|
|
||||||
""")
|
|
||||||
items = {item[0]:item[1:] for item in cursor.fetchall()}
|
items = {item[0]:item[1:] for item in cursor.fetchall()}
|
||||||
cursor.close()
|
cursor.close()
|
||||||
return items
|
return items
|
||||||
@ -142,16 +142,48 @@ def mint():
|
|||||||
def buy_item(item_id):
|
def buy_item(item_id):
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
cursor.execute("""
|
cost = world.store[item_id][1]
|
||||||
INSERT INTO inventory_item (user_id, store_item_id)
|
if cost > world.bank[0][1]:
|
||||||
VALUES (?, ?)
|
print(f"Not enough money: Bank {world.bank[0][1]} < Cost {cost}")
|
||||||
""", (world.current_user_id, item_id))
|
return -1
|
||||||
|
|
||||||
item_id = cursor.lastrowid
|
cursor.execute('BEGIN')
|
||||||
conn.commit()
|
try:
|
||||||
cursor.close()
|
cursor.execute("""
|
||||||
world.inventory = get_inventory()
|
INSERT INTO inventory_item (user_id, store_item_id) VALUES (?, ?)
|
||||||
return item_id
|
""", (world.current_user_id, item_id))
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE bank_account SET balance = balance - ? WHERE bank_account.id = ?
|
||||||
|
""", (cost, world.bank[0][0]))
|
||||||
|
except sql.Error as error:
|
||||||
|
conn.rollback()
|
||||||
|
finally:
|
||||||
|
item_id = cursor.lastrowid
|
||||||
|
conn.commit()
|
||||||
|
cursor.close()
|
||||||
|
world.inventory = get_inventory()
|
||||||
|
world.bank = get_bank()
|
||||||
|
return item_id
|
||||||
|
|
||||||
|
def sell_item(item_id):
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
cost = world.store[world.inventory[item_id][0]][1]
|
||||||
|
cursor.execute('BEGIN')
|
||||||
|
try:
|
||||||
|
# TODO: We have to cascade delete stakes and claims after this
|
||||||
|
cursor.execute("DELETE FROM inventory_item WHERE user_id = ? AND id = ?",
|
||||||
|
(world.current_user_id, item_id))
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE bank_account SET balance = balance + ? WHERE bank_account.id = ?
|
||||||
|
""", (cost, world.bank[0][0]))
|
||||||
|
except sql.Error as error:
|
||||||
|
conn.rollback()
|
||||||
|
finally:
|
||||||
|
conn.commit()
|
||||||
|
cursor.close()
|
||||||
|
world.inventory = get_inventory()
|
||||||
|
world.bank = get_bank()
|
||||||
|
|
||||||
def mine(well_id, item_id):
|
def mine(well_id, item_id):
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@ -196,16 +228,6 @@ def destroy(source_id):
|
|||||||
cursor.close()
|
cursor.close()
|
||||||
world.staking_sources = get_moons()
|
world.staking_sources = get_moons()
|
||||||
|
|
||||||
def sell(item_id):
|
|
||||||
cursor = conn.cursor()
|
|
||||||
|
|
||||||
cursor.execute("DELETE FROM inventory_item WHERE user_id = ? AND id = ?",
|
|
||||||
(world.current_user_id, item_id))
|
|
||||||
|
|
||||||
conn.commit()
|
|
||||||
cursor.close()
|
|
||||||
world.inventory = get_inventory()
|
|
||||||
|
|
||||||
def sell_all():
|
def sell_all():
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
@ -217,24 +239,27 @@ def sell_all():
|
|||||||
|
|
||||||
def draw_dashboard():
|
def draw_dashboard():
|
||||||
im.text(f"Current User: {world.current_user}")
|
im.text(f"Current User: {world.current_user}")
|
||||||
|
for _ in range(5):
|
||||||
|
im.spacing()
|
||||||
|
im.text(f"Moon Bucks: {world.bank[0][1]}")
|
||||||
for _ in range(10):
|
for _ in range(10):
|
||||||
im.spacing()
|
im.spacing()
|
||||||
for name,balance in world.bank.items():
|
for id,(name,balance) in world.bank[1].items():
|
||||||
im.text(f"{name.capitalize()}: {balance}")
|
im.text(f"{name.capitalize()}: {balance}")
|
||||||
|
|
||||||
def draw_store():
|
def draw_store():
|
||||||
for id,(name,resource,price,claim) in world.store.items():
|
for id,(name,price,claim) in world.store.items():
|
||||||
owned = False
|
owned = False
|
||||||
for (store_item_id,_) in world.inventory.values():
|
for (store_item_id,_) in world.inventory.values():
|
||||||
if id == store_item_id:
|
if id == store_item_id:
|
||||||
owned = True
|
owned = True
|
||||||
im.text(f"{name}: Mine {claim} {resource.capitalize()}")
|
im.text(f"{name}: Mine {claim}")
|
||||||
|
|
||||||
if owned:
|
if owned:
|
||||||
im.text_disabled(f"Buy {price} {resource[0:3]}")
|
im.text_disabled(f"Buy {price}")
|
||||||
else:
|
else:
|
||||||
im.push_id(f"Buy{id}")
|
im.push_id(f"Buy{id}")
|
||||||
if im.button(f"Buy {price} {resource[0:3]}"):
|
if im.button(f"Buy {price}"):
|
||||||
buy_item(id)
|
buy_item(id)
|
||||||
im.pop_id()
|
im.pop_id()
|
||||||
for _ in range(5):
|
for _ in range(5):
|
||||||
@ -242,7 +267,7 @@ def draw_store():
|
|||||||
|
|
||||||
def draw_inventory():
|
def draw_inventory():
|
||||||
for id,(sid,tier) in world.inventory.items():
|
for id,(sid,tier) in world.inventory.items():
|
||||||
im.text(f"{id} - {world.store[sid][0]} - Tier {tier+1}")
|
im.text(f"{world.store[sid][0]} - Tier {tier+1}")
|
||||||
im.push_id(f"Upgrade{id}")
|
im.push_id(f"Upgrade{id}")
|
||||||
if im.button("Upgrade"):
|
if im.button("Upgrade"):
|
||||||
upgrade(id)
|
upgrade(id)
|
||||||
@ -250,7 +275,7 @@ def draw_inventory():
|
|||||||
im.same_line()
|
im.same_line()
|
||||||
im.push_id(f"Sell{id}")
|
im.push_id(f"Sell{id}")
|
||||||
if im.button("Sell"):
|
if im.button("Sell"):
|
||||||
sell(id)
|
sell_item(id)
|
||||||
im.pop_id()
|
im.pop_id()
|
||||||
for _ in range(5):
|
for _ in range(5):
|
||||||
im.spacing()
|
im.spacing()
|
||||||
|
16
tables.sql
16
tables.sql
@ -63,14 +63,8 @@ CREATE TABLE upgrade_event(
|
|||||||
CREATE TABLE store_item(
|
CREATE TABLE store_item(
|
||||||
id integer primary key autoincrement,
|
id integer primary key autoincrement,
|
||||||
name varchar(128) not null,
|
name varchar(128) not null,
|
||||||
currency int not null,
|
|
||||||
price int not null,
|
price int not null,
|
||||||
target_resource int not null,
|
claim_amount int not null
|
||||||
claim_amount int not null,
|
|
||||||
CONSTRAINT fk_rid FOREIGN KEY(currency)
|
|
||||||
REFERENCES resource(id)
|
|
||||||
CONSTRAINT fk_targetid FOREIGN KEY(target_resource)
|
|
||||||
REFERENCES resource(id)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE inventory_item(
|
CREATE TABLE inventory_item(
|
||||||
@ -85,6 +79,14 @@ CREATE TABLE inventory_item(
|
|||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE bank_account(
|
CREATE TABLE bank_account(
|
||||||
|
id integer primary key autoincrement,
|
||||||
|
user_id int not null,
|
||||||
|
balance int not null default 0 CHECK (balance >= 0),
|
||||||
|
CONSTRAINT fk_user FOREIGN KEY(user_id)
|
||||||
|
REFERENCES users(id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE resource_account(
|
||||||
id integer primary key autoincrement,
|
id integer primary key autoincrement,
|
||||||
user_id int not null,
|
user_id int not null,
|
||||||
resource_id int not null,
|
resource_id int not null,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user