Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions commands/ccn.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ async def handle_ccn(server: 'CafeServer', client: 'StreamWriter', *params: str)
else:
status = '0'
obj.dish_id = -1
obj.dish_amount = 0
server.db.update_cafe(player.id, objects=player.cafe.get_objects_as_json())

response = ExtensionResponse('ccn', '-1', status, obj_x, obj_y, str(int(obj.type == ObjectType.STOVE)))
Expand Down
18 changes: 18 additions & 0 deletions commands/gmg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from response import ExtensionResponse
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from server import CafeServer
from asyncio import StreamWriter


async def handle_gmg(server: 'CafeServer', client: 'StreamWriter', *params: str):
address = client.get_extra_info('peername')
player = server.clients[address]

response = ExtensionResponse('gmg', '-1', '0', player.build_gifts())

# print(player.build_gifts()) THIS NEEDS RE-ORDER
# print(player.get_gifts_as_json()) ALREADY RE-ORDERED

await server.send_response(client, response)
23 changes: 23 additions & 0 deletions commands/grm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from response import ExtensionResponse
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from server import CafeServer
from asyncio import StreamWriter


async def handle_grm(server: 'CafeServer', client: 'StreamWriter', *params: str):
address = client.get_extra_info('peername')
player = server.clients[address]

slot = int(params[1])

player.remove_gift(slot)

player.new_gifts = len(player.gifts)

response = ExtensionResponse('grm', '-1', '0', str(slot))

await server.send_response(client, response)

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)
96 changes: 96 additions & 0 deletions commands/gus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
from consts import INGREDIENT_IDs, DISH_IDs, FANCY_IDs
from objects.cafe_object import ObjectType
from response import ExtensionResponse
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from server import CafeServer
from asyncio import StreamWriter


async def handle_gus(server: 'CafeServer', client: 'StreamWriter', *params: str):
address = client.get_extra_info('peername')
player = server.clients[address]

slot = int(params[1])
gift_details = player.gifts[slot]
item, amount, sender, received = gift_details

match item:
case _ if item in INGREDIENT_IDs or item == 1450:
fridge_capacity = player.cafe.get_fridge_capacity()
fridge_inventory = player.cafe.fridge_inventory
fridge_space = sum(
item_amount for item_id, item_amount in fridge_inventory.items() if item_id not in FANCY_IDs)
free_space = fridge_capacity - fridge_space

if free_space < amount:
response = ExtensionResponse('gus', '-1', '40')
await server.send_response(client, response)
return

else:
if item not in player.cafe.fridge_inventory:
player.cafe.fridge_inventory[item] = amount
else:
player.cafe.fridge_inventory[item] += amount

response = ExtensionResponse('gus', '-1', '0', str(slot), str(item), str(amount))
await server.send_response(client, response)
player.remove_gift(slot)

player.new_gifts -= 1

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)
server.db.update_cafe(player.id, fridge_inv=player.cafe.build_fridge_inventory())
return

case _ if item in FANCY_IDs:
# Fancy does not take space in the fridge.
if item not in player.cafe.fridge_inventory:
player.cafe.fridge_inventory[item] = amount
else:
player.cafe.fridge_inventory[item] += amount

response = ExtensionResponse('gus', '-1', '0', str(slot), str(item), str(amount))
await server.send_response(client, response)

player.remove_gift(slot)

player.new_gifts -= 1

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)
server.db.update_cafe(player.id, fridge_inv=player.cafe.build_fridge_inventory())
return

case _ if item in DISH_IDs:
counter = next(
(obj for obj in player.cafe.objects if obj.type == ObjectType.COUNTER and obj.dish_id == item),
None
) or next(
(obj for obj in player.cafe.objects if obj.type == ObjectType.COUNTER and obj.dish_id == -1),
None
)

if counter:
counter.dish_id = item
counter.dish_amount += amount

response = ExtensionResponse('gus', '-1', '0', str(slot), str(item), str(amount),
str(counter.pos[0]), str(counter.pos[1]))
await server.send_response(client, response)

player.remove_gift(slot)

player.new_gifts -= 1

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)
server.db.update_cafe(player.id, objects=player.cafe.get_objects_as_json())
else:
response = ExtensionResponse('gus', '-1', '20')
await server.send_response(client, response)
return

case _:
response = ExtensionResponse('gus', '-1', '-1')
await server.send_response(client, response)
222 changes: 222 additions & 0 deletions commands/mwf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
from datetime import datetime, timezone
from math import floor
from random import randint, randrange, choice, sample

from consts import BASIC_DECOR_IDs, FANCY_IDs, DISH_IDs, INGREDIENT_IDs
from response import ExtensionResponse
from typing import TYPE_CHECKING, Tuple

from utils import items

if TYPE_CHECKING:
from server import CafeServer
from asyncio import StreamWriter


class Rewards:
MOREGOLD = 0
CASH: Tuple[int, int] = (1, 9)
RAREINGREDIENT: Tuple[int, int] = (2, 13)
DECOR = 3
FANCY: Tuple[int, int] = (4, 11)
DISH: Tuple[int, int, int] = (5, 7, 15)
XP: Tuple[int, int] = (6, 14)
GOLD = 8
INGREDIENT = 10
RAREDECO = 12


async def handle_mwf(server: 'CafeServer', client: 'StreamWriter', *params: str):
address = client.get_extra_info('peername')
player = server.clients[address]

if player.new_gifts < 99: # Max gifts 99
if player.played_wheel:
if player.gold > 0:
player.gold -= 1

server.db.update_player(player.id, gold=player.gold)

await handle_spin(server, client, player)
return
else:
response = ExtensionResponse('mwf', '-1', '4')
await server.send_response(client, response)
return
else:
player.played_wheel = True
server.db.update_player(player.id, played_wheel=1)
await handle_spin(server, client, player)
else:
response = ExtensionResponse('mwf', '-1', '92')
await server.send_response(client, response)


async def handle_spin(server, client, player):
reward = randint(0, 15)
player_level = player.get_level()

match reward:
case Rewards.MOREGOLD:
# amount = randint(5, 10)
player.gold += 10

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'1902+10')
await server.send_response(client, response)

server.db.update_player(player.id, gold=player.gold)

case reward if reward in Rewards.CASH:
amount = floor(randrange(300, 401, 5) * (player_level * 1.2))
player.cash += amount

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'1901+{amount}')
await server.send_response(client, response)

server.db.update_player(player.id, cash=player.cash)

case reward if reward in Rewards.RAREINGREDIENT:
player.add_gift(1450, 1, -1, datetime.now(timezone.utc).timestamp())

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', '1450+1')
await server.send_response(client, response)

player.new_gifts = len(player.gifts)

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)

case Rewards.DECOR:
won_decor = choice(BASIC_DECOR_IDs)

if won_decor not in player.cafe.furniture_inventory:
player.cafe.furniture_inventory[won_decor] = 1
else:
player.cafe.furniture_inventory[won_decor] += 1

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'{won_decor}+1')
await server.send_response(client, response)

server.db.update_cafe(player.id, furniture_inv=player.cafe.build_furniture_inventory())

case reward if reward in Rewards.FANCY:
if player.new_gifts == 97:
random_fancy_types = randint(1, 2)
elif player.new_gifts == 98:
random_fancy_types = 1
else:
random_fancy_types = randint(1, 3)

won_fancy = sample(FANCY_IDs, random_fancy_types)
won_fancys_str = ""

for fancy_id in won_fancy:
amount = randint(1, 10)
won_fancys_str += f'{fancy_id}+{amount}#'

player.add_gift(fancy_id, amount, -1, datetime.now(timezone.utc).timestamp())

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'{won_fancys_str}')
await server.send_response(client, response)

player.new_gifts = len(player.gifts)

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)

case reward if reward in Rewards.DISH:
available_dishes = []

if player.new_gifts == 97:
random_dishes = randint(1, 2)
elif player.new_gifts == 98:
random_dishes = 1
else:
random_dishes = randint(1, 3)

for dish_id in DISH_IDs:
dish = items.get_dish_info(dish_id)
if dish['level'] <= player_level:
if dish['events'] == 0 or dish['events'] == server.current_event:
available_dishes.append(dish_id)

won_dishes = sample(available_dishes, random_dishes)
won_dish_str = ""

for dish_id in won_dishes:
if dish_id == 1255: # OMELETTE
amount = randint(1, 3) * 10
else:
amount = randint(1, 9) * 10

won_dish_str += f'{dish_id}+{amount}#'

player.add_gift(dish_id, amount, -1, datetime.now(timezone.utc).timestamp())

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'{won_dish_str}')
await server.send_response(client, response)

player.new_gifts = len(player.gifts)

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)

case reward if reward in Rewards.XP:
amount = randint(60, 150) * player_level
player.xp += amount

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'1905+{amount}')
await server.send_response(client, response)

server.db.update_player(player.id, xp=player.xp)

case Rewards.GOLD:
won_gold = randint(1, 5)
player.gold += won_gold

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'1902+{won_gold}')
await server.send_response(client, response)

server.db.update_player(player.id, gold=player.gold)

case Rewards.INGREDIENT:
available_ingredients = []

if player.new_gifts == 97:
random_ingredients = randint(1, 2)
elif player.new_gifts == 98:
random_ingredients = 1
else:
random_ingredients = randint(1, 3)

for ingredient_id in INGREDIENT_IDs:
ingredient = items.get_ingredient(ingredient_id)
if ingredient['level'] <= player_level:
if ingredient['events'] == 0 or ingredient['events'] == server.current_event:
available_ingredients.append(ingredient_id)

won_ingredient = sample(available_ingredients, random_ingredients)
won_ingredient_str = ''

for ingredient_id in won_ingredient:
amount = randint(1, 20)
won_ingredient_str += f'{ingredient_id}+{amount}#'

player.add_gift(ingredient_id, amount, -1, datetime.now(timezone.utc).timestamp())

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'{won_ingredient_str}')
await server.send_response(client, response)

player.new_gifts = len(player.gifts)

server.db.update_player(player.id, gifts=player.get_gifts_as_json(), new_gifts=player.new_gifts)

case Rewards.RAREDECO:
won_decor = 510

if won_decor not in player.cafe.furniture_inventory:
player.cafe.furniture_inventory[won_decor] = 1
else:
player.cafe.furniture_inventory[won_decor] += 1

response = ExtensionResponse('mwf', '-1', '0', f'{reward}', f'{won_decor}+1')
await server.send_response(client, response)

server.db.update_cafe(player.id, furniture_inv=player.cafe.build_furniture_inventory())
4 changes: 4 additions & 0 deletions consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@
FRIDGE_IDs = tuple(range(351, 359))

FANCY_IDs = tuple(range(1401, 1410))
INGREDIENT_IDs = tuple(range(1301, 1344))

BASIC_DECOR_IDs = tuple(range(501, 510))
DISH_IDs = tuple(range(1201, 1256))
Loading