1
0

add LUA functions for player levels in an instance

This commit is contained in:
Emagi 2024-12-05 09:22:50 -05:00
parent c17b4d5588
commit 4e07b26cc7
5 changed files with 75 additions and 2 deletions

View File

@ -14414,3 +14414,51 @@ int EQ2Emu_lua_GetChoiceSpawnID(lua_State* state) {
lua_interface->SetInt32Value(state, spawn_id);
return 1;
}
int EQ2Emu_lua_GetZonePlayerMinLevel(lua_State* state) {
ZoneServer* zone = lua_interface->GetZone(state);
lua_interface->ResetFunctionStack(state);
int32 level = 0;
if (zone) {
level = zone->getGroupraidMinLevel();
}
lua_interface->SetInt32Value(state, level);
return 1;
}
int EQ2Emu_lua_GetZonePlayerMaxLevel(lua_State* state) {
ZoneServer* zone = lua_interface->GetZone(state);
lua_interface->ResetFunctionStack(state);
int32 level = 0;
if (zone) {
level = zone->getGroupraidMaxLevel();
}
lua_interface->SetInt32Value(state, level);
return 1;
}
int EQ2Emu_lua_GetZonePlayerAvgLevel(lua_State* state) {
ZoneServer* zone = lua_interface->GetZone(state);
lua_interface->ResetFunctionStack(state);
int32 level = 0;
if (zone) {
level = zone->getGroupraidAvgLevel();
}
lua_interface->SetInt32Value(state, level);
return 1;
}
int EQ2Emu_lua_GetZonePlayerFirstLevel(lua_State* state) {
ZoneServer* zone = lua_interface->GetZone(state);
lua_interface->ResetFunctionStack(state);
int32 level = 0;
if (zone) {
level = zone->getGroupraidFirstLevel();
}
lua_interface->SetInt32Value(state, level);
return 1;
}

View File

@ -667,4 +667,9 @@ int EQ2Emu_lua_CreatePersistedRespawn(lua_State* state);
int EQ2Emu_lua_CreateChoiceWindow(lua_State* state);
int EQ2Emu_lua_ClearChoice(lua_State* state);
int EQ2Emu_lua_GetChoiceSpawnID(lua_State* state);
int EQ2Emu_lua_GetZonePlayerMinLevel(lua_State* state);
int EQ2Emu_lua_GetZonePlayerMaxLevel(lua_State* state);
int EQ2Emu_lua_GetZonePlayerAvgLevel(lua_State* state);
int EQ2Emu_lua_GetZonePlayerFirstLevel(lua_State* state);
#endif

View File

@ -1572,6 +1572,11 @@ void LuaInterface::RegisterFunctions(lua_State* state) {
lua_register(state,"CreateChoiceWindow", EQ2Emu_lua_CreateChoiceWindow);
lua_register(state,"ClearChoice", EQ2Emu_lua_ClearChoice);
lua_register(state,"GetChoiceSpawnID", EQ2Emu_lua_GetChoiceSpawnID);
lua_register(state,"GetZonePlayerMinLevel", EQ2Emu_lua_GetZonePlayerMinLevel);
lua_register(state,"GetZonePlayerMaxLevel", EQ2Emu_lua_GetZonePlayerMaxLevel);
lua_register(state,"GetZonePlayerAvgLevel", EQ2Emu_lua_GetZonePlayerAvgLevel);
lua_register(state,"GetZonePlayerFirstLevel", EQ2Emu_lua_GetZonePlayerFirstLevel);
}
void LuaInterface::LogError(const char* error, ...) {

View File

@ -3005,8 +3005,10 @@ void WorldDatabase::LoadZoneInfo(ZoneServer* zone, int32 minLevel, int32 maxLeve
zone->SetupInstance(CreateNewInstance(zone->GetZoneID(), minLevel, maxLevel, avgLevel, firstLevel));
zone->setGroupRaidLevels(minLevel, maxLevel, avgLevel, firstLevel);
}
else
else {
zone->SetupInstance(zone->GetInstanceID());
LoadZonePlayerLevels(zone);
}
}
zone->SetCanBind(atoul(row[23]));
zone->SetCanGate(atoul(row[24]));
@ -3016,6 +3018,18 @@ void WorldDatabase::LoadZoneInfo(ZoneServer* zone, int32 minLevel, int32 maxLeve
safe_delete_array(escaped);
}
void WorldDatabase::LoadZonePlayerLevels(ZoneServer* zone) {
Query query;
int32 ruleset_id;
MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT player_minlevel, player_maxlevel, player_avglevel, player_firstlevel FROM instances WHERE id = %u and zone_id = %u", zone->GetInstanceID(), zone->GetZoneID());
if (result && mysql_num_rows(result) > 0) {
MYSQL_ROW row;
row = mysql_fetch_row(result);
zone->setGroupRaidLevels(atoul(row[0]), atoul(row[1]), atoul(row[2]), atoul(row[3]));
}
}
void WorldDatabase::LoadZoneInfo(ZoneInfo* zone_info) {
Query query;
int32 ruleset_id;

View File

@ -218,6 +218,7 @@ public:
void LoadCharacterQuestProgress(Client* client);
void LoadCharacterFriendsIgnoreList(Player* player);
void LoadZoneInfo(ZoneServer* zone, int32 minLevel=0, int32 maxLevel=0, int32 avgLevel=0, int32 firstLevel=0);
void LoadZonePlayerLevels(ZoneServer* zone);
void LoadZoneInfo(ZoneInfo* zone_info);
int32 GetZoneID(const char* name);
void SaveZoneInfo(int32 zone_id, const char* field, sint32 value);