def create_attack_dict(): attack_dict = { (0, 0): A.Attack("Bite", 20, 90, 8), (1, 0): A.Attack("Lunge", 40, 60, 14), (0, 1): None, (1, 1): None } return attack_dict
def create_attack_dict(): attack_dict = { (0, 0): A.Attack("Stab", 10, 90, 8), (1, 0): A.Attack("Slash", 20, 60, 14), (0, 1): A.Attack("Leaping Strike", 30, 70, 20), (1, 1): A.Attack("Flurry", 40, 80, 30), "Text": "Attack" } return attack_dict
def halberd_damage(lvl, start_mod, weapon_bonus, enemy, power_atk): num_asis = get_num_asis(lvl) final_mod, num_asis = max_mod(start_mod, num_asis) action_attacks = get_num_attacks(lvl) prof = proficiency(lvl) gwm = False if num_asis >= 1: gwm = True num_asis -= 1 pam = False if num_asis >= 1: pam = True damage_mod = final_mod + weapon_bonus weapon_dmg = Damage("1d10r2 + " + str(damage_mod)) pommel_dmg = Damage("1d4r2 + " + str(damage_mod)) if gwm and power_atk: weapon_dmg = Damage("1d10r2 + " + str(damage_mod + 10)) pommel_dmg = Damage("1d4r2 + " + str(damage_mod + 10)) to_hit = final_mod + weapon_bonus + prof hit_bonus = Constant(to_hit) if gwm and power_atk: hit_bonus = Constant(to_hit - 5) attack = Attack(hit_bonus, enemy) attack.add_damage(weapon_dmg) round_dmg = MultiAttack() for i in range(action_attacks): round_dmg.add_attack(attack.copy()) # technically, you can wait to use the pam bonus action # until you don't crit your normal attacks, otherwise you # get a 1d10 bonus action attack from gwm rather than 1d4 # however, that is much more complicated to simulate # and unlikely to change the result much if pam: pommel_atk = Attack(hit_bonus, enemy) pommel_atk.add_damage(pommel_dmg) round_dmg.add_attack(pommel_atk) elif gwm: round_dmg.add_crit_extra_attack(attack.copy()) dmg = round_dmg.get_dmg_rv() return dmg
def greatsword_damage(lvl, start_mod, weapon_bonus, enemy, power_atk): num_asis = get_num_asis(lvl) final_mod, num_asis = max_mod(start_mod, num_asis) action_attacks = get_num_attacks(lvl) prof = proficiency(lvl) gwm = False if num_asis >= 1: gwm = True damage_mod = final_mod + weapon_bonus weapon_dmg = Damage("2d6r2 + " + str(damage_mod)) if gwm and power_atk: weapon_dmg = Damage("2d6r2 + " + str(damage_mod + 10)) to_hit = final_mod + weapon_bonus + prof hit_bonus = Constant(to_hit) if gwm and power_atk: hit_bonus = Constant(to_hit - 5) attack = Attack(hit_bonus, enemy) attack.add_damage(weapon_dmg) round_dmg = MultiAttack() for i in range(action_attacks): round_dmg.add_attack(attack.copy()) if gwm: round_dmg.add_crit_extra_attack(attack.copy()) dmg = round_dmg.get_dmg_rv() return dmg
def dual_wield_damage(lvl, start_mod, weapon_bonus, enemy, power_atk): num_asis = get_num_asis(lvl) final_mod, num_asis = max_mod(start_mod, num_asis) action_attacks = get_num_attacks(lvl) prof = proficiency(lvl) weapon_die = "1d6" if num_asis >= 1: # dual wielder feat (sigh...) weapon_die = "1d8" damage_mod = final_mod + weapon_bonus weapon_dmg = Damage(weapon_die + " + " + str(damage_mod)) to_hit = final_mod + weapon_bonus + prof hit_bonus = Constant(to_hit) attack = Attack(hit_bonus, enemy) attack.add_damage(weapon_dmg) round_dmg = MultiAttack() bonus_attacks = 1 #bonus_attacks = action_attacks for i in range(action_attacks + bonus_attacks): round_dmg.add_attack(attack.copy()) dmg = round_dmg.get_dmg_rv() return dmg
def archery_damage(lvl, start_mod, weapon_bonus, enemy, power_atk): num_asis = get_num_asis(lvl) final_mod, num_asis = max_mod(start_mod, num_asis) action_attacks = get_num_attacks(lvl) prof = proficiency(lvl) sharpshooter = False if num_asis >= 1: sharpshooter = True damage_mod = final_mod + weapon_bonus weapon_dmg = Damage("1d8 + " + str(damage_mod)) if sharpshooter and power_atk: weapon_dmg = Damage("1d8 + " + str(damage_mod + 10)) to_hit = final_mod + 2 + weapon_bonus + prof hit_bonus = Constant(to_hit) if sharpshooter and power_atk: hit_bonus = Constant(to_hit - 5) attack = Attack(hit_bonus, enemy) attack.add_damage(weapon_dmg) round_dmg = MultiAttack() for i in range(action_attacks): round_dmg.add_attack(attack.copy()) dmg = round_dmg.get_dmg_rv() return dmg
def main(): intro() print "" print ADDED + "Enter target ros ip address" while True: inputIP = raw_input('ros > ') if (is_ipv4(inputIP)): break else: print ERROR + "Invalid ip address.." print ERROR + "Try again..." attack = Attack.Attack() attack.PortScanning(inputIP) print ADDED + "Port scanning complete" while True: menu() cmd = raw_input('menu > ') if cmd == '1': attack.FingerPrinting() elif cmd == '2': attack.shutdown() elif cmd == '3': attack.XxeDosAttack() elif cmd == '4': attack.findPack() else: print ERROR + "menu select number error"
def longsword_damage(lvl, start_mod, weapon_bonus, enemy, power_atk): num_asis = get_num_asis(lvl) final_mod, num_asis = max_mod(start_mod, num_asis) action_attacks = get_num_attacks(lvl) prof = proficiency(lvl) if num_asis >= 1: # get shield master, assume the shove knocks prone always # this isn't the best assumption, but I don't have a way # to handle this conditional yet. enemy.apply_hit_type(HitType.ADVANTAGE) damage_mod = final_mod + weapon_bonus + 2 weapon_dmg = Damage("1d8 + " + str(damage_mod)) to_hit = final_mod + weapon_bonus + prof hit_bonus = Constant(to_hit) attack = Attack(hit_bonus, enemy) attack.add_damage(weapon_dmg) round_dmg = MultiAttack() for i in range(action_attacks): round_dmg.add_attack(attack.copy()) dmg = round_dmg.get_dmg_rv() return dmg
def load_data(attacks: []) -> int: try: with open('/home/tzdybel/PycharmProjects/projekt2/Project2/globalterrorismdb.csv', 'r', encoding="ISO-8859-1") as csvfile: print("Loading data...") reader = csv.reader(csvfile, delimiter=',') for row in reader: if row[3] == 'iday': continue try: attkres = ar.AttackResult(bool(row[26]), bool(row[27]), int(row[98]), int(row[101])) except ValueError: attkres = ar.AttackResult(bool(row[26]), bool(row[27]), 0, 0) date = d.Date(int(row[3]), int(row[2]), int(row[1])) place = p.Place(row[12], row[8], getTypeFromEnum(int(row[9]), p.Region)) attkdet = ad.AttackDetails(getTypeFromEnum(int(row[28]), ad.AttackType), getTypeFromEnum(int(row[34]), ad.TargetType), getTypeFromEnum(int(row[81]), ad.WeaponType), row[64]) attack = att.Attack(date, place, attkdet, attkres) attacks.append(attack) except FileNotFoundError: print("File name is invalid") # exit(1) print("Loaded " + len(attacks).__str__() + " records!") return len(attacks)
def __init__(self, type, health, name, level=1): self.type = Type(type) self.moveList = [Attack("Tackle", "NORMAL", 100, 5)] # default move is tackle self.currentHealth = health self.maxHealth = health self.isDead = False self.name = name self.level = level
def attack(self, mainCharX, mainCharY, mainCharZ): char = [mainCharX, mainCharY, mainCharZ] enemy = [self.posX, self.posY, self.posZ] self.att = Attack("ENEMY", "POTATOES", self, char) self.attacking = True #end attack #end class CMain
def __init__(self, name, initiative): """ Creates a Fighter object. Calls the superclass init method with name, HP, DEF, MAG DEF, and initiative. Also adds a variable melee that references an instance of the Attack class. For our simple game, this lets us create fixed attacks such as Attack(”Slash”, 1, 8, ”physical”). """ super().__init__(name, Fighter._HP, Fighter._DEF, Fighter._MAG_DEF, initiative) self._melee = Attack("Slash", 1, 8, "physical")
def __init__(self, logDir, k_threshold): self.gridSize = option.getGridSize() self.maxNumLoops = option.getMaxNumLoops() self.skipFollow = option.getSkipFollow() self.maxNumId = option.getMaxNumId() self.k_threshold = k_threshold self.grid = Grid(logDir, self.gridSize) self.logDir = logDir self.attack = Attack.Attack(logDir=self.logDir, gridSize=self.gridSize) self.followEachUser() self.dumpResult(logDir + "/kanonymity") return
def __init__(self, name, initiative): """ Creates a Wizard object. This is done in exactly the same way as it was done in the Fighter class. Calls the superclass init method with name, HP, DEF, MAG DEF, and initiative. Also adds a variable spell that references an instance of the Attack class. For our simple game, this lets us create fixed attacks such as Attack(”Fireball”, 3, 6, ”magic”). """ super().__init__(name, Wizard._HP, Wizard._DEF, Wizard._MAG_DEF, initiative) self._melee = Attack("Fireball", 3, 6, "magic")
def handleFinalKeyInput(self, move): print("Move: " + move) self.combos.append(move) print("Combos: ") print(self.combos) print(self.moveset_tree.getNumber()) if self.moveset_tree.getNumber() == 6: print("Attack ready to be executed!") print(self.combos) hand = self.combos[1] magnitude = self.combos[2] region = self.combos[3] if region == "Target: head" or region == "Target: torso": specRegion = None isSpecAttack = False move = self.combos[4] else: specRegion = self.combos[4] isSpecAttack = False move = self.combos[5] statEffectBonus = False attack = Attack(self.player, self.enemy, hand, magnitude, region, specRegion, isSpecAttack, move) #self.logAttack(attack) #self.attackVisuals() self.newMethod(attack) damage = attack.calculateDamage() #self.logDamage(damage, attack.player.name, attack.enemy.name) self.logAttack(attack, damage) self.game.callUpdateStatusBar(-1 * damage, 2) self.moveset_tree.resetCurrentTree() self.eraseCurrentTree() self.displayCurrentMoves() self.displayCurrentKeyCombos() self.combos = [] elif self.moveset_tree.getNumber() == 4: print("Blocked!") if self.pendingAttack != None: isValidBlock = False if self.pendingAttack.region == "Target: head" or self.pendingAttack.region == "Target: torso": if self.combos[3] == "High block": isValidBlock = True elif self.pendingAttack.region == "Target: arms" or self.pendingAttack.region == "Target: legs": if self.combos[3] == "Low block": isValidBlock = True if isValidBlock == True: self.blockAttack() self.moveset_tree.resetCurrentTree()
def enemy_turn(self): available_enemy_attacks = self.enemy.attack_moves attack_index = randint(0, len(available_enemy_attacks) - 1) attack = available_enemy_attacks[attack_index] #randomly generate an attack to use print("Attack choice:") print(attack.name) is_successful = attack.hitDeterminer() if(is_successful): #if the attack doesn't miss dmg = attack.getDMG() dmg_type = attack.getDMGType() elemental = attack.getElemental() isCrit = attack.critDeterminer() if isCrit == True: dmg *= 2 regions = ["Target: arms", "Target: legs", "Target: head", "Target: torso"] sides = ["Left", "Right"] body_part_index = randint(0, len(regions) - 1) body_part = regions[body_part_index] specific_body_part_index = None specific_body_part = None if body_part_index == 0 or body_part_index == 1: specific_body_part_index = randint(0, 1) specific_body_part = sides[specific_body_part_index] magnitudes = ["Light attack", "Heavy attack", "Charged attack"] magnitude_index = randint(0, len(magnitudes) - 1) magnitude = magnitudes[magnitude_index] #self.player.takeDamage(dmg, dmg_type, body_part, elemental) attack = Attack(self.enemy, self.player, "Enemy attack", magnitude, body_part, specific_body_part, False, attack) print("Bruh") self.pendingAttack = attack self.chooseAnimation("attacking", None, None) self.isAttacking = True self.isIdling = False self.isHurt = False #damage = attack.calculateDamage() #print("Damage taken!") #self.game.callUpdateStatusBar(-1 * damage, 1) else: print("Attack missed!") pass
def __init__(self, logDir, emd_thresold): self.gridSize = option.getGridSize() self.maxNumLoops = option.getMaxNumLoops() self.skipFollow = option.getSkipFollow() self.maxNumId = option.getMaxNumId() self.logDir = logDir self.emd_thresold = emd_thresold self.attack = Attack.Attack(logDir=self.logDir, gridSize=self.gridSize) self.grid = Grid.Grid(logDir, self.gridSize) self.numLocTypes = self.grid.getNumLocTypes() print "numLocTypes : ", self.numLocTypes print "numStayPoints : ", sum( [len(x) for x in self.grid.clusteredStayPoints]) self.followEachUser() self.dumpResult(logDir + "/closeness") return
def taskSpriteAttack(self, task): if task.time > 1: # Making disappear the sprite information attack self.hideBlackboard() if self.attacking == True: # If we draw correctly and we have the correct power item self.att = Attack(self.type, "-", self.level.enemies, self.char) self.attacking = False self.char.attacking = True self.busy = False # Making move the enemies again for x in self.level.enemies: x.stopEnemy(False) # Making move the character again taskMgr.add(self.taskMove, 'taskMove') return task.done else: return task.cont
hit_type = HitType.SUPER_ADVANTAGE crit_lb = 19 enemy = Enemy(armor_class, hit_type) sword_dmg = Damage("1d10r2 + 5 + 6") #sword_dmg = Damage("1d8 + 5 + 2") deadly_ambush_dmg = Damage("1d10r2 + 1d8 + 5 + 6") #deadly_ambush_dmg = Damage("2d8 + 5 + 2") eldritch_blast_dmg = Damage("1d10 + 5 + 6") cha_hit = Constant(11) # 5 cha + 6 prof sword_atk = Attack(cha_hit, enemy, crit_lb) sword_atk.add_damage(sword_dmg) deadly_ambush_atk = Attack(cha_hit, enemy, crit_lb) deadly_ambush_atk.add_damage(deadly_ambush_dmg) eldritch_blast_atk = Attack(cha_hit, enemy, crit_lb) eldritch_blast_atk.add_damage(eldritch_blast_dmg) sword_atks = 2 deadly_ambush_atks = 2 eldritch_blast_atks = 8 round_dmg = MultiAttack() for atk in range(sword_atks):
#STATS pkm1_stats = Stats(45, 60, 40, 70, 50, 54) #HP, Attack, Defense, SpAttack, SpDefense, Speed pkm2_stats = Stats(40, 45, 30, 65, 55, 70) #HP, Attack, Defense, SpAttack, SpDefense, Speed #POKEMONS pkm1 = Pokemon("Treecko", Grass, NONE, pkm2_stats, 5, 65, "Parabolic") pkm2 = Pokemon("Torchic", Fire, NONE, pkm1_stats, 5, 65, "Parabolic") #ATTACKS pkm1.setAttacks([ Attack("Destructor", Normal, PHYSICAL, 35, 40, 100), Attack("Malicioso", Normal, STATE, 30, 0, 100) ]) pkm2.setAttacks([ Attack("Arañazo", Normal, PHYSICAL, 35, 40, 100), Attack("Gruñido", Normal, STATE, 40, 0, 100) ]) jugador.addPokemon(pkm1) #BATTLE batalla = Battle(jugador, pkm2, "s") while not batalla.Huir() and not batalla.is_finished(): batalla.Comando()
# enemy assumptions armor_class = 13 hit_type = HitType.NORMAL resisted = False auto_crit = False # lvl 1 rogue dual wielding shortswords, 16 dex, w/ sneak attack damage = Damage("1d6 + 3", resisted) offhand_damage = Damage("1d6", resisted) sneak_atk_dmg = Damage("1d6", resisted) hit_bonus = Constant(5) # dex + prof = 3 + 2 enemy = Enemy(armor_class, hit_type, auto_crit) attack = Attack(hit_bonus, enemy) attack.add_damage(damage) offhand_atk = Attack(hit_bonus, enemy) offhand_atk.add_damage(offhand_damage) round_dmg = MultiAttack() round_dmg.add_attack(attack) round_dmg.add_attack(offhand_atk) round_dmg.add_first_hit_damage(sneak_atk_dmg) dpr = round_dmg.get_dmg_rv() dpr.describe(True)
def mainLoop(self): while True: os.system('cls') print("1.Play\n2.Load\n3.Exit") ip = input(">>") if (ip == '1'): player_start = playerStart() player_start.char_selection() break if (ip == '2'): flag = sv.loadgame() if flag == 0: break else: print("Wrong Password\n") if (ip == '3'): print("Bye!") sys.exit() else: print("Enter Valid Options") os.system('cls') print("Type !help for list of commands") while True: cmd = input(">>") os.system('cls') if (cmd == "!stats"): #stats player.status() elif (cmd == "!help"): #Help os.system('cls') print( "!explore, !stats, !inv !quit !save !location !equipment !use !uprade !shop" ) elif (cmd == "!quit"): #Quit os.system('cls') qans = input("Quit Game : [Y/N] ?") if (qans == 'Y' or qans == "y"): sys.exit() else: pass elif (cmd == "!inv"): #Inventory os.system('cls') print("1.List 2.Equip 3.Unequip 4.Back") while True: ii = input(f"{term.limegreen}<>{term.normal}") if ii == '1': pinv.inv_list() elif ii == '2': pinv.equip() elif ii == '3': print("1.Weapon 2.Armour 3.Back") pinv.unequip(input("<<>")) elif ii == '4': break else: print("Enter Valid Option!") elif (cmd == "!explore"): #Explore os.system('cls') os.system("cls") atk = Attack() atk.attackloop() del atk elif (cmd == "!save"): #Save os.system('cls') sv.savegame( player.name, player.HP, player.MP, player.STR, player.INT, player.DEX, player.DEF, player.LUCK, player.XP, player.GOLD, player.MAX_HP, player.MAX_MP, player.eq_wep, player.eq_arm, ) elif (cmd == "!location"): #Location os.system('cls') pass elif (cmd == "!debug"): #Debug os.system('cls') Debug.debug(self) elif (cmd == '!equipment'): #Equipment os.system('cls') player.equipments() input("Press Enter To go back") elif (cmd == '!use'): #Equipment os.system('cls') pinv.use_potion() elif (cmd == '!upgrade'): #Equipment os.system('cls') pass elif (cmd == '!shop'): #Equipment os.system('cls') shop = Shop() else: print("Type !help for more info")
def sequoia_damage_haste(lvl, enemy, sharpshooter=False, multitarget=False, haste_status=HasteStatus.INACTIVE, using_pw=False, hunters_mark_active=True): # 6 is 20 dex and a +1 longbow longbow_hm = Damage("1d8 + 1d6 + 6") if sharpshooter: longbow_hm = Damage("1d8 + 1d6 + 16") longbow = Damage("1d8 + 6") if sharpshooter: longbow = Damage("1d8 + 16") planar_warrior = Damage("1d8") if lvl >= 11: planar_warrior = Damage("2d8") prof = proficiency(lvl) # 20 dex (+5), archery fighting style, +1 longbow hit_bonus = Constant(5 + 2 + 1 + prof) if sharpshooter: hit_bonus = Constant(2 + 1 + prof) num_attacks = 1 num_hm_attacks = 0 if hunters_mark_active: num_attacks = 0 num_hm_attacks = 1 if lvl >= 11 and multitarget: num_attacks = 2 num_hm_attacks = 1 elif lvl >= 5: num_hm_attacks = 2 if haste_status == HasteStatus.CASTING: num_attacks = 0 num_hm_attacks = 1 elif haste_status == HasteStatus.ACTIVE: num_hm_attacks += 1 elif haste_status == HasteStatus.DROPPED: num_attacks = 0 num_hm_attacks = 0 else: if lvl >= 11 and multitarget: num_attacks = 3 elif lvl >= 5: num_attacks = 2 if haste_status == HasteStatus.CASTING: num_attacks = 1 elif haste_status == HasteStatus.ACTIVE: num_attacks += 1 elif haste_status == HasteStatus.DROPPED: num_attacks = 0 attack = Attack(hit_bonus, enemy) attack.add_damage(longbow) attack_hm = Attack(hit_bonus, enemy) attack_hm.add_damage(longbow_hm) round_dmg = MultiAttack() for i in range(num_attacks): round_dmg.add_attack(attack.copy()) for i in range(num_hm_attacks): round_dmg.add_attack(attack_hm.copy()) if using_pw: round_dmg.add_first_hit_damage(planar_warrior) dmg = round_dmg.get_dmg_rv() return dmg
for j in range(len(learnLSG)): print i, j, learnLSG[i][j] newLSG[ seqList[i]][seqList[j]] = learnLSG[i][j] print newLSG return newLSG ####################################################### if __name__ == "__main__": #logDir = "./log/rainbow/" logDir = option.getLogDir() learn = LocSemGraph( logDir) learnLSG = learn.typeDistanceMat actual = Attack.Attack( logDir = logDir, gridSize = 100) actualLSG = actual.typeDistanceMat print type(learnLSG) print "---learn---" print learnLSG print "---actual---" print actualLSG #learnLSG = transform( learnLSG, [3,1,2,0]) learnLSG = transform( learnLSG, [2,1,3,0]) D_ML = compare( actualLSG, learnLSG) print "D_ML : ", D_ML
def ragemage_damage(class_lvls, enemy, weapon_bonus, haste_status=HasteStatus.INACTIVE, shove=False, action_surge=False, giants_might=False, elven_accuracy=False): lvl = get_character_lvl(class_lvls) prof = proficiency(lvl) cantrip_dice = get_cantrip_dice(lvl) rogue_lvl = get_class_lvl(class_lvls, MultiClasses.ROGUE) fighter_lvl = get_class_lvl(class_lvls, MultiClasses.FIGHTER) wizard_lvl = get_class_lvl(class_lvls, MultiClasses.WIZARD) barb_lvl = get_class_lvl(class_lvls, MultiClasses.BARBARIAN) sneak_attack_dice = math.ceil(rogue_lvl / 2) first_hit_dice = sneak_attack_dice if fighter_lvl >= 3 and giants_might: first_hit_dice += 1 first_hit_dmg = Damage(str(first_hit_dice) + "d6") dueling = 0 if fighter_lvl > 0: dueling = 2 damage_bonus = 5 + weapon_bonus + dueling rapier = Damage("1d8 + " + str(damage_bonus)) booming_blade = rapier.copy() if cantrip_dice > 1: booming_blade = Damage(str(cantrip_dice) + "d8 + " + str(damage_bonus)) hit_bonus = Constant(5 + weapon_bonus + prof) num_attacks = 1 num_attacks_bb = 0 if wizard_lvl >= 6: num_attacks_bb = 1 else: if fighter_lvl >= 5 or barb_lvl >= 5: num_attacks = 2 if haste_status == HasteStatus.CASTING: num_attacks_bb = 0 elif haste_status == HasteStatus.ACTIVE: num_attacks += 1 elif haste_status == HasteStatus.DROPPED: num_attacks = 0 num_attacks_bb = 0 if action_surge and fighter_lvl >= 2: num_attacks += 1 num_attacks_bb += 1 if shove and num_attacks + num_attacks_bb >= 2: num_attacks -= 1 if elven_accuracy: enemy.apply_hit_type(HitType.SUPER_ADVANTAGE) else: enemy.apply_hit_type(HitType.ADVANTAGE) attack = Attack(hit_bonus, enemy) attack.add_damage(rapier) attack_bb = Attack(hit_bonus, enemy) attack_bb.add_damage(booming_blade) round_dmg = MultiAttack() for i in range(num_attacks): round_dmg.add_attack(attack.copy()) for i in range(num_attacks_bb): round_dmg.add_attack(attack_bb.copy()) round_dmg.add_first_hit_damage(first_hit_dmg) dmg = round_dmg.get_dmg_rv() return dmg
def readAttack(self, xml): self.varlist = [] attack = Attack.Attack() attack.id = int(xml.get('id')) # A state contains 4 direct child nodes: # broken, system, variables and semitrace # optionally a fifth: dot for event in xml.getchildren(): if event.tag == 'broken': attack.broken.append((self.readTerm(event.find('claim')), self.readTerm(event.find('label')))) elif event.tag == 'system': attack.match = int(event.find('match').text) for term in event.find('commandline'): if term.text != None: if attack.commandline != '': attack.commandline += ' ' attack.commandline += term.text for term in event.find('untrusted').find('termlist'): attack.untrusted.append(str(self.readTerm(term))) for term in event.find('initialknowledge').find('termlist'): attack.initialKnowledge.append(self.readTerm(term)) for keypair in event.find('inversekeys'): inverse = [] for term in keypair: inverse.append(self.readTerm(term)) assert (len(inverse) == 0 or len(inverse) == 2) attack.inverseKeys.append(inverse) # TODO why is protocol name a term?? for protocolxml in event.findall('protocol'): protocol = str(self.readTerm(protocolxml.find('name'))) descr = Trace.ProtocolDescription(protocol) attack.protocoldescr[protocol] = descr for rolexml in protocolxml.findall('role'): roledescr = self.readRoleDescr(rolexml) descr.roledescr[roledescr.role] = roledescr elif event.tag == 'semitrace': for runxml in event: run = self.readRun(runxml) run.attack = attack attack.semiTrace.runs.append(run) elif event.tag == 'dot': # Apparently Scyther already generated dot output, # store attack.scytherDot = event.text elif event.tag == 'variables': # Read the variables one by one for varxml in event: if varxml.get('typeflaw') == 'true': attack.typeflaws = True var = self.readTerm(varxml.find('name').find('term')) var.types = self.readTypeList(varxml.find('name')) substxml = varxml.find('substitution') # Read substitution if present if substxml != None: subst = self.readTerm(substxml.find('term')) subst.types = self.readTypeList(substxml) newvar = Term.TermVariable(var.name, subst) newvar.types = var.types var = newvar attack.variables.append(var) # When all have been read set self.varlist so that when # we read terms in the attacks they can be filled in using # this list self.varlist = attack.variables else: print >> sys.stderr, "Warning unknown tag in attack: %s" % event.tag return attack
for obj in data: #print(obj) print('') if len(obj['RESULTS_EXPLOIT']) > 0: service = obj['SEARCH'] for result in obj['RESULTS_EXPLOIT']: name = result['Title'] id = result['EDB-ID'] date = result['Date'] type = result['Type'] platform = result['Platform'] file = result['Path'] session.attackManager.addAttack( Attack.Attack(name, file, '', service, id, date, type, platform)) for attack in session.attackManager.getAttacks(): print(attack) #print(data) ''' for host, services in session.targetHosts: for service in services: terms = service.getName() + ' ' + service.getVersion() if host == '127.0.0.1' or host == 'localhost': terms += ' local' outFile = exploitDir + '/' + service.getPort() + '_standard_template.json' cmd = 'searchsploit --json ' + terms + ' | tee ' + outFile session.runThreadedCmd(cmd, 'Searchsploit', None, self.parseSearchSploit, outFile) '''
def load(self, sessionId): data = None with open(sessionId + '/session.json', encoding="utf8") as f: data = json.load(f) if 'SESSION' in data: sesstionData = data['SESSION'][0] if 'target_os' in sesstionData: self._targetOS = sesstionData['target_os'] if 'rhost' in sesstionData: self._rhost = sesstionData['rhost'] if 'rport' in sesstionData: self._rport = sesstionData['rport'] if 'threads' in sesstionData: self._threads = sesstionData['threads'] if 'output_tty' in sesstionData: self._outputTty = sesstionData['output_tty'] if 'auto_screenshot' in sesstionData: self._autoScreenShot = sesstionData['auto_screenshot'] if 'wordlist' in sesstionData: self._wordlist = sesstionData['wordlist'] if 'http_wordlist' in sesstionData: self._httpWordlist = sesstionData['http_wordlist'] if 'db_wordlist' in sesstionData: self._dbWordlist = sesstionData['db_wordlist'] if 'userlist' in sesstionData: self._userlist = sesstionData['userlist'] if 'USER_ACCOUNTS' in data: for userAccount in data['USER_ACCOUNTS']: self.targetHost.addUserAccount(userAccount['username'], userAccount['password'], userAccount['email'], userAccount['notes']) if 'SERVICES' in data: for service in data['SERVICES']: self.targetHost.addService(service['port'], service['protocol'], service['status'], service['name'], service['version']) if 'ATTACKS' in data: for attack in data['ATTACKS']: attack = Attack.Attack(attack['name'], attack['file'], attack['desc'], attack['service'], attack['id'], attack['date'], attack['type'], attack['platform']) self.attackManager.addAttack(attack) if 'HTTP_DIR' in data: for dir in data['HTTP_DIR']: self.targetHost.addHttpDirectory(dir['dir']) if 'HTTP_FILE' in data: for file in data['HTTP_FILE']: self.targetHost.addHttpFile(file['file']) if 'NOTES' in data: for note in data['NOTES']: self.targetHost.addNotes(note['note']) if 'CHECKLISTS' in data: for checklist in data['CHECKLISTS']: for name, category in checklist.items(): for item in category: self.checklistManager.setValue(name, item['id'], item['result'], item['notes']) self._id = sessionId[-5:] self._workingDir = './' + self._sessionId return
#!/usr/bin/python3 from Common import * from Attack import * from Enemy import * from Damage import * from math import sqrt if __name__ == "__main__": damage = Damage("2d6r2 + 3") hit_bonus = Constant(5) # str + prof = 3 + 2 armor_class = 13 hit_type = HitType.NORMAL resisted = False enemy = Enemy(armor_class, hit_type) damage.set_resisted(resisted) attack = Attack(hit_bonus, enemy) attack.add_damage(damage) attack.finish_setup() attack.describe_attack()
enemy = Enemy(armor_class, hit_type) sword_dmg = Damage("1d10r2 + 5") #sword_dmg = Damage("1d8 + 5 + 2") deadly_ambush_dmg = Damage("1d10r2 + 1d8 + 5") #deadly_ambush_dmg = Damage("2d8 + 5 + 2") eldritch_blast_dmg = Damage("1d10 + 5") scorching_ray_dmg = Damage("2d6") cha_hit = Constant(11) # 5 cha + 6 prof int_hit = Constant(8) # 2 int + 6 prof sword_atk = Attack(cha_hit, enemy, crit_lb) sword_atk.add_damage(sword_dmg) deadly_ambush_atk = Attack(cha_hit, enemy, crit_lb) deadly_ambush_atk.add_damage(deadly_ambush_dmg) eldritch_blast_atk = Attack(cha_hit, enemy, crit_lb) eldritch_blast_atk.add_damage(eldritch_blast_dmg) scorching_ray_atk = Attack(int_hit, enemy) scorching_ray_atk.add_damage(scorching_ray_dmg) sword_atks = 2 deadly_ambush_atks = 2 eldritch_blast_atks = 8 scorching_ray_atks = 8