--[[ nodeinfo.lua This file contains all the various information routines related to flight nodes. ]] function EFM_NI_CreateNode(continent, nodeName) local myDebug = false; local myContinent; local myZone; EFM_Shared_DebugMessage("Adding entry for "..nodeName, myDebug); SetMapToCurrentZone(); myContinent = EFM_Shared_GetContinentName(continent); if (myContinent == nil) then EFM_Shared_DebugMessage("Adding entry for "..nodeName, myDebug); return; end EFM_Shared_DebugMessage("myContinent: "..myContinent, myDebug); myZone = EFM_NI_GetZoneByName(continent, nodeName); if (myZone == nil) then myZone = EFM_Shared_GetZoneName(continent, GetCurrentMapZone()); end EFM_Shared_DebugMessage("myZone: "..myZone, myDebug); if (EFM_Data == nil) then EFM_Data = {}; end if (EFM_Data[EFM_Global_Faction] == nil) then EFM_Data[EFM_Global_Faction] = {}; end if (EFM_Data[EFM_Global_Faction][myContinent] == nil) then EFM_Data[EFM_Global_Faction][myContinent] = {}; end if (EFM_Data[EFM_Global_Faction][myContinent][myZone] == nil) then EFM_Data[EFM_Global_Faction][myContinent][myZone] = {}; end if (EFM_Data[EFM_Global_Faction][myContinent][myZone][nodeName] == nil) then EFM_Data[EFM_Global_Faction][myContinent][myZone][nodeName] = {}; end EFM_Data[EFM_Global_Faction][myContinent][myZone][nodeName]["name"] = nodeName; EFM_KP_AddLocation(continent, nodeName); end function EFM_NI_GetNodeByName(searchNodeName) local myDebug = false; if (EFM_Data[EFM_Global_Faction] ~= nil) then for myContinent in pairs(EFM_Data[EFM_Global_Faction]) do EFM_Shared_DebugMessage("myContinent: "..myContinent, myDebug); for myZone in pairs(EFM_Data[EFM_Global_Faction][myContinent]) do EFM_Shared_DebugMessage("myZone: "..myZone, myDebug); for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][myZone]) do if (EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["name"] == searchNodeName) then return EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]; end end end end end return nil; end function EFM_NI_GetZoneByName(continentNum, searchNodeName) local myDebug = false; EFM_Shared_DebugMessage("searchNodeName: "..searchNodeName, myDebug); if (EFM_SearchZones[searchNodeName] ~= nil) then EFM_Shared_DebugMessage("zone name: "..EFM_SearchZones[searchNodeName], myDebug); return EFM_SearchZones[searchNodeName]; end local zoneNames = { GetMapZones(continentNum) } ; local realZoneName; local tempName; _, _, tempName = string.find(searchNodeName, "(.*, .*), .*"); if (tempName ~= nil) then searchNodeName = tempName; end EFM_Shared_DebugMessage("searchNodeName: "..searchNodeName, myDebug); _, _, tempName = string.find(searchNodeName, "(.*), .*"); if (tempName == nil) then tempName = searchNodeName; end EFM_Shared_DebugMessage("tempName: "..tempName, myDebug); for index, name in pairs(zoneNames) do if (string.find(string.lower(name), string.lower(tempName)) ~= nil) then realZoneName = name; end end if (realZoneName ~= nil) then EFM_Shared_DebugMessage("realZoneName: "..realZoneName, myDebug); end if (realZoneName == nil) then _, _, tempName = string.find(searchNodeName, ".*, (.*)"); if (tempName == nil) then tempName = searchNodeName; end EFM_Shared_DebugMessage("tempName: "..tempName, myDebug); for index, name in pairs(zoneNames) do if (string.find(string.lower(name), string.lower(tempName)) ~= nil) then realZoneName = name; end end end if (realZoneName ~= nil) then EFM_Shared_DebugMessage("realZoneName: "..realZoneName, myDebug); else EFM_Shared_DebugMessage("Unable to find zone name for "..searchNodeName, Lys_Debug); end return realZoneName; end function EFM_NI_AddNode_fmLoc(nodeName, X, Y) local myNode = EFM_NI_GetNodeByName(nodeName); myNode["fmLoc"] = {}; myNode["fmLoc"]["x"] = tostring(X); myNode["fmLoc"]["y"] = tostring(Y); end function EFM_NI_AddNode_zoneLoc(nodeName, X, Y) local myNode = EFM_NI_GetNodeByName(nodeName); myNode["zmLoc"] = {}; myNode["zmLoc"]["x"] = tostring(X); myNode["zmLoc"]["y"] = tostring(Y); end function EFM_NI_AddNode_wmLoc(nodeName, X, Y) local myNode = EFM_NI_GetNodeByName(nodeName); myNode["wmLoc"] = {}; myNode["wmLoc"]["x"] = tostring(X); myNode["wmLoc"]["y"] = tostring(Y); end function EFM_NI_AddRoutes(nodeName, routeList) local myNode = EFM_NI_GetNodeByName(nodeName); if (myNode["routes"] == nil) then myNode["routes"] = {}; end for index, route in pairs(routeList) do if (not EFM_SF_StringInTable(myNode["routes"], route)) then table.insert(myNode["routes"], route); end end end function EFM_NI_AddNode_FlightDuration(nodeName, destNodeName, flightDuration) local myNode = EFM_NI_GetNodeByName(nodeName); if (myNode["timers"] == nil) then myNode["timers"] = {}; end -- If no timer set, add one, if one already set, average the two times. if (myNode["timers"][destNodeName] == nil) then myNode["timers"][destNodeName] = flightDuration; else myNode["timers"][destNodeName] = floor((myNode["timers"][destNodeName] + flightDuration) / 2); end end function EFM_NI_GetNode_FlightDuration(nodeName, destNodeName) local myNode = EFM_NI_GetNodeByName(nodeName); if (myNode == nil) then return nil; end if (myNode["timers"] == nil) then return nil; end if (myNode["timers"][destNodeName] == nil) then return nil; end return myNode["timers"][destNodeName]; end function EFM_NI_GetNode_fmLoc(X, Y) local myNodeName; local myDebug = false; EFM_Shared_DebugMessage("X: "..X, myDebug); EFM_Shared_DebugMessage("Y: "..Y, myDebug); if (EFM_Data[EFM_Global_Faction] ~= nil) then for myContinent in pairs(EFM_Data[EFM_Global_Faction]) do EFM_Shared_DebugMessage("myContinent: "..myContinent, myDebug); for myZone in pairs(EFM_Data[EFM_Global_Faction][myContinent]) do EFM_Shared_DebugMessage("myZone: "..myZone, myDebug); for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][myZone]) do EFM_Shared_DebugMessage("myNode: "..myNode, myDebug); local nodeX = EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["fmLoc"]["x"]; nodeX = tonumber(nodeX); EFM_Shared_DebugMessage("nodeX: "..nodeX, myDebug); local nodeY = EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["fmLoc"]["y"] nodeY = tonumber(nodeY); EFM_Shared_DebugMessage("nodeY: "..nodeY, myDebug); if ((nodeX == X) and (nodeY == Y)) then myNodeName = EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["name"]; end end end end end if (myNodeName ~= nil) then EFM_Shared_DebugMessage("myNodeName: "..myNodeName, myDebug); end return myNodeName; end function EFM_NI_GetNode_List(continentNum) local nodeList = {}; local myDebug = false; local myContinent = EFM_Shared_GetContinentName(continentNum); if (EFM_Data == nil) then return nil; end if (EFM_Data[EFM_Global_Faction] == nil) then return nil; end if (EFM_Data[EFM_Global_Faction][myContinent] == nil) then return nil; end for myZone in pairs(EFM_Data[EFM_Global_Faction][myContinent]) do EFM_Shared_DebugMessage("myZone: "..myZone, myDebug); for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][myZone]) do EFM_Shared_DebugMessage("myNode: "..myNode, myDebug); table.insert(nodeList, myNode); end end return nodeList; end function EFM_NI_GetNode_Zone(searchNodeName) local myDebug = false; local zoneName; if (EFM_Data[EFM_Global_Faction] ~= nil) then for myContinent in pairs(EFM_Data[EFM_Global_Faction]) do EFM_Shared_DebugMessage("myContinent: "..myContinent, myDebug); for myZone in pairs(EFM_Data[EFM_Global_Faction][myContinent]) do EFM_Shared_DebugMessage("myZone: "..myZone, myDebug); for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][myZone]) do if (EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["name"] == searchNodeName) then zoneName = myZone; end end end end end return zoneName; end