Пример #1
0
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),
        }
Пример #2
0
 def effect_4_value(cls):
     return CustomColumn(
         Float, mapper_key="지속값4",
         transform=lambda v: convert_integer(v) if v != 0 else None)
Пример #3
0
 def passive_3_value(cls):
     return CustomColumn(
         Float, mapper_key="패시브값3",
         transform=lambda v: convert_integer(v) if v != 0 else None)
Пример #4
0
 def data_2_correction_2(cls):
     return CustomColumn(
         Float, mapper_key="지능보정2_2",
         transform=lambda v: convert_integer(v) if v != 0 else None)
Пример #5
0
 def data_2_value(cls):
     return CustomColumn(
         Float, mapper_key="일시값2",
         transform=lambda v: convert_integer(v) if v != 0 else None)
Пример #6
0
 def toggle_hp_value(cls):
     return CustomColumn(
         Float, mapper_key="토글지속필요HP",
         transform=lambda v: convert_integer(v) if v != 0 else None
     )
Пример #7
0
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,
        }
Пример #8
0
def bonus_value_transform(
    value: int
) -> typing.Union[None, int, float]:
    return convert_integer(value) if value != 0 else None