Exemple #1
0
def getship():
    dock = int(request.values.get("api_kdock_id"))
    try:
        data = DockHelper.get_and_remove_ship(dockid=dock)
    except (IndexError, AttributeError):
        return svdata({}, code=201, message='申し訳ありませんがブラウザを再起動し再ログインしてください。')
    return svdata(data)
Exemple #2
0
def getship():
    dock = int(request.values.get("api_kdock_id"))
    try:
        data = _DockHelper.get_and_remove_ship(dockid=dock)
    except (IndexError, AttributeError):
        return svdata({}, code=201, message='申し訳ありませんがブラウザを再起動し再ログインしてください。')
    return svdata(data)
Exemple #3
0
def change_position():
    # TODO UNFUCK THIS CODE UP
    admiral = get_token_admiral_or_error()
    # Get request parameters
    fleet_id = int(request.values.get("api_id")) - 1
    ship_id = int(request.values.get("api_ship_id")) - 1
    ship_pos = int(request.values.get("api_ship_idx"))
    fleet = admiral.fleets.all()[fleet_id]
    fships = fleet.ships.all()

    print(ship_id, ship_pos)
    if ship_id == -2:
        # Delete ship.
        oldship = fships[ship_pos]
        oldship.local_fleet_num = None
        fships.remove(oldship)
        # Get the rest of the ships, and bump it down.
        for n, ship in enumerate(fships):
            if n > ship_id:
                ship.local_fleet_num -= 1
                fships[n] = ship
        fleet.ships = fships
    elif len(fships) == ship_pos:
        # Append to the ships list
        if admiral.admiral_ships.filter_by(local_ship_num=ship_id).first() in fships:
            pass
        else:
            # Get the first ship, update the local fleet num, and append it to the fleet.
            nship = admiral.admiral_ships.filter_by(local_ship_num=ship_id).first()
            nship.local_fleet_num = ship_pos
            fships.append(nship)
            fleet.ships = fships
    else:
        # Get the original ship.
        original_ship = fships[ship_pos]
        # Get the new ship.
        new_ship = fleet.ships.filter_by(local_ship_num=ship_id).first()
        if new_ship is None:
            # BLEH
            original_ship.local_fleet_num = None
            original_ship.fleet_id = None
            db.session.add(original_ship)
            new_ship = admiral.admiral_ships.filter_by(local_ship_num=ship_id).first()
            new_ship.local_fleet_num = ship_pos
            fleet.ships.append(new_ship)
            db.session.add(fleet)
            db.session.commit()
            return svdata({})
        # Do the bullshit swap.
        original_ship.local_fleet_num, new_ship.local_fleet_num = new_ship.local_fleet_num, original_ship.local_fleet_num
        # Eww, merge ships back into the admiral_ships table
        db.session.add(original_ship)
        db.session.add(new_ship)

    # Update the fleet.
    db.session.add(fleet)
    db.session.commit()
    return svdata({})
Exemple #4
0
def firstship():
    admiral = get_token_admiral_or_error()
    if admiral.setup:
        return svdata({'api_result_msg': "Nice try.", 'api_result': 200})
    shipid = request.values.get("api_ship_id")
    new_admiral = AdmiralHelper.setup(shipid, admiral)
    db.db.session.add(new_admiral)
    db.db.session.commit()
    return svdata({'api_result_msg': 'shitty api is shitty', 'api_result': 1})
Exemple #5
0
def firstship():
    admiral = get_token_admiral_or_error()
    if admiral.setup:
        return svdata({'api_result_msg': "Nice try.", 'api_result': 200})
    shipid = request.values.get("api_ship_id")
    ShipHelper.assign_ship(admiral, shipid)

    admiral.setup = True

    db.session.add(admiral)
    db.session.commit()
    return svdata({'api_result_msg': 'shitty api is shitty', 'api_result': 1})
Exemple #6
0
def firstship():
    admiral = get_token_admiral_or_error()
    if admiral.setup:
        return svdata({'api_result_msg': "Nice try.", 'api_result': 200})
    shipid = request.values.get("api_ship_id")
    ShipHelper.assign_ship(admiral, shipid)

    admiral.setup = True

    db.session.add(admiral)
    db.session.commit()
    return svdata({'api_result_msg': 'shitty api is shitty', 'api_result': 1})
Exemple #7
0
def lock():
    admiral = get_token_admiral_or_error()
    admiralship = admiral.admiral_ships.filter_by(local_ship_num=int(request.values.get("api_ship_id"))).first()
    admiralship.heartlocked = True
    db.db.session.add(admiralship)
    db.db.session.commit()
    return svdata({})
Exemple #8
0
def slotset():
    admiral = get_token_admiral_or_error()
    admiral_ship_id = request.values.get("api_id")
    admiral_item_id = request.values.get("api_item_id")
    slot = request.values.get("api_slot_idx")
    _ShipHelper.change_ship_item(admiral_ship_id, admiral_item_id, slot)
    return svdata({'api_result_msg': 'ok', 'api_result': 1})
Exemple #9
0
def powerup():
    id = request.values.get("api_id")
    id_items = request.values.get("api_id_items").split(
        ',')  # How mean girls aren't items
    result = Kanmusu.get(id).modernize(id_items)
    db.session.commit()
    return svdata(MemberHelper.powerup(id, result))
Exemple #10
0
def furniture():
    """Available furniture."""
    # TODO: Implement this properly
    return svdata([{
                       'api_member_id': g.admiral.id, 'api_id': item.id, 'api_furniture_type': item.type,
                       'api_furniture_no': item.no, 'api_furniture_id': item.id
                   } for item in []])
Exemple #11
0
def slotset():
    admiral = get_token_admiral_or_error()
    admiral_ship_id = request.values.get("api_id")
    admiral_item_id = request.values.get("api_item_id")
    slot = request.values.get("api_slot_idx")
    ShipHelper.change_ship_item(admiral_ship_id, admiral_item_id, slot)
    return svdata({'api_result_msg': 'ok', 'api_result': 1})
Exemple #12
0
def build():
    fuel = int(request.values.get("api_item1"))
    ammo = int(request.values.get("api_item2"))
    steel = int(request.values.get("api_item3"))
    baux = int(request.values.get("api_item4"))
    dock = int(request.values.get("api_kdock_id")) - 1
    DockHelper.craft_ship(fuel, ammo, steel, baux, dock)
    return svdata({})
Exemple #13
0
def slotset():
    id = request.values.get("api_id")
    equip_id = request.values.get("api_item_id")
    slot = request.values.get("api_slot_idx")

    Kanmusu.get(id).equip(admiral_equip_id=equip_id, slot=slot)
    db.session.commit()
    return svdata({})
Exemple #14
0
def build():
    fuel = int(request.values.get("api_item1"))
    ammo = int(request.values.get("api_item2"))
    steel = int(request.values.get("api_item3"))
    baux = int(request.values.get("api_item4"))
    dock = int(request.values.get("api_kdock_id")) - 1
    DockHelper.craft_ship(fuel, ammo, steel, baux, dock)
    return svdata({})
Exemple #15
0
def slotset():
    id = request.values.get("api_id")
    equip_id = request.values.get("api_item_id")
    slot = request.values.get("api_slot_idx")

    Kanmusu.get(id).equip(admiral_equip_id=equip_id, slot=slot)
    db.session.commit()
    return svdata({})
Exemple #16
0
def record():
    data = {
        "api_member_id": g.admiral.id,
        "api_nickname": g.admiral.name,
        "api_nickname_id": str(g.admiral.id),
        "api_cmt": "",
        "api_cmt_id": "",
        "api_photo_url": "",
        "api_rank": g.admiral.rank,
        "api_level": g.admiral.level,
        "api_experience": [
            g.admiral.experience,
            # Exp to next level
            sum(HQ_LEVEL[:g.admiral.level + 1])
        ],
        # api_war -> sorties
        "api_war": {
            "api_win": str(g.admiral.sortie_successes),
            "api_lose": str(g.admiral.sortie_total - g.admiral.sortie_successes),
            "api_rate": str(round((g.admiral.sortie_successes / g.admiral.sortie_total)
                                  if g.admiral.sortie_total else 0, 2))
        },
        # api_mission -> expeditions
        "api_mission": {
            "api_count": str(g.admiral.expedition_total),
            "api_success": str(g.admiral.expedition_successes),
            "api_rate": str(round(((g.admiral.expedition_total / g.admiral.expedition_successes) * 100)
                                  if g.admiral.expedition_successes else 0, 2))
            # Full percentage. Not rounded percentage. Stupid kc
        },
        "api_practice": {
            "api_win": str(g.admiral.pvp_successes),
            "api_lose": str(g.admiral.pvp_total - g.admiral.pvp_successes),
            "api_rate": str(round((g.admiral.pvp_total / g.admiral.pvp_successes)
                                  if g.admiral.pvp_successes else 0, 2))
        },
        "api_friend": 0,  # No idea
        "api_deck": len(g.admiral.fleets),
        "api_kdoc": len(g.admiral.docks_craft),
        "api_ndoc": len(g.admiral.docks_repair),
        "api_ship": [  # Current amount, max
            len(g.admiral.kanmusu),
            999999
        ],
        "api_slotitem": [
            len(g.admiral.equipment.all()),
            9999999
        ],
        "api_furniture": 8,  # Not sure
        "api_complate": [
            "0.0",
            "0.0"
        ],  # Not sure
        "api_large_dock": 1,
        "api_material_max": 1000000  # Maximum materials
    }
    return svdata(data)
Exemple #17
0
def build():
    admiral = get_token_admiral_or_error()
    fuel = int(request.values.get("api_item1"))
    ammo = int(request.values.get("api_item2"))
    steel = int(request.values.get("api_item3"))
    baux = int(request.values.get("api_item4"))
    dock = int(request.values.get("api_kdock_id")) # -1 # For some reason, it doesn't need minusing one. ¯\_(ツ)_/¯
    _DockHelper.craft_ship(fuel, ammo, steel, baux, admiral, dock)
    return svdata({})
Exemple #18
0
def furniture():
    """Available furniture."""
    # TODO: Implement this properly
    return svdata([{
        'api_member_id': g.admiral.id,
        'api_id': item.id,
        'api_furniture_type': item.type,
        'api_furniture_no': item.no,
        'api_furniture_id': item.id
    } for item in []])
Exemple #19
0
def lock():
    """Heartlock/unheartlock a ship."""
    admiral = get_token_admiral_or_error()
    admiralship = admiral.admiral_ships.filter_by(local_ship_num=int(request.values.get("api_ship_id")) - 1).first()

    locked = not admiralship.heartlocked

    admiralship.heartlocked = locked
    db.session.add(admiralship)
    db.session.commit()
    return svdata({"api_locked": int(locked)})
Exemple #20
0
def build():
    admiral = get_token_admiral_or_error()
    fuel = int(request.values.get("api_item1"))
    ammo = int(request.values.get("api_item2"))
    steel = int(request.values.get("api_item3"))
    baux = int(request.values.get("api_item4"))
    dock = int(
        request.values.get("api_kdock_id")
    )  # -1 # For some reason, it doesn't need minusing one. ¯\_(ツ)_/¯
    DockHelper.craft_ship(fuel, ammo, steel, baux, admiral, dock)
    return svdata({})
Exemple #21
0
def ship3():
    admiral = g.admiral
    # No idea.
    # spi_sort_order = request.values.get('spi_sort_order')
    # spi_sort_order = request.values.get('api_sort_key')
    admiral_ship_id = request.values.get('api_shipid')
    data = {
        "api_ship_data": [_ShipHelper.get_admiral_ship_api_data(
            admiral_ship_id)], "api_deck_data": AdmiralHelper.get_admiral_deck_api_data(
            admiral), "api_slot_data": _ItemHelper.get_slottype_list(admiral=admiral)
    }
    return svdata(data)
Exemple #22
0
def lock():
    """Heartlock/unheartlock a ship."""
    admiral = get_token_admiral_or_error()
    admiralship = admiral.admiral_ships.filter_by(
        local_ship_num=int(request.values.get("api_ship_id")) - 1).first()

    locked = not admiralship.heartlocked

    admiralship.heartlocked = locked
    db.session.add(admiralship)
    db.session.commit()
    return svdata({"api_locked": int(locked)})
Exemple #23
0
def mission():
    # Gets list of expeditions.
    # This is a simple query that lists all expeditions.
    # If the admiral has completed them, it will respond with the appropriate state.
    # Note that expedition details are stored in api_start2.
    expd = Expedition.query.all()
    states = {}
    for e in expd:
        if e in g.admiral.expeditions:
            states[e.id] = 2
        else:
            states[e.id] = 0
    return svdata([OrderedDict(api_mission_id=id, api_state=state) for (id, state) in states.items()])
Exemple #24
0
def ship3():
    admiral = g.admiral
    # No idea.
    # spi_sort_order = request.values.get('spi_sort_order')
    # spi_sort_order = request.values.get('api_sort_key')
    admiral_ship_id = request.values.get('api_shipid')
    data = {
        "api_ship_data":
        [_ShipHelper.get_admiral_ship_api_data(admiral_ship_id)],
        "api_deck_data": AdmiralHelper.get_admiral_deck_api_data(admiral),
        "api_slot_data": _ItemHelper.get_slottype_list(admiral=admiral)
    }
    return svdata(data)
Exemple #25
0
def start_mission():
    # This is mostly an internal method.
    # This sets up the fleet for an expedition, sending them out.

    # First, get the required data from the request.
    fleet_id = int(request.values.get("api_deck_id")) - 1
    expedition_id = int(request.values.get("api_mission_id"))
    # There's an extra value, api_mission.
    # No idea what it does.

    # Also, api_serial_cid
    # This is presumably an anti-bot method by DMM.
    # We don't have these, because we don't have the game source code (and never will)
    # So we ignore this

    # Get the expedition requested by the ID.
    expedition = Expedition.query.filter(
        Expedition.id == expedition_id).first_or_404()

    # Get the fleet requested by the ID.
    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        abort(404)
        return

    # Set the fleet up.
    if fleet.expedition is not None:
        # Nice try.
        abort(400)
        return

    # Set the expedition && time.
    fleet.expedition = expedition
    fleet.expedition_completed = time.time() + expedition.time_taken

    db.session.add(fleet)
    db.session.commit()

    # Internal state updated, now to reflect this state on the rest of the app.
    return svdata({
        "api_complatetime":
        util.millisecond_timestamp(datetime.datetime.now() +
                                   datetime.timedelta(
                                       seconds=expedition.time_taken)),
        "api_complatetime_str":
        datetime.datetime.fromtimestamp(fleet.expedition_completed /
                                        1000).strftime('%Y-%m-%d %H:%M:%S')
    })
Exemple #26
0
def lock():
    """Heartlock/unheartlock a ship."""
    try:
        kanmusu = g.admiral.kanmusu[int(request.values.get("api_ship_id")) - 1]
    except IndexError:
        abort(404)
        return
    except ValueError:
        abort(400)
        return
    kanmusu.locked = not kanmusu.locked

    db.session.add(kanmusu)
    db.session.commit()
    return svdata({"api_locked": int(kanmusu.locked)})
Exemple #27
0
def cancel():
    """Cancels a mission"""
    fleet_id = int(request.values.get("api_deck_id")) - 1

    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        logger.warn("Fleet does not exist -> {}".format(fleet_id))
        abort(404)
        return

    fleet.expedition_cancelled = True
    db.session.add(fleet)
    db.session.commit()
    return svdata(MemberHelper.expedition(fleet, cancelled=True))
Exemple #28
0
def lock():
    """Heartlock/unheartlock a ship."""
    try:
        kanmusu = g.admiral.kanmusu[int(request.values.get("api_ship_id")) - 1]
    except IndexError:
        abort(404)
        return
    except ValueError:
        abort(400)
        return
    kanmusu.locked = not kanmusu.locked

    db.session.add(kanmusu)
    db.session.commit()
    return svdata({"api_locked": int(kanmusu.locked)})
Exemple #29
0
def cancel():
    """Cancels a mission"""
    fleet_id = int(request.values.get("api_deck_id")) - 1

    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        logger.warn("Fleet does not exist -> {}".format(fleet_id))
        abort(404)
        return

    fleet.expedition_cancelled = True
    db.session.add(fleet)
    db.session.commit()
    return svdata(MemberHelper.expedition(fleet, cancelled=True))
Exemple #30
0
def mission():
    # Gets list of expeditions.
    # This is a simple query that lists all expeditions.
    # If the admiral has completed them, it will respond with the appropriate state.
    # Note that expedition details are stored in api_start2.
    expd = Expedition.query.all()
    states = {}
    for e in expd:
        if e in g.admiral.expeditions:
            states[e.id] = 2
        else:
            states[e.id] = 0
    return svdata([
        OrderedDict(api_mission_id=id, api_state=state)
        for (id, state) in states.items()
    ])
Exemple #31
0
def start_mission():
    # This is mostly an internal method.
    # This sets up the fleet for an expedition, sending them out.

    # First, get the required data from the request.
    fleet_id = int(request.values.get("api_deck_id")) - 1
    expedition_id = int(request.values.get("api_mission_id"))
    # There's an extra value, api_mission.
    # No idea what it does.

    # Also, api_serial_cid
    # This is presumably an anti-bot method by DMM.
    # We don't have these, because we don't have the game source code (and never will)
    # So we ignore this

    # Get the expedition requested by the ID.
    expedition = Expedition.query.filter(Expedition.id == expedition_id).first_or_404()

    # Get the fleet requested by the ID.
    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        abort(404)
        return

    # Set the fleet up.
    if fleet.expedition is not None:
        # Nice try.
        abort(400)
        return

    # Set the expedition && time.
    fleet.expedition = expedition
    fleet.expedition_completed = time.time() + expedition.time_taken

    db.session.add(fleet)
    db.session.commit()

    # Internal state updated, now to reflect this state on the rest of the app.
    return svdata(
        {"api_complatetime": util.
            millisecond_timestamp(datetime.datetime.now() + datetime.timedelta(seconds=expedition.time_taken)),
         "api_complatetime_str": datetime.datetime.fromtimestamp(fleet.expedition_completed / 1000)
            .strftime('%Y-%m-%d %H:%M:%S')
         })
Exemple #32
0
def resupply():
    # Get the ships. Misleading name of the year candidate.
    ships = request.values.get("api_id_items")
    ships = ships.split(',')
    ships = [int(_) for _ in ships]
    # Get kind.
    kind = int(request.values.get("api_kind"))
    api_ship = []
    # New dict for api_ships
    for ship_id in ships:
        ship = Kanmusu.query.filter(Admiral.id == g.admiral.id,
                                    Kanmusu.number == ship_id).first_or_404()
        # Assertion for autocompletion in pycharm
        assert isinstance(ship, Kanmusu)
        # Calculate requirements.
        # Simply replenish up to the maximum stats amount.
        if kind == 1:
            g.admiral.resources.sub(ship.stats.fuel - ship.current_fuel, 0, 0,
                                    0)
            ship.current_fuel = ship.stats.fuel
        elif kind == 2:
            g.admiral.resources.sub(0, ship.stats.ammo - ship.current_ammo, 0,
                                    0)
            ship.current_ammo = ship.stats.ammo
        elif kind == 3:
            g.admiral.resources.sub(ship.stats.fuel - ship.current_fuel, 0, 0,
                                    0)
            ship.current_fuel = ship.stats.fuel
            g.admiral.resources.sub(0, ship.stats.ammo - ship.current_ammo, 0,
                                    0)
            ship.current_ammo = ship.stats.ammo
        api_ship.append({
            "api_id": ship.number,
            "api_fuel": ship.current_fuel,
            "api_bull": ship.current_ammo,
            "api_onslot": [0, 0, 0, 0, 0]  # ???
        })
        db.session.add(ship)
    db.session.add(g.admiral)
    db.session.commit()
    return svdata({
        "api_ship": api_ship,
        "api_material": g.admiral.resources.to_list()
    })
Exemple #33
0
def resupply():
    # Get the ships. Misleading name of the year candidate.
    ships = request.values.get("api_id_items")
    ships = ships.split(',')
    ships = [int(_) for _ in ships]
    # Get kind.
    kind = int(request.values.get("api_kind"))
    api_ship = []
    # New dict for api_ships
    for ship_id in ships:
        ship = Kanmusu.query.filter(Admiral.id == g.admiral.id, Kanmusu.number == ship_id).first_or_404()
        # Assertion for autocompletion in pycharm
        assert isinstance(ship, Kanmusu)
        # Calculate requirements.
        # Simply replenish up to the maximum stats amount.
        if kind == 1:
            g.admiral.resources.sub(ship.stats.fuel - ship.current_fuel, 0, 0, 0)
            ship.current_fuel = ship.stats.fuel
        elif kind == 2:
            g.admiral.resources.sub(0, ship.stats.ammo - ship.current_ammo, 0, 0)
            ship.current_ammo = ship.stats.ammo
        elif kind == 3:
            g.admiral.resources.sub(ship.stats.fuel - ship.current_fuel, 0, 0, 0)
            ship.current_fuel = ship.stats.fuel
            g.admiral.resources.sub(0, ship.stats.ammo - ship.current_ammo, 0, 0)
            ship.current_ammo = ship.stats.ammo
        api_ship.append({
            "api_id": ship.number,
            "api_fuel": ship.current_fuel,
            "api_bull": ship.current_ammo,
            "api_onslot": [0, 0, 0, 0, 0]  # ???
        })
        db.session.add(ship)
    db.session.add(g.admiral)
    db.session.commit()
    return svdata({"api_ship": api_ship, "api_material": g.admiral.resources.to_list()})
Exemple #34
0
def record():
    data = {
        "api_member_id":
        g.admiral.id,
        "api_nickname":
        g.admiral.name,
        "api_nickname_id":
        str(g.admiral.id),
        "api_cmt":
        "",
        "api_cmt_id":
        "",
        "api_photo_url":
        "",
        "api_rank":
        g.admiral.rank,
        "api_level":
        g.admiral.level,
        "api_experience": [
            g.admiral.experience,
            # Exp to next level
            sum(HQ_LEVEL[:g.admiral.level + 1])
        ],
        # api_war -> sorties
        "api_war": {
            "api_win":
            str(g.admiral.sortie_successes),
            "api_lose":
            str(g.admiral.sortie_total - g.admiral.sortie_successes),
            "api_rate":
            str(
                round(
                    (g.admiral.sortie_successes /
                     g.admiral.sortie_total) if g.admiral.sortie_total else 0,
                    2))
        },
        # api_mission -> expeditions
        "api_mission": {
            "api_count":
            str(g.admiral.expedition_total),
            "api_success":
            str(g.admiral.expedition_successes),
            "api_rate":
            str(
                round(((g.admiral.expedition_total /
                        g.admiral.expedition_successes) *
                       100) if g.admiral.expedition_successes else 0, 2))
            # Full percentage. Not rounded percentage. Stupid kc
        },
        "api_practice": {
            "api_win":
            str(g.admiral.pvp_successes),
            "api_lose":
            str(g.admiral.pvp_total - g.admiral.pvp_successes),
            "api_rate":
            str(
                round((g.admiral.pvp_total / g.admiral.pvp_successes)
                      if g.admiral.pvp_successes else 0, 2))
        },
        "api_friend":
        0,  # No idea
        "api_deck":
        len(g.admiral.fleets),
        "api_kdoc":
        len(g.admiral.docks_craft),
        "api_ndoc":
        len(g.admiral.docks_repair),
        "api_ship": [  # Current amount, max
            len(g.admiral.kanmusu), 999999
        ],
        "api_slotitem": [len(g.admiral.equipment.all()), 9999999],
        "api_furniture":
        8,  # Not sure
        "api_complate": ["0.0", "0.0"],  # Not sure
        "api_large_dock":
        1,
        "api_material_max":
        1000000  # Maximum materials
    }
    return svdata(data)
Exemple #35
0
def slot_item():
    return svdata(MemberHelper.slot_info())
Exemple #36
0
def get_incentive():
    return svdata({
        'api_count': 0
    })  # What?
Exemple #37
0
def getship():
    dock = int(request.values.get("api_kdock_id")) - 1
    data = DockHelper.get_and_remove_ship_kdock(dockid=dock)
    return svdata(data)
Exemple #38
0
def ship2():
    """F**k ship2."""
    """Agreed."""
    return svdata({})
Exemple #39
0
def ship3():
    kanmusu_id = request.values.get('api_shipid')
    return svdata(MemberHelper.ship3(kanmusu_id))
Exemple #40
0
def ndock():
    return svdata(MemberHelper.rdock())
Exemple #41
0
def useitem():
    # TODO: Implement this properly
    return svdata(MemberHelper.useitem())
Exemple #42
0
def basic():
    """Basic admiral data."""
    return svdata(MemberHelper.basic())
Exemple #43
0
def fleets():
    return svdata([fleet(fleet_) for fleet_ in g.admiral.fleets])
Exemple #44
0
def remodeling():
    id = request.values.get("api_id")
    Kanmusu.get(id).remodel()  # If it only were that easy...
    return svdata({})
Exemple #45
0
def expd_result():
    # Horrible bastard code to get the result of the expedition.
    fleet_id = int(request.values.get("api_deck_id")) - 1

    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        logger.warn("Fleet does not exist -> {}".format(fleet_id))
        abort(404)
        return

    if not fleet.expedition:
        logger.warn("Fleet not on expedition -> {}".format(fleet))
        abort(400)
        return

    # Similar to the official servers, we calculate everything in expd_result
    # instead of calculating everything in mission. Meaning nobody knows the result of the expedition until this
    # method is called and it's all calculated.

    # Check the timings.
    if fleet.expedition_completed >= time.time() and not fleet.expedition_cancelled:
        logger.warn("Expedition_Completed ({}) >= Current Time ({})".format(fleet.expedition_completed, time.time()))
        # Don't cheat.
        abort(400)
        return

    # What did the fleet look like again?
    res = fleet.expedition.constraints
    assert isinstance(res, dict)

    # Check in order.
    hq_level_min = res.get("hq_level_min", 0)
    required_ships = res.get("required_ships", {})

    # Enter the world's hackiest solution.
    def check_requirements():
        # This inline-function allows us to check the requirements then exit if needed.

        # First, check HQ level.
        if hq_level_min > g.admiral.level:
            return False
        # Next, check ships.
        else:
            min_ships_total = required_ships.get("min_ships_total", 1)
            if len(fleet.kanmusu) < min_ships_total:
                return False
            ship_types = {}
            for kanmusu in fleet.kanmusu:
                if kanmusu.ship.type_ not in ship_types:
                    ship_types[kanmusu.ship.type_] = 0
                ship_types[kanmusu.ship.type_] += 1
            # Check expedition restrictions
            types = required_ships.get("ship_types", {})
            for t, amount in types.items():
                if ship_types.get(t, 0) < amount:
                    return False
        return True

    if not fleet.expedition_cancelled:
        met_requirements = check_requirements()
    else:
        met_requirements = False

    # Update internal state.
    g.admiral.expedition_total += 1
    g.admiral.expeditions.append(fleet.expedition)
    if met_requirements:
        g.admiral.expedition_successes += 1
        g.admiral.experience += 30
        g.admiral.fix_level()

        api_exp_get = []

        # Level up the kanmusus.
        for kanmusu in fleet.kanmusu:
            # Expeditions are not a good way of levelling up
            kanmusu.experience += (kanmusu.level * 3)
            api_exp_get.append(kanmusu.level * 3)
            kanmusu.fix_level()

        # Update resources.
        g.admiral.resources.add(*fleet.expedition.resources_granted.to_list())
    else:
        g.admiral.experience += 5
        g.admiral.fix_level()

        api_exp_get = [0 for _ in fleet.kanmusu]

    # Update ship resource usage.
    for kanmusu in fleet.kanmusu:
        kanmusu.current_fuel = floor((kanmusu.current_fuel -
                                      (kanmusu.current_fuel / (fleet.expedition.resources_used.fuel / 10))))
        kanmusu.current_ammo = floor((kanmusu.current_ammo -
                                      (kanmusu.current_ammo / (fleet.expedition.resources_used.ammo / 10))))
        db.session.add(kanmusu)

    data = {
        "api_ship_id": [-1] + [kanmusu.number for kanmusu in fleet.kanmusu],
        "api_clear_result": int(met_requirements),
        "api_get_exp": 30 if met_requirements else 5 if not fleet.expedition_cancelled else 0,
        "api_member_lv": g.admiral.level,
        "api_member_exp": g.admiral.experience,
        "api_get_ship_exp": api_exp_get,
        "api_get_exp_lvup": [[kanmusu.experience, kanmusu.experience + kanmusu.get_exp_to_level()] for kanmusu in
                             fleet.kanmusu],
        "api_maparea_name": "???",
        "api_detail": "???",
        "api_quest_name": "Expedition {}".format(fleet.expedition.id),
        "api_quest_level": 1,
        "api_get_material": fleet.expedition.resources_granted.to_list() if met_requirements else -1,
        "api_useitem_flag": [
            0,
            0
        ]
    }
    fleet.expedition = None
    fleet.expedition_completed = None
    fleet.expedition_cancelled = None
    db.session.add(fleet)
    db.session.add(g.admiral)
    db.session.commit()
    sv = svdata(data)
    return sv
Exemple #46
0
def useitem():
    # TODO: Implement this properly
    return svdata(MemberHelper.useitem())
Exemple #47
0
def slot_item():
    return svdata(MemberHelper.slot_info())
Exemple #48
0
def kdock():
    """Krafting docks."""
    return svdata(MemberHelper.kdock())
Exemple #49
0
def kdock():
    """Krafting docks."""
    return svdata(MemberHelper.kdock())
Exemple #50
0
def ndock():
    return svdata(MemberHelper.rdock())
Exemple #51
0
def unsetslot():
    return svdata(MemberHelper.unsetslot())
Exemple #52
0
def unsetslot():
    return svdata(MemberHelper.unsetslot())
Exemple #53
0
def material():
    return svdata(MemberHelper.material())
Exemple #54
0
def material():
    return svdata(MemberHelper.material())
Exemple #55
0
def preset_deck():
    # TODO: Find what this does.
    return svdata({"api_max_num": len(g.admiral.fleets), "api_deck": {}})
Exemple #56
0
def ship3():
    kanmusu_id = request.values.get('api_shipid')
    return svdata(MemberHelper.ship3(kanmusu_id))
Exemple #57
0
def start2():
    return svdata(g.data_start2)
Exemple #58
0
def preset_deck():
    # TODO: Find what this does.
    return svdata({"api_max_num": len(g.admiral.fleets), "api_deck": {}})
Exemple #59
0
def expd_result():
    # Horrible bastard code to get the result of the expedition.
    fleet_id = int(request.values.get("api_deck_id")) - 1

    try:
        fleet = g.admiral.fleets[fleet_id]
    except IndexError:
        logger.warn("Fleet does not exist -> {}".format(fleet_id))
        abort(404)
        return

    if not fleet.expedition:
        logger.warn("Fleet not on expedition -> {}".format(fleet))
        abort(400)
        return

    # Similar to the official servers, we calculate everything in expd_result
    # instead of calculating everything in mission. Meaning nobody knows the result of the expedition until this
    # method is called and it's all calculated.

    # Check the timings.
    if fleet.expedition_completed >= time.time(
    ) and not fleet.expedition_cancelled:
        logger.warn("Expedition_Completed ({}) >= Current Time ({})".format(
            fleet.expedition_completed, time.time()))
        # Don't cheat.
        abort(400)
        return

    # What did the fleet look like again?
    res = fleet.expedition.constraints
    assert isinstance(res, dict)

    # Check in order.
    hq_level_min = res.get("hq_level_min", 0)
    required_ships = res.get("required_ships", {})

    # Enter the world's hackiest solution.
    def check_requirements():
        # This inline-function allows us to check the requirements then exit if needed.

        # First, check HQ level.
        if hq_level_min > g.admiral.level:
            return False
        # Next, check ships.
        else:
            min_ships_total = required_ships.get("min_ships_total", 1)
            if len(fleet.kanmusu) < min_ships_total:
                return False
            ship_types = {}
            for kanmusu in fleet.kanmusu:
                if kanmusu.ship.type_ not in ship_types:
                    ship_types[kanmusu.ship.type_] = 0
                ship_types[kanmusu.ship.type_] += 1
            # Check expedition restrictions
            types = required_ships.get("ship_types", {})
            for t, amount in types.items():
                if ship_types.get(t, 0) < amount:
                    return False
        return True

    if not fleet.expedition_cancelled:
        met_requirements = check_requirements()
    else:
        met_requirements = False

    # Update internal state.
    g.admiral.expedition_total += 1
    g.admiral.expeditions.append(fleet.expedition)
    if met_requirements:
        g.admiral.expedition_successes += 1
        g.admiral.experience += 30
        g.admiral.fix_level()

        api_exp_get = []

        # Level up the kanmusus.
        for kanmusu in fleet.kanmusu:
            # Expeditions are not a good way of levelling up
            kanmusu.experience += (kanmusu.level * 3)
            api_exp_get.append(kanmusu.level * 3)
            kanmusu.fix_level()

        # Update resources.
        g.admiral.resources.add(*fleet.expedition.resources_granted.to_list())
    else:
        g.admiral.experience += 5
        g.admiral.fix_level()

        api_exp_get = [0 for _ in fleet.kanmusu]

    # Update ship resource usage.
    for kanmusu in fleet.kanmusu:
        kanmusu.current_fuel = floor(
            (kanmusu.current_fuel -
             (kanmusu.current_fuel /
              (fleet.expedition.resources_used.fuel / 10))))
        kanmusu.current_ammo = floor(
            (kanmusu.current_ammo -
             (kanmusu.current_ammo /
              (fleet.expedition.resources_used.ammo / 10))))
        db.session.add(kanmusu)

    data = {
        "api_ship_id": [-1] + [kanmusu.number for kanmusu in fleet.kanmusu],
        "api_clear_result":
        int(met_requirements),
        "api_get_exp":
        30 if met_requirements else 5 if not fleet.expedition_cancelled else 0,
        "api_member_lv":
        g.admiral.level,
        "api_member_exp":
        g.admiral.experience,
        "api_get_ship_exp":
        api_exp_get,
        "api_get_exp_lvup":
        [[kanmusu.experience, kanmusu.experience + kanmusu.get_exp_to_level()]
         for kanmusu in fleet.kanmusu],
        "api_maparea_name":
        "???",
        "api_detail":
        "???",
        "api_quest_name":
        "Expedition {}".format(fleet.expedition.id),
        "api_quest_level":
        1,
        "api_get_material":
        fleet.expedition.resources_granted.to_list()
        if met_requirements else -1,
        "api_useitem_flag": [0, 0]
    }
    fleet.expedition = None
    fleet.expedition_completed = None
    fleet.expedition_cancelled = None
    db.session.add(fleet)
    db.session.add(g.admiral)
    db.session.commit()
    sv = svdata(data)
    return sv
Exemple #60
0
def basic():
    """Basic admiral data."""
    return svdata(MemberHelper.basic())