diff options
author | megamage <none@none> | 2009-03-03 16:18:22 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-03 16:18:22 -0600 |
commit | c113bf884f9523745f22aae78cde80903b2ba192 (patch) | |
tree | a14135ce66c9b514a318c9f90a89034c3a1eade4 /src/shared/Database/DBCStructure.h | |
parent | 0a78760b758235ba2c48fc6b48514403ed052730 (diff) |
factionTemplate->faction can be 0, add appropriate checks to prevent crashes and unexpected work. Author: VladimirMangos
--HG--
branch : trunk
Diffstat (limited to 'src/shared/Database/DBCStructure.h')
-rw-r--r-- | src/shared/Database/DBCStructure.h | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 975dbf300f1..bfbdbf59c6c 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -735,24 +735,40 @@ struct FactionTemplateEntry { if(ID == entry.ID) return true; - if(enemyFaction[0] == entry.faction || enemyFaction[1] == entry.faction || enemyFaction[2] == entry.faction || enemyFaction[3] == entry.faction ) - return false; - if(friendFaction[0] == entry.faction || friendFaction[1] == entry.faction || friendFaction[2] == entry.faction || friendFaction[3] == entry.faction ) - return true; + if(entry.faction) + { + for(int i = 0; i < 4; ++i) + if (enemyFaction[i] == entry.faction) + return false; + for(int i = 0; i < 4; ++i) + if (friendFaction[i] == entry.faction) + return true; + } return (friendlyMask & entry.ourMask) || (ourMask & entry.friendlyMask); } bool IsHostileTo(FactionTemplateEntry const& entry) const { if(ID == entry.ID) return false; - if(enemyFaction[0] == entry.faction || enemyFaction[1] == entry.faction || enemyFaction[2] == entry.faction || enemyFaction[3] == entry.faction ) - return true; - if(friendFaction[0] == entry.faction || friendFaction[1] == entry.faction || friendFaction[2] == entry.faction || friendFaction[3] == entry.faction ) - return false; + if(entry.faction) + { + for(int i = 0; i < 4; ++i) + if (enemyFaction[i] == entry.faction) + return true; + for(int i = 0; i < 4; ++i) + if (friendFaction[i] == entry.faction) + return false; + } return (hostileMask & entry.ourMask) != 0; } bool IsHostileToPlayers() const { return (hostileMask & FACTION_MASK_PLAYER) !=0; } - bool IsNeutralToAll() const { return hostileMask == 0 && friendlyMask == 0 && enemyFaction[0]==0 && enemyFaction[1]==0 && enemyFaction[2]==0 && enemyFaction[3]==0; } + bool IsNeutralToAll() const + { + for(int i = 0; i < 4; ++i) + if (enemyFaction[i] != 0) + return false; + return hostileMask == 0 && friendlyMask == 0; + } bool IsContestedGuardFaction() const { return (factionFlags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD)!=0; } }; |