Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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 "";
	}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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)));
}
Exemplo n.º 6
0
//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"));
}
Exemplo n.º 7
0
/**
 * @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();
  }
}
Exemplo n.º 8
0
	/**
	 * 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");
	}
Exemplo n.º 9
0
	/**
	 * 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");
	}
Exemplo n.º 10
0
	/**
	 * 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");
	}
Exemplo n.º 11
0
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);
		}
	}
}
Exemplo n.º 12
0
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;
}
Exemplo n.º 13
0
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") );
	}
}
Exemplo n.º 14
0
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);
	}
}
Exemplo n.º 15
0
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());
}
Exemplo n.º 18
0
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;
    }
}
Exemplo n.º 19
0
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;
}
Exemplo n.º 20
0
	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());
		}
	}
Exemplo n.º 21
0
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;		 
}
Exemplo n.º 22
0
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);
}
Exemplo n.º 23
0
/**
 * @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);
}
Exemplo n.º 24
0
/**
 * @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);
}
Exemplo n.º 25
0
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);
	}
}
Exemplo n.º 26
0
	/**
	 * 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");
	}
Exemplo n.º 27
0
	/**
	 * 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");
	}
Exemplo n.º 28
0
	/**
	 * 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");
	}
Exemplo n.º 29
0
/**
 * @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("");
}
Exemplo n.º 30
0
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;
}