1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-13 20:09:40 +00:00

implemented "goodbye" script function that force-cancels dialogue

This commit is contained in:
scrawl 2012-05-11 07:18:41 +02:00
parent 37095b62c6
commit c4aae96d94
6 changed files with 44 additions and 1 deletions

View file

@ -883,4 +883,11 @@ namespace MWDialogue
} }
return factionID; return factionID;
} }
void DialogueManager::goodbye()
{
MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow();
win->goodbye();
}
} }

View file

@ -56,6 +56,8 @@ namespace MWDialogue
void askQuestion(std::string question,int choice); void askQuestion(std::string question,int choice);
void goodbye();
///get the faction of the actor you are talking with ///get the faction of the actor you are talking with
std::string getFaction(); std::string getFaction();

View file

@ -39,6 +39,7 @@ std::string::size_type find_str_ci(const std::string& str, const std::string& su
DialogueWindow::DialogueWindow(WindowManager& parWindowManager) DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
: WindowBase("openmw_dialogue_window_layout.xml", parWindowManager) : WindowBase("openmw_dialogue_window_layout.xml", parWindowManager)
, mEnabled(true)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -64,6 +65,7 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
MyGUI::ButtonPtr byeButton; MyGUI::ButtonPtr byeButton;
getWidget(byeButton, "ByeButton"); getWidget(byeButton, "ByeButton");
byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked); byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
byeButton->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str);
getWidget(pDispositionBar, "Disposition"); getWidget(pDispositionBar, "Disposition");
getWidget(pDispositionText,"DispositionText"); getWidget(pDispositionText,"DispositionText");
@ -81,6 +83,10 @@ void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender)
size_t cursorPosition = t->getCursorPosition(lastPressed); size_t cursorPosition = t->getCursorPosition(lastPressed);
MyGUI::UString color = history->getColorAtPos(cursorPosition); MyGUI::UString color = history->getColorAtPos(cursorPosition);
if (!mEnabled && color == "#572D21")
MWBase::Environment::get().getDialogueManager()->goodbyeSelected();
if(color != "#B29154") if(color != "#B29154")
{ {
UString key = history->getColorTextAt(cursorPosition); UString key = history->getColorTextAt(cursorPosition);
@ -119,11 +125,15 @@ void DialogueWindow::onByeClicked(MyGUI::Widget* _sender)
void DialogueWindow::onSelectTopic(std::string topic) void DialogueWindow::onSelectTopic(std::string topic)
{ {
if (!mEnabled) return;
MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(topic)); MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(topic));
} }
void DialogueWindow::startDialogue(std::string npcName) void DialogueWindow::startDialogue(std::string npcName)
{ {
mEnabled = true;
topicsList->setEnabled(true);
static_cast<MyGUI::Window*>(mMainWidget)->setCaption(npcName); static_cast<MyGUI::Window*>(mMainWidget)->setCaption(npcName);
adjustWindowCaption(); adjustWindowCaption();
} }
@ -224,3 +234,10 @@ void DialogueWindow::updateOptions()
pDispositionText->eraseText(0,pDispositionText->getTextLength()); pDispositionText->eraseText(0,pDispositionText->getTextLength());
pDispositionText->addText("#B29154"+std::string("40/100")+"#B29154"); pDispositionText->addText("#B29154"+std::string("40/100")+"#B29154");
} }
void DialogueWindow::goodbye()
{
history->addDialogText("\n#572D21" + MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str);
topicsList->setEnabled(false);
mEnabled = false;
}

View file

@ -45,6 +45,7 @@ namespace MWGui
void addText(std::string text); void addText(std::string text);
void addTitle(std::string text); void addTitle(std::string text);
void askQuestion(std::string question); void askQuestion(std::string question);
void goodbye();
protected: protected:
void onSelectTopic(std::string topic); void onSelectTopic(std::string topic);
@ -60,6 +61,8 @@ namespace MWGui
*/ */
std::string parseText(std::string text); std::string parseText(std::string text);
bool mEnabled;
DialogueHistory* history; DialogueHistory* history;
Widgets::MWList* topicsList; Widgets::MWList* topicsList;
MyGUI::ProgressPtr pDispositionBar; MyGUI::ProgressPtr pDispositionBar;

View file

@ -115,6 +115,16 @@ namespace MWScript
} }
}; };
class OpGoodbye : public Interpreter::Opcode0
{
public:
virtual void execute(Interpreter::Runtime& runtime)
{
MWBase::Environment::get().getDialogueManager()->goodbye();
}
};
const int opcodeJournal = 0x2000133; const int opcodeJournal = 0x2000133;
const int opcodeSetJournalIndex = 0x2000134; const int opcodeSetJournalIndex = 0x2000134;
const int opcodeGetJournalIndex = 0x2000135; const int opcodeGetJournalIndex = 0x2000135;
@ -122,6 +132,7 @@ namespace MWScript
const int opcodeChoice = 0x2000a; const int opcodeChoice = 0x2000a;
const int opcodeForceGreeting = 0x200014f; const int opcodeForceGreeting = 0x200014f;
const int opcodeForceGreetingExplicit = 0x2000150; const int opcodeForceGreetingExplicit = 0x2000150;
const int opcodeGoodbye = 0x2000152;
void registerExtensions (Compiler::Extensions& extensions) void registerExtensions (Compiler::Extensions& extensions)
{ {
@ -133,6 +144,7 @@ namespace MWScript
extensions.registerInstruction("forcegreeting","",opcodeForceGreeting); extensions.registerInstruction("forcegreeting","",opcodeForceGreeting);
extensions.registerInstruction("forcegreeting","",opcodeForceGreeting, extensions.registerInstruction("forcegreeting","",opcodeForceGreeting,
opcodeForceGreetingExplicit); opcodeForceGreetingExplicit);
extensions.registerInstruction("goodbye", "", opcodeGoodbye);
} }
void installOpcodes (Interpreter::Interpreter& interpreter) void installOpcodes (Interpreter::Interpreter& interpreter)
@ -144,6 +156,7 @@ namespace MWScript
interpreter.installSegment3 (opcodeChoice,new OpChoice); interpreter.installSegment3 (opcodeChoice,new OpChoice);
interpreter.installSegment5 (opcodeForceGreeting, new OpForceGreeting<ImplicitRef>); interpreter.installSegment5 (opcodeForceGreeting, new OpForceGreeting<ImplicitRef>);
interpreter.installSegment5 (opcodeForceGreetingExplicit, new OpForceGreeting<ExplicitRef>); interpreter.installSegment5 (opcodeForceGreetingExplicit, new OpForceGreeting<ExplicitRef>);
interpreter.installSegment5 (opcodeGoodbye, new OpGoodbye);
} }
} }

View file

@ -145,4 +145,5 @@ op 0x200014e: ModDisposition, explicit reference
op 0x200014f: ForceGreeting op 0x200014f: ForceGreeting
op 0x2000150: ForceGreeting, explicit reference op 0x2000150: ForceGreeting, explicit reference
op 0x2000151: ToggleFullHelp op 0x2000151: ToggleFullHelp
opcodes 0x2000152-0x3ffffff unused op 0x2000152: Goodbye
opcodes 0x2000153-0x3ffffff unused