mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 17:43:52 +00:00
feat: add IsInInstance, GetInstanceInfo, and GetInstanceDifficulty Lua APIs
IsInInstance() returns whether player is in an instance and the type. GetInstanceInfo() returns map name, instance type, difficulty index/name, and max players. GetInstanceDifficulty() returns 1-based difficulty index. Critical for raid/dungeon addons like DBM for instance detection.
This commit is contained in:
parent
2a9a7fe04e
commit
ce128990d2
1 changed files with 39 additions and 0 deletions
|
|
@ -1194,6 +1194,42 @@ static int lua_UnitCreatureType(lua_State* L) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsInInstance() → isInstance, instanceType
|
||||||
|
static int lua_IsInInstance(lua_State* L) {
|
||||||
|
auto* gh = getGameHandler(L);
|
||||||
|
if (!gh) { lua_pushboolean(L, 0); lua_pushstring(L, "none"); return 2; }
|
||||||
|
bool inInstance = gh->isInInstance();
|
||||||
|
lua_pushboolean(L, inInstance);
|
||||||
|
lua_pushstring(L, inInstance ? "party" : "none"); // simplified: "none", "party", "raid", "pvp", "arena"
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInstanceInfo() → name, type, difficultyIndex, difficultyName, maxPlayers, ...
|
||||||
|
static int lua_GetInstanceInfo(lua_State* L) {
|
||||||
|
auto* gh = getGameHandler(L);
|
||||||
|
if (!gh) {
|
||||||
|
lua_pushstring(L, ""); lua_pushstring(L, "none"); lua_pushnumber(L, 0);
|
||||||
|
lua_pushstring(L, "Normal"); lua_pushnumber(L, 0);
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
std::string mapName = gh->getMapName(gh->getCurrentMapId());
|
||||||
|
lua_pushstring(L, mapName.c_str()); // 1: name
|
||||||
|
lua_pushstring(L, gh->isInInstance() ? "party" : "none"); // 2: instanceType
|
||||||
|
lua_pushnumber(L, gh->getInstanceDifficulty()); // 3: difficultyIndex
|
||||||
|
static const char* kDiff[] = {"Normal", "Heroic", "25 Normal", "25 Heroic"};
|
||||||
|
uint32_t diff = gh->getInstanceDifficulty();
|
||||||
|
lua_pushstring(L, (diff < 4) ? kDiff[diff] : "Normal"); // 4: difficultyName
|
||||||
|
lua_pushnumber(L, 5); // 5: maxPlayers (default 5-man)
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInstanceDifficulty() → difficulty (1=normal, 2=heroic, 3=25normal, 4=25heroic)
|
||||||
|
static int lua_GetInstanceDifficulty(lua_State* L) {
|
||||||
|
auto* gh = getGameHandler(L);
|
||||||
|
lua_pushnumber(L, gh ? (gh->getInstanceDifficulty() + 1) : 1); // WoW returns 1-based
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// UnitClassification(unit) → "normal", "elite", "rareelite", "worldboss", "rare"
|
// UnitClassification(unit) → "normal", "elite", "rareelite", "worldboss", "rare"
|
||||||
static int lua_UnitClassification(lua_State* L) {
|
static int lua_UnitClassification(lua_State* L) {
|
||||||
auto* gh = getGameHandler(L);
|
auto* gh = getGameHandler(L);
|
||||||
|
|
@ -1586,6 +1622,9 @@ void LuaEngine::registerCoreAPI() {
|
||||||
{"UnitIsEnemy", lua_UnitIsEnemy},
|
{"UnitIsEnemy", lua_UnitIsEnemy},
|
||||||
{"UnitCreatureType", lua_UnitCreatureType},
|
{"UnitCreatureType", lua_UnitCreatureType},
|
||||||
{"UnitClassification", lua_UnitClassification},
|
{"UnitClassification", lua_UnitClassification},
|
||||||
|
{"IsInInstance", lua_IsInInstance},
|
||||||
|
{"GetInstanceInfo", lua_GetInstanceInfo},
|
||||||
|
{"GetInstanceDifficulty", lua_GetInstanceDifficulty},
|
||||||
// Container/bag API
|
// Container/bag API
|
||||||
{"GetContainerNumSlots", lua_GetContainerNumSlots},
|
{"GetContainerNumSlots", lua_GetContainerNumSlots},
|
||||||
{"GetContainerItemInfo", lua_GetContainerItemInfo},
|
{"GetContainerItemInfo", lua_GetContainerItemInfo},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue