mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-06 07:45:36 +00:00
Implement CellRef's faction rank (rank requirement to use item)
This commit is contained in:
parent
ca45a63cf7
commit
75366b2e37
25 changed files with 52 additions and 57 deletions
|
@ -250,6 +250,8 @@ void loadCell(ESM::Cell &cell, ESM::ESMReader &esm, Arguments& info)
|
|||
std::cout << " ID: '" << ref.mRefID << "'\n";
|
||||
std::cout << " Owner: '" << ref.mOwner << "'\n";
|
||||
std::cout << " Global: '" << ref.mGlobalVariable << "'" << std::endl;
|
||||
std::cout << " Faction: '" << ref.mFaction << "'" << std::endl;
|
||||
std::cout << " Faction rank: '" << ref.mFactionRank << "'" << std::endl;
|
||||
std::cout << " Enchantment charge: '" << ref.mEnchantmentCharge << "'\n";
|
||||
std::cout << " Uses/health: '" << ref.mCharge << "'\n";
|
||||
std::cout << " Gold value: '" << ref.mGoldValue << "'\n";
|
||||
|
|
|
@ -977,13 +977,13 @@ namespace CSMWorld
|
|||
|
||||
virtual QVariant get (const Record<ESXRecordT>& record) const
|
||||
{
|
||||
return record.get().mFactIndex;
|
||||
return record.get().mFactionRank;
|
||||
}
|
||||
|
||||
virtual void set (Record<ESXRecordT>& record, const QVariant& data)
|
||||
{
|
||||
ESXRecordT record2 = record.get();
|
||||
record2.mFactIndex = data.toInt();
|
||||
record2.mFactionRank = data.toInt();
|
||||
record.setModified (record2);
|
||||
}
|
||||
|
||||
|
|
|
@ -97,9 +97,7 @@ namespace MWClass
|
|||
std::string text;
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp())
|
||||
{
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
info.text = text;
|
||||
|
|
|
@ -127,9 +127,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
info.text = text;
|
||||
|
|
|
@ -247,9 +247,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -139,9 +139,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -193,9 +193,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -235,9 +235,7 @@ namespace MWClass
|
|||
text += "\n#{sTrapped}";
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -251,10 +251,8 @@ namespace MWClass
|
|||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp())
|
||||
{
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
}
|
||||
info.text = text;
|
||||
|
||||
|
|
|
@ -147,9 +147,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -187,9 +187,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -141,9 +141,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -182,9 +182,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -151,9 +151,7 @@ namespace MWClass
|
|||
info.isPotion = true;
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -140,9 +140,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -144,9 +144,7 @@ namespace MWClass
|
|||
text += MWGui::ToolTips::getValueString(ref->mBase->mData.mValue, "#{sValue}");
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -351,9 +351,7 @@ namespace MWClass
|
|||
info.remainingEnchantCharge = ptr.getCellRef().getEnchantmentCharge();
|
||||
|
||||
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getOwner(), "Owner");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getFaction(), "Faction");
|
||||
text += MWGui::ToolTips::getMiscString(ptr.getCellRef().getGlobalVariable(), "Global");
|
||||
text += MWGui::ToolTips::getCellRefString(ptr.getCellRef());
|
||||
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");
|
||||
}
|
||||
|
||||
|
|
|
@ -547,6 +547,17 @@ namespace MWGui
|
|||
return " (" + boost::lexical_cast<std::string>(value) + ")";
|
||||
}
|
||||
|
||||
std::string ToolTips::getCellRefString(const MWWorld::CellRef& cellref)
|
||||
{
|
||||
std::string ret;
|
||||
ret += getMiscString(cellref.getOwner(), "Owner");
|
||||
ret += getMiscString(cellref.getFaction(), "Faction");
|
||||
if (cellref.getFactionRank() > 0)
|
||||
ret += getValueString(cellref.getFactionRank(), "Rank");
|
||||
ret += getMiscString(cellref.getGlobalVariable(), "Global");
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ToolTips::toggleFullHelp()
|
||||
{
|
||||
mFullHelp = !mFullHelp;
|
||||
|
|
|
@ -66,6 +66,9 @@ namespace MWGui
|
|||
static std::string getCountString(const int value);
|
||||
///< @return blank string if count is 1, or else " (value)"
|
||||
|
||||
static std::string getCellRefString(const MWWorld::CellRef& cellref);
|
||||
///< Returns a string containing debug tooltip information about the given cellref.
|
||||
|
||||
// these do not create an actual tooltip, but they fill in the data that is required so the tooltip
|
||||
// system knows what to show in case this widget is hovered
|
||||
static void createSkillToolTip(MyGUI::Widget* widget, int skillId);
|
||||
|
|
|
@ -34,7 +34,9 @@ namespace
|
|||
if (!faction.empty() && ptr.getClass().isNpc())
|
||||
{
|
||||
const std::map<std::string, int>& factions = ptr.getClass().getNpcStats(ptr).getFactionRanks();
|
||||
if (factions.find(Misc::StringUtils::lowerCase(faction)) == factions.end())
|
||||
std::map<std::string, int>::const_iterator found = factions.find(Misc::StringUtils::lowerCase(faction));
|
||||
if (found == factions.end()
|
||||
|| found->second < item.getCellRef().getFactionRank())
|
||||
isFactionOwned = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -93,6 +93,11 @@ namespace MWWorld
|
|||
return mCellRef.mGlobalVariable;
|
||||
}
|
||||
|
||||
int CellRef::getFactionRank() const
|
||||
{
|
||||
return mCellRef.mFactionRank;
|
||||
}
|
||||
|
||||
void CellRef::setOwner(const std::string &owner)
|
||||
{
|
||||
if (owner != mCellRef.mOwner)
|
||||
|
|
|
@ -75,6 +75,9 @@ namespace MWWorld
|
|||
std::string getFaction() const;
|
||||
void setFaction (const std::string& faction);
|
||||
|
||||
// PC faction rank required to use the item. Sometimes is -1, which means "any rank".
|
||||
int getFactionRank() const;
|
||||
|
||||
// Lock level for doors and containers
|
||||
// Positive for a locked door. 0 for a door that was never locked.
|
||||
// For an unlocked door, it is set to -(previous locklevel)
|
||||
|
|
|
@ -28,7 +28,7 @@ namespace MWWorld
|
|||
cellRef.mRefNum.mContentFile = -1;
|
||||
cellRef.mRefID = name;
|
||||
cellRef.mScale = 1;
|
||||
cellRef.mFactIndex = 0;
|
||||
cellRef.mFactionRank = 0;
|
||||
cellRef.mCharge = -1;
|
||||
cellRef.mGoldValue = 1;
|
||||
cellRef.mEnchantmentCharge = -1;
|
||||
|
|
|
@ -31,8 +31,8 @@ void ESM::CellRef::load (ESMReader& esm, bool wideRefNum)
|
|||
mSoul = esm.getHNOString ("XSOL");
|
||||
|
||||
mFaction = esm.getHNOString ("CNAM");
|
||||
mFactIndex = -2;
|
||||
esm.getHNOT (mFactIndex, "INDX");
|
||||
mFactionRank = -2;
|
||||
esm.getHNOT (mFactionRank, "INDX");
|
||||
|
||||
mGoldValue = 1;
|
||||
mCharge = -1;
|
||||
|
@ -94,8 +94,8 @@ void ESM::CellRef::save (ESMWriter &esm, bool wideRefNum, bool inInventory) cons
|
|||
esm.writeHNOCString("XSOL", mSoul);
|
||||
|
||||
esm.writeHNOCString("CNAM", mFaction);
|
||||
if (mFactIndex != -2) {
|
||||
esm.writeHNT("INDX", mFactIndex);
|
||||
if (mFactionRank != -2) {
|
||||
esm.writeHNT("INDX", mFactionRank);
|
||||
}
|
||||
|
||||
if (mEnchantmentCharge != -1)
|
||||
|
@ -147,7 +147,7 @@ void ESM::CellRef::blank()
|
|||
mGlobalVariable.clear();
|
||||
mSoul.clear();
|
||||
mFaction.clear();
|
||||
mFactIndex = -1;
|
||||
mFactionRank = -2;
|
||||
mCharge = 0;
|
||||
mEnchantmentCharge = 0;
|
||||
mGoldValue = 0;
|
||||
|
|
|
@ -50,9 +50,8 @@ namespace ESM
|
|||
// you take it and are not a faction member)
|
||||
std::string mFaction;
|
||||
|
||||
// INDX might be PC faction rank required to use the item? Sometimes
|
||||
// is -1, which I assume means "any rank".
|
||||
int mFactIndex;
|
||||
// PC faction rank required to use the item. Sometimes is -1, which means "any rank".
|
||||
int mFactionRank;
|
||||
|
||||
// For weapon or armor, this is the remaining item health.
|
||||
// For tools (lockpicks, probes, repair hammer) it is the remaining uses.
|
||||
|
|
Loading…
Reference in a new issue