From d0e356d09e30a11c1e072415a5088f829d5c0a04 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 16 Jan 2022 21:32:01 -0500 Subject: Worked on features --- src/cmd/cmd_query.cc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/cmd/cmd_query.cc (limited to 'src/cmd/cmd_query.cc') diff --git a/src/cmd/cmd_query.cc b/src/cmd/cmd_query.cc new file mode 100644 index 0000000..9c2dae6 --- /dev/null +++ b/src/cmd/cmd_query.cc @@ -0,0 +1,48 @@ +#include "cmd.h" +#include "../utils.h" +#include "../creature.h" +#include "../dice.h" +#include "../weapon.h" +#include + +namespace cmd { + std::string attacks(std::vector args) { + std::stringstream text; + auto c = utils::instantiate(getTruePath(args[0])); + for(auto w : creature::getAttacks(*c)) { + text << w->getName() << std::endl; + } + return text.str(); + } + + std::string roll(std::vector args) { + std::stringstream text; + auto c = utils::instantiate(getTruePath(args[0])); + args.erase(args.begin()); + std::string rollName = utils::join(args, " "); + utils::lower(rollName); + int rolled = dice::roll(20); + // Search through skills, saves, and attacks to roll + if(rollName == "init" or rollName == "initiative") { + text << formatRoll("Initiative", "check", rolled, c->getInitiative()); + } + rules::Skill skill = rules::tryGetAbilityOrSkill(rollName); + rules::Ability ability = rules::tryGetAbilityOrSkill(rollName); + if(skill) { + text << formatRoll(skill.getName(), "check", rolled, c->getSkillBonus(skill)); + } else if(ability) { + text << formatRoll(ability.getFull(), "save", rolled, c->getAbilitySaveBonus(ability)); + } else { + for(auto w : creature::getAttacks(*c)) { + if(w->getName() == rollName) { + text << w->getText(*c) << std::endl; + int bonus = w->getToHitBonus(*c); + text << formatRoll(w->getName(), "attack", rolled, bonus); + text << " on hit: " << entry::formatDmg(*w, *c) << std::endl; + break; + } + } + } + return text.str(); + } +} -- cgit v1.2.3