Esempio n. 1
0
 /**
  * @param RangedWeaponCode $rangeWeaponCode
  * @return BowsTable|CrossbowsTable|ThrowingWeaponsTable
  * @throws UnknownRangedWeapon
  */
 public function getRangedWeaponsTableByRangedWeaponCode(RangedWeaponCode $rangeWeaponCode)
 {
     if ($rangeWeaponCode->isBow()) {
         return $this->getBowsTable();
     }
     if ($rangeWeaponCode->isCrossbow()) {
         return $this->getCrossbowsTable();
     }
     if ($rangeWeaponCode->isThrowingWeapon()) {
         return $this->getThrowingWeaponsTable();
     }
     throw new UnknownRangedWeapon("Unknown type of range weapon '{$rangeWeaponCode}'");
 }
Esempio n. 2
0
 /**
  * Bows get bonus to range from used strength (up to maximal strength applicable for given bow).
  * Other ranged weapons gets no range bonus (zero) from strength.
  *
  * @param RangedWeaponCode $rangedWeaponCode
  * @param Strength $currentStrength
  * @return int
  * @throws CanNotUseWeaponBecauseOfMissingStrength
  * @throws UnknownBow
  * @throws UnknownRangedWeapon
  */
 private function getEncounterRangeBonusByStrength(RangedWeaponCode $rangedWeaponCode, Strength $currentStrength)
 {
     if (!$rangedWeaponCode->isBow()) {
         return 0;
     }
     $currentStrength = $this->getApplicableStrength($rangedWeaponCode, $currentStrength);
     // the range bonus for bow is equal to strength applicable for it
     return min($this->tables->getBowsTable()->getMaximalApplicableStrengthOf($rangedWeaponCode), $currentStrength->getValue());
 }
 /**
  * @param RangedWeaponCode $rangeWeaponCode
  * @return int
  * @throws \DrdPlus\Skills\Combined\Exceptions\CombinedSkillsDoNotHowToUseThatWeapon
  */
 private function getFightWithShootingWeaponRankValue(RangedWeaponCode $rangeWeaponCode)
 {
     if ($rangeWeaponCode->isBow()) {
         return $this->getFightWithBows() ? $this->getFightWithBows()->getCurrentSkillRank()->getValue() : 0;
     }
     if ($rangeWeaponCode->isCrossbow()) {
         return $this->getFightWithCrossbows() ? $this->getFightWithCrossbows()->getCurrentSkillRank()->getValue() : 0;
     }
     throw new Exceptions\CombinedSkillsDoNotHowToUseThatWeapon("Given range weapon {$rangeWeaponCode} is not affected by combined skills" . ' (only shooting weapons using knack are)');
 }