party: SetRaidTarget's third argument is a flag, not the word "local"

SuperWoW's extra argument marks the icon local-only, and its callers disagree on how to spell it:
the wiki writes `SetRaidTarget(unit, i, "local")`, while SoloRaidTargetIcons passes the boolean
`IsSuperWoWLoaded() and not IsPlayerInPartyOrRaid()` (`main.lua:51`). Typing the parameter as a
`String` raised on that boolean — "bad argument #3: error converting Lua boolean to String", five
times in one session's log — and it raised *only while solo*, which is the one case that addon
exists for. So marking a target outside a group did nothing at all.

Lua truthiness takes both spellings, which is what a flag means in this language.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-10-16 18:45:25 -06:00
co-authored by Claude Opus 5
parent 072d691449
commit 7098d64203
+9 -3
View File
@@ -501,14 +501,20 @@ pub(super) fn install(lua: &Lua) -> mlua::Result<()> {
Ok(())
})?,
)?;
// SetRaidTarget(unit, index [, "local"]) is the engine verb. `SetRaidTargetIcon` is
// SetRaidTarget(unit, index [, local]) is the engine verb. `SetRaidTargetIcon` is
// FrameXML's toggle around it (`TargetFrame.lua:486`), and `TargetFrame.lua:488`, `:490` and
// `Bindings.xml:1160` call it bare. SuperWoW's third argument, see `PartyRequest::SetRaidTarget`.
//
// That argument is a **flag**, taken by Lua truthiness, and the callers disagree on how to
// spell it: SuperWoW's own wiki writes `"local"`, while SoloRaidTargetIcons passes the
// boolean `IsSuperWoWLoaded() and not IsPlayerInPartyOrRaid()` (`main.lua:51`). Typing the
// parameter as a `String` raised on that boolean — and only ever while solo, which is the
// one case the addon exists for, so marking a target out of a group did nothing at all.
g.set(
"SetRaidTarget",
lua.create_function(|lua, (unit, index, local): (String, u8, Option<String>)| {
lua.create_function(|lua, (unit, index, local): (String, u8, Value)| {
let mut model = lua.app_data_mut::<Model>().expect("model app_data");
let local = local.as_deref() == Some("local");
let local = !matches!(local, Value::Nil | Value::Boolean(false));
model
.party_requests
.push(PartyRequest::SetRaidTarget { unit, index, local });