SBYTE CUIQuestBook::GetQuestType(const INDEX& iQuestIndex) { CUIManager* pUIManager = CUIManager::getSingleton(); Quest* pQuest = GAMEDATAMGR()->GetQuest(); if (pQuest == NULL) return 0; int iTempIndex = -1; int count; count = pQuest->GetCompleteQuestCount(); for( int iComplete = 0; iComplete < count; ++iComplete ) { iTempIndex = pQuest->GetCompleteQuestIndex(iComplete); if( iQuestIndex == iTempIndex ) return 2; } count = pQuest->GetProceedQuestCount(); for( int iNew = 0; iNew < count; ++iNew ) { iTempIndex = pQuest->GetProceedQuestIndex(iNew); if( iQuestIndex == iTempIndex ) return 1; } return 0; }
CeGuiString SetProcessor::process(DOMNode* node,Match* match, const CeGuiString& str, NaturalLanguageProcessor* nlp) { CeGuiString propertyType = XmlHelper::getAttributeValueAsString( static_cast<DOMElement*>(node), "type" ); CeGuiString propertyName = XmlHelper::getAttributeValueAsString( static_cast<DOMElement*>(node), "name" ); CeGuiString propertyValue; DOMNode* childNode = node->getFirstChild(); if( childNode->getNodeType() == DOMNode::TEXT_NODE ) { propertyValue = XmlHelper::transcodeToString( static_cast<DOMText*>(childNode)->getData()); } if(propertyType == "quest") { Quest* quest = RulesSubsystem::getSingletonPtr()->getQuestBook() ->getQuest(propertyName); if(quest != NULL) { Quest::State state = static_cast<Quest::State>( Quest::getStateFromName(propertyValue)); quest->setState(state); } } else { nlp->getPredicates().setPredicate(propertyName, "default", propertyValue); } return ""; }
void PlayerQuests::finishQuest(int16_t questid, int32_t npcid) { Quest *questinfo = QuestDataProvider::Instance()->getInfo(questid); if (!giveRewards(questid, false)) { // Failed, don't complete the quest yet return; } if (questinfo->hasMobRequests()) { for (MobRequests::iterator i = questinfo->getMobBegin(); i != questinfo->getMobEnd(); i++) { for (size_t k = 0; k < m_mobtoquest[i->first].size(); k++) { if (m_mobtoquest[i->first][k] == questid) { if (m_mobtoquest[i->first].size() == 1) { // Only one quest for this mob m_mobtoquest.erase(i->first); } else { m_mobtoquest[i->first].erase(m_mobtoquest[i->first].begin() + k); } break; } } } } m_quests.erase(questid); int64_t endtime = TimeUtilities::getServerTime(); m_completed[questid] = endtime; QuestsPacket::questFinish(m_player, questid, npcid, questinfo->getNextQuest(), endtime); }
CeGuiString GetProcessor::process(DOMNode* node,Match* match, const CeGuiString& str, NaturalLanguageProcessor* nlp) { CeGuiString propertyType = XmlHelper::getAttributeValueAsString( static_cast<DOMElement*>(node), "type" ); CeGuiString propertyName = XmlHelper::getAttributeValueAsString( static_cast<DOMElement*>(node), "name" ); CeGuiString rVal; if(propertyType == "quest") { Quest* quest = RulesSubsystem::getSingletonPtr()->getQuestBook() ->getQuest(propertyName); if(quest != NULL) { rVal = quest->getState(); } } else { rVal = nlp->getPredicates().getPredicate(propertyName, "default"); } return rVal; }
/** * @brief Creates a quest files model. * @param parent Path of the quest to represent. */ QuestFilesModel::QuestFilesModel(Quest& quest): QSortFilterProxyModel(nullptr), quest(quest), source_model(new QFileSystemModel) { // Watch changes on the filesystem. source_model->setRootPath(quest.get_data_path()); // Only watch changes in the data directory. source_model->setReadOnly(false); setSourceModel(source_model); // Watch changes in resources. connect(&quest.get_resources(), SIGNAL(element_added(ResourceType, QString, QString)), this, SLOT(resource_element_added(ResourceType, QString, QString))); connect(&quest.get_resources(), SIGNAL(element_removed(ResourceType, QString)), this, SLOT(resource_element_removed(ResourceType, QString))); connect(&quest.get_resources(), SIGNAL(element_renamed(ResourceType, QString, QString)), this, SLOT(resource_element_renamed(ResourceType, QString, QString))); connect(&quest.get_resources(), SIGNAL(element_description_changed(ResourceType, QString, QString)), this, SLOT(resource_element_description_changed(ResourceType, QString, QString))); // This model adds extra items for files missing on the filesystem. // To ensure we have an extra item if and only if the file is missing, // we need to watch files creations and destructions. connect(source_model, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(source_model_rows_inserted(QModelIndex, int, int))); connect(source_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), SLOT(source_model_rows_about_to_be_removed(QModelIndex, int, int))); }
//Quest void UQuestManager::loadQuests(AActor* worldSource) { UE_LOG(LogQuestSystem, Log, TEXT("start loading quests")); QuestConverter* converter = QuestConverter::getInstance(); TArray<DDObject*> loaded = DDReg::load("quests"); if (loaded.Num() <= 0) { UE_LOG(LogQuestSystem, Error, TEXT("No Quests have been loaded.")); UE_LOG(LogQuestSystem, Error, TEXT(" This might be because of errors in the JSON-File.")); UE_LOG(LogQuestSystem, Error, TEXT(" Check if there are missplaced commas, brackets or tags.")); } for (DDObject* ddo : loaded) { Quest* quest = static_cast<Quest*>(ddo); UE_LOG(LogQuestSystem, Log, TEXT(" quests %s"), *quest->getID()); if (quest != NULL) { UBlueprintQuest* bpQuest = quest->getBlueprint(); bpQuest->setWorld(worldSource->GetWorld()); _questsMap.Add(quest->getID(), quest->getBlueprint()); } } UE_LOG(LogQuestSystem, Log, TEXT("end loading quests")); }
/** * @brief Opens a file with a language strings list editor in a new tab. * @param quest A Solarus quest. * @param language_id Language id of the strings file to open. */ void EditorTabs::open_strings_editor( Quest& quest, const QString& language_id) { // Get the strings file path. QString path = quest.get_strings_path(language_id); if (!quest.is_in_root_path(path)) { // Not a file of this quest. return; } // Find the existing tab if any. int index = find_editor(path); if (index != -1) { // Already open. setCurrentIndex(index); return; } try { add_editor(new StringsEditor(quest, language_id)); } catch (const EditorException& ex) { ex.show_dialog(); } }
/** * Sets that the quest has been finished, this will return false is the quest has already * been finished. If the quest is finished then the "finishQuest" event will be fired. * * @returns boolean True if the quest was finished, false indicates that the quest has alrady been finished. */ int Quest_finish_quest(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest) { lua_pushboolean(lua, quest->finishQuest()); return 1; } return LuaState::expectedContext(lua, "finish_quest", "am.quest"); }
/** * Returns true when there is an event listener for the given event name. * @param string event_name The event type to look up. * @returns boolean True if there is any event listener * that will be trigged by this event type. */ int Quest_has_event_listener(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest && lua_isstr(lua, 2)) { lua_pushboolean(lua, quest->hasEventListener(lua_tostring(lua, 2))); return 1; } return LuaState::expectedContext(lua, "has_event_listener", "am.quest"); }
/** * Releases the reference on the internal quest. */ int Quest_dtor(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest) { quest->release(); return 0; } return LuaState::expectedContext(lua, "__gc", "am.quest"); }
void PlayerQuests::addQuestMobs(int16_t questid) { Quest *questinfo = QuestDataProvider::Instance()->getInfo(questid); if (questinfo->hasMobRequests()) { size_t index = 0; for (MobRequests::iterator i = questinfo->getMobBegin(); i != questinfo->getMobEnd(); i++) { m_quests[questid].kills[i->first] = 0; m_mobtoquest[i->first].push_back(questid); } } }
Quest* QuestManager::CreateQuest(string name, string startText, string completedText, string denyText) { Quest* pQuest = new Quest(name, startText, completedText, denyText); pQuest->SetNPCManager(m_pNPCManager); pQuest->SetInventoryManager(m_pInventoryManager); pQuest->SetQuestJournal(m_pQuestJournal); m_vpQuestList.push_back(pQuest); return pQuest; }
void CUIQuestBook::AddQuestListToMessageBoxL(const int& iMessageBoxType) { CUIManager* pUIManager = CUIManager::getSingleton(); Quest* pQuest = GAMEDATAMGR()->GetQuest(); if (pQuest == NULL) return; int iQuestIndex = -1; CTString strQuestTitle; int count; count = pQuest->GetCompleteQuestCount(); for( int iComplete = 0; iComplete < count; ++iComplete ) { iQuestIndex = pQuest->GetCompleteQuestIndex(iComplete); CQuestDynamicData qdd(CQuestSystem::Instance().GetStaticData(iQuestIndex)); strQuestTitle = qdd.GetName(); if( 0 == strQuestTitle.Length() ) { if (_pNetwork->m_ubGMLevel > 1) strQuestTitle.PrintF("Index : %d", iQuestIndex); else continue; } pUIManager->AddMessageBoxLString( iMessageBoxType, FALSE, strQuestTitle, ciQuestClassifier + iQuestIndex, 0xF2F200FF, CTString("A") ); } count = pQuest->GetProceedQuestCount(); for( int iNew = 0; iNew < count; ++iNew ) { iQuestIndex = pQuest->GetProceedQuestIndex(iNew); CQuestDynamicData qdd(CQuestSystem::Instance().GetStaticData(iQuestIndex)); strQuestTitle = qdd.GetName(); if( 0 == strQuestTitle.Length() ) { if (_pNetwork->m_ubGMLevel > 1) strQuestTitle.PrintF("Index : %d", iQuestIndex); else continue; } pUIManager->AddMessageBoxLString( iMessageBoxType, FALSE, strQuestTitle, ciQuestClassifier + iQuestIndex, 0xF2F200FF, CTString("Q") ); } }
void PlayerQuests::checkDone(ActiveQuest &quest) { Quest *questinfo = QuestDataProvider::Instance()->getInfo(quest.id); quest.done = true; if (!questinfo->hasRequests()) { return; } if (questinfo->hasItemRequests()) { int32_t iid = 0; int16_t iamt = 0; for (ItemRequests::iterator i = questinfo->getItemBegin(); i != questinfo->getItemEnd(); i++) { iid = i->first; iamt = i->second; if ((m_player->getInventory()->getItemAmount(iid) < iamt && iamt > 0) || (iamt == 0 && m_player->getInventory()->getItemAmount(iid) != 0)) { quest.done = false; break; } } } else if (questinfo->hasMobRequests()) { int32_t killed = 0; for (MobRequests::iterator i = questinfo->getMobBegin(); i != questinfo->getMobEnd(); i++) { if (quest.kills[i->first] < i->second) { quest.done = false; break; } } } if (quest.done) { QuestsPacket::doneQuest(m_player, quest.id); } }
void Map::SendQuestEvent(const std::string &obj, short type) { for (auto it = quests.begin(); it != quests.end(); it++) { Quest *q = *it; if (q->GetType() == type && q->GetObjective() == obj) { int progress = q->Progress(); if (progress == 0) { it = quests.erase(it); delete q; if (it == quests.end()) return; } } } }
/** * @brief Creates a change source image dialog. * @param initial_source_image Initial value of the source image. * @param parent Parent object or nullptr. */ ChangeSourceImageDialog::ChangeSourceImageDialog( const Quest &quest, const QString& initial_source_image, QWidget* parent) : QDialog(parent), image_path(quest.get_sprite_image_path("")) { ui.setupUi(this); file_system_model.setRootPath(image_path); file_system_model.setNameFilters(QStringList("*.png")); file_system_model.setNameFilterDisables(false); ui.file_tree_view->setModel(&file_system_model); ui.file_tree_view->setRootIndex(file_system_model.index(image_path)); ui.file_tree_view->setSelectionMode(QAbstractItemView::SingleSelection); ui.file_tree_view->setHeaderHidden(true); ui.file_tree_view->setColumnHidden(1, true); ui.file_tree_view->setColumnHidden(2, true); ui.file_tree_view->setColumnHidden(3, true); scene.addItem(&image_item); ui.image_view->setScene(&scene); set_source_image(initial_source_image); connect(ui.tileset_value, SIGNAL(clicked()), this, SLOT(change_is_tileset_requested())); connect(ui.image_value, SIGNAL(clicked()), this, SLOT(change_is_tileset_requested())); connect(ui.file_tree_view->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(change_source_image_requested())); }
CeGuiString QuestPartsPredicates::getPredicate(const CeGuiString& name) const { Quest* quest = RulesSubsystem::getSingletonPtr()->getQuestBook() ->getQuest(name); if (quest == NULL) { Throw( IllegalArgumentException, ("Quest '" + name + "' not found").c_str()); } return PropertyHelper::intToString(quest->getPartsDone()); }
void Quest::load(Json::Value& questTree) { name = questTree[NAME_ATTRIBUTE].asString(); Json::Value& descriptionElement = questTree[DESCRIPTION_ELEMENT]; description = descriptionElement.isString() ? descriptionElement.asString() : ""; completed = questTree[COMPLETED_ATTRIBUTE].asBool(); optional = questTree[OPTIONAL_ATTRIBUTE].asBool(); Json::Value& subquestNode = questTree[QUEST_ELEMENT]; for(Json::Value::iterator iter = subquestNode.begin(); iter != subquestNode.end(); ++iter) { Quest* subquest = new Quest(*iter); subquests[subquest->getName()] = subquest; } }
int Quest::getPartsDone() const { if (!hasSubquests()) return mPartsDone; int done = 0; for(QuestVector::const_iterator it = mSubquests.begin(); it != mSubquests.end(); it++) { Quest* cur = (*it); if (cur->getState() == Quest::COMPLETED || cur->getState() == Quest::SUCCEEDED) done++; } return done; }
void JournalWindow::selectQuest(CEGUI::ListboxItem* item) { if (item == NULL) { mQuestDescription->setText(""); mQuestState->setText(""); mQuestTitle->setText(""); } else { Quest* quest = static_cast<Quest*>(item->getUserData()); mQuestState->setText(quest->getStateName()); mQuestTitle->setText(quest->getName()); mQuestDescription->setText(quest->getDescription()); } }
Quest *Creature::getNextAvailableQuest(Player *pPlayer, Quest *prevQuest) { Quest *pQuest; if ( prevQuest->m_qNextQuest != 0 ) { pQuest = objmgr.GetQuest( prevQuest->m_qNextQuest ); if (pQuest) { if ( pQuest->CanBeTaken(pPlayer) ) return pQuest; } } return NULL; }
void Questions::addQuest(Quest& quest) { if (!quest.valid()) return; int level = quest.level - 1; Q_ASSERT(level < MAX_QUEST_LIST && level >= 0); questVector.push_back(quest); }
/** * @brief OknoTawerny::przyjmij Zależnie od zaznaczenia przyjmuje oferowane zadanie albo odrzuca jedno z podjętych */ void TavernWindow::processQuest() { if (acceptQuestButton->text() == acceptText) { //NOTE do I really want string comparision? Maybe boolean flag? int index = availableQuestsWidget->currentRow(); player_->quests()->push_back(new Quest(availableQuests_->at(index))); player_->quest(player_->quests()->size() - 1)->setEmployerField(player_->position()); availableQuests_->removeAt(index); } else { Quest *quest = player_->quest(currentQuestsWidget->currentRow()); player_->removeQuest(quest->id()); questRejected = true; player_->setGold(qMax(0, player_->gold() - QuestDeclineCost)); playerWindow_->displayPlayer(player_); } fillQuestListWidgets(); acceptQuestButton->setEnabled(false); showDestinationButton->setEnabled(false); }
/** * @brief OknoTawerny::wyswietlOpisDlaMozliwych Wyświetla opis dla zadania oferowanego. * @param element dane zaznaczonego elementu */ void TavernWindow::displayAvailableQuest(const QModelIndex &index) { currentQuestsWidget->setCurrentRow(-1); Quest *quest = availableQuests_->at(index.row()); lastDisplayedQuest = quest; showDestinationButton->setEnabled(true); bool playerHasMaxQuests = player_->quests()->size() == MaximumNumberOfQuestsTaken; bool alreadyTaken; for (Quest *q : *player_->quests()) if (quest->id() == q->id()) alreadyTaken = true; acceptQuestButton->setEnabled(!playerHasMaxQuests && !alreadyTaken); acceptQuestButton->setText(acceptText); generateDescription(quest, questDescriptionWidget); }
void QuestBank::addQuests( const std::string& filePath ) { ParamParser p = ParamParser(filePath); p.parse(); p.moveToFirst(); while (p.hasNext()) { NameValueList* nvl = p.getNext(); Quest* q = new Quest(); q->setQuestion((*nvl)["q"]); q->setAnswer((*nvl)["ans"]); q->addSelection("a", (*nvl)["a"]); q->addSelection("b", (*nvl)["b"]); q->addSelection("c", (*nvl)["c"]); q->addSelection("d", (*nvl)["d"]); mQuests.push_back(q); } }
/** * Sets the active text, this should change to reflect how the player is progressing through the quest. * * @param string text The new active text. * @returns am.quest This */ int Quest_active_text(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest) { if (lua_gettop(lua) == 1) { lua_pushstring(lua, quest->getActiveText()); return 1; } else if (lua_isstr(lua, 2)) { quest->setActiveText(lua_tostring(lua, 2)); lua_first(lua); } return LuaState::expectedArgs(lua, "active_text", "string text"); } return LuaState::expectedContext(lua, "active_text", "am.quest"); }
/** * Sets the quest description. * * @param string description The new quest description. * @returns am.quest This */ int Quest_description(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest) { if (lua_gettop(lua) == 1) { lua_pushstring(lua, quest->getDescription()); return 1; } else if (lua_isstr(lua, 2)) { quest->setDescription(lua_tostring(lua, 2)); lua_first(lua); } return LuaState::expectedArgs(lua, "description", "string description"); } return LuaState::expectedContext(lua, "description", "am.quest"); }
/** * Silently sets the quest completed/finished flag, this does not fire any events. * * @param boolean completed Sets if the quest has been completed/finished. * @returns am.quest This */ int Quest_complete(lua_State *lua) { Quest *quest = castUData<Quest>(lua, 1); if (quest) { if (lua_gettop(lua) == 1) { lua_pushboolean(lua, quest->isCompleted()); return 1; } else if (lua_isbool(lua, 2)) { quest->setCompleted(lua_tobool(lua, 2)); lua_first(lua); } return LuaState::expectedArgs(lua, "complete", "boolean complete"); } return LuaState::expectedContext(lua, "complete", "am.quest"); }
/** * @brief Stops playing any music. * @param quest The quest. */ void stop_music(Quest& quest) { if (!initialized) { initialize(); } Solarus::Music::stop_playing(); quest.set_current_music_id(""); }
static int QuestL_Complete(lua_State* luaVM) { int nargs = lua_gettop(luaVM); switch(nargs) { case 1: { Quest* quest = luaW_check<Quest>(luaVM, 1); if(quest != NULL) { quest->complete(); } break; } } return 0; }