diff options
| author | raczman <none@none> | 2010-03-07 15:20:19 +0100 |
|---|---|---|
| committer | raczman <none@none> | 2010-03-07 15:20:19 +0100 |
| commit | 91b8ee104eac7446f9b8cbea7ed9dce641740c8e (patch) | |
| tree | 2866b76745089d8066dad65b63e5aff07e92f4f6 /src/game/AchievementMgr.cpp | |
| parent | aeebe57dc08d8b2d90972f50f00c4a28dd3947ba (diff) | |
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
Diffstat (limited to 'src/game/AchievementMgr.cpp')
| -rw-r--r-- | src/game/AchievementMgr.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
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: |
