Created
March 23, 2018 23:55
-
-
Save aloisdg/96f2d23139ee32833ed9061a689992a8 to your computer and use it in GitHub Desktop.
Magical weapon calculator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import unittest | |
| # https://www.reddit.com/r/Pathfinder_RPG/comments/14ibsz/need_help_with_cost_of_magical_weapons/ | |
| # https://tio.run/##vZXfb9owEMff81fcC0oCEUpCqdCkPmyMdQ@rOqmV9oBQ5IKh1hKb2c42Vu1vZ2fnZymIiIdJUeLcWZ87f3N32e70s@Cj/Z5lWyE15JxpTZV2nGVKlIIZX71zAMCdiiwTHJ6IolC41kICSVOg2TYVO0qVazYmGVGayl9Cfp8KpeEGRmFoHIr9ofj28rd6mbufGKfuAo3hcNxYP7KM8Vyzn0d8j4zv3lofMszDmqPGeEdXLM8OrV@I3BTcuDF@zkvbVWO7xY2E65xw65k0nqlIhVKkDHjtGM@KriFJGIqXJJ6i6ToAIdmGcZIG1cmrjAJ4EjxX5hABUP5M@JJmlGtjmS98K7cJhpRhBUFXtWy7S7J5tM0V3z7bjoNo7ddyG37v4VaypcGa9eHnHNR5QN9usJqY2wJ9XhEZFyrPvDbeB7Z@fViaYiWFvg/9PsQIi0Osk0ZLpWUpZa2IpDqXHNxBbwU9VV8u9MBrzh000gTgPmhKU5Tcff8jJ5otzfJWUqLJb@r6TlXmj1jyd2TDlt8o2QruVW0wNI4p1rxJwqZhsjOe@1KG1ymWOiOSSj3DkKmHInlx6BeqBjDCtXOUZEuzIw5PUVRyw706xTXV3R1re6GhTpB6/OBVG3RH141T469PimFbuju6mAAdRDYDpDvWjpuGGp2ifjCF1x1bD4KoZsenU7bw@AJ6XNMnZ@ijC@ijmh6dw48vwI9r/Dg8g581Y@WSbxDAPFp0lqoV7J5TvC4NGbSCRv8varxodcnbqF8l66AiDufD3mvx/YFrxuwgAusCO4OhHMDQmr7gMDPqOcloksAN/iIT/N8wniRuEbwew8bq@fv9Pw | |
| # http://grpg.wikidot.com/tool:magic-weapon-creator | |
| # https://rpg.stackexchange.com/questions/76125/how-to-calculate-the-costs-of-a-weapon-enchantment/76177#76177 | |
| class End: | |
| 'Common base class for all employees' | |
| _masterworkCost = 300 | |
| size = {} | |
| size['Fine'] = 0.5 | |
| size['Diminutive'] = 0.5 | |
| size['Tiny'] = 0.5 | |
| size['Small'] = 1 | |
| size['Medium'] = 1 | |
| size['Large'] = 2 | |
| size['Huge'] = 4 | |
| size['Gargantuan'] = 8 | |
| size['Colossal'] = 16 | |
| def __init__(self, original, size = 'Medium', bonus = 0, enhancements = []): | |
| self.original = original | |
| self.size = size | |
| self.bonus = bonus | |
| self.enhancements = enhancements | |
| End.price = End._masterworkCost + original * End.size[size] + (bonus + (sum(enhancements) if enhancements else 0)) ** 2 * 2000 | |
| def __str__(self): | |
| return '+%d %s %s %s %s' % (self.bonus, self.size, 'Steel', 'Aquatic', 'Greataxe') | |
| class TestMagicWeapon(unittest.TestCase): | |
| def testOriginal(self): | |
| self.assertEqual(End(20).price, 320) | |
| def testOriginalLarge(self): | |
| self.assertEqual(End(20, 'Large').price, 340) | |
| def testOriginalHuge(self): | |
| self.assertEqual(End(20, 'Huge').price, 380) | |
| def testOriginalColossal(self): | |
| self.assertEqual(End(20, 'Colossal').price, 620) | |
| def testOriginalSmall(self): | |
| self.assertEqual(End(20, 'Small').price, 320) | |
| def testOriginalTiny(self): | |
| self.assertEqual(End(20, 'Tiny').price, 310) | |
| def testOriginalBonus(self): | |
| self.assertEqual(End(20, 'Medium', 1).price, 2320) | |
| def testOriginalBonus2(self): | |
| self.assertEqual(End(20, 'Medium', 2).price, 8320) | |
| def testOriginalBonus3(self): | |
| self.assertEqual(End(20, 'Medium', 3).price, 18320) | |
| def testOriginalBonus5(self): | |
| self.assertEqual(End(20, 'Medium', 5).price, 50320) | |
| def testOriginalBonusEnhancement(self): | |
| self.assertEqual(End(20, 'Medium', 1, [1]).price, 8320) | |
| def testOriginalBonusEnhancementOneOne(self): | |
| self.assertEqual(End(20, 'Medium', 1, [1,1]).price, 18320) | |
| def testOriginalBonusEnhancementOneOne(self): | |
| self.assertEqual(End(20, 'Medium', 1, [1,2]).price, 32320) | |
| def testPrint(self): | |
| self.assertEqual(str(End(20, 'Small', 1, [1,2]))+'', '+1 Small Steel Aquatic Greataxe') | |
| if __name__ == '__main__': | |
| unittest.main() |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
TDD ftw