Initial Upload
This commit is contained in:
parent
73b4d564c8
commit
eec9c0a84b
31760
FlightPathFinder.lua
Normal file
31760
FlightPathFinder.lua
Normal file
File diff suppressed because it is too large
Load Diff
7
FlightPathFinder.toc
Normal file
7
FlightPathFinder.toc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
## Interface: 11405
|
||||||
|
## Title: FlightPathFinder
|
||||||
|
## Notes: A simple addon to find the nearest flight path.
|
||||||
|
## Version: 1.0
|
||||||
|
## Dependencies: HereBeDragons
|
||||||
|
|
||||||
|
FlightPathFinder.lua
|
22141
Flights.lua
Normal file
22141
Flights.lua
Normal file
File diff suppressed because it is too large
Load Diff
9299
flight_points.lua
Normal file
9299
flight_points.lua
Normal file
File diff suppressed because it is too large
Load Diff
52
luaTable.py
Normal file
52
luaTable.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import csv
|
||||||
|
|
||||||
|
def escape_lua_string(value):
|
||||||
|
"""
|
||||||
|
Escape double quotes and backslashes for Lua strings.
|
||||||
|
Lua uses \" to escape double quotes and \\ for backslashes.
|
||||||
|
"""
|
||||||
|
return value.replace("\\", "\\\\").replace("'", "\\'")
|
||||||
|
|
||||||
|
def csv_to_lua_table(input_csv, output_lua):
|
||||||
|
# Define the fields we care about
|
||||||
|
fields_to_include = ["name", "y", "x", "ID", "ContinentID"]
|
||||||
|
|
||||||
|
|
||||||
|
with open(input_csv, mode='r', newline='', encoding='utf-8') as csv_file:
|
||||||
|
# Assuming comma-delimited CSV
|
||||||
|
csv_reader = csv.DictReader(csv_file)
|
||||||
|
|
||||||
|
with open(output_lua, mode='w', encoding='utf-8') as lua_file:
|
||||||
|
lua_file.write("flightPoints = {\n")
|
||||||
|
|
||||||
|
for row in csv_reader:
|
||||||
|
lua_file.write(" {\n")
|
||||||
|
for field in fields_to_include:
|
||||||
|
value = row[field]
|
||||||
|
|
||||||
|
# Escape and format Lua strings with single quotes
|
||||||
|
if field == "name":
|
||||||
|
if "'" in value:
|
||||||
|
lua_value.replace("'","\'")
|
||||||
|
|
||||||
|
lua_value = f"'{escape_lua_string(value)}'"
|
||||||
|
# Handle numeric fields
|
||||||
|
elif value.replace('.', '', 1).isdigit() or (value[0] == '-' and value[1:].replace('.', '', 1).isdigit()):
|
||||||
|
lua_value = value
|
||||||
|
else:
|
||||||
|
lua_value = f"'{value}'"
|
||||||
|
|
||||||
|
lua_file.write(f" {field} = {lua_value},\n")
|
||||||
|
|
||||||
|
lua_file.write(" },\n")
|
||||||
|
|
||||||
|
lua_file.write("}\n\n")
|
||||||
|
|
||||||
|
# Input CSV file and output Lua file paths
|
||||||
|
input_csv = "flight_points.csv"
|
||||||
|
output_lua = "flight_points.lua"
|
||||||
|
|
||||||
|
# Convert CSV to Lua table
|
||||||
|
csv_to_lua_table(input_csv, output_lua)
|
||||||
|
|
||||||
|
print(f"Lua table has been written to {output_lua}")
|
72
test.lua
Normal file
72
test.lua
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
-- main.lua
|
||||||
|
-- Import the A* algorithm and graph
|
||||||
|
local a_star = require("a_star")
|
||||||
|
local Flights = require("Flights")
|
||||||
|
|
||||||
|
-- Input parameters
|
||||||
|
local faction = "Alliance"
|
||||||
|
local start_node = 2089
|
||||||
|
|
||||||
|
local end_node = 66 --ashenvale
|
||||||
|
|
||||||
|
-- Run the A* algorithm
|
||||||
|
local paths, cost = a_star.run(Flights, faction, start_node, end_node)
|
||||||
|
|
||||||
|
-- Output the result
|
||||||
|
if paths then
|
||||||
|
print("Total cost: " .. cost .. " seconds")
|
||||||
|
print("Paths found:")
|
||||||
|
|
||||||
|
for i, path in ipairs(paths) do
|
||||||
|
-- Construct path names
|
||||||
|
local path_names = {}
|
||||||
|
for _, node in ipairs(path) do
|
||||||
|
local name = Flights[faction][node]["name"]
|
||||||
|
table.insert(path_names, name or "Unknown")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Output each path
|
||||||
|
print(string.format("Path %d (IDs): %s", i, table.concat(path, " -> ")))
|
||||||
|
print(string.format("Path %d (Names): %s", i, table.concat(path_names, " -> ")))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("Error: " .. cost)
|
||||||
|
end
|
||||||
|
|
||||||
|
local input_node = 2089 -- Node ID for which we want to list available neighbors
|
||||||
|
|
||||||
|
-- -- Get all neighbors with their travel time
|
||||||
|
-- local neighbors, err = a_star.get_neighbors_with_cost(Flights, faction, input_node)
|
||||||
|
|
||||||
|
-- -- Output the result
|
||||||
|
-- if neighbors then
|
||||||
|
-- print("Available end nodes from node " .. input_node .. ":")
|
||||||
|
-- for _, neighbor_info in ipairs(neighbors) do
|
||||||
|
-- local node = neighbor_info.neighbor
|
||||||
|
-- local cost = neighbor_info.cost
|
||||||
|
-- local name = Flights[faction][node]["name"] or "Unknown"
|
||||||
|
-- print(string.format("Node ID: %d, Name: %s, Time: %d seconds", node, name, cost))
|
||||||
|
-- end
|
||||||
|
-- else
|
||||||
|
-- print("Error: " .. err)
|
||||||
|
-- end
|
||||||
|
|
||||||
|
|
||||||
|
local paths, err = a_star.get_all_paths_with_cost(Flights, faction, start_node)
|
||||||
|
|
||||||
|
-- Output the result
|
||||||
|
if paths then
|
||||||
|
print("All reachable end nodes from node " .. start_node .. ":")
|
||||||
|
for _, path_info in ipairs(paths) do
|
||||||
|
local node = path_info.neighbor
|
||||||
|
local cost = path_info.cost
|
||||||
|
|
||||||
|
-- Check if the node exists in the faction and fetch its name
|
||||||
|
local node_data = Flights[faction][node]
|
||||||
|
local name = node_data and node_data["name"] or "Unknown"
|
||||||
|
|
||||||
|
print(string.format("Node ID: %d, Name: %s, Time: %d seconds", node, name, cost))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("Error: " .. err)
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user