@ -458,7 +458,8 @@ CSMWorld::CreatureColumns::CreatureColumns (const ActorColumns& actorColumns)
mOriginal ( NULL ) ,
mAttributes ( NULL ) ,
mAttacks ( NULL ) ,
mMisc ( NULL )
mMisc ( NULL ) ,
mBloodType ( NULL )
{ }
CSMWorld : : CreatureRefIdAdapter : : CreatureRefIdAdapter ( const CreatureColumns & columns )
@ -489,6 +490,19 @@ QVariant CSMWorld::CreatureRefIdAdapter::getData (const RefIdColumn *column, con
if ( column = = mColumns . mMisc )
return QVariant : : fromValue ( ColumnBase : : TableEdit_Full ) ;
if ( column = = mColumns . mBloodType )
{
int mask = ESM : : Creature : : Flags : : Skeleton | ESM : : Creature : : Flags : : Metal ;
if ( ( record . get ( ) . mFlags & mask ) = = ESM : : Creature : : Flags : : Skeleton )
return 1 ;
if ( ( record . get ( ) . mFlags & mask ) = = ESM : : Creature : : Flags : : Metal )
return 2 ;
return 0 ;
}
std : : map < const RefIdColumn * , unsigned int > : : const_iterator iter =
mColumns . mFlags . find ( column ) ;
@ -512,6 +526,17 @@ void CSMWorld::CreatureRefIdAdapter::setData (const RefIdColumn *column, RefIdDa
creature . mScale = value . toFloat ( ) ;
else if ( column = = mColumns . mOriginal )
creature . mOriginal = value . toString ( ) . toUtf8 ( ) . constData ( ) ;
else if ( column = = mColumns . mBloodType )
{
int mask = ! ( ESM : : Creature : : Flags : : Skeleton | ESM : : Creature : : Flags : : Metal ) ;
if ( value . toInt ( ) = = 1 )
creature . mFlags = ( creature . mFlags & mask ) | ESM : : Creature : : Flags : : Skeleton ;
else if ( value . toInt ( ) = = 2 )
creature . mFlags = ( creature . mFlags & mask ) | ESM : : Creature : : Flags : : Metal ;
else
creature . mFlags = creature . mFlags & mask ;
}
else
{
std : : map < const RefIdColumn * , unsigned int > : : const_iterator iter =
@ -696,7 +721,8 @@ CSMWorld::NpcColumns::NpcColumns (const ActorColumns& actorColumns)
mHead ( NULL ) ,
mAttributes ( NULL ) ,
mSkills ( NULL ) ,
mMisc ( NULL )
mMisc ( NULL ) ,
mBloodType ( NULL )
{ }
CSMWorld : : NpcRefIdAdapter : : NpcRefIdAdapter ( const NpcColumns & columns )
@ -735,6 +761,19 @@ QVariant CSMWorld::NpcRefIdAdapter::getData (const RefIdColumn *column, const Re
if ( column = = mColumns . mMisc )
return QVariant : : fromValue ( ColumnBase : : TableEdit_Full ) ;
if ( column = = mColumns . mBloodType )
{
int mask = ESM : : NPC : : Flags : : Skeleton | ESM : : NPC : : Flags : : Metal ;
if ( ( record . get ( ) . mFlags & mask ) = = ESM : : NPC : : Flags : : Skeleton )
return 1 ;
if ( ( record . get ( ) . mFlags & mask ) = = ESM : : NPC : : Flags : : Metal )
return 2 ;
return 0 ;
}
std : : map < const RefIdColumn * , unsigned int > : : const_iterator iter =
mColumns . mFlags . find ( column ) ;
@ -762,6 +801,17 @@ void CSMWorld::NpcRefIdAdapter::setData (const RefIdColumn *column, RefIdData& d
npc . mHair = value . toString ( ) . toUtf8 ( ) . constData ( ) ;
else if ( column = = mColumns . mHead )
npc . mHead = value . toString ( ) . toUtf8 ( ) . constData ( ) ;
else if ( column = = mColumns . mBloodType )
{
int mask = ! ( ESM : : NPC : : Flags : : Skeleton | ESM : : NPC : : Flags : : Metal ) ;
if ( value . toInt ( ) = = 1 )
npc . mFlags = ( npc . mFlags & mask ) | ESM : : NPC : : Flags : : Skeleton ;
else if ( value . toInt ( ) = = 2 )
npc . mFlags = ( npc . mFlags & mask ) | ESM : : NPC : : Flags : : Metal ;
else
npc . mFlags = npc . mFlags & mask ;
}
else
{
std : : map < const RefIdColumn * , unsigned int > : : const_iterator iter =