class ShipAnchor( db.Model, ShipBaseMixin, DroppedByMixin, SoldByMixin, NeededForMixin, ProducedByMixin, RandomBoxMixin, ): __tablename__ = "ship_anchor" _mapper_utils = { "files": { "server": ["s_ShipAnchorItem.bin"], "client": ["c_ShipAnchorItemRes.bin"], "string": ["ShipAnchorItemStr.dat"], }, } turning_power = CustomColumn(db.Float, nullable=False, mapper_key="선회력", transform=convert_integer) deceleration = CustomColumn( db.Float, nullable=False, mapper_key="정선력", transform=lambda v: florensia_sea_meter_transform(convert_integer(v))) balance = CustomColumn( db.Integer, nullable=False, mapper_key="벨런스", ) def to_dict(self, minimal: bool = False) -> dict: minimal_dict = ShipBaseMixin.to_dict(self) if minimal: return minimal_dict return { **minimal_dict, "turning_power": self.turning_power, "deceleration": self.deceleration, "balance": self.balance, **DroppedByMixin.to_dict(self), **ProducedByMixin.to_dict(self), **NeededForMixin.to_dict(self), **RandomBoxMixin.to_dict(self), **SoldByMixin.to_dict(self), }
def effect_4_value(cls): return CustomColumn( Float, mapper_key="지속값4", transform=lambda v: convert_integer(v) if v != 0 else None)
def passive_3_value(cls): return CustomColumn( Float, mapper_key="패시브값3", transform=lambda v: convert_integer(v) if v != 0 else None)
def data_2_correction_2(cls): return CustomColumn( Float, mapper_key="지능보정2_2", transform=lambda v: convert_integer(v) if v != 0 else None)
def data_2_value(cls): return CustomColumn( Float, mapper_key="일시값2", transform=lambda v: convert_integer(v) if v != 0 else None)
def toggle_hp_value(cls): return CustomColumn( Float, mapper_key="토글지속필요HP", transform=lambda v: convert_integer(v) if v != 0 else None )
class UpgradeRule(db.Model): __tablename__ = "upgrade_rule" _mapper_utils = { "files": { "server": ["s_UpgradeRule.bin"], }, } index = db.Column(db.Integer, primary_key=True, autoincrement=True) code = CustomColumn( db.String(32), nullable=False, mapper_key="코드", # Replaces the last two numbers of each code # to 00 to allow for easier querying. # e.g. ruoh0107 -> ruoh0100 transform=lambda v: v[:-2] + "00") upgrade_level = CustomColumn(db.Integer, nullable=False, mapper_key="업그레이드레벨") upgrade_cost = CustomColumn(db.Integer, nullable=False, mapper_key="강화소모gelt") # Effect 0 effect_0_code = CustomColumn(db.Integer, mapper_key="효과코드0", transform=lambda v: v if v != MAX_INT else None) effect_0_operator = CustomColumn(db.String, mapper_key="연산자0") effect_0_value = CustomColumn(db.Float, mapper_key="효과값0", transform=lambda v: convert_integer(v) if v != MAX_INT else None) # Effect 1 effect_1_code = CustomColumn(db.Integer, mapper_key="효과코드1", transform=lambda v: v if v != MAX_INT else None) effect_1_operator = CustomColumn(db.String, mapper_key="연산자1") effect_1_value = CustomColumn(db.Float, mapper_key="효과값1", transform=lambda v: convert_integer(v) if v != MAX_INT else None) # Effect 2 effect_2_code = CustomColumn(db.Integer, mapper_key="효과코드2", transform=lambda v: v if v != MAX_INT else None) effect_2_operator = CustomColumn(db.String, mapper_key="연산자2") effect_2_value = CustomColumn(db.Float, mapper_key="효과값2", transform=lambda v: convert_integer(v) if v != MAX_INT else None) # Effect 3 effect_3_code = CustomColumn(db.Integer, mapper_key="효과코드3", transform=lambda v: v if v != MAX_INT else None) effect_3_operator = CustomColumn(db.String, mapper_key="연산자3") effect_3_value = CustomColumn(db.Float, mapper_key="효과값3", transform=lambda v: convert_integer(v) if v != MAX_INT else None) def to_dict(self) -> dict: # Here, effects are not grouped in a list as # they have to be referenced by the number later. effects = {} for i in range(0, 4): effects[f"effect_{i}"] = { "code": getattr(self, f"effect_{i}_code"), "operator": getattr(self, f"effect_{i}_operator"), "value": getattr(self, f"effect_{i}_value"), } return { "code": self.code, "upgrade_level": self.upgrade_level, "upgrade_cost": self.upgrade_cost, "effects": effects, }
def bonus_value_transform( value: int ) -> typing.Union[None, int, float]: return convert_integer(value) if value != 0 else None