From 269d56e1d0a1e652583f0095c81081178b7c60b0 Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 23 Jan 2015 00:01:10 -0800 Subject: [PATCH] Switched out our kinda juryrigged vector types for glm::vec types since we use that as a 3d math library already but never switched out the types --- zone/aa.cpp | 212 +++++++------- zone/aggro.cpp | 18 +- zone/attack.cpp | 34 +-- zone/bot.cpp | 36 +-- zone/bot.h | 6 +- zone/botspellsai.cpp | 4 +- zone/client.cpp | 326 +++++++++++----------- zone/client.h | 20 +- zone/client_packet.cpp | 142 +++++----- zone/client_process.cpp | 42 +-- zone/command.cpp | 34 +-- zone/corpse.cpp | 8 +- zone/corpse.h | 4 +- zone/doors.cpp | 18 +- zone/doors.h | 12 +- zone/effects.cpp | 12 +- zone/embparser_api.cpp | 24 +- zone/entity.cpp | 115 ++++---- zone/entity.h | 10 +- zone/fearpath.cpp | 8 +- zone/forage.cpp | 20 +- zone/groups.cpp | 16 +- zone/hate_list.cpp | 8 +- zone/horse.cpp | 2 +- zone/horse.h | 2 +- zone/lua_client.cpp | 6 +- zone/lua_door.cpp | 16 +- zone/lua_entity_list.cpp | 4 +- zone/lua_general.cpp | 26 +- zone/lua_mob.cpp | 8 +- zone/lua_npc.cpp | 16 +- zone/map.cpp | 72 ++--- zone/map.h | 35 +-- zone/merc.cpp | 26 +- zone/mob.cpp | 88 +++--- zone/mob.h | 80 +++--- zone/mob_ai.cpp | 62 ++--- zone/npc.cpp | 8 +- zone/npc.h | 22 +- zone/pathing.cpp | 88 +++--- zone/pathing.h | 14 +- zone/perl_client.cpp | 4 +- zone/perl_doors.cpp | 16 +- zone/perl_entity.cpp | 2 +- zone/perl_mob.cpp | 10 +- zone/perl_npc.cpp | 16 +- zone/pets.cpp | 126 ++++----- zone/position.cpp | 192 ++++--------- zone/position.h | 95 ++----- zone/questmgr.cpp | 24 +- zone/questmgr.h | 18 +- zone/raids.cpp | 16 +- zone/spawn2.cpp | 6 +- zone/special_attacks.cpp | 8 +- zone/spells.cpp | 20 +- zone/trap.cpp | 86 +++--- zone/trap.h | 2 +- zone/water_map.h | 10 +- zone/water_map_v1.cpp | 32 +-- zone/water_map_v1.h | 12 +- zone/water_map_v2.cpp | 12 +- zone/water_map_v2.h | 10 +- zone/waypoints.cpp | 580 +++++++++++++++++++-------------------- zone/zone.cpp | 24 +- zone/zone.h | 18 +- zone/zonedb.cpp | 46 ++-- zone/zonedb.h | 36 +-- zone/zoning.cpp | 91 +++--- 68 files changed, 1524 insertions(+), 1692 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index b1c561c9e..43ae525ef 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -546,11 +546,11 @@ void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, u if(summon_count > MAX_SWARM_PETS) summon_count = MAX_SWARM_PETS; - static const xy_location swarmPetLocations[MAX_SWARM_PETS] = { - xy_location(5, 5), xy_location(-5, 5), xy_location(5, -5), xy_location(-5, -5), - xy_location(10, 10), xy_location(-10, 10), xy_location(10, -10), xy_location(-10, -10), - xy_location(8, 8), xy_location(-8, 8), xy_location(8, -8), xy_location(-8, -8) - }; + static const glm::vec2 swarmPetLocations[MAX_SWARM_PETS] = { + glm::vec2(5, 5), glm::vec2(-5, 5), glm::vec2(5, -5), glm::vec2(-5, -5), + glm::vec2(10, 10), glm::vec2(-10, 10), glm::vec2(10, -10), glm::vec2(-10, -10), + glm::vec2(8, 8), glm::vec2(-8, 8), glm::vec2(8, -8), glm::vec2(-8, -8) + }; while(summon_count > 0) { int pet_duration = pet.duration; @@ -568,7 +568,7 @@ void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, u NPC* npca = new NPC( (npc_dup!=nullptr)?npc_dup:npc_type, //make sure we give the NPC the correct data pointer 0, - GetPosition() + swarmPetLocations[summon_count], + GetPosition() + glm::vec4(swarmPetLocations[summon_count], 0.0f, 0.0f), FlyMode3); if (followme) @@ -643,11 +643,11 @@ void Mob::TypesTemporaryPets(uint32 typesid, Mob *targ, const char *name_overrid if(summon_count > MAX_SWARM_PETS) summon_count = MAX_SWARM_PETS; - static const xy_location swarmPetLocations[MAX_SWARM_PETS] = { - xy_location(5, 5), xy_location(-5, 5), xy_location(5, -5), xy_location(-5, -5), - xy_location(10, 10), xy_location(-10, 10), xy_location(10, -10), xy_location(-10, -10), - xy_location(8, 8), xy_location(-8, 8), xy_location(8, -8), xy_location(-8, -8) - };; + static const glm::vec2 swarmPetLocations[MAX_SWARM_PETS] = { + glm::vec2(5, 5), glm::vec2(-5, 5), glm::vec2(5, -5), glm::vec2(-5, -5), + glm::vec2(10, 10), glm::vec2(-10, 10), glm::vec2(10, -10), glm::vec2(-10, -10), + glm::vec2(8, 8), glm::vec2(-8, 8), glm::vec2(8, -8), glm::vec2(-8, -8) + };; while(summon_count > 0) { int pet_duration = pet.duration; @@ -665,7 +665,7 @@ void Mob::TypesTemporaryPets(uint32 typesid, Mob *targ, const char *name_overrid NPC* npca = new NPC( (npc_dup!=nullptr)?npc_dup:npc_type, //make sure we give the NPC the correct data pointer 0, - GetPosition()+swarmPetLocations[summon_count], + GetPosition() + glm::vec4(swarmPetLocations[summon_count], 0.0f, 0.0f), FlyMode3); if (followme) @@ -1458,26 +1458,26 @@ bool ZoneDatabase::LoadAAEffects2() { const std::string query = "SELECT aaid, slot, effectid, base1, base2 FROM aa_effects ORDER BY aaid ASC, slot ASC"; auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::LoadAAEffects2 query: '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::LoadAAEffects2 query: '%s': %s", query.c_str(), results.ErrorMessage().c_str()); return false; } if (!results.RowCount()) { //no results - LogFile->write(EQEmuLog::Error, "Error loading AA Effects, none found in the database."); - return false; + LogFile->write(EQEmuLog::Error, "Error loading AA Effects, none found in the database."); + return false; } - for(auto row = results.begin(); row != results.end(); ++row) { - int aaid = atoi(row[0]); - int slot = atoi(row[1]); - int effectid = atoi(row[2]); - int base1 = atoi(row[3]); - int base2 = atoi(row[4]); - aa_effects[aaid][slot].skill_id = effectid; - aa_effects[aaid][slot].base1 = base1; - aa_effects[aaid][slot].base2 = base2; - aa_effects[aaid][slot].slot = slot; //not really needed, but we'll populate it just in case - } + for(auto row = results.begin(); row != results.end(); ++row) { + int aaid = atoi(row[0]); + int slot = atoi(row[1]); + int effectid = atoi(row[2]); + int base1 = atoi(row[3]); + int base2 = atoi(row[4]); + aa_effects[aaid][slot].skill_id = effectid; + aa_effects[aaid][slot].base1 = base1; + aa_effects[aaid][slot].base2 = base2; + aa_effects[aaid][slot].slot = slot; //not really needed, but we'll populate it just in case + } return true; } @@ -1796,34 +1796,34 @@ bool ZoneDatabase::LoadAAEffects() { memset(AA_Actions, 0, sizeof(AA_Actions)); //I hope the compiler is smart about this size... const std::string query = "SELECT aaid, rank, reuse_time, spell_id, target, " - "nonspell_action, nonspell_mana, nonspell_duration, " - "redux_aa, redux_rate, redux_aa2, redux_rate2 FROM aa_actions"; - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in LoadAAEffects query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + "nonspell_action, nonspell_mana, nonspell_duration, " + "redux_aa, redux_rate, redux_aa2, redux_rate2 FROM aa_actions"; + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in LoadAAEffects query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); return false; - } + } - for (auto row = results.begin(); row != results.end(); ++row) { + for (auto row = results.begin(); row != results.end(); ++row) { - int aaid = atoi(row[0]); - int rank = atoi(row[1]); - if(aaid < 0 || aaid >= aaHighestID || rank < 0 || rank >= MAX_AA_ACTION_RANKS) - continue; - AA_DBAction *caction = &AA_Actions[aaid][rank]; + int aaid = atoi(row[0]); + int rank = atoi(row[1]); + if(aaid < 0 || aaid >= aaHighestID || rank < 0 || rank >= MAX_AA_ACTION_RANKS) + continue; + AA_DBAction *caction = &AA_Actions[aaid][rank]; - caction->reuse_time = atoi(row[2]); - caction->spell_id = atoi(row[3]); - caction->target = (aaTargetType) atoi(row[4]); - caction->action = (aaNonspellAction) atoi(row[5]); - caction->mana_cost = atoi(row[6]); - caction->duration = atoi(row[7]); - caction->redux_aa = (aaID) atoi(row[8]); - caction->redux_rate = atoi(row[9]); - caction->redux_aa2 = (aaID) atoi(row[10]); - caction->redux_rate2 = atoi(row[11]); + caction->reuse_time = atoi(row[2]); + caction->spell_id = atoi(row[3]); + caction->target = (aaTargetType) atoi(row[4]); + caction->action = (aaNonspellAction) atoi(row[5]); + caction->mana_cost = atoi(row[6]); + caction->duration = atoi(row[7]); + caction->redux_aa = (aaID) atoi(row[8]); + caction->redux_rate = atoi(row[9]); + caction->redux_aa2 = (aaID) atoi(row[10]); + caction->redux_rate2 = atoi(row[11]); - } + } return true; } @@ -1837,16 +1837,16 @@ bool ZoneDatabase::LoadAAEffects() { uint8 ZoneDatabase::GetTotalAALevels(uint32 skill_id) { std::string query = StringFormat("SELECT count(slot) FROM aa_effects WHERE aaid = %i", skill_id); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetTotalAALevels '%s: %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; - } + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetTotalAALevels '%s: %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; + } - if (results.RowCount() != 1) - return 0; + if (results.RowCount() != 1) + return 0; - auto row = results.begin(); + auto row = results.begin(); return atoi(row[0]); } @@ -1893,14 +1893,14 @@ uint32 ZoneDatabase::CountAAs(){ const std::string query = "SELECT count(title_sid) FROM altadv_vars"; auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::CountAAs query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; + LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::CountAAs query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; } if (results.RowCount() != 1) - return 0; + return 0; - auto row = results.begin(); + auto row = results.begin(); return atoi(row[0]);; } @@ -1910,14 +1910,14 @@ uint32 ZoneDatabase::CountAAEffects() { const std::string query = "SELECT count(id) FROM aa_effects"; auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::CountAALevels query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; + LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::CountAALevels query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; } if (results.RowCount() != 1) - return 0; + return 0; - auto row = results.begin(); + auto row = results.begin(); return atoi(row[0]); } @@ -1947,59 +1947,59 @@ void ZoneDatabase::LoadAAs(SendAA_Struct **load){ } AARequiredLevelAndCost.clear(); - query = "SELECT skill_id, level, cost from aa_required_level_cost order by skill_id"; - results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::LoadAAs query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return; - } + query = "SELECT skill_id, level, cost from aa_required_level_cost order by skill_id"; + results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in ZoneDatabase::LoadAAs query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return; + } - AALevelCost_Struct aalcs; - for (auto row = results.begin(); row != results.end(); ++row) { - aalcs.Level = atoi(row[1]); - aalcs.Cost = atoi(row[2]); - AARequiredLevelAndCost[atoi(row[0])] = aalcs; - } + AALevelCost_Struct aalcs; + for (auto row = results.begin(); row != results.end(); ++row) { + aalcs.Level = atoi(row[1]); + aalcs.Cost = atoi(row[2]); + AARequiredLevelAndCost[atoi(row[0])] = aalcs; + } } SendAA_Struct* ZoneDatabase::GetAASkillVars(uint32 skill_id) { std::string query = "SET @row = 0"; //initialize "row" variable in database for next query - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetAASkillVars '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return nullptr; - } + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetAASkillVars '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return nullptr; + } - query = StringFormat("SELECT a.cost, a.max_level, a.hotkey_sid, a.hotkey_sid2, a.title_sid, a.desc_sid, a.type, " - "COALESCE(" //So we can return 0 if it's null. - "(" // this is our derived table that has the row # - // that we can SELECT from, because the client is stupid. - "SELECT p.prereq_index_num " - "FROM (SELECT a2.skill_id, @row := @row + 1 AS prereq_index_num " + query = StringFormat("SELECT a.cost, a.max_level, a.hotkey_sid, a.hotkey_sid2, a.title_sid, a.desc_sid, a.type, " + "COALESCE(" //So we can return 0 if it's null. + "(" // this is our derived table that has the row # + // that we can SELECT from, because the client is stupid. + "SELECT p.prereq_index_num " + "FROM (SELECT a2.skill_id, @row := @row + 1 AS prereq_index_num " "FROM altadv_vars a2) AS p " - "WHERE p.skill_id = a.prereq_skill), 0) " - "AS prereq_skill_index, a.prereq_minpoints, a.spell_type, a.spell_refresh, a.classes, " - "a.berserker, a.spellid, a.class_type, a.name, a.cost_inc, a.aa_expansion, a.special_category, " - "a.sof_type, a.sof_cost_inc, a.sof_max_level, a.sof_next_skill, " - "a.clientver, " // Client Version 0 = None, 1 = All, 2 = Titanium/6.2, 4 = SoF 5 = SOD 6 = UF - "a.account_time_required, a.sof_current_level, a.sof_next_id, a.level_inc " - "FROM altadv_vars a WHERE skill_id=%i", skill_id); - results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetAASkillVars '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return nullptr; - } + "WHERE p.skill_id = a.prereq_skill), 0) " + "AS prereq_skill_index, a.prereq_minpoints, a.spell_type, a.spell_refresh, a.classes, " + "a.berserker, a.spellid, a.class_type, a.name, a.cost_inc, a.aa_expansion, a.special_category, " + "a.sof_type, a.sof_cost_inc, a.sof_max_level, a.sof_next_skill, " + "a.clientver, " // Client Version 0 = None, 1 = All, 2 = Titanium/6.2, 4 = SoF 5 = SOD 6 = UF + "a.account_time_required, a.sof_current_level, a.sof_next_id, a.level_inc " + "FROM altadv_vars a WHERE skill_id=%i", skill_id); + results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetAASkillVars '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return nullptr; + } - if (results.RowCount() != 1) - return nullptr; + if (results.RowCount() != 1) + return nullptr; - int total_abilities = GetTotalAALevels(skill_id); //eventually we'll want to use zone->GetTotalAALevels(skill_id) since it should save queries to the DB + int total_abilities = GetTotalAALevels(skill_id); //eventually we'll want to use zone->GetTotalAALevels(skill_id) since it should save queries to the DB int totalsize = total_abilities * sizeof(AA_Ability) + sizeof(SendAA_Struct); - SendAA_Struct* sendaa = nullptr; - uchar* buffer; + SendAA_Struct* sendaa = nullptr; + uchar* buffer; buffer = new uchar[totalsize]; memset(buffer,0,totalsize); @@ -2010,7 +2010,7 @@ SendAA_Struct* ZoneDatabase::GetAASkillVars(uint32 skill_id) //ATOI IS NOT UNSIGNED LONG-SAFE!!! sendaa->cost = atoul(row[0]); - sendaa->cost2 = sendaa->cost; + sendaa->cost2 = sendaa->cost; sendaa->max_level = atoul(row[1]); sendaa->hotkey_sid = atoul(row[2]); sendaa->id = skill_id; diff --git a/zone/aggro.cpp b/zone/aggro.cpp index 7e8080cc7..c490eb537 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -88,7 +88,7 @@ void EntityList::DescribeAggro(Client *towho, NPC *from_who, float d, bool verbo if (mob->IsClient()) //also ensures that mob != around continue; - if (ComparativeDistance(mob->GetPosition(), from_who->GetPosition()) > d2) + if (DistanceSquared(mob->GetPosition(), from_who->GetPosition()) > d2) continue; if (engaged) { @@ -150,7 +150,7 @@ void NPC::DescribeAggro(Client *towho, Mob *mob, bool verbose) { return; } - float dist2 = ComparativeDistance(mob->GetPosition(), m_Position); + float dist2 = DistanceSquared(mob->GetPosition(), m_Position); float iAggroRange2 = iAggroRange*iAggroRange; if( dist2 > iAggroRange2 ) { @@ -296,7 +296,7 @@ bool Mob::CheckWillAggro(Mob *mob) { return(false); } - float dist2 = ComparativeDistance(mob->GetPosition(), m_Position); + float dist2 = DistanceSquared(mob->GetPosition(), m_Position); float iAggroRange2 = iAggroRange*iAggroRange; if( dist2 > iAggroRange2 ) { @@ -414,7 +414,7 @@ int EntityList::GetHatedCount(Mob *attacker, Mob *exclude) AggroRange *= AggroRange; - if (ComparativeDistance(mob->GetPosition(), attacker->GetPosition()) > AggroRange) + if (DistanceSquared(mob->GetPosition(), attacker->GetPosition()) > AggroRange) continue; Count++; @@ -444,7 +444,7 @@ void EntityList::AIYellForHelp(Mob* sender, Mob* attacker) { // && !mob->IsCorpse() // && mob->IsAIControlled() && mob->GetPrimaryFaction() != 0 - && ComparativeDistance(mob->GetPosition(), sender->GetPosition()) <= r + && DistanceSquared(mob->GetPosition(), sender->GetPosition()) <= r && !mob->IsEngaged() && ((!mob->IsPet()) || (mob->IsPet() && mob->GetOwner() && !mob->GetOwner()->IsClient())) // If we're a pet we don't react to any calls for help if our owner is a client @@ -471,7 +471,7 @@ void EntityList::AIYellForHelp(Mob* sender, Mob* attacker) { if(mob->CheckLosFN(sender)) { #if (EQDEBUG>=5) LogFile->write(EQEmuLog::Debug, "AIYellForHelp(\"%s\",\"%s\") %s attacking %s Dist %f Z %f", - sender->GetName(), attacker->GetName(), mob->GetName(), attacker->GetName(), ComparativeDistance(mob->GetPosition(), sender->GetPosition()), fabs(sender->GetZ()+mob->GetZ())); + sender->GetName(), attacker->GetName(), mob->GetName(), attacker->GetName(), DistanceSquared(mob->GetPosition(), sender->GetPosition()), fabs(sender->GetZ()+mob->GetZ())); #endif mob->AddToHateList(attacker, 1, 0, false); } @@ -878,7 +878,7 @@ bool Mob::CombatRange(Mob* other) if (size_mod > 10000) size_mod = size_mod / 7; - float _DistNoRoot = ComparativeDistance(m_Position, other->GetPosition()); + float _DistNoRoot = DistanceSquared(m_Position, other->GetPosition()); if (GetSpecialAbility(NPC_CHASE_DISTANCE)){ @@ -935,8 +935,8 @@ bool Mob::CheckLosFN(float posX, float posY, float posZ, float mobSize) { #endif } - Map::Vertex myloc; - Map::Vertex oloc; + glm::vec3 myloc; + glm::vec3 oloc; #define LOS_DEFAULT_HEIGHT 6.0f diff --git a/zone/attack.cpp b/zone/attack.cpp index 8d36c16ed..180db30a2 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -2471,7 +2471,7 @@ void Mob::AddToHateList(Mob* other, uint32 hate /*= 0*/, int32 damage /*= 0*/, b } if(IsNPC() && CastToNPC()->IsUnderwaterOnly() && zone->HasWaterMap()) { - if(!zone->watermap->InLiquid(other->GetPosition())) { + if(!zone->watermap->InLiquid(glm::vec3(other->GetPosition()))) { return; } } @@ -3917,8 +3917,8 @@ void Mob::TryDefensiveProc(const ItemInst* weapon, Mob *on, uint16 hand) { float chance = ProcChance * (static_cast(DefensiveProcs[i].chance)/100.0f); if (zone->random.Roll(chance)) { ExecWeaponProc(nullptr, DefensiveProcs[i].spellID, on); - CheckNumHitsRemaining(NumHit::DefensiveSpellProcs, 0, - DefensiveProcs[i].base_spellID); + CheckNumHitsRemaining(NumHit::DefensiveSpellProcs, 0, + DefensiveProcs[i].base_spellID); } } } @@ -4095,7 +4095,7 @@ void Mob::TrySpellProc(const ItemInst *inst, const Item_Struct *weapon, Mob *on, i, SpellProcs[i].spellID, chance); ExecWeaponProc(nullptr, SpellProcs[i].spellID, on); CheckNumHitsRemaining(NumHit::OffensiveSpellProcs, 0, - SpellProcs[i].base_spellID); + SpellProcs[i].base_spellID); } else { mlog(COMBAT__PROCS, "Spell proc %d failed to proc %d (%.2f percent chance)", @@ -4112,7 +4112,7 @@ void Mob::TrySpellProc(const ItemInst *inst, const Item_Struct *weapon, Mob *on, i, RangedProcs[i].spellID, chance); ExecWeaponProc(nullptr, RangedProcs[i].spellID, on); CheckNumHitsRemaining(NumHit::OffensiveSpellProcs, 0, - RangedProcs[i].base_spellID); + RangedProcs[i].base_spellID); } else { mlog(COMBAT__PROCS, "Ranged proc %d failed to proc %d (%.2f percent chance)", @@ -4530,7 +4530,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui if (zone->random.Roll(final_chance)) { ExecWeaponProc(nullptr, proc_spell_id, on); CheckNumHitsRemaining(NumHit::OffensiveSpellProcs, 0, - base_spell_id); + base_spell_id); CanProc = false; break; } @@ -4824,20 +4824,20 @@ void Mob::CommonBreakInvisible() /* Dev quotes: * Old formula - * Final delay = (Original Delay / (haste mod *.01f)) + ((Hundred Hands / 100) * Original Delay) + * Final delay = (Original Delay / (haste mod *.01f)) + ((Hundred Hands / 100) * Original Delay) * New formula - * Final delay = (Original Delay / (haste mod *.01f)) + ((Hundred Hands / 1000) * (Original Delay / (haste mod *.01f)) - * Base Delay 20 25 30 37 - * Haste 2.25 2.25 2.25 2.25 - * HHE (old) -17 -17 -17 -17 - * Final Delay 5.488888889 6.861111111 8.233333333 10.15444444 + * Final delay = (Original Delay / (haste mod *.01f)) + ((Hundred Hands / 1000) * (Original Delay / (haste mod *.01f)) + * Base Delay 20 25 30 37 + * Haste 2.25 2.25 2.25 2.25 + * HHE (old) -17 -17 -17 -17 + * Final Delay 5.488888889 6.861111111 8.233333333 10.15444444 * - * Base Delay 20 25 30 37 - * Haste 2.25 2.25 2.25 2.25 - * HHE (new) -383 -383 -383 -383 - * Final Delay 5.484444444 6.855555556 8.226666667 10.14622222 + * Base Delay 20 25 30 37 + * Haste 2.25 2.25 2.25 2.25 + * HHE (new) -383 -383 -383 -383 + * Final Delay 5.484444444 6.855555556 8.226666667 10.14622222 * - * Difference -0.004444444 -0.005555556 -0.006666667 -0.008222222 + * Difference -0.004444444 -0.005555556 -0.006666667 -0.008222222 * * These times are in 10th of a second */ diff --git a/zone/bot.cpp b/zone/bot.cpp index b6b464b07..44e212155 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -9,7 +9,7 @@ extern volatile bool ZoneLoaded; // This constructor is used during the bot create command -Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, xyz_heading::Origin(), 0, false), rest_timer(1) { +Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, glm::vec4(), 0, false), rest_timer(1) { if(botOwner) { this->SetBotOwner(botOwner); this->_botOwnerCharacterID = botOwner->CharacterID(); @@ -99,7 +99,7 @@ Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, xyz } // This constructor is used when the bot is loaded out of the database -Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType npcTypeData) : NPC(&npcTypeData, nullptr, xyz_heading::Origin(), 0, false), rest_timer(1) { +Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType npcTypeData) : NPC(&npcTypeData, nullptr, glm::vec4(), 0, false), rest_timer(1) { this->_botOwnerCharacterID = botOwnerCharacterID; if(this->_botOwnerCharacterID > 0) { @@ -3354,7 +3354,7 @@ void Bot::AI_Process() { if(GetHasBeenSummoned()) { if(IsBotCaster() || IsBotArcher()) { if (AImovement_timer->Check()) { - if(!GetTarget() || (IsBotCaster() && !IsBotCasterCombatRange(GetTarget())) || (IsBotArcher() && IsArcheryRange(GetTarget())) || (ComparativeDistanceNoZ(static_cast(m_Position), m_PreSummonLocation) < 10)) { + if(!GetTarget() || (IsBotCaster() && !IsBotCasterCombatRange(GetTarget())) || (IsBotArcher() && IsArcheryRange(GetTarget())) || (DistanceSquaredNoZ(static_cast(m_Position), m_PreSummonLocation) < 10)) { if(GetTarget()) FaceTarget(GetTarget()); SetHasBeenSummoned(false); @@ -3363,8 +3363,8 @@ void Bot::AI_Process() { if(GetTarget() && GetTarget()->GetHateTop() && GetTarget()->GetHateTop() != this) { mlog(AI__WAYPOINTS, "Returning to location prior to being summoned."); - CalculateNewPosition2(m_PreSummonLocation.m_X, m_PreSummonLocation.m_Y, m_PreSummonLocation.m_Z, GetRunspeed()); - SetHeading(CalculateHeadingToTarget(m_PreSummonLocation.m_X, m_PreSummonLocation.m_Y)); + CalculateNewPosition2(m_PreSummonLocation.x, m_PreSummonLocation.y, m_PreSummonLocation.z, GetRunspeed()); + SetHeading(CalculateHeadingToTarget(m_PreSummonLocation.x, m_PreSummonLocation.y)); return; } } @@ -3505,7 +3505,7 @@ void Bot::AI_Process() { if(IsBotCasterCombatRange(GetTarget())) atCombatRange = true; } - else if(ComparativeDistance(m_Position, GetTarget()->GetPosition()) <= meleeDistance) { + else if(DistanceSquared(m_Position, GetTarget()->GetPosition()) <= meleeDistance) { atCombatRange = true; } @@ -3533,7 +3533,7 @@ void Bot::AI_Process() { return; } } - else if(!IsMoving() && GetClass() != ROGUE && (ComparativeDistanceNoZ(m_Position, GetTarget()->GetPosition()) < GetTarget()->GetSize())) { + else if(!IsMoving() && GetClass() != ROGUE && (DistanceSquaredNoZ(m_Position, GetTarget()->GetPosition()) < GetTarget()->GetSize())) { // If we are not a rogue trying to backstab, let's try to adjust our melee range so we don't appear to be bunched up float newX = 0; float newY = 0; @@ -3732,7 +3732,7 @@ void Bot::AI_Process() { Mob* follow = entity_list.GetMob(GetFollowID()); if(follow) { - float dist = ComparativeDistance(m_Position, follow->GetPosition()); + float dist = DistanceSquared(m_Position, follow->GetPosition()); float speed = follow->GetRunspeed(); if(dist < GetFollowDistance() + 1000) @@ -3865,7 +3865,7 @@ void Bot::PetAIProcess() { return; } } - else if(ComparativeDistanceNoZ(botPet->GetPosition(), botPet->GetTarget()->GetPosition()) < botPet->GetTarget()->GetSize()) { + else if(DistanceSquaredNoZ(botPet->GetPosition(), botPet->GetTarget()->GetPosition()) < botPet->GetTarget()->GetSize()) { // Let's try to adjust our melee range so we don't appear to be bunched up bool isBehindMob = false; bool moveBehindMob = false; @@ -4003,7 +4003,7 @@ void Bot::PetAIProcess() { switch(pStandingPetOrder) { case SPO_Follow: { - float dist = ComparativeDistance(botPet->GetPosition(), botPet->GetTarget()->GetPosition()); + float dist = DistanceSquared(botPet->GetPosition(), botPet->GetTarget()->GetPosition()); botPet->SetRunAnimSpeed(0); if(dist > 184) { botPet->CalculateNewPosition2(botPet->GetTarget()->GetX(), botPet->GetTarget()->GetY(), botPet->GetTarget()->GetZ(), botPet->GetTarget()->GetRunspeed()); @@ -4105,9 +4105,9 @@ void Bot::Spawn(Client* botCharacterOwner, std::string* errorMessage) { this->GetBotOwner()->CastToClient()->Message(13, "%s save failed!", this->GetCleanName()); // Spawn the bot at the bow owner's loc - this->m_Position.m_X = botCharacterOwner->GetX(); - this->m_Position.m_Y = botCharacterOwner->GetY(); - this->m_Position.m_Z = botCharacterOwner->GetZ(); + this->m_Position.x = botCharacterOwner->GetX(); + this->m_Position.y = botCharacterOwner->GetY(); + this->m_Position.z = botCharacterOwner->GetZ(); // Make the bot look at the bot owner FaceTarget(botCharacterOwner); @@ -10387,7 +10387,7 @@ bool Bot::IsArcheryRange(Mob *target) { range *= range; - float targetDistance = ComparativeDistanceNoZ(m_Position, target->GetPosition()); + float targetDistance = DistanceSquaredNoZ(m_Position, target->GetPosition()); float minRuleDistance = RuleI(Combat, MinRangedAttackDist) * RuleI(Combat, MinRangedAttackDist); @@ -10411,7 +10411,7 @@ bool Bot::IsBotCasterCombatRange(Mob *target) { // half the max so the bot doesn't always stop at max range to allow combat movement range *= .5; - float targetDistance = ComparativeDistanceNoZ(m_Position, target->GetPosition()); + float targetDistance = DistanceSquaredNoZ(m_Position, target->GetPosition()); if(targetDistance > range) result = false; @@ -15749,9 +15749,9 @@ void EntityList::BotPickLock(Bot* rogue) auto diff = rogue->GetPosition() - cdoor->GetPosition(); diff.ABS_XYZ(); - float curdist = diff.m_X * diff.m_X + diff.m_Y * diff.m_Y; + float curdist = diff.x * diff.x + diff.y * diff.y; - if((diff.m_Z * diff.m_Z >= 10) || (curdist > 130)) + if((diff.z * diff.z >= 10) || (curdist > 130)) continue; // All rogue items with lock pick bonuses are hands or primary @@ -16161,7 +16161,7 @@ bool Bot::HasOrMayGetAggro() { void Bot::SetHasBeenSummoned(bool wasSummoned) { _hasBeenSummoned = wasSummoned; if(!wasSummoned) - m_PreSummonLocation = xyz_location::Origin(); + m_PreSummonLocation = glm::vec3(); } diff --git a/zone/bot.h b/zone/bot.h index b783c150a..8caad99f0 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -448,7 +448,7 @@ public: uint32 GetAA(uint32 aa_id); void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); bool GetHasBeenSummoned() { return _hasBeenSummoned; } - const xyz_location GetPreSummonLocation() const { return m_PreSummonLocation; } + const glm::vec3 GetPreSummonLocation() const { return m_PreSummonLocation; } bool GetGroupMessagesOn() { return _groupMessagesOn; } bool GetInHealRotation() { return _isInHealRotation; } bool GetHealRotationActive() { return (GetInHealRotation() && _isHealRotationActive); } @@ -533,7 +533,7 @@ public: void SetSpellRecastTimer(int timer_index, int32 recast_delay); void SetDisciplineRecastTimer(int timer_index, int32 recast_delay); void SetHasBeenSummoned(bool s); - void SetPreSummonLocation(const xyz_location& location) { m_PreSummonLocation = location; } + void SetPreSummonLocation(const glm::vec3& location) { m_PreSummonLocation = location; } void SetGroupMessagesOn(bool groupMessagesOn) { _groupMessagesOn = groupMessagesOn; } void SetInHealRotation( bool inRotation ) { _isInHealRotation = inRotation; } void SetHealRotationActive( bool isActive ) { _isHealRotationActive = isActive; } @@ -600,7 +600,7 @@ private: int32 end_regen; uint32 timers[MaxTimer]; bool _hasBeenSummoned; - xyz_location m_PreSummonLocation; + glm::vec3 m_PreSummonLocation; uint8 _spellCastingChances[MaxStances][MaxSpellTypes]; bool _groupMessagesOn; bool _isInHealRotation; diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index c6c5e920c..7f469c8a7 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -898,7 +898,7 @@ bool Bot::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain if (AIspells[i].type & SpellType_Escape) { dist2 = 0; } else - dist2 = ComparativeDistance(m_Position, tar->GetPosition()); + dist2 = DistanceSquared(m_Position, tar->GetPosition()); if (((((spells[AIspells[i].spellid].targettype==ST_GroupTeleport && AIspells[i].type==2) || spells[AIspells[i].spellid].targettype==ST_AECaster @@ -1755,7 +1755,7 @@ Mob* Bot::GetFirstIncomingMobToMez(Bot* botCaster, BotSpell botSpell) { for(std::list::iterator itr = npc_list.begin(); itr != npc_list.end(); ++itr) { NPC* npc = *itr; - if(ComparativeDistanceNoZ(npc->GetPosition(), botCaster->GetPosition()) <= botCaster->GetActSpellRange(botSpell.SpellId, spells[botSpell.SpellId].range)) { + if(DistanceSquaredNoZ(npc->GetPosition(), botCaster->GetPosition()) <= botCaster->GetActSpellRange(botSpell.SpellId, spells[botSpell.SpellId].range)) { if(!npc->IsMezzed()) { if(botCaster->HasGroup()) { Group* g = botCaster->GetGroup(); diff --git a/zone/client.cpp b/zone/client.cpp index feb47dc6f..dace292fc 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -76,7 +76,7 @@ Client::Client(EQStreamInterface* ieqs) 0, // npctypeid 0, // size 0.7, // runspeed - xyz_heading::Origin(), + glm::vec4(), 0, // light 0xFF, // texture 0xFF, // helmtexture @@ -374,9 +374,9 @@ Client::~Client() { { m_pp.zone_id = m_pp.binds[0].zoneId; m_pp.zoneInstance = m_pp.binds[0].instance_id; - m_Position.m_X = m_pp.binds[0].x; - m_Position.m_Y = m_pp.binds[0].y; - m_Position.m_Z = m_pp.binds[0].z; + m_Position.x = m_pp.binds[0].x; + m_Position.y = m_pp.binds[0].y; + m_Position.z = m_pp.binds[0].z; } // we save right now, because the client might be zoning and the world @@ -500,11 +500,11 @@ bool Client::Save(uint8 iCommitNow) { return false; /* Wrote current basics to PP for saves */ - m_pp.x = m_Position.m_X; - m_pp.y = m_Position.m_Y; - m_pp.z = m_Position.m_Z; + m_pp.x = m_Position.x; + m_pp.y = m_Position.y; + m_pp.z = m_Position.z; m_pp.guildrank = guildrank; - m_pp.heading = m_Position.m_Heading; + m_pp.heading = m_Position.w; /* Mana and HP */ if (GetHP() <= 0) { @@ -521,8 +521,8 @@ bool Client::Save(uint8 iCommitNow) { database.SaveCharacterCurrency(CharacterID(), &m_pp); /* Save Current Bind Points */ - auto regularBindPosition = xyz_heading(m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, 0.0f); - auto homeBindPosition = xyz_heading(m_pp.binds[4].x, m_pp.binds[4].y, m_pp.binds[4].z, 0.0f); + auto regularBindPosition = glm::vec4(m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, 0.0f); + auto homeBindPosition = glm::vec4(m_pp.binds[4].x, m_pp.binds[4].y, m_pp.binds[4].z, 0.0f); database.SaveCharacterBindPoint(CharacterID(), m_pp.binds[0].zoneId, m_pp.binds[0].instance_id, regularBindPosition, 0); /* Regular bind */ database.SaveCharacterBindPoint(CharacterID(), m_pp.binds[4].zoneId, m_pp.binds[4].instance_id, homeBindPosition, 1); /* Home Bind */ @@ -994,7 +994,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s CheckEmoteHail(GetTarget(), message); - if(ComparativeDistanceNoZ(m_Position, GetTarget()->GetPosition()) <= 200) { + if(DistanceSquaredNoZ(m_Position, GetTarget()->GetPosition()) <= 200) { NPC *tar = GetTarget()->CastToNPC(); parse->EventNPC(EVENT_SAY, tar->CastToNPC(), this, message, language); @@ -1006,7 +1006,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s } } else { - if (ComparativeDistanceNoZ(m_Position, GetTarget()->GetPosition()) <= 200) { + if (DistanceSquaredNoZ(m_Position, GetTarget()->GetPosition()) <= 200) { parse->EventNPC(EVENT_AGGRO_SAY, GetTarget()->CastToNPC(), this, message, language); } } @@ -2540,7 +2540,7 @@ bool Client::BindWound(Mob* bindmob, bool start, bool fail){ } else { - if (!GetFeigned() && (ComparativeDistance(bindmob->GetPosition(), m_Position) <= 400)) { + if (!GetFeigned() && (DistanceSquared(bindmob->GetPosition(), m_Position) <= 400)) { // send bindmob bind done if(!bindmob->IsAIControlled() && bindmob != this ) { @@ -3179,7 +3179,7 @@ void Client::Insight(uint32 t_id) Message(0,"This ability can only be used on NPCs."); return; } - if (Distance(static_cast(m_Position), static_cast(who->GetPosition())) > 200) + if (Distance(static_cast(m_Position), static_cast(who->GetPosition())) > 200) { Message(0,"You must get closer to your target!"); return; @@ -3839,37 +3839,37 @@ void Client::SendWindow(uint32 PopupID, uint32 NegativeID, uint32 Buttons, const void Client::KeyRingLoad() { std::string query = StringFormat("SELECT item_id FROM keyring " - "WHERE char_id = '%i' ORDER BY item_id", character_id); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - std::cerr << "Error in Client::KeyRingLoad query '" << query << "' " << results.ErrorMessage() << std::endl; + "WHERE char_id = '%i' ORDER BY item_id", character_id); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + std::cerr << "Error in Client::KeyRingLoad query '" << query << "' " << results.ErrorMessage() << std::endl; return; - } + } - for (auto row = results.begin(); row != results.end(); ++row) - keyring.push_back(atoi(row[0])); + for (auto row = results.begin(); row != results.end(); ++row) + keyring.push_back(atoi(row[0])); } void Client::KeyRingAdd(uint32 item_id) { if(0==item_id) - return; + return; bool found = KeyRingCheck(item_id); if (found) - return; + return; - std::string query = StringFormat("INSERT INTO keyring(char_id, item_id) VALUES(%i, %i)", character_id, item_id); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - std::cerr << "Error in Doors::HandleClick query '" << query << "' " << results.ErrorMessage() << std::endl; - return; - } + std::string query = StringFormat("INSERT INTO keyring(char_id, item_id) VALUES(%i, %i)", character_id, item_id); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + std::cerr << "Error in Doors::HandleClick query '" << query << "' " << results.ErrorMessage() << std::endl; + return; + } - Message(4,"Added to keyring."); + Message(4,"Added to keyring."); - keyring.push_back(item_id); + keyring.push_back(item_id); } bool Client::KeyRingCheck(uint32 item_id) @@ -3901,15 +3901,15 @@ void Client::KeyRingList() bool Client::IsDiscovered(uint32 itemid) { std::string query = StringFormat("SELECT count(*) FROM discovered_items WHERE item_id = '%lu'", itemid); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - std::cerr << "Error in IsDiscovered query '" << query << "' " << results.ErrorMessage() << std::endl; - return false; - } + auto results = database.QueryDatabase(query); + if (!results.Success()) { + std::cerr << "Error in IsDiscovered query '" << query << "' " << results.ErrorMessage() << std::endl; + return false; + } auto row = results.begin(); - if (!atoi(row[0])) - return false; + if (!atoi(row[0])) + return false; return true; } @@ -3917,9 +3917,9 @@ bool Client::IsDiscovered(uint32 itemid) { void Client::DiscoverItem(uint32 itemid) { std::string query = StringFormat("INSERT INTO discovered_items " - "SET item_id = %lu, char_name = '%s', " - "discovered_date = UNIX_TIMESTAMP(), account_status = %i", - itemid, GetName(), Admin()); + "SET item_id = %lu, char_name = '%s', " + "discovered_date = UNIX_TIMESTAMP(), account_status = %i", + itemid, GetName(), Admin()); auto results = database.QueryDatabase(query); parse->EventPlayer(EVENT_DISCOVER_ITEM, this, "", itemid); @@ -4553,7 +4553,7 @@ void Client::HandleLDoNOpen(NPC *target) return; } - if(ComparativeDistanceNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if(DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { LogFile->write(EQEmuLog::Debug, "%s tried to open %s but %s was out of range", GetName(), target->GetName(), target->GetName()); @@ -4806,11 +4806,11 @@ void Client::SummonAndRezzAllCorpses() Message(clientMessageYellow, "All your corpses have been summoned to your feet and have received a 100% resurrection."); } -void Client::SummonAllCorpses(const xyz_heading& position) +void Client::SummonAllCorpses(const glm::vec4& position) { - auto summonLocation = position; - if(position.isOrigin() && position.m_Heading == 0.0f) - summonLocation = GetPosition(); + auto summonLocation = position; + if(IsOrigin(position) && position.w == 0.0f) + summonLocation = GetPosition(); ServerPacket *Pack = new ServerPacket(ServerOP_DepopAllPlayersCorpses, sizeof(ServerDepopAllPlayersCorpses_Struct)); @@ -5285,50 +5285,50 @@ void Client::SendRewards() { std::vector rewards; std::string query = StringFormat("SELECT reward_id, amount " - "FROM account_rewards " - "WHERE account_id = %i " - "ORDER BY reward_id", AccountID()); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in Client::SendRewards(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); + "FROM account_rewards " + "WHERE account_id = %i " + "ORDER BY reward_id", AccountID()); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in Client::SendRewards(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); return; - } + } - for (auto row = results.begin(); row != results.end(); ++row) { - ClientReward cr; - cr.id = atoi(row[0]); - cr.amount = atoi(row[1]); - rewards.push_back(cr); - } + for (auto row = results.begin(); row != results.end(); ++row) { + ClientReward cr; + cr.id = atoi(row[0]); + cr.amount = atoi(row[1]); + rewards.push_back(cr); + } if(rewards.size() == 0) - return; + return; EQApplicationPacket *vetapp = new EQApplicationPacket(OP_VetRewardsAvaliable, (sizeof(InternalVeteranReward) * rewards.size())); - uchar *data = vetapp->pBuffer; - for(int i = 0; i < rewards.size(); ++i) { - InternalVeteranReward *ivr = (InternalVeteranReward*)data; - ivr->claim_id = rewards[i].id; - ivr->number_available = rewards[i].amount; - auto iter = zone->VeteranRewards.begin(); - for (;iter != zone->VeteranRewards.end(); ++iter) - if((*iter).claim_id == rewards[i].id) - break; + uchar *data = vetapp->pBuffer; + for(int i = 0; i < rewards.size(); ++i) { + InternalVeteranReward *ivr = (InternalVeteranReward*)data; + ivr->claim_id = rewards[i].id; + ivr->number_available = rewards[i].amount; + auto iter = zone->VeteranRewards.begin(); + for (;iter != zone->VeteranRewards.end(); ++iter) + if((*iter).claim_id == rewards[i].id) + break; - if(iter != zone->VeteranRewards.end()) { - InternalVeteranReward ivro = (*iter); - ivr->claim_count = ivro.claim_count; - for(int x = 0; x < ivro.claim_count; ++x) { - ivr->items[x].item_id = ivro.items[x].item_id; - ivr->items[x].charges = ivro.items[x].charges; - strcpy(ivr->items[x].item_name, ivro.items[x].item_name); - } - } + if(iter != zone->VeteranRewards.end()) { + InternalVeteranReward ivro = (*iter); + ivr->claim_count = ivro.claim_count; + for(int x = 0; x < ivro.claim_count; ++x) { + ivr->items[x].item_id = ivro.items[x].item_id; + ivr->items[x].charges = ivro.items[x].charges; + strcpy(ivr->items[x].item_name, ivro.items[x].item_name); + } + } - data += sizeof(InternalVeteranReward); - } + data += sizeof(InternalVeteranReward); + } - FastQueuePacket(&vetapp); + FastQueuePacket(&vetapp); } bool Client::TryReward(uint32 claim_id) { @@ -5354,20 +5354,20 @@ bool Client::TryReward(uint32 claim_id) { char errbuf[MYSQL_ERRMSG_SIZE]; std::string query = StringFormat("SELECT amount FROM account_rewards " - "WHERE account_id = %i AND reward_id = %i", - AccountID(), claim_id); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); + "WHERE account_id = %i AND reward_id = %i", + AccountID(), claim_id); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); return false; - } + } - if (results.RowCount() == 0) - return false; + if (results.RowCount() == 0) + return false; - auto row = results.begin(); + auto row = results.begin(); - uint32 amt = atoi(row[0]); + uint32 amt = atoi(row[0]); if(amt == 0) return false; @@ -5380,18 +5380,18 @@ bool Client::TryReward(uint32 claim_id) { return false; if(amt == 1) { - query = StringFormat("DELETE FROM account_rewards " - "WHERE account_id = %i AND reward_id = %i", - AccountID(), claim_id); - auto results = database.QueryDatabase(query); + query = StringFormat("DELETE FROM account_rewards " + "WHERE account_id = %i AND reward_id = %i", + AccountID(), claim_id); + auto results = database.QueryDatabase(query); if(!results.Success()) LogFile->write(EQEmuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); } else { - query = StringFormat("UPDATE account_rewards SET amount = (amount-1) " - "WHERE account_id = %i AND reward_id = %i", - AccountID(), claim_id); - auto results = database.QueryDatabase(query); + query = StringFormat("UPDATE account_rewards SET amount = (amount-1) " + "WHERE account_id = %i AND reward_id = %i", + AccountID(), claim_id); + auto results = database.QueryDatabase(query); if(!results.Success()) LogFile->write(EQEmuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str()); } @@ -5399,31 +5399,31 @@ bool Client::TryReward(uint32 claim_id) { InternalVeteranReward ivr = (*iter); ItemInst *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges); if(!claim) { - Save(); - return true; + Save(); + return true; } - bool lore_conflict = CheckLoreConflict(claim->GetItem()); + bool lore_conflict = CheckLoreConflict(claim->GetItem()); - for(int y = 1; y < 8; y++) - if(ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) { - ItemInst *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges); - if(item_temp) { - if(CheckLoreConflict(item_temp->GetItem())) { - lore_conflict = true; - DuplicateLoreMessage(ivr.items[y].item_id); - } - claim->PutItem(y-1, *item_temp); - } - } + for(int y = 1; y < 8; y++) + if(ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) { + ItemInst *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges); + if(item_temp) { + if(CheckLoreConflict(item_temp->GetItem())) { + lore_conflict = true; + DuplicateLoreMessage(ivr.items[y].item_id); + } + claim->PutItem(y-1, *item_temp); + } + } - if(lore_conflict) { - safe_delete(claim); - return true; - } + if(lore_conflict) { + safe_delete(claim); + return true; + } - PutItemInInventory(free_slot, *claim); - SendItemPacket(free_slot, claim, ItemPacketTrade); + PutItemInInventory(free_slot, *claim); + SendItemPacket(free_slot, claim, ItemPacketTrade); Save(); return true; @@ -6187,7 +6187,7 @@ void Client::DragCorpses() Mob *corpse = entity_list.GetMob(It->second); if (corpse && corpse->IsPlayerCorpse() && - (ComparativeDistanceNoZ(m_Position, corpse->GetPosition()) <= RuleR(Character, DragCorpseDistance))) + (DistanceSquaredNoZ(m_Position, corpse->GetPosition()) <= RuleR(Character, DragCorpseDistance))) continue; if (!corpse || !corpse->IsPlayerCorpse() || @@ -6274,11 +6274,11 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid if(summon_count > MAX_SWARM_PETS) summon_count = MAX_SWARM_PETS; - static const xy_location swarmPetLocations[MAX_SWARM_PETS] = { - xy_location(5, 5), xy_location(-5, 5), xy_location(5, -5), xy_location(-5, -5), - xy_location(10, 10), xy_location(-10, 10), xy_location(10, -10), xy_location(-10, -10), - xy_location(8, 8), xy_location(-8, 8), xy_location(8, -8), xy_location(-8, -8) - }; + static const glm::vec2 swarmPetLocations[MAX_SWARM_PETS] = { + glm::vec2(5, 5), glm::vec2(-5, 5), glm::vec2(5, -5), glm::vec2(-5, -5), + glm::vec2(10, 10), glm::vec2(-10, 10), glm::vec2(10, -10), glm::vec2(-10, -10), + glm::vec2(8, 8), glm::vec2(-8, 8), glm::vec2(8, -8), glm::vec2(-8, -8) + }; while(summon_count > 0) { NPCType *npc_dup = nullptr; @@ -6290,7 +6290,7 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid NPC* npca = new NPC( (npc_dup!=nullptr)?npc_dup:npc_type, //make sure we give the NPC the correct data pointer 0, - GetPosition()+swarmPetLocations[summon_count], + GetPosition() + glm::vec4(swarmPetLocations[summon_count], 0.0f, 0.0f), FlyMode3); if(!npca->GetSwarmInfo()){ @@ -7768,24 +7768,24 @@ void Client::LoadAccountFlags() accountflags.clear(); std::string query = StringFormat("SELECT p_flag, p_value " - "FROM account_flags WHERE p_accid = '%d'", - account_id); - auto results = database.QueryDatabase(query); - if (!results.Success()) { - std::cerr << "Error in LoadAccountFlags query '" << query << "' " << results.ErrorMessage() << std::endl; - return; - } + "FROM account_flags WHERE p_accid = '%d'", + account_id); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + std::cerr << "Error in LoadAccountFlags query '" << query << "' " << results.ErrorMessage() << std::endl; + return; + } - for (auto row = results.begin(); row != results.end(); ++row) - accountflags[row[0]] = row[1]; + for (auto row = results.begin(); row != results.end(); ++row) + accountflags[row[0]] = row[1]; } void Client::SetAccountFlag(std::string flag, std::string val) { - std::string query = StringFormat("REPLACE INTO account_flags (p_accid, p_flag, p_value) " - "VALUES( '%d', '%s', '%s')", - account_id, flag.c_str(), val.c_str()); - auto results = database.QueryDatabase(query); + std::string query = StringFormat("REPLACE INTO account_flags (p_accid, p_flag, p_value) " + "VALUES( '%d', '%s', '%s')", + account_id, flag.c_str(), val.c_str()); + auto results = database.QueryDatabase(query); if(!results.Success()) { std::cerr << "Error in SetAccountFlags query '" << query << "' " << results.ErrorMessage() << std::endl; return; @@ -8125,7 +8125,7 @@ void Client::Consume(const Item_Struct *item, uint8 type, int16 slot, bool auto_ { if(!item) { return; } - uint32 cons_mod = 180; + uint32 cons_mod = 180; int32 metabolism_bonus = spellbonuses.Metabolism + itembonuses.Metabolism + aabonuses.Metabolism; @@ -8136,36 +8136,36 @@ void Client::Consume(const Item_Struct *item, uint8 type, int16 slot, bool auto_ if(type == ItemTypeFood) { - int hchange = item->CastTime * cons_mod; - hchange = mod_food_value(item, hchange); + int hchange = item->CastTime * cons_mod; + hchange = mod_food_value(item, hchange); - if(hchange < 0) { return; } + if(hchange < 0) { return; } - m_pp.hunger_level += hchange; - DeleteItemInInventory(slot, 1, false); + m_pp.hunger_level += hchange; + DeleteItemInInventory(slot, 1, false); - if(!auto_consume) //no message if the client consumed for us - entity_list.MessageClose_StringID(this, true, 50, 0, EATING_MESSAGE, GetName(), item->Name); + if(!auto_consume) //no message if the client consumed for us + entity_list.MessageClose_StringID(this, true, 50, 0, EATING_MESSAGE, GetName(), item->Name); #if EQDEBUG >= 5 - LogFile->write(EQEmuLog::Debug, "Eating from slot:%i", (int)slot); + LogFile->write(EQEmuLog::Debug, "Eating from slot:%i", (int)slot); #endif } else { - int tchange = item->CastTime * cons_mod; - tchange = mod_drink_value(item, tchange); + int tchange = item->CastTime * cons_mod; + tchange = mod_drink_value(item, tchange); - if(tchange < 0) { return; } + if(tchange < 0) { return; } - m_pp.thirst_level += tchange; - DeleteItemInInventory(slot, 1, false); + m_pp.thirst_level += tchange; + DeleteItemInInventory(slot, 1, false); - if(!auto_consume) //no message if the client consumed for us - entity_list.MessageClose_StringID(this, true, 50, 0, DRINKING_MESSAGE, GetName(), item->Name); + if(!auto_consume) //no message if the client consumed for us + entity_list.MessageClose_StringID(this, true, 50, 0, DRINKING_MESSAGE, GetName(), item->Name); #if EQDEBUG >= 5 - LogFile->write(EQEmuLog::Debug, "Drinking from slot:%i", (int)slot); + LogFile->write(EQEmuLog::Debug, "Drinking from slot:%i", (int)slot); #endif } } @@ -8203,15 +8203,15 @@ void Client::PlayMP3(const char* fname) void Client::ExpeditionSay(const char *str, int ExpID) { std::string query = StringFormat("SELECT `player_name` FROM `cust_inst_players` " - "WHERE `inst_id` = %i", ExpID); - auto results = database.QueryDatabase(query); + "WHERE `inst_id` = %i", ExpID); + auto results = database.QueryDatabase(query); if (!results.Success()) return; if(results.RowCount() == 0) { - this->Message(14, "You say to the expedition, '%s'", str); - return; - } + this->Message(14, "You say to the expedition, '%s'", str); + return; + } for(auto row = results.begin(); row != results.end(); ++row) { const char* charName = row[0]; @@ -8321,8 +8321,8 @@ void Client::TextLink::generate_body() RoF2: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%02X" "%05X" "%08X" (56) RoF: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%1X" "%05X" "%08X" (55) - SoF: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%1X" "%05X" "%08X" (50) - 6.2: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%1X" "%08X" (45) + SoF: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%1X" "%05X" "%08X" (50) + 6.2: "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%1X" "%08X" (45) */ memset(&m_LinkBodyStruct, 0, sizeof(TextLinkBody_Struct)); diff --git a/zone/client.h b/zone/client.h index cc9eb7f77..c571cd66c 100644 --- a/zone/client.h +++ b/zone/client.h @@ -398,10 +398,10 @@ public: inline const char* GetLastName() const { return lastname; } - inline float ProximityX() const { return m_Proximity.m_X; } - inline float ProximityY() const { return m_Proximity.m_Y; } - inline float ProximityZ() const { return m_Proximity.m_Z; } - inline void ClearAllProximities() { entity_list.ProcessMove(this, xyz_location(FLT_MAX, FLT_MAX, FLT_MAX)); m_Proximity = xyz_location(FLT_MAX,FLT_MAX,FLT_MAX); } + inline float ProximityX() const { return m_Proximity.x; } + inline float ProximityY() const { return m_Proximity.y; } + inline float ProximityZ() const { return m_Proximity.z; } + inline void ClearAllProximities() { entity_list.ProcessMove(this, glm::vec3(FLT_MAX, FLT_MAX, FLT_MAX)); m_Proximity = glm::vec3(FLT_MAX,FLT_MAX,FLT_MAX); } /* Begin client modifiers @@ -580,7 +580,7 @@ public: void GoToBind(uint8 bindnum = 0); void GoToSafeCoords(uint16 zone_id, uint16 instance_id); void Gate(); - void SetBindPoint(int to_zone = -1, int to_instance = 0, const xyz_location& location = xyz_location::Origin()); + void SetBindPoint(int to_zone = -1, int to_instance = 0, const glm::vec3& location = glm::vec3()); void SetStartZone(uint32 zoneid, float x = 0.0f, float y =0.0f, float z = 0.0f); uint32 GetStartZone(void); void MovePC(const char* zonename, float x, float y, float z, float heading, uint8 ignorerestrictions = 0, ZoneMode zm = ZoneSolicited); @@ -1079,7 +1079,7 @@ public: void DoItemEnterZone(); bool DoItemEnterZone(uint32 slot_x, uint32 slot_y); // behavior change: 'slot_y' is now [RANGE]_END and not [RANGE]_END + 1 void SummonAndRezzAllCorpses(); - void SummonAllCorpses(const xyz_heading& position); + void SummonAllCorpses(const glm::vec4& position); void DepopAllCorpses(); void DepopPlayerCorpse(uint32 dbid); void BuryPlayerCorpses(); @@ -1268,8 +1268,8 @@ protected: Mob* bind_sight_target; - xyz_heading m_AutoAttackPosition; - xyz_location m_AutoAttackTargetLocation; + glm::vec4 m_AutoAttackPosition; + glm::vec3 m_AutoAttackTargetLocation; Mob *aa_los_them_mob; bool los_status; bool los_status_facing; @@ -1425,7 +1425,7 @@ private: void ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm); void ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions = 0, ZoneMode zm = ZoneSolicited); - xyz_location m_ZoneSummonLocation; + glm::vec3 m_ZoneSummonLocation; uint16 zonesummon_id; uint8 zonesummon_ignorerestrictions; ZoneMode zone_mode; @@ -1464,7 +1464,7 @@ private: Timer RespawnFromHoverTimer; Timer merc_timer; - xyz_location m_Proximity; + glm::vec3 m_Proximity; void BulkSendInventoryItems(); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 46c00bf3f..e27573902 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1454,9 +1454,9 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* If PP is set to weird coordinates */ if ((m_pp.x == -1 && m_pp.y == -1 && m_pp.z == -1) || (m_pp.x == -2 && m_pp.y == -2 && m_pp.z == -2)) { auto safePoint = zone->GetSafePoint(); - m_pp.x = safePoint.m_X; - m_pp.y = safePoint.m_Y; - m_pp.z = safePoint.m_Z; + m_pp.x = safePoint.x; + m_pp.y = safePoint.y; + m_pp.z = safePoint.z; } /* If too far below ground, then fix */ // float ground_z = GetGroundZ(m_pp.x, m_pp.y, m_pp.z); @@ -1466,10 +1466,10 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* Set Mob variables for spawn */ class_ = m_pp.class_; level = m_pp.level; - m_Position.m_X = m_pp.x; - m_Position.m_Y = m_pp.y; - m_Position.m_Z = m_pp.z; - m_Position.m_Heading = m_pp.heading; + m_Position.x = m_pp.x; + m_Position.y = m_pp.y; + m_Position.z = m_pp.z; + m_Position.w = m_pp.heading; race = m_pp.race; base_race = m_pp.race; gender = m_pp.gender; @@ -2028,7 +2028,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app) return; //you have to be somewhat close to them to be properly using them - if (ComparativeDistance(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) return; merchantid = tmp->CastToNPC()->MerchantType; @@ -2203,7 +2203,7 @@ void Client::Handle_OP_AdventureMerchantRequest(const EQApplicationPacket *app) return; //you have to be somewhat close to them to be properly using them - if (ComparativeDistance(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) return; merchantid = tmp->CastToNPC()->MerchantType; @@ -2294,7 +2294,7 @@ void Client::Handle_OP_AdventureMerchantSell(const EQApplicationPacket *app) return; } - if (ComparativeDistance(m_Position, vendor->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, vendor->GetPosition()) > USE_NPC_RANGE2) { Message(13, "Vendor is out of range."); return; @@ -2552,7 +2552,7 @@ void Client::Handle_OP_AltCurrencyMerchantRequest(const EQApplicationPacket *app NPC* tar = entity_list.GetNPCByID(*((uint32*)app->pBuffer)); if (tar) { - if (ComparativeDistance(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) return; if (tar->GetClass() != ALT_CURRENCY_MERCHANT) { @@ -2631,7 +2631,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app) AltCurrencyPurchaseItem_Struct *purchase = (AltCurrencyPurchaseItem_Struct*)app->pBuffer; NPC* tar = entity_list.GetNPCByID(purchase->merchant_entity_id); if (tar) { - if (ComparativeDistance(m_Position, tar->GetPosition())> USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tar->GetPosition())> USE_NPC_RANGE2) return; if (tar->GetClass() != ALT_CURRENCY_MERCHANT) { @@ -2768,7 +2768,7 @@ void Client::Handle_OP_AltCurrencySell(const EQApplicationPacket *app) NPC* tar = entity_list.GetNPCByID(sell->merchant_entity_id); if (tar) { - if (ComparativeDistance(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) return; if (tar->GetClass() != ALT_CURRENCY_MERCHANT) { @@ -2865,7 +2865,7 @@ void Client::Handle_OP_AltCurrencySellSelection(const EQApplicationPacket *app) AltCurrencySelectItem_Struct *select = (AltCurrencySelectItem_Struct*)app->pBuffer; NPC* tar = entity_list.GetNPCByID(select->merchant_entity_id); if (tar) { - if (ComparativeDistance(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) return; if (tar->GetClass() != ALT_CURRENCY_MERCHANT) { @@ -3239,8 +3239,8 @@ void Client::Handle_OP_AutoAttack(const EQApplicationPacket *app) ranged_timer.Disable(); attack_dw_timer.Disable(); - m_AutoAttackPosition = xyz_heading::Origin(); - m_AutoAttackTargetLocation = xyz_location::Origin(); + m_AutoAttackPosition = glm::vec4(); + m_AutoAttackTargetLocation = glm::vec3(); aa_los_them_mob = nullptr; } else if (app->pBuffer[0] == 1) @@ -3255,14 +3255,14 @@ void Client::Handle_OP_AutoAttack(const EQApplicationPacket *app) { aa_los_them_mob = GetTarget(); m_AutoAttackPosition = GetPosition(); - m_AutoAttackTargetLocation = aa_los_them_mob->GetPosition(); + m_AutoAttackTargetLocation = glm::vec3(aa_los_them_mob->GetPosition()); los_status = CheckLosFN(aa_los_them_mob); los_status_facing = IsFacingMob(aa_los_them_mob); } else { m_AutoAttackPosition = GetPosition(); - m_AutoAttackTargetLocation = xyz_location::Origin(); + m_AutoAttackTargetLocation = glm::vec3(); aa_los_them_mob = nullptr; los_status = false; los_status_facing = false; @@ -3984,7 +3984,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) CastSpell_Struct* castspell = (CastSpell_Struct*)app->pBuffer; - m_TargetRing = xyz_location(castspell->x_pos, castspell->y_pos, castspell->z_pos); + m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos); #ifdef _EQDEBUG LogFile->write(EQEmuLog::Debug, "cs_unknown2: %u %i", (uint8)castspell->cs_unknown[0], castspell->cs_unknown[0]); @@ -4016,7 +4016,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - m_TargetRing = xyz_location(castspell->x_pos, castspell->y_pos, castspell->z_pos); + m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos); CastSpell(spell_to_cast, castspell->target_id, castspell->slot); } @@ -4360,7 +4360,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) } // set the boat's position deltas - auto boatDelta = xyz_heading(ppu->delta_x, ppu->delta_y, ppu->delta_z, ppu->delta_heading); + auto boatDelta = glm::vec4(ppu->delta_x, ppu->delta_y, ppu->delta_z, ppu->delta_heading); boat->SetDelta(boatDelta); // send an update to everyone nearby except the client controlling the boat EQApplicationPacket* outapp = new EQApplicationPacket(OP_ClientUpdate, sizeof(PlayerPositionUpdateServer_Struct)); @@ -4377,9 +4377,9 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) float dist = 0; float tmp; - tmp = m_Position.m_X - ppu->x_pos; + tmp = m_Position.x - ppu->x_pos; dist += tmp*tmp; - tmp = m_Position.m_Y - ppu->y_pos; + tmp = m_Position.y - ppu->y_pos; dist += tmp*tmp; dist = sqrt(dist); @@ -4522,41 +4522,41 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) float rewind_x_diff = 0; float rewind_y_diff = 0; - rewind_x_diff = ppu->x_pos - m_RewindLocation.m_X; + rewind_x_diff = ppu->x_pos - m_RewindLocation.x; rewind_x_diff *= rewind_x_diff; - rewind_y_diff = ppu->y_pos - m_RewindLocation.m_Y; + rewind_y_diff = ppu->y_pos - m_RewindLocation.y; rewind_y_diff *= rewind_y_diff; //We only need to store updated values if the player has moved. //If the player has moved more than units for x or y, then we'll store //his pre-PPU x and y for /rewind, in case he gets stuck. if ((rewind_x_diff > 750) || (rewind_y_diff > 750)) - m_RewindLocation = m_Position; + m_RewindLocation = glm::vec3(m_Position); //If the PPU was a large jump, such as a cross zone gate or Call of Hero, //just update rewind coords to the new ppu coords. This will prevent exploitation. if ((rewind_x_diff > 5000) || (rewind_y_diff > 5000)) - m_RewindLocation = xyz_location(ppu->x_pos, ppu->y_pos, ppu->z_pos); + m_RewindLocation = glm::vec3(ppu->x_pos, ppu->y_pos, ppu->z_pos); if(proximity_timer.Check()) { - entity_list.ProcessMove(this, xyz_location(ppu->x_pos, ppu->y_pos, ppu->z_pos)); + entity_list.ProcessMove(this, glm::vec3(ppu->x_pos, ppu->y_pos, ppu->z_pos)); if(RuleB(TaskSystem, EnableTaskSystem) && RuleB(TaskSystem,EnableTaskProximity)) ProcessTaskProximities(ppu->x_pos, ppu->y_pos, ppu->z_pos); - m_Proximity = xyz_location(ppu->x_pos, ppu->y_pos, ppu->z_pos); + m_Proximity = glm::vec3(ppu->x_pos, ppu->y_pos, ppu->z_pos); } // Update internal state - m_Delta = xyz_heading(ppu->delta_x, ppu->delta_y, ppu->delta_z, ppu->delta_heading); + m_Delta = glm::vec4(ppu->delta_x, ppu->delta_y, ppu->delta_z, ppu->delta_heading); - if(IsTracking() && ((m_Position.m_X!=ppu->x_pos) || (m_Position.m_Y!=ppu->y_pos))){ + if(IsTracking() && ((m_Position.x!=ppu->x_pos) || (m_Position.y!=ppu->y_pos))){ if(zone->random.Real(0, 100) < 70)//should be good CheckIncreaseSkill(SkillTracking, nullptr, -20); } // Break Hide if moving without sneaking and set rewind timer if moved - if(ppu->y_pos != m_Position.m_Y || ppu->x_pos != m_Position.m_X){ + if(ppu->y_pos != m_Position.y || ppu->x_pos != m_Position.x){ if((hidden || improved_hidden) && !sneaking){ hidden = false; improved_hidden = false; @@ -4576,12 +4576,12 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) // Outgoing client packet float tmpheading = EQ19toFloat(ppu->heading); - if (!FCMP(ppu->y_pos, m_Position.m_Y) || !FCMP(ppu->x_pos, m_Position.m_X) || !FCMP(tmpheading, m_Position.m_Heading) || ppu->animation != animation) + if (!FCMP(ppu->y_pos, m_Position.y) || !FCMP(ppu->x_pos, m_Position.x) || !FCMP(tmpheading, m_Position.w) || ppu->animation != animation) { - m_Position.m_X = ppu->x_pos; - m_Position.m_Y = ppu->y_pos; - m_Position.m_Z = ppu->z_pos; - m_Position.m_Heading = tmpheading; + m_Position.x = ppu->x_pos; + m_Position.y = ppu->y_pos; + m_Position.z = ppu->z_pos; + m_Position.w = tmpheading; animation = ppu->animation; @@ -4595,7 +4595,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) safe_delete(outapp); } - if(zone->watermap && zone->watermap->InLiquid(m_Position)) + if(zone->watermap && zone->watermap->InLiquid(glm::vec3(m_Position))) CheckIncreaseSkill(SkillSwimming, nullptr, -17); return; @@ -5668,8 +5668,8 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) } else { - Map::Vertex Start(GetX(), GetY(), GetZ() + (GetSize() < 6.0 ? 6 : GetSize()) * HEAD_POSITION); - Map::Vertex End(target->GetX(), target->GetY(), target->GetZ() + (target->GetSize() < 6.0 ? 6 : target->GetSize()) * HEAD_POSITION); + glm::vec3 Start(GetX(), GetY(), GetZ() + (GetSize() < 6.0 ? 6 : GetSize()) * HEAD_POSITION); + glm::vec3 End(target->GetX(), target->GetY(), target->GetZ() + (target->GetSize() < 6.0 ? 6 : target->GetSize()) * HEAD_POSITION); if (!zone->zonemap->LineIntersectsZone(Start, End, 1.0f, nullptr) && zone->pathing->NoHazards(Start, End)) { @@ -5712,7 +5712,7 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) bool LeadsToTeleporter = false; - Map::Vertex v = zone->pathing->GetPathNodeCoordinates(pathlist.back()); + glm::vec3 v = zone->pathing->GetPathNodeCoordinates(pathlist.back()); p.x = v.x; p.y = v.y; @@ -5732,7 +5732,7 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) break; } - Map::Vertex v = zone->pathing->GetPathNodeCoordinates((*Iterator), false); + glm::vec3 v = zone->pathing->GetPathNodeCoordinates((*Iterator), false); p.x = v.x; p.y = v.y; p.z = v.z; @@ -8720,7 +8720,7 @@ void Client::Handle_OP_LDoNDisarmTraps(const EQApplicationPacket *app) { if (HasSkill(SkillDisarmTraps)) { - if (ComparativeDistanceNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(13, "%s is too far away.", target->GetCleanName()); return; @@ -8753,7 +8753,7 @@ void Client::Handle_OP_LDoNPickLock(const EQApplicationPacket *app) { if (HasSkill(SkillPickLock)) { - if (ComparativeDistanceNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(13, "%s is too far away.", target->GetCleanName()); return; @@ -8772,7 +8772,7 @@ void Client::Handle_OP_LDoNSenseTraps(const EQApplicationPacket *app) { if (HasSkill(SkillSenseTraps)) { - if (ComparativeDistanceNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(13, "%s is too far away.", target->GetCleanName()); return; @@ -9195,7 +9195,7 @@ void Client::Handle_OP_LootRequest(const EQApplicationPacket *app) { SetLooting(ent->GetID()); //store the entity we are looting Corpse *ent_corpse = ent->CastToCorpse(); - if (ComparativeDistanceNoZ(m_Position, ent_corpse->GetPosition()) > 625) + if (DistanceSquaredNoZ(m_Position, ent_corpse->GetPosition()) > 625) { Message(13, "Corpse too far away."); Corpse::SendLootReqErrorPacket(this); @@ -9427,7 +9427,7 @@ void Client::Handle_OP_MercenaryDataRequest(const EQApplicationPacket *app) int mercTypeCount = 0; int mercCount = 0; - if (ComparativeDistance(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tar->GetPosition()) > USE_NPC_RANGE2) return; if (tar->GetClass() != MERCERNARY_MASTER) { @@ -9809,7 +9809,7 @@ void Client::Handle_OP_OpenGuildTributeMaster(const EQApplicationPacket *app) StartTribute_Struct* st = (StartTribute_Struct*)app->pBuffer; Mob* tribmast = entity_list.GetMob(st->tribute_master_id); if (tribmast && tribmast->IsNPC() && tribmast->GetClass() == GUILD_TRIBUTE_MASTER - && ComparativeDistance(m_Position, tribmast->GetPosition()) <= USE_NPC_RANGE2) { + && DistanceSquared(m_Position, tribmast->GetPosition()) <= USE_NPC_RANGE2) { st->response = 1; QueuePacket(app); tribute_master_id = st->tribute_master_id; @@ -9841,7 +9841,7 @@ void Client::Handle_OP_OpenTributeMaster(const EQApplicationPacket *app) StartTribute_Struct* st = (StartTribute_Struct*)app->pBuffer; Mob* tribmast = entity_list.GetMob(st->tribute_master_id); if (tribmast && tribmast->IsNPC() && tribmast->GetClass() == TRIBUTE_MASTER - && ComparativeDistance(m_Position, tribmast->GetPosition()) <= USE_NPC_RANGE2) { + && DistanceSquared(m_Position, tribmast->GetPosition()) <= USE_NPC_RANGE2) { st->response = 1; QueuePacket(app); tribute_master_id = st->tribute_master_id; @@ -9936,7 +9936,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } if ((mypet->GetPetType() == petAnimation && GetAA(aaAnimationEmpathy) >= 2) || mypet->GetPetType() != petAnimation) { - if (GetTarget() != this && ComparativeDistanceNoZ(mypet->GetPosition(), GetTarget()->GetPosition()) <= (RuleR(Pets, AttackCommandRange)*RuleR(Pets, AttackCommandRange))) { + if (GetTarget() != this && DistanceSquaredNoZ(mypet->GetPosition(), GetTarget()->GetPosition()) <= (RuleR(Pets, AttackCommandRange)*RuleR(Pets, AttackCommandRange))) { if (mypet->IsHeld()) { if (!mypet->IsFocused()) { mypet->SetHeld(false); //break the hold and guard if we explicitly tell the pet to attack. @@ -9971,7 +9971,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } if ((mypet->GetPetType() == petAnimation && GetAA(aaAnimationEmpathy) >= 2) || mypet->GetPetType() != petAnimation) { - if (GetTarget() != this && ComparativeDistanceNoZ(mypet->GetPosition(), GetTarget()->GetPosition()) <= (RuleR(Pets, AttackCommandRange)*RuleR(Pets, AttackCommandRange))) { + if (GetTarget() != this && DistanceSquaredNoZ(mypet->GetPosition(), GetTarget()->GetPosition()) <= (RuleR(Pets, AttackCommandRange)*RuleR(Pets, AttackCommandRange))) { zone->AddAggroMob(); mypet->AddToHateList(GetTarget(), 1); Message_StringID(MT_PetResponse, PET_ATTACKING, mypet->GetCleanName(), GetTarget()->GetCleanName()); @@ -11688,7 +11688,7 @@ void Client::Handle_OP_Rewind(const EQApplicationPacket *app) Message_StringID(MT_System, REWIND_WAIT); } else { - CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_RewindLocation.m_X, m_RewindLocation.m_Y, m_RewindLocation.m_Z, 0, 2, Rewind); + CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_RewindLocation.x, m_RewindLocation.y, m_RewindLocation.z, 0, 2, Rewind); rewind_timer.Start(30000, true); } } @@ -11812,29 +11812,29 @@ void Client::Handle_OP_SenseTraps(const EQApplicationPacket *app) int uskill = GetSkill(SkillSenseTraps); if ((zone->random.Int(0, 99) + uskill) >= (zone->random.Int(0, 99) + trap->skill*0.75)) { - auto diff = trap->m_Position - GetPosition(); + auto diff = trap->m_Position - glm::vec3(GetPosition()); - if (diff.m_X == 0 && diff.m_Y == 0) + if (diff.x == 0 && diff.y == 0) Message(MT_Skills, "You sense a trap right under your feet!"); - else if (diff.m_X > 10 && diff.m_Y > 10) + else if (diff.x > 10 && diff.y > 10) Message(MT_Skills, "You sense a trap to the NorthWest."); - else if (diff.m_X < -10 && diff.m_Y > 10) + else if (diff.x < -10 && diff.y > 10) Message(MT_Skills, "You sense a trap to the NorthEast."); - else if (diff.m_Y > 10) + else if (diff.y > 10) Message(MT_Skills, "You sense a trap to the North."); - else if (diff.m_X > 10 && diff.m_Y < -10) + else if (diff.x > 10 && diff.y < -10) Message(MT_Skills, "You sense a trap to the SouthWest."); - else if (diff.m_X < -10 && diff.m_Y < -10) + else if (diff.x < -10 && diff.y < -10) Message(MT_Skills, "You sense a trap to the SouthEast."); - else if (diff.m_Y < -10) + else if (diff.y < -10) Message(MT_Skills, "You sense a trap to the South."); - else if (diff.m_X > 10) + else if (diff.x > 10) Message(MT_Skills, "You sense a trap to the West."); else Message(MT_Skills, "You sense a trap to the East."); trap->detected = true; - float angle = CalculateHeadingToTarget(trap->m_Position.m_X, trap->m_Position.m_Y); + float angle = CalculateHeadingToTarget(trap->m_Position.x, trap->m_Position.y); if (angle < 0) angle = (256 + angle); @@ -12115,7 +12115,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) if (mp->quantity < 1) return; //you have to be somewhat close to them to be properly using them - if (ComparativeDistance(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) return; merchantid = tmp->CastToNPC()->MerchantType; @@ -12364,7 +12364,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) return; //you have to be somewhat close to them to be properly using them - if (ComparativeDistance(m_Position, vendor->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, vendor->GetPosition()) > USE_NPC_RANGE2) return; uint32 price = 0; @@ -12523,7 +12523,7 @@ void Client::Handle_OP_ShopRequest(const EQApplicationPacket *app) return; //you have to be somewhat close to them to be properly using them - if (ComparativeDistance(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tmp->GetPosition()) > USE_NPC_RANGE2) return; merchantid = tmp->CastToNPC()->MerchantType; @@ -13019,7 +13019,7 @@ void Client::Handle_OP_TargetCommand(const EQApplicationPacket *app) // For /target, send reject or success packet if (app->GetOpcode() == OP_TargetCommand) { - if (GetTarget() && !GetTarget()->CastToMob()->IsInvisible(this) && (ComparativeDistance(m_Position, GetTarget()->GetPosition()) <= TARGETING_RANGE*TARGETING_RANGE || GetGM())) { + if (GetTarget() && !GetTarget()->CastToMob()->IsInvisible(this) && (DistanceSquared(m_Position, GetTarget()->GetPosition()) <= TARGETING_RANGE*TARGETING_RANGE || GetGM())) { if (GetTarget()->GetBodyType() == BT_NoTarget2 || GetTarget()->GetBodyType() == BT_Special || GetTarget()->GetBodyType() == BT_NoTarget) { @@ -13108,9 +13108,9 @@ void Client::Handle_OP_TargetCommand(const EQApplicationPacket *app) } else if (GetBindSightTarget()) { - if (ComparativeDistance(GetBindSightTarget()->GetPosition(), GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) + if (DistanceSquared(GetBindSightTarget()->GetPosition(), GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) { - if (ComparativeDistance(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) + if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) { char *hacker_str = nullptr; MakeAnyLenString(&hacker_str, "%s attempting to target something beyond the clip plane of %.2f units," @@ -13124,7 +13124,7 @@ void Client::Handle_OP_TargetCommand(const EQApplicationPacket *app) } } } - else if (ComparativeDistance(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) + else if (DistanceSquared(m_Position, GetTarget()->GetPosition()) > (zone->newzone_data.maxclip*zone->newzone_data.maxclip)) { char *hacker_str = nullptr; MakeAnyLenString(&hacker_str, "%s attempting to target something beyond the clip plane of %.2f units," @@ -13756,7 +13756,7 @@ void Client::Handle_OP_TributeItem(const EQApplicationPacket *app) Mob* tribmast = entity_list.GetMob(t->tribute_master_id); if (!tribmast || !tribmast->IsNPC() || tribmast->GetClass() != TRIBUTE_MASTER) return; - if (ComparativeDistance(m_Position, tribmast->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tribmast->GetPosition()) > USE_NPC_RANGE2) return; t->tribute_points = TributeItem(t->slot, t->quantity); @@ -13785,7 +13785,7 @@ void Client::Handle_OP_TributeMoney(const EQApplicationPacket *app) Mob* tribmast = entity_list.GetMob(t->tribute_master_id); if (!tribmast || !tribmast->IsNPC() || tribmast->GetClass() != TRIBUTE_MASTER) return; - if (ComparativeDistance(m_Position, tribmast->GetPosition()) > USE_NPC_RANGE2) + if (DistanceSquared(m_Position, tribmast->GetPosition()) > USE_NPC_RANGE2) return; t->tribute_points = TributeMoney(t->platinum); diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 03714d5e5..48c45e70e 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -340,23 +340,23 @@ bool Client::Process() { if(aa_los_them_mob) { if(auto_attack_target != aa_los_them_mob || - m_AutoAttackPosition.m_X != GetX() || - m_AutoAttackPosition.m_Y != GetY() || - m_AutoAttackPosition.m_Z != GetZ() || - m_AutoAttackTargetLocation.m_X != aa_los_them_mob->GetX() || - m_AutoAttackTargetLocation.m_Y != aa_los_them_mob->GetY() || - m_AutoAttackTargetLocation.m_Z != aa_los_them_mob->GetZ()) + m_AutoAttackPosition.x != GetX() || + m_AutoAttackPosition.y != GetY() || + m_AutoAttackPosition.z != GetZ() || + m_AutoAttackTargetLocation.x != aa_los_them_mob->GetX() || + m_AutoAttackTargetLocation.y != aa_los_them_mob->GetY() || + m_AutoAttackTargetLocation.z != aa_los_them_mob->GetZ()) { aa_los_them_mob = auto_attack_target; m_AutoAttackPosition = GetPosition(); - m_AutoAttackTargetLocation = aa_los_them_mob->GetPosition(); + m_AutoAttackTargetLocation = glm::vec3(aa_los_them_mob->GetPosition()); los_status = CheckLosFN(auto_attack_target); los_status_facing = IsFacingMob(aa_los_them_mob); } // If only our heading changes, we can skip the CheckLosFN call // but above we still need to update los_status_facing - if (m_AutoAttackPosition.m_Heading != GetHeading()) { - m_AutoAttackPosition.m_Heading = GetHeading(); + if (m_AutoAttackPosition.w != GetHeading()) { + m_AutoAttackPosition.w = GetHeading(); los_status_facing = IsFacingMob(aa_los_them_mob); } } @@ -364,7 +364,7 @@ bool Client::Process() { { aa_los_them_mob = auto_attack_target; m_AutoAttackPosition = GetPosition(); - m_AutoAttackTargetLocation = aa_los_them_mob->GetPosition(); + m_AutoAttackTargetLocation = glm::vec3(aa_los_them_mob->GetPosition()); los_status = CheckLosFN(auto_attack_target); los_status_facing = IsFacingMob(aa_los_them_mob); } @@ -519,7 +519,7 @@ bool Client::Process() { else { animation = 0; - m_Delta = xyz_heading(0.0f, 0.0f, 0.0f, m_Delta.m_Heading); + m_Delta = glm::vec4(0.0f, 0.0f, 0.0f, m_Delta.w); SendPosUpdate(2); } } @@ -1601,7 +1601,7 @@ void Client::OPGMTraining(const EQApplicationPacket *app) return; //you have to be somewhat close to a trainer to be properly using them - if(ComparativeDistance(m_Position,pTrainer->GetPosition()) > USE_NPC_RANGE2) + if(DistanceSquared(m_Position,pTrainer->GetPosition()) > USE_NPC_RANGE2) return; // if this for-loop acts up again (crashes linux), try enabling the before and after #pragmas @@ -1649,7 +1649,7 @@ void Client::OPGMEndTraining(const EQApplicationPacket *app) return; //you have to be somewhat close to a trainer to be properly using them - if(ComparativeDistance(m_Position, pTrainer->GetPosition()) > USE_NPC_RANGE2) + if(DistanceSquared(m_Position, pTrainer->GetPosition()) > USE_NPC_RANGE2) return; // goodbye message @@ -1678,7 +1678,7 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) return; //you have to be somewhat close to a trainer to be properly using them - if(ComparativeDistance(m_Position, pTrainer->GetPosition()) > USE_NPC_RANGE2) + if(DistanceSquared(m_Position, pTrainer->GetPosition()) > USE_NPC_RANGE2) return; if (gmskill->skillbank == 0x01) @@ -2117,9 +2117,9 @@ void Client::HandleRespawnFromHover(uint32 Option) if (corpse) { - m_Position.m_X = corpse->GetX(); - m_Position.m_Y = corpse->GetY(); - m_Position.m_Z = corpse->GetZ(); + m_Position.x = corpse->GetX(); + m_Position.y = corpse->GetY(); + m_Position.z = corpse->GetZ(); } EQApplicationPacket* outapp = new EQApplicationPacket(OP_ZonePlayerToBind, sizeof(ZonePlayerToBind_Struct) + 10); @@ -2172,10 +2172,10 @@ void Client::HandleRespawnFromHover(uint32 Option) SetMana(GetMaxMana()); SetEndurance(GetMaxEndurance()); - m_Position.m_X = chosen->x; - m_Position.m_Y = chosen->y; - m_Position.m_Z = chosen->z; - m_Position.m_Heading = chosen->heading; + m_Position.x = chosen->x; + m_Position.y = chosen->y; + m_Position.z = chosen->z; + m_Position.w = chosen->heading; ClearHover(); entity_list.RefreshClientXTargets(this); diff --git a/zone/command.cpp b/zone/command.cpp index 8d9b55b4c..326305f98 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -1839,7 +1839,7 @@ void command_itemtest(Client *c, const Seperator *sep) void command_gassign(Client *c, const Seperator *sep) { if (sep->IsNumber(1) && c->GetTarget() && c->GetTarget()->IsNPC()) - database.AssignGrid(c, c->GetTarget()->CastToNPC()->m_SpawnPoint, atoi(sep->arg[1])); + database.AssignGrid(c, glm::vec2(c->GetTarget()->CastToNPC()->m_SpawnPoint), atoi(sep->arg[1])); else c->Message(0,"Usage: #gassign [num] - must have an npc target!"); } @@ -2095,7 +2095,7 @@ void command_wp(Client *c, const Seperator *sep) } else { auto position = c->GetPosition(); - position.m_Heading = -1; + position.w = -1; database.AddWP(c, atoi(sep->arg[2]),wp, position, atoi(sep->arg[3]),zone->GetZoneID()); } } @@ -4908,7 +4908,7 @@ void command_manaburn(Client *c, const Seperator *sep) c->Message(0, "#Manaburn needs a target."); else { int cur_level=c->GetAA(MANA_BURN);//ManaBurn ID - if (ComparativeDistance(c->GetPosition(), target->GetPosition()) > 200) + if (DistanceSquared(c->GetPosition(), target->GetPosition()) > 200) c->Message(0,"You are too far away from your target."); else { if(cur_level == 1) { @@ -5440,7 +5440,7 @@ void command_wpadd(Client *c, const Seperator *sep) } auto position = c->GetPosition(); if (strcmp("-h",sep->arg[2]) != 0) - position.m_Heading = -1; + position.w = -1; uint32 tmp_grid = database.AddWPForSpawn(c, s2info->GetID(), position, pause, type1, type2, zone->GetZoneID()); if (tmp_grid) @@ -6973,7 +6973,7 @@ void command_path(Client *c, const Seperator *sep) if(zone->zonemap) { - Map::Vertex loc(px, py, pz); + glm::vec3 loc(px, py, pz); best_z = zone->zonemap->FindBestZ(loc, nullptr); } else @@ -7000,7 +7000,7 @@ void command_path(Client *c, const Seperator *sep) if(zone->zonemap) { - Map::Vertex loc(px, py, pz); + glm::vec3 loc(px, py, pz); best_z = zone->zonemap->FindBestZ(loc, nullptr); } else @@ -7133,8 +7133,8 @@ void command_path(Client *c, const Seperator *sep) { if(c && c->GetTarget()) { - if (zone->pathing->NoHazardsAccurate(Map::Vertex(c->GetX(), c->GetY(), c->GetZ()), - Map::Vertex(c->GetTarget()->GetX(), c->GetTarget()->GetY(), c->GetTarget()->GetZ()))) + if (zone->pathing->NoHazardsAccurate(glm::vec3(c->GetX(), c->GetY(), c->GetZ()), + glm::vec3(c->GetTarget()->GetX(), c->GetTarget()->GetY(), c->GetTarget()->GetZ()))) { c->Message(0, "No hazards."); } @@ -7210,7 +7210,7 @@ void command_path(Client *c, const Seperator *sep) { Mob *m = c->GetTarget(); - Map::Vertex Position(m->GetX(), m->GetY(), m->GetZ()); + glm::vec3 Position(m->GetX(), m->GetY(), m->GetZ()); int Node = zone->pathing->FindNearestPathNode(Position); @@ -7344,12 +7344,12 @@ void command_bestz(Client *c, const Seperator *sep) { if (zone->zonemap == nullptr) { c->Message(0,"Map not loaded for this zone"); } else { - Map::Vertex me; + glm::vec3 me; me.x = c->GetX(); me.y = c->GetY(); me.z = c->GetZ() + (c->GetSize() == 0.0 ? 6 : c->GetSize()) * HEAD_POSITION; - Map::Vertex hit; - Map::Vertex bme(me); + glm::vec3 hit; + glm::vec3 bme(me); bme.z -= 500; float best_z = zone->zonemap->FindBestZ(me, &hit); @@ -7372,7 +7372,7 @@ void command_bestz(Client *c, const Seperator *sep) { if(c->GetTarget()) { z=c->GetTarget()->GetZ(); - auto position = xyz_location(c->GetTarget()->GetX(), c->GetTarget()->GetY(), z); + auto position = glm::vec3(c->GetTarget()->GetX(), c->GetTarget()->GetY(), z); RegionType = zone->watermap->ReturnRegionType(position); c->Message(0,"InWater returns %d", zone->watermap->InWater(position)); c->Message(0,"InLava returns %d", zone->watermap->InLava(position)); @@ -7380,7 +7380,7 @@ void command_bestz(Client *c, const Seperator *sep) { } else { z=c->GetZ(); - auto position = xyz_location(c->GetX(), c->GetY(), z); + auto position = glm::vec3(c->GetX(), c->GetY(), z); RegionType = zone->watermap->ReturnRegionType(position); c->Message(0,"InWater returns %d", zone->watermap->InWater(position)); c->Message(0,"InLava returns %d", zone->watermap->InLava(position)); @@ -10305,7 +10305,7 @@ void command_disarmtrap(Client *c, const Seperator *sep) { if(c->HasSkill(SkillDisarmTraps)) { - if(ComparativeDistanceNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(13, "%s is too far away.", target->GetCleanName()); return; @@ -10330,7 +10330,7 @@ void command_sensetrap(Client *c, const Seperator *sep) { if(c->HasSkill(SkillSenseTraps)) { - if(ComparativeDistanceNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(13, "%s is too far away.", target->GetCleanName()); return; @@ -10355,7 +10355,7 @@ void command_picklock(Client *c, const Seperator *sep) { if(c->HasSkill(SkillPickLock)) { - if(ComparativeDistanceNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) + if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(13, "%s is too far away.", target->GetCleanName()); return; diff --git a/zone/corpse.cpp b/zone/corpse.cpp index 12e1e4ba8..c94c74232 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -70,7 +70,7 @@ void Corpse::SendLootReqErrorPacket(Client* client, uint8 response) { safe_delete(outapp); } -Corpse* Corpse::LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std::string in_charname, const xyz_heading& position, std::string time_of_death, bool rezzed, bool was_at_graveyard) { +Corpse* Corpse::LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std::string in_charname, const glm::vec4& position, std::string time_of_death, bool rezzed, bool was_at_graveyard) { uint32 item_count = database.GetCharacterCorpseItemCount(in_dbid); char *buffer = new char[sizeof(PlayerCorpse_Struct) + (item_count * sizeof(player_lootitem::ServerLootItem_Struct))]; PlayerCorpse_Struct *pcs = (PlayerCorpse_Struct*)buffer; @@ -435,7 +435,7 @@ std::list Corpse::MoveItemToCorpse(Client *client, ItemInst *item, int16 } // To be called from LoadFromDBData -Corpse::Corpse(uint32 in_dbid, uint32 in_charid, const char* in_charname, ItemList* in_itemlist, uint32 in_copper, uint32 in_silver, uint32 in_gold, uint32 in_plat, const xyz_heading& position, float in_size, uint8 in_gender, uint16 in_race, uint8 in_class, uint8 in_deity, uint8 in_level, uint8 in_texture, uint8 in_helmtexture,uint32 in_rezexp, bool wasAtGraveyard) +Corpse::Corpse(uint32 in_dbid, uint32 in_charid, const char* in_charname, ItemList* in_itemlist, uint32 in_copper, uint32 in_silver, uint32 in_gold, uint32 in_plat, const glm::vec4& position, float in_size, uint8 in_gender, uint16 in_race, uint8 in_class, uint8 in_deity, uint8 in_level, uint8 in_texture, uint8 in_helmtexture,uint32 in_rezexp, bool wasAtGraveyard) : Mob("Unnamed_Corpse", "", 0, @@ -1328,7 +1328,7 @@ bool Corpse::Summon(Client* client, bool spell, bool CheckDistance) { client->Message(13, "That corpse is locked by a GM."); return false; } - if (!CheckDistance || (ComparativeDistanceNoZ(m_Position, client->GetPosition()) <= dist2)) { + if (!CheckDistance || (DistanceSquaredNoZ(m_Position, client->GetPosition()) <= dist2)) { GMMove(client->GetX(), client->GetY(), client->GetZ()); is_corpse_changed = true; } @@ -1343,7 +1343,7 @@ bool Corpse::Summon(Client* client, bool spell, bool CheckDistance) { std::list::iterator itr; for(itr = client->consent_list.begin(); itr != client->consent_list.end(); ++itr) { if(strcmp(this->GetOwnerName(), itr->c_str()) == 0) { - if (!CheckDistance || (ComparativeDistanceNoZ(m_Position, client->GetPosition()) <= dist2)) { + if (!CheckDistance || (DistanceSquaredNoZ(m_Position, client->GetPosition()) <= dist2)) { GMMove(client->GetX(), client->GetY(), client->GetZ()); is_corpse_changed = true; } diff --git a/zone/corpse.h b/zone/corpse.h index 4357d6694..7583ecfdb 100644 --- a/zone/corpse.h +++ b/zone/corpse.h @@ -41,10 +41,10 @@ class Corpse : public Mob { Corpse(NPC* in_npc, ItemList* in_itemlist, uint32 in_npctypeid, const NPCType** in_npctypedata, uint32 in_decaytime = 600000); Corpse(Client* client, int32 in_rezexp); - Corpse(uint32 in_corpseid, uint32 in_charid, const char* in_charname, ItemList* in_itemlist, uint32 in_copper, uint32 in_silver, uint32 in_gold, uint32 in_plat, const xyz_heading& position, float in_size, uint8 in_gender, uint16 in_race, uint8 in_class, uint8 in_deity, uint8 in_level, uint8 in_texture, uint8 in_helmtexture, uint32 in_rezexp, bool wasAtGraveyard = false); + Corpse(uint32 in_corpseid, uint32 in_charid, const char* in_charname, ItemList* in_itemlist, uint32 in_copper, uint32 in_silver, uint32 in_gold, uint32 in_plat, const glm::vec4& position, float in_size, uint8 in_gender, uint16 in_race, uint8 in_class, uint8 in_deity, uint8 in_level, uint8 in_texture, uint8 in_helmtexture, uint32 in_rezexp, bool wasAtGraveyard = false); ~Corpse(); - static Corpse* LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std::string in_charname, const xyz_heading& position, std::string time_of_death, bool rezzed, bool was_at_graveyard); + static Corpse* LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std::string in_charname, const glm::vec4& position, std::string time_of_death, bool rezzed, bool was_at_graveyard); /* Corpse: General */ virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, SkillUseTypes attack_skill) { return true; } diff --git a/zone/doors.cpp b/zone/doors.cpp index 152712c15..bf1e6fc93 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -71,10 +71,10 @@ Doors::Doors(const Door* door) : client_version_mask = door->client_version_mask; } -Doors::Doors(const char *dmodel, const xyz_heading& position, uint8 dopentype, uint16 dsize) : +Doors::Doors(const char *dmodel, const glm::vec4& position, uint8 dopentype, uint16 dsize) : close_timer(5000), m_Position(position), - m_Destination(xyz_heading::Origin()) + m_Destination(glm::vec4()) { db_id = database.GetDoorsCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); door_id = database.GetDoorsDBCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); @@ -410,7 +410,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { sender->KeyRingAdd(playerkey); } - sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.m_X, m_Destination.m_Y, m_Destination.m_Z, m_Destination.m_Heading); + sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.x, m_Destination.y, m_Destination.z, m_Destination.w); } else if (( !IsDoorOpen() || opentype == 58 ) && (keyneeded && ((keyneeded == playerkey) || sender->GetGM()))) { @@ -420,22 +420,22 @@ void Doors::HandleClick(Client* sender, uint8 trigger) } if(database.GetZoneID(dest_zone) == zone->GetZoneID()) { - sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.m_X, m_Destination.m_Y, m_Destination.m_Z, m_Destination.m_Heading); + sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.x, m_Destination.y, m_Destination.z, m_Destination.w); } else { - sender->MovePC(database.GetZoneID(dest_zone), dest_instance_id, m_Destination.m_X, m_Destination.m_Y, m_Destination.m_Z, m_Destination.m_Heading); + sender->MovePC(database.GetZoneID(dest_zone), dest_instance_id, m_Destination.x, m_Destination.y, m_Destination.z, m_Destination.w); } } if (( !IsDoorOpen() || opentype == 58 ) && (!keyneeded)) { if(database.GetZoneID(dest_zone) == zone->GetZoneID()) { - sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.m_X, m_Destination.m_Y, m_Destination.m_Z, m_Destination.m_Heading); + sender->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Destination.x, m_Destination.y, m_Destination.z, m_Destination.w); } else { - sender->MovePC(database.GetZoneID(dest_zone), dest_instance_id, m_Destination.m_X, m_Destination.m_Y, m_Destination.m_Z, m_Destination.m_Heading); + sender->MovePC(database.GetZoneID(dest_zone), dest_instance_id, m_Destination.x, m_Destination.y, m_Destination.z, m_Destination.w); } } } @@ -697,11 +697,11 @@ bool ZoneDatabase::LoadDoors(int32 iDoorCount, Door *into, const char *zone_name void Doors::SetLocation(float x, float y, float z) { entity_list.DespawnAllDoors(); - m_Position = xyz_location(x, y, z); + m_Position = glm::vec4(x, y, z, m_Position.w); entity_list.RespawnAllDoors(); } -void Doors::SetPosition(const xyz_heading& position) { +void Doors::SetPosition(const glm::vec4& position) { entity_list.DespawnAllDoors(); m_Position = position; entity_list.RespawnAllDoors(); diff --git a/zone/doors.h b/zone/doors.h index 9f842bb7c..2d153f34e 100644 --- a/zone/doors.h +++ b/zone/doors.h @@ -17,7 +17,7 @@ class Doors : public Entity { public: Doors(const Door* door); - Doors(const char *dmodel, const xyz_heading& position, uint8 dopentype = 58, uint16 dsize = 100); + Doors(const char *dmodel, const glm::vec4& position, uint8 dopentype = 58, uint16 dsize = 100); ~Doors(); bool IsDoor() const { return true; } void HandleClick(Client* sender, uint8 trigger); @@ -29,7 +29,7 @@ public: char* GetDoorName() { return door_name; } uint32 GetDoorParam() { return door_param; } int GetInvertState() { return invert_state; } - const xyz_heading GetPosition() const{ return m_Position; } + const glm::vec4 GetPosition() const{ return m_Position; } int GetIncline() { return incline; } bool triggered; void SetOpenState(bool st) { isopen = st; } @@ -51,7 +51,7 @@ public: void SetEntityID(uint32 entity) { entity_id = entity; } void DumpDoor(); - const xyz_heading GetDestination() const { return m_Destination; } + const glm::vec4 GetDestination() const { return m_Destination; } uint8 IsLDoNDoor() { return is_ldon_door; } uint32 GetClientVersionMask() { return client_version_mask; } @@ -61,7 +61,7 @@ public: void ForceClose(Mob *sender, bool alt_mode=false); void ToggleState(Mob *sender); - void SetPosition(const xyz_heading& position); + void SetPosition(const glm::vec4& position); void SetLocation(float x, float y, float z); void SetIncline(int in); void SetDoorName(const char* name); @@ -75,7 +75,7 @@ private: uint8 door_id; char zone_name[32]; char door_name[32]; - xyz_heading m_Position; + glm::vec4 m_Position; int incline; uint8 opentype; uint32 guild_id; @@ -94,7 +94,7 @@ private: char dest_zone[16]; int dest_instance_id; - xyz_heading m_Destination; + glm::vec4 m_Destination; uint8 is_ldon_door; uint32 client_version_mask; diff --git a/zone/effects.cpp b/zone/effects.cpp index c43b91168..b4ed596a1 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -674,7 +674,7 @@ void EntityList::AETaunt(Client* taunter, float range) zdiff *= -1; if (zdiff < 10 && taunter->IsAttackAllowed(them) - && ComparativeDistanceNoZ(taunter->GetPosition(), them->GetPosition()) <= range) { + && DistanceSquaredNoZ(taunter->GetPosition(), them->GetPosition()) <= range) { if (taunter->CheckLosFN(them)) { taunter->Taunt(them, true); } @@ -721,10 +721,10 @@ void EntityList::AESpell(Mob *caster, Mob *center, uint16 spell_id, bool affect_ continue; if (spells[spell_id].targettype == ST_Ring) { - dist_targ = ComparativeDistance(static_cast(curmob->GetPosition()), caster->GetTargetRingLocation()); + dist_targ = DistanceSquared(static_cast(curmob->GetPosition()), caster->GetTargetRingLocation()); } else if (center) { - dist_targ = ComparativeDistance(curmob->GetPosition(), center->GetPosition()); + dist_targ = DistanceSquared(curmob->GetPosition(), center->GetPosition()); } if (dist_targ > dist2) //make sure they are in range @@ -796,7 +796,7 @@ void EntityList::MassGroupBuff(Mob *caster, Mob *center, uint16 spell_id, bool a continue; if (curmob == caster && !affect_caster) //watch for caster too continue; - if (ComparativeDistance(center->GetPosition(), curmob->GetPosition()) > dist2) //make sure they are in range + if (DistanceSquared(center->GetPosition(), curmob->GetPosition()) > dist2) //make sure they are in range continue; //Only npcs mgb should hit are client pets... @@ -838,7 +838,7 @@ void EntityList::AEBardPulse(Mob *caster, Mob *center, uint16 spell_id, bool aff continue; if (curmob == caster && !affect_caster) //watch for caster too continue; - if (ComparativeDistance(center->GetPosition(), curmob->GetPosition()) > dist2) //make sure they are in range + if (DistanceSquared(center->GetPosition(), curmob->GetPosition()) > dist2) //make sure they are in range continue; if (isnpc && curmob->IsNPC()) { //check npc->npc casting FACTION_VALUE f = curmob->GetReverseFactionCon(caster); @@ -888,7 +888,7 @@ void EntityList::AEAttack(Mob *attacker, float dist, int Hand, int count, bool I && curmob != attacker //this is not needed unless NPCs can use this &&(attacker->IsAttackAllowed(curmob)) && curmob->GetRace() != 216 && curmob->GetRace() != 472 /* dont attack horses */ - && (ComparativeDistance(curmob->GetPosition(), attacker->GetPosition()) <= dist2) + && (DistanceSquared(curmob->GetPosition(), attacker->GetPosition()) <= dist2) ) { attacker->Attack(curmob, Hand, false, false, IsFromSpell); hit++; diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 435dd6eea..d1a03648f 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -219,7 +219,7 @@ XS(XS__spawn) int npc_type = (int)SvIV(ST(0)); int grid = (int)SvIV(ST(1)); int unused = (int)SvIV(ST(2)); - auto position = xyz_heading((float)SvNV(ST(3)), (float)SvNV(ST(4)), (float)SvNV(ST(5)), 0.0f); + auto position = glm::vec4((float)SvNV(ST(3)), (float)SvNV(ST(4)), (float)SvNV(ST(5)), 0.0f); Mob *r = quest_manager.spawn2(npc_type, grid, unused, position); RETVAL = (r != nullptr) ? r->GetID() : 0; @@ -241,7 +241,7 @@ XS(XS__spawn2) int npc_type = (int)SvIV(ST(0)); int grid = (int)SvIV(ST(1)); int unused = (int)SvIV(ST(2)); - auto position = xyz_heading((float)SvNV(ST(3)), (float)SvNV(ST(4)), (float)SvNV(ST(5)), (float)SvNV(ST(6))); + auto position = glm::vec4((float)SvNV(ST(3)), (float)SvNV(ST(4)), (float)SvNV(ST(5)), (float)SvNV(ST(6))); Mob *r = quest_manager.spawn2(npc_type, grid, unused, position); RETVAL = (r != nullptr) ? r->GetID() : 0; @@ -270,7 +270,7 @@ XS(XS__unique_spawn) if(items == 7) heading = (float)SvNV(ST(6)); - Mob *r = quest_manager.unique_spawn(npc_type, grid, unused, xyz_heading(x, y, z, heading)); + Mob *r = quest_manager.unique_spawn(npc_type, grid, unused, glm::vec4(x, y, z, heading)); RETVAL = (r != nullptr) ? r->GetID() : 0; XSprePUSH; PUSHu((UV)RETVAL); @@ -1317,7 +1317,7 @@ XS(XS__rebind) Perl_croak(aTHX_ "Usage: rebind(zoneid, x, y, z)"); int zoneid = (int)SvIV(ST(0)); - auto location = xyz_location((float)SvNV(ST(1)),(float)SvNV(ST(2)),(float)SvNV(ST(3))); + auto location = glm::vec3((float)SvNV(ST(1)),(float)SvNV(ST(2)),(float)SvNV(ST(3))); quest_manager.rebind(zoneid, location); @@ -1388,7 +1388,7 @@ XS(XS__moveto) else saveguard = false; - quest_manager.moveto(xyz_heading(x, y, z, h), saveguard); + quest_manager.moveto(glm::vec4(x, y, z, h), saveguard); XSRETURN_EMPTY; } @@ -1743,7 +1743,7 @@ XS(XS__summonburriedplayercorpse) bool RETVAL; uint32 char_id = (int)SvIV(ST(0)); - auto position = xyz_heading((float)SvIV(ST(1)), (float)SvIV(ST(2)), (float)SvIV(ST(3)),(float)SvIV(ST(4))); + auto position = glm::vec4((float)SvIV(ST(1)), (float)SvIV(ST(2)), (float)SvIV(ST(3)),(float)SvIV(ST(4))); RETVAL = quest_manager.summonburriedplayercorpse(char_id, position); @@ -1761,7 +1761,7 @@ XS(XS__summonallplayercorpses) bool RETVAL; uint32 char_id = (int)SvIV(ST(0)); - auto position = xyz_heading((float)SvIV(ST(1)),(float)SvIV(ST(2)),(float)SvIV(ST(3)),(float)SvIV(ST(4))); + auto position = glm::vec4((float)SvIV(ST(1)),(float)SvIV(ST(2)),(float)SvIV(ST(3)),(float)SvIV(ST(4))); RETVAL = quest_manager.summonallplayercorpses(char_id, position); @@ -2660,10 +2660,10 @@ XS(XS__CreateGroundObject) uint16 id = 0; if(items == 5) - id = quest_manager.CreateGroundObject(itemid, xyz_heading(x, y, z, heading)); + id = quest_manager.CreateGroundObject(itemid, glm::vec4(x, y, z, heading)); else{ uint32 decay_time = (uint32)SvIV(ST(5)); - id = quest_manager.CreateGroundObject(itemid, xyz_heading(x, y, z, heading), decay_time); + id = quest_manager.CreateGroundObject(itemid, glm::vec4(x, y, z, heading), decay_time); } XSRETURN_IV(id); @@ -2691,7 +2691,7 @@ XS(XS__CreateGroundObjectFromModel) if (items > 6) decay_time = (uint32)SvIV(ST(6)); - id = quest_manager.CreateGroundObjectFromModel(modelname, xyz_heading(x, y, z, heading), type, decay_time); + id = quest_manager.CreateGroundObjectFromModel(modelname, glm::vec4(x, y, z, heading), type, decay_time); XSRETURN_IV(id); } @@ -2966,12 +2966,12 @@ XS(XS__MovePCInstance) if (items == 4) { - quest_manager.MovePCInstance(zoneid, instanceid, xyz_heading(x, y, z, 0.0f)); + quest_manager.MovePCInstance(zoneid, instanceid, glm::vec4(x, y, z, 0.0f)); } else { float heading = (float)SvNV(ST(5)); - quest_manager.MovePCInstance(zoneid, instanceid, xyz_heading(x, y, z, heading)); + quest_manager.MovePCInstance(zoneid, instanceid, glm::vec4(x, y, z, heading)); } XSRETURN_EMPTY; diff --git a/zone/entity.cpp b/zone/entity.cpp index 5b426f776..aa7d6d7ff 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -847,10 +847,10 @@ bool EntityList::MakeDoorSpawnPacket(EQApplicationPacket *app, Client *client) memset(&nd, 0, sizeof(nd)); memcpy(nd.name, door->GetDoorName(), 32); auto position = door->GetPosition(); - nd.xPos = position.m_X; - nd.yPos = position.m_Y; - nd.zPos = position.m_Z; - nd.heading = position.m_Heading; + nd.xPos = position.x; + nd.yPos = position.y; + nd.zPos = position.z; + nd.heading = position.w; nd.incline = door->GetIncline(); nd.size = door->GetSize(); nd.doorId = door->GetDoorID(); @@ -1442,7 +1442,7 @@ void EntityList::QueueCloseClients(Mob *sender, const EQApplicationPacket *app, || (filter2 == FilterShowGroupOnly && (sender == ent || (ent->GetGroup() && ent->GetGroup()->IsGroupMember(sender)))) || (filter2 == FilterShowSelfOnly && ent == sender)) - && (ComparativeDistance(ent->GetPosition(), sender->GetPosition()) <= dist2)) { + && (DistanceSquared(ent->GetPosition(), sender->GetPosition()) <= dist2)) { ent->QueuePacket(app, ackreq, Client::CLIENT_CONNECTED); } } @@ -1552,13 +1552,13 @@ Client *EntityList::GetClientByWID(uint32 iWID) return nullptr; } -Client *EntityList::GetRandomClient(const xyz_location& location, float Distance, Client *ExcludeClient) +Client *EntityList::GetRandomClient(const glm::vec3& location, float Distance, Client *ExcludeClient) { std::vector ClientsInRange; for (auto it = client_list.begin();it != client_list.end(); ++it) - if ((it->second != ExcludeClient) && (ComparativeDistance(static_cast(it->second->GetPosition()), location) <= Distance)) + if ((it->second != ExcludeClient) && (DistanceSquared(static_cast(it->second->GetPosition()), location) <= Distance)) ClientsInRange.push_back(it->second); if (ClientsInRange.empty()) @@ -1584,7 +1584,7 @@ Corpse *EntityList::GetCorpseByOwnerWithinRange(Client *client, Mob *center, int auto it = corpse_list.begin(); while (it != corpse_list.end()) { if (it->second->IsPlayerCorpse()) - if (ComparativeDistanceNoZ(center->GetPosition(), it->second->GetPosition()) < range && + if (DistanceSquaredNoZ(center->GetPosition(), it->second->GetPosition()) < range && strcasecmp(it->second->GetOwnerName(), client->GetName()) == 0) return it->second; ++it; @@ -1921,7 +1921,7 @@ void EntityList::MessageClose_StringID(Mob *sender, bool skipsender, float dist, for (auto it = client_list.begin(); it != client_list.end(); ++it) { c = it->second; - if(c && ComparativeDistance(c->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || c != sender)) + if(c && DistanceSquared(c->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || c != sender)) c->Message_StringID(type, string_id, message1, message2, message3, message4, message5, message6, message7, message8, message9); } } @@ -1937,7 +1937,7 @@ void EntityList::FilteredMessageClose_StringID(Mob *sender, bool skipsender, for (auto it = client_list.begin(); it != client_list.end(); ++it) { c = it->second; - if (c && ComparativeDistance(c->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || c != sender)) + if (c && DistanceSquared(c->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || c != sender)) c->FilteredMessage_StringID(sender, type, filter, string_id, message1, message2, message3, message4, message5, message6, message7, message8, message9); @@ -1985,7 +1985,7 @@ void EntityList::MessageClose(Mob* sender, bool skipsender, float dist, uint32 t auto it = client_list.begin(); while (it != client_list.end()) { - if (ComparativeDistance(it->second->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || it->second != sender)) + if (DistanceSquared(it->second->GetPosition(), sender->GetPosition()) <= dist2 && (!skipsender || it->second != sender)) it->second->Message(type, buffer); ++it; } @@ -2460,7 +2460,7 @@ void EntityList::SendPositionUpdates(Client *client, uint32 cLastUpdate, //bool Grouped = client->HasGroup() && mob->IsClient() && (client->GetGroup() == mob->CastToClient()->GetGroup()); //if (range == 0 || (iterator.GetData() == alwayssend) || Grouped || (mob->DistNoRootNoZ(*client) <= range)) { - if (range == 0 || (it->second == alwayssend) || mob->IsClient() || (ComparativeDistance(mob->GetPosition(), client->GetPosition()) <= range)) { + if (range == 0 || (it->second == alwayssend) || mob->IsClient() || (DistanceSquared(mob->GetPosition(), client->GetPosition()) <= range)) { mob->MakeSpawnUpdate(ppu); } if(mob && mob->IsClient() && mob->GetID()>0) { @@ -2619,8 +2619,8 @@ void EntityList::FindPathsToAllNPCs() auto it = npc_list.begin(); while (it != npc_list.end()) { - Map::Vertex Node0 = zone->pathing->GetPathNodeCoordinates(0, false); - Map::Vertex Dest(it->second->GetX(), it->second->GetY(), it->second->GetZ()); + glm::vec3 Node0 = zone->pathing->GetPathNodeCoordinates(0, false); + glm::vec3 Dest(it->second->GetX(), it->second->GetY(), it->second->GetZ()); std::deque Route = zone->pathing->FindRoute(Node0, Dest); if (Route.size() == 0) printf("Unable to find a route to %s\n", it->second->GetName()); @@ -3069,14 +3069,13 @@ void EntityList::OpenDoorsNear(NPC *who) for (auto it = door_list.begin();it != door_list.end(); ++it) { Doors *cdoor = it->second; if (!cdoor || cdoor->IsDoorOpen()) - continue; + continue; auto diff = who->GetPosition() - cdoor->GetPosition(); - diff.ABS_XYZ(); - float curdist = diff.m_X * diff.m_X + diff.m_Y * diff.m_Y; + float curdist = diff.x * diff.x + diff.y * diff.y; - if (diff.m_Z * diff.m_Z < 10 && curdist <= 100) + if (diff.z * diff.z < 10 && curdist <= 100) cdoor->NPCOpen(who); } } @@ -3088,20 +3087,20 @@ void EntityList::SendAlarm(Trap *trap, Mob *currenttarget, uint8 kos) for (auto it = npc_list.begin();it != npc_list.end(); ++it) { NPC *cur = it->second; - auto diff = cur->GetPosition() - trap->m_Position; - float curdist = diff.m_X * diff.m_X + diff.m_Y * diff.m_Y + diff.m_Z * diff.m_Z; + auto diff = glm::vec3(cur->GetPosition()) - trap->m_Position; + float curdist = diff.x * diff.x + diff.y * diff.y + diff.z * diff.z; if (cur->GetOwner() || cur->IsEngaged() || curdist > preSquareDistance ) continue; if (kos) { - uint8 factioncon = currenttarget->GetReverseFactionCon(cur); + uint8 factioncon = currenttarget->GetReverseFactionCon(cur); if (factioncon == FACTION_THREATENLY || factioncon == FACTION_SCOWLS) { cur->AddToHateList(currenttarget,1); } - } - else - cur->AddToHateList(currenttarget,1); + } + else + cur->AddToHateList(currenttarget,1); } } @@ -3138,7 +3137,7 @@ struct quest_proximity_event { int area_type; }; -void EntityList::ProcessMove(Client *c, const xyz_location& location) +void EntityList::ProcessMove(Client *c, const glm::vec3& location) { float last_x = c->ProximityX(); float last_y = c->ProximityY(); @@ -3160,9 +3159,9 @@ void EntityList::ProcessMove(Client *c, const xyz_location& location) last_z < l->min_z || last_z > l->max_z) { old_in = false; } - if (location.m_X < l->min_x || location.m_X > l->max_x || - location.m_Y < l->min_y || location.m_Y > l->max_y || - location.m_Z < l->min_z || location.m_Z > l->max_z) { + if (location.x < l->min_x || location.x > l->max_x || + location.y < l->min_y || location.y > l->max_y || + location.z < l->min_z || location.z > l->max_z) { new_in = false; } @@ -3195,9 +3194,9 @@ void EntityList::ProcessMove(Client *c, const xyz_location& location) old_in = false; } - if (location.m_X < a.min_x || location.m_X > a.max_x || - location.m_Y < a.min_y || location.m_Y > a.max_y || - location.m_Z < a.min_z || location.m_Z > a.max_z ) { + if (location.x < a.min_x || location.x > a.max_x || + location.y < a.min_y || location.y > a.max_y || + location.z < a.min_z || location.z > a.max_z ) { new_in = false; } @@ -3546,7 +3545,7 @@ void EntityList::RadialSetLogging(Mob *around, bool enabled, bool clients, continue; } - if (ComparativeDistance(around->GetPosition(), mob->GetPosition()) > range2) + if (DistanceSquared(around->GetPosition(), mob->GetPosition()) > range2) continue; if (enabled) @@ -3630,9 +3629,9 @@ bool Entity::CheckCoordLosNoZLeaps(float cur_x, float cur_y, float cur_z, if (zone->zonemap == nullptr) return true; - Map::Vertex myloc; - Map::Vertex oloc; - Map::Vertex hit; + glm::vec3 myloc; + glm::vec3 oloc; + glm::vec3 hit; myloc.x = cur_x; myloc.y = cur_y; @@ -3666,7 +3665,7 @@ void EntityList::QuestJournalledSayClose(Mob *sender, Client *QuestInitiator, // Use the old method for all other nearby clients for (auto it = client_list.begin(); it != client_list.end(); ++it) { c = it->second; - if(c && (c != QuestInitiator) && ComparativeDistance(c->GetPosition(), sender->GetPosition()) <= dist2) + if(c && (c != QuestInitiator) && DistanceSquared(c->GetPosition(), sender->GetPosition()) <= dist2) c->Message_StringID(10, GENERIC_SAY, mobname, message); } } @@ -3791,46 +3790,46 @@ void EntityList::GroupMessage(uint32 gid, const char *from, const char *message) } } -uint16 EntityList::CreateGroundObject(uint32 itemid, const xyz_heading& position, uint32 decay_time) +uint16 EntityList::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time) { const Item_Struct *is = database.GetItem(itemid); if (!is) - return 0; + return 0; - ItemInst *i = new ItemInst(is, is->MaxCharges); - if (!i) - return 0; + ItemInst *i = new ItemInst(is, is->MaxCharges); + if (!i) + return 0; - Object *object = new Object(i, position.m_X, position.m_Y, position.m_Z, position.m_Heading,decay_time); - entity_list.AddObject(object, true); + Object *object = new Object(i, position.x, position.y, position.z, position.w,decay_time); + entity_list.AddObject(object, true); - safe_delete(i); - if (!object) - return 0; + safe_delete(i); + if (!object) + return 0; - return object->GetID(); + return object->GetID(); } -uint16 EntityList::CreateGroundObjectFromModel(const char *model, const xyz_heading& position, uint8 type, uint32 decay_time) +uint16 EntityList::CreateGroundObjectFromModel(const char *model, const glm::vec4& position, uint8 type, uint32 decay_time) { if (!model) - return 0; + return 0; - Object *object = new Object(model, position.m_X, position.m_Y, position.m_Z, position.m_Heading, type); - entity_list.AddObject(object, true); + Object *object = new Object(model, position.x, position.y, position.z, position.w, type); + entity_list.AddObject(object, true); - if (!object) - return 0; + if (!object) + return 0; - return object->GetID(); + return object->GetID(); } -uint16 EntityList::CreateDoor(const char *model, const xyz_heading& position, uint8 opentype, uint16 size) +uint16 EntityList::CreateDoor(const char *model, const glm::vec4& position, uint8 opentype, uint16 size) { if (!model) - return 0; // fell through everything, this is bad/incomplete from perl + return 0; // fell through everything, this is bad/incomplete from perl - Doors *door = new Doors(model, position, opentype, size); + Doors *door = new Doors(model, position, opentype, size); RemoveAllDoors(); zone->LoadZoneDoors(zone->GetShortName(), zone->GetInstanceVersion()); entity_list.AddDoor(door); @@ -3868,7 +3867,7 @@ Mob *EntityList::GetTargetForMez(Mob *caster) continue; } - if (ComparativeDistance(caster->GetPosition(), d->GetPosition()) > 22250) { //only pick targets within 150 range + if (DistanceSquared(caster->GetPosition(), d->GetPosition()) > 22250) { //only pick targets within 150 range ++it; continue; } diff --git a/zone/entity.h b/zone/entity.h index c94ce03b8..ff3558312 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -155,7 +155,7 @@ public: Client *GetClientByCharID(uint32 iCharID); Client *GetClientByWID(uint32 iWID); Client *GetClient(uint32 ip, uint16 port); - Client *GetRandomClient(const xyz_location& location, float Distance, Client *ExcludeClient = nullptr); + Client *GetRandomClient(const glm::vec3& location, float Distance, Client *ExcludeClient = nullptr); Group *GetGroupByMob(Mob* mob); Group *GetGroupByClient(Client* client); Group *GetGroupByID(uint32 id); @@ -203,7 +203,7 @@ public: void MobProcess(); void TrapProcess(); void BeaconProcess(); - void ProcessMove(Client *c, const xyz_location& location); + void ProcessMove(Client *c, const glm::vec3& location); void ProcessMove(NPC *n, float x, float y, float z); void AddArea(int id, int type, float min_x, float max_x, float min_y, float max_y, float min_z, float max_z); void RemoveArea(int id); @@ -394,9 +394,9 @@ public: void SaveAllClientsTaskState(); void ReloadAllClientsTaskState(int TaskID=0); - uint16 CreateGroundObject(uint32 itemid, const xyz_heading& position, uint32 decay_time = 300000); - uint16 CreateGroundObjectFromModel(const char *model, const xyz_heading& position, uint8 type = 0x00, uint32 decay_time = 0); - uint16 CreateDoor(const char *model, const xyz_heading& position, uint8 type = 0, uint16 size = 100); + uint16 CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time = 300000); + uint16 CreateGroundObjectFromModel(const char *model, const glm::vec4& position, uint8 type = 0x00, uint32 decay_time = 0); + uint16 CreateDoor(const char *model, const glm::vec4& position, uint8 type = 0, uint16 size = 100); void ZoneWho(Client *c, Who_All_Struct* Who); void UnMarkNPC(uint16 ID); diff --git a/zone/fearpath.cpp b/zone/fearpath.cpp index ea32e2f95..624dd8baf 100644 --- a/zone/fearpath.cpp +++ b/zone/fearpath.cpp @@ -152,17 +152,17 @@ void Mob::CalculateNewFearpoint() { int Node = zone->pathing->GetRandomPathNode(); - Map::Vertex Loc = zone->pathing->GetPathNodeCoordinates(Node); + glm::vec3 Loc = zone->pathing->GetPathNodeCoordinates(Node); ++Loc.z; - Map::Vertex CurrentPosition(GetX(), GetY(), GetZ()); + glm::vec3 CurrentPosition(GetX(), GetY(), GetZ()); std::deque Route = zone->pathing->FindRoute(CurrentPosition, Loc); if(Route.size() > 0) { - m_FearWalkTarget = xyz_location(Loc.x, Loc.y, Loc.z); + m_FearWalkTarget = glm::vec3(Loc.x, Loc.y, Loc.z); curfp = true; mlog(PATHING__DEBUG, "Feared to node %i (%8.3f, %8.3f, %8.3f)", Node, Loc.x, Loc.y, Loc.z); @@ -192,7 +192,7 @@ void Mob::CalculateNewFearpoint() } } if (curfp) - m_FearWalkTarget = xyz_location(ranx, rany, ranz); + m_FearWalkTarget = glm::vec3(ranx, rany, ranz); else //Break fear BuffFadeByEffect(SE_Fear); } diff --git a/zone/forage.cpp b/zone/forage.cpp index 24c621c52..dd7f82974 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -175,7 +175,7 @@ bool Client::CanFish() { if(zone->zonemap != nullptr && zone->watermap != nullptr && RuleB(Watermap, CheckForWaterWhenFishing)) { - xyz_location rodPosition; + glm::vec3 rodPosition; // Tweak Rod and LineLength if required const float RodLength = RuleR(Watermap, FishingRodLength); const float LineLength = RuleR(Watermap, FishingLineLength); @@ -184,17 +184,17 @@ bool Client::CanFish() { HeadingDegrees = (int) ((GetHeading()*360)/256); HeadingDegrees = HeadingDegrees % 360; - rodPosition.m_X = m_Position.m_X + RodLength * sin(HeadingDegrees * M_PI/180.0f); - rodPosition.m_Y = m_Position.m_Y + RodLength * cos(HeadingDegrees * M_PI/180.0f); + rodPosition.x = m_Position.x + RodLength * sin(HeadingDegrees * M_PI/180.0f); + rodPosition.y = m_Position.y + RodLength * cos(HeadingDegrees * M_PI/180.0f); // Do BestZ to find where the line hanging from the rod intersects the water (if it is water). // and go 1 unit into the water. - Map::Vertex dest; - dest.x = rodPosition.m_X; - dest.y = rodPosition.m_Y; - dest.z = m_Position.m_Z+10; + glm::vec3 dest; + dest.x = rodPosition.x; + dest.y = rodPosition.y; + dest.z = m_Position.z+10; - rodPosition.m_Z = zone->zonemap->FindBestZ(dest, nullptr) + 4; + rodPosition.z = zone->zonemap->FindBestZ(dest, nullptr) + 4; bool in_lava = zone->watermap->InLava(rodPosition); bool in_water = zone->watermap->InWater(rodPosition) || zone->watermap->InVWater(rodPosition); //Message(0, "Rod is at %4.3f, %4.3f, %4.3f, InWater says %d, InLava says %d", RodX, RodY, RodZ, in_water, in_lava); @@ -202,7 +202,7 @@ bool Client::CanFish() { Message_StringID(MT_Skills, FISHING_LAVA); //Trying to catch a fire elemental or something? return false; } - if((!in_water) || (m_Position.m_Z-rodPosition.m_Z)>LineLength) { //Didn't hit the water OR the water is too far below us + if((!in_water) || (m_Position.z-rodPosition.z)>LineLength) { //Didn't hit the water OR the water is too far below us Message_StringID(MT_Skills, FISHING_LAND); //Trying to catch land sharks perhaps? return false; } @@ -274,7 +274,7 @@ void Client::GoFish() const NPCType* tmp = database.GetNPCType(npc_id); if(tmp != nullptr) { auto positionNPC = GetPosition(); - positionNPC.m_X = positionNPC.m_X + 3; + positionNPC.x = positionNPC.x + 3; NPC* npc = new NPC(tmp, nullptr, positionNPC, FlyMode3); npc->AddLootTable(); diff --git a/zone/groups.cpp b/zone/groups.cpp index 27ff3b758..ea74ed660 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -758,7 +758,7 @@ void Group::CastGroupSpell(Mob* caster, uint16 spell_id) { } else if(members[z] != nullptr) { - distance = ComparativeDistance(caster->GetPosition(), members[z]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[z]->GetPosition()); if(distance <= range2 && distance >= min_range2) { members[z]->CalcSpellPowerDistanceMod(spell_id, distance); caster->SpellOnTarget(spell_id, members[z]); @@ -798,7 +798,7 @@ void Group::GroupBardPulse(Mob* caster, uint16 spell_id) { } else if(members[z] != nullptr) { - distance = ComparativeDistance(caster->GetPosition(), members[z]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[z]->GetPosition()); if(distance <= range2) { members[z]->BardPulse(spell_id, caster); #ifdef GROUP_BUFF_PETS @@ -1197,7 +1197,7 @@ void Group::HealGroup(uint32 heal_amt, Mob* caster, float range) for(; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi]){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ numMem += 1; } @@ -1208,7 +1208,7 @@ void Group::HealGroup(uint32 heal_amt, Mob* caster, float range) for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi]){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ members[gi]->HealDamage(heal_amt, caster); members[gi]->SendHPUpdate(); @@ -1235,7 +1235,7 @@ void Group::BalanceHP(int32 penalty, float range, Mob* caster, int32 limit) for(; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi]){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ dmgtaken_tmp = members[gi]->GetMaxHP() - members[gi]->GetHP(); @@ -1253,7 +1253,7 @@ void Group::BalanceHP(int32 penalty, float range, Mob* caster, int32 limit) for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi]){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ if((members[gi]->GetMaxHP() - dmgtaken) < 1){ //this way the ability will never kill someone members[gi]->SetHP(1); //but it will come darn close @@ -1284,7 +1284,7 @@ void Group::BalanceMana(int32 penalty, float range, Mob* caster, int32 limit) for(; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi] && (members[gi]->GetMaxMana() > 0)){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ manataken_tmp = members[gi]->GetMaxMana() - members[gi]->GetMana(); @@ -1306,7 +1306,7 @@ void Group::BalanceMana(int32 penalty, float range, Mob* caster, int32 limit) for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++) { if(members[gi]){ - distance = ComparativeDistance(caster->GetPosition(), members[gi]->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi]->GetPosition()); if(distance <= range2){ if((members[gi]->GetMaxMana() - manataken) < 1){ members[gi]->SetMana(1); diff --git a/zone/hate_list.cpp b/zone/hate_list.cpp index ad49b00fd..dbc24296a 100644 --- a/zone/hate_list.cpp +++ b/zone/hate_list.cpp @@ -158,7 +158,7 @@ Mob* HateList::GetClosestEntOnHateList(Mob *hater) { auto iterator = list.begin(); while (iterator != list.end()) { - this_distance = ComparativeDistanceNoZ((*iterator)->entity_on_hatelist->GetPosition(), hater->GetPosition()); + this_distance = DistanceSquaredNoZ((*iterator)->entity_on_hatelist->GetPosition(), hater->GetPosition()); if ((*iterator)->entity_on_hatelist != nullptr && this_distance <= close_distance) { close_distance = this_distance; close_entity = (*iterator)->entity_on_hatelist; @@ -308,7 +308,7 @@ Mob *HateList::GetEntWithMostHateOnList(Mob *center) continue; } - auto hateEntryPosition = xyz_location(cur->entity_on_hatelist->GetX(), cur->entity_on_hatelist->GetY(), cur->entity_on_hatelist->GetZ()); + auto hateEntryPosition = glm::vec3(cur->entity_on_hatelist->GetX(), cur->entity_on_hatelist->GetY(), cur->entity_on_hatelist->GetZ()); if (center->IsNPC() && center->CastToNPC()->IsUnderwaterOnly() && zone->HasWaterMap()) { if (!zone->watermap->InLiquid(hateEntryPosition)) { skipped_count++; @@ -435,7 +435,7 @@ Mob *HateList::GetEntWithMostHateOnList(Mob *center) { struct_HateList *cur = (*iterator); if (center->IsNPC() && center->CastToNPC()->IsUnderwaterOnly() && zone->HasWaterMap()) { - if (!zone->watermap->InLiquid(cur->entity_on_hatelist->GetPosition())) { + if(!zone->watermap->InLiquid(glm::vec3(cur->entity_on_hatelist->GetPosition()))) { skipped_count++; ++iterator; continue; @@ -592,7 +592,7 @@ void HateList::SpellCast(Mob *caster, uint32 spell_id, float range, Mob* ae_cent struct_HateList *h = (*iterator); if (range > 0) { - dist_targ = ComparativeDistance(center->GetPosition(), h->entity_on_hatelist->GetPosition()); + dist_targ = DistanceSquared(center->GetPosition(), h->entity_on_hatelist->GetPosition()); if (dist_targ <= range && dist_targ >= min_range2) { id_list.push_back(h->entity_on_hatelist->GetID()); diff --git a/zone/horse.cpp b/zone/horse.cpp index 8c7bc23ba..7c929c5fa 100644 --- a/zone/horse.cpp +++ b/zone/horse.cpp @@ -28,7 +28,7 @@ std::map Horse::horse_types; LinkedList horses_auto_delete; -Horse::Horse(Client *_owner, uint16 spell_id, const xyz_heading& position) +Horse::Horse(Client *_owner, uint16 spell_id, const glm::vec4& position) : NPC(GetHorseType(spell_id), nullptr, position, FlyMode3) { //give the horse its proper name. diff --git a/zone/horse.h b/zone/horse.h index 28ca19356..72dc5cdec 100644 --- a/zone/horse.h +++ b/zone/horse.h @@ -29,7 +29,7 @@ struct NewSpawn_Struct; class Horse : public NPC { public: - Horse(Client *owner, uint16 spell_id, const xyz_heading& position); + Horse(Client *owner, uint16 spell_id, const glm::vec4& position); virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index d931f0e36..ac0ddcf99 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -242,17 +242,17 @@ void Lua_Client::SetBindPoint(int to_zone, int to_instance) { void Lua_Client::SetBindPoint(int to_zone, int to_instance, float new_x) { Lua_Safe_Call_Void(); - self->SetBindPoint(to_zone, to_instance, xyz_location(new_x,0.0f,0.0f)); + self->SetBindPoint(to_zone, to_instance, glm::vec3(new_x,0.0f,0.0f)); } void Lua_Client::SetBindPoint(int to_zone, int to_instance, float new_x, float new_y) { Lua_Safe_Call_Void(); - self->SetBindPoint(to_zone, to_instance, xyz_location(new_x, new_y, 0.0f)); + self->SetBindPoint(to_zone, to_instance, glm::vec3(new_x, new_y, 0.0f)); } void Lua_Client::SetBindPoint(int to_zone, int to_instance, float new_x, float new_y, float new_z) { Lua_Safe_Call_Void(); - self->SetBindPoint(to_zone, to_instance, xyz_location(new_x, new_y, new_z)); + self->SetBindPoint(to_zone, to_instance, glm::vec3(new_x, new_y, new_z)); } float Lua_Client::GetBindX() { diff --git a/zone/lua_door.cpp b/zone/lua_door.cpp index bcd0ca284..1a16fe364 100644 --- a/zone/lua_door.cpp +++ b/zone/lua_door.cpp @@ -20,49 +20,49 @@ const char *Lua_Door::GetDoorName() { float Lua_Door::GetX() { Lua_Safe_Call_Real(); - return self->GetPosition().m_X; + return self->GetPosition().x; } float Lua_Door::GetY() { Lua_Safe_Call_Real(); - return self->GetPosition().m_Y; + return self->GetPosition().y; } float Lua_Door::GetZ() { Lua_Safe_Call_Real(); - return self->GetPosition().m_Z; + return self->GetPosition().z; } float Lua_Door::GetHeading() { Lua_Safe_Call_Real(); - return self->GetPosition().m_Heading; + return self->GetPosition().w; } void Lua_Door::SetX(float x) { Lua_Safe_Call_Void(); auto position = self->GetPosition(); - position.m_X = x; + position.x = x; self->SetPosition(position); } void Lua_Door::SetY(float y) { Lua_Safe_Call_Void(); auto position = self->GetPosition(); - position.m_Y = y; + position.y = y; self->SetPosition(position); } void Lua_Door::SetZ(float z) { Lua_Safe_Call_Void(); auto position = self->GetPosition(); - position.m_Z = z; + position.z = z; self->SetPosition(position); } void Lua_Door::SetHeading(float h) { Lua_Safe_Call_Void(); auto position = self->GetPosition(); - position.m_Heading = h; + position.w = h; self->SetPosition(position); } diff --git a/zone/lua_entity_list.cpp b/zone/lua_entity_list.cpp index 9632b6624..8ba338359 100644 --- a/zone/lua_entity_list.cpp +++ b/zone/lua_entity_list.cpp @@ -298,12 +298,12 @@ void Lua_EntityList::MessageGroup(Lua_Mob who, bool skip_close, uint32 type, con Lua_Client Lua_EntityList::GetRandomClient(float x, float y, float z, float dist) { Lua_Safe_Call_Class(Lua_Client); - return self->GetRandomClient(xyz_location(x, y, z), dist); + return self->GetRandomClient(glm::vec3(x, y, z), dist); } Lua_Client Lua_EntityList::GetRandomClient(float x, float y, float z, float dist, Lua_Client exclude) { Lua_Safe_Call_Class(Lua_Client); - return self->GetRandomClient(xyz_location(x, y, z), dist, exclude); + return self->GetRandomClient(glm::vec3(x, y, z), dist, exclude); } Lua_Mob_List Lua_EntityList::GetMobList() { diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 9ff451f67..70e5c9334 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -251,12 +251,12 @@ void unregister_spell_event(int evt, int spell_id) { } Lua_Mob lua_spawn2(int npc_type, int grid, int unused, double x, double y, double z, double heading) { - auto position = xyz_heading(x, y, z, heading); + auto position = glm::vec4(x, y, z, heading); return Lua_Mob(quest_manager.spawn2(npc_type, grid, unused, position)); } Lua_Mob lua_unique_spawn(int npc_type, int grid, int unused, double x, double y, double z, double heading = 0.0) { - auto position = xyz_heading(x, y, z, heading); + auto position = glm::vec4(x, y, z, heading); return Lua_Mob(quest_manager.unique_spawn(npc_type, grid, unused, position)); } @@ -421,15 +421,15 @@ void lua_pause(int duration) { } void lua_move_to(float x, float y, float z) { - quest_manager.moveto(xyz_heading(x, y, z, 0.0f), false); + quest_manager.moveto(glm::vec4(x, y, z, 0.0f), false); } void lua_move_to(float x, float y, float z, float h) { - quest_manager.moveto(xyz_heading(x, y, z, h), false); + quest_manager.moveto(glm::vec4(x, y, z, h), false); } void lua_move_to(float x, float y, float z, float h, bool save_guard_spot) { - quest_manager.moveto(xyz_heading(x, y, z, h), save_guard_spot); + quest_manager.moveto(glm::vec4(x, y, z, h), save_guard_spot); } void lua_path_resume() { @@ -485,11 +485,11 @@ void lua_toggle_spawn_event(int event_id, bool enable, bool strict, bool reset) } void lua_summon_burried_player_corpse(uint32 char_id, float x, float y, float z, float h) { - quest_manager.summonburriedplayercorpse(char_id, xyz_heading(x, y, z, h)); + quest_manager.summonburriedplayercorpse(char_id, glm::vec4(x, y, z, h)); } void lua_summon_all_player_corpses(uint32 char_id, float x, float y, float z, float h) { - quest_manager.summonallplayercorpses(char_id, xyz_heading(x, y, z, h)); + quest_manager.summonallplayercorpses(char_id, glm::vec4(x, y, z, h)); } int lua_get_player_burried_corpse_count(uint32 char_id) { @@ -685,23 +685,23 @@ int lua_get_level(int type) { } void lua_create_ground_object(uint32 item_id, float x, float y, float z, float h) { - quest_manager.CreateGroundObject(item_id, xyz_heading(x, y, z, h)); + quest_manager.CreateGroundObject(item_id, glm::vec4(x, y, z, h)); } void lua_create_ground_object(uint32 item_id, float x, float y, float z, float h, uint32 decay_time) { - quest_manager.CreateGroundObject(item_id, xyz_heading(x, y, z, h), decay_time); + quest_manager.CreateGroundObject(item_id, glm::vec4(x, y, z, h), decay_time); } void lua_create_ground_object_from_model(const char *model, float x, float y, float z, float h) { - quest_manager.CreateGroundObjectFromModel(model, xyz_heading(x, y, z, h)); + quest_manager.CreateGroundObjectFromModel(model, glm::vec4(x, y, z, h)); } void lua_create_ground_object_from_model(const char *model, float x, float y, float z, float h, int type) { - quest_manager.CreateGroundObjectFromModel(model, xyz_heading(x, y, z, h), type); + quest_manager.CreateGroundObjectFromModel(model, glm::vec4(x, y, z, h), type); } void lua_create_ground_object_from_model(const char *model, float x, float y, float z, float h, int type, uint32 decay_time) { - quest_manager.CreateGroundObjectFromModel(model, xyz_heading(x, y, z, h), type, decay_time); + quest_manager.CreateGroundObjectFromModel(model, glm::vec4(x, y, z, h), type, decay_time); } void lua_create_door(const char *model, float x, float y, float z, float h, int open_type, int size) { @@ -1391,7 +1391,7 @@ void lua_create_npc(luabind::adl::object table, float x, float y, float z, float LuaCreateNPCParse(raid_target, bool, false); LuaCreateNPCParse(probability, uint8, 0); - NPC* npc = new NPC(npc_type, nullptr, xyz_heading(x, y, z, heading), FlyMode3); + NPC* npc = new NPC(npc_type, nullptr, glm::vec4(x, y, z, heading), FlyMode3); npc->GiveNPCTypeData(npc_type); entity_list.AddNPC(npc); } diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 054bb7728..04d11566a 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -674,22 +674,22 @@ double Lua_Mob::GetHeading() { double Lua_Mob::GetWaypointX() { Lua_Safe_Call_Real(); - return self->GetCurrentWayPoint().m_X; + return self->GetCurrentWayPoint().x; } double Lua_Mob::GetWaypointY() { Lua_Safe_Call_Real(); - return self->GetCurrentWayPoint().m_Y; + return self->GetCurrentWayPoint().y; } double Lua_Mob::GetWaypointZ() { Lua_Safe_Call_Real(); - return self->GetCurrentWayPoint().m_Z; + return self->GetCurrentWayPoint().z; } double Lua_Mob::GetWaypointH() { Lua_Safe_Call_Real(); - return self->GetCurrentWayPoint().m_Heading; + return self->GetCurrentWayPoint().w; } double Lua_Mob::GetWaypointPause() { diff --git a/zone/lua_npc.cpp b/zone/lua_npc.cpp index 95ae4c5c9..f7a8ad99c 100644 --- a/zone/lua_npc.cpp +++ b/zone/lua_npc.cpp @@ -269,7 +269,7 @@ void Lua_NPC::PauseWandering(int pause_time) { void Lua_NPC::MoveTo(float x, float y, float z, float h, bool save) { Lua_Safe_Call_Void(); - auto position = xyz_heading(x, y, z, h); + auto position = glm::vec4(x, y, z, h); self->MoveTo(position, save); } @@ -315,37 +315,37 @@ int Lua_NPC::GetSpawnPointID() { float Lua_NPC::GetSpawnPointX() { Lua_Safe_Call_Real(); - return self->GetSpawnPoint().m_X; + return self->GetSpawnPoint().x; } float Lua_NPC::GetSpawnPointY() { Lua_Safe_Call_Real(); - return self->GetSpawnPoint().m_Y; + return self->GetSpawnPoint().y; } float Lua_NPC::GetSpawnPointZ() { Lua_Safe_Call_Real(); - return self->GetSpawnPoint().m_Z; + return self->GetSpawnPoint().z; } float Lua_NPC::GetSpawnPointH() { Lua_Safe_Call_Real(); - return self->GetSpawnPoint().m_Heading; + return self->GetSpawnPoint().w; } float Lua_NPC::GetGuardPointX() { Lua_Safe_Call_Real(); - return self->GetGuardPoint().m_X; + return self->GetGuardPoint().x; } float Lua_NPC::GetGuardPointY() { Lua_Safe_Call_Real(); - return self->GetGuardPoint().m_Y; + return self->GetGuardPoint().y; } float Lua_NPC::GetGuardPointZ() { Lua_Safe_Call_Real(); - return self->GetGuardPoint().m_Z; + return self->GetGuardPoint().z; } void Lua_NPC::SetPrimSkill(int skill_id) { diff --git a/zone/map.cpp b/zone/map.cpp index 5c917b955..49f793d2c 100644 --- a/zone/map.cpp +++ b/zone/map.cpp @@ -62,17 +62,17 @@ Map::~Map() { } } -float Map::FindBestZ(Vertex &start, Vertex *result) const { +float Map::FindBestZ(glm::vec3 &start, glm::vec3 *result) const { if (!imp) return false; - Vertex tmp; + glm::vec3 tmp; if(!result) result = &tmp; start.z += RuleI(Map, FindBestZHeightAdjust); - Vertex from(start.x, start.y, start.z); - Vertex to(start.x, start.y, BEST_Z_INVALID); + glm::vec3 from(start.x, start.y, start.z); + glm::vec3 to(start.x, start.y, BEST_Z_INVALID); float hit_distance; bool hit = false; @@ -93,19 +93,19 @@ float Map::FindBestZ(Vertex &start, Vertex *result) const { return BEST_Z_INVALID; } -bool Map::LineIntersectsZone(Vertex start, Vertex end, float step, Vertex *result) const { +bool Map::LineIntersectsZone(glm::vec3 start, glm::vec3 end, float step, glm::vec3 *result) const { if(!imp) return false; return imp->rm->raycast((const RmReal*)&start, (const RmReal*)&end, (RmReal*)result, nullptr, nullptr); } -bool Map::LineIntersectsZoneNoZLeaps(Vertex start, Vertex end, float step_mag, Vertex *result) const { +bool Map::LineIntersectsZoneNoZLeaps(glm::vec3 start, glm::vec3 end, float step_mag, glm::vec3 *result) const { if (!imp) return false; float z = BEST_Z_INVALID; - Vertex step; - Vertex cur; + glm::vec3 step; + glm::vec3 cur; cur.x = start.x; cur.y = start.y; cur.z = start.z; @@ -139,11 +139,11 @@ bool Map::LineIntersectsZoneNoZLeaps(Vertex start, Vertex end, float step_mag, V while(cur.x != end.x || cur.y != end.y || cur.z != end.z) { steps++; - Vertex me; + glm::vec3 me; me.x = cur.x; me.y = cur.y; me.z = cur.z; - Vertex hit; + glm::vec3 hit; float best_z = FindBestZ(me, &hit); float diff = best_z - z; @@ -184,7 +184,7 @@ bool Map::LineIntersectsZoneNoZLeaps(Vertex start, Vertex end, float step_mag, V return false; } -bool Map::CheckLoS(Vertex myloc, Vertex oloc) const { +bool Map::CheckLoS(glm::vec3 myloc, glm::vec3 oloc) const { if(!imp) return false; @@ -250,22 +250,22 @@ bool Map::LoadV1(FILE *f) { return false; } - std::vector verts; + std::vector verts; std::vector indices; for(uint32 i = 0; i < face_count; ++i) { - Vertex a; - Vertex b; - Vertex c; + glm::vec3 a; + glm::vec3 b; + glm::vec3 c; float normals[4]; - if(fread(&a, sizeof(Vertex), 1, f) != 1) { + if(fread(&a, sizeof(glm::vec3), 1, f) != 1) { return false; } - if(fread(&b, sizeof(Vertex), 1, f) != 1) { + if(fread(&b, sizeof(glm::vec3), 1, f) != 1) { return false; } - if(fread(&c, sizeof(Vertex), 1, f) != 1) { + if(fread(&c, sizeof(glm::vec3), 1, f) != 1) { return false; } @@ -309,7 +309,7 @@ struct ModelEntry uint32 v1, v2, v3; uint8 vis; }; - std::vector verts; + std::vector verts; std::vector polys; }; @@ -376,7 +376,7 @@ bool Map::LoadV2(FILE *f) { units_per_vertex = *(float*)buf; buf += sizeof(float); - std::vector verts; + std::vector verts; std::vector indices; for (uint32 i = 0; i < vert_count; ++i) { @@ -393,7 +393,7 @@ bool Map::LoadV2(FILE *f) { z = *(float*)buf; buf += sizeof(float); - Vertex vert(x, y, z); + glm::vec3 vert(x, y, z); verts.push_back(vert); } @@ -434,7 +434,7 @@ bool Map::LoadV2(FILE *f) { float z = *(float*)buf; buf += sizeof(float); - me->verts[j] = Vertex(x, y, z); + me->verts[j] = glm::vec3(x, y, z); } me->polys.resize(poly_count); @@ -596,7 +596,7 @@ bool Map::LoadV2(FILE *f) { for (size_t k = 0; k < model->polys.size(); ++k) { auto &poly = model->polys[k]; - Vertex v1, v2, v3; + glm::vec3 v1, v2, v3; v1 = model->verts[poly.v1]; v2 = model->verts[poly.v2]; @@ -618,7 +618,7 @@ bool Map::LoadV2(FILE *f) { RotateVertex(v2, 0, y_rot * 3.14159f / 180.0f, 0); RotateVertex(v3, 0, y_rot * 3.14159f / 180.0f, 0); - Vertex correction(p_x, p_y, p_z); + glm::vec3 correction(p_x, p_y, p_z); RotateVertex(correction, x_rot * 3.14159f / 180.0f, 0, 0); @@ -724,10 +724,10 @@ bool Map::LoadV2(FILE *f) { float QuadVertex4Z = QuadVertex1Z; uint32 current_vert = (uint32)verts.size() + 3; - verts.push_back(Vertex(QuadVertex1X, QuadVertex1Y, QuadVertex1Z)); - verts.push_back(Vertex(QuadVertex2X, QuadVertex2Y, QuadVertex2Z)); - verts.push_back(Vertex(QuadVertex3X, QuadVertex3Y, QuadVertex3Z)); - verts.push_back(Vertex(QuadVertex4X, QuadVertex4Y, QuadVertex4Z)); + verts.push_back(glm::vec3(QuadVertex1X, QuadVertex1Y, QuadVertex1Z)); + verts.push_back(glm::vec3(QuadVertex2X, QuadVertex2Y, QuadVertex2Z)); + verts.push_back(glm::vec3(QuadVertex3X, QuadVertex3Y, QuadVertex3Z)); + verts.push_back(glm::vec3(QuadVertex4X, QuadVertex4Y, QuadVertex4Z)); indices.push_back(current_vert); indices.push_back(current_vert - 2); @@ -790,7 +790,7 @@ bool Map::LoadV2(FILE *f) { } else { i1 = (uint32)verts.size(); - verts.push_back(Vertex(QuadVertex1X, QuadVertex1Y, QuadVertex1Z)); + verts.push_back(glm::vec3(QuadVertex1X, QuadVertex1Y, QuadVertex1Z)); cur_verts[std::make_tuple(QuadVertex1X, QuadVertex1Y, QuadVertex1Z)] = i1; } @@ -801,7 +801,7 @@ bool Map::LoadV2(FILE *f) { } else { i2 = (uint32)verts.size(); - verts.push_back(Vertex(QuadVertex2X, QuadVertex2Y, QuadVertex2Z)); + verts.push_back(glm::vec3(QuadVertex2X, QuadVertex2Y, QuadVertex2Z)); cur_verts[std::make_tuple(QuadVertex2X, QuadVertex2Y, QuadVertex2Z)] = i2; } @@ -812,7 +812,7 @@ bool Map::LoadV2(FILE *f) { } else { i3 = (uint32)verts.size(); - verts.push_back(Vertex(QuadVertex3X, QuadVertex3Y, QuadVertex3Z)); + verts.push_back(glm::vec3(QuadVertex3X, QuadVertex3Y, QuadVertex3Z)); cur_verts[std::make_tuple(QuadVertex3X, QuadVertex3Y, QuadVertex3Z)] = i3; } @@ -823,7 +823,7 @@ bool Map::LoadV2(FILE *f) { } else { i4 = (uint32)verts.size(); - verts.push_back(Vertex(QuadVertex4X, QuadVertex4Y, QuadVertex4Z)); + verts.push_back(glm::vec3(QuadVertex4X, QuadVertex4Y, QuadVertex4Z)); cur_verts[std::make_tuple(QuadVertex4X, QuadVertex4Y, QuadVertex4Z)] = i4; } @@ -859,8 +859,8 @@ bool Map::LoadV2(FILE *f) { return true; } -void Map::RotateVertex(Vertex &v, float rx, float ry, float rz) { - Vertex nv = v; +void Map::RotateVertex(glm::vec3 &v, float rx, float ry, float rz) { + glm::vec3 nv = v; nv.y = (cos(rx) * v.y) - (sin(rx) * v.z); nv.z = (sin(rx) * v.y) + (cos(rx) * v.z); @@ -878,13 +878,13 @@ void Map::RotateVertex(Vertex &v, float rx, float ry, float rz) { v = nv; } -void Map::ScaleVertex(Vertex &v, float sx, float sy, float sz) { +void Map::ScaleVertex(glm::vec3 &v, float sx, float sy, float sz) { v.x = v.x * sx; v.y = v.y * sy; v.z = v.z * sz; } -void Map::TranslateVertex(Vertex &v, float tx, float ty, float tz) { +void Map::TranslateVertex(glm::vec3 &v, float tx, float ty, float tz) { v.x = v.x + tx; v.y = v.y + ty; v.z = v.z + tz; diff --git a/zone/map.h b/zone/map.h index cec2adb8a..2bce1c6db 100644 --- a/zone/map.h +++ b/zone/map.h @@ -30,40 +30,19 @@ class Map { public: -#pragma pack(1) - struct Vertex - { - Vertex() : x(0.0f), y(0.0f), z(0.0f) { } - Vertex(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } - ~Vertex() { } - bool operator==(const Vertex &v) const - { - return((v.x == x) && (v.y == y) && (v.z == z)); - } - operator xyz_location() const - { - return xyz_location(x,y,z); - } - - float x; - float y; - float z; - }; -#pragma pack() - Map(); ~Map(); - float FindBestZ(Vertex &start, Vertex *result) const; - bool LineIntersectsZone(Vertex start, Vertex end, float step, Vertex *result) const; - bool LineIntersectsZoneNoZLeaps(Vertex start, Vertex end, float step_mag, Vertex *result) const; - bool CheckLoS(Vertex myloc, Vertex oloc) const; + float FindBestZ(glm::vec3 &start, glm::vec3 *result) const; + bool LineIntersectsZone(glm::vec3 start, glm::vec3 end, float step, glm::vec3 *result) const; + bool LineIntersectsZoneNoZLeaps(glm::vec3 start, glm::vec3 end, float step_mag, glm::vec3 *result) const; + bool CheckLoS(glm::vec3 myloc, glm::vec3 oloc) const; bool Load(std::string filename); static Map *LoadMapFile(std::string file); private: - void RotateVertex(Vertex &v, float rx, float ry, float rz); - void ScaleVertex(Vertex &v, float sx, float sy, float sz); - void TranslateVertex(Vertex &v, float tx, float ty, float tz); + void RotateVertex(glm::vec3 &v, float rx, float ry, float rz); + void ScaleVertex(glm::vec3 &v, float sx, float sy, float sz); + void TranslateVertex(glm::vec3 &v, float tx, float ty, float tz); bool LoadV1(FILE *f); bool LoadV2(FILE *f); diff --git a/zone/merc.cpp b/zone/merc.cpp index 187a23370..9352d1de1 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -20,7 +20,7 @@ extern volatile bool ZoneLoaded; Merc::Merc(const NPCType* d, float x, float y, float z, float heading) -: NPC(d, nullptr, xyz_heading(x, y, z, heading), 0, false), endupkeep_timer(1000), rest_timer(1), confidence_timer(6000), check_target_timer(2000) +: NPC(d, nullptr, glm::vec4(x, y, z, heading), 0, false), endupkeep_timer(1000), rest_timer(1), confidence_timer(6000), check_target_timer(2000) { base_hp = d->max_hp; base_mana = d->Mana; @@ -1318,7 +1318,7 @@ bool Merc::IsMercCasterCombatRange(Mob *target) { // half the max so the merc doesn't always stop at max range to allow combat movement range *= .5; - float targetDistance = ComparativeDistanceNoZ(m_Position, target->GetPosition()); + float targetDistance = DistanceSquaredNoZ(m_Position, target->GetPosition()); if(targetDistance > range) result = false; @@ -1480,7 +1480,7 @@ void Merc::AI_Process() { if(IsMercCasterCombatRange(GetTarget())) atCombatRange = true; } - else if(ComparativeDistance(m_Position, GetTarget()->GetPosition()) <= meleeDistance) { + else if(DistanceSquared(m_Position, GetTarget()->GetPosition()) <= meleeDistance) { atCombatRange = true; } @@ -1513,7 +1513,7 @@ void Merc::AI_Process() { return; } } - else if(!IsMoving() && GetClass() != ROGUE && (ComparativeDistanceNoZ(m_Position, GetTarget()->GetPosition()) < GetTarget()->GetSize())) + else if(!IsMoving() && GetClass() != ROGUE && (DistanceSquaredNoZ(m_Position, GetTarget()->GetPosition()) < GetTarget()->GetSize())) { // If we are not a rogue trying to backstab, let's try to adjust our melee range so we don't appear to be bunched up float newX = 0; @@ -1701,7 +1701,7 @@ void Merc::AI_Process() { if(follow) { - float dist = ComparativeDistance(m_Position, follow->GetPosition()); + float dist = DistanceSquared(m_Position, follow->GetPosition()); float speed = GetRunspeed(); if(dist < GetFollowDistance() + 1000) @@ -1938,7 +1938,7 @@ bool Merc::AIDoSpellCast(uint16 spellid, Mob* tar, int32 mana_cost, uint32* oDon if (mercSpell.type & SpellType_Escape) { dist2 = 0; } else - dist2 = ComparativeDistance(m_Position, tar->GetPosition()); + dist2 = DistanceSquared(m_Position, tar->GetPosition()); if (((((spells[spellid].targettype==ST_GroupTeleport && mercSpell.type==SpellType_Heal) || spells[spellid].targettype==ST_AECaster @@ -2435,7 +2435,7 @@ void Merc::CheckHateList() { if(MercOwner && MercOwner->GetTarget() && MercOwner->GetTarget()->IsNPC() && (MercOwner->GetTarget()->GetHateAmount(MercOwner) || MercOwner->CastToClient()->AutoAttackEnabled()) && IsAttackAllowed(MercOwner->GetTarget())) { float range = g->HasRole(MercOwner, RolePuller) ? RuleI(Mercs, AggroRadiusPuller) : RuleI(Mercs, AggroRadius); range = range * range; - if(ComparativeDistanceNoZ(m_Position, MercOwner->GetTarget()->GetPosition()) < range) { + if(DistanceSquaredNoZ(m_Position, MercOwner->GetTarget()->GetPosition()) < range) { AddToHateList(MercOwner->GetTarget(), 1); } } @@ -2445,7 +2445,7 @@ void Merc::CheckHateList() { for(std::list::iterator itr = npc_list.begin(); itr != npc_list.end(); ++itr) { NPC* npc = *itr; - float dist = ComparativeDistanceNoZ(m_Position, npc->GetPosition()); + float dist = DistanceSquaredNoZ(m_Position, npc->GetPosition()); int radius = RuleI(Mercs, AggroRadius); radius *= radius; if(dist <= radius) { @@ -2457,7 +2457,7 @@ void Merc::CheckHateList() { if(!hate_list.IsEntOnHateList(npc)) { float range = g->HasRole(groupMember, RolePuller) ? RuleI(Mercs, AggroRadiusPuller) : RuleI(Mercs, AggroRadius); range *= range; - if(ComparativeDistanceNoZ(m_Position, npc->GetPosition()) < range) { + if(DistanceSquaredNoZ(m_Position, npc->GetPosition()) < range) { hate_list.AddEntToHateList(npc, 1); } } @@ -2499,7 +2499,7 @@ bool Merc::CheckAENuke(Merc* caster, Mob* tar, uint16 spell_id, uint8 &numTarget for(std::list::iterator itr = npc_list.begin(); itr != npc_list.end(); ++itr) { NPC* npc = *itr; - if(ComparativeDistanceNoZ(npc->GetPosition(), tar->GetPosition()) <= spells[spell_id].aoerange * spells[spell_id].aoerange) { + if(DistanceSquaredNoZ(npc->GetPosition(), tar->GetPosition()) <= spells[spell_id].aoerange * spells[spell_id].aoerange) { if(!npc->IsMezzed()) { numTargets++; } @@ -4098,7 +4098,7 @@ bool Merc::CheckAETaunt() { for(std::list::iterator itr = npc_list.begin(); itr != npc_list.end(); ++itr) { NPC* npc = *itr; - float dist = ComparativeDistanceNoZ(m_Position, npc->GetPosition()); + float dist = DistanceSquaredNoZ(m_Position, npc->GetPosition()); int range = GetActSpellRange(mercSpell.spellid, spells[mercSpell.spellid].range); range *= range; @@ -4201,7 +4201,7 @@ bool Merc::CheckConfidence() { AggroRange = AggroRange * AggroRange; - if(ComparativeDistance(m_Position, mob->GetPosition()) > AggroRange) continue; + if(DistanceSquared(m_Position, mob->GetPosition()) > AggroRange) continue; CurrentCon = this->GetLevelCon(mob->GetLevel()); switch(CurrentCon) { @@ -5150,7 +5150,7 @@ bool Client::CheckCanHireMerc(Mob* merchant, uint32 template_id) { } //check for merchant too far away - if(ComparativeDistance(m_Position, merchant->GetPosition()) > USE_NPC_RANGE2) { + if(DistanceSquared(m_Position, merchant->GetPosition()) > USE_NPC_RANGE2) { SendMercResponsePackets(18); return false; } diff --git a/zone/mob.cpp b/zone/mob.cpp index b6644a4aa..3347dcab2 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -49,7 +49,7 @@ Mob::Mob(const char* in_name, uint32 in_npctype_id, float in_size, float in_runspeed, - const xyz_heading& position, + const glm::vec4& position, uint8 in_light, uint8 in_texture, uint8 in_helmtexture, @@ -99,8 +99,8 @@ Mob::Mob(const char* in_name, gravity_timer(1000), viral_timer(0), m_FearWalkTarget(-999999.0f,-999999.0f,-999999.0f), - m_TargetLocation(xyz_location::Origin()), - m_TargetV(xyz_location::Origin()), + m_TargetLocation(glm::vec3()), + m_TargetV(glm::vec3()), flee_timer(FLEE_CHECK_TIMER), m_Position(position) { @@ -112,7 +112,7 @@ Mob::Mob(const char* in_name, AI_Init(); SetMoving(false); moved=false; - m_RewindLocation = xyz_location::Origin(); + m_RewindLocation = glm::vec3(); move_tic_count = 0; _egnode = nullptr; @@ -243,7 +243,7 @@ Mob::Mob(const char* in_name, } } - m_Delta = xyz_heading::Origin(); + m_Delta = glm::vec4(); animation = 0; logging_enabled = false; @@ -316,7 +316,7 @@ Mob::Mob(const char* in_name, wandertype=0; pausetype=0; cur_wp = 0; - m_CurrentWayPoint = xyz_heading::Origin(); + m_CurrentWayPoint = glm::vec4(); cur_wp_pause = 0; patrol=0; follow=0; @@ -363,7 +363,7 @@ Mob::Mob(const char* in_name, nimbus_effect3 = 0; m_targetable = true; - m_TargetRing = xyz_location::Origin(); + m_TargetRing = glm::vec3(); flymode = FlyMode3; // Pathing @@ -882,10 +882,10 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) strn0cpy(ns->spawn.lastName, lastname, sizeof(ns->spawn.lastName)); } - ns->spawn.heading = FloatToEQ19(m_Position.m_Heading); - ns->spawn.x = FloatToEQ19(m_Position.m_X);//((int32)x_pos)<<3; - ns->spawn.y = FloatToEQ19(m_Position.m_Y);//((int32)y_pos)<<3; - ns->spawn.z = FloatToEQ19(m_Position.m_Z);//((int32)z_pos)<<3; + ns->spawn.heading = FloatToEQ19(m_Position.w); + ns->spawn.x = FloatToEQ19(m_Position.x);//((int32)x_pos)<<3; + ns->spawn.y = FloatToEQ19(m_Position.y);//((int32)y_pos)<<3; + ns->spawn.z = FloatToEQ19(m_Position.z);//((int32)z_pos)<<3; ns->spawn.spawnId = GetID(); ns->spawn.curHp = static_cast(GetHPRatio()); ns->spawn.max_hp = 100; //this field needs a better name @@ -1210,13 +1210,13 @@ void Mob::SendPosUpdate(uint8 iSendToSelf) { void Mob::MakeSpawnUpdateNoDelta(PlayerPositionUpdateServer_Struct *spu){ memset(spu,0xff,sizeof(PlayerPositionUpdateServer_Struct)); spu->spawn_id = GetID(); - spu->x_pos = FloatToEQ19(m_Position.m_X); - spu->y_pos = FloatToEQ19(m_Position.m_Y); - spu->z_pos = FloatToEQ19(m_Position.m_Z); + spu->x_pos = FloatToEQ19(m_Position.x); + spu->y_pos = FloatToEQ19(m_Position.y); + spu->z_pos = FloatToEQ19(m_Position.z); spu->delta_x = NewFloatToEQ13(0); spu->delta_y = NewFloatToEQ13(0); spu->delta_z = NewFloatToEQ13(0); - spu->heading = FloatToEQ19(m_Position.m_Heading); + spu->heading = FloatToEQ19(m_Position.w); spu->animation = 0; spu->delta_heading = NewFloatToEQ13(0); spu->padding0002 =0; @@ -1229,13 +1229,13 @@ void Mob::MakeSpawnUpdateNoDelta(PlayerPositionUpdateServer_Struct *spu){ // this is for SendPosUpdate() void Mob::MakeSpawnUpdate(PlayerPositionUpdateServer_Struct* spu) { spu->spawn_id = GetID(); - spu->x_pos = FloatToEQ19(m_Position.m_X); - spu->y_pos = FloatToEQ19(m_Position.m_Y); - spu->z_pos = FloatToEQ19(m_Position.m_Z); - spu->delta_x = NewFloatToEQ13(m_Delta.m_X); - spu->delta_y = NewFloatToEQ13(m_Delta.m_Y); - spu->delta_z = NewFloatToEQ13(m_Delta.m_Z); - spu->heading = FloatToEQ19(m_Position.m_Heading); + spu->x_pos = FloatToEQ19(m_Position.x); + spu->y_pos = FloatToEQ19(m_Position.y); + spu->z_pos = FloatToEQ19(m_Position.z); + spu->delta_x = NewFloatToEQ13(m_Delta.x); + spu->delta_y = NewFloatToEQ13(m_Delta.y); + spu->delta_z = NewFloatToEQ13(m_Delta.z); + spu->heading = FloatToEQ19(m_Position.w); spu->padding0002 =0; spu->padding0006 =7; spu->padding0014 =0x7f; @@ -1244,7 +1244,7 @@ void Mob::MakeSpawnUpdate(PlayerPositionUpdateServer_Struct* spu) { spu->animation = animation; else spu->animation = pRunAnimSpeed;//animation; - spu->delta_heading = NewFloatToEQ13(m_Delta.m_Heading); + spu->delta_heading = NewFloatToEQ13(m_Delta.w); } void Mob::ShowStats(Client* client) @@ -1360,11 +1360,11 @@ void Mob::GMMove(float x, float y, float z, float heading, bool SendUpdate) { entity_list.ProcessMove(CastToNPC(), x, y, z); } - m_Position.m_X = x; - m_Position.m_Y = y; - m_Position.m_Z = z; - if (m_Position.m_Heading != 0.01) - this->m_Position.m_Heading = heading; + m_Position.x = x; + m_Position.y = y; + m_Position.z = z; + if (m_Position.w != 0.01) + this->m_Position.w = heading; if(IsNPC()) CastToNPC()->SaveGuardSpot(true); if(SendUpdate) @@ -2408,7 +2408,7 @@ bool Mob::HateSummon() { entity_list.MessageClose(this, true, 500, MT_Say, "%s says,'You will not evade me, %s!' ", GetCleanName(), target->GetCleanName() ); if (target->IsClient()) { - target->CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Position.m_X, m_Position.m_Y, m_Position.m_Z, target->GetHeading(), 0, SummonPC); + target->CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), m_Position.x, m_Position.y, m_Position.z, target->GetHeading(), 0, SummonPC); } else { #ifdef BOTS @@ -2419,7 +2419,7 @@ bool Mob::HateSummon() { } #endif //BOTS - target->GMMove(m_Position.m_X, m_Position.m_Y, m_Position.m_Z, target->GetHeading()); + target->GMMove(m_Position.x, m_Position.y, m_Position.z, target->GetHeading()); } return true; @@ -2833,12 +2833,12 @@ void Mob::SetNextIncHPEvent( int inchpevent ) nextinchpevent = inchpevent; } //warp for quest function,from sandy -void Mob::Warp(const xyz_location& location) +void Mob::Warp(const glm::vec3& location) { if(IsNPC()) - entity_list.ProcessMove(CastToNPC(), location.m_X, location.m_Y, location.m_Z); + entity_list.ProcessMove(CastToNPC(), location.x, location.y, location.z); - m_Position = location; + m_Position = glm::vec4(location, m_Position.w); Mob* target = GetTarget(); if (target) @@ -3055,11 +3055,11 @@ float Mob::FindGroundZ(float new_x, float new_y, float z_offset) float ret = -999999; if (zone->zonemap != nullptr) { - Map::Vertex me; - me.x = m_Position.m_X; - me.y = m_Position.m_Y; - me.z = m_Position.m_Z + z_offset; - Map::Vertex hit; + glm::vec3 me; + me.x = m_Position.x; + me.y = m_Position.y; + me.z = m_Position.z + z_offset; + glm::vec3 hit; float best_z = zone->zonemap->FindBestZ(me, &hit); if (best_z != -999999) { @@ -3075,11 +3075,11 @@ float Mob::GetGroundZ(float new_x, float new_y, float z_offset) float ret = -999999; if (zone->zonemap != 0) { - Map::Vertex me; - me.x = m_Position.m_X; - me.y = m_Position.m_Y; - me.z = m_Position.m_Z+z_offset; - Map::Vertex hit; + glm::vec3 me; + me.x = m_Position.x; + me.y = m_Position.y; + me.z = m_Position.z+z_offset; + glm::vec3 hit; float best_z = zone->zonemap->FindBestZ(me, &hit); if (best_z != -999999) { @@ -3173,7 +3173,7 @@ void Mob::TriggerDefensiveProcs(const ItemInst* weapon, Mob *on, uint16 hand, in } } -void Mob::SetDelta(const xyz_heading& delta) { +void Mob::SetDelta(const glm::vec4& delta) { m_Delta = delta; } diff --git a/zone/mob.h b/zone/mob.h index 09c9bf56f..833de6984 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -78,7 +78,7 @@ public: uint32 in_npctype_id, float in_size, float in_runspeed, - const xyz_heading& position, + const glm::vec4& position, uint8 in_light, uint8 in_texture, uint8 in_helmtexture, @@ -294,10 +294,10 @@ public: inline virtual uint32 GetNimbusEffect2() const { return nimbus_effect2; } inline virtual uint32 GetNimbusEffect3() const { return nimbus_effect3; } void RemoveNimbusEffect(int effectid); - inline const xyz_location& GetTargetRingLocation() const { return m_TargetRing; } - inline float GetTargetRingX() const { return m_TargetRing.m_X; } - inline float GetTargetRingY() const { return m_TargetRing.m_Y; } - inline float GetTargetRingZ() const { return m_TargetRing.m_Z; } + inline const glm::vec3& GetTargetRingLocation() const { return m_TargetRing; } + inline float GetTargetRingX() const { return m_TargetRing.x; } + inline float GetTargetRingY() const { return m_TargetRing.y; } + inline float GetTargetRingZ() const { return m_TargetRing.z; } inline bool HasEndurUpkeep() const { return endur_upkeep; } inline void SetEndurUpkeep(bool val) { endur_upkeep = val; } @@ -399,19 +399,19 @@ public: ((static_cast(cur_mana) / max_mana) * 100); } virtual int32 CalcMaxMana(); uint32 GetNPCTypeID() const { return npctype_id; } - inline const xyz_heading GetPosition() const { return m_Position; } - inline const float GetX() const { return m_Position.m_X; } - inline const float GetY() const { return m_Position.m_Y; } - inline const float GetZ() const { return m_Position.m_Z; } - inline const float GetHeading() const { return m_Position.m_Heading; } + inline const glm::vec4 GetPosition() const { return m_Position; } + inline const float GetX() const { return m_Position.x; } + inline const float GetY() const { return m_Position.y; } + inline const float GetZ() const { return m_Position.z; } + inline const float GetHeading() const { return m_Position.w; } inline const float GetSize() const { return size; } inline const float GetBaseSize() const { return base_size; } - inline const float GetTarX() const { return m_TargetLocation.m_X; } - inline const float GetTarY() const { return m_TargetLocation.m_Y; } - inline const float GetTarZ() const { return m_TargetLocation.m_Z; } - inline const float GetTarVX() const { return m_TargetV.m_X; } - inline const float GetTarVY() const { return m_TargetV.m_Y; } - inline const float GetTarVZ() const { return m_TargetV.m_Z; } + inline const float GetTarX() const { return m_TargetLocation.x; } + inline const float GetTarY() const { return m_TargetLocation.y; } + inline const float GetTarZ() const { return m_TargetLocation.z; } + inline const float GetTarVX() const { return m_TargetV.x; } + inline const float GetTarVY() const { return m_TargetV.y; } + inline const float GetTarVZ() const { return m_TargetV.z; } inline const float GetTarVector() const { return tar_vector; } inline const uint8 GetTarNDX() const { return tar_ndx; } bool IsBoat() const; @@ -426,9 +426,9 @@ public: virtual inline int32 GetPrimaryFaction() const { return 0; } //Movement - void Warp(const xyz_location& location); + void Warp(const glm::vec3& location); inline bool IsMoving() const { return moving; } - virtual void SetMoving(bool move) { moving = move; m_Delta = xyz_heading::Origin(); } + virtual void SetMoving(bool move) { moving = move; m_Delta = glm::vec4(); } virtual void GoToBind(uint8 bindnum = 0) { } virtual void Gate(); float GetWalkspeed() const { return(_GetMovementSpeed(-47)); } @@ -438,15 +438,15 @@ public: bool IsRunning() const { return m_is_running; } void SetRunning(bool val) { m_is_running = val; } virtual void GMMove(float x, float y, float z, float heading = 0.01, bool SendUpdate = true); - void SetDelta(const xyz_heading& delta); + void SetDelta(const glm::vec4& delta); void SetTargetDestSteps(uint8 target_steps) { tar_ndx = target_steps; } void SendPosUpdate(uint8 iSendToSelf = 0); void MakeSpawnUpdateNoDelta(PlayerPositionUpdateServer_Struct* spu); void MakeSpawnUpdate(PlayerPositionUpdateServer_Struct* spu); void SendPosition(); void SetFlyMode(uint8 flymode); - inline void Teleport(Map::Vertex NewPosition) { m_Position.m_X = NewPosition.x; m_Position.m_Y = NewPosition.y; - m_Position.m_Z = NewPosition.z; }; + inline void Teleport(glm::vec3 NewPosition) { m_Position.x = NewPosition.x; m_Position.y = NewPosition.y; + m_Position.z = NewPosition.z; }; //AI static uint32 GetLevelCon(uint8 mylevel, uint8 iOtherLevel); @@ -467,8 +467,8 @@ public: bool IsEngaged() { return(!hate_list.IsHateListEmpty()); } bool HateSummon(); void FaceTarget(Mob* MobToFace = 0); - void SetHeading(float iHeading) { if(m_Position.m_Heading != iHeading) { pLastChange = Timer::GetCurrentTime(); - m_Position.m_Heading = iHeading; } } + void SetHeading(float iHeading) { if(m_Position.w != iHeading) { pLastChange = Timer::GetCurrentTime(); + m_Position.w = iHeading; } } void WipeHateList(); void AddFeignMemory(Client* attacker); void RemoveFromFeignMemory(Client* attacker); @@ -814,10 +814,10 @@ public: void SetDontCureMeBefore(uint32 time) { pDontCureMeBefore = time; } // calculate interruption of spell via movement of mob - void SaveSpellLoc() {m_SpellLocation = m_Position; } - inline float GetSpellX() const {return m_SpellLocation.m_X;} - inline float GetSpellY() const {return m_SpellLocation.m_Y;} - inline float GetSpellZ() const {return m_SpellLocation.m_Z;} + void SaveSpellLoc() { m_SpellLocation = glm::vec3(m_Position); } + inline float GetSpellX() const {return m_SpellLocation.x;} + inline float GetSpellY() const {return m_SpellLocation.y;} + inline float GetSpellZ() const {return m_SpellLocation.z;} inline bool IsGrouped() const { return isgrouped; } void SetGrouped(bool v); inline bool IsRaidGrouped() const { return israidgrouped; } @@ -869,7 +869,7 @@ public: Shielders_Struct shielder[MAX_SHIELDERS]; Trade* trade; - inline xyz_heading GetCurrentWayPoint() const { return m_CurrentWayPoint; } + inline glm::vec4 GetCurrentWayPoint() const { return m_CurrentWayPoint; } inline float GetCWPP() const { return(static_cast(cur_wp_pause)); } inline int GetCWP() const { return(cur_wp); } void SetCurrentWP(uint16 waypoint) { cur_wp = waypoint; } @@ -1013,7 +1013,7 @@ protected: uint8 level; uint8 orig_level; uint32 npctype_id; - xyz_heading m_Position; + glm::vec4 m_Position; uint16 animation; float base_size; float size; @@ -1046,7 +1046,7 @@ protected: virtual int16 GetFocusEffect(focusType type, uint16 spell_id) { return 0; } void CalculateNewFearpoint(); float FindGroundZ(float new_x, float new_y, float z_offset=0.0); - Map::Vertex UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool &WaypointChange, bool &NodeReached); + glm::vec3 UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool &WaypointChange, bool &NodeReached); void PrintRoute(); virtual float GetSympatheticProcChances(uint16 spell_id, int16 ProcRateMod, int32 ItemProcRate = 0); @@ -1062,7 +1062,7 @@ protected: char clean_name[64]; char lastname[64]; - xyz_heading m_Delta; + glm::vec4 m_Delta; uint8 light; @@ -1083,7 +1083,7 @@ protected: //spell casting vars Timer spellend_timer; uint16 casting_spell_id; - xyz_location m_SpellLocation; + glm::vec3 m_SpellLocation; int attacked_count; bool delaytimer; uint16 casting_spell_targetid; @@ -1102,7 +1102,7 @@ protected: bool ActiveProjectileATK; tProjatk ProjectileAtk[MAX_SPELL_PROJECTILE]; - xyz_location m_RewindLocation; + glm::vec3 m_RewindLocation; Timer rewind_timer; @@ -1199,18 +1199,18 @@ protected: int pausetype; int cur_wp; - xyz_heading m_CurrentWayPoint; + glm::vec4 m_CurrentWayPoint; int cur_wp_pause; int patrol; - xyz_location m_FearWalkTarget; + glm::vec3 m_FearWalkTarget; bool curfp; // Pathing // - Map::Vertex PathingDestination; - Map::Vertex PathingLastPosition; + glm::vec3 PathingDestination; + glm::vec3 PathingLastPosition; int PathingLoopCount; int PathingLastNodeVisited; std::deque Route; @@ -1239,13 +1239,13 @@ protected: bool pet_owner_client; //Flags regular and pets as belonging to a client EGNode *_egnode; //the EG node we are in - xyz_location m_TargetLocation; + glm::vec3 m_TargetLocation; uint8 tar_ndx; float tar_vector; - xyz_location m_TargetV; + glm::vec3 m_TargetV; float test_vector; - xyz_location m_TargetRing; + glm::vec3 m_TargetRing; uint32 m_spellHitsLeft[38]; // Used to track which spells will have their numhits incremented when spell finishes casting, 38 Buffslots int flymode; diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 3902ee072..cb268f3b3 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -67,7 +67,7 @@ bool NPC::AICastSpell(Mob* tar, uint8 iChance, uint16 iSpellTypes) { dist2 = 0; //DistNoRoot(*this); //WTF was up with this... } else - dist2 = ComparativeDistance(m_Position, tar->GetPosition()); + dist2 = DistanceSquared(m_Position, tar->GetPosition()); bool checked_los = false; //we do not check LOS until we are absolutely sure we need to, and we only do it once. @@ -401,7 +401,7 @@ bool EntityList::AICheckCloseBeneficialSpells(NPC* caster, uint8 iChance, float if (t1 > iRange || t2 > iRange || t3 > iRange - || ComparativeDistance(mob->GetPosition(), caster->GetPosition()) > iRange2 + || DistanceSquared(mob->GetPosition(), caster->GetPosition()) > iRange2 //this call should seem backwards: || !mob->CheckLosFN(caster) || mob->GetReverseFactionCon(caster) >= FACTION_KINDLY @@ -493,7 +493,7 @@ void Mob::AI_Start(uint32 iMoveDelay) { pAssistRange = 70; hate_list.WipeHateList(); - m_Delta = xyz_heading::Origin(); + m_Delta = glm::vec4(); pRunAnimSpeed = 0; pLastChange = Timer::GetCurrentTime(); } @@ -622,7 +622,7 @@ void Client::AI_SpellCast() if(!targ) return; - float dist = ComparativeDistanceNoZ(m_Position, targ->GetPosition()); + float dist = DistanceSquaredNoZ(m_Position, targ->GetPosition()); std::vector valid_spells; std::vector slots; @@ -784,17 +784,17 @@ void Client::AI_Process() if(AImovement_timer->Check()) { animation = GetRunspeed() * 21; // Check if we have reached the last fear point - if((ABS(GetX()-m_FearWalkTarget.m_X) < 0.1) && (ABS(GetY()-m_FearWalkTarget.m_Y) <0.1)) { + if((ABS(GetX()-m_FearWalkTarget.x) < 0.1) && (ABS(GetY()-m_FearWalkTarget.y) <0.1)) { // Calculate a new point to run to CalculateNewFearpoint(); } if(!RuleB(Pathing, Fear) || !zone->pathing) - CalculateNewPosition2(m_FearWalkTarget.m_X, m_FearWalkTarget.m_Y, m_FearWalkTarget.m_Z, GetFearSpeed(), true); + CalculateNewPosition2(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, GetFearSpeed(), true); else { bool WaypointChanged, NodeReached; - Map::Vertex Goal = UpdatePath(m_FearWalkTarget.m_X, m_FearWalkTarget.m_Y, m_FearWalkTarget.m_Z, + glm::vec3 Goal = UpdatePath(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, GetFearSpeed(), WaypointChanged, NodeReached); if(WaypointChanged) @@ -950,7 +950,7 @@ void Client::AI_Process() else { bool WaypointChanged, NodeReached; - Map::Vertex Goal = UpdatePath(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ(), + glm::vec3 Goal = UpdatePath(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ(), GetRunspeed(), WaypointChanged, NodeReached); if(WaypointChanged) @@ -997,7 +997,7 @@ void Client::AI_Process() if(owner == nullptr) return; - float dist = ComparativeDistance(m_Position, owner->GetPosition()); + float dist = DistanceSquared(m_Position, owner->GetPosition()); if (dist >= 100) { float speed = dist >= 225 ? GetRunspeed() : GetWalkspeed(); @@ -1052,17 +1052,17 @@ void Mob::AI_Process() { } else { if(AImovement_timer->Check()) { // Check if we have reached the last fear point - if((ABS(GetX()-m_FearWalkTarget.m_X) < 0.1) && (ABS(GetY()-m_FearWalkTarget.m_Y) <0.1)) { + if((ABS(GetX()-m_FearWalkTarget.x) < 0.1) && (ABS(GetY()-m_FearWalkTarget.y) <0.1)) { // Calculate a new point to run to CalculateNewFearpoint(); } if(!RuleB(Pathing, Fear) || !zone->pathing) - CalculateNewPosition2(m_FearWalkTarget.m_X, m_FearWalkTarget.m_Y, m_FearWalkTarget.m_Z, GetFearSpeed(), true); + CalculateNewPosition2(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, GetFearSpeed(), true); else { bool WaypointChanged, NodeReached; - Map::Vertex Goal = UpdatePath(m_FearWalkTarget.m_X, m_FearWalkTarget.m_Y, m_FearWalkTarget.m_Z, + glm::vec3 Goal = UpdatePath(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, GetFearSpeed(), WaypointChanged, NodeReached); if(WaypointChanged) @@ -1129,15 +1129,15 @@ void Mob::AI_Process() { float tether_range = static_cast(GetSpecialAbilityParam(TETHER, 0)); tether_range = tether_range > 0.0f ? tether_range * tether_range : pAggroRange * pAggroRange; - if(ComparativeDistanceNoZ(m_Position, npcSpawnPoint) > tether_range) { - GMMove(npcSpawnPoint.m_X, npcSpawnPoint.m_Y, npcSpawnPoint.m_Z, npcSpawnPoint.m_Heading); + if(DistanceSquaredNoZ(m_Position, npcSpawnPoint) > tether_range) { + GMMove(npcSpawnPoint.x, npcSpawnPoint.y, npcSpawnPoint.z, npcSpawnPoint.w); } } else if(GetSpecialAbility(LEASH)) { float leash_range = static_cast(GetSpecialAbilityParam(LEASH, 0)); leash_range = leash_range > 0.0f ? leash_range * leash_range : pAggroRange * pAggroRange; - if(ComparativeDistanceNoZ(m_Position, npcSpawnPoint) > leash_range) { - GMMove(npcSpawnPoint.m_X, npcSpawnPoint.m_Y, npcSpawnPoint.m_Z, npcSpawnPoint.m_Heading); + if(DistanceSquaredNoZ(m_Position, npcSpawnPoint) > leash_range) { + GMMove(npcSpawnPoint.x, npcSpawnPoint.y, npcSpawnPoint.z, npcSpawnPoint.w); SetHP(GetMaxHP()); BuffFadeAll(); WipeHateList(); @@ -1371,7 +1371,7 @@ void Mob::AI_Process() { //we cannot reach our target... //underwater stuff only works with water maps in the zone! if(IsNPC() && CastToNPC()->IsUnderwaterOnly() && zone->HasWaterMap()) { - auto targetPosition = xyz_location(target->GetX(), target->GetY(), target->GetZ()); + auto targetPosition = glm::vec3(target->GetX(), target->GetY(), target->GetZ()); if(!zone->watermap->InLiquid(targetPosition)) { Mob *tar = hate_list.GetEntWithMostHateOnList(this); if(tar == target) { @@ -1410,7 +1410,7 @@ void Mob::AI_Process() { { bool WaypointChanged, NodeReached; - Map::Vertex Goal = UpdatePath(target->GetX(), target->GetY(), target->GetZ(), + glm::vec3 Goal = UpdatePath(target->GetX(), target->GetY(), target->GetZ(), GetRunspeed(), WaypointChanged, NodeReached); if(WaypointChanged) @@ -1492,7 +1492,7 @@ void Mob::AI_Process() { //if(owner->IsClient()) // printf("Pet start pos: (%f, %f, %f)\n", GetX(), GetY(), GetZ()); - float dist = ComparativeDistance(m_Position, owner->GetPosition()); + float dist = DistanceSquared(m_Position, owner->GetPosition()); if (dist >= 400) { float speed = GetWalkspeed(); @@ -1547,7 +1547,7 @@ void Mob::AI_Process() { if (!follow) SetFollowID(0); else { - float dist2 = ComparativeDistance(m_Position, follow->GetPosition()); + float dist2 = DistanceSquared(m_Position, follow->GetPosition()); int followdist = GetFollowDistance(); if (dist2 >= followdist) // Default follow distance is 100 @@ -1724,15 +1724,15 @@ void NPC::AI_DoMovement() { } // endif (movetimercompleted==true) else if (!(AIwalking_timer->Enabled())) { // currently moving - if (m_CurrentWayPoint.m_X == GetX() && m_CurrentWayPoint.m_Y == GetY()) + if (m_CurrentWayPoint.x == GetX() && m_CurrentWayPoint.y == GetY()) { // are we there yet? then stop mlog(AI__WAYPOINTS, "We have reached waypoint %d (%.3f,%.3f,%.3f) on grid %d", cur_wp, GetX(), GetY(), GetZ(), GetGrid()); SetWaypointPause(); if(GetAppearance() != eaStanding) SetAppearance(eaStanding, false); SetMoving(false); - if (m_CurrentWayPoint.m_Heading >= 0.0) { - SetHeading(m_CurrentWayPoint.m_Heading); + if (m_CurrentWayPoint.w >= 0.0) { + SetHeading(m_CurrentWayPoint.w); } SendPosition(); @@ -1748,12 +1748,12 @@ void NPC::AI_DoMovement() { else { // not at waypoint yet, so keep moving if(!RuleB(Pathing, AggroReturnToGrid) || !zone->pathing || (DistractedFromGrid == 0)) - CalculateNewPosition2(m_CurrentWayPoint.m_X, m_CurrentWayPoint.m_Y, m_CurrentWayPoint.m_Z, walksp, true); + CalculateNewPosition2(m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z, walksp, true); else { bool WaypointChanged; bool NodeReached; - Map::Vertex Goal = UpdatePath(m_CurrentWayPoint.m_X, m_CurrentWayPoint.m_Y, m_CurrentWayPoint.m_Z, walksp, WaypointChanged, NodeReached); + glm::vec3 Goal = UpdatePath(m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z, walksp, WaypointChanged, NodeReached); if(WaypointChanged) tar_ndx = 20; @@ -1786,13 +1786,13 @@ void NPC::AI_DoMovement() { { bool CP2Moved; if(!RuleB(Pathing, Guard) || !zone->pathing) - CP2Moved = CalculateNewPosition2(m_GuardPoint.m_X, m_GuardPoint.m_Y, m_GuardPoint.m_Z, walksp); + CP2Moved = CalculateNewPosition2(m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z, walksp); else { - if(!((m_Position.m_X == m_GuardPoint.m_X) && (m_Position.m_Y == m_GuardPoint.m_Y) && (m_Position.m_Z == m_GuardPoint.m_Z))) + if(!((m_Position.x == m_GuardPoint.x) && (m_Position.y == m_GuardPoint.y) && (m_Position.z == m_GuardPoint.z))) { bool WaypointChanged, NodeReached; - Map::Vertex Goal = UpdatePath(m_GuardPoint.m_X, m_GuardPoint.m_Y, m_GuardPoint.m_Z, walksp, WaypointChanged, NodeReached); + glm::vec3 Goal = UpdatePath(m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z, walksp, WaypointChanged, NodeReached); if(WaypointChanged) tar_ndx = 20; @@ -1808,13 +1808,13 @@ void NPC::AI_DoMovement() { if (!CP2Moved) { if(moved) { - mlog(AI__WAYPOINTS, "Reached guard point (%.3f,%.3f,%.3f)", m_GuardPoint.m_X, m_GuardPoint.m_Y, m_GuardPoint.m_Z); + mlog(AI__WAYPOINTS, "Reached guard point (%.3f,%.3f,%.3f)", m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z); ClearFeignMemory(); moved=false; SetMoving(false); - if (GetTarget() == nullptr || ComparativeDistance(m_Position, GetTarget()->GetPosition()) >= 5*5 ) + if (GetTarget() == nullptr || DistanceSquared(m_Position, GetTarget()->GetPosition()) >= 5*5 ) { - SetHeading(m_GuardPoint.m_Heading); + SetHeading(m_GuardPoint.w); } else { FaceTarget(GetTarget()); } diff --git a/zone/npc.cpp b/zone/npc.cpp index c48254768..253e3e5aa 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -56,7 +56,7 @@ extern Zone* zone; extern volatile bool ZoneLoaded; extern EntityList entity_list; -NPC::NPC(const NPCType* d, Spawn2* in_respawn, const xyz_heading& position, int iflymode, bool IsCorpse) +NPC::NPC(const NPCType* d, Spawn2* in_respawn, const glm::vec4& position, int iflymode, bool IsCorpse) : Mob(d->name, d->lastname, d->max_hp, @@ -662,8 +662,8 @@ bool NPC::Process() DoGravityEffect(); } - if(reface_timer->Check() && !IsEngaged() && (m_GuardPoint.m_X == GetX() && m_GuardPoint.m_Y == GetY() && m_GuardPoint.m_Z == GetZ())) { - SetHeading(m_GuardPoint.m_Heading); + if(reface_timer->Check() && !IsEngaged() && (m_GuardPoint.x == GetX() && m_GuardPoint.y == GetY() && m_GuardPoint.z == GetZ())) { + SetHeading(m_GuardPoint.w); SendPosition(); reface_timer->Disable(); } @@ -768,7 +768,7 @@ bool NPC::DatabaseCastAccepted(int spell_id) { return false; } -NPC* NPC::SpawnNPC(const char* spawncommand, const xyz_heading& position, Client* client) { +NPC* NPC::SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* client) { if(spawncommand == 0 || spawncommand[0] == 0) { return 0; } diff --git a/zone/npc.h b/zone/npc.h index 7e16c02f3..0974a7645 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -95,10 +95,10 @@ struct Item_Struct; class NPC : public Mob { public: - static NPC* SpawnNPC(const char* spawncommand, const xyz_heading& position, Client* client = nullptr); + static NPC* SpawnNPC(const char* spawncommand, const glm::vec4& position, Client* client = nullptr); static int8 GetAILevel(bool iForceReRead = false); - NPC(const NPCType* data, Spawn2* respawn, const xyz_heading& position, int iflymode, bool IsCorpse = false); + NPC(const NPCType* data, Spawn2* respawn, const glm::vec4& position, int iflymode, bool IsCorpse = false); virtual ~NPC(); @@ -162,7 +162,7 @@ public: FACTION_VALUE CheckNPCFactionAlly(int32 other_faction); virtual FACTION_VALUE GetReverseFactionCon(Mob* iOther); - void GoToBind(uint8 bindnum = 0) { GMMove(m_SpawnPoint.m_X, m_SpawnPoint.m_Y, m_SpawnPoint.m_Z, m_SpawnPoint.m_Heading); } + void GoToBind(uint8 bindnum = 0) { GMMove(m_SpawnPoint.x, m_SpawnPoint.y, m_SpawnPoint.z, m_SpawnPoint.w); } void Gate(); void GetPetState(SpellBuff_Struct *buffs, uint32 *items, char *name); @@ -210,8 +210,8 @@ public: uint32 GetSp2() const { return spawn_group; } uint32 GetSpawnPointID() const; - xyz_heading const GetSpawnPoint() const { return m_SpawnPoint; } - xyz_heading const GetGuardPoint() const { return m_GuardPoint; } + glm::vec4 const GetSpawnPoint() const { return m_SpawnPoint; } + glm::vec4 const GetGuardPoint() const { return m_GuardPoint; } EmuAppearance GetGuardPointAnim() const { return guard_anim; } void SaveGuardPointAnim(EmuAppearance anim) { guard_anim = anim; } @@ -248,7 +248,7 @@ public: void SetNPCFactionID(int32 in) { npc_faction_id = in; database.GetFactionIdsForNPC(npc_faction_id, &faction_list, &primary_faction); } - xyz_heading m_SpawnPoint; + glm::vec4 m_SpawnPoint; uint32 GetMaxDMG() const {return max_dmg;} uint32 GetMinDMG() const {return min_dmg;} @@ -282,15 +282,15 @@ public: void StopWandering(); void ResumeWandering(); void PauseWandering(int pausetime); - void MoveTo(const xyz_heading& position, bool saveguardspot); - void GetClosestWaypoint(std::list &wp_list, int count, const xyz_location& location); + void MoveTo(const glm::vec4& position, bool saveguardspot); + void GetClosestWaypoint(std::list &wp_list, int count, const glm::vec3& location); uint32 GetEquipment(uint8 material_slot) const; // returns item id int32 GetEquipmentMaterial(uint8 material_slot) const; void NextGuardPosition(); void SaveGuardSpot(bool iClearGuardSpot = false); - inline bool IsGuarding() const { return(m_GuardPoint.m_Heading != 0); } + inline bool IsGuarding() const { return(m_GuardPoint.w != 0); } void SaveGuardSpotCharm(); void RestoreGuardSpotCharm(); void AI_SetRoambox(float iDist, float iRoamDist, uint32 iDelay = 2500, uint32 iMinDelay = 2500); @@ -473,8 +473,8 @@ protected: void _ClearWaypints(); int max_wp; int save_wp; - xyz_heading m_GuardPoint; - xyz_heading m_GuardPointSaved; + glm::vec4 m_GuardPoint; + glm::vec4 m_GuardPointSaved; EmuAppearance guard_anim; float roambox_max_x; float roambox_max_y; diff --git a/zone/pathing.cpp b/zone/pathing.cpp index aba968f0b..a38e185d8 100644 --- a/zone/pathing.cpp +++ b/zone/pathing.cpp @@ -21,7 +21,7 @@ extern Zone *zone; -float VertexDistance(Map::Vertex a, Map::Vertex b) +float VectorDistance(glm::vec3 a, glm::vec3 b) { float xdist = a.x - b.x; float ydist = a.y - b.y; @@ -29,7 +29,7 @@ float VertexDistance(Map::Vertex a, Map::Vertex b) return sqrtf(xdist * xdist + ydist * ydist + zdist * zdist); } -float VertexDistanceNoRoot(Map::Vertex a, Map::Vertex b) +float VectorDistanceNoRoot(glm::vec3 a, glm::vec3 b) { float xdist = a.x - b.x; float ydist = a.y - b.y; @@ -187,9 +187,9 @@ void PathManager::PrintPathing() } } -Map::Vertex PathManager::GetPathNodeCoordinates(int NodeNumber, bool BestZ) +glm::vec3 PathManager::GetPathNodeCoordinates(int NodeNumber, bool BestZ) { - Map::Vertex Result; + glm::vec3 Result; if(NodeNumber < Head.PathNodeCount) { @@ -283,7 +283,7 @@ std::deque PathManager::FindRoute(int startID, int endID) AStarEntry.Teleport = PathNodes[CurrentNode.PathNodeID].Neighbours[i].Teleport; // HCost is the estimated cost to get from this node to the end. - AStarEntry.HCost = VertexDistance(PathNodes[PathNodes[CurrentNode.PathNodeID].Neighbours[i].id].v, + AStarEntry.HCost = VectorDistance(PathNodes[PathNodes[CurrentNode.PathNodeID].Neighbours[i].id].v, PathNodes[endID].v); AStarEntry.GCost = CurrentNode.GCost + PathNodes[CurrentNode.PathNodeID].Neighbours[i].distance; @@ -335,9 +335,9 @@ std::deque PathManager::FindRoute(int startID, int endID) } -bool CheckLOSBetweenPoints(Map::Vertex start, Map::Vertex end) { +bool CheckLOSBetweenPoints(glm::vec3 start, glm::vec3 end) { - Map::Vertex hit; + glm::vec3 hit; if((zone->zonemap) && (zone->zonemap->LineIntersectsZone(start, end, 1, &hit))) return false; @@ -350,7 +350,7 @@ auto path_compare = [](const PathNodeSortStruct& a, const PathNodeSortStruct& b) return a.Distance < b.Distance; }; -std::deque PathManager::FindRoute(Map::Vertex Start, Map::Vertex End) +std::deque PathManager::FindRoute(glm::vec3 Start, glm::vec3 End) { _log(PATHING__DEBUG, "FindRoute(%8.3f, %8.3f, %8.3f, %8.3f, %8.3f, %8.3f)", Start.x, Start.y, Start.z, End.x, End.y, End.z); @@ -376,7 +376,7 @@ std::deque PathManager::FindRoute(Map::Vertex Start, Map::Vertex End) (ABS(Start.z - PathNodes[i].v.z) <= CandidateNodeRangeZ)) { TempNode.id = i; - TempNode.Distance = VertexDistanceNoRoot(Start, PathNodes[i].v); + TempNode.Distance = VectorDistanceNoRoot(Start, PathNodes[i].v); SortedByDistance.push_back(TempNode); } @@ -415,7 +415,7 @@ std::deque PathManager::FindRoute(Map::Vertex Start, Map::Vertex End) (ABS(End.z - PathNodes[i].v.z) <= CandidateNodeRangeZ)) { TempNode.id = i; - TempNode.Distance = VertexDistanceNoRoot(End, PathNodes[i].v); + TempNode.Distance = VectorDistanceNoRoot(End, PathNodes[i].v); SortedByDistance.push_back(TempNode); } } @@ -587,7 +587,7 @@ void PathManager::SpawnPathNodes() npc_type->CHA = 150; npc_type->findable = 1; - auto position = xyz_heading(PathNodes[i].v.x, PathNodes[i].v.y, PathNodes[i].v.z, 0.0f); + auto position = glm::vec4(PathNodes[i].v.x, PathNodes[i].v.y, PathNodes[i].v.z, 0.0f); NPC* npc = new NPC(npc_type, nullptr, position, FlyMode1); npc->GiveNPCTypeData(npc_type); @@ -652,19 +652,19 @@ void PathManager::SimpleMeshTest() fflush(stdout); } -Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool &WaypointChanged, bool &NodeReached) +glm::vec3 Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool &WaypointChanged, bool &NodeReached) { WaypointChanged = false; NodeReached = false; - Map::Vertex NodeLoc; + glm::vec3 NodeLoc; - Map::Vertex From(GetX(), GetY(), GetZ()); + glm::vec3 From(GetX(), GetY(), GetZ()); - Map::Vertex HeadPosition(From.x, From.y, From.z + (GetSize() < 6.0 ? 6 : GetSize()) * HEAD_POSITION); + glm::vec3 HeadPosition(From.x, From.y, From.z + (GetSize() < 6.0 ? 6 : GetSize()) * HEAD_POSITION); - Map::Vertex To(ToX, ToY, ToZ); + glm::vec3 To(ToX, ToY, ToZ); bool SameDestination = (To == PathingDestination); @@ -754,7 +754,7 @@ Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool & && PathingLOSCheckTimer->Check())) { mlog(PATHING__DEBUG, " Checking distance to target."); - float Distance = VertexDistanceNoRoot(From, To); + float Distance = VectorDistanceNoRoot(From, To); mlog(PATHING__DEBUG, " Distance between From and To (NoRoot) is %8.3f", Distance); @@ -847,7 +847,7 @@ Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool & { mlog(PATHING__DEBUG, " Checking distance to target."); - float Distance = VertexDistanceNoRoot(From, To); + float Distance = VectorDistanceNoRoot(From, To); mlog(PATHING__DEBUG, " Distance between From and To (NoRoot) is %8.3f", Distance); @@ -887,7 +887,7 @@ Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool & // Check if we now have LOS etc to the new destination. if(PathingLOSCheckTimer->Check()) { - float Distance = VertexDistanceNoRoot(From, To); + float Distance = VectorDistanceNoRoot(From, To); if((Distance <= RuleR(Pathing, MinDistanceForLOSCheckShort)) && (ABS(From.z - To.z) <= RuleR(Pathing, ZDiffThreshold))) @@ -1039,7 +1039,7 @@ Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool & WaypointChanged = true; - float Distance = VertexDistanceNoRoot(From, To); + float Distance = VectorDistanceNoRoot(From, To); if((Distance <= RuleR(Pathing, MinDistanceForLOSCheckLong)) && (ABS(From.z - To.z) <= RuleR(Pathing, ZDiffThreshold))) @@ -1090,7 +1090,7 @@ Map::Vertex Mob::UpdatePath(float ToX, float ToY, float ToZ, float Speed, bool & } -int PathManager::FindNearestPathNode(Map::Vertex Position) +int PathManager::FindNearestPathNode(glm::vec3 Position) { // Find the nearest PathNode we have LOS to. @@ -1114,7 +1114,7 @@ int PathManager::FindNearestPathNode(Map::Vertex Position) (ABS(Position.z - PathNodes[i].v.z) <= CandidateNodeRangeZ)) { TempNode.id = i; - TempNode.Distance = VertexDistanceNoRoot(Position, PathNodes[i].v); + TempNode.Distance = VectorDistanceNoRoot(Position, PathNodes[i].v); SortedByDistance.push_back(TempNode); } @@ -1140,11 +1140,11 @@ int PathManager::FindNearestPathNode(Map::Vertex Position) return ClosestPathNodeToStart; } -bool PathManager::NoHazards(Map::Vertex From, Map::Vertex To) +bool PathManager::NoHazards(glm::vec3 From, glm::vec3 To) { // Test the Z coordinate at the mid point. // - Map::Vertex MidPoint((From.x + To.x) / 2, (From.y + To.y) / 2, From.z); + glm::vec3 MidPoint((From.x + To.x) / 2, (From.y + To.y) / 2, From.z); float NewZ = zone->zonemap->FindBestZ(MidPoint, nullptr); @@ -1164,10 +1164,10 @@ bool PathManager::NoHazards(Map::Vertex From, Map::Vertex To) return true; } -bool PathManager::NoHazardsAccurate(Map::Vertex From, Map::Vertex To) +bool PathManager::NoHazardsAccurate(glm::vec3 From, glm::vec3 To) { float stepx, stepy, stepz, curx, cury, curz; - Map::Vertex cur = From; + glm::vec3 cur = From; float last_z = From.z; float step_size = 1.0; @@ -1185,7 +1185,7 @@ bool PathManager::NoHazardsAccurate(Map::Vertex From, Map::Vertex To) stepy = (stepy / factor)*step_size; stepz = (stepz / factor)*step_size; - Map::Vertex TestPoint(curx, cury, curz); + glm::vec3 TestPoint(curx, cury, curz); float NewZ = zone->zonemap->FindBestZ(TestPoint, nullptr); if (ABS(NewZ - last_z) > 5.0f) { @@ -1197,18 +1197,18 @@ bool PathManager::NoHazardsAccurate(Map::Vertex From, Map::Vertex To) if (zone->watermap) { - auto from = xyz_location(From.x, From.y, From.z); - auto to = xyz_location(To.x, To.y, To.z); + auto from = glm::vec3(From.x, From.y, From.z); + auto to = glm::vec3(To.x, To.y, To.z); if (zone->watermap->InLiquid(from) || zone->watermap->InLiquid(to)) { break; } - auto testPointNewZ = xyz_location(TestPoint.x, TestPoint.y, NewZ); + auto testPointNewZ = glm::vec3(TestPoint.x, TestPoint.y, NewZ); if (zone->watermap->InLiquid(testPointNewZ)) { - Map::Vertex TestPointWater(TestPoint.x, TestPoint.y, NewZ - 0.5f); - Map::Vertex TestPointWaterDest = TestPointWater; - Map::Vertex hit; + glm::vec3 TestPointWater(TestPoint.x, TestPoint.y, NewZ - 0.5f); + glm::vec3 TestPointWaterDest = TestPointWater; + glm::vec3 hit; TestPointWaterDest.z -= 500; float best_z2 = -999990; if (zone->zonemap->LineIntersectsZone(TestPointWater, TestPointWaterDest, 1.0f, &hit)) @@ -1576,7 +1576,7 @@ int32 PathManager::AddNode(float x, float y, float z, float best_z, int32 reques npc_type->CHA = 150; npc_type->findable = 1; - auto position = xyz_heading(new_node.v.x, new_node.v.y, new_node.v.z, 0.0f); + auto position = glm::vec4(new_node.v.x, new_node.v.y, new_node.v.z, 0.0f); NPC* npc = new NPC(npc_type, nullptr, position, FlyMode1); npc->GiveNPCTypeData(npc_type); entity_list.AddNPC(npc, true, true); @@ -1637,7 +1637,7 @@ int32 PathManager::AddNode(float x, float y, float z, float best_z, int32 reques npc_type->CHA = 150; npc_type->findable = 1; - auto position = xyz_heading(new_node.v.x, new_node.v.y, new_node.v.z, 0.0f); + auto position = glm::vec4(new_node.v.x, new_node.v.y, new_node.v.z, 0.0f); NPC* npc = new NPC(npc_type, nullptr, position, FlyMode1); npc->GiveNPCTypeData(npc_type); entity_list.AddNPC(npc, true, true); @@ -1797,7 +1797,7 @@ void PathManager::ConnectNodeToNode(int32 Node1, int32 Node2, int32 teleport, in a->Neighbours[a_i].id = b->id; a->Neighbours[a_i].DoorID = doorid; a->Neighbours[a_i].Teleport = teleport; - a->Neighbours[a_i].distance = VertexDistance(a->v, b->v); + a->Neighbours[a_i].distance = VectorDistance(a->v, b->v); break; } } @@ -1812,7 +1812,7 @@ void PathManager::ConnectNodeToNode(int32 Node1, int32 Node2, int32 teleport, in b->Neighbours[b_i].id = a->id; b->Neighbours[b_i].DoorID = doorid; b->Neighbours[b_i].Teleport = teleport; - b->Neighbours[b_i].distance = VertexDistance(a->v, b->v); + b->Neighbours[b_i].distance = VectorDistance(a->v, b->v); break; } } @@ -1882,7 +1882,7 @@ void PathManager::ConnectNode(int32 Node1, int32 Node2, int32 teleport, int32 do a->Neighbours[a_i].id = b->id; a->Neighbours[a_i].DoorID = doorid; a->Neighbours[a_i].Teleport = teleport; - a->Neighbours[a_i].distance = VertexDistance(a->v, b->v); + a->Neighbours[a_i].distance = VectorDistance(a->v, b->v); break; } } @@ -1998,7 +1998,7 @@ void PathManager::MoveNode(Client *c) if(zone->zonemap) { - Map::Vertex loc(c->GetX(), c->GetY(), c->GetZ()); + glm::vec3 loc(c->GetX(), c->GetY(), c->GetZ()); Node->bestz = zone->zonemap->FindBestZ(loc, nullptr); } else @@ -2069,14 +2069,14 @@ bool PathManager::NodesConnected(PathNode *a, PathNode *b) return false; } -bool PathManager::CheckLosFN(Map::Vertex a, Map::Vertex b) +bool PathManager::CheckLosFN(glm::vec3 a, glm::vec3 b) { if(zone->zonemap) { - Map::Vertex hit; + glm::vec3 hit; - Map::Vertex myloc; - Map::Vertex oloc; + glm::vec3 myloc; + glm::vec3 oloc; myloc.x = a.x; myloc.y = a.y; @@ -2119,7 +2119,7 @@ void PathManager::ProcessNodesAndSave(std::string filename) if(!NodesConnected(&PathNodes[x], &PathNodes[y])) { - if(VertexDistance(PathNodes[x].v, PathNodes[y].v) <= 200) + if(VectorDistance(PathNodes[x].v, PathNodes[y].v) <= 200) { if(CheckLosFN(PathNodes[x].v, PathNodes[y].v)) { diff --git a/zone/pathing.h b/zone/pathing.h index 8848547b2..c6cfd9c26 100644 --- a/zone/pathing.h +++ b/zone/pathing.h @@ -30,7 +30,7 @@ struct NeighbourNode { struct PathNode { uint16 id; - Map::Vertex v; + glm::vec3 v; float bestz; NeighbourNode Neighbours[PATHNODENEIGHBOURS]; }; @@ -60,17 +60,17 @@ public: static PathManager *LoadPathFile(const char *ZoneName); bool loadPaths(FILE *fp); void PrintPathing(); - std::deque FindRoute(Map::Vertex Start, Map::Vertex End); + std::deque FindRoute(glm::vec3 Start, glm::vec3 End); std::deque FindRoute(int startID, int endID); - Map::Vertex GetPathNodeCoordinates(int NodeNumber, bool BestZ = true); - bool CheckLosFN(Map::Vertex a, Map::Vertex b); + glm::vec3 GetPathNodeCoordinates(int NodeNumber, bool BestZ = true); + bool CheckLosFN(glm::vec3 a, glm::vec3 b); void SpawnPathNodes(); void MeshTest(); void SimpleMeshTest(); - int FindNearestPathNode(Map::Vertex Position); - bool NoHazards(Map::Vertex From, Map::Vertex To); - bool NoHazardsAccurate(Map::Vertex From, Map::Vertex To); + int FindNearestPathNode(glm::vec3 Position); + bool NoHazards(glm::vec3 From, glm::vec3 To); + bool NoHazardsAccurate(glm::vec3 From, glm::vec3 To); void OpenDoors(int Node1, int Node2, Mob* ForWho); PathNode* FindPathNodeByCoordinates(float x, float y, float z); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 537c62399..976bdf839 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1072,7 +1072,7 @@ XS(XS_Client_SetBindPoint) new_z = (float)SvNV(ST(5)); } - THIS->SetBindPoint(to_zone, to_instance, xyz_location(new_x, new_y, new_z)); + THIS->SetBindPoint(to_zone, to_instance, glm::vec3(new_x, new_y, new_z)); } XSRETURN_EMPTY; } @@ -5963,7 +5963,7 @@ XS(XS_Client_SilentMessage) Perl_croak(aTHX_ "THIS is NULL, avoiding crash."); if(THIS->GetTarget() != NULL){ if(THIS->GetTarget()->IsNPC()){ - if (ComparativeDistanceNoZ(THIS->GetPosition(), THIS->GetTarget()->GetPosition()) <= 200) { + if (DistanceSquaredNoZ(THIS->GetPosition(), THIS->GetTarget()->GetPosition()) <= 200) { if(THIS->GetTarget()->CastToNPC()->IsMoving() && !THIS->GetTarget()->CastToNPC()->IsOnHatelist(THIS->GetTarget())) THIS->GetTarget()->CastToNPC()->PauseWandering(RuleI(NPC, SayPauseTimeInSec)); THIS->ChannelMessageReceived(8, 0, 100, SvPV_nolen(ST(1))); diff --git a/zone/perl_doors.cpp b/zone/perl_doors.cpp index 615cce6e9..f9d4ffdb5 100644 --- a/zone/perl_doors.cpp +++ b/zone/perl_doors.cpp @@ -138,7 +138,7 @@ XS(XS_Doors_GetX) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetPosition().m_X; + RETVAL = THIS->GetPosition().x; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -164,7 +164,7 @@ XS(XS_Doors_GetY) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetPosition().m_Y; + RETVAL = THIS->GetPosition().y; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -190,7 +190,7 @@ XS(XS_Doors_GetZ) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetPosition().m_Z; + RETVAL = THIS->GetPosition().z; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -216,7 +216,7 @@ XS(XS_Doors_GetHeading) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetPosition().m_Heading; + RETVAL = THIS->GetPosition().w; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -567,7 +567,7 @@ XS(XS_Doors_SetX) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); auto position = THIS->GetPosition(); - position.m_X = x; + position.x = x; THIS->SetPosition(position); } XSRETURN_EMPTY; @@ -593,7 +593,7 @@ XS(XS_Doors_SetY) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); auto position = THIS->GetPosition(); - position.m_Y = y; + position.y = y; THIS->SetPosition(position); } XSRETURN_EMPTY; @@ -619,7 +619,7 @@ XS(XS_Doors_SetZ) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); auto position = THIS->GetPosition(); - position.m_Z = z; + position.z = z; THIS->SetPosition(position); } XSRETURN_EMPTY; @@ -645,7 +645,7 @@ XS(XS_Doors_SetHeading) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); auto position = THIS->GetPosition(); - position.m_Heading = heading; + position.w = heading; THIS->SetPosition(position); } XSRETURN_EMPTY; diff --git a/zone/perl_entity.cpp b/zone/perl_entity.cpp index a5ad00827..f4299cca7 100644 --- a/zone/perl_entity.cpp +++ b/zone/perl_entity.cpp @@ -1875,7 +1875,7 @@ XS(XS_EntityList_GetRandomClient) c = INT2PTR(Client *,tmp); } } - RETVAL = entity_list.GetRandomClient(xyz_location(x, y, z), d * d, c); + RETVAL = entity_list.GetRandomClient(glm::vec3(x, y, z), d * d, c); ST(0) = sv_newmortal(); sv_setref_pv(ST(0), "Client", (void*)RETVAL); } diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index 790651459..3604383dc 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -3551,7 +3551,7 @@ XS(XS_Mob_GetWaypointX) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetCurrentWayPoint().m_X; + RETVAL = THIS->GetCurrentWayPoint().x; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -3577,7 +3577,7 @@ XS(XS_Mob_GetWaypointY) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetCurrentWayPoint().m_Y; + RETVAL = THIS->GetCurrentWayPoint().y; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -3603,7 +3603,7 @@ XS(XS_Mob_GetWaypointZ) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetCurrentWayPoint().m_Z; + RETVAL = THIS->GetCurrentWayPoint().z; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -3629,7 +3629,7 @@ XS(XS_Mob_GetWaypointH) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetCurrentWayPoint().m_Heading; + RETVAL = THIS->GetCurrentWayPoint().w; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -7662,7 +7662,7 @@ XS(XS_Mob_SetDeltas) Perl_croak(aTHX_ "Usage: Mob::SetDeltas(THIS, delta_x, delta_y, delta_z, delta_h)"); { Mob * THIS; - auto delta = xyz_heading((float)SvNV(ST(1)), (float)SvNV(ST(2)), (float)SvNV(ST(3)), (float)SvNV(ST(4))); + auto delta = glm::vec4((float)SvNV(ST(1)), (float)SvNV(ST(2)), (float)SvNV(ST(3)), (float)SvNV(ST(4))); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV*)SvRV(ST(0))); diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index 6fa2e256d..b4e9804e2 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -1345,7 +1345,7 @@ XS(XS_NPC_MoveTo) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - auto position = xyz_heading(mtx, mty, mtz, mth); + auto position = glm::vec4(mtx, mty, mtz, mth); THIS->MoveTo(position, saveguard); } XSRETURN_EMPTY; @@ -1546,7 +1546,7 @@ XS(XS_NPC_GetSpawnPointX) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPoint().m_X; + RETVAL = THIS->GetSpawnPoint().x; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1573,7 +1573,7 @@ XS(XS_NPC_GetSpawnPointY) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPoint().m_Y; + RETVAL = THIS->GetSpawnPoint().y; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1600,7 +1600,7 @@ XS(XS_NPC_GetSpawnPointZ) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPoint().m_Z; + RETVAL = THIS->GetSpawnPoint().z; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1627,7 +1627,7 @@ XS(XS_NPC_GetSpawnPointH) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetSpawnPoint().m_Heading; + RETVAL = THIS->GetSpawnPoint().w; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1654,7 +1654,7 @@ XS(XS_NPC_GetGuardPointX) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetGuardPoint().m_X; + RETVAL = THIS->GetGuardPoint().x; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1681,7 +1681,7 @@ XS(XS_NPC_GetGuardPointY) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetGuardPoint().m_Y; + RETVAL = THIS->GetGuardPoint().y; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); @@ -1708,7 +1708,7 @@ XS(XS_NPC_GetGuardPointZ) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetGuardPoint().m_Z; + RETVAL = THIS->GetGuardPoint().z; XSprePUSH; PUSHn((double)RETVAL); } XSRETURN(1); diff --git a/zone/pets.cpp b/zone/pets.cpp index 051eb3253..4cce3ea9a 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -361,28 +361,28 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, // get a random npc id from the spawngroups assigned to this zone auto query = StringFormat("SELECT npcID " - "FROM (spawnentry INNER JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID) " - "INNER JOIN npc_types ON npc_types.id = spawnentry.npcID " - "WHERE spawn2.zone = '%s' AND npc_types.bodytype NOT IN (11, 33, 66, 67) " - "AND npc_types.race NOT IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 44, " - "55, 67, 71, 72, 73, 77, 78, 81, 90, 92, 93, 94, 106, 112, 114, 127, 128, " - "130, 139, 141, 183, 236, 237, 238, 239, 254, 266, 329, 330, 378, 379, " - "380, 381, 382, 383, 404, 522) " - "ORDER BY RAND() LIMIT 1", zone->GetShortName()); - auto results = database.QueryDatabase(query); + "FROM (spawnentry INNER JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID) " + "INNER JOIN npc_types ON npc_types.id = spawnentry.npcID " + "WHERE spawn2.zone = '%s' AND npc_types.bodytype NOT IN (11, 33, 66, 67) " + "AND npc_types.race NOT IN (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 44, " + "55, 67, 71, 72, 73, 77, 78, 81, 90, 92, 93, 94, 106, 112, 114, 127, 128, " + "130, 139, 141, 183, 236, 237, 238, 239, 254, 266, 329, 330, 378, 379, " + "380, 381, 382, 383, 404, 522) " + "ORDER BY RAND() LIMIT 1", zone->GetShortName()); + auto results = database.QueryDatabase(query); if (!results.Success()) { - // if the database query failed + // if the database query failed LogFile->write(EQEmuLog::Error, "Error querying database for monster summoning pet in zone %s (%s)", zone->GetShortName(), results.ErrorMessage().c_str()); } - if (results.RowCount() != 0) { - auto row = results.begin(); - monsterid = atoi(row[0]); - } + if (results.RowCount() != 0) { + auto row = results.begin(); + monsterid = atoi(row[0]); + } - // since we don't have any monsters, just make it look like an earth pet for now - if (monsterid == 0) - monsterid = 567; + // since we don't have any monsters, just make it look like an earth pet for now + if (monsterid == 0) + monsterid = 567; // give the summoned pet the attributes of the monster we found const NPCType* monster = database.GetNPCType(monsterid); @@ -430,7 +430,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, into walls or objects (+10), this sometimes creates the "ghost" effect. I changed to +2 (as close as I could get while it still looked good). I also noticed this can happen if an NPC is spawned on the same spot of another or in a related bad spot.*/ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 power) -: NPC(type_data, 0, owner->GetPosition() + xy_location(2, 2), FlyMode3) +: NPC(type_data, 0, owner->GetPosition() + glm::vec4(2.0f, 2.0f, 0.0f, 0.0f), FlyMode3) { GiveNPCTypeData(type_data); typeofpet = type; @@ -449,31 +449,31 @@ bool ZoneDatabase::GetPoweredPetEntry(const char *pet_type, int16 petpower, PetR if (petpower <= 0) query = StringFormat("SELECT npcID, temp, petpower, petcontrol, petnaming, monsterflag, equipmentset " - "FROM pets WHERE type='%s' AND petpower<=0", pet_type); + "FROM pets WHERE type='%s' AND petpower<=0", pet_type); else query = StringFormat("SELECT npcID, temp, petpower, petcontrol, petnaming, monsterflag, equipmentset " - "FROM pets WHERE type='%s' AND petpower<=%d ORDER BY petpower DESC LIMIT 1", - pet_type, petpower); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetPoweredPetEntry query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return false; - } + "FROM pets WHERE type='%s' AND petpower<=%d ORDER BY petpower DESC LIMIT 1", + pet_type, petpower); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetPoweredPetEntry query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return false; + } - if (results.RowCount() != 1) - return false; + if (results.RowCount() != 1) + return false; - auto row = results.begin(); + auto row = results.begin(); - into->npc_type = atoi(row[0]); - into->temporary = atoi(row[1]); - into->petpower = atoi(row[2]); - into->petcontrol = atoi(row[3]); - into->petnaming = atoi(row[4]); - into->monsterflag = atoi(row[5]); - into->equipmentset = atoi(row[6]); + into->npc_type = atoi(row[0]); + into->temporary = atoi(row[1]); + into->petpower = atoi(row[2]); + into->petcontrol = atoi(row[3]); + into->petnaming = atoi(row[4]); + into->monsterflag = atoi(row[5]); + into->equipmentset = atoi(row[6]); - return true; + return true; } Mob* Mob::GetPet() { @@ -653,41 +653,41 @@ bool ZoneDatabase::GetBasePetItems(int32 equipmentset, uint32 *items) { // all of the result rows. Check if we have something in the slot // already. If no, add the item id to the equipment array. while (curset >= 0 && depth < 5) { - std::string query = StringFormat("SELECT nested_set FROM pets_equipmentset WHERE set_id = '%s'", curset); + std::string query = StringFormat("SELECT nested_set FROM pets_equipmentset WHERE set_id = '%s'", curset); auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); return false; - } + } - if (results.RowCount() != 1) { - // invalid set reference, it doesn't exist - LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems equipment set '%d' does not exist", curset); - return false; - } + if (results.RowCount() != 1) { + // invalid set reference, it doesn't exist + LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems equipment set '%d' does not exist", curset); + return false; + } - auto row = results.begin(); - nextset = atoi(row[0]); + auto row = results.begin(); + nextset = atoi(row[0]); - query = StringFormat("SELECT slot, item_id FROM pets_equipmentset_entries WHERE set_id='%s'", curset); - results = QueryDatabase(query); - if (!results.Success()) - LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - else { - for (row = results.begin(); row != results.end(); ++row) - { - slot = atoi(row[0]); + query = StringFormat("SELECT slot, item_id FROM pets_equipmentset_entries WHERE set_id='%s'", curset); + results = QueryDatabase(query); + if (!results.Success()) + LogFile->write(EQEmuLog::Error, "Error in GetBasePetItems query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + else { + for (row = results.begin(); row != results.end(); ++row) + { + slot = atoi(row[0]); - if (slot >= EmuConstants::EQUIPMENT_SIZE) - continue; + if (slot >= EmuConstants::EQUIPMENT_SIZE) + continue; - if (items[slot] == 0) - items[slot] = atoi(row[1]); - } - } + if (items[slot] == 0) + items[slot] = atoi(row[1]); + } + } - curset = nextset; - depth++; + curset = nextset; + depth++; } return true; diff --git a/zone/position.cpp b/zone/position.cpp index e6996797f..9d14bce69 100644 --- a/zone/position.cpp +++ b/zone/position.cpp @@ -1,210 +1,118 @@ +#include "position.h" + +#include #include #include -#include "position.h" #include "../common/string_util.h" -#include -xy_location::xy_location(float x, float y) : - m_X(x), - m_Y(y) { + +std::string to_string(const glm::vec4 &position) { + return StringFormat("(%.3f, %.3f, %.3f, %.3f)", position.x,position.y,position.z,position.w); } -xy_location xy_location::operator -(const xy_location& rhs) const { - xy_location minus(m_X - rhs.m_X, m_Y - rhs.m_Y); - return minus; +std::string to_string(const glm::vec3 &position){ + return StringFormat("(%.3f, %.3f, %.3f)", position.x,position.y,position.z); } -xy_location xy_location::operator +(const xy_location& rhs) const { - xy_location addition(m_X + rhs.m_X, m_Y + rhs.m_Y); - return addition; +std::string to_string(const glm::vec2 &position){ + return StringFormat("(%.3f, %.3f)", position.x,position.y); } -xyz_heading::xyz_heading(float x, float y, float z, float heading) : - m_X(x), - m_Y(y), - m_Z(z), - m_Heading(heading) { +bool IsOrigin(const glm::vec2 &position) { + return position.x == 0.0f && position.y == 0.0f; } -xyz_heading::xyz_heading(const xyz_heading& locationDir) : - m_X(locationDir.m_X), - m_Y(locationDir.m_Y), - m_Z(locationDir.m_Z), - m_Heading(locationDir.m_Heading) { +bool IsOrigin(const glm::vec3 &position) { + return position.x == 0.0f && position.y == 0.0f && position.z == 0.0f; } -xyz_heading::xyz_heading(const xyz_location& locationDir, float heading) : - m_X(locationDir.m_X), - m_Y(locationDir.m_Y), - m_Z(locationDir.m_Z), - m_Heading(heading) { -} - -xyz_heading::xyz_heading(const xy_location& locationDir, float z, float heading) : - m_X(locationDir.m_X), - m_Y(locationDir.m_Y), - m_Z(z), - m_Heading(heading) { -} - -xyz_heading::xyz_heading(const xy_location locationDir, float z, float heading) : - m_X(locationDir.m_X), - m_Y(locationDir.m_Y), - m_Z(z), - m_Heading(heading) { -} - -xyz_heading::operator xyz_location() const { - return xyz_location(m_X,m_Y,m_Z); -} - -xyz_heading::operator xy_location() const { - return xy_location(m_X,m_Y); -} - -const xyz_heading xyz_heading::operator +(const xyz_location& rhs) const{ - return xyz_heading(m_X + rhs.m_X, m_Y + rhs.m_Y, m_Z + rhs.m_Z, m_Heading); -} - -const xyz_heading xyz_heading::operator +(const xy_location& rhs) const{ - return xyz_heading(m_X + rhs.m_X, m_Y + rhs.m_Y, m_Z, m_Heading); -} - -const xyz_heading xyz_heading::operator -(const xyz_location& rhs) const{ - return xyz_heading(m_X - rhs.m_X, m_Y - rhs.m_Y, m_Z - rhs.m_Z, m_Heading); -} - -void xyz_heading::ABS_XYZ(void) { - m_X = abs(m_X); - m_Y = abs(m_Y); - m_Z = abs(m_Z); -} - -xyz_location::xyz_location(float x, float y, float z) : - m_X(x), - m_Y(y), - m_Z(z) { -} - -xyz_location::xyz_location(double x, double y, double z) : - m_X(static_cast(x)), - m_Y(static_cast(y)), - m_Z(static_cast(z)) { -} - -xyz_location::operator xy_location() const { - return xy_location(m_X, m_Y); -} - -xyz_location xyz_location::operator -(const xyz_location& rhs) const { - return xyz_location(m_X - rhs.m_X, m_Y - rhs.m_Y, m_Z - rhs.m_Z); -} - -xyz_location xyz_location::operator +(const xyz_location& rhs) const { - return xyz_location(m_X + rhs.m_X, m_Y + rhs.m_Y, m_Z + rhs.m_Z); -} - -void xyz_location::ABS_XYZ(void) { - m_X = abs(m_X); - m_Y = abs(m_Y); - m_Z = abs(m_Z); -} - -std::string to_string(const xyz_heading &position) { - return StringFormat("(%.3f, %.3f, %.3f, %.3f)", position.m_X,position.m_Y,position.m_Z,position.m_Heading); -} - -std::string to_string(const xyz_location &position){ - return StringFormat("(%.3f, %.3f, %.3f)", position.m_X,position.m_Y,position.m_Z); -} - -std::string to_string(const xy_location &position){ - return StringFormat("(%.3f, %.3f)", position.m_X,position.m_Y); +bool IsOrigin(const glm::vec4 &position) { + return position.x == 0.0f && position.y == 0.0f && position.z == 0.0f; } /** * Produces the non square root'ed distance between the two points within the XY plane. */ -float ComparativeDistance(const xy_location& point1, const xy_location& point2) { +float DistanceSquared(const glm::vec2& point1, const glm::vec2& point2) { auto diff = point1 - point2; - return diff.m_X * diff.m_X + diff.m_Y * diff.m_Y; + return diff.x * diff.x + diff.y * diff.y; } /** * Produces the distance between the two points on the XY plane. */ -float Distance(const xy_location& point1, const xy_location& point2) { - return sqrt(ComparativeDistance(point1, point2)); +float Distance(const glm::vec2& point1, const glm::vec2& point2) { + return sqrt(DistanceSquared(point1, point2)); } /** * Produces the non square root'ed distance between the two points. */ -float ComparativeDistance(const xyz_location& point1, const xyz_location& point2) { +float DistanceSquared(const glm::vec3& point1, const glm::vec3& point2) { auto diff = point1 - point2; - return diff.m_X * diff.m_X + diff.m_Y * diff.m_Y + diff.m_Z * diff.m_Z; + return diff.x * diff.x + diff.y * diff.y + diff.z * diff.z; } /** * Produces the non square root'ed distance between the two points. */ -float ComparativeDistance(const xyz_heading& point1, const xyz_heading& point2) { - return ComparativeDistance(static_cast(point1), static_cast(point2)); +float DistanceSquared(const glm::vec4& point1, const glm::vec4& point2) { + return DistanceSquared(static_cast(point1), static_cast(point2)); } /** * Produces the distance between the two points. */ -float Distance(const xyz_location& point1, const xyz_location& point2) { - return sqrt(ComparativeDistance(point1, point2)); +float Distance(const glm::vec3& point1, const glm::vec3& point2) { + return sqrt(DistanceSquared(point1, point2)); } /** * Produces the distance between the two points. */ -float Distance(const xyz_heading& point1, const xyz_heading& point2) { - return Distance(static_cast(point1), static_cast(point2)); +float Distance(const glm::vec4& point1, const glm::vec4& point2) { + return Distance(static_cast(point1), static_cast(point2)); } /** * Produces the distance between the two points within the XY plane. */ -float DistanceNoZ(const xyz_location& point1, const xyz_location& point2) { - return Distance(static_cast(point1),static_cast(point2)); +float DistanceNoZ(const glm::vec3& point1, const glm::vec3& point2) { + return Distance(static_cast(point1),static_cast(point2)); } /** * Produces the distance between the two points within the XY plane. */ -float DistanceNoZ(const xyz_heading& point1, const xyz_heading& point2) { - return Distance(static_cast(point1),static_cast(point2)); +float DistanceNoZ(const glm::vec4& point1, const glm::vec4& point2) { + return Distance(static_cast(point1),static_cast(point2)); } /** * Produces the non square root'ed distance between the two points within the XY plane. */ -float ComparativeDistanceNoZ(const xyz_location& point1, const xyz_location& point2) { - return ComparativeDistance(static_cast(point1),static_cast(point2)); +float DistanceSquaredNoZ(const glm::vec3& point1, const glm::vec3& point2) { + return DistanceSquared(static_cast(point1),static_cast(point2)); } /** * Produces the non square root'ed distance between the two points within the XY plane. */ -float ComparativeDistanceNoZ(const xyz_heading& point1, const xyz_heading& point2) { - return ComparativeDistance(static_cast(point1),static_cast(point2)); +float DistanceSquaredNoZ(const glm::vec4& point1, const glm::vec4& point2) { + return DistanceSquared(static_cast(point1),static_cast(point2)); } /** * Determines if 'position' is within (inclusive) the axis aligned * box (3 dimensional) formed from the points minimum and maximum. */ -bool IsWithinAxisAlignedBox(const xyz_location &position, const xyz_location &minimum, const xyz_location &maximum) { - auto actualMinimum = xyz_location(std::min(minimum.m_X, maximum.m_X), std::min(minimum.m_Y, maximum.m_Y),std::min(minimum.m_Z, maximum.m_Z)); - auto actualMaximum = xyz_location(std::max(minimum.m_X, maximum.m_X), std::max(minimum.m_Y, maximum.m_Y),std::max(minimum.m_Z, maximum.m_Z)); +bool IsWithinAxisAlignedBox(const glm::vec3 &position, const glm::vec3 &minimum, const glm::vec3 &maximum) { + auto actualMinimum = glm::vec3(std::min(minimum.x, maximum.x), std::min(minimum.y, maximum.y),std::min(minimum.z, maximum.z)); + auto actualMaximum = glm::vec3(std::max(minimum.x, maximum.x), std::max(minimum.y, maximum.y),std::max(minimum.z, maximum.z)); - bool xcheck = position.m_X >= actualMinimum.m_X && position.m_X <= actualMaximum.m_X; - bool ycheck = position.m_Y >= actualMinimum.m_Y && position.m_Y <= actualMaximum.m_Y; - bool zcheck = position.m_Z >= actualMinimum.m_Z && position.m_Z <= actualMaximum.m_Z; + bool xcheck = position.x >= actualMinimum.x && position.x <= actualMaximum.x; + bool ycheck = position.y >= actualMinimum.y && position.y <= actualMaximum.y; + bool zcheck = position.z >= actualMinimum.z && position.z <= actualMaximum.z; return xcheck && ycheck && zcheck; } @@ -213,12 +121,12 @@ bool IsWithinAxisAlignedBox(const xyz_location &position, const xyz_location &mi * Determines if 'position' is within (inclusive) the axis aligned * box (2 dimensional) formed from the points minimum and maximum. */ -bool IsWithinAxisAlignedBox(const xy_location &position, const xy_location &minimum, const xy_location &maximum) { - auto actualMinimum = xy_location(std::min(minimum.m_X, maximum.m_X), std::min(minimum.m_Y, maximum.m_Y)); - auto actualMaximum = xy_location(std::max(minimum.m_X, maximum.m_X), std::max(minimum.m_Y, maximum.m_Y)); +bool IsWithinAxisAlignedBox(const glm::vec2 &position, const glm::vec2 &minimum, const glm::vec2 &maximum) { + auto actualMinimum = glm::vec2(std::min(minimum.x, maximum.x), std::min(minimum.y, maximum.y)); + auto actualMaximum = glm::vec2(std::max(minimum.x, maximum.x), std::max(minimum.y, maximum.y)); - bool xcheck = position.m_X >= actualMinimum.m_X && position.m_X <= actualMaximum.m_X; - bool ycheck = position.m_Y >= actualMinimum.m_Y && position.m_Y <= actualMaximum.m_Y; + bool xcheck = position.x >= actualMinimum.x && position.x <= actualMaximum.x; + bool ycheck = position.y >= actualMinimum.y && position.y <= actualMaximum.y; return xcheck && ycheck; } @@ -226,11 +134,11 @@ bool IsWithinAxisAlignedBox(const xy_location &position, const xy_location &mini /** * Gives the heading directly 180 degrees from the * current heading. -* Takes the EQfloat from the xyz_heading and returns +* Takes the EQfloat from the glm::vec4 and returns * an EQFloat. */ -float GetReciprocalHeading(const xyz_heading& point1) { - return GetReciprocalHeading(point1.m_Heading); +float GetReciprocalHeading(const glm::vec4& point1) { + return GetReciprocalHeading(point1.w); } /** diff --git a/zone/position.h b/zone/position.h index 418e370a2..96ca40075 100644 --- a/zone/position.h +++ b/zone/position.h @@ -19,91 +19,34 @@ #define POSITION_H #include - #include #include #include -class xy_location { -public: - float m_X; - float m_Y; +std::string to_string(const glm::vec4 &position); +std::string to_string(const glm::vec3 &position); +std::string to_string(const glm::vec2 &position); - xy_location(float x = 0.0f, float y = 0.0f); +bool IsWithinAxisAlignedBox(const glm::vec3 &position, const glm::vec3 &minimum, const glm::vec3 &maximum); +bool IsWithinAxisAlignedBox(const glm::vec2 &position, const glm::vec2 &minimum, const glm::vec2 &maximum); - xy_location operator -(const xy_location& rhs) const; - xy_location operator +(const xy_location& rhs) const; -}; +bool IsOrigin(const glm::vec2 &position); +bool IsOrigin(const glm::vec3 &position); +bool IsOrigin(const glm::vec4 &position); -class xyz_location { -public: - float m_X; - float m_Y; - float m_Z; +float DistanceSquared(const glm::vec2& point1, const glm::vec2& point2); +float Distance(const glm::vec2& point1, const glm::vec2& point2); +float DistanceSquared(const glm::vec3& point1, const glm::vec3& point2); +float Distance(const glm::vec3& point1, const glm::vec3& point2); +float DistanceNoZ(const glm::vec3& point1, const glm::vec3& point2); +float DistanceSquaredNoZ(const glm::vec3& point1, const glm::vec3& point2); - static const xyz_location& Origin() {static xyz_location origin; return origin;} +float DistanceSquared(const glm::vec4& point1, const glm::vec4& point2); +float Distance(const glm::vec4& point1, const glm::vec4& point2); +float DistanceNoZ(const glm::vec4& point1, const glm::vec4& point2); +float DistanceSquaredNoZ(const glm::vec4& point1, const glm::vec4& point2); - xyz_location(float x = 0.0f, float y = 0.0f, float z = 0.0f); - xyz_location(double x, double y, double z); - - operator xy_location() const; - - xyz_location operator -(const xyz_location& rhs) const; - xyz_location operator +(const xyz_location& rhs) const; - - void ABS_XYZ(); - bool isOrigin() const { return m_X == 0 && m_Y == 0 && m_Z == 0;} - -}; - -class xyz_heading { -public: - float m_X; - float m_Y; - float m_Z; - - float m_Heading; - - static const xyz_heading& Origin() {static xyz_heading origin; return origin;} - - xyz_heading(float x = 0.0f, float y = 0.0f, float z = 0.0f, float heading = 0.0f); - xyz_heading(const xyz_heading& locationDir); - xyz_heading(const xyz_location& locationDir, float heading = 0.0f); - explicit xyz_heading(const xy_location& locationDir, float z, float heading); - explicit xyz_heading(const xy_location locationDir, float z, float heading); - - operator xyz_location() const; - operator xy_location() const; - - const xyz_heading operator +(const xyz_location& rhs) const; - const xyz_heading operator +(const xy_location& rhs) const; - - const xyz_heading operator -(const xyz_location& rhs) const; - - void ABS_XYZ(); - bool isOrigin() const { return m_X == 0.0f && m_Y == 0.0f && m_Z == 0.0f;} -}; - -std::string to_string(const xyz_heading &position); -std::string to_string(const xyz_location &position); -std::string to_string(const xy_location &position); - -bool IsWithinAxisAlignedBox(const xyz_location &position, const xyz_location &minimum, const xyz_location &maximum); -bool IsWithinAxisAlignedBox(const xy_location &position, const xy_location &minimum, const xy_location &maximum); - -float ComparativeDistance(const xy_location& point1, const xy_location& point2); -float Distance(const xy_location& point1, const xy_location& point2); -float ComparativeDistance(const xyz_location& point1, const xyz_location& point2); -float Distance(const xyz_location& point1, const xyz_location& point2); -float DistanceNoZ(const xyz_location& point1, const xyz_location& point2); -float ComparativeDistanceNoZ(const xyz_location& point1, const xyz_location& point2); - -float ComparativeDistance(const xyz_heading& point1, const xyz_heading& point2); -float Distance(const xyz_heading& point1, const xyz_heading& point2); -float DistanceNoZ(const xyz_heading& point1, const xyz_heading& point2); -float ComparativeDistanceNoZ(const xyz_heading& point1, const xyz_heading& point2); - -float GetReciprocalHeading(const xyz_heading& point1); +float GetReciprocalHeading(const glm::vec4& point1); float GetReciprocalHeading(const float heading); #endif diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index dd15c925d..c267c59c1 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -201,7 +201,7 @@ void QuestManager::write(const char *file, const char *str) { fclose (pFile); } -Mob* QuestManager::spawn2(int npc_type, int grid, int unused, const xyz_heading& position) { +Mob* QuestManager::spawn2(int npc_type, int grid, int unused, const glm::vec4& position) { const NPCType* tmp = 0; if (tmp = database.GetNPCType(npc_type)) { @@ -218,7 +218,7 @@ Mob* QuestManager::spawn2(int npc_type, int grid, int unused, const xyz_heading& return nullptr; } -Mob* QuestManager::unique_spawn(int npc_type, int grid, int unused, const xyz_heading& position) { +Mob* QuestManager::unique_spawn(int npc_type, int grid, int unused, const glm::vec4& position) { Mob *other = entity_list.GetMobByNpcTypeID(npc_type); if(other != nullptr) { return other; @@ -300,7 +300,7 @@ Mob* QuestManager::spawn_from_spawn2(uint32 spawn2_id) database.UpdateSpawn2Timeleft(spawn2_id, zone->GetInstanceID(), 0); found_spawn->SetCurrentNPCID(npcid); - auto position = xyz_heading(found_spawn->GetX(), found_spawn->GetY(), found_spawn->GetZ(), found_spawn->GetHeading()); + auto position = glm::vec4(found_spawn->GetX(), found_spawn->GetY(), found_spawn->GetZ(), found_spawn->GetHeading()); NPC* npc = new NPC(tmp, found_spawn, position, FlyMode3); found_spawn->SetNPCPointer(npc); @@ -1486,7 +1486,7 @@ void QuestManager::ding() { } -void QuestManager::rebind(int zoneid, const xyz_location& location) { +void QuestManager::rebind(int zoneid, const glm::vec3& location) { QuestManagerCurrentQuestVars(); if(initiator && initiator->IsClient()) { initiator->SetBindPoint(zoneid, 0, location); @@ -1517,7 +1517,7 @@ void QuestManager::pause(int duration) { owner->CastToNPC()->PauseWandering(duration); } -void QuestManager::moveto(const xyz_heading& position, bool saveguardspot) { +void QuestManager::moveto(const glm::vec4& position, bool saveguardspot) { QuestManagerCurrentQuestVars(); if (!owner || !owner->IsNPC()) return; @@ -1698,7 +1698,7 @@ void QuestManager::sethp(int hpperc) { owner->Damage(owner, newhp, SPELL_UNKNOWN, SkillHandtoHand, false, 0, false); } -bool QuestManager::summonburriedplayercorpse(uint32 char_id, const xyz_heading& position) { +bool QuestManager::summonburriedplayercorpse(uint32 char_id, const glm::vec4& position) { bool Result = false; if(char_id <= 0) @@ -1711,7 +1711,7 @@ bool QuestManager::summonburriedplayercorpse(uint32 char_id, const xyz_heading& return true; } -bool QuestManager::summonallplayercorpses(uint32 char_id, const xyz_heading& position) { +bool QuestManager::summonallplayercorpses(uint32 char_id, const glm::vec4& position) { if(char_id <= 0) return false; @@ -2307,14 +2307,14 @@ int QuestManager::getlevel(uint8 type) return 0; } -uint16 QuestManager::CreateGroundObject(uint32 itemid, const xyz_heading& position, uint32 decay_time) +uint16 QuestManager::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time) { uint16 entid = 0; //safety check entid = entity_list.CreateGroundObject(itemid, position, decay_time); return entid; } -uint16 QuestManager::CreateGroundObjectFromModel(const char *model, const xyz_heading& position, uint8 type, uint32 decay_time) +uint16 QuestManager::CreateGroundObjectFromModel(const char *model, const glm::vec4& position, uint8 type, uint32 decay_time) { uint16 entid = 0; //safety check entid = entity_list.CreateGroundObjectFromModel(model, position, type, decay_time); @@ -2582,12 +2582,12 @@ void QuestManager::RemoveAllFromInstance(uint16 instance_id) } } -void QuestManager::MovePCInstance(int zone_id, int instance_id, const xyz_heading& position) +void QuestManager::MovePCInstance(int zone_id, int instance_id, const glm::vec4& position) { QuestManagerCurrentQuestVars(); if(initiator) { - initiator->MovePC(zone_id, instance_id, position.m_X, position.m_Y, position.m_Z, position.m_Heading); + initiator->MovePC(zone_id, instance_id, position.x, position.y, position.z, position.w); } } @@ -2836,7 +2836,7 @@ void QuestManager::SendMail(const char *to, const char *from, const char *subjec uint16 QuestManager::CreateDoor(const char* model, float x, float y, float z, float heading, uint8 opentype, uint16 size) { uint16 entid = 0; //safety check - entid = entity_list.CreateDoor(model, xyz_heading(x, y, z, heading), opentype, size); + entid = entity_list.CreateDoor(model, glm::vec4(x, y, z, heading), opentype, size); return entid; } diff --git a/zone/questmgr.h b/zone/questmgr.h index 522aef961..7051bbb2b 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -57,8 +57,8 @@ public: void me(const char *str); void summonitem(uint32 itemid, int16 charges = -1); void write(const char *file, const char *str); - Mob* spawn2(int npc_type, int grid, int unused, const xyz_heading& position); - Mob* unique_spawn(int npc_type, int grid, int unused, const xyz_heading& position); + Mob* spawn2(int npc_type, int grid, int unused, const glm::vec4& position); + Mob* unique_spawn(int npc_type, int grid, int unused, const glm::vec4& position); Mob* spawn_from_spawn2(uint32 spawn2_id); void enable_spawn2(uint32 spawn2_id); void disable_spawn2(uint32 spawn2_id); @@ -132,11 +132,11 @@ public: void targlobal(const char *varname, const char *value, const char *duration, int npcid, int charid, int zoneid); void delglobal(const char *varname); void ding(); - void rebind(int zoneid, const xyz_location& location); + void rebind(int zoneid, const glm::vec3& location); void start(int wp); void stop(); void pause(int duration); - void moveto(const xyz_heading& position, bool saveguardspot); + void moveto(const glm::vec4& position, bool saveguardspot); void resume(); void addldonpoints(int32 points, uint32 theme); void addldonwin(int32 wins, uint32 theme); @@ -157,8 +157,8 @@ public: void set_zone_flag(int zone_id); void clear_zone_flag(int zone_id); void sethp(int hpperc); - bool summonburriedplayercorpse(uint32 char_id, const xyz_heading& position); - bool summonallplayercorpses(uint32 char_id, const xyz_heading& position); + bool summonburriedplayercorpse(uint32 char_id, const glm::vec4& position); + bool summonallplayercorpses(uint32 char_id, const glm::vec4& position); uint32 getplayerburriedcorpsecount(uint32 char_id); bool buryplayercorpse(uint32 char_id); void forcedooropen(uint32 doorid, bool altmode); @@ -208,8 +208,8 @@ public: void enabletitle(int titleset); bool checktitle(int titlecheck); void removetitle(int titlecheck); - uint16 CreateGroundObject(uint32 itemid, const xyz_heading& position, uint32 decay_time = 300000); - uint16 CreateGroundObjectFromModel(const char* model, const xyz_heading& position, uint8 type = 0x00, uint32 decay_time = 0); + uint16 CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time = 300000); + uint16 CreateGroundObjectFromModel(const char* model, const glm::vec4& position, uint8 type = 0x00, uint32 decay_time = 0); void ModifyNPCStat(const char *identifier, const char *newValue); void UpdateSpawnTimer(uint32 id, uint32 newTime); void MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity = 0); @@ -224,7 +224,7 @@ public: //void RemoveGroupFromInstance(uint16 instance_id); //potentially useful but not implmented at this time. //void RemoveRaidFromInstance(uint16 instance_id); //potentially useful but not implmented at this time. void RemoveAllFromInstance(uint16 instance_id); - void MovePCInstance(int zone_id, int instance_id, const xyz_heading& position); + void MovePCInstance(int zone_id, int instance_id, const glm::vec4& position); void FlagInstanceByGroupLeader(uint32 zone, int16 version); void FlagInstanceByRaidLeader(uint32 zone, int16 version); const char* varlink(char* perltext, int item_id); diff --git a/zone/raids.cpp b/zone/raids.cpp index 2a5c94bdd..3337e1dbf 100644 --- a/zone/raids.cpp +++ b/zone/raids.cpp @@ -489,7 +489,7 @@ void Raid::CastGroupSpell(Mob* caster, uint16 spellid, uint32 gid) else if(members[x].member != nullptr) { if(members[x].GroupNumber == gid){ - distance = ComparativeDistance(caster->GetPosition(), members[x].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[x].member->GetPosition()); if(distance <= range2){ caster->SpellOnTarget(spellid, members[x].member); #ifdef GROUP_BUFF_PETS @@ -537,7 +537,7 @@ void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, float range) if(members[gi].member){ if(members[gi].GroupNumber == gid) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ numMem += 1; } @@ -551,7 +551,7 @@ void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, float range) if(members[gi].member){ if(members[gi].GroupNumber == gid) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ members[gi].member->SetHP(members[gi].member->GetHP() + heal_amt); members[gi].member->SendHPUpdate(); @@ -581,7 +581,7 @@ void Raid::BalanceHP(int32 penalty, uint32 gid, float range, Mob* caster, int32 if(members[gi].member){ if(members[gi].GroupNumber == gid) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ dmgtaken_tmp = members[gi].member->GetMaxHP() - members[gi].member->GetHP(); @@ -602,7 +602,7 @@ void Raid::BalanceHP(int32 penalty, uint32 gid, float range, Mob* caster, int32 if(members[gi].member){ if(members[gi].GroupNumber == gid) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ if((members[gi].member->GetMaxHP() - dmgtaken) < 1){//this way the ability will never kill someone members[gi].member->SetHP(1); //but it will come darn close @@ -637,7 +637,7 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, float range, Mob* caster, int3 if(members[gi].GroupNumber == gid) { if (members[gi].member->GetMaxMana() > 0) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ manataken_tmp = members[gi].member->GetMaxMana() - members[gi].member->GetMana(); @@ -660,7 +660,7 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, float range, Mob* caster, int3 if(members[gi].member){ if(members[gi].GroupNumber == gid) { - distance = ComparativeDistance(caster->GetPosition(), members[gi].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[gi].member->GetPosition()); if(distance <= range2){ if((members[gi].member->GetMaxMana() - manataken) < 1){ members[gi].member->SetMana(1); @@ -791,7 +791,7 @@ void Raid::GroupBardPulse(Mob* caster, uint16 spellid, uint32 gid){ else if(members[z].member != nullptr) { if(members[z].GroupNumber == gid){ - distance = ComparativeDistance(caster->GetPosition(), members[z].member->GetPosition()); + distance = DistanceSquared(caster->GetPosition(), members[z].member->GetPosition()); if(distance <= range2) { members[z].member->BardPulse(spellid, caster); #ifdef GROUP_BUFF_PETS diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 6be939e35..a26c442bd 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -218,7 +218,7 @@ bool Spawn2::Process() { database.UpdateSpawn2Timeleft(spawn2_id, zone->GetInstanceID(), 0); currentnpcid = npcid; - NPC* npc = new NPC(tmp, this, xyz_heading(x, y, z, heading), FlyMode3); + NPC* npc = new NPC(tmp, this, glm::vec4(x, y, z, heading), FlyMode3); npc->mod_prespawn(this); @@ -414,13 +414,13 @@ Spawn2* ZoneDatabase::LoadSpawn2(LinkedList &spawn2_list, uint32 spawn2 return newSpawn; } -bool ZoneDatabase::CreateSpawn2(Client *client, uint32 spawngroup, const char* zone, const xyz_heading& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value) +bool ZoneDatabase::CreateSpawn2(Client *client, uint32 spawngroup, const char* zone, const glm::vec4& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value) { std::string query = StringFormat("INSERT INTO spawn2 (spawngroupID, zone, x, y, z, heading, " "respawntime, variance, _condition, cond_value) " "VALUES (%i, '%s', %f, %f, %f, %f, %i, %i, %u, %i)", - spawngroup, zone, position.m_X, position.m_Y, position.m_Z, position.m_Heading, + spawngroup, zone, position.x, position.y, position.z, position.w, respawn, variance, condition, cond_value); auto results = QueryDatabase(query); if (!results.Success()) { diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index b3014c7d9..7c46f47f4 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -769,7 +769,7 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) { float range = RangeItem->Range + AmmoItem->Range + GetRangeDistTargetSizeMod(GetTarget()); mlog(COMBAT__RANGED, "Calculated bow range to be %.1f", range); range *= range; - float dist = ComparativeDistance(m_Position, other->GetPosition()); + float dist = DistanceSquared(m_Position, other->GetPosition()); if(dist > range) { mlog(COMBAT__RANGED, "Ranged attack out of range... client should catch this. (%f > %f).\n", dist, range); Message_StringID(13,TARGET_OUT_OF_RANGE);//Client enforces range and sends the message, this is a backup just incase. @@ -1219,9 +1219,9 @@ void NPC::RangedAttack(Mob* other) min_range = static_cast(sa_min_range); max_range *= max_range; - if(ComparativeDistance(m_Position, other->GetPosition()) > max_range) + if(DistanceSquared(m_Position, other->GetPosition()) > max_range) return; - else if(ComparativeDistance(m_Position, other->GetPosition()) < (min_range * min_range)) + else if(DistanceSquared(m_Position, other->GetPosition()) < (min_range * min_range)) return; if(!other || !IsAttackAllowed(other) || @@ -1408,7 +1408,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51 float range = item->Range + GetRangeDistTargetSizeMod(other); mlog(COMBAT__RANGED, "Calculated bow range to be %.1f", range); range *= range; - float dist = ComparativeDistance(m_Position, other->GetPosition()); + float dist = DistanceSquared(m_Position, other->GetPosition()); if(dist > range) { mlog(COMBAT__RANGED, "Throwing attack out of range... client should catch this. (%f > %f).\n", dist, range); Message_StringID(13,TARGET_OUT_OF_RANGE);//Client enforces range and sends the message, this is a backup just incase. diff --git a/zone/spells.cpp b/zone/spells.cpp index ac111a006..b901a0530 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -362,7 +362,7 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, casting_spell_type = type; SaveSpellLoc(); - mlog(SPELLS__CASTING, "Casting %d Started at (%.3f,%.3f,%.3f)", spell_id, m_SpellLocation.m_X, m_SpellLocation.m_Y, m_SpellLocation.m_Z); + mlog(SPELLS__CASTING, "Casting %d Started at (%.3f,%.3f,%.3f)", spell_id, m_SpellLocation.x, m_SpellLocation.y, m_SpellLocation.z); // if this spell doesn't require a target, or if it's an optional target // and a target wasn't provided, then it's us; unless TGB is on and this @@ -533,8 +533,8 @@ bool Mob::DoCastingChecks() return false; } - if (zone->IsSpellBlocked(spell_id, GetPosition())) { - const char *msg = zone->GetSpellBlockedMessage(spell_id, GetPosition()); + if(zone->IsSpellBlocked(spell_id, glm::vec3(GetPosition()))) { + const char *msg = zone->GetSpellBlockedMessage(spell_id, glm::vec3(GetPosition())); if (msg) { Message(13, msg); return false; @@ -1918,8 +1918,8 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 if(IsClient() && !CastToClient()->GetGM()){ - if(zone->IsSpellBlocked(spell_id, GetPosition())){ - const char *msg = zone->GetSpellBlockedMessage(spell_id, GetPosition()); + if(zone->IsSpellBlocked(spell_id, glm::vec3(GetPosition()))){ + const char *msg = zone->GetSpellBlockedMessage(spell_id, glm::vec3(GetPosition())); if(msg){ Message(13, msg); return false; @@ -2002,7 +2002,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 } if(spell_target != nullptr && spell_target != this) { //casting a spell on somebody but ourself, make sure they are in range - float dist2 = ComparativeDistance(m_Position, spell_target->GetPosition()); + float dist2 = DistanceSquared(m_Position, spell_target->GetPosition()); float range2 = range * range; float min_range2 = spells[spell_id].min_range * spells[spell_id].min_range; if(dist2 > range2) { @@ -2344,7 +2344,7 @@ bool Mob::ApplyNextBardPulse(uint16 spell_id, Mob *spell_target, uint16 slot) { range = GetActSpellRange(spell_id, spells[spell_id].range, true); if(spell_target != nullptr && spell_target != this) { //casting a spell on somebody but ourself, make sure they are in range - float dist2 = ComparativeDistance(m_Position, spell_target->GetPosition()); + float dist2 = DistanceSquared(m_Position, spell_target->GetPosition()); float range2 = range * range; if(dist2 > range2) { //target is out of range. @@ -3856,9 +3856,9 @@ void Corpse::CastRezz(uint16 spellid, Mob* Caster) rezz->zone_id = zone->GetZoneID(); rezz->instance_id = zone->GetInstanceID(); rezz->spellid = spellid; - rezz->x = this->m_Position.m_X; - rezz->y = this->m_Position.m_Y; - rezz->z = this->m_Position.m_Z; + rezz->x = this->m_Position.x; + rezz->y = this->m_Position.y; + rezz->z = this->m_Position.z; rezz->unknown000 = 0x00000000; rezz->unknown020 = 0x00000000; rezz->unknown088 = 0x00000000; diff --git a/zone/trap.cpp b/zone/trap.cpp index 3cc684530..702c5719c 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -53,7 +53,7 @@ Trap::Trap() : Entity(), respawn_timer(600000), chkarea_timer(500), - m_Position(xyz_location::Origin()) + m_Position(glm::vec3()) { trap_id = 0; maxzdiff = 0; @@ -144,8 +144,8 @@ void Trap::Trigger(Mob* trigger) { if ((tmp = database.GetNPCType(effectvalue))) { - auto randomOffset = xyz_heading(zone->random.Int(-5, 5),zone->random.Int(-5, 5),zone->random.Int(-5, 5), zone->random.Int(0, 249)); - auto spawnPosition = randomOffset + m_Position; + auto randomOffset = glm::vec4(zone->random.Int(-5, 5),zone->random.Int(-5, 5),zone->random.Int(-5, 5), zone->random.Int(0, 249)); + auto spawnPosition = randomOffset + glm::vec4(m_Position, 0.0f); NPC* new_npc = new NPC(tmp, nullptr, spawnPosition, FlyMode3); new_npc->AddLootTable(); entity_list.AddNPC(new_npc); @@ -167,8 +167,8 @@ void Trap::Trigger(Mob* trigger) { if ((tmp = database.GetNPCType(effectvalue))) { - auto randomOffset = xyz_heading(zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(0, 249)); - auto spawnPosition = randomOffset + m_Position; + auto randomOffset = glm::vec4(zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(0, 249)); + auto spawnPosition = randomOffset + glm::vec4(m_Position, 0.0f); NPC* new_npc = new NPC(tmp, nullptr, spawnPosition, FlyMode3); new_npc->AddLootTable(); entity_list.AddNPC(new_npc); @@ -216,16 +216,16 @@ Trap* EntityList::FindNearbyTrap(Mob* searcher, float max_dist) { for (auto it = trap_list.begin(); it != trap_list.end(); ++it) { cur = it->second; if(cur->disarmed) - continue; + continue; - auto diff = searcher->GetPosition() - cur->m_Position; - float curdist = diff.m_X * diff.m_X + diff.m_Y * diff.m_Y + diff.m_Z * diff.m_Z; + auto diff = glm::vec3(searcher->GetPosition()) - cur->m_Position; + float curdist = diff.x * diff.x + diff.y * diff.y + diff.z * diff.z; - if (curdist < max_dist2 && curdist < dist) - { - dist = curdist; - current_trap = cur; - } + if (curdist < max_dist2 && curdist < dist) + { + dist = curdist; + current_trap = cur; + } } return current_trap; @@ -239,11 +239,11 @@ Mob* EntityList::GetTrapTrigger(Trap* trap) { for (auto it = client_list.begin(); it != client_list.end(); ++it) { Client* cur = it->second; - auto diff = cur->GetPosition() - trap->m_Position; - diff.ABS_XYZ(); + auto diff = glm::vec3(cur->GetPosition()) - trap->m_Position; + diff.z = std::abs(diff.z); - if ((diff.m_X*diff.m_X + diff.m_Y*diff.m_Y) <= maxdist - && diff.m_Z < trap->maxzdiff) + if ((diff.x*diff.x + diff.y*diff.y) <= maxdist + && diff.z < trap->maxzdiff) { if (zone->random.Roll(trap->chance)) return(cur); @@ -259,33 +259,33 @@ Mob* EntityList::GetTrapTrigger(Trap* trap) { //todo: rewrite this to not need direct access to trap members. bool ZoneDatabase::LoadTraps(const char* zonename, int16 version) { - std::string query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, " - "maxzdiff, radius, chance, message, respawn_time, respawn_var, level " - "FROM traps WHERE zone='%s' AND version=%u", zonename, version); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in LoadTraps query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + std::string query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, " + "maxzdiff, radius, chance, message, respawn_time, respawn_var, level " + "FROM traps WHERE zone='%s' AND version=%u", zonename, version); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in LoadTraps query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); return false; - } + } - for (auto row = results.begin(); row != results.end(); ++row) { - Trap* trap = new Trap(); - trap->trap_id = atoi(row[0]); - trap->m_Position = xyz_location(atof(row[1]), atof(row[2]), atof(row[3])); - trap->effect = atoi(row[4]); - trap->effectvalue = atoi(row[5]); - trap->effectvalue2 = atoi(row[6]); - trap->skill = atoi(row[7]); - trap->maxzdiff = atof(row[8]); - trap->radius = atof(row[9]); - trap->chance = atoi(row[10]); - trap->message = row[11]; - trap->respawn_time = atoi(row[12]); - trap->respawn_var = atoi(row[13]); - trap->level = atoi(row[14]); - entity_list.AddTrap(trap); - trap->CreateHiddenTrigger(); - } + for (auto row = results.begin(); row != results.end(); ++row) { + Trap* trap = new Trap(); + trap->trap_id = atoi(row[0]); + trap->m_Position = glm::vec3(atof(row[1]), atof(row[2]), atof(row[3])); + trap->effect = atoi(row[4]); + trap->effectvalue = atoi(row[5]); + trap->effectvalue2 = atoi(row[6]); + trap->skill = atoi(row[7]); + trap->maxzdiff = atof(row[8]); + trap->radius = atof(row[9]); + trap->chance = atoi(row[10]); + trap->message = row[11]; + trap->respawn_time = atoi(row[12]); + trap->respawn_var = atoi(row[13]); + trap->level = atoi(row[14]); + entity_list.AddTrap(trap); + trap->CreateHiddenTrigger(); + } return true; } @@ -312,7 +312,7 @@ void Trap::CreateHiddenTrigger() make_npc->trackable = 0; make_npc->level = level; strcpy(make_npc->special_abilities, "19,1^20,1^24,1^25,1"); - NPC* npca = new NPC(make_npc, nullptr, xyz_heading(m_Position, 0.0f), FlyMode3); + NPC* npca = new NPC(make_npc, nullptr, glm::vec4(m_Position, 0.0f), FlyMode3); npca->GiveNPCTypeData(make_npc); entity_list.AddNPC(npca); diff --git a/zone/trap.h b/zone/trap.h index e2dccd1ce..4adab320a 100644 --- a/zone/trap.h +++ b/zone/trap.h @@ -54,7 +54,7 @@ public: Timer respawn_timer; //Respawn Time when Trap's been disarmed Timer chkarea_timer; uint32 trap_id; //Database ID of trap - xyz_location m_Position; + glm::vec3 m_Position; float maxzdiff; //maximum z diff to be triggerable float radius; //radius around trap to be triggerable uint8 chance; //%chance that the trap is triggered each 'tick' diff --git a/zone/water_map.h b/zone/water_map.h index 32047378b..01936efbc 100644 --- a/zone/water_map.h +++ b/zone/water_map.h @@ -26,11 +26,11 @@ public: virtual ~WaterMap() { } static WaterMap* LoadWaterMapfile(std::string zone_name); - virtual WaterRegionType ReturnRegionType(const xyz_location& location) const { return RegionTypeNormal; } - virtual bool InWater(const xyz_location& location) const { return false; } - virtual bool InVWater(const xyz_location& location) const { return false; } - virtual bool InLava(const xyz_location& location) const { return false; } - virtual bool InLiquid(const xyz_location& location) const { return false; } + virtual WaterRegionType ReturnRegionType(const glm::vec3& location) const = 0; + virtual bool InWater(const glm::vec3& location) const = 0; + virtual bool InVWater(const glm::vec3& location) const = 0; + virtual bool InLava(const glm::vec3& location) const = 0; + virtual bool InLiquid(const glm::vec3& location) const = 0; protected: virtual bool Load(FILE *fp) { return false; } diff --git a/zone/water_map_v1.cpp b/zone/water_map_v1.cpp index 4f3797a8e..28cafe67c 100644 --- a/zone/water_map_v1.cpp +++ b/zone/water_map_v1.cpp @@ -10,24 +10,24 @@ WaterMapV1::~WaterMapV1() { } } -WaterRegionType WaterMapV1::ReturnRegionType(float y, float x, float z) const { - return BSPReturnRegionType(1, y, x, z); +WaterRegionType WaterMapV1::ReturnRegionType(const glm::vec3& location) const { + return BSPReturnRegionType(1, location); } -bool WaterMapV1::InWater(float y, float x, float z) const { - return ReturnRegionType(y, x, z) == RegionTypeWater; +bool WaterMapV1::InWater(const glm::vec3& location) const { + return ReturnRegionType(location) == RegionTypeWater; } -bool WaterMapV1::InVWater(float y, float x, float z) const { - return ReturnRegionType(y, x, z) == RegionTypeVWater; +bool WaterMapV1::InVWater(const glm::vec3& location) const { + return ReturnRegionType(location) == RegionTypeVWater; } -bool WaterMapV1::InLava(float y, float x, float z) const { - return ReturnRegionType(y, x, z) == RegionTypeLava; +bool WaterMapV1::InLava(const glm::vec3& location) const { + return ReturnRegionType(location) == RegionTypeLava; } -bool WaterMapV1::InLiquid(float y, float x, float z) const { - return InWater(y, x, z) || InLava(y, x, z); +bool WaterMapV1::InLiquid(const glm::vec3& location) const { + return InWater(location) || InLava(location); } bool WaterMapV1::Load(FILE *fp) { @@ -48,7 +48,7 @@ bool WaterMapV1::Load(FILE *fp) { return true; } -WaterRegionType WaterMapV1::BSPReturnRegionType(int32 node_number, float y, float x, float z) const { +WaterRegionType WaterMapV1::BSPReturnRegionType(int32 node_number, const glm::vec3& location) const { float distance; const ZBSP_Node *current_node = &BSP_Root[node_number - 1]; @@ -58,9 +58,9 @@ WaterRegionType WaterMapV1::BSPReturnRegionType(int32 node_number, float y, floa return (WaterRegionType)current_node->special; } - distance = (x * current_node->normal[0]) + - (y * current_node->normal[1]) + - (z * current_node->normal[2]) + + distance = (location.x * current_node->normal[0]) + + (location.y * current_node->normal[1]) + + (location.z * current_node->normal[2]) + current_node->splitdistance; if (distance == 0.0f) { @@ -71,12 +71,12 @@ WaterRegionType WaterMapV1::BSPReturnRegionType(int32 node_number, float y, floa if (current_node->left == 0) { return(RegionTypeNormal); } - return BSPReturnRegionType(current_node->left, y, x, z); + return BSPReturnRegionType(current_node->left, location); } if (current_node->right == 0) { return(RegionTypeNormal); } - return BSPReturnRegionType(current_node->right, y, x, z); + return BSPReturnRegionType(current_node->right, location); } diff --git a/zone/water_map_v1.h b/zone/water_map_v1.h index dfac5f996..6697aa0c8 100644 --- a/zone/water_map_v1.h +++ b/zone/water_map_v1.h @@ -19,17 +19,17 @@ public: WaterMapV1(); ~WaterMapV1(); - virtual WaterRegionType ReturnRegionType(float y, float x, float z) const; - virtual bool InWater(float y, float x, float z) const; - virtual bool InVWater(float y, float x, float z) const; - virtual bool InLava(float y, float x, float z) const; - virtual bool InLiquid(float y, float x, float z) const; + virtual WaterRegionType ReturnRegionType(const glm::vec3& location) const; + virtual bool InWater(const glm::vec3& location) const; + virtual bool InVWater(const glm::vec3& location) const; + virtual bool InLava(const glm::vec3& location) const; + virtual bool InLiquid(const glm::vec3& location) const; protected: virtual bool Load(FILE *fp); private: - WaterRegionType BSPReturnRegionType(int32 node_number, float y, float x, float z) const; + WaterRegionType BSPReturnRegionType(int32 node_number, const glm::vec3& location) const; ZBSP_Node* BSP_Root; friend class WaterMap; diff --git a/zone/water_map_v2.cpp b/zone/water_map_v2.cpp index 9a8eb9564..2931a62c1 100644 --- a/zone/water_map_v2.cpp +++ b/zone/water_map_v2.cpp @@ -6,30 +6,30 @@ WaterMapV2::WaterMapV2() { WaterMapV2::~WaterMapV2() { } -WaterRegionType WaterMapV2::ReturnRegionType(const xyz_location& location) const { +WaterRegionType WaterMapV2::ReturnRegionType(const glm::vec3& location) const { size_t sz = regions.size(); for(size_t i = 0; i < sz; ++i) { auto const ®ion = regions[i]; - if (region.second.ContainsPoint(glm::vec3(location.m_X, location.m_Y, location.m_Z))) { + if (region.second.ContainsPoint(glm::vec3(location.x, location.y, location.z))) { return region.first; } } return RegionTypeNormal; } -bool WaterMapV2::InWater(const xyz_location& location) const { +bool WaterMapV2::InWater(const glm::vec3& location) const { return ReturnRegionType(location) == RegionTypeWater; } -bool WaterMapV2::InVWater(const xyz_location& location) const { +bool WaterMapV2::InVWater(const glm::vec3& location) const { return ReturnRegionType(location) == RegionTypeVWater; } -bool WaterMapV2::InLava(const xyz_location& location) const { +bool WaterMapV2::InLava(const glm::vec3& location) const { return ReturnRegionType(location) == RegionTypeLava; } -bool WaterMapV2::InLiquid(const xyz_location& location) const { +bool WaterMapV2::InLiquid(const glm::vec3& location) const { return InWater(location) || InLava(location); } diff --git a/zone/water_map_v2.h b/zone/water_map_v2.h index a0adccc48..6429937f0 100644 --- a/zone/water_map_v2.h +++ b/zone/water_map_v2.h @@ -12,11 +12,11 @@ public: WaterMapV2(); ~WaterMapV2(); - virtual WaterRegionType ReturnRegionType(const xyz_location& location) const; - virtual bool InWater(const xyz_location& location) const; - virtual bool InVWater(const xyz_location& location) const; - virtual bool InLava(const xyz_location& location) const; - virtual bool InLiquid(const xyz_location& location) const; + virtual WaterRegionType ReturnRegionType(const glm::vec3& location) const; + virtual bool InWater(const glm::vec3& location) const; + virtual bool InVWater(const glm::vec3& location) const; + virtual bool InLava(const glm::vec3& location) const; + virtual bool InLiquid(const glm::vec3& location) const; protected: virtual bool Load(FILE *fp); diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 5a315add0..a1950376c 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -120,7 +120,7 @@ void NPC::ResumeWandering() return; } - if (m_CurrentWayPoint.m_X == GetX() && m_CurrentWayPoint.m_Y == GetY()) + if (m_CurrentWayPoint.x == GetX() && m_CurrentWayPoint.y == GetY()) { // are we we at a waypoint? if so, trigger event and start to next char temp[100]; itoa(cur_wp,temp,10); //do this before updating to next waypoint @@ -159,7 +159,7 @@ void NPC::PauseWandering(int pausetime) return; } -void NPC::MoveTo(const xyz_heading& position, bool saveguardspot) +void NPC::MoveTo(const glm::vec4& position, bool saveguardspot) { // makes mob walk to specified location if (IsNPC() && GetGrid() != 0) { // he is on a grid @@ -174,29 +174,29 @@ void NPC::MoveTo(const xyz_heading& position, bool saveguardspot) save_wp=cur_wp; // save the current waypoint cur_wp=-1; // flag this move as quest controlled } - mlog(AI__WAYPOINTS, "MoveTo %s, pausing regular grid wandering. Grid %d, save_wp %d",to_string(static_cast(position)).c_str(), -GetGrid(), save_wp); + mlog(AI__WAYPOINTS, "MoveTo %s, pausing regular grid wandering. Grid %d, save_wp %d",to_string(static_cast(position)).c_str(), -GetGrid(), save_wp); } else { // not on a grid roamer=true; save_wp=0; cur_wp=-2; // flag as quest controlled w/no grid - mlog(AI__WAYPOINTS, "MoveTo %s without a grid.", to_string(static_cast(position)).c_str()); + mlog(AI__WAYPOINTS, "MoveTo %s without a grid.", to_string(static_cast(position)).c_str()); } if (saveguardspot) { - m_GuardPoint = position; + m_GuardPoint = position; - if(m_GuardPoint.m_Heading == 0) - m_GuardPoint.m_Heading = 0.0001; //hack to make IsGuarding simpler + if(m_GuardPoint.w == 0) + m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler - if(m_GuardPoint.m_Heading == -1) - m_GuardPoint.m_Heading = this->CalculateHeadingToTarget(position.m_X, position.m_Y); + if(m_GuardPoint.w == -1) + m_GuardPoint.w = this->CalculateHeadingToTarget(position.x, position.y); - mlog(AI__WAYPOINTS, "Setting guard position to %s", to_string(static_cast(m_GuardPoint)).c_str()); + mlog(AI__WAYPOINTS, "Setting guard position to %s", to_string(static_cast(m_GuardPoint)).c_str()); } - m_CurrentWayPoint = position; + m_CurrentWayPoint = position; cur_wp_pause = 0; pLastFightingDelayMoving = 0; if(AIwalking_timer->Enabled()) @@ -213,23 +213,23 @@ void NPC::UpdateWaypoint(int wp_index) cur = Waypoints.begin(); cur += wp_index; - m_CurrentWayPoint = xyz_heading(cur->x, cur->y, cur->z, cur->heading); + m_CurrentWayPoint = glm::vec4(cur->x, cur->y, cur->z, cur->heading); cur_wp_pause = cur->pause; - mlog(AI__WAYPOINTS, "Next waypoint %d: (%.3f, %.3f, %.3f, %.3f)", wp_index, m_CurrentWayPoint.m_X, m_CurrentWayPoint.m_Y, m_CurrentWayPoint.m_Z, m_CurrentWayPoint.m_Heading); + mlog(AI__WAYPOINTS, "Next waypoint %d: (%.3f, %.3f, %.3f, %.3f)", wp_index, m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z, m_CurrentWayPoint.w); //fix up pathing Z if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints)) { if(!RuleB(Watermap, CheckForWaterAtWaypoints) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_CurrentWayPoint))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_CurrentWayPoint)))) { - Map::Vertex dest(m_CurrentWayPoint.m_X, m_CurrentWayPoint.m_Y, m_CurrentWayPoint.m_Z); + glm::vec3 dest(m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z); float newz = zone->zonemap->FindBestZ(dest, nullptr); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaWaypoint)) - m_CurrentWayPoint.m_Z = newz + 1; + m_CurrentWayPoint.z = newz + 1; } } @@ -258,7 +258,7 @@ void NPC::CalculateNewWaypoint() case 1: //10 closest { std::list closest; - GetClosestWaypoint(closest, 10, GetPosition()); + GetClosestWaypoint(closest, 10, glm::vec3(GetPosition())); std::list::iterator iter = closest.begin(); if(closest.size() != 0) { @@ -314,7 +314,7 @@ void NPC::CalculateNewWaypoint() case 5: //pick random closest 5 and pick one that's in sight { std::list closest; - GetClosestWaypoint(closest, 5, GetPosition()); + GetClosestWaypoint(closest, 5, glm::vec3(GetPosition())); std::list::iterator iter = closest.begin(); while(iter != closest.end()) @@ -355,7 +355,7 @@ bool wp_distance_pred(const wp_distance& left, const wp_distance& right) return left.dist < right.dist; } -void NPC::GetClosestWaypoint(std::list &wp_list, int count, const xyz_location& location) +void NPC::GetClosestWaypoint(std::list &wp_list, int count, const glm::vec3& location) { wp_list.clear(); if(Waypoints.size() <= count) @@ -370,11 +370,11 @@ void NPC::GetClosestWaypoint(std::list &wp_list, int count, const xyz_lo std::list distances; for(int i = 0; i < Waypoints.size(); ++i) { - float cur_x = (Waypoints[i].x - location.m_X); + float cur_x = (Waypoints[i].x - location.x); cur_x *= cur_x; - float cur_y = (Waypoints[i].y - location.m_Y); + float cur_y = (Waypoints[i].y - location.y); cur_y *= cur_y; - float cur_z = (Waypoints[i].z - location.m_Z); + float cur_z = (Waypoints[i].z - location.z); cur_z *= cur_z; float cur_dist = cur_x + cur_y + cur_z; wp_distance w_dist; @@ -422,23 +422,23 @@ void NPC::SetWaypointPause() void NPC::SaveGuardSpot(bool iClearGuardSpot) { if (iClearGuardSpot) { mlog(AI__WAYPOINTS, "Clearing guard order."); - m_GuardPoint = xyz_heading(0, 0, 0, 0); + m_GuardPoint = glm::vec4(0, 0, 0, 0); } else { - m_GuardPoint = m_Position; + m_GuardPoint = m_Position; - if(m_GuardPoint.m_Heading == 0) - m_GuardPoint.m_Heading = 0.0001; //hack to make IsGuarding simpler - mlog(AI__WAYPOINTS, "Setting guard position to %s", to_string(static_cast(m_GuardPoint)).c_str()); + if(m_GuardPoint.w == 0) + m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler + mlog(AI__WAYPOINTS, "Setting guard position to %s", to_string(static_cast(m_GuardPoint)).c_str()); } } void NPC::NextGuardPosition() { - if (!CalculateNewPosition2(m_GuardPoint.m_X, m_GuardPoint.m_Y, m_GuardPoint.m_Z, GetMovespeed())) { - SetHeading(m_GuardPoint.m_Heading); + if (!CalculateNewPosition2(m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z, GetMovespeed())) { + SetHeading(m_GuardPoint.w); mlog(AI__WAYPOINTS, "Unable to move to next guard position. Probably rooted."); } - else if((m_Position.m_X == m_GuardPoint.m_X) && (m_Position.m_Y == m_GuardPoint.m_Y) && (m_Position.m_Z == m_GuardPoint.m_Z)) + else if((m_Position.x == m_GuardPoint.x) && (m_Position.y == m_GuardPoint.y) && (m_Position.z == m_GuardPoint.z)) { if(moved) { @@ -466,7 +466,7 @@ void Mob::SaveSpawnSpot() { }*/ float Mob::CalculateDistance(float x, float y, float z) { - return (float)sqrtf( ((m_Position.m_X-x)*(m_Position.m_X-x)) + ((m_Position.m_Y-y)*(m_Position.m_Y-y)) + ((m_Position.m_Z-z)*(m_Position.m_Z-z)) ); + return (float)sqrtf( ((m_Position.x-x)*(m_Position.x-x)) + ((m_Position.y-y)*(m_Position.y-y)) + ((m_Position.z-z)*(m_Position.z-z)) ); } /* @@ -477,13 +477,13 @@ uint8 NPC::CalculateHeadingToNextWaypoint() { float Mob::CalculateHeadingToTarget(float in_x, float in_y) { float angle; - if (in_x-m_Position.m_X > 0) - angle = - 90 + atan((float)(in_y-m_Position.m_Y) / (float)(in_x-m_Position.m_X)) * 180 / M_PI; - else if (in_x-m_Position.m_X < 0) - angle = + 90 + atan((float)(in_y-m_Position.m_Y) / (float)(in_x-m_Position.m_X)) * 180 / M_PI; + if (in_x-m_Position.x > 0) + angle = - 90 + atan((float)(in_y-m_Position.y) / (float)(in_x-m_Position.x)) * 180 / M_PI; + else if (in_x-m_Position.x < 0) + angle = + 90 + atan((float)(in_y-m_Position.y) / (float)(in_x-m_Position.x)) * 180 / M_PI; else // Added? { - if (in_y-m_Position.m_Y > 0) + if (in_y-m_Position.y > 0) angle = 0; else angle = 180; @@ -499,16 +499,16 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b if(GetID()==0) return true; - if ((m_Position.m_X-x == 0) && (m_Position.m_Y-y == 0)) {//spawn is at target coords - if(m_Position.m_Z-z != 0) { - m_Position.m_Z = z; + if ((m_Position.x-x == 0) && (m_Position.y-y == 0)) {//spawn is at target coords + if(m_Position.z-z != 0) { + m_Position.z = z; mlog(AI__WAYPOINTS, "Calc Position2 (%.3f, %.3f, %.3f): Jumping pure Z.", x, y, z); return true; } mlog(AI__WAYPOINTS, "Calc Position2 (%.3f, %.3f, %.3f) inWater=%d: We are there.", x, y, z, inWater); return false; } - else if ((ABS(m_Position.m_X - x) < 0.1) && (ABS(m_Position.m_Y - y) < 0.1)) + else if ((ABS(m_Position.x - x) < 0.1) && (ABS(m_Position.y - y) < 0.1)) { mlog(AI__WAYPOINTS, "Calc Position2 (%.3f, %.3f, %.3f): X/Y difference <0.1, Jumping to target.", x, y, z); @@ -516,27 +516,27 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b entity_list.ProcessMove(CastToNPC(), x, y, z); } - m_Position.m_X = x; - m_Position.m_Y = y; - m_Position.m_Z = z; + m_Position.x = x; + m_Position.y = y; + m_Position.z = z; return true; } int compare_steps = IsBoat() ? 1 : 20; - if(tar_ndx < compare_steps && m_TargetLocation.m_X==x && m_TargetLocation.m_Y==y) { + if(tar_ndx < compare_steps && m_TargetLocation.x==x && m_TargetLocation.y==y) { - float new_x = m_Position.m_X + m_TargetV.m_X*tar_vector; - float new_y = m_Position.m_Y + m_TargetV.m_Y*tar_vector; - float new_z = m_Position.m_Z + m_TargetV.m_Z*tar_vector; + float new_x = m_Position.x + m_TargetV.x*tar_vector; + float new_y = m_Position.y + m_TargetV.y*tar_vector; + float new_z = m_Position.z + m_TargetV.z*tar_vector; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z; + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z; - mlog(AI__WAYPOINTS, "Calculating new position2 to (%.3f, %.3f, %.3f), old vector (%.3f, %.3f, %.3f)", x, y, z, m_TargetV.m_X, m_TargetV.m_Y, m_TargetV.m_Z); + mlog(AI__WAYPOINTS, "Calculating new position2 to (%.3f, %.3f, %.3f), old vector (%.3f, %.3f, %.3f)", x, y, z, m_TargetV.x, m_TargetV.y, m_TargetV.z); uint8 NPCFlyMode = 0; @@ -549,25 +549,25 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving)) { if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_Position.m_X))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { - Map::Vertex dest(m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr) + 2.0f; - mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.m_X,m_Position.m_Y,m_Position.m_Z); + mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check. { - if((ABS(x - m_Position.m_X) < 0.5) && (ABS(y - m_Position.m_Y) < 0.5)) + if((ABS(x - m_Position.x) < 0.5) && (ABS(y - m_Position.y) < 0.5)) { - if(ABS(z-m_Position.m_Z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) - m_Position.m_Z = z; + if(ABS(z-m_Position.z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) + m_Position.z = z; else - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } else - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } } } @@ -582,26 +582,26 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b } else { tar_ndx=0; } - m_TargetLocation = xyz_location(x, y, z); + m_TargetLocation = glm::vec3(x, y, z); - float nx = this->m_Position.m_X; - float ny = this->m_Position.m_Y; - float nz = this->m_Position.m_Z; + float nx = this->m_Position.x; + float ny = this->m_Position.y; + float nz = this->m_Position.z; // float nh = this->heading; - m_TargetV.m_X = x - nx; - m_TargetV.m_Y = y - ny; - m_TargetV.m_Z = z - nz; + m_TargetV.x = x - nx; + m_TargetV.y = y - ny; + m_TargetV.z = z - nz; //pRunAnimSpeed = (int8)(speed*NPC_RUNANIM_RATIO); //speed *= NPC_SPEED_MULTIPLIER; - mlog(AI__WAYPOINTS, "Calculating new position2 to (%.3f, %.3f, %.3f), new vector (%.3f, %.3f, %.3f) rate %.3f, RAS %d", x, y, z, m_TargetV.m_X, m_TargetV.m_Y, m_TargetV.m_Z, speed, pRunAnimSpeed); + mlog(AI__WAYPOINTS, "Calculating new position2 to (%.3f, %.3f, %.3f), new vector (%.3f, %.3f, %.3f) rate %.3f, RAS %d", x, y, z, m_TargetV.x, m_TargetV.y, m_TargetV.z, speed, pRunAnimSpeed); // -------------------------------------------------------------------------- // 2: get unit vector // -------------------------------------------------------------------------- - float mag = sqrtf (m_TargetV.m_X*m_TargetV.m_X + m_TargetV.m_Y*m_TargetV.m_Y + m_TargetV.m_Z*m_TargetV.m_Z); + float mag = sqrtf (m_TargetV.x*m_TargetV.x + m_TargetV.y*m_TargetV.y + m_TargetV.z*m_TargetV.z); tar_vector = speed / mag; // mob move fix @@ -615,23 +615,23 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b if (numsteps>1) { tar_vector=1.0f ; - m_TargetV.m_X = m_TargetV.m_X/numsteps; - m_TargetV.m_Y = m_TargetV.m_Y/numsteps; - m_TargetV.m_Z = m_TargetV.m_Z/numsteps; + m_TargetV.x = m_TargetV.x/numsteps; + m_TargetV.y = m_TargetV.y/numsteps; + m_TargetV.z = m_TargetV.z/numsteps; - float new_x = m_Position.m_X + m_TargetV.m_X; - float new_y = m_Position.m_Y + m_TargetV.m_Y; - float new_z = m_Position.m_Z + m_TargetV.m_Z; + float new_x = m_Position.x + m_TargetV.x; + float new_y = m_Position.y + m_TargetV.y; + float new_z = m_Position.z + m_TargetV.z; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z; - m_Position.m_Heading = CalculateHeadingToTarget(x, y); + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z; + m_Position.w = CalculateHeadingToTarget(x, y); tar_ndx=22-numsteps; - mlog(AI__WAYPOINTS, "Next position2 (%.3f, %.3f, %.3f) (%d steps)", m_Position.m_X, m_Position.m_Y, m_Position.m_Z, numsteps); + mlog(AI__WAYPOINTS, "Next position2 (%.3f, %.3f, %.3f) (%d steps)", m_Position.x, m_Position.y, m_Position.z, numsteps); } else { @@ -639,9 +639,9 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b entity_list.ProcessMove(CastToNPC(), x, y, z); } - m_Position.m_X = x; - m_Position.m_Y = y; - m_Position.m_Z = z; + m_Position.x = x; + m_Position.y = y; + m_Position.z = z; mlog(AI__WAYPOINTS, "Only a single step to get there... jumping."); @@ -651,18 +651,18 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b else { tar_vector/=20; - float new_x = m_Position.m_X + m_TargetV.m_X*tar_vector; - float new_y = m_Position.m_Y + m_TargetV.m_Y*tar_vector; - float new_z = m_Position.m_Z + m_TargetV.m_Z*tar_vector; + float new_x = m_Position.x + m_TargetV.x*tar_vector; + float new_y = m_Position.y + m_TargetV.y*tar_vector; + float new_z = m_Position.z + m_TargetV.z*tar_vector; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z; - m_Position.m_Heading = CalculateHeadingToTarget(x, y); - mlog(AI__WAYPOINTS, "Next position2 (%.3f, %.3f, %.3f) (%d steps)", m_Position.m_X, m_Position.m_Y, m_Position.m_Z, numsteps); + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z; + m_Position.w = CalculateHeadingToTarget(x, y); + mlog(AI__WAYPOINTS, "Next position2 (%.3f, %.3f, %.3f) (%d steps)", m_Position.x, m_Position.y, m_Position.z, numsteps); } uint8 NPCFlyMode = 0; @@ -676,25 +676,25 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving)) { if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_Position))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { - Map::Vertex dest(m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr); - mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.m_X,m_Position.m_Y,m_Position.m_Z); + mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check. { - if(ABS(x - m_Position.m_X) < 0.5 && ABS(y - m_Position.m_Y) < 0.5) + if(ABS(x - m_Position.x) < 0.5 && ABS(y - m_Position.y) < 0.5) { - if(ABS(z - m_Position.m_Z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) - m_Position.m_Z = z; + if(ABS(z - m_Position.z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) + m_Position.z = z; else - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } else - m_Position.m_Z = newz+1; + m_Position.z = newz+1; } } } @@ -702,7 +702,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, float speed, b SetMoving(true); moved=true; - m_Delta = xyz_heading(m_Position.m_X - nx, m_Position.m_Y - ny, m_Position.m_Z - nz, 0.0f); + m_Delta = glm::vec4(m_Position.x - nx, m_Position.y - ny, m_Position.z - nz, 0.0f); if (IsClient()) SendPosUpdate(1); @@ -727,9 +727,9 @@ bool Mob::CalculateNewPosition(float x, float y, float z, float speed, bool chec if(GetID()==0) return true; - float nx = m_Position.m_X; - float ny = m_Position.m_Y; - float nz = m_Position.m_Z; + float nx = m_Position.x; + float ny = m_Position.y; + float nz = m_Position.z; // if NPC is rooted if (speed == 0.0) { @@ -745,46 +745,46 @@ bool Mob::CalculateNewPosition(float x, float y, float z, float speed, bool chec } float old_test_vector=test_vector; - m_TargetV.m_X = x - nx; - m_TargetV.m_Y = y - ny; - m_TargetV.m_Z = z - nz; + m_TargetV.x = x - nx; + m_TargetV.y = y - ny; + m_TargetV.z = z - nz; - if (m_TargetV.m_X == 0 && m_TargetV.m_Y == 0) + if (m_TargetV.x == 0 && m_TargetV.y == 0) return false; pRunAnimSpeed = (uint8)(speed*NPC_RUNANIM_RATIO); speed *= NPC_SPEED_MULTIPLIER; - mlog(AI__WAYPOINTS, "Calculating new position to (%.3f, %.3f, %.3f) vector (%.3f, %.3f, %.3f) rate %.3f RAS %d", x, y, z, m_TargetV.m_X, m_TargetV.m_Y, m_TargetV.m_Z, speed, pRunAnimSpeed); + mlog(AI__WAYPOINTS, "Calculating new position to (%.3f, %.3f, %.3f) vector (%.3f, %.3f, %.3f) rate %.3f RAS %d", x, y, z, m_TargetV.x, m_TargetV.y, m_TargetV.z, speed, pRunAnimSpeed); // -------------------------------------------------------------------------- // 2: get unit vector // -------------------------------------------------------------------------- test_vector=sqrtf (x*x + y*y + z*z); - tar_vector = speed / sqrtf (m_TargetV.m_X*m_TargetV.m_X + m_TargetV.m_Y*m_TargetV.m_Y + m_TargetV.m_Z*m_TargetV.m_Z); - m_Position.m_Heading = CalculateHeadingToTarget(x, y); + tar_vector = speed / sqrtf (m_TargetV.x*m_TargetV.x + m_TargetV.y*m_TargetV.y + m_TargetV.z*m_TargetV.z); + m_Position.w = CalculateHeadingToTarget(x, y); if (tar_vector >= 1.0) { if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), x, y, z); } - m_Position.m_X = x; - m_Position.m_Y = y; - m_Position.m_Z = z; + m_Position.x = x; + m_Position.y = y; + m_Position.z = z; mlog(AI__WAYPOINTS, "Close enough, jumping to waypoint"); } else { - float new_x = m_Position.m_X + m_TargetV.m_X*tar_vector; - float new_y = m_Position.m_Y + m_TargetV.m_Y*tar_vector; - float new_z = m_Position.m_Z + m_TargetV.m_Z*tar_vector; + float new_x = m_Position.x + m_TargetV.x*tar_vector; + float new_y = m_Position.y + m_TargetV.y*tar_vector; + float new_z = m_Position.z + m_TargetV.z*tar_vector; if(IsNPC()) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z; - mlog(AI__WAYPOINTS, "Next position (%.3f, %.3f, %.3f)", m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z; + mlog(AI__WAYPOINTS, "Next position (%.3f, %.3f, %.3f)", m_Position.x, m_Position.y, m_Position.z); } uint8 NPCFlyMode = 0; @@ -798,25 +798,25 @@ bool Mob::CalculateNewPosition(float x, float y, float z, float speed, bool chec if(!NPCFlyMode && checkZ && zone->HasMap() && RuleB(Map, FixPathingZWhenMoving)) { if(!RuleB(Watermap, CheckForWaterWhenMoving) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_Position))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { - Map::Vertex dest(m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr) + 2.0f; - mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.m_X,m_Position.m_Y,m_Position.m_Z); + mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaMoving)) // Sanity check. { - if(ABS(x - m_Position.m_X) < 0.5 && ABS(y - m_Position.m_Y) < 0.5) + if(ABS(x - m_Position.x) < 0.5 && ABS(y - m_Position.y) < 0.5) { - if(ABS(z - m_Position.m_Z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) - m_Position.m_Z = z; + if(ABS(z - m_Position.z) <= RuleR(Map, FixPathingZMaxDeltaMoving)) + m_Position.z = z; else - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } else - m_Position.m_Z = newz+1; + m_Position.z = newz+1; } } } @@ -826,7 +826,7 @@ bool Mob::CalculateNewPosition(float x, float y, float z, float speed, bool chec tar_ndx=0; this->SetMoving(true); moved=true; - m_Delta = xyz_heading(m_Position.m_X - nx, m_Position.m_Y - ny, m_Position.m_Z - nz, 0.0f); + m_Delta = glm::vec4(m_Position.x - nx, m_Position.y - ny, m_Position.z - nz, 0.0f); SendPosUpdate(); } tar_ndx++; @@ -848,77 +848,77 @@ void NPC::AssignWaypoints(int32 grid) { } Waypoints.clear(); - roamer = false; + roamer = false; // Retrieve the wander and pause types for this grid std::string query = StringFormat("SELECT `type`, `type2` FROM `grid` WHERE `id` = %i AND `zoneid` = %i", grid, zone->GetZoneID()); auto results = database.QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "MySQL Error while trying to assign grid %u to mob %s: %s", grid, name, results.ErrorMessage().c_str()); - return; + LogFile->write(EQEmuLog::Error, "MySQL Error while trying to assign grid %u to mob %s: %s", grid, name, results.ErrorMessage().c_str()); + return; } if (results.RowCount() == 0) - return; + return; auto row = results.begin(); - wandertype = atoi(row[0]); - pausetype = atoi(row[1]); + wandertype = atoi(row[0]); + pausetype = atoi(row[1]); - this->CastToNPC()->SetGrid(grid); // Assign grid number + this->CastToNPC()->SetGrid(grid); // Assign grid number - // Retrieve all waypoints for this grid - query = StringFormat("SELECT `x`,`y`,`z`,`pause`,`heading` " - "FROM grid_entries WHERE `gridid` = %i AND `zoneid` = %i " - "ORDER BY `number`", grid, zone->GetZoneID()); - results = database.QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "MySQL Error while trying to assign waypoints from grid %u to mob %s: %s", grid, name, results.ErrorMessage().c_str()); - return; - } + // Retrieve all waypoints for this grid + query = StringFormat("SELECT `x`,`y`,`z`,`pause`,`heading` " + "FROM grid_entries WHERE `gridid` = %i AND `zoneid` = %i " + "ORDER BY `number`", grid, zone->GetZoneID()); + results = database.QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "MySQL Error while trying to assign waypoints from grid %u to mob %s: %s", grid, name, results.ErrorMessage().c_str()); + return; + } - roamer = true; - max_wp = 0; // Initialize it; will increment it for each waypoint successfully added to the list + roamer = true; + max_wp = 0; // Initialize it; will increment it for each waypoint successfully added to the list - for (auto row = results.begin(); row != results.end(); ++row, ++max_wp) - { - wplist newwp; - newwp.index = max_wp; - newwp.x = atof(row[0]); - newwp.y = atof(row[1]); - newwp.z = atof(row[2]); + for (auto row = results.begin(); row != results.end(); ++row, ++max_wp) + { + wplist newwp; + newwp.index = max_wp; + newwp.x = atof(row[0]); + newwp.y = atof(row[1]); + newwp.z = atof(row[2]); - if(zone->HasMap() && RuleB(Map, FixPathingZWhenLoading) ) - { - auto positon = xyz_location(newwp.x,newwp.y,newwp.z); - if(!RuleB(Watermap, CheckWaypointsInWaterWhenLoading) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(positon))) - { - Map::Vertex dest(newwp.x, newwp.y, newwp.z); + if(zone->HasMap() && RuleB(Map, FixPathingZWhenLoading) ) + { + auto positon = glm::vec3(newwp.x,newwp.y,newwp.z); + if(!RuleB(Watermap, CheckWaypointsInWaterWhenLoading) || !zone->HasWaterMap() || + (zone->HasWaterMap() && !zone->watermap->InWater(positon))) + { + glm::vec3 dest(newwp.x, newwp.y, newwp.z); - float newz = zone->zonemap->FindBestZ(dest, nullptr); + float newz = zone->zonemap->FindBestZ(dest, nullptr); - if( (newz > -2000) && ABS(newz-dest.z) < RuleR(Map, FixPathingZMaxDeltaLoading)) - newwp.z = newz + 1; - } - } + if( (newz > -2000) && ABS(newz-dest.z) < RuleR(Map, FixPathingZMaxDeltaLoading)) + newwp.z = newz + 1; + } + } - newwp.pause = atoi(row[3]); - newwp.heading = atof(row[4]); - Waypoints.push_back(newwp); - } + newwp.pause = atoi(row[3]); + newwp.heading = atof(row[4]); + Waypoints.push_back(newwp); + } if(Waypoints.size() < 2) { roamer = false; } - UpdateWaypoint(0); - SetWaypointPause(); + UpdateWaypoint(0); + SetWaypointPause(); - if (wandertype == 1 || wandertype == 2 || wandertype == 5) - CalculateNewWaypoint(); + if (wandertype == 1 || wandertype == 2 || wandertype == 5) + CalculateNewWaypoint(); } @@ -927,9 +927,9 @@ void Mob::SendTo(float new_x, float new_y, float new_z) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z; + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z; mlog(AI__WAYPOINTS, "Sent To (%.3f, %.3f, %.3f)", new_x, new_y, new_z); if(flymode == FlyMode1) @@ -940,20 +940,20 @@ void Mob::SendTo(float new_x, float new_y, float new_z) { if(zone->HasMap() && RuleB(Map, FixPathingZOnSendTo) ) { if(!RuleB(Watermap, CheckForWaterOnSendTo) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_Position))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { - Map::Vertex dest(m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr); - mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.m_X,m_Position.m_Y,m_Position.m_Z); + mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if( (newz > -2000) && ABS(newz - dest.z) < RuleR(Map, FixPathingZMaxDeltaSendTo)) // Sanity check. - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } } else - m_Position.m_Z += 0.1; + m_Position.z += 0.1; } void Mob::SendToFixZ(float new_x, float new_y, float new_z) { @@ -961,9 +961,9 @@ void Mob::SendToFixZ(float new_x, float new_y, float new_z) { entity_list.ProcessMove(CastToNPC(), new_x, new_y, new_z + 0.1); } - m_Position.m_X = new_x; - m_Position.m_Y = new_y; - m_Position.m_Z = new_z + 0.1; + m_Position.x = new_x; + m_Position.y = new_y; + m_Position.z = new_z + 0.1; //fix up pathing Z, this shouldent be needed IF our waypoints //are corrected instead @@ -971,16 +971,16 @@ void Mob::SendToFixZ(float new_x, float new_y, float new_z) { if(zone->HasMap() && RuleB(Map, FixPathingZOnSendTo)) { if(!RuleB(Watermap, CheckForWaterOnSendTo) || !zone->HasWaterMap() || - (zone->HasWaterMap() && !zone->watermap->InWater(m_Position))) + (zone->HasWaterMap() && !zone->watermap->InWater(glm::vec3(m_Position)))) { - Map::Vertex dest(m_Position.m_X, m_Position.m_Y, m_Position.m_Z); + glm::vec3 dest(m_Position.x, m_Position.y, m_Position.z); float newz = zone->zonemap->FindBestZ(dest, nullptr); - mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.m_X,m_Position.m_Y,m_Position.m_Z); + mlog(AI__WAYPOINTS, "BestZ returned %4.3f at %4.3f, %4.3f, %4.3f", newz,m_Position.x,m_Position.y,m_Position.z); if( (newz > -2000) && ABS(newz-dest.z) < RuleR(Map, FixPathingZMaxDeltaSendTo)) // Sanity check. - m_Position.m_Z = newz + 1; + m_Position.z = newz + 1; } } } @@ -989,13 +989,13 @@ int ZoneDatabase::GetHighestGrid(uint32 zoneid) { std::string query = StringFormat("SELECT COALESCE(MAX(id), 0) FROM grid WHERE zoneid = %i", zoneid); auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetHighestGrid query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; - } + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetHighestGrid query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; + } if (results.RowCount() != 1) - return 0; + return 0; auto row = results.begin(); return atoi(row[0]); @@ -1006,55 +1006,55 @@ uint8 ZoneDatabase::GetGridType2(uint32 grid, uint16 zoneid) { int type2 = 0; std::string query = StringFormat("SELECT type2 FROM grid WHERE id = %i AND zoneid = %i", grid, zoneid); auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetGridType2 query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; - } + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetGridType2 query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; + } - if (results.RowCount() != 1) - return 0; + if (results.RowCount() != 1) + return 0; - auto row = results.begin(); + auto row = results.begin(); return atoi(row[0]); } bool ZoneDatabase::GetWaypoints(uint32 grid, uint16 zoneid, uint32 num, wplist* wp) { - if (wp == nullptr) - return false; + if (wp == nullptr) + return false; std::string query = StringFormat("SELECT x, y, z, pause, heading FROM grid_entries " - "WHERE gridid = %i AND number = %i AND zoneid = %i", grid, num, zoneid); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetWaypoints query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return false; - } + "WHERE gridid = %i AND number = %i AND zoneid = %i", grid, num, zoneid); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error in GetWaypoints query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return false; + } if (results.RowCount() != 1) - return false; + return false; - auto row = results.begin(); + auto row = results.begin(); - wp->x = atof(row[0]); - wp->y = atof(row[1]); - wp->z = atof(row[2]); - wp->pause = atoi(row[3]); - wp->heading = atof(row[4]); + wp->x = atof(row[0]); + wp->y = atof(row[1]); + wp->z = atof(row[2]); + wp->pause = atoi(row[3]); + wp->heading = atof(row[4]); - return true; + return true; } -void ZoneDatabase::AssignGrid(Client *client, const xy_location& location, uint32 grid) +void ZoneDatabase::AssignGrid(Client *client, const glm::vec2& location, uint32 grid) { int matches = 0, fuzzy = 0, spawn2id = 0; // looks like most of the stuff in spawn2 is straight integers // so let's try that first std::string query = StringFormat("SELECT id, x, y FROM spawn2 WHERE zone = '%s' AND x = %i AND y = %i", - zone->GetShortName(), (int)location.m_X, (int)location.m_Y); - auto results = QueryDatabase(query); + zone->GetShortName(), (int)location.x, (int)location.y); + auto results = QueryDatabase(query); if(!results.Success()) { LogFile->write(EQEmuLog::Error, "Error querying spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); return; @@ -1064,11 +1064,11 @@ void ZoneDatabase::AssignGrid(Client *client, const xy_location& location, uint3 #define _GASSIGN_TOLERANCE 1.0 if (results.RowCount() == 0) // try a fuzzy match if that didn't find it { - query = StringFormat("SELECT id,x,y FROM spawn2 WHERE zone='%s' AND " - "ABS( ABS(x) - ABS(%f) ) < %f AND " - "ABS( ABS(y) - ABS(%f) ) < %f", - zone->GetShortName(), location.m_X, _GASSIGN_TOLERANCE, location.m_Y, _GASSIGN_TOLERANCE); - results = QueryDatabase(query); + query = StringFormat("SELECT id,x,y FROM spawn2 WHERE zone='%s' AND " + "ABS( ABS(x) - ABS(%f) ) < %f AND " + "ABS( ABS(y) - ABS(%f) ) < %f", + zone->GetShortName(), location.x, _GASSIGN_TOLERANCE, location.y, _GASSIGN_TOLERANCE); + results = QueryDatabase(query); if (!results.Success()) { LogFile->write(EQEmuLog::Error, "Error querying fuzzy spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); return; @@ -1078,22 +1078,22 @@ void ZoneDatabase::AssignGrid(Client *client, const xy_location& location, uint3 matches = results.RowCount(); } - if (matches == 0) + if (matches == 0) { - client->Message(0, "ERROR: Unable to assign grid - can't find it in spawn2"); - return; - } + client->Message(0, "ERROR: Unable to assign grid - can't find it in spawn2"); + return; + } - if(matches > 1) + if(matches > 1) { client->Message(0, "ERROR: Unable to assign grid - multiple spawn2 rows match"); return; } - auto row = results.begin(); + auto row = results.begin(); - spawn2id = atoi(row[0]); - xy_location dbLocation = xy_location(atof(row[1]), atof(row[2])); + spawn2id = atoi(row[0]); + glm::vec2 dbLocation = glm::vec2(atof(row[1]), atof(row[2])); query = StringFormat("UPDATE spawn2 SET pathgrid = %d WHERE id = %d", grid, spawn2id); results = QueryDatabase(query); @@ -1101,25 +1101,25 @@ void ZoneDatabase::AssignGrid(Client *client, const xy_location& location, uint3 { LogFile->write(EQEmuLog::Error, "Error updating spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); return; - } + } - if (results.RowsAffected() != 1) + if (results.RowsAffected() != 1) { - client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id); - return; - } + client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id); + return; + } - if(client) - client->LogSQL(query.c_str()); + if(client) + client->LogSQL(query.c_str()); if (!fuzzy) { - client->Message(0, "Grid assign: spawn2 id = %d updated - exact match", spawn2id); - return; - } + client->Message(0, "Grid assign: spawn2 id = %d updated - exact match", spawn2id); + return; + } - float difference = sqrtf(pow(fabs(location.m_X - dbLocation.m_X) , 2) + pow(fabs(location.m_Y - dbLocation.m_Y), 2)); - client->Message(0, "Grid assign: spawn2 id = %d updated - fuzzy match: deviation %f", spawn2id, difference); + float difference = sqrtf(pow(fabs(location.x - dbLocation.x) , 2) + pow(fabs(location.y - dbLocation.y), 2)); + client->Message(0, "Grid assign: spawn2 id = %d updated - fuzzy match: deviation %f", spawn2id, difference); } /****************** @@ -1133,52 +1133,52 @@ void ZoneDatabase::ModifyGrid(Client *client, bool remove, uint32 id, uint8 type if (!remove) { - std::string query = StringFormat("INSERT INTO grid(id, zoneid, type, type2) " - "VALUES (%i, %i, %i, %i)", id, zoneid, type, type2); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error creating grid entry '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); - return; - } + std::string query = StringFormat("INSERT INTO grid(id, zoneid, type, type2) " + "VALUES (%i, %i, %i, %i)", id, zoneid, type, type2); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "Error creating grid entry '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); + return; + } - if(client) + if(client) client->LogSQL(query.c_str()); return; } - std::string query = StringFormat("DELETE FROM grid where id=%i", id); - auto results = QueryDatabase(query); - if (!results.Success()) + std::string query = StringFormat("DELETE FROM grid where id=%i", id); + auto results = QueryDatabase(query); + if (!results.Success()) LogFile->write(EQEmuLog::Error, "Error deleting grid '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); else if(client) - client->LogSQL(query.c_str()); + client->LogSQL(query.c_str()); - query = StringFormat("DELETE FROM grid_entries WHERE zoneid = %i AND gridid = %i", zoneid, id); - results = QueryDatabase(query); - if(!results.Success()) - LogFile->write(EQEmuLog::Error, "Error deleting grid entries '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); - else if(client) - client->LogSQL(query.c_str()); + query = StringFormat("DELETE FROM grid_entries WHERE zoneid = %i AND gridid = %i", zoneid, id); + results = QueryDatabase(query); + if(!results.Success()) + LogFile->write(EQEmuLog::Error, "Error deleting grid entries '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); + else if(client) + client->LogSQL(query.c_str()); } /************************************** * AddWP - Adds a new waypoint to a specific grid for a specific zone. */ -void ZoneDatabase::AddWP(Client *client, uint32 gridid, uint32 wpnum, const xyz_heading& position, uint32 pause, uint16 zoneid) +void ZoneDatabase::AddWP(Client *client, uint32 gridid, uint32 wpnum, const glm::vec4& position, uint32 pause, uint16 zoneid) { std::string query = StringFormat("INSERT INTO grid_entries (gridid, zoneid, `number`, x, y, z, pause, heading) " - "VALUES (%i, %i, %i, %f, %f, %f, %i, %f)", - gridid, zoneid, wpnum, position.m_X, position.m_Y, position.m_Z, pause, position.m_Heading); - auto results = QueryDatabase(query); - if (!results.Success()) { + "VALUES (%i, %i, %i, %f, %f, %f, %i, %f)", + gridid, zoneid, wpnum, position.x, position.y, position.z, pause, position.w); + auto results = QueryDatabase(query); + if (!results.Success()) { LogFile->write(EQEmuLog::Error, "Error adding waypoint '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); return; } - if(client) - client->LogSQL(query.c_str()); + if(client) + client->LogSQL(query.c_str()); } @@ -1195,16 +1195,16 @@ void ZoneDatabase::AddWP(Client *client, uint32 gridid, uint32 wpnum, const xyz_ void ZoneDatabase::DeleteWaypoint(Client *client, uint32 grid_num, uint32 wp_num, uint16 zoneid) { std::string query = StringFormat("DELETE FROM grid_entries WHERE " - "gridid = %i AND zoneid = %i AND `number` = %i", - grid_num, zoneid, wp_num); - auto results = QueryDatabase(query); + "gridid = %i AND zoneid = %i AND `number` = %i", + grid_num, zoneid, wp_num); + auto results = QueryDatabase(query); if(!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error deleting waypoint '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); + LogFile->write(EQEmuLog::Error, "Error deleting waypoint '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); return; } if(client) - client->LogSQL(query.c_str()); + client->LogSQL(query.c_str()); } @@ -1215,7 +1215,7 @@ void ZoneDatabase::DeleteWaypoint(Client *client, uint32 grid_num, uint32 wp_num * Returns 0 if the function didn't have to create a new grid. If the function had to create a new grid for the spawn, then the ID of * the created grid is returned. */ -uint32 ZoneDatabase::AddWPForSpawn(Client *client, uint32 spawn2id, const xyz_heading& position, uint32 pause, int type1, int type2, uint16 zoneid) { +uint32 ZoneDatabase::AddWPForSpawn(Client *client, uint32 spawn2id, const glm::vec4& position, uint32 pause, int type1, int type2, uint16 zoneid) { uint32 grid_num; // The grid number the spawn is assigned to (if spawn has no grid, will be the grid number we end up creating) uint32 next_wp_num; // The waypoint number we should be assigning to the new waypoint @@ -1278,7 +1278,7 @@ uint32 ZoneDatabase::AddWPForSpawn(Client *client, uint32 spawn2id, const xyz_he query = StringFormat("INSERT INTO grid_entries(gridid, zoneid, `number`, x, y, z, pause, heading) " "VALUES (%i, %i, %i, %f, %f, %f, %i, %f)", - grid_num, zoneid, next_wp_num, position.m_X, position.m_Y, position.m_Z, pause, position.m_Heading); + grid_num, zoneid, next_wp_num, position.x, position.y, position.z, pause, position.w); results = QueryDatabase(query); if(!results.Success()) LogFile->write(EQEmuLog::Error, "Error adding grid entry '%s': '%s'", query.c_str(), results.ErrorMessage().c_str()); @@ -1293,43 +1293,43 @@ uint32 ZoneDatabase::GetFreeGrid(uint16 zoneid) { std::string query = StringFormat("SELECT max(id) FROM grid WHERE zoneid = %i", zoneid); auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetFreeGrid query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; + LogFile->write(EQEmuLog::Error, "Error in GetFreeGrid query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; } if (results.RowCount() != 1) - return 0; + return 0; - auto row = results.begin(); - uint32 freeGridID = 1; + auto row = results.begin(); + uint32 freeGridID = 1; freeGridID = atoi(row[0]) + 1; - return freeGridID; + return freeGridID; } int ZoneDatabase::GetHighestWaypoint(uint32 zoneid, uint32 gridid) { std::string query = StringFormat("SELECT COALESCE(MAX(number), 0) FROM grid_entries " - "WHERE zoneid = %i AND gridid = %i", zoneid, gridid); + "WHERE zoneid = %i AND gridid = %i", zoneid, gridid); auto results = QueryDatabase(query); if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "Error in GetHighestWaypoint query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); - return 0; + LogFile->write(EQEmuLog::Error, "Error in GetHighestWaypoint query '%s': %s", query.c_str(), results.ErrorMessage().c_str()); + return 0; } if (results.RowCount() != 1) - return 0; + return 0; - auto row = results.begin(); - return atoi(row[0]); + auto row = results.begin(); + return atoi(row[0]); } void NPC::SaveGuardSpotCharm() { - m_GuardPointSaved = m_GuardPoint; + m_GuardPointSaved = m_GuardPoint; } void NPC::RestoreGuardSpotCharm() { - m_GuardPoint = m_GuardPointSaved; + m_GuardPoint = m_GuardPointSaved; } diff --git a/zone/zone.cpp b/zone/zone.cpp index 23bc03ad6..63bc11a96 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -771,11 +771,11 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) pvpzone = false; if(database.GetServerType() == 1) pvpzone = true; - database.GetZoneLongName(short_name, &long_name, file_name, &m_SafePoint.m_X, &m_SafePoint.m_Y, &m_SafePoint.m_Z, &pgraveyard_id, &pMaxClients); + database.GetZoneLongName(short_name, &long_name, file_name, &m_SafePoint.x, &m_SafePoint.y, &m_SafePoint.z, &pgraveyard_id, &pMaxClients); if(graveyard_id() > 0) { LogFile->write(EQEmuLog::Debug, "Graveyard ID is %i.", graveyard_id()); - bool GraveYardLoaded = database.GetZoneGraveyard(graveyard_id(), &pgraveyard_zoneid, &m_Graveyard.m_X, &m_Graveyard.m_Y, &m_Graveyard.m_Z, &m_Graveyard.m_Heading); + bool GraveYardLoaded = database.GetZoneGraveyard(graveyard_id(), &pgraveyard_zoneid, &m_Graveyard.x, &m_Graveyard.y, &m_Graveyard.z, &m_Graveyard.w); if(GraveYardLoaded) LogFile->write(EQEmuLog::Debug, "Loaded a graveyard for zone %s: graveyard zoneid is %u at %s.", short_name, graveyard_zoneid(), to_string(m_Graveyard).c_str()); else @@ -1514,7 +1514,7 @@ void Zone::SetTime(uint8 hour, uint8 minute) } } -ZonePoint* Zone::GetClosestZonePoint(const xyz_location& location, uint32 to, Client* client, float max_distance) { +ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Client* client, float max_distance) { LinkedListIterator iterator(zone_point_list); ZonePoint* closest_zp = 0; float closest_dist = FLT_MAX; @@ -1532,7 +1532,7 @@ ZonePoint* Zone::GetClosestZonePoint(const xyz_location& location, uint32 to, Cl if (zp->target_zone_id == to) { - auto dist = Distance(xy_location(zp->x,zp->y), location); + auto dist = Distance(glm::vec2(zp->x, zp->y), glm::vec2(location)); if ((zp->x == 999999 || zp->x == -999999) && (zp->y == 999999 || zp->y == -999999)) dist = 0; @@ -1548,7 +1548,7 @@ ZonePoint* Zone::GetClosestZonePoint(const xyz_location& location, uint32 to, Cl if(closest_dist > 400.0f && closest_dist < max_distance2) { if(client) - client->CheatDetected(MQZoneUnknownDest, location.m_X, location.m_Y, location.m_Z); // Someone is trying to use /zone + client->CheatDetected(MQZoneUnknownDest, location.x, location.y, location.z); // Someone is trying to use /zone LogFile->write(EQEmuLog::Status, "WARNING: Closest zone point for zone id %d is %f, you might need to update your zone_points table if you dont arrive at the right spot.", to, closest_dist); LogFile->write(EQEmuLog::Status, ". %s", to_string(location).c_str()); } @@ -1557,14 +1557,14 @@ ZonePoint* Zone::GetClosestZonePoint(const xyz_location& location, uint32 to, Cl closest_zp = nullptr; if(!closest_zp) - closest_zp = GetClosestZonePointWithoutZone(location.m_X, location.m_Y, location.m_Z, client); + closest_zp = GetClosestZonePointWithoutZone(location.x, location.y, location.z, client); return closest_zp; } -ZonePoint* Zone::GetClosestZonePoint(const xyz_location& location, const char* to_name, Client* client, float max_distance) { +ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, const char* to_name, Client* client, float max_distance) { if(to_name == nullptr) - return GetClosestZonePointWithoutZone(location.m_X, location.m_Y, location.m_Z, client, max_distance); + return GetClosestZonePointWithoutZone(location.x, location.y, location.z, client, max_distance); return GetClosestZonePoint(location, database.GetZoneID(to_name), client, max_distance); } @@ -1813,7 +1813,7 @@ bool Zone::HasGraveyard() { return Result; } -void Zone::SetGraveyard(uint32 zoneid, const xyz_heading& graveyardPosition) { +void Zone::SetGraveyard(uint32 zoneid, const glm::vec4& graveyardPosition) { pgraveyard_zoneid = zoneid; m_Graveyard = graveyardPosition; } @@ -1842,7 +1842,7 @@ void Zone::ClearBlockedSpells() } } -bool Zone::IsSpellBlocked(uint32 spell_id, const xyz_location& location) +bool Zone::IsSpellBlocked(uint32 spell_id, const glm::vec3& location) { if (blocked_spells) { @@ -1908,7 +1908,7 @@ bool Zone::IsSpellBlocked(uint32 spell_id, const xyz_location& location) return false; } -const char* Zone::GetSpellBlockedMessage(uint32 spell_id, const xyz_location& location) +const char* Zone::GetSpellBlockedMessage(uint32 spell_id, const glm::vec3& location) { if(blocked_spells) { @@ -2164,7 +2164,7 @@ void Zone::DoAdventureActions() const NPCType* tmp = database.GetNPCType(ds->data_id); if(tmp) { - NPC* npc = new NPC(tmp, nullptr, xyz_heading(ds->assa_x, ds->assa_y, ds->assa_z, ds->assa_h), FlyMode3); + NPC* npc = new NPC(tmp, nullptr, glm::vec4(ds->assa_x, ds->assa_y, ds->assa_z, ds->assa_h), FlyMode3); npc->AddLootTable(); entity_list.AddNPC(npc); npc->Shout("Rarrrgh!"); diff --git a/zone/zone.h b/zone/zone.h index ce6b61d23..cb77941f6 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -100,9 +100,9 @@ public: inline Timer* GetInstanceTimer() { return Instance_Timer; } - inline xyz_location GetSafePoint() { return m_SafePoint; } + inline glm::vec3 GetSafePoint() { return m_SafePoint; } inline const uint32& graveyard_zoneid() { return pgraveyard_zoneid; } - inline xyz_heading GetGraveyardPoint() { return m_Graveyard; } + inline glm::vec4 GetGraveyardPoint() { return m_Graveyard; } inline const uint32& graveyard_id() { return pgraveyard_id; } inline const uint32& GetMaxClients() { return pMaxClients; } @@ -118,8 +118,8 @@ public: void ReloadStaticData(); uint32 CountSpawn2(); - ZonePoint* GetClosestZonePoint(const xyz_location& location, const char* to_name, Client *client, float max_distance = 40000.0f); - ZonePoint* GetClosestZonePoint(const xyz_location& location, uint32 to, Client *client, float max_distance = 40000.0f); + ZonePoint* GetClosestZonePoint(const glm::vec3& location, const char* to_name, Client *client, float max_distance = 40000.0f); + ZonePoint* GetClosestZonePoint(const glm::vec3& location, uint32 to, Client *client, float max_distance = 40000.0f); ZonePoint* GetClosestZonePointWithoutZone(float x, float y, float z, Client *client, float max_distance = 40000.0f); SpawnGroupList spawn_group_list; @@ -227,12 +227,12 @@ public: uint8 lootvar; bool HasGraveyard(); - void SetGraveyard(uint32 zoneid, const xyz_heading& graveyardPosition); + void SetGraveyard(uint32 zoneid, const glm::vec4& graveyardPosition); void LoadBlockedSpells(uint32 zoneid); void ClearBlockedSpells(); - bool IsSpellBlocked(uint32 spell_id, const xyz_location& location); - const char *GetSpellBlockedMessage(uint32 spell_id, const xyz_location& location); + bool IsSpellBlocked(uint32 spell_id, const glm::vec3& location); + const char *GetSpellBlockedMessage(uint32 spell_id, const glm::vec3& location); int GetTotalBlockedSpells() { return totalBS; } inline bool HasMap() { return zonemap != nullptr; } inline bool HasWaterMap() { return watermap != nullptr; } @@ -270,7 +270,7 @@ private: char* long_name; char* map_name; bool pvpzone; - xyz_location m_SafePoint; + glm::vec3 m_SafePoint; uint32 pMaxClients; bool can_bind; bool is_city; @@ -281,7 +281,7 @@ private: uint8 zone_type; bool allow_mercs; uint32 pgraveyard_id, pgraveyard_zoneid; - xyz_heading m_Graveyard; + glm::vec4 m_Graveyard; int default_ruleset; int totalBS; diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index b9c66b11f..20605cb71 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -1230,14 +1230,14 @@ bool ZoneDatabase::SaveCharacterLanguage(uint32 character_id, uint32 lang_id, ui return true; } -bool ZoneDatabase::SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, const xyz_heading& position, uint8 is_home){ +bool ZoneDatabase::SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, const glm::vec4& position, uint8 is_home){ if (zone_id <= 0) { return false; } /* Save Home Bind Point */ std::string query = StringFormat("REPLACE INTO `character_bind` (id, zone_id, instance_id, x, y, z, heading, is_home)" - " VALUES (%u, %u, %u, %f, %f, %f, %f, %i)", character_id, zone_id, instance_id, position.m_X, position.m_Y, position.m_Z, position.m_Heading, is_home); + " VALUES (%u, %u, %u, %f, %f, %f, %f, %i)", character_id, zone_id, instance_id, position.x, position.y, position.z, position.w, is_home); LogFile->write(EQEmuLog::Debug, "ZoneDatabase::SaveCharacterBindPoint for character ID: %i zone_id: %u instance_id: %u position: %s ishome: %u", character_id, zone_id, instance_id, to_string(position).c_str(), is_home); auto results = QueryDatabase(query); if (!results.RowsAffected()) { @@ -2527,11 +2527,11 @@ void ZoneDatabase::DeleteMerchantTemp(uint32 npcid, uint32 slot){ } -bool ZoneDatabase::UpdateZoneSafeCoords(const char* zonename, const xyz_location& location) { +bool ZoneDatabase::UpdateZoneSafeCoords(const char* zonename, const glm::vec3& location) { std::string query = StringFormat("UPDATE zone SET safe_x='%f', safe_y='%f', safe_z='%f' " "WHERE short_name='%s';", - location.m_X, location.m_Y, location.m_Z, zonename); + location.x, location.y, location.z, zonename); auto results = QueryDatabase(query); if (!results.Success() || results.RowsAffected() == 0) return false; @@ -2723,8 +2723,8 @@ bool ZoneDatabase::LoadBlockedSpells(int32 blockedSpellsCount, ZoneSpellsBlocked memset(&into[index], 0, sizeof(ZoneSpellsBlocked)); into[index].spellid = atoi(row[1]); into[index].type = atoi(row[2]); - into[index].m_Location = xyz_location(atof(row[3]), atof(row[4]), atof(row[5])); - into[index].m_Difference = xyz_location(atof(row[6]), atof(row[7]), atof(row[8])); + into[index].m_Location = glm::vec3(atof(row[3]), atof(row[4]), atof(row[5])); + into[index].m_Difference = glm::vec3(atof(row[6]), atof(row[7]), atof(row[8])); strn0cpy(into[index].message, row[9], 255); } @@ -2803,7 +2803,7 @@ void ZoneDatabase::QGlobalPurge() database.QueryDatabase(query); } -void ZoneDatabase::InsertDoor(uint32 ddoordbid, uint16 ddoorid, const char* ddoor_name, const xyz_heading& position, uint8 dopentype, uint16 dguildid, uint32 dlockpick, uint32 dkeyitem, uint8 ddoor_param, uint8 dinvert, int dincline, uint16 dsize){ +void ZoneDatabase::InsertDoor(uint32 ddoordbid, uint16 ddoorid, const char* ddoor_name, const glm::vec4& position, uint8 dopentype, uint16 dguildid, uint32 dlockpick, uint32 dkeyitem, uint8 ddoor_param, uint8 dinvert, int dincline, uint16 dsize){ std::string query = StringFormat("REPLACE INTO doors (id, doorid, zone, version, name, " "pos_x, pos_y, pos_z, heading, opentype, guild, lockpick, " @@ -2811,7 +2811,7 @@ void ZoneDatabase::InsertDoor(uint32 ddoordbid, uint16 ddoorid, const char* ddoo "VALUES('%i', '%i', '%s', '%i', '%s', '%f', '%f', " "'%f', '%f', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i')", ddoordbid, ddoorid, zone->GetShortName(), zone->GetInstanceVersion(), - ddoor_name, position.m_X, position.m_Y, position.m_Z, position.m_Heading, + ddoor_name, position.x, position.y, position.z, position.w, dopentype, dguildid, dlockpick, dkeyitem, ddoor_param, dinvert, dincline, dsize); auto results = QueryDatabase(query); if (!results.Success()) @@ -3398,23 +3398,23 @@ uint32 ZoneDatabase::AddGraveyardIDToZone(uint32 zone_id, uint32 graveyard_id) { return zone_id; } -uint32 ZoneDatabase::CreateGraveyardRecord(uint32 graveyard_zone_id, const xyz_heading& position) { +uint32 ZoneDatabase::CreateGraveyardRecord(uint32 graveyard_zone_id, const glm::vec4& position) { std::string query = StringFormat("INSERT INTO `graveyard` " "SET `zone_id` = %u, `x` = %1.1f, `y` = %1.1f, `z` = %1.1f, `heading` = %1.1f", - graveyard_zone_id, position.m_X, position.m_Y, position.m_Z, position.m_Heading); + graveyard_zone_id, position.x, position.y, position.z, position.w); auto results = QueryDatabase(query); if (results.Success()) return results.LastInsertedID(); return 0; } -uint32 ZoneDatabase::SendCharacterCorpseToGraveyard(uint32 dbid, uint32 zone_id, uint16 instance_id, const xyz_heading& position) { +uint32 ZoneDatabase::SendCharacterCorpseToGraveyard(uint32 dbid, uint32 zone_id, uint16 instance_id, const glm::vec4& position) { std::string query = StringFormat("UPDATE `character_corpses` " "SET `zone_id` = %u, `instance_id` = 0, " "`x` = %1.1f, `y` = %1.1f, `z` = %1.1f, `heading` = %1.1f, " "`was_at_graveyard` = 1 " "WHERE `id` = %d", - zone_id, position.m_X, position.m_Y, position.m_Z, position.m_Heading, dbid); + zone_id, position.x, position.y, position.z, position.w, dbid); QueryDatabase(query); return dbid; } @@ -3429,7 +3429,7 @@ uint32 ZoneDatabase::GetCharacterCorpseDecayTimer(uint32 corpse_db_id){ return 0; } -uint32 ZoneDatabase::UpdateCharacterCorpse(uint32 db_id, uint32 char_id, const char* char_name, uint32 zone_id, uint16 instance_id, PlayerCorpse_Struct* dbpc, const xyz_heading& position, bool is_rezzed) { +uint32 ZoneDatabase::UpdateCharacterCorpse(uint32 db_id, uint32 char_id, const char* char_name, uint32 zone_id, uint16 instance_id, PlayerCorpse_Struct* dbpc, const glm::vec4& position, bool is_rezzed) { std::string query = StringFormat("UPDATE `character_corpses` " "SET `charname` = '%s', `zone_id` = %u, `instance_id` = %u, `charid` = %d, " "`x` = %1.1f,`y` = %1.1f,`z` = %1.1f, `heading` = %1.1f, " @@ -3444,7 +3444,7 @@ uint32 ZoneDatabase::UpdateCharacterCorpse(uint32 db_id, uint32 char_id, const c "`wc_7` = %u, `wc_8` = %u, `wc_9` = %u " "WHERE `id` = %u", EscapeString(char_name).c_str(), zone_id, instance_id, char_id, - position.m_X, position.m_Y, position.m_Z, position.m_Heading, + position.x, position.y, position.z, position.w, dbpc->locked, dbpc->exp, dbpc->size, dbpc->level, dbpc->race, dbpc->gender, dbpc->class_, dbpc->deity, dbpc->texture, dbpc->helmtexture, dbpc->copper, dbpc->silver, dbpc->gold, @@ -3465,7 +3465,7 @@ void ZoneDatabase::MarkCorpseAsRezzed(uint32 db_id) { auto results = QueryDatabase(query); } -uint32 ZoneDatabase::SaveCharacterCorpse(uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const xyz_heading& position) { +uint32 ZoneDatabase::SaveCharacterCorpse(uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const glm::vec4& position) { /* Dump Basic Corpse Data */ std::string query = StringFormat("INSERT INTO `character_corpses` " "SET `charname` = '%s', `zone_id` = %u, `instance_id` = %u, `charid` = %d," @@ -3481,7 +3481,7 @@ uint32 ZoneDatabase::SaveCharacterCorpse(uint32 charid, const char* charname, ui "`wc_3` = %u, `wc_4` = %u, `wc_5` = %u, `wc_6` = %u," "`wc_7` = %u,`wc_8` = %u,`wc_9` = %u", EscapeString(charname).c_str(), zoneid, instanceid, charid, - position.m_X, position.m_Y, position.m_Z, position.m_Heading, + position.x, position.y, position.z, position.w, dbpc->locked, dbpc->exp, dbpc->size, dbpc->level, dbpc->race, dbpc->gender, dbpc->class_, dbpc->deity, dbpc->texture, dbpc->helmtexture, dbpc->copper, dbpc->silver, dbpc->gold, @@ -3710,7 +3710,7 @@ bool ZoneDatabase::LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct return true; } -Corpse* ZoneDatabase::SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zone_id, uint16 dest_instance_id, const xyz_heading& position) { +Corpse* ZoneDatabase::SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zone_id, uint16 dest_instance_id, const glm::vec4& position) { Corpse* corpse = nullptr; std::string query = StringFormat("SELECT `id`, `charname`, `time_of_death`, `is_rezzed` " "FROM `character_corpses` " @@ -3742,13 +3742,13 @@ Corpse* ZoneDatabase::SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_z return corpse; } -bool ZoneDatabase::SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zone_id, uint16 dest_instance_id, const xyz_heading& position) { +bool ZoneDatabase::SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zone_id, uint16 dest_instance_id, const glm::vec4& position) { Corpse* corpse = nullptr; int CorpseCount = 0; std::string query = StringFormat( "UPDATE character_corpses SET zone_id = %i, instance_id = %i, x = %f, y = %f, z = %f, heading = %f, is_buried = 0, was_at_graveyard = 0 WHERE charid = %i", - dest_zone_id, dest_instance_id, position.m_X, position.m_Y, position.m_Z, position.m_Heading, char_id + dest_zone_id, dest_instance_id, position.x, position.y, position.z, position.w, char_id ); auto results = QueryDatabase(query); @@ -3782,14 +3782,14 @@ bool ZoneDatabase::SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zone_id return (CorpseCount > 0); } -bool ZoneDatabase::UnburyCharacterCorpse(uint32 db_id, uint32 new_zone_id, uint16 new_instance_id, const xyz_heading& position) { +bool ZoneDatabase::UnburyCharacterCorpse(uint32 db_id, uint32 new_zone_id, uint16 new_instance_id, const glm::vec4& position) { std::string query = StringFormat("UPDATE `character_corpses` " "SET `is_buried` = 0, `zone_id` = %u, `instance_id` = %u, " "`x` = %f, `y` = %f, `z` = %f, `heading` = %f, " "`time_of_death` = Now(), `was_at_graveyard` = 0 " "WHERE `id` = %u", new_zone_id, new_instance_id, - position.m_X, position.m_Y, position.m_Z, position.m_Heading, db_id); + position.x, position.y, position.z, position.w, db_id); auto results = QueryDatabase(query); if (results.Success() && results.RowsAffected() != 0) return true; @@ -3805,7 +3805,7 @@ Corpse* ZoneDatabase::LoadCharacterCorpse(uint32 player_corpse_id) { ); auto results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - auto position = xyz_heading(atof(row[3]), atof(row[4]), atof(row[5]), atof(row[6])); + auto position = glm::vec4(atof(row[3]), atof(row[4]), atof(row[5]), atof(row[6])); NewCorpse = Corpse::LoadCharacterCorpseEntity( atoul(row[0]), // id uint32 in_dbid atoul(row[1]), // charid uint32 in_charid @@ -3831,7 +3831,7 @@ bool ZoneDatabase::LoadCharacterCorpses(uint32 zone_id, uint16 instance_id) { auto results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - auto position = xyz_heading(atof(row[3]), atof(row[4]), atof(row[5]), atof(row[6])); + auto position = glm::vec4(atof(row[3]), atof(row[4]), atof(row[5]), atof(row[6])); entity_list.AddCorpse( Corpse::LoadCharacterCorpseEntity( atoul(row[0]), // id uint32 in_dbid diff --git a/zone/zonedb.h b/zone/zonedb.h index ade485326..97f46624b 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -130,8 +130,8 @@ struct PetInfo { struct ZoneSpellsBlocked { uint32 spellid; int8 type; - xyz_location m_Location; - xyz_location m_Difference; + glm::vec3 m_Location; + glm::vec3 m_Difference; char message[256]; }; @@ -273,7 +273,7 @@ public: bool LoadCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp); /* Character Data Saves */ - bool SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, const xyz_heading& position, uint8 is_home); + bool SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, const glm::vec4& position, uint8 is_home); bool SaveCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp); bool SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp); bool SaveCharacterAA(uint32 character_id, uint32 aa_id, uint32 current_level); @@ -305,24 +305,24 @@ public: uint32 GetCharacterCorpseItemCount(uint32 corpse_id); bool LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct* pcs); Corpse* LoadCharacterCorpse(uint32 player_corpse_id); - Corpse* SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, const xyz_heading& position); + Corpse* SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, const glm::vec4& position); void MarkCorpseAsRezzed(uint32 dbid); bool GetDecayTimes(npcDecayTimes_Struct* npcCorpseDecayTimes); bool BuryCharacterCorpse(uint32 dbid); bool BuryAllCharacterCorpses(uint32 charid); bool DeleteCharacterCorpse(uint32 dbid); - bool SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, const xyz_heading& position); - bool SummonAllGraveyardCorpses(uint32 cur_zoneid, uint32 dest_zoneid, uint16 dest_instanceid, const xyz_heading& position); - bool UnburyCharacterCorpse(uint32 dbid, uint32 new_zoneid, uint16 dest_instanceid, const xyz_heading& position); + bool SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, const glm::vec4& position); + bool SummonAllGraveyardCorpses(uint32 cur_zoneid, uint32 dest_zoneid, uint16 dest_instanceid, const glm::vec4& position); + bool UnburyCharacterCorpse(uint32 dbid, uint32 new_zoneid, uint16 dest_instanceid, const glm::vec4& position); bool LoadCharacterCorpses(uint32 iZoneID, uint16 iInstanceID); bool DeleteGraveyard(uint32 zone_id, uint32 graveyard_id); uint32 GetCharacterCorpseDecayTimer(uint32 corpse_db_id); uint32 GetCharacterBuriedCorpseCount(uint32 char_id); - uint32 SendCharacterCorpseToGraveyard(uint32 dbid, uint32 zoneid, uint16 instanceid, const xyz_heading& position); - uint32 CreateGraveyardRecord(uint32 graveyard_zoneid, const xyz_heading& position); + uint32 SendCharacterCorpseToGraveyard(uint32 dbid, uint32 zoneid, uint16 instanceid, const glm::vec4& position); + uint32 CreateGraveyardRecord(uint32 graveyard_zoneid, const glm::vec4& position); uint32 AddGraveyardIDToZone(uint32 zone_id, uint32 graveyard_id); - uint32 SaveCharacterCorpse(uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const xyz_heading& position); - uint32 UpdateCharacterCorpse(uint32 dbid, uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const xyz_heading& position, bool rezzed = false); + uint32 SaveCharacterCorpse(uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const glm::vec4& position); + uint32 UpdateCharacterCorpse(uint32 dbid, uint32 charid, const char* charname, uint32 zoneid, uint16 instanceid, PlayerCorpse_Struct* dbpc, const glm::vec4& position, bool rezzed = false); uint32 GetFirstCorpseID(uint32 char_id); uint32 GetCharacterCorpseCount(uint32 char_id); uint32 GetCharacterCorpseID(uint32 char_id, uint8 corpse); @@ -353,7 +353,7 @@ public: bool GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct *data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &is_hotzone, bool &allow_mercs, uint8 &zone_type, int &ruleset, char **map_filename); bool SaveZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct* zd); bool LoadStaticZonePoints(LinkedList* zone_point_list,const char* zonename, uint32 version); - bool UpdateZoneSafeCoords(const char* zonename, const xyz_location& location); + bool UpdateZoneSafeCoords(const char* zonename, const glm::vec3& location); uint8 GetUseCFGSafeCoords(); int getZoneShutDownDelay(uint32 zoneID, uint32 version); @@ -362,7 +362,7 @@ public: bool LoadSpawnGroupsByID(int spawngroupid, SpawnGroupList* spawn_group_list); bool PopulateZoneSpawnList(uint32 zoneid, LinkedList &spawn2_list, int16 version, uint32 repopdelay = 0); Spawn2* LoadSpawn2(LinkedList &spawn2_list, uint32 spawn2id, uint32 timeleft); - bool CreateSpawn2(Client *c, uint32 spawngroup, const char* zone, const xyz_heading& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value); + bool CreateSpawn2(Client *c, uint32 spawngroup, const char* zone, const glm::vec4& position, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value); void UpdateSpawn2Timeleft(uint32 id, uint16 instance_id,uint32 timeleft); uint32 GetSpawnTimeLeft(uint32 id, uint16 instance_id); void UpdateSpawn2Status(uint32 id, uint8 new_status); @@ -371,14 +371,14 @@ public: uint32 GetFreeGrid(uint16 zoneid); void DeleteGrid(Client *c, uint32 sg2, uint32 grid_num, bool grid_too, uint16 zoneid); void DeleteWaypoint(Client *c, uint32 grid_num, uint32 wp_num, uint16 zoneid); - void AddWP(Client *c, uint32 gridid, uint32 wpnum, const xyz_heading& position, uint32 pause, uint16 zoneid); - uint32 AddWPForSpawn(Client *c, uint32 spawn2id, const xyz_heading& position, uint32 pause, int type1, int type2, uint16 zoneid); + void AddWP(Client *c, uint32 gridid, uint32 wpnum, const glm::vec4& position, uint32 pause, uint16 zoneid); + uint32 AddWPForSpawn(Client *c, uint32 spawn2id, const glm::vec4& position, uint32 pause, int type1, int type2, uint16 zoneid); void ModifyGrid(Client *c, bool remove, uint32 id, uint8 type = 0, uint8 type2 = 0, uint16 zoneid = 0); - void ModifyWP(Client *c, uint32 grid_id, uint32 wp_num, const xyz_location& location, uint32 script = 0, uint16 zoneid = 0); + void ModifyWP(Client *c, uint32 grid_id, uint32 wp_num, const glm::vec3& location, uint32 script = 0, uint16 zoneid = 0); uint8 GetGridType(uint32 grid, uint32 zoneid); uint8 GetGridType2(uint32 grid, uint16 zoneid); bool GetWaypoints(uint32 grid, uint16 zoneid, uint32 num, wplist* wp); - void AssignGrid(Client *client, const xy_location& location, uint32 id); + void AssignGrid(Client *client, const glm::vec2& location, uint32 id); int GetHighestGrid(uint32 zoneid); int GetHighestWaypoint(uint32 zoneid, uint32 gridid); @@ -450,7 +450,7 @@ public: int32 GetDoorsCount(uint32* oMaxID, const char *zone_name, int16 version); int32 GetDoorsCountPlusOne(const char *zone_name, int16 version); int32 GetDoorsDBCountPlusOne(const char *zone_name, int16 version); - void InsertDoor(uint32 did, uint16 ddoorid, const char* ddoor_name, const xyz_heading& position, uint8 dopentype, uint16 dguildid, uint32 dlockpick, uint32 dkeyitem, uint8 ddoor_param, uint8 dinvert, int dincline, uint16 dsize); + void InsertDoor(uint32 did, uint16 ddoorid, const char* ddoor_name, const glm::vec4& position, uint8 dopentype, uint16 dguildid, uint32 dlockpick, uint32 dkeyitem, uint8 ddoor_param, uint8 dinvert, int dincline, uint16 dsize); /* Blocked Spells */ int32 GetBlockedSpellsCount(uint32 zoneid); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index b5d6d5d25..ba63089a6 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -124,7 +124,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { return; } - zone_point = zone->GetClosestZonePoint(GetPosition(), target_zone_id, this, ZONEPOINT_ZONE_RANGE); + zone_point = zone->GetClosestZonePoint(glm::vec3(GetPosition()), target_zone_id, this, ZONEPOINT_ZONE_RANGE); //if we didnt get a zone point, or its to a different zone, //then we assume this is invalid. if(!zone_point || zone_point->target_zone_id != target_zone_id) { @@ -198,9 +198,9 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { dest_z = safe_z; break; case GMSummon: - dest_x = m_ZoneSummonLocation.m_X; - dest_y = m_ZoneSummonLocation.m_Y; - dest_z = m_ZoneSummonLocation.m_Z; + dest_x = m_ZoneSummonLocation.x; + dest_y = m_ZoneSummonLocation.y; + dest_z = m_ZoneSummonLocation.z; ignorerestrictions = 1; break; case GateToBindPoint: @@ -216,9 +216,9 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { break; case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going. //recycle zonesummon variables - dest_x = m_ZoneSummonLocation.m_X; - dest_y = m_ZoneSummonLocation.m_Y; - dest_z = m_ZoneSummonLocation.m_Z; + dest_x = m_ZoneSummonLocation.x; + dest_y = m_ZoneSummonLocation.y; + dest_z = m_ZoneSummonLocation.z; break; case ZoneUnsolicited: //client came up with this on its own. //client requested a zoning... what are the cases when this could happen? @@ -350,10 +350,10 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc //set the player's coordinates in the new zone so they have them //when they zone into it - m_Position.m_X = dest_x; //these coordinates will now be saved when ~client is called - m_Position.m_Y = dest_y; - m_Position.m_Z = dest_z; - m_Position.m_Heading = dest_h; // Cripp: fix for zone heading + m_Position.x = dest_x; //these coordinates will now be saved when ~client is called + m_Position.y = dest_y; + m_Position.z = dest_z; + m_Position.w = dest_h; // Cripp: fix for zone heading m_pp.heading = dest_h; m_pp.zone_id = zone_id; m_pp.zoneInstance = instance_id; @@ -394,7 +394,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc //reset to unsolicited. zone_mode = ZoneUnsolicited; - m_ZoneSummonLocation = xyz_location::Origin(); + m_ZoneSummonLocation = glm::vec3(); zonesummon_id = 0; zonesummon_ignorerestrictions = 0; } @@ -491,53 +491,56 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z return; } iZoneNameLength = strlen(pZoneName); - xyz_heading safePoint; + glm::vec3 safePoint; switch(zm) { case EvacToSafeCoords: case ZoneToSafeCoords: - safePoint = zone->GetSafePoint(); - x = safePoint.m_X; - y = safePoint.m_Y; - z = safePoint.m_Z; + safePoint = zone->GetSafePoint(); + x = safePoint.x; + y = safePoint.y; + z = safePoint.z; SetHeading(heading); break; case GMSummon: - m_ZoneSummonLocation = m_Position = xyz_heading(x,y,z,heading); + m_Position = glm::vec4(x, y, z, heading); + m_ZoneSummonLocation = glm::vec3(m_Position); SetHeading(heading); zonesummon_id = zoneID; zonesummon_ignorerestrictions = 1; break; case ZoneSolicited: - m_ZoneSummonLocation = xyz_location(x,y,z); + m_ZoneSummonLocation = glm::vec3(x,y,z); SetHeading(heading); zonesummon_id = zoneID; zonesummon_ignorerestrictions = ignorerestrictions; break; case GateToBindPoint: - x = m_Position.m_X = m_pp.binds[0].x; - y = m_Position.m_Y = m_pp.binds[0].y; - z = m_Position.m_Z = m_pp.binds[0].z; + x = m_Position.x = m_pp.binds[0].x; + y = m_Position.y = m_pp.binds[0].y; + z = m_Position.z = m_pp.binds[0].z; heading = m_pp.binds[0].heading; break; case ZoneToBindPoint: - x = m_Position.m_X = m_pp.binds[0].x; - y = m_Position.m_Y = m_pp.binds[0].y; - z = m_Position.m_Z = m_pp.binds[0].z; + x = m_Position.x = m_pp.binds[0].x; + y = m_Position.y = m_pp.binds[0].y; + z = m_Position.z = m_pp.binds[0].z; heading = m_pp.binds[0].heading; zonesummon_ignorerestrictions = 1; LogFile->write(EQEmuLog::Debug, "Player %s has died and will be zoned to bind point in zone: %s at LOC x=%f, y=%f, z=%f, heading=%f", GetName(), pZoneName, m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, m_pp.binds[0].heading); break; case SummonPC: - m_ZoneSummonLocation = m_Position = xyz_location(x, y, z); + m_ZoneSummonLocation = glm::vec3(x, y, z); + m_Position = glm::vec4(m_ZoneSummonLocation, 0.0f); SetHeading(heading); break; case Rewind: - LogFile->write(EQEmuLog::Debug, "%s has requested a /rewind from %f, %f, %f, to %f, %f, %f in %s", GetName(), m_Position.m_X, m_Position.m_Y, m_Position.m_Z, m_RewindLocation.m_X, m_RewindLocation.m_Y, m_RewindLocation.m_Z, zone->GetShortName()); - m_ZoneSummonLocation = m_Position = xyz_location(x, y, z); + LogFile->write(EQEmuLog::Debug, "%s has requested a /rewind from %f, %f, %f, to %f, %f, %f in %s", GetName(), m_Position.x, m_Position.y, m_Position.z, m_RewindLocation.x, m_RewindLocation.y, m_RewindLocation.z, zone->GetShortName()); + m_ZoneSummonLocation = glm::vec3(x, y, z); + m_Position = glm::vec4(m_ZoneSummonLocation, 0.0f); SetHeading(heading); break; default: @@ -647,8 +650,8 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z else { if(zoneID == GetZoneID()) { //properly handle proximities - entity_list.ProcessMove(this, m_Position); - m_Proximity = m_Position; + entity_list.ProcessMove(this, glm::vec3(m_Position)); + m_Proximity = glm::vec3(m_Position); //send out updates to people in zone. SendPosition(); @@ -677,7 +680,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z { if(zm != EvacToSafeCoords && zm != ZoneToSafeCoords && zm != ZoneToBindPoint) { - m_ZoneSummonLocation = xyz_location::Origin(); + m_ZoneSummonLocation = glm::vec3(); zonesummon_id = 0; zonesummon_ignorerestrictions = 0; zone_mode = ZoneUnsolicited; @@ -710,22 +713,22 @@ void NPC::Gate() { Mob::Gate(); } -void Client::SetBindPoint(int to_zone, int to_instance, const xyz_location& location) { +void Client::SetBindPoint(int to_zone, int to_instance, const glm::vec3& location) { if (to_zone == -1) { m_pp.binds[0].zoneId = zone->GetZoneID(); m_pp.binds[0].instance_id = (zone->GetInstanceID() != 0 && zone->IsInstancePersistent()) ? zone->GetInstanceID() : 0; - m_pp.binds[0].x = m_Position.m_X; - m_pp.binds[0].y = m_Position.m_Y; - m_pp.binds[0].z = m_Position.m_Z; + m_pp.binds[0].x = m_Position.x; + m_pp.binds[0].y = m_Position.y; + m_pp.binds[0].z = m_Position.z; } else { m_pp.binds[0].zoneId = to_zone; m_pp.binds[0].instance_id = to_instance; - m_pp.binds[0].x = location.m_X; - m_pp.binds[0].y = location.m_Y; - m_pp.binds[0].z = location.m_Z; + m_pp.binds[0].x = location.x; + m_pp.binds[0].y = location.y; + m_pp.binds[0].z = location.z; } - auto regularBindPoint = xyz_heading(m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, 0.0f); + auto regularBindPoint = glm::vec4(m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, 0.0f); database.SaveCharacterBindPoint(this->CharacterID(), m_pp.binds[0].zoneId, m_pp.binds[0].instance_id, regularBindPoint, 0); } @@ -778,12 +781,12 @@ void Client::LoadZoneFlags() { // Retrieve all waypoints for this grid std::string query = StringFormat("SELECT zoneID from zone_flags WHERE charID=%d", CharacterID()); auto results = database.QueryDatabase(query); - if (!results.Success()) { - LogFile->write(EQEmuLog::Error, "MySQL Error while trying to load zone flags for %s: %s", GetName(), results.ErrorMessage().c_str()); - return; - } + if (!results.Success()) { + LogFile->write(EQEmuLog::Error, "MySQL Error while trying to load zone flags for %s: %s", GetName(), results.ErrorMessage().c_str()); + return; + } - for(auto row = results.begin(); row != results.end(); ++row) + for(auto row = results.begin(); row != results.end(); ++row) zone_flags.insert(atoi(row[0])); }