mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-25 22:31:29 +00:00
Added ConvertExpansionMaskToLatestExpansion
This commit is contained in:
parent
297599a779
commit
8195a57b44
@ -597,3 +597,28 @@ uint32 EQEmu::expansions::ConvertClientVersionToExpansionMask(versions::ClientVe
|
||||
return expansions::maskEverQuest;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(uint32 expansion_mask)
|
||||
{
|
||||
if (expansion_mask & bitRoK == bitRoK) return static_cast<uint32>(Expansion::RoK);
|
||||
if (expansion_mask & bitSoV == bitSoV) return static_cast<uint32>(Expansion::SoV);
|
||||
if (expansion_mask & bitSoL == bitSoL) return static_cast<uint32>(Expansion::SoL);
|
||||
if (expansion_mask & bitPoP == bitPoP) return static_cast<uint32>(Expansion::PoP);
|
||||
if (expansion_mask & bitLoY == bitLoY) return static_cast<uint32>(Expansion::LoY);
|
||||
if (expansion_mask & bitLDoN == bitLDoN) return static_cast<uint32>(Expansion::LDoN);
|
||||
if (expansion_mask & bitGoD == bitGoD) return static_cast<uint32>(Expansion::GoD);
|
||||
if (expansion_mask & bitOoW == bitOoW) return static_cast<uint32>(Expansion::OoW);
|
||||
if (expansion_mask & bitDoN == bitDoN) return static_cast<uint32>(Expansion::DoN);
|
||||
if (expansion_mask & bitDoD == bitDoD) return static_cast<uint32>(Expansion::DoD);
|
||||
if (expansion_mask & bitPoR == bitPoR) return static_cast<uint32>(Expansion::PoR);
|
||||
if (expansion_mask & bitTSS == bitTSS) return static_cast<uint32>(Expansion::TSS);
|
||||
if (expansion_mask & bitTBS == bitTBS) return static_cast<uint32>(Expansion::TBS);
|
||||
if (expansion_mask & bitSoF == bitSoF) return static_cast<uint32>(Expansion::SoF);
|
||||
if (expansion_mask & bitSoD == bitSoD) return static_cast<uint32>(Expansion::SoD);
|
||||
if (expansion_mask & bitUF == bitUF) return static_cast<uint32>(Expansion::UF);
|
||||
if (expansion_mask & bitHoT == bitHoT) return static_cast<uint32>(Expansion::HoT);
|
||||
if (expansion_mask & bitVoA == bitVoA) return static_cast<uint32>(Expansion::VoA);
|
||||
if (expansion_mask & bitRoF == bitRoF) return static_cast<uint32>(Expansion::RoF);
|
||||
if (expansion_mask & bitCotF == bitCotF) return static_cast<uint32>(Expansion::CotF);
|
||||
return static_cast<uint32>(Expansion::EverQuest);
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ namespace EQEmu
|
||||
Expansion ConvertClientVersionToExpansion(versions::ClientVersion client_version);
|
||||
uint32 ConvertClientVersionToExpansionBit(versions::ClientVersion client_version);
|
||||
uint32 ConvertClientVersionToExpansionMask(versions::ClientVersion client_version);
|
||||
|
||||
uint32 ConvertExpansionMaskToLatestExpansion(uint32 expansion_mask);
|
||||
} /*expansions*/
|
||||
|
||||
} /*EQEmu*/
|
||||
|
||||
@ -413,7 +413,7 @@ bool SharedDatabase::SetSharedPlatinum(uint32 account_id, int32 amount_to_add) {
|
||||
bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) {
|
||||
|
||||
const EQEmu::ItemData* myitem;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT itemid, item_charges, slot FROM starting_items "
|
||||
"WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND "
|
||||
"(deityid = %i or deityid = 0) AND (zoneid = %i or zoneid = 0) AND "
|
||||
@ -1936,7 +1936,7 @@ void SharedDatabase::GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot
|
||||
loot_table_count = 0;
|
||||
max_loot_table = 0;
|
||||
loot_table_entries = 0;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
const std::string query = StringFormat("SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM loottable_entries) FROM loottable WHERE min_expansion <= %i AND max_expansion >= %i", latest_expansion, latest_expansion);
|
||||
auto results = QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
@ -1957,7 +1957,7 @@ void SharedDatabase::GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_d
|
||||
loot_drop_count = 0;
|
||||
max_loot_drop = 0;
|
||||
loot_drop_entries = 0;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
|
||||
const std::string query = StringFormat("SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM lootdrop_entries) FROM lootdrop WHERE min_expansion <= %i AND max_expansion >= %i", latest_expansion, latest_expansion);
|
||||
auto results = QueryDatabase(query);
|
||||
@ -1981,10 +1981,11 @@ void SharedDatabase::LoadLootTables(void *data, uint32 size) {
|
||||
uint8 loot_table[sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * 128)];
|
||||
LootTable_Struct *lt = reinterpret_cast<LootTable_Struct*>(loot_table);
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
const std::string query = StringFormat("SELECT loottable.id, loottable.mincash, loottable.maxcash, loottable.avgcoin, "
|
||||
"loottable_entries.lootdrop_id, loottable_entries.multiplier, loottable_entries.droplimit, "
|
||||
"loottable_entries.mindrop, loottable_entries.probability FROM loottable LEFT JOIN loottable_entries "
|
||||
"ON loottable.id = loottable_entries.loottable_id WHERE %d & loottable.expansions = loottable.expansions ORDER BY id", RuleI(World, ExpansionSettings));
|
||||
"ON loottable.id = loottable_entries.loottable_id WHERE min_expansion <= %i AND max_expansion >= %i ORDER BY id", latest_expansion, latest_expansion);
|
||||
auto results = QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return;
|
||||
@ -2034,7 +2035,7 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) {
|
||||
uint8 loot_drop[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)];
|
||||
LootDrop_Struct *ld = reinterpret_cast<LootDrop_Struct*>(loot_drop);
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
const std::string query = StringFormat("SELECT lootdrop.id, lootdrop_entries.item_id, lootdrop_entries.item_charges, "
|
||||
"lootdrop_entries.equip_item, lootdrop_entries.chance, lootdrop_entries.minlevel, "
|
||||
"lootdrop_entries.maxlevel, lootdrop_entries.multiplier FROM lootdrop JOIN lootdrop_entries "
|
||||
|
||||
@ -146,7 +146,7 @@ bool load_spawns_from_db(MYSQL *m, const char *zone, list<PathNode*> &db_spawns)
|
||||
bool load_doors_from_db(MYSQL *m, const char *zone, list<PathNode*> &db_spawns) {
|
||||
char query[512];
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
sprintf(query,
|
||||
"SELECT pos_x,pos_y,pos_z FROM doors "
|
||||
"WHERE zone='%s' AND min_expansion <= %i AND max_expansion >= %i", zone, latest_expansion, latest_expansion);
|
||||
|
||||
@ -637,15 +637,18 @@ bool AdventureManager::LoadAdventureTemplates()
|
||||
"assa_y, assa_z, assa_h, text, duration, zone_in_time, win_points, lose_points, "
|
||||
"theme, zone_in_zone_id, zone_in_x, zone_in_y, zone_in_object_id, dest_x, dest_y, "
|
||||
"dest_z, dest_h, graveyard_zone_id, graveyard_x, graveyard_y, graveyard_z, "
|
||||
"graveyard_radius, expansions FROM adventure_template";
|
||||
"graveyard_radius, min_expansion, max_expansion FROM adventure_template";
|
||||
auto results = database.QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
int32 expansions = atoi(row[32]);
|
||||
if (RuleI(World, ExpansionSettings) & expansions != expansions) {
|
||||
uint32 min_expansion = atoi(row[32]);
|
||||
uint32 max_expansion = atoi(row[33]);
|
||||
|
||||
if (latest_expansion < min_expansion || latest_expansion > max_expansion) {
|
||||
continue;
|
||||
}
|
||||
auto aTemplate = new AdventureTemplate;
|
||||
|
||||
@ -9472,7 +9472,7 @@ void command_object(Client *c, const Seperator *sep)
|
||||
uint32 newid = 0;
|
||||
uint16 radius;
|
||||
EQApplicationPacket *app;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
|
||||
bool bNewObject = false;
|
||||
|
||||
@ -9504,7 +9504,7 @@ void command_object(Client *c, const Seperator *sep)
|
||||
else
|
||||
c->Message(0, "Objects within %u units of your current location:", radius);
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query;
|
||||
if (radius)
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ uint32 ZoneDatabase::GetZoneForage(uint32 ZoneID, uint8 skill) {
|
||||
}
|
||||
|
||||
uint32 chancepool = 0;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT itemid, chance FROM "
|
||||
"forage WHERE zoneid = '%i' AND level <= '%i' AND min_expansion <= %i AND max_expansion >= %i "
|
||||
"LIMIT %i", ZoneID, skill, latest_expansion, latest_expansion, FORAGE_ITEM_LIMIT);
|
||||
@ -110,7 +110,7 @@ uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id,
|
||||
chance[c]=0;
|
||||
}
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT itemid, chance, npc_id, npc_chance "
|
||||
"FROM fishing WHERE (zoneid = '%i' || zoneid = 0) AND skill_level <= '%i' AND min_expansion <= %i AND max_expansion >= %i",
|
||||
ZoneID, skill, latest_expansion, latest_expansion);
|
||||
|
||||
@ -463,7 +463,7 @@ void NPC::CheckGlobalLootTables()
|
||||
|
||||
void ZoneDatabase::LoadGlobalLoot()
|
||||
{
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
auto query = StringFormat("SELECT id, loottable_id, description, min_level, max_level, rare, raid, race, "
|
||||
"class, bodytype, zone FROM global_loot WHERE enabled = 1 AND min_expansion <= %i AND max_expansion >= %i", latest_expansion, latest_expansion);
|
||||
|
||||
|
||||
@ -694,7 +694,7 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec
|
||||
}
|
||||
|
||||
Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs) {
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT max_x, max_y, max_z, "
|
||||
"min_x, min_y, heading, name, "
|
||||
"item, max_allowed, respawn_timer "
|
||||
|
||||
@ -639,7 +639,7 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList<Spawn2*> &spa
|
||||
|
||||
Spawn2* ZoneDatabase::LoadSpawn2(LinkedList<Spawn2*> &spawn2_list, uint32 spawn2id, uint32 timeleft) {
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT id, spawngroupID, x, y, z, heading, "
|
||||
"respawntime, variance, pathgrid, _condition, "
|
||||
"cond_value, enabled, animation FROM spawn2 "
|
||||
|
||||
@ -35,10 +35,10 @@ TitleManager::TitleManager() {
|
||||
bool TitleManager::LoadTitles()
|
||||
{
|
||||
Titles.clear();
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT `id`, `skill_id`, `min_skill_value`, `max_skill_value`, "
|
||||
"`min_aa_points`, `max_aa_points`, `class`, `gender`, `char_id`, "
|
||||
"`status`, `item_id`, `prefix`, `suffix`, `title_set` FROM titles WHERE %i & expansions = expansions", RuleI(World, ExpansionSettings));
|
||||
"`status`, `item_id`, `prefix`, `suffix`, `title_set` FROM titles WHERE `min_expansion` <= %i AND `max_expansion` >= %i", latest_expansion, latest_expansion);
|
||||
auto results = database.QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
|
||||
@ -387,7 +387,8 @@ bool ZoneDatabase::LoadTributes() {
|
||||
|
||||
tribute_list.clear();
|
||||
|
||||
const std::string query = StringFormat("SELECT id, name, descr, unknown, isguild FROM tributes WHERE %i & expansions = expansions", RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
const std::string query = StringFormat("SELECT id, name, descr, unknown, isguild FROM tributes WHERE min_expansion <= %i AND max_expansion >= %i", latest_expansion, latest_expansion);
|
||||
auto results = QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
|
||||
@ -168,7 +168,7 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) {
|
||||
//this really loads the objects into entity_list
|
||||
bool Zone::LoadZoneObjects()
|
||||
{
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query =
|
||||
StringFormat("SELECT id, zoneid, xpos, ypos, zpos, heading, itemid, charges, objectname, type, icon, "
|
||||
"unknown08, unknown10, unknown20, unknown24, unknown76, size, tilt_x, tilt_y, display_name "
|
||||
@ -465,7 +465,7 @@ void Zone::LoadTempMerchantData() {
|
||||
void Zone::LoadNewMerchantData(uint32 merchantid) {
|
||||
|
||||
std::list<MerchantList> merlist;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT item, slot, faction_required, level_required, alt_currency_cost, "
|
||||
"classes_required, probability FROM merchantlist WHERE merchantid=%d AND min_expansion <= %i AND max_expansion >= %i ORDER BY slot", merchantid, latest_expansion, latest_expansion);
|
||||
auto results = database.QueryDatabase(query);
|
||||
@ -1705,7 +1705,7 @@ bool ZoneDatabase::LoadStaticZonePoints(LinkedList<ZonePoint*>* zone_point_list,
|
||||
{
|
||||
zone_point_list->Clear();
|
||||
zone->numzonepoints = 0;
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
std::string query = StringFormat("SELECT x, y, z, target_x, target_y, "
|
||||
"target_z, target_zone_id, heading, target_heading, "
|
||||
"number, target_instance, client_version_mask "
|
||||
|
||||
@ -269,7 +269,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) {
|
||||
|
||||
//not sure when we would use ZONE_ERROR_NOTREADY
|
||||
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
|
||||
//enforce min status and level
|
||||
if (!ignorerestrictions && (Admin() < minstatus || GetLevel() < minlevel || (uint32)latest_expansion <= minexpansion || (uint32)latest_expansion >= maxexpansion))
|
||||
@ -883,7 +883,7 @@ bool Client::CanBeInZone() {
|
||||
Log(Logs::Detail, Logs::None, "[CLIENT] Character does not meet min status requirement (%d < %d)!", Admin(), minstatus);
|
||||
return(false);
|
||||
}
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionBitToExpansion(RuleI(World, ExpansionSettings));
|
||||
auto latest_expansion = EQEmu::expansions::ConvertExpansionMaskToLatestExpansion(RuleI(World, ExpansionSettings));
|
||||
if(Admin() < 150 && (uint32)latest_expansion < minexpansion && (uint32)latest_expansion > maxexpansion) {
|
||||
Log(Logs::Detail, Logs::None, "[CLIENT] Character does not have expansion");
|
||||
return(false);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user