mirror of
				https://github.com/solero/houdini.git
				synced 2025-11-04 06:31:54 +00:00 
			
		
		
		
	Minigame save state handlers
This commit is contained in:
		@@ -99,17 +99,6 @@ class PenguinPuffleItem(db.Model):
 | 
				
			|||||||
    quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
 | 
					    quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PenguinLaunchGame(db.Model):
 | 
					 | 
				
			||||||
    __tablename__ = 'penguin_launch_game'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
 | 
					 | 
				
			||||||
                           nullable=False)
 | 
					 | 
				
			||||||
    level = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
 | 
					 | 
				
			||||||
    puffle_os = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
 | 
					 | 
				
			||||||
    best_time = db.Column(db.SmallInteger, nullable=False, server_default=db.text("600"))
 | 
					 | 
				
			||||||
    turbo = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class PuffleCollection(AbstractDataCollection):
 | 
					class PuffleCollection(AbstractDataCollection):
 | 
				
			||||||
    __model__ = Puffle
 | 
					    __model__ = Puffle
 | 
				
			||||||
    __indexby__ = 'id'
 | 
					    __indexby__ = 'id'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,13 @@
 | 
				
			|||||||
from houdini import handlers
 | 
					from houdini import handlers
 | 
				
			||||||
from houdini.handlers import XTPacket
 | 
					from houdini.handlers import XTPacket
 | 
				
			||||||
 | 
					from houdini.converters import OptionalConverter
 | 
				
			||||||
 | 
					from houdini.constants import ClientType
 | 
				
			||||||
from houdini.handlers.play.navigation import handle_join_room
 | 
					from houdini.handlers.play.navigation import handle_join_room
 | 
				
			||||||
from houdini.handlers.play.moderation import cheat_ban
 | 
					from houdini.handlers.play.moderation import cheat_ban
 | 
				
			||||||
from houdini.data.room import Room
 | 
					from houdini.data.room import Room
 | 
				
			||||||
 | 
					from houdini.data.game import PenguinGameData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from sqlalchemy.dialects.postgresql import insert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -91,3 +96,27 @@ async def handle_get_game_over(p, score: int):
 | 
				
			|||||||
                        total_collected_stamps,
 | 
					                        total_collected_stamps,
 | 
				
			||||||
                        total_game_stamps,
 | 
					                        total_game_stamps,
 | 
				
			||||||
                        total_stamps)
 | 
					                        total_stamps)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@handlers.handler(XTPacket('ggd', ext='z'), client=ClientType.Vanilla)
 | 
				
			||||||
 | 
					async def handle_get_game_data(p, index: int = None):
 | 
				
			||||||
 | 
					    game_data = await PenguinGameData.select('data').where((PenguinGameData.penguin_id == p.id) &
 | 
				
			||||||
 | 
					                                                           (PenguinGameData.room_id == p.room.id) &
 | 
				
			||||||
 | 
					                                                           (PenguinGameData.index == index)).gino.scalar()
 | 
				
			||||||
 | 
					    await p.send_xt('ggd', game_data or '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@handlers.handler(XTPacket('sgd', ext='z'), client=ClientType.Vanilla)
 | 
				
			||||||
 | 
					@handlers.cooldown(5)
 | 
				
			||||||
 | 
					async def handle_set_game_data(p, index: OptionalConverter(int) = None, *, game_data: str):
 | 
				
			||||||
 | 
					    if p.room.game:
 | 
				
			||||||
 | 
					        data_insert = insert(PenguinGameData).values(penguin_id=p.id, room_id=p.room.id, index=index, data=game_data)
 | 
				
			||||||
 | 
					        data_insert = data_insert.on_conflict_do_update(
 | 
				
			||||||
 | 
					            constraint='penguin_game_data_pkey',
 | 
				
			||||||
 | 
					            set_=dict(data=game_data),
 | 
				
			||||||
 | 
					            where=((PenguinGameData.penguin_id == p.id)
 | 
				
			||||||
 | 
					                   & (PenguinGameData.room_id == p.room.id)
 | 
				
			||||||
 | 
					                   & (PenguinGameData.index == index))
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await data_insert.gino.scalar()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ from houdini.data.igloo import IglooFurniture, IglooLike, Igloo, Furniture, Floo
 | 
				
			|||||||
    PenguinIglooCollection, PenguinFurnitureCollection, \
 | 
					    PenguinIglooCollection, PenguinFurnitureCollection, \
 | 
				
			||||||
    PenguinFlooringCollection, PenguinLocationCollection
 | 
					    PenguinFlooringCollection, PenguinLocationCollection
 | 
				
			||||||
from houdini.data.room import PenguinIglooRoomCollection
 | 
					from houdini.data.room import PenguinIglooRoomCollection
 | 
				
			||||||
 | 
					from houdini.data.game import PenguinGameData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from sqlalchemy.dialects.postgresql import insert
 | 
					from sqlalchemy.dialects.postgresql import insert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -521,3 +522,12 @@ async def handle_get_furniture_inventory(p):
 | 
				
			|||||||
    locations = ','.join(f'{location_id}|0000000000' for location_id in p.locations.keys())
 | 
					    locations = ','.join(f'{location_id}|0000000000' for location_id in p.locations.keys())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await p.send_xt('gii', furniture, flooring, igloos, locations)
 | 
					    await p.send_xt('gii', furniture, flooring, igloos, locations)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@handlers.handler(XTPacket('g', 'ggd'), client=ClientType.Vanilla)
 | 
				
			||||||
 | 
					async def handle_get_dj3k_track(p, penguin_id: int, game_index: str):
 | 
				
			||||||
 | 
					    room_id, index = game_index.split('|')
 | 
				
			||||||
 | 
					    game_data = await PenguinGameData.select('data').where((PenguinGameData.penguin_id == penguin_id) &
 | 
				
			||||||
 | 
					                                                           (PenguinGameData.room_id == int(room_id)) &
 | 
				
			||||||
 | 
					                                                           (PenguinGameData.index == int(index))).gino.scalar()
 | 
				
			||||||
 | 
					    await p.send_xt('ggd', game_data or '')
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user