void NpcEventListener::event(Event::Channel channel, const Event &event) { if (channel != Event::NpcChannel) return; if (event.getType() == Event::Message) { NpcDialog *dialog = getDialog(event.getInt("id")); dialog->addText(event.getString("text")); } else if (event.getType() == Event::Menu) { NpcDialog *dialog = getDialog(event.getInt("id")); dialog->choiceRequest(); int count = event.getInt("choiceCount"); for (int i = 1; i <= count; i++) dialog->addChoice(event.getString("choice" + toString(i))); dialog->initChoiceSelection(); } else if (event.getType() == Event::IntegerInput) { NpcDialog *dialog = getDialog(event.getInt("id")); int defaultValue = event.getInt("default", 0); int min = event.getInt("min", 0); int max = event.getInt("max", 2147483647); dialog->integerRequest(defaultValue, min, max); } else if (event.getType() == Event::StringInput) { NpcDialog *dialog = getDialog(event.getInt("id")); try { dialog->textRequest(event.getString("default")); } catch (BadEvent) { dialog->textRequest(""); } } else if (event.getType() == Event::Next) { int id = event.getInt("id"); NpcDialog *dialog = getDialog(id, false); if (!dialog) { int mNpcId = id; Net::getNpcHandler()->nextDialog(mNpcId); return; } dialog->showNextButton(); } else if (event.getType() == Event::Close) { int id = event.getInt("id"); NpcDialog *dialog = getDialog(id, false); if (!dialog) { int mNpcId = id; Net::getNpcHandler()->closeDialog(mNpcId); return; } dialog->showCloseButton(); } else if (event.getType() == Event::CloseAll) { NpcDialog::closeAll(); } else if (event.getType() == Event::End) { int id = event.getInt("id"); NpcDialog *dialog = getDialog(id, false); if (dialog) dialog->close(); } else if (event.getType() == Event::Post) { new NpcPostDialog(event.getInt("id")); } }