class PenguinTrack(db.Model): __tablename__ = 'penguin_track' id = db.Column(db.Integer, primary_key=True, server_default=db.text( "nextval('\"penguin_track_id_seq\"'::regclass)")) name = db.Column(db.String(12), nullable=False, server_default=db.text("''::character varying")) owner_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) sharing = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) pattern = db.Column(db.Text, nullable=False) def __init__(self, **kwargs): super().__init__(**kwargs) self._likes = 0 @property def likes(self): return self._likes @likes.setter def likes(self, like_count): self._likes = like_count
class RedemptionBookWord(db.Model): __tablename__ = 'redemption_book_word' question_id = db.Column( db.Integer, primary_key=True, server_default=db.text( "nextval('\"redemption_book_word_question_id_seq\"'::regclass)")) book_id = db.Column(db.ForeignKey('redemption_book.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) page = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) line = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) word_number = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) answer = db.Column(db.String(20), nullable=False)
class PenguinPostcard(db.Model): __tablename__ = 'penguin_postcard' id = db.Column(db.Integer, primary_key=True, server_default=db.text( "nextval('\"penguin_postcard_id_seq\"'::regclass)")) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True) sender_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), index=True) postcard_id = db.Column(db.ForeignKey('postcard.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) send_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) details = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) has_read = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class IglooLike(db.Model): __tablename__ = 'igloo_like' igloo_id = db.Column(db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) player_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) count = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
class Postcard(db.Model): __tablename__ = 'postcard' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) cost = db.Column(db.Integer, nullable=False, server_default=db.text("10")) enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class Location(db.Model): __tablename__ = 'location' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) legacy_inventory = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) vanilla_inventory = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class IglooFurniture(db.Model): __tablename__ = 'igloo_furniture' igloo_id = db.Column(db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False, index=True) furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) x = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) y = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) frame = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) rotation = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
class PenguinMembership(db.Model): __tablename__ = 'penguin_membership' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) start = db.Column(db.DateTime, primary_key=True, nullable=False) expires = db.Column(db.DateTime) start_aware = db.Column(db.Boolean, server_default=db.text("false")) expires_aware = db.Column(db.Boolean, server_default=db.text("false")) expired_aware = db.Column(db.Boolean, server_default=db.text("false"))
class Furniture(db.Model): __tablename__ = 'furniture' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) sort = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) legacy_inventory = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) vanilla_inventory = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) bait = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) max_quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) innocent = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class Permission(db.Model): __tablename__ = 'permission' name = db.Column(db.String(50), nullable=False, primary_key=True) enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("true"))
class QuestTask(db.Model): __tablename__ = 'quest_task' id = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"quest_id_seq\"'::regclass)")) quest_id = db.Column(db.ForeignKey('quest.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) description = db.Column(db.String(50), nullable=False) room_id = db.Column(db.ForeignKey('room.id', ondelete='CASCADE', onupdate='CASCADE')) data = db.Column(db.String(50))
class PenguinQuestTask(db.Model): __tablename__ = 'penguin_quest_task' task_id = db.Column(db.ForeignKey('quest_task.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, primary_key=True) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, primary_key=True) complete = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class QuestAwardFurniture(db.Model): __tablename__ = 'quest_award_furniture' quest_id = db.Column(db.ForeignKey('quest.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class QuestAwardPuffleItem(db.Model): __tablename__ = 'quest_award_puffle_item' quest_id = db.Column(db.ForeignKey('quest.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) puffle_item_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class RoomWaddle(db.Model): __tablename__ = 'room_waddle' id = db.Column(db.Integer, primary_key=True, nullable=False) room_id = db.Column(db.ForeignKey('room.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) seats = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2")) game = db.Column(db.String(20), nullable=False) def __init__(self, *args, **kwargs): self.temporary = kwargs.pop('temporary', False) self.penguins = [] self.logic = None self.room = None super().__init__(*args, **kwargs) async def add_penguin(self, p): seat_id = self.penguins.index(None) self.penguins[seat_id] = p await p.send_xt('jw', seat_id) await p.room.send_xt('uw', self.id, seat_id, p.safe_name, p.id) p.waddle = self if self.penguins.count(None) == 0: game_instance = self.logic(self) await game_instance.start() await self.reset() if self.temporary: del self.room.waddles[self.id] async def remove_penguin(self, p): seat_id = self.get_seat_id(p) self.penguins[seat_id] = None await p.room.send_xt('uw', self.id, seat_id) p.waddle = None if self.temporary and self.penguins.count(None) == self.seats: del self.room.waddles[self.id] async def reset(self): for seat_id, penguin in enumerate(self.penguins): if penguin: self.penguins[seat_id] = None await penguin.room.send_xt('uw', self.id, seat_id) def get_seat_id(self, p): return self.penguins.index(p)
class Login(db.Model): __tablename__ = 'login' id = db.Column( db.Integer, primary_key=True, server_default=db.text("nextval('\"login_id_seq\"'::regclass)")) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) ip_hash = db.Column(db.CHAR(255), nullable=False) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
class Stamp(db.Model): __tablename__ = 'stamp' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) group_id = db.Column(db.ForeignKey('stamp_group.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying"))
class PenguinGameData(db.Model): __tablename__ = 'penguin_game_data' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='RESTRICT', onupdate='CASCADE'), primary_key=True, nullable=False) room_id = db.Column(db.ForeignKey('room.id', ondelete='RESTRICT', onupdate='CASCADE'), primary_key=True, nullable=False, index=True) index = db.Column(db.Integer, primary_key=True, index=True) data = db.Column(db.Text, nullable=False, server_default=db.text("''"))
class EpfComMessage(db.Model): __tablename__ = 'epf_com_message' message = db.Column(db.Text, nullable=False) character_id = db.Column(db.ForeignKey('character.id', ondelete='RESTRICT', onupdate='CASCADE'), nullable=False) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
class PenguinCard(db.Model): __tablename__ = 'penguin_card' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False, index=True) card_id = db.Column(db.ForeignKey('card.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) member_quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
class CfcDonation(db.Model): __tablename__ = 'cfc_donation' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) coins = db.Column(db.Integer, nullable=False) charity = db.Column(db.Integer, nullable=False) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
class CoverItem(db.Model): __tablename__ = 'cover_item' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) x = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) y = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) rotation = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) depth = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
class Card(db.Model): __tablename__ = 'card' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) set_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) power_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) element = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'s'::bpchar")) color = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'b'::bpchar")) value = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2")) description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) def get_string(self): return f'{self.id}|{self.element}|{self.value}|{self.color}|{self.power_id}'
class PuffleItem(db.Model): __tablename__ = 'puffle_item' id = db.Column(db.Integer, primary_key=True) parent_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying")) type = db.Column(db.String(10), nullable=False, server_default=db.text("'care'::character varying")) play_external = db.Column( db.String(10), nullable=False, server_default=db.text("'none'::character varying")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) food_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) rest_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) play_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) clean_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
class Puffle(db.Model): __tablename__ = 'puffle' id = db.Column(db.Integer, primary_key=True) parent_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) favourite_food = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) favourite_toy = db.Column( db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE')) runaway_postcard = db.Column( db.ForeignKey('postcard.id', ondelete='CASCADE', onupdate='CASCADE'))
class CharacterBuddy(db.Model): __tablename__ = 'character_buddy' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) character_id = db.Column(db.ForeignKey('character.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) best_buddy = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PenguinPuffleItem(db.Model): __tablename__ = 'penguin_puffle_item' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) item_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class PenguinStamp(db.Model): __tablename__ = 'penguin_stamp' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) stamp_id = db.Column(db.ForeignKey('stamp.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) recent = db.Column(db.Boolean, nullable=False, server_default=db.text("true"))
class BuddyList(db.Model): __tablename__ = 'buddy_list' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) buddy_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False, index=True) best_buddy = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class CardStarterDeck(db.Model): __tablename__ = 'card_starter_deck' item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False, index=True) card_id = db.Column(db.ForeignKey('card.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))