Refactor scenario loading code so that valid data doesn't produce tons of bad_lexical_cast exceptions that are then caught and ignored

This commit is contained in:
2015-06-01 15:25:31 -04:00
parent ae3970aad1
commit 5606f3e91e
2 changed files with 174 additions and 177 deletions

View File

@@ -1392,50 +1392,49 @@ std::istream& operator >> (std::istream& in, eSkill& e){
std::string key;
in >> key;
e = eSkill::INVALID;
try {
if(key == "str")
e = eSkill::STRENGTH;
else if(key == "dex")
e = eSkill::DEXTERITY;
else if(key == "int")
e = eSkill::INTELLIGENCE;
else if(key == "edged")
e = eSkill::EDGED_WEAPONS;
else if(key == "bashing")
e = eSkill::BASHING_WEAPONS;
else if(key == "pole")
e = eSkill::POLE_WEAPONS;
else if(key == "thrown")
e = eSkill::THROWN_MISSILES;
else if(key == "archery")
e = eSkill::ARCHERY;
else if(key == "defense")
e = eSkill::DEFENSE;
else if(key == "mage")
e = eSkill::MAGE_SPELLS;
else if(key == "priest")
e = eSkill::PRIEST_SPELLS;
else if(key == "mage-lore")
e = eSkill::MAGE_LORE;
else if(key == "alchemy")
e = eSkill::ALCHEMY;
else if(key == "item-lore")
e = eSkill::ITEM_LORE;
else if(key == "traps")
e = eSkill::DISARM_TRAPS;
else if(key == "lockpick")
e = eSkill::LOCKPICKING;
else if(key == "assassin")
e = eSkill::ASSASSINATION;
else if(key == "poison")
e = eSkill::POISON;
else if(key == "luck")
e = eSkill::LUCK;
else try {
int i = boost::lexical_cast<int>(key);
if(i >= 0 && i < 19)
e = (eSkill) i;
} catch(boost::bad_lexical_cast) {
if(key == "str")
e = eSkill::STRENGTH;
else if(key == "dex")
e = eSkill::DEXTERITY;
else if(key == "int")
e = eSkill::INTELLIGENCE;
else if(key == "edged")
e = eSkill::EDGED_WEAPONS;
else if(key == "bashing")
e = eSkill::BASHING_WEAPONS;
else if(key == "pole")
e = eSkill::POLE_WEAPONS;
else if(key == "thrown")
e = eSkill::THROWN_MISSILES;
else if(key == "archery")
e = eSkill::ARCHERY;
else if(key == "defense")
e = eSkill::DEFENSE;
else if(key == "mage")
e = eSkill::MAGE_SPELLS;
else if(key == "priest")
e = eSkill::PRIEST_SPELLS;
else if(key == "mage-lore")
e = eSkill::MAGE_LORE;
else if(key == "alchemy")
e = eSkill::ALCHEMY;
else if(key == "item-lore")
e = eSkill::ITEM_LORE;
else if(key == "traps")
e = eSkill::DISARM_TRAPS;
else if(key == "lockpick")
e = eSkill::LOCKPICKING;
else if(key == "assassin")
e = eSkill::ASSASSINATION;
else if(key == "poison")
e = eSkill::POISON;
else if(key == "luck")
e = eSkill::LUCK;
}
} catch(boost::bad_lexical_cast) {}
return in;
}
@@ -1443,66 +1442,67 @@ std::istream& operator >> (std::istream& in, eItemType& e){
std::string key;
in >> key;
e = eItemType::NO_ITEM;
try {
if(key == "weapon-1hand")
e = eItemType::ONE_HANDED;
else if(key == "weapon-2hand")
e = eItemType::TWO_HANDED;
else if(key == "gold")
e = eItemType::GOLD;
else if(key == "bow")
e = eItemType::BOW;
else if(key == "arrow")
e = eItemType::ARROW;
else if(key == "thrown-missile")
e = eItemType::THROWN_MISSILE;
else if(key == "potion")
e = eItemType::POTION;
else if(key == "scroll")
e = eItemType::SCROLL;
else if(key == "wand")
e = eItemType::WAND;
else if(key == "tool")
e = eItemType::TOOL;
else if(key == "food")
e = eItemType::FOOD;
else if(key == "shield")
e = eItemType::SHIELD;
else if(key == "shield2")
e = eItemType::SHIELD_2;
else if(key == "armor")
e = eItemType::ARMOR;
else if(key == "helm")
e = eItemType::HELM;
else if(key == "gloves")
e = eItemType::GLOVES;
else if(key == "boots")
e = eItemType::BOOTS;
else if(key == "ring")
e = eItemType::RING;
else if(key == "necklace")
e = eItemType::NECKLACE;
else if(key == "poison")
e = eItemType::WEAPON_POISON;
else if(key == "object")
e = eItemType::NON_USE_OBJECT;
else if(key == "pants")
e = eItemType::PANTS;
else if(key == "crossbow")
e = eItemType::CROSSBOW;
else if(key == "bolts")
e = eItemType::BOLTS;
else if(key == "missile")
e = eItemType::MISSILE_NO_AMMO;
else if(key == "special")
e = eItemType::SPECIAL;
else if(key == "quest")
e = eItemType::QUEST;
else if(key == "none")
e = eItemType::NO_ITEM;
else try {
int i = boost::lexical_cast<int>(key);
if(i > 0 && i < 28)
e = (eItemType) i;
} catch(boost::bad_lexical_cast) {
if(key == "weapon-1hand")
e = eItemType::ONE_HANDED;
else if(key == "weapon-2hand")
e = eItemType::TWO_HANDED;
else if(key == "gold")
e = eItemType::GOLD;
else if(key == "bow")
e = eItemType::BOW;
else if(key == "arrow")
e = eItemType::ARROW;
else if(key == "thrown-missile")
e = eItemType::THROWN_MISSILE;
else if(key == "potion")
e = eItemType::POTION;
else if(key == "scroll")
e = eItemType::SCROLL;
else if(key == "wand")
e = eItemType::WAND;
else if(key == "tool")
e = eItemType::TOOL;
else if(key == "food")
e = eItemType::FOOD;
else if(key == "shield")
e = eItemType::SHIELD;
else if(key == "shield2")
e = eItemType::SHIELD_2;
else if(key == "armor")
e = eItemType::ARMOR;
else if(key == "helm")
e = eItemType::HELM;
else if(key == "gloves")
e = eItemType::GLOVES;
else if(key == "boots")
e = eItemType::BOOTS;
else if(key == "ring")
e = eItemType::RING;
else if(key == "necklace")
e = eItemType::NECKLACE;
else if(key == "poison")
e = eItemType::WEAPON_POISON;
else if(key == "object")
e = eItemType::NON_USE_OBJECT;
else if(key == "pants")
e = eItemType::PANTS;
else if(key == "crossbow")
e = eItemType::CROSSBOW;
else if(key == "bolts")
e = eItemType::BOLTS;
else if(key == "missile")
e = eItemType::MISSILE_NO_AMMO;
else if(key == "special")
e = eItemType::SPECIAL;
else if(key == "quest")
e = eItemType::QUEST;
}
} catch(boost::bad_lexical_cast) {}
return in;
}
@@ -1510,20 +1510,19 @@ std::istream& operator >> (std::istream& in, eItemUse& e){
std::string key;
in >> key;
e = eItemUse::HELP_ONE;
try {
if(key == "help-one")
e = eItemUse::HELP_ONE;
else if(key == "harm-one")
e = eItemUse::HARM_ONE;
else if(key == "help-all")
e = eItemUse::HELP_ALL;
else if(key == "harm-all")
e = eItemUse::HARM_ALL;
else try {
int i = boost::lexical_cast<int>(key);
if(i > 0 && i < 4)
e = (eItemUse) i;
} catch(boost::bad_lexical_cast) {
if(key == "help-one")
e = eItemUse::HELP_ONE;
else if(key == "harm-one")
e = eItemUse::HARM_ONE;
else if(key == "help-all")
e = eItemUse::HELP_ALL;
else if(key == "harm-all")
e = eItemUse::HARM_ALL;
}
} catch(boost::bad_lexical_cast) {}
return in;
}

View File

@@ -487,56 +487,55 @@ std::istream& operator >> (std::istream& in, eRace& e){
std::string key;
in >> key;
e = eRace::HUMANOID;
try {
if(key == "human")
e = eRace::HUMAN;
else if(key == "nephil")
e = eRace::NEPHIL;
else if(key == "slith")
e = eRace::SLITH;
else if(key == "vahnatai")
e = eRace::VAHNATAI;
else if(key == "humanoid")
e = eRace::HUMANOID;
else if(key == "beast")
e = eRace::BEAST;
else if(key == "bird")
e = eRace::BIRD;
else if(key == "bug")
e = eRace::BUG;
else if(key == "demon")
e = eRace::DEMON;
else if(key == "dragon")
e = eRace::DRAGON;
else if(key == "giant")
e = eRace::GIANT;
else if(key == "important")
e = eRace::IMPORTANT;
else if(key == "mage")
e = eRace::MAGE;
else if(key == "priest")
e = eRace::PRIEST;
else if(key == "magic")
e = eRace::MAGICAL;
else if(key == "plant")
e = eRace::PLANT;
else if(key == "reptile")
e = eRace::REPTILE;
else if(key == "slime")
e = eRace::SLIME;
else if(key == "stone")
e = eRace::STONE;
else if(key == "undead")
e = eRace::UNDEAD;
else if(key == "skeletal")
e = eRace::SKELETAL;
else if(key == "goblin")
e = eRace::GOBLIN;
else try {
int i = boost::lexical_cast<int>(key);
if(i >= 0 && i < 20)
e = (eRace) i;
} catch(boost::bad_lexical_cast) {
if(key == "human")
e = eRace::HUMAN;
else if(key == "nephil")
e = eRace::NEPHIL;
else if(key == "slith")
e = eRace::SLITH;
else if(key == "vahnatai")
e = eRace::VAHNATAI;
else if(key == "humanoid")
e = eRace::HUMANOID;
else if(key == "beast")
e = eRace::BEAST;
else if(key == "bird")
e = eRace::BIRD;
else if(key == "bug")
e = eRace::BUG;
else if(key == "demon")
e = eRace::DEMON;
else if(key == "dragon")
e = eRace::DRAGON;
else if(key == "giant")
e = eRace::GIANT;
else if(key == "important")
e = eRace::IMPORTANT;
else if(key == "mage")
e = eRace::MAGE;
else if(key == "priest")
e = eRace::PRIEST;
else if(key == "magic")
e = eRace::MAGICAL;
else if(key == "plant")
e = eRace::PLANT;
else if(key == "reptile")
e = eRace::REPTILE;
else if(key == "slime")
e = eRace::SLIME;
else if(key == "stone")
e = eRace::STONE;
else if(key == "undead")
e = eRace::UNDEAD;
else if(key == "skeletal")
e = eRace::SKELETAL;
else if(key == "goblin")
e = eRace::GOBLIN;
}
} catch(boost::bad_lexical_cast) {}
return in;
}
@@ -559,32 +558,31 @@ std::istream& operator >> (std::istream& in, eMonstTime& e){
std::string key;
in >> key;
e = eMonstTime::ALWAYS;
try {
if(key == "always")
e = eMonstTime::ALWAYS;
else if(key == "after-day")
e = eMonstTime::APPEAR_ON_DAY;
else if(key == "until-day")
e = eMonstTime::DISAPPEAR_ON_DAY;
else if(key == "travel-a")
e = eMonstTime::SOMETIMES_A;
else if(key == "travel-b")
e = eMonstTime::SOMETIMES_B;
else if(key == "travel-c")
e = eMonstTime::SOMETIMES_C;
else if(key == "after-event")
e = eMonstTime::APPEAR_WHEN_EVENT;
else if(key == "until-event")
e = eMonstTime::DISAPPEAR_WHEN_EVENT;
else if(key == "after-death")
e = eMonstTime::APPEAR_AFTER_CHOP;
else try {
int i = boost::lexical_cast<int>(key);
if(i >= 0 && i != 3 && i < 6)
e = eMonstTime(i);
else if(i > 6 && i <= 8)
e = eMonstTime(i - 1);
} catch(boost::bad_lexical_cast) {
if(key == "always")
e = eMonstTime::ALWAYS;
else if(key == "after-day")
e = eMonstTime::APPEAR_ON_DAY;
else if(key == "until-day")
e = eMonstTime::DISAPPEAR_ON_DAY;
else if(key == "travel-a")
e = eMonstTime::SOMETIMES_A;
else if(key == "travel-b")
e = eMonstTime::SOMETIMES_B;
else if(key == "travel-c")
e = eMonstTime::SOMETIMES_C;
else if(key == "after-event")
e = eMonstTime::APPEAR_WHEN_EVENT;
else if(key == "until-event")
e = eMonstTime::DISAPPEAR_WHEN_EVENT;
else if(key == "after-death")
e = eMonstTime::APPEAR_AFTER_CHOP;
}
} catch(boost::bad_lexical_cast) {}
return in;
}