mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-16 15:29:55 +00:00
Merge branch 'i-said-it-was-unlocked-damn-you' into 'master'
Fix(CS): Actually allow unlocking doors ( #7899 ) Closes #7899 See merge request OpenMW/openmw!3982
This commit is contained in:
commit
f7f7502d60
6 changed files with 42 additions and 7 deletions
|
@ -163,6 +163,7 @@
|
|||
Bug #7872: Region sounds use wrong odds
|
||||
Bug #7887: Editor: Mismatched reported script data size and actual data size causes a crash during save
|
||||
Bug #7898: Editor: Invalid reference scales are allowed
|
||||
Bug #7899: Editor: Doors can't be unlocked
|
||||
Feature #2566: Handle NAM9 records for manual cell references
|
||||
Feature #3537: Shader-based water ripples
|
||||
Feature #5173: Support for NiFogProperty
|
||||
|
|
|
@ -1182,6 +1182,26 @@ namespace CSMWorld
|
|||
bool isUserEditable() const override { return true; }
|
||||
};
|
||||
|
||||
template <typename ESXRecordT>
|
||||
struct IsLockedColumn : public Column<ESXRecordT>
|
||||
{
|
||||
IsLockedColumn(int flags)
|
||||
: Column<ESXRecordT>(Columns::ColumnId_IsLocked, ColumnBase::Display_Boolean, flags)
|
||||
{
|
||||
}
|
||||
|
||||
QVariant get(const Record<ESXRecordT>& record) const override { return record.get().mIsLocked; }
|
||||
|
||||
void set(Record<ESXRecordT>& record, const QVariant& data) override
|
||||
{
|
||||
ESXRecordT record2 = record.get();
|
||||
record2.mIsLocked = data.toBool();
|
||||
record.setModified(record2);
|
||||
}
|
||||
|
||||
bool isEditable() const override { return true; }
|
||||
};
|
||||
|
||||
template <typename ESXRecordT>
|
||||
struct LockLevelColumn : public Column<ESXRecordT>
|
||||
{
|
||||
|
@ -1190,7 +1210,12 @@ namespace CSMWorld
|
|||
{
|
||||
}
|
||||
|
||||
QVariant get(const Record<ESXRecordT>& record) const override { return record.get().mLockLevel; }
|
||||
QVariant get(const Record<ESXRecordT>& record) const override
|
||||
{
|
||||
if (record.get().mIsLocked)
|
||||
return record.get().mLockLevel;
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void set(Record<ESXRecordT>& record, const QVariant& data) override
|
||||
{
|
||||
|
@ -1212,7 +1237,9 @@ namespace CSMWorld
|
|||
|
||||
QVariant get(const Record<ESXRecordT>& record) const override
|
||||
{
|
||||
return QString::fromUtf8(record.get().mKey.getRefIdString().c_str());
|
||||
if (record.get().mIsLocked)
|
||||
return QString::fromUtf8(record.get().mKey.getRefIdString().c_str());
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void set(Record<ESXRecordT>& record, const QVariant& data) override
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace CSMWorld
|
|||
{ ColumnId_StackCount, "Count" },
|
||||
{ ColumnId_Teleport, "Teleport" },
|
||||
{ ColumnId_TeleportCell, "Teleport Cell" },
|
||||
{ ColumnId_IsLocked, "Locked" },
|
||||
{ ColumnId_LockLevel, "Lock Level" },
|
||||
{ ColumnId_Key, "Key" },
|
||||
{ ColumnId_Trap, "Trap" },
|
||||
|
|
|
@ -351,6 +351,8 @@ namespace CSMWorld
|
|||
|
||||
ColumnId_SoundProbability = 317,
|
||||
|
||||
ColumnId_IsLocked = 318,
|
||||
|
||||
// Allocated to a separate value range, so we don't get a collision should we ever need
|
||||
// to extend the number of use values.
|
||||
ColumnId_UseValue1 = 0x10000,
|
||||
|
|
|
@ -599,6 +599,8 @@ CSMWorld::Data::Data(ToUTF8::FromType encoding, const Files::PathContainer& data
|
|||
mRefs.addColumn(new RotColumn<CellRef>(&CellRef::mDoorDest, 0, true));
|
||||
mRefs.addColumn(new RotColumn<CellRef>(&CellRef::mDoorDest, 1, true));
|
||||
mRefs.addColumn(new RotColumn<CellRef>(&CellRef::mDoorDest, 2, true));
|
||||
mRefs.addColumn(new IsLockedColumn<CellRef>(
|
||||
ColumnBase::Flag_Table | ColumnBase::Flag_Dialogue | ColumnBase::Flag_Dialogue_Refresh));
|
||||
mRefs.addColumn(new LockLevelColumn<CellRef>);
|
||||
mRefs.addColumn(new KeyColumn<CellRef>);
|
||||
mRefs.addColumn(new TrapColumn<CellRef>);
|
||||
|
|
|
@ -230,12 +230,14 @@ namespace ESM
|
|||
|
||||
if (!inInventory)
|
||||
{
|
||||
int lockLevel = mLockLevel;
|
||||
if (lockLevel == 0 && mIsLocked)
|
||||
lockLevel = ZeroLock;
|
||||
if (lockLevel != 0)
|
||||
if (mIsLocked)
|
||||
{
|
||||
int lockLevel = mLockLevel;
|
||||
if (lockLevel == 0)
|
||||
lockLevel = ZeroLock;
|
||||
esm.writeHNT("FLTV", lockLevel);
|
||||
esm.writeHNOCRefId("KNAM", mKey);
|
||||
esm.writeHNOCRefId("KNAM", mKey);
|
||||
}
|
||||
esm.writeHNOCRefId("TNAM", mTrap);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue