added min/max expansion range to missing queries

This commit is contained in:
Xackery Xtal
2019-01-24 12:55:00 -08:00
parent c32150d2cc
commit 9404ecc382
4 changed files with 21 additions and 14 deletions
+5 -4
View File
@@ -12305,9 +12305,10 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app)
uint32 zoneid = 0;
uint32 startCity = (uint32)strtol((const char*)app->pBuffer, nullptr, 10);
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
std::string query = StringFormat("SELECT zone_id, bind_id, x, y, z FROM start_zones "
"WHERE player_class=%i AND player_deity=%i AND player_race=%i AND %i & expansions = expansions",
m_pp.class_, m_pp.deity, m_pp.race, RuleI(World, ExpansionSettings));
"WHERE player_class=%i AND player_deity=%i AND player_race=%i AND auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));",
m_pp.class_, m_pp.deity, m_pp.race, latest_expansion, latest_expansion);
auto results = database.QueryDatabase(query);
if (!results.Success()) {
Log(Logs::General, Logs::Error, "No valid start zones found for /setstartcity");
@@ -12337,8 +12338,8 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app)
}
query = StringFormat("SELECT zone_id, bind_id FROM start_zones "
"WHERE player_class=%i AND player_deity=%i AND player_race=%i AND %i & expansions = expansions",
m_pp.class_, m_pp.deity, m_pp.race, RuleI(World, ExpansionSettings));
"WHERE player_class=%i AND player_deity=%i AND player_race=%i AND min_expansion <= %i AND max_expansion >= %i",
m_pp.class_, m_pp.deity, m_pp.race, latest_expansion, latest_expansion);
results = database.QueryDatabase(query);
if (!results.Success())
return;
+5 -3
View File
@@ -3705,20 +3705,22 @@ void command_findzone(Client *c, const Seperator *sep)
return;
}
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
std::string query;
int id = atoi((const char *)sep->arg[1]);
if (id == 0) { // If id evaluates to 0, then search as if user entered a string.
auto escName = new char[strlen(sep->arg[1]) * 2 + 1];
database.DoEscapeString(escName, sep->arg[1], strlen(sep->arg[1]));
query = StringFormat("SELECT zoneidnumber, short_name, long_name FROM zone "
"WHERE long_name RLIKE '%s' AND version = 0 AND %i & expansions = expansions",
escName, RuleI(World, ExpansionSettings));
"WHERE long_name RLIKE '%s' AND version = 0 AND min_expansion <= %i AND max_expansion >= %i",
escName, latest_expansion, latest_expansion);
safe_delete_array(escName);
}
else // Otherwise, look for just that zoneidnumber.
query = StringFormat("SELECT zoneidnumber, short_name, long_name FROM zone "
"WHERE zoneidnumber = %i AND version = 0 AND %i & expansions = expansions", id, RuleI(World, ExpansionSettings));
"WHERE zoneidnumber = %i AND version = 0 AND min_expansion <= %i AND max_expansion >= %i", id, latest_expansion, latest_expansion);
auto results = database.QueryDatabase(query);
if (!results.Success()) {
+5 -3
View File
@@ -399,9 +399,10 @@ void EntityList::ClearTrapPointers()
bool ZoneDatabase::LoadTraps(const char* zonename, int16 version) {
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
std::string query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, "
"maxzdiff, radius, chance, message, respawn_time, respawn_var, level, "
"`group`, triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND version=%u AND %i & expansions = expansions", zonename, version, RuleI(World, ExpansionSettings));
"`group`, triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND version=%u AND min_expansion <= %i AND max_expansion >= %i", zonename, version, latest_expansion, latest_expansion);
auto results = QueryDatabase(query);
if (!results.Success()) {
@@ -481,18 +482,19 @@ bool ZoneDatabase::SetTrapData(Trap* trap, bool repopnow) {
uint32 dbid = trap->db_id;
std::string query;
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
if (trap->group > 0)
{
query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, "
"maxzdiff, radius, chance, message, respawn_time, respawn_var, level, "
"triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND `group`=%d AND id != %d AND %i & expansions = expansions ORDER BY RAND() LIMIT 1", zone->GetShortName(), trap->group, dbid, RuleI(World, ExpansionSettings));
"triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND `group`=%d AND id != %d AND min_expansion <= %i AND max_expansion >= %i ORDER BY RAND() LIMIT 1", zone->GetShortName(), trap->group, dbid, latest_expansion, latest_expansion);
}
else
{
// We could just use the existing data here, but querying the DB is not expensive, and allows content developers to change traps without rebooting.
query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, "
"maxzdiff, radius, chance, message, respawn_time, respawn_var, level, "
"triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND id = %d AND %i & expansions = expansions", zone->GetShortName(), dbid, RuleI(World, ExpansionSettings));
"triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND id = %d AND min_expansion <= %i AND max_expansion >= %i", zone->GetShortName(), dbid, latest_expansion, latest_expansion);
}
auto results = QueryDatabase(query);