Add all artifacts/spells/skills to quest widget lists and disable banned

Previous code added at most as many items as were in allowed lists, which caused to skip last items if some were banned.
This commit is contained in:
godric3
2024-09-21 21:54:29 +02:00
parent 658c359bc7
commit e61ef459c6
+19 -16
View File
@@ -48,48 +48,51 @@ QuestWidget::QuestWidget(MapController & _controller, CQuest & _sh, QWidget *par
}
//fill artifacts
for(int i = 0; i < controller.map()->allowedArtifact.size(); ++i)
for(auto const & artifactPtr : VLC->arth->objects)
{
auto * item = new QListWidgetItem(QString::fromStdString(VLC->artifacts()->getByIndex(i)->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(i));
auto artifactIndex = artifactPtr->getIndex();
auto * item = new QListWidgetItem(QString::fromStdString(artifactPtr->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(artifactIndex));
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
if(controller.map()->allowedArtifact.count(i) == 0)
if(controller.map()->allowedArtifact.count(artifactIndex) == 0)
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
ui->lArtifacts->addItem(item);
}
//fill spells
for(int i = 0; i < controller.map()->allowedSpells.size(); ++i)
for(auto const & spellPtr : VLC->spellh->objects)
{
auto * item = new QListWidgetItem(QString::fromStdString(VLC->spells()->getByIndex(i)->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(i));
auto spellIndex = spellPtr->getIndex();
auto * item = new QListWidgetItem(QString::fromStdString(spellPtr->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(spellIndex));
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
if(controller.map()->allowedSpells.count(i) == 0)
if(controller.map()->allowedSpells.count(spellIndex) == 0)
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
ui->lSpells->addItem(item);
}
//fill skills
ui->lSkills->setRowCount(controller.map()->allowedAbilities.size());
for(int i = 0; i < controller.map()->allowedAbilities.size(); ++i)
ui->lSkills->setRowCount(VLC->skillh->objects.size());
for(auto const & skillPtr : VLC->skillh->objects)
{
auto * item = new QTableWidgetItem(QString::fromStdString(VLC->skills()->getByIndex(i)->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(i));
auto skillIndex = skillPtr->getIndex();
auto * item = new QTableWidgetItem(QString::fromStdString(skillPtr->getNameTranslated()));
item->setData(Qt::UserRole, QVariant::fromValue(skillIndex));
auto * widget = new QComboBox;
for(auto & s : NSecondarySkill::levels)
widget->addItem(QString::fromStdString(s));
if(controller.map()->allowedAbilities.count(i) == 0)
if(controller.map()->allowedAbilities.count(skillIndex) == 0)
{
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
widget->setEnabled(false);
}
ui->lSkills->setItem(i, 0, item);
ui->lSkills->setCellWidget(i, 1, widget);
ui->lSkills->setItem(skillIndex, 0, item);
ui->lSkills->setCellWidget(skillIndex, 1, widget);
}
//fill creatures
@@ -156,7 +159,7 @@ void QuestWidget::obtainData()
for(auto i : quest.mission.artifacts)
ui->lArtifacts->item(VLC->artifacts()->getById(i)->getIndex())->setCheckState(Qt::Checked);
for(auto i : quest.mission.spells)
ui->lArtifacts->item(VLC->spells()->getById(i)->getIndex())->setCheckState(Qt::Checked);
ui->lSpells->item(VLC->spells()->getById(i)->getIndex())->setCheckState(Qt::Checked);
for(auto & i : quest.mission.secondary)
{
int index = VLC->skills()->getById(i.first)->getIndex();