diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index 62f7df679b..2024c287dc 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -795,7 +795,7 @@ namespace MWDialogue || services & ESM::NPC::Misc) windowServices |= MWGui::DialogueWindow::Service_Trade; - if( !mActor.get()->base->mTransport.empty()) + if(mActor.getTypeName() == typeid(ESM::NPC).name() && !mActor.get()->base->mTransport.empty()) windowServices |= MWGui::DialogueWindow::Service_Travel; if (services & ESM::NPC::Spells) diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index f3cc66f380..190a7ddf8c 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -294,10 +294,13 @@ void DialogueWindow::updateOptions() mTopicsList->clear(); mHistory->eraseText(0, mHistory->getTextLength()); - mDispositionBar->setProgressRange(100); - mDispositionBar->setProgressPosition(MWBase::Environment::get().getMechanicsManager()->disposition(mPtr)); - mDispositionText->eraseText(0, mDispositionText->getTextLength()); - mDispositionText->addText("#B29154"+boost::lexical_cast(MWBase::Environment::get().getMechanicsManager()->disposition(mPtr))+std::string("/100")+"#B29154"); + if (mPtr.getTypeName() == typeid(ESM::NPC).name()) + { + mDispositionBar->setProgressRange(100); + mDispositionBar->setProgressPosition(MWBase::Environment::get().getMechanicsManager()->disposition(mPtr)); + mDispositionText->eraseText(0, mDispositionText->getTextLength()); + mDispositionText->addText("#B29154"+boost::lexical_cast(MWBase::Environment::get().getMechanicsManager()->disposition(mPtr))+std::string("/100")+"#B29154"); + } } void DialogueWindow::goodbye() @@ -314,7 +317,7 @@ void DialogueWindow::onReferenceUnavailable() void DialogueWindow::onFrame() { - if(mEnabled) + if(mEnabled && mPtr.getTypeName() == typeid(ESM::NPC).name()) { mDispositionBar->setProgressRange(100); mDispositionBar->setProgressPosition(MWBase::Environment::get().getMechanicsManager()->disposition(mPtr)); diff --git a/apps/openmw/mwgui/tradewindow.cpp b/apps/openmw/mwgui/tradewindow.cpp index 2c42015064..5fe58c7908 100644 --- a/apps/openmw/mwgui/tradewindow.cpp +++ b/apps/openmw/mwgui/tradewindow.cpp @@ -185,8 +185,13 @@ namespace MWGui if(mCurrentBalance > mCurrentMerchantOffer) { - /// \todo : if creature.... //if npc is a creature: reject (no haggle) + if (mPtr.getTypeName() != typeid(ESM::NPC).name()) + { + MWBase::Environment::get().getWindowManager()-> + messageBox("#{sNotifyMessage9}", std::vector()); + return; + } int a = abs(mCurrentMerchantOffer); int b = abs(mCurrentBalance); @@ -202,12 +207,12 @@ namespace MWGui MWMechanics::NpcStats playerSkill = MWWorld::Class::get(playerPtr).getNpcStats(playerPtr); MWMechanics::CreatureStats playerStats = MWWorld::Class::get(playerPtr).getCreatureStats(playerPtr); - float a1 = std::min(playerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100); - float b1 = std::min(0.1 * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10); - float c1 = std::min(0.2 * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10); - float d1 = std::min(sellerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100); - float e1 = std::min(0.1 * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10); - float f1 = std::min(0.2 * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10); + float a1 = std::min(playerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f); + float b1 = std::min(0.1f * playerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f); + float c1 = std::min(0.2f * playerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f); + float d1 = std::min(sellerSkill.getSkill(ESM::Skill::Mercantile).getModified(), 100.f); + float e1 = std::min(0.1f * sellerStats.getAttribute(ESM::Attribute::Luck).getModified(), 10.f); + float f1 = std::min(0.2f * sellerStats.getAttribute(ESM::Attribute::Personality).getModified(), 10.f); float pcTerm = (clampedDisposition - 50 + a1 + b1 + c1) * playerStats.getFatigueTerm(); float npcTerm = (d1 + e1 + f1) * sellerStats.getFatigueTerm(); diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp index 240937b7ca..3d49e32c59 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp @@ -396,6 +396,9 @@ namespace MWMechanics int MechanicsManager::barterOffer(const MWWorld::Ptr& ptr,int basePrice, bool buying) { + if (ptr.getTypeName() == typeid(ESM::Creature).name()) + return basePrice; + MWMechanics::NpcStats sellerSkill = MWWorld::Class::get(ptr).getNpcStats(ptr); MWMechanics::CreatureStats sellerStats = MWWorld::Class::get(ptr).getCreatureStats(ptr); @@ -419,12 +422,10 @@ namespace MWMechanics float x; if(buying) x = buyTerm; else x = std::min(buyTerm, sellTerm); - //std::cout << "x" << x; int offerPrice; if (x < 1) offerPrice = int(x * basePrice); if (x >= 1) offerPrice = basePrice + int((x - 1) * basePrice); offerPrice = std::max(1, offerPrice); - //std::cout <<"barteroffer"<< offerPrice << " " << basePrice << "\n"; return offerPrice; } }