Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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"
Esempio n. 8
0
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
Esempio n. 9
0
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)
Esempio n. 10
0
 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
Esempio n. 11
0
    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
Esempio n. 12
0
    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")
Esempio n. 13
0
    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
Esempio n. 14
0
    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")
Esempio n. 15
0
 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()
Esempio n. 16
0
    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
Esempio n. 17
0
    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
Esempio n. 18
0
    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
Esempio n. 19
0
    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):
Esempio n. 20
0
#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()
Esempio n. 21
0
    # 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)
Esempio n. 22
0
 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")
Esempio n. 23
0
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
Esempio n. 24
0
        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
Esempio n. 25
0
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
Esempio n. 26
0
    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
Esempio n. 27
0
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)
'''
Esempio n. 28
0
    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
Esempio n. 29
0
#!/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()
Esempio n. 30
0
    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