Minimapa

Crear carpeta Mapas y setear el disco donde dice D: por el suyo pegar el mapa por ejemplo 006 - arena.xml y saca los spots y los pone en un archivo txt que despues lo pegas en el minimap.txt
 avatar
unknown
python
a year ago
3.1 kB
6
Indexable
import os
import xml.etree.ElementTree as ET
import re

# Define el directorio donde se encuentran los archivos XML
directory = 'D:\\mapas'

# Función para analizar el archivo XML y obtener las coordenadas de los spots
def parse_xml(file_path):
    tree = ET.parse(file_path)
    root = tree.getroot()
    spots = []
    for spot in root.findall(".//SPOT/Config"):
        x = spot.get('BeginPosX')
        y = spot.get('BeginPosY')
        if x and y:  # Asegurarse de que ambos valores X e Y están presentes
            spots.append((x, y))
    return spots

# Función para crear la línea de texto para el archivo minimap.txt
def create_minimap_line(map_number, x, y):
    return f"{map_number}\t1\t1\t{x}\t{y}\t\"SPOT\"\n"

# Función para extraer el número y el nombre de mapa del nombre del archivo
def extract_map_info(file_name):
    match = re.match(r"(\d+) - (.+)\.xml", file_name)
    return (match.group(1), match.group(2)) if match else (None, None)

# Crear/abrir el archivo minimap.txt en modo de agregar
minimap_file_path = os.path.join(directory, 'minimap.txt')

# Asegurarse de que el archivo minimap.txt exista o crear uno nuevo si no existe
if not os.path.exists(minimap_file_path):
    with open(minimap_file_path, 'w'): pass

# Diccionario para rastrear si ya se agregó el comentario del mapa
map_comment_added = {}

with open(minimap_file_path, 'a+') as minimap_file:
    # Leer el contenido actual del archivo minimap.txt para evitar duplicados
    minimap_file.seek(0)
    existing_lines = minimap_file.readlines()
    existing_coords = set([tuple(line.split('\t')[3:5]) for line in existing_lines if not line.startswith('//')])

    # Iterar sobre todos los archivos en el directorio
    for file in os.listdir(directory):
        if file.endswith(".xml") and re.match(r"\d+ -", file):
            map_number, map_name = extract_map_info(file)
            if map_number and map_name:  # Solo procesar si el archivo tiene un número de mapa y nombre válidos
                print(f"Procesando mapa {map_number} - {map_name}")  # Imprimir el mapa que se está procesando
                file_path = os.path.join(directory, file)
                spots = parse_xml(file_path)
                if not spots:
                    print(f"No se encontraron spots para el mapa {map_number} - {map_name}")
                for x, y in spots:
                    if (x, y) not in existing_coords:  # Solo agregar si el spot no existe ya
                        if map_number not in map_comment_added:  # Agregar comentario si es la primera vez
                            minimap_file.write(f"// {map_name}\n")
                            map_comment_added[map_number] = True
                        minimap_line = create_minimap_line(map_number, x, y)
                        minimap_file.write(minimap_line)
                        existing_coords.add((x, y))  # Añadir a los coords existentes para evitar futuros duplicados
                    else:
                        print(f"El spot {x}, {y} ya existe en el mapa {map_number} - {map_name}")
Leave a Comment