def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Turn undead or rebuke undead feat if not (char_editor.has_feat(feat_turn_undead) or char_editor.has_feat(feat_rebuke_undead)): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Many Shot, Point Blank Shot and Rapid Shot are required either standard feats or from the ranger class if char_editor.has_feat(feat_manyshot) or char_editor.has_feat(feat_ranger_manyshot): if char_editor.has_feat(feat_rapid_shot) or char_editor.has_feat(feat_ranger_rapid_shot): if char_editor.has_feat(feat_point_blank_shot): return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): if char_editor.has_feat(feat_sneak_attack): return 1 if char_editor.has_feat("Skirmish"): return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Str requirement enforced by the engine if not char_editor.has_feat( feat_two_weapon_fighting) and not char_editor.has_feat( feat_two_weapon_fighting_ranger): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): if char_editor.has_feat(feat_weapon_focus_light_crossbow): return 1 if char_editor.has_feat(feat_weapon_focus_heavy_crossbow): return 1 if char_editor.has_feat(feat_weapon_focus_hand_crossbow): return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Req 1, turn undead feat if not (char_editor.has_feat(feat_turn_undead) or char_editor.has_feat(feat_rebuke_undead)): return 0 #Req2, shield proficency if not char_editor.has_feat(feat_shield_proficiency): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Req 1, turn undead feat if not (char_editor.has_feat(feat_turn_undead) or char_editor.has_feat(feat_rebuke_undead)): return 0 #Req2, Divine Caster Level 5 if attachee.highest_divine_caster_level >= 5: return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Req 1, turn undead or rebuke undead feat if not (char_editor.has_feat(feat_turn_undead) or char_editor.has_feat(feat_rebuke_undead)): return 0 #Req2, Cast First Level Divine Spells if attachee.divine_spell_level_can_cast() > 0: return 1 return 0
def CheckPrereq(attachee, classLeveled, abilityScoreRaised): if not char_editor.has_feat(feat_shield_proficiency): return 0 if not char_editor.has_feat(feat_combat_casting): return 0 concentration_level = char_editor.skill_ranks_get(skill_concentration) if concentration_level < 5: return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #BAB +11 or greater enforced by the engine #Must have two-weapon fighting if not char_editor.has_feat(feat_two_weapon_fighting) and not char_editor.has_feat(feat_two_weapon_fighting_ranger): return 0 #Dex 15+ if char_editor.stat_level_get(stat_dexterity) < 15: return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Wild Shape Check if not char_editor.has_feat(feat_wild_shape): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): # BAB requirement is enforced via the feat requirement field (266, 4) to reflect updated BAB value #if attachee.get_base_attack_bonus() < 4: # return 0 if char_editor.has_feat(feat_power_attack) == 0: return 0 #Check for any favored enemy feat for i in range(feat_favored_enemy_aberration, feat_favored_enemy_humanoid_human): if char_editor.has_feat(i): return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Barbarian Rage Check if not char_editor.has_feat(feat_barbarian_rage): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Dex and BAB requirements enforced by the engine if not char_editor.has_feat(feat_two_weapon_defense): return 0 if not char_editor.has_feat( feat_two_weapon_fighting) and not char_editor.has_feat( feat_two_weapon_fighting_ranger): return 0 if not char_editor.has_feat("Improved Two-Weapon Defense"): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Shield proficency required if not char_editor.has_feat(feat_shield_proficiency): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Bardic Music Check if not char_editor.has_feat(feat_bardic_music): return 0 return 1
def LevelupGetBonusFeats( obj ): bonFeatInfo = [] feat = "" newLvl = obj.stat_level_get( classEnum ) + 1 #Find the normal feat for each level if newLvl == 7: feat = "Sudden Empower" elif newLvl == 10: feat = "Sudden Enlarge" elif newLvl == 15: feat = "Sudden Widen" elif newLvl == 20: feat = "Sudden Maximize" else: return #No bonus feat this level #The only option will be the normal feat if the chracter does not have it if not char_editor.has_feat(feat): featInfo = char_editor.FeatInfo(feat) featInfo.feat_status_flags |= 4 # always pickable bonFeatInfo.append(featInfo) else: #Any metamagic feat can be selected if the character does not have the normal feat bonus_feats = tpdp.get_metamagic_feats() #If the character already has the feat, he can select any metamagic feat for feat in bonus_feats: bonFeatInfo.append(char_editor.FeatInfo(feat)) char_editor.set_bonus_feats(bonFeatInfo) return
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #BAB +6 enforced by engine #Must have sneak attack if not char_editor.has_feat(feat_sneak_attack): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #BAB +2 checked by engine #Stunning Fist Check if not char_editor.has_feat(feat_stunning_fist): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Sneak Attack Check if not char_editor.has_feat(feat_sneak_attack): return 0 if char_editor.stat_level_get( stat_level_paladin ) > 1: #workaround until I figure out how to check for immunity to fear return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Barbarian Rage Check if not char_editor.has_feat(feat_barbarian_rage): return 0 #Constitution greater than 13 if char_editor.stat_level_get(stat_constitution) < 13: return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Wildshape feat if not (char_editor.has_feat(feat_wild_shape)): return 0 #Dextarity 13 or greater if char_editor.stat_level_get(stat_dexterity) < 13: return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Must have the quicken feat if not char_editor.has_feat(feat_quicken_spell): return 0 #Must have the sudden extend feat if not char_editor.has_feat("Sudden Extend"): return 0 #Must have the sudden maximize feat if not char_editor.has_feat("Sudden Maximize"): return 0 #Must have the sudden empower feat if not char_editor.has_feat("Sudden Empower"): return 0 #Must have the sudden still feat if not char_editor.has_feat("Sudden Still"): return 0 #Must have the sudden silent feat if not char_editor.has_feat("Sudden Silent"): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): # BAB enforced via prefeq properties #if attachee.get_base_attack_bonus() < 5: # return 0 #Check for any favored enemy feat for i in range(feat_favored_enemy_aberration, feat_favored_enemy_humanoid_human): if char_editor.has_feat(i): return 1 return 0
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #BAB +4 or greater enforced by the engine #Must be medium size or larger (this should get the base size) size = attachee.obj_get_int(obj_f_size) if (size < STAT_SIZE_MEDIUM): return 0 #Powerful Charge Check if not char_editor.has_feat("Powerful Charge"): return 0 return 1
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): #Perform 4 ranks spellcraft_level = char_editor.skill_ranks_get(skill_spellcraft) if spellcraft_level < 4: return 0 #Spellcraft 4 ranks perform_level = char_editor.skill_ranks_get(skill_perform) if perform_level < 4: return 0 #bardic music class feature if not char_editor.has_feat(feat_bardic_music): return 0 return 1
def ObjMeetsPrereqs( obj ): #Maximum number of levels is 5 classLvl = obj.stat_level_get(classEnum) if classLvl >= 5: return 0 if obj.arcane_spell_level_can_cast() < 1: return 0 if obj.get_base_attack_bonus() < 5: return 0 if not obj.has_feat(feat_combat_casting): return 0 #Can Cast 1st level or greater abjuration can_cast_abjuration = false known_spells = obj.spells_known for knSp in known_spells: if knSp.spell_level > 0: spell_entry = tpdp.SpellEntry(knSp.spell_enum) if spell_entry.spell_school_enum == Abjuration: can_cast_abjuration = true break if not can_cast_abjuration: return 0 #Check for martial weapon proficiency if obj.has_feat(feat_martial_weapon_proficiency_all): return 1 has_martial_feat = false for i in range (feat_martial_weapon_proficiency_throwing_axe , feat_martial_weapon_proficiency_composite_longbow): if char_editor.has_feat(i): has_martial_feat = true return has_martial_feat
def CheckPrereq(attachee, classLevelled, abilityScoreRaised): # BAB enforced via prefeq properties #if attachee.get_base_attack_bonus() < 4: # return 0 #Paladin Smite Evil Check if char_editor.has_feat(feat_smite_evil): return 1 #Destruction Domain Check domain_1 = attachee.obj_get_int(obj_f_critter_domain_1) domain_2 = attachee.obj_get_int(obj_f_critter_domain_2) if domain_1 == destruction or domain_2 == destruction: return 1 #Blackguard Smite for level 2 or greater black guards if char_editor.stat_level_get(stat_level_blackguard) >= 2: return 1 #Blackguard Smite for level 1 with at least one paladin level if char_editor.stat_level_get(stat_level_blackguard) == 1 and char_editor.stat_level_get(stat_level_paladin) >= 1: return 1 return 0