Advertisement
Kovitikus

Possible kwarg usage?

Aug 30th, 2020
1,345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.91 KB | None | 0 0
  1. def defense_layer_calc(char, only_skill_return, only_rb_return):
  2.     """
  3.    Defensive rank bonus includes up to 3 layers of defense.
  4.    The highest RB defensive manuever of each high, mid, and low will gain 100% of it's RB.
  5.    The second highest RB will supply 50% and the third will only be worth 33%.
  6.    Each layer can only consist of a single defensive manuever from each of the following categories:
  7.        Weapon Blocks, Combat Manuever Dodges, and Shield Blocks.
  8.        Weapons that require 2 hands can only ever gain 2 defensive layers. Shields are the only way to gain all 3 layers.
  9.  
  10.    For Example:
  11.    Staves Mid Block with 100 Rank Bonus * 1 = 100
  12.    CM Mid Dodge with 80 Rank Bonus * 0.5 = 40
  13.    Total Mid Defensive Rank Bonus = 140
  14.  
  15.    Swords Mid Block with 100 Rank Bonus * 0.33 = 33
  16.    CM Mid Dodge with 150 Rank Bonus * 0.5 = 75
  17.    Shield Mid Block with 200 Rank Bonus * 1 = 200
  18.    Total Mid Defensive Rank Bonus = 308
  19.  
  20.    Floats are used to determine the highest RB priority, but only rounded down integers are used to determine the total RB.
  21.  
  22.    TODO: Add a round down for the final RB.
  23.    TODO: Remove rank bonuses from character attributes and only ever dynamically produce them
  24.            based on the character's ranks, so that RB formula can always be changed later
  25.            without editing character attributes.
  26.  
  27.    High, Mid, and Low always refer to the area
  28.    of the body that the attack targets and not the numerical value.
  29.    """
  30.  
  31.     b_defense_skill_list = []
  32.     r_defense_skill_list = []
  33.     l_defense_skill_list = []
  34.  
  35.     weap_high_skill, weap_mid_skill, weap_low_skill = '', '', ''
  36.     offhand_high_skill, offhand_mid_skill, offhand_low_skill = '', '', ''
  37.     dodge_high_skill, dodge_mid_skill, dodge_low_skill = '', '', ''
  38.  
  39.     # Initialize rankbonus values.
  40.     weap_high_rb, weap_mid_rb, weap_low_rb = 0.0, 0.0, 0.0
  41.     offhand_high_rb, offhand_mid_rb, offhand_low_rb = 0.0, 0.0, 0.0
  42.     dodge_high_rb, dodge_mid_rb, dodge_low_rb = 0.0, 0.0, 0.0
  43.  
  44.     # Decide how many layers, based on if wielding.
  45.     wielding = char.attributes.get('wielding')
  46.     l_wield = wielding.get('left')
  47.     r_wield = wielding.get('right')
  48.     b_wield = wielding.get('both')
  49.  
  50.  
  51.     if b_wield:
  52.         if b_wield.attributes.has('skillset'):
  53.             b_wield_skillset = b_wield.attributes.get('skillset')
  54.             char_b_weapon_skillset = char.attributes.get(b_wield_skillset) # Grab weapon skillset dictionary from char.
  55.             skills = [*char_b_weapon_skillset] # Create a list of the skill names.
  56.  
  57.             # Check each key in the dictionary against all viable skills.
  58.             for i in skills:
  59.                 if skillsets[b_wield_skillset].get(i):
  60.                     if skillsets[b_wield_skillset][i]['skill_type'] == 'defense':
  61.                         b_defense_skill_list.append(i)
  62.  
  63.             # Sort
  64.             for i in b_defense_skill_list:
  65.                 if skillsets[b_wield_skillset][i]['default_aim'] == 'high':
  66.                     weap_high_rb += char_b_weapon_skillset[i].get('rank_bonus')
  67.                     weap_high_skill = i
  68.                 elif skillsets[b_wield_skillset][i]['default_aim'] == 'mid':
  69.                     weap_mid_rb += char_b_weapon_skillset[i].get('rank_bonus')
  70.                     weap_mid_skill = i
  71.                 elif skillsets[b_wield_skillset][i]['default_aim'] == 'low':
  72.                     weap_low_rb += char_b_weapon_skillset[i].get('rank_bonus')
  73.                     weap_low_skill = i
  74.  
  75.     if r_wield:
  76.         if r_wield.attributes.has('skillset'):
  77.             r_wield_skillset = r_wield.attributes.get('skillset')
  78.             char_r_weapon_skillset = char.attributes.get(r_wield_skillset) # Grab weapon skillset dictionary from char.
  79.             skills = [*char_r_weapon_skillset] # Create a list of the skill names.
  80.  
  81.             # Check each key in the dictionary against all viable skills.
  82.             for i in skills:
  83.                 if skillsets[r_wield_skillset].get(i):
  84.                     if skillsets[r_wield_skillset][i]['skill_type'] == 'defense':
  85.                         r_defense_skill_list.append(i)
  86.  
  87.             for i in r_defense_skill_list:
  88.                 if skillsets[r_wield_skillset][i]['default_aim'] == 'high':
  89.                     weap_high_rb += char_r_weapon_skillset[i].get('rank_bonus')
  90.                     weap_high_skill = i
  91.                 elif skillsets[r_wield_skillset][i]['default_aim'] == 'mid':
  92.                     weap_mid_rb += char_r_weapon_skillset[i].get('rank_bonus')
  93.                     weap_mid_skill = i
  94.                 elif skillsets[r_wield_skillset][i]['default_aim'] == 'low':
  95.                     weap_low_rb += char_r_weapon_skillset[i].get('rank_bonus')
  96.                     weap_low_skill = i
  97.  
  98.     if l_wield:
  99.         if l_wield.is_typeclass('typeclasses.objects.Shields'):
  100.             if l_wield.attributes.has('skillset'):
  101.                 l_wield_skillset = l_wield.attributes.get('skillset')
  102.                 char_l_weapon_skillset = char.attributes.get(l_wield_skillset) # Grab weapon skillset dictionary from char.
  103.                 skills = [*char_l_weapon_skillset] # Create a list of the skill names.
  104.  
  105.                 # Check each key in the dictionary against all viable skills.
  106.                 for i in skills:
  107.                     if skillsets[l_wield_skillset].get(i):
  108.                         if skillsets[l_wield_skillset][i]['skill_type'] == 'defense':
  109.                             l_defense_skill_list.append(i)
  110.  
  111.                 for i in l_defense_skill_list:
  112.                     if skillsets[l_wield_skillset][i]['default_aim'] == 'high':
  113.                         offhand_high_rb += char_l_weapon_skillset[i].get('rank_bonus')
  114.                         offhand_high_skill = i
  115.                     elif skillsets[l_wield_skillset][i]['default_aim'] == 'mid':
  116.                         offhand_mid_rb += char_l_weapon_skillset[i].get('rank_bonus')
  117.                         offhand_mid_skill = i
  118.                     elif skillsets[l_wield_skillset][i]['default_aim'] == 'low':
  119.                         offhand_low_rb += char_l_weapon_skillset[i].get('rank_bonus')
  120.                         offhand_low_skill = i
  121.         else:
  122.             if l_wield.attributes.has('skillset'):
  123.                 l_wield_skillset = l_wield.attributes.get('skillset')
  124.                 char_l_weapon_skillset = char.attributes.get(l_wield_skillset) # Grab weapon skillset dictionary from char.
  125.                 skills = [*char_l_weapon_skillset] # Create a list of the skill names.
  126.  
  127.                 # Check each key in the dictionary against all viable skills.
  128.                 for i in skills:
  129.                     if skillsets[l_wield_skillset].get(i):
  130.                         if skillsets[l_wield_skillset][i]['skill_type'] == 'defense':
  131.                             l_defense_skill_list.append(i)
  132.  
  133.                 for i in l_defense_skill_list:
  134.                     if skillsets[l_wield_skillset][i]['default_aim'] == 'high':
  135.                         offhand_high_rb += char_l_weapon_skillset[i].get('rank_bonus')
  136.                         offhand_high_skill = i
  137.                     elif skillsets[l_wield_skillset][i]['default_aim'] == 'mid':
  138.                         offhand_mid_rb += char_l_weapon_skillset[i].get('rank_bonus')
  139.                         offhand_mid_skill = i
  140.                     elif skillsets[l_wield_skillset][i]['default_aim'] == 'low':
  141.                         offhand_low_rb += char_l_weapon_skillset[i].get('rank_bonus')
  142.                         offhand_low_skill = i
  143.  
  144.     # Get all dodge rank bonuses
  145.     # !!! NO DODGES EXIST YET !!!
  146.    
  147.     high_skills = [weap_high_skill, offhand_high_skill, dodge_high_skill]
  148.     mid_skills = [weap_mid_skill, offhand_mid_skill, dodge_mid_skill]
  149.     low_skills = [weap_low_skill, offhand_low_skill, dodge_low_skill]
  150.    
  151.     # High Layer
  152.     h_rb = [weap_high_rb, dodge_high_rb, offhand_high_rb]
  153.     h_rb.sort(reverse=True)
  154.     h_layer1 = h_rb[0] * 1
  155.     h_layer2 = h_rb[1] * 0.5
  156.     h_layer3 = h_rb[2] * 0.33
  157.     high_def_rb = (h_layer1 + h_layer2 + h_layer3)
  158.  
  159.     # Mid Layer
  160.     m_rb = [weap_mid_rb, dodge_mid_rb, offhand_mid_rb]
  161.     m_rb.sort(reverse=True)
  162.     m_layer1 = m_rb[0] * 1
  163.     m_layer2 = m_rb[1] * 0.5
  164.     m_layer3 = m_rb[2] * 0.33
  165.     mid_def_rb = (m_layer1 + m_layer2 + m_layer3)
  166.  
  167.     # Low Layer
  168.     l_rb = [weap_low_rb, dodge_low_rb, offhand_low_rb]
  169.     l_rb.sort(reverse=True)
  170.     l_layer1 = l_rb[0] * 1
  171.     l_layer2 = l_rb[1] * 0.5
  172.     l_layer3 = l_rb[2] * 0.33
  173.     low_def_rb = (l_layer1 + l_layer2 + l_layer3)
  174.  
  175.     # Assign the values to the character.
  176.     def_rb = char.db.def_rb
  177.     def_rb['high'] = high_def_rb
  178.     def_rb['mid'] = mid_def_rb
  179.     def_rb['low'] = low_def_rb
  180.  
  181.     if only_skill_return:
  182.         return high_skills, mid_skills, low_skills
  183.     elif only_rb_return:
  184.         return high_def_rb, mid_def_rb, low_def_rb
  185.     else:
  186.         return high_skills, mid_skills, low_skills, high_def_rb, mid_def_rb, low_def_rb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement