Exemplo n.º 1
0
async def sync_shape_update(layer, room: Room, data, sid, shape):
    for psid, player in state.get_players(room=room):
        if psid == sid:
            continue
        pdata = {el: data[el] for el in data if el != "shape"}
        if data["temporary"]:
            if player != room.creator and player.name not in data["shape"][
                    "owners"]:
                pdata["shape"] = deepcopy(data["shape"])
                # Although we have no guarantees that the message is faked, we still would like to verify data as if it were legitimate.
                for element in ["auras", "labels", "trackers"]:
                    pdata["shape"][element] = [
                        el for el in pdata["shape"][element] if el["visible"]
                    ]
                if not pdata["shape"]["name_visible"]:
                    pdata["shape"]["name"] = "?"
            else:
                pdata["shape"] = shape
            try:
                pdata["shape"]["layer"] = pdata["shape"]["layer"].name
            except AttributeError:
                logger.error(
                    f"Shape {pdata['shape']} does not have an expected layer configuration"
                )
        else:
            pdata["shape"] = shape.as_dict(player, player == room.creator)
        await sio.emit("Shape.Update",
                       pdata,
                       room=psid,
                       namespace="/planarally")
Exemplo n.º 2
0
async def sync_shape_update(layer, room, data, sid, shape):
    # Send to players
    # if layer.player_visible:
    # for room_player in room.players:
    for psid, player in state.get_players(room=room):
        if psid == sid:
            continue
        if not data["temporary"]:
            data["shape"] = shape.as_dict(player, False)
        await sio.emit("Shape.Update",
                       data,
                       room=psid,
                       namespace="/planarally")
Exemplo n.º 3
0
async def set_locked_state(sid, is_locked):
    sid_data = state.sid_map[sid]
    user = sid_data["user"]
    room = sid_data["room"]

    if room.creator != user:
        logger.warning(f"{user.name} attempted to set the locked state.")
        return

    room.is_locked = is_locked
    room.save()
    for psid, player in state.get_players(room=room):
        if player != room.creator:
            await sio.disconnect(psid, namespace="/planarally")
Exemplo n.º 4
0
async def create_floor(sid, data):
    sid_data = state.sid_map[sid]
    user = sid_data["user"]
    room: Room = sid_data["room"]
    location = sid_data["location"]

    if room.creator != user:
        logger.warning(f"{user.name} attempted to create a new floor")
        return

    floor: Floor = location.create_floor(data)

    for psid, player in state.get_players(room=room):
        await sio.emit(
            "Floor.Create",
            floor.as_dict(player, player == room.creator),
            room=psid,
            namespace="/planarally",
        )
Exemplo n.º 5
0
async def sync_shape_update(layer, room, data, sid, shape):
    for psid, player in state.get_players(room=room):
        if psid == sid:
            continue
        pdata = {el: data[el] for el in data if el != "shape"}
        if data["temporary"]:
            if player.name not in data["shape"]["owners"]:
                pdata["shape"] = deepcopy(data["shape"])
                # Although we have no guarantees that the message is faked, we still would like to verify data as if it were legitimate.
                for element in ["auras", "labels", "trackers"]:
                    pdata["shape"][element] = [
                        el for el in pdata["shape"][element] if el["visible"]
                    ]
                if not pdata["shape"]["name_visible"]:
                    pdata["shape"]["name"] = "?"
            else:
                pdata["shape"] = shape
        else:
            pdata["shape"] = shape.as_dict(player, False)
        await sio.emit("Shape.Update",
                       pdata,
                       room=psid,
                       namespace="/planarally")