From 91b8ee104eac7446f9b8cbea7ed9dce641740c8e Mon Sep 17 00:00:00 2001 From: raczman Date: Sun, 7 Mar 2010 15:20:19 +0100 Subject: Added new type-safe cast functions. This, when properly used, should get rid of most memory corruption issues, currently, casting types C-style with no checks leads to some abstract crashing. Functionality is same as with dynamic_cast<>, but with no RTTI check - so when casting into invalid type you will receive NULL, and most probably crash. At the same time, i took the liberty to convert most Player* casts to ToPlayer(). Still needs crapload of casts being moved to new facility. --HG-- branch : trunk --- src/game/AchievementMgr.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/game/AchievementMgr.cpp') diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 76508b94f63..89272192e7d 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -265,9 +265,9 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE: if (!target || target->GetTypeId() != TYPEID_PLAYER) return false; - if(classRace.class_id && classRace.class_id != ((Player*)target)->getClass()) + if(classRace.class_id && classRace.class_id != target->ToPlayer()->getClass()) return false; - if(classRace.race_id && classRace.race_id != ((Player*)target)->getRace()) + if(classRace.race_id && classRace.race_id != target->ToPlayer()->getRace()) return false; return true; case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH: @@ -275,10 +275,10 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un return false; return target->GetHealth()*100 <= health.percent*target->GetMaxHealth(); case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_PLAYER_DEAD: - if (!target || target->GetTypeId() != TYPEID_PLAYER || target->isAlive() || ((Player*)target)->GetDeathTimer() == 0) + if (!target || target->GetTypeId() != TYPEID_PLAYER || target->isAlive() || target->ToPlayer()->GetDeathTimer() == 0) return false; // flag set == must be same team, not set == different team - return (((Player*)target)->GetTeam() == source->GetTeam()) == (player_dead.own_team_flag != 0); + return (target->ToPlayer()->GetTeam() == source->GetTeam()) == (player_dead.own_team_flag != 0); case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AURA: return source->HasAuraEffect(aura.spell_id,aura.effect_idx); case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_AREA: @@ -308,7 +308,7 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_TEAM: if (!target || target->GetTypeId() != TYPEID_PLAYER) return false; - return ((Player*)target)->GetTeam() == team.team; + return target->ToPlayer()->GetTeam() == team.team; case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK: return Player::GetDrunkenstateByValue(source->GetDrunkValue()) >= drunk.state; case ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY: -- cgit v1.2.3