Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b7e191898 | ||
|
|
f351fbaf20 | ||
|
|
016e793ba7 | ||
|
|
db483fd253 | ||
|
|
911ba231cd | ||
|
|
b3053f325d | ||
|
|
4ab47334fc | ||
|
|
e163f02526 |
3
.gitignore
vendored
@@ -17,6 +17,9 @@ repomix*
|
||||
/priv/static/images/
|
||||
/priv/static/*.js
|
||||
/priv/static/*.css
|
||||
/priv/static/*-*.png
|
||||
/priv/static/*-*.webp
|
||||
/priv/static/*-*.webmanifest
|
||||
|
||||
# Dialyzer PLT files
|
||||
/priv/plts/
|
||||
|
||||
14
CHANGELOG.md
@@ -2,6 +2,20 @@
|
||||
|
||||
<!-- changelog -->
|
||||
|
||||
## [v1.91.5](https://github.com/wanderer-industries/wanderer/compare/v1.91.4...v1.91.5) (2025-12-30)
|
||||
|
||||
|
||||
|
||||
|
||||
## [v1.91.4](https://github.com/wanderer-industries/wanderer/compare/v1.91.3...v1.91.4) (2025-12-30)
|
||||
|
||||
|
||||
|
||||
|
||||
### Bug Fixes:
|
||||
|
||||
* core: fixed connections create between k-space systems (considered as wh connection)
|
||||
|
||||
## [v1.91.3](https://github.com/wanderer-industries/wanderer/compare/v1.91.2...v1.91.3) (2025-12-28)
|
||||
|
||||
|
||||
|
||||
BIN
assets/static/images/news/2026/01-01-roadmap/cover.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
@@ -887,6 +887,44 @@ defmodule WandererApp.Map.Server.ConnectionsImpl do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Check if a connection between two k-space systems is a wormhole connection.
|
||||
Returns true if:
|
||||
1. Both systems are k-space (not wormhole space)
|
||||
2. There is no known stargate between them
|
||||
|
||||
This is used to detect wormhole connections through k-space, like when
|
||||
a player jumps from low-sec to low-sec through a wormhole.
|
||||
"""
|
||||
def is_kspace_wormhole_connection?(from_solar_system_id, to_solar_system_id)
|
||||
when is_nil(from_solar_system_id) or is_nil(to_solar_system_id),
|
||||
do: false
|
||||
|
||||
def is_kspace_wormhole_connection?(from_solar_system_id, to_solar_system_id)
|
||||
when from_solar_system_id == to_solar_system_id,
|
||||
do: false
|
||||
|
||||
def is_kspace_wormhole_connection?(from_solar_system_id, to_solar_system_id) do
|
||||
with {:ok, from_info} <- get_system_static_info(from_solar_system_id),
|
||||
{:ok, to_info} <- get_system_static_info(to_solar_system_id) do
|
||||
from_is_wormhole = from_info.system_class in @wh_space
|
||||
to_is_wormhole = to_info.system_class in @wh_space
|
||||
|
||||
# Both must be k-space (not wormhole space)
|
||||
if not from_is_wormhole and not to_is_wormhole do
|
||||
# Check if there's a known stargate
|
||||
case find_solar_system_jump(from_solar_system_id, to_solar_system_id) do
|
||||
{:ok, []} -> true # No stargate = wormhole connection
|
||||
_ -> false # Stargate exists or error
|
||||
end
|
||||
else
|
||||
false
|
||||
end
|
||||
else
|
||||
_ -> false
|
||||
end
|
||||
end
|
||||
|
||||
defp get_system_static_info(solar_system_id) do
|
||||
case WandererApp.CachedInfo.get_system_static_info(solar_system_id) do
|
||||
{:ok, system_static_info} when not is_nil(system_static_info) ->
|
||||
|
||||
@@ -547,9 +547,24 @@ defmodule WandererApp.Map.Server.SystemsImpl do
|
||||
# If :wormholes scope is enabled AND old_location is a wormhole,
|
||||
# allow this system to be added as a border system (so you can see
|
||||
# where your wormhole exits to)
|
||||
:wormholes in scopes and
|
||||
not is_nil(old_location) and
|
||||
ConnectionsImpl.can_add_location([:wormholes], old_location.solar_system_id)
|
||||
wormhole_border_from_wh_space =
|
||||
:wormholes in scopes and
|
||||
not is_nil(old_location) and
|
||||
ConnectionsImpl.can_add_location([:wormholes], old_location.solar_system_id)
|
||||
|
||||
# Third check: k-space wormhole connection
|
||||
# If :wormholes scope is enabled AND there's no stargate between the systems,
|
||||
# this is a wormhole connection through k-space - add both systems
|
||||
kspace_wormhole_connection =
|
||||
:wormholes in scopes and
|
||||
not is_nil(old_location) and
|
||||
not is_nil(old_location.solar_system_id) and
|
||||
ConnectionsImpl.is_kspace_wormhole_connection?(
|
||||
old_location.solar_system_id,
|
||||
location.solar_system_id
|
||||
)
|
||||
|
||||
wormhole_border_from_wh_space or kspace_wormhole_connection
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
2
mix.exs
@@ -3,7 +3,7 @@ defmodule WandererApp.MixProject do
|
||||
|
||||
@source_url "https://github.com/wanderer-industries/wanderer"
|
||||
|
||||
@version "1.91.3"
|
||||
@version "1.91.5"
|
||||
|
||||
def project do
|
||||
[
|
||||
|
||||
53
priv/posts/2026/01-01-roadmap-2026.md
Normal file
@@ -0,0 +1,53 @@
|
||||
%{
|
||||
title: "Event: Wanderer 2026 Roadmap Reveal",
|
||||
author: "Wanderer Team",
|
||||
cover_image_uri: "/images/news/2026/01-01-roadmap/cover.webp",
|
||||
tags: ~w(event roadmap 2026 announcement community),
|
||||
description: "JWanderer's 2026 roadmap are ready to reveal! Discover what exciting features and improvements are coming in 2026."
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
### Wanderer 2026 Roadmap Live Event
|
||||
|
||||
We're excited to announce that we're ready to share **Wanderer 2026 Roadmap**! Join to see the actual version with live updates for vision and plans.
|
||||
|
||||
---
|
||||
|
||||
### Event Details
|
||||
|
||||
- **Event Link:** [Wanderer 2026 Roadmap](https://eventcortex.com/events/invite/LcHQjTPb1jqHLzttlrgvUIb1RSBt7MFE)
|
||||
- **You can always support development by join us on [Patreon](https://www.patreon.com/WandererLtd) to give feedback & increase priority for your feature requests in our special Discord channel available to our patrons only.**
|
||||
|
||||
---
|
||||
|
||||
### What to Expect
|
||||
|
||||
This year, we have ambitious plans to make Wanderer even better for the EVE Online community. Check event page for live updates on:
|
||||
|
||||
- **New Planned Features:** Exciting additions to enhance your mapping experience
|
||||
- **Performance Improvements:** Faster, smoother, and more reliable
|
||||
- **Community Requests:** Features you've been asking for
|
||||
- **Integration Enhancements:** Better tools for corporations and alliances
|
||||
- **API Expansions:** More power for developers and third-party tools
|
||||
|
||||
---
|
||||
|
||||
### Stay Connected
|
||||
|
||||
Join our community channels to stay updated:
|
||||
|
||||
- **[Discord](https://discord.gg/cafERvDD2k)**
|
||||
- **[Telegram](https://t.me/wanderer_mapper)**
|
||||
- **[Github](https://github.com/wanderer-industries)**
|
||||
- **[YouTube](https://www.youtube.com/channel/UCalmteoec8rNXQugzZQcGnw?sub_confirmation=1)**
|
||||
- **[Patreon](https://www.patreon.com/WandererLtd)**
|
||||
|
||||
---
|
||||
|
||||
We can't wait to share what's coming in 2026!
|
||||
|
||||
Fly safe,
|
||||
**The Wanderer Team**
|
||||
|
||||
---
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 536 B |
|
Before Width: | Height: | Size: 977 B |
|
Before Width: | Height: | Size: 108 KiB |
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"name": "Wanderer",
|
||||
"short_name": "Wanderer",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#171717",
|
||||
"background_color": "#171717",
|
||||
"display": "standalone",
|
||||
"start_url": "/",
|
||||
"screenshots": [
|
||||
{
|
||||
"src": "web-app-manifest.webp",
|
||||
"sizes": "720x1280",
|
||||
"type": "image/webp"
|
||||
},
|
||||
{
|
||||
"src": "web-app-manifest-wide.webp",
|
||||
"sizes": "1280x720",
|
||||
"type": "image/webp",
|
||||
"form_factor": "wide"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 60 KiB |
@@ -49,6 +49,8 @@ defmodule WandererApp.Map.MapScopeFilteringTest do
|
||||
setup do
|
||||
# Setup system static info cache with both wormhole and k-space systems
|
||||
setup_scope_test_systems()
|
||||
# Setup known stargates between adjacent k-space systems
|
||||
setup_kspace_stargates()
|
||||
:ok
|
||||
end
|
||||
|
||||
@@ -190,6 +192,30 @@ defmodule WandererApp.Map.MapScopeFilteringTest do
|
||||
:ok
|
||||
end
|
||||
|
||||
# Setup known stargates between adjacent k-space systems
|
||||
# This ensures that k-space to k-space connections WITH stargates are properly filtered
|
||||
# (connections WITHOUT stargates are treated as wormhole connections)
|
||||
defp setup_kspace_stargates do
|
||||
# Stargate between Halenan (HS) and Mili (HS) - adjacent high-sec systems
|
||||
# Cache key format: "jump_#{smaller_id}_#{larger_id}"
|
||||
halenan_mili_key = "jump_#{@hs_system_halenan}_#{@hs_system_mili}"
|
||||
|
||||
WandererApp.Cache.insert(halenan_mili_key, %{
|
||||
from_solar_system_id: @hs_system_halenan,
|
||||
to_solar_system_id: @hs_system_mili
|
||||
})
|
||||
|
||||
# Stargate between Halenan (HS) and Halmah (LS) - adjacent high-sec to low-sec
|
||||
halenan_halmah_key = "jump_#{@hs_system_halenan}_#{@ls_system_halmah}"
|
||||
|
||||
WandererApp.Cache.insert(halenan_halmah_key, %{
|
||||
from_solar_system_id: @hs_system_halenan,
|
||||
to_solar_system_id: @ls_system_halmah
|
||||
})
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
describe "Scope filtering logic tests" do
|
||||
# These tests verify the filtering logic without full integration
|
||||
# The actual filtering is tested more comprehensively in map_scopes_test.exs
|
||||
|
||||
@@ -56,8 +56,12 @@ defmodule WandererApp.Map.Server.MapScopesTest do
|
||||
30_000_101 => %{solar_system_id: 30_000_101, system_class: @ls},
|
||||
# Nullsec system
|
||||
30_000_200 => %{solar_system_id: 30_000_200, system_class: @ns},
|
||||
# Another nullsec for tests
|
||||
30_000_201 => %{solar_system_id: 30_000_201, system_class: @ns},
|
||||
# Pochven system
|
||||
30_000_300 => %{solar_system_id: 30_000_300, system_class: @pochven},
|
||||
# Another pochven for tests
|
||||
30_000_301 => %{solar_system_id: 30_000_301, system_class: @pochven},
|
||||
# Jita (prohibited system - highsec)
|
||||
30_000_142 => %{solar_system_id: 30_000_142, system_class: @hs}
|
||||
}
|
||||
@@ -525,5 +529,84 @@ defmodule WandererApp.Map.Server.MapScopesTest do
|
||||
assert result == true,
|
||||
"Pochven to Hi-Sec with [:wormholes] should be valid when no stargate exists"
|
||||
end
|
||||
|
||||
# Same-space-type wormhole connections
|
||||
# These verify that jumps within the same security class are valid when no stargate exists
|
||||
|
||||
test "Low-Sec to Low-Sec with [:wormholes] is valid when no stargate exists" do
|
||||
# A wormhole can connect two low-sec systems
|
||||
# With [:wormholes] scope and no known stargate, this should be tracked
|
||||
result = ConnectionsImpl.is_connection_valid([:wormholes], @ls_system_id, 30_000_101)
|
||||
|
||||
assert result == true,
|
||||
"Low-Sec to Low-Sec with [:wormholes] should be valid when no stargate exists"
|
||||
end
|
||||
|
||||
test "Hi-Sec to Hi-Sec with [:wormholes] is valid when no stargate exists" do
|
||||
# A wormhole can connect two hi-sec systems
|
||||
# With [:wormholes] scope and no known stargate, this should be tracked
|
||||
result = ConnectionsImpl.is_connection_valid([:wormholes], @hs_system_id, 30_000_002)
|
||||
|
||||
assert result == true,
|
||||
"Hi-Sec to Hi-Sec with [:wormholes] should be valid when no stargate exists"
|
||||
end
|
||||
|
||||
test "Null-Sec to Null-Sec with [:wormholes] is valid when no stargate exists" do
|
||||
# A wormhole can connect two null-sec systems
|
||||
# With [:wormholes] scope and no known stargate, this should be tracked
|
||||
result = ConnectionsImpl.is_connection_valid([:wormholes], @ns_system_id, 30_000_201)
|
||||
|
||||
assert result == true,
|
||||
"Null-Sec to Null-Sec with [:wormholes] should be valid when no stargate exists"
|
||||
end
|
||||
|
||||
test "Pochven to Pochven with [:wormholes] is valid when no stargate exists" do
|
||||
# A wormhole can connect two Pochven systems
|
||||
# With [:wormholes] scope and no known stargate, this should be tracked
|
||||
result = ConnectionsImpl.is_connection_valid([:wormholes], @pochven_id, 30_000_301)
|
||||
|
||||
assert result == true,
|
||||
"Pochven to Pochven with [:wormholes] should be valid when no stargate exists"
|
||||
end
|
||||
|
||||
# Cross-space-type comprehensive tests
|
||||
# Verify all k-space combinations work correctly
|
||||
|
||||
test "all k-space combinations with [:wormholes] are valid when no stargate exists" do
|
||||
# Test all combinations of k-space security types
|
||||
# All should be valid because no stargates exist in test data = wormhole connections
|
||||
|
||||
# Hi-Sec combinations
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @hs_system_id, @ls_system_id) == true,
|
||||
"Hi->Low should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @hs_system_id, @ns_system_id) == true,
|
||||
"Hi->Null should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @hs_system_id, @pochven_id) == true,
|
||||
"Hi->Pochven should be valid"
|
||||
|
||||
# Low-Sec combinations
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ls_system_id, @hs_system_id) == true,
|
||||
"Low->Hi should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ls_system_id, @ns_system_id) == true,
|
||||
"Low->Null should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ls_system_id, @pochven_id) == true,
|
||||
"Low->Pochven should be valid"
|
||||
|
||||
# Null-Sec combinations
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ns_system_id, @hs_system_id) == true,
|
||||
"Null->Hi should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ns_system_id, @ls_system_id) == true,
|
||||
"Null->Low should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @ns_system_id, @pochven_id) == true,
|
||||
"Null->Pochven should be valid"
|
||||
|
||||
# Pochven combinations
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @pochven_id, @hs_system_id) == true,
|
||||
"Pochven->Hi should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @pochven_id, @ls_system_id) == true,
|
||||
"Pochven->Low should be valid"
|
||||
assert ConnectionsImpl.is_connection_valid([:wormholes], @pochven_id, @ns_system_id) == true,
|
||||
"Pochven->Null should be valid"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||