summaryrefslogtreecommitdiff
path: root/cogs/adv_inc/Enemy.py
blob: f5f76e6452fae73e133c2927e7d7ac16ce527fa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import pymysql
import math
import random
import importlib
import utils

importlib.reload(utils)


async def create_enemy(enemy_stats, player_stats, params):
    # Update player state for combat
    await utils.sql_postgres("CALL adventurersinc.set_playerstate_combat(%s)", (params['nick'],), False)

    # If challenge_rating is an INT we'll swap for a boss
    if player_stats['challenge_rating'] == int(math.ceil(player_stats['challenge_rating'] / 4) * 4):
        str_class = "boss"
    else:
        str_class = "normal"

    # Get enemy weighting list
    all_enemies = await utils.sql_postgres(f"SELECT adventurersinc.get_all_enemies(%s)", (str_class,), True)
    int_total_weight = random.randint(1, all_enemies[0][0]['total_weight'])

    # Apply challenge rating modifier to enemy
    int_challenge_modifier = player_stats['challenge_rating'] / 2

    for enemy in all_enemies:
        int_total_weight = int_total_weight - enemy[0]['enemy_weight']
        if int_total_weight <= 0:
            # Set stats
            enemy[0]['enemy_colour'] = enemy[0]['enemy_colour']
            enemy[0]['enemy_name'] = str(enemy[0]['enemy_name'])
            enemy[0]['enemy_class'] = str(enemy[0]['enemy_class'])
            enemy[0]['unlock'] = str(enemy[0]['unlock'])
            enemy[0]['hp'] = math.floor(enemy[0]['hp'] * int_challenge_modifier)
            enemy[0]['enemy_weight'] = math.floor(enemy[0]['enemy_weight'] * int_challenge_modifier)
            enemy[0]['challenge_rating'] = math.floor(enemy[0]['challenge_rating'] * int_challenge_modifier)
            enemy[0]['gold_carried'] = math.floor(enemy[0]['gold_carried'] * int_challenge_modifier)
            enemy[0]['strength'] = math.floor(enemy[0]['strength'] * int_challenge_modifier)
            enemy[0]['dexterity'] = math.floor(enemy[0]['dexterity'] * int_challenge_modifier)
            enemy[0]['constitution'] = math.floor(enemy[0]['constitution'] * int_challenge_modifier)
            enemy[0]['intelligence'] = math.floor(enemy[0]['intelligence'] * int_challenge_modifier)
            enemy[0]['dodge'] = math.floor(enemy[0]['dodge'] * int_challenge_modifier)
            enemy[0]['crit'] = math.floor(enemy[0]['crit'] * int_challenge_modifier)
            enemy[0]['accuracy'] = math.floor(enemy[0]['accuracy'] * int_challenge_modifier)
            enemy[0]['resistance'] = math.floor(enemy[0]['resistance'] * int_challenge_modifier)
            enemy[0]['luck'] = math.floor(enemy[0]['luck'] * int_challenge_modifier)
            enemy[0]['block'] = math.floor(enemy[0]['block'] * int_challenge_modifier)
            break

    await utils.sql_postgres("CALL adventurersinc.add_player_enemy(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
                             (params['nick'], enemy[0]['enemy_colour'], enemy[0]['enemy_name'], enemy[0]['enemy_class'], enemy[0]['unlock'], enemy[0]['hp'], enemy[0]['enemy_weight'],enemy[0]['challenge_rating'], enemy[0]['gold_carried'],
                              enemy[0]['strength'], enemy[0]['dexterity'], enemy[0]['constitution'], enemy[0]['intelligence'], enemy[0]['dodge'], enemy[0]['crit'], enemy[0]['accuracy'], enemy[0]['resistance'], enemy[0]['luck'], enemy[0]['block'],), False)

    return enemy[0]


async def get_enemy_stats(params):
    enemy = await utils.sql_postgres("SELECT adventurersinc.get_player_enemy(%s)", (params['nick'],), True)
    if enemy[0][0] is None:
        return None

    enemy[0][0]['enemy_colour'] = enemy[0][0]['enemy_colour']
    enemy[0][0]['enemy_name'] = enemy[0][0]['enemy_name']
    enemy[0][0]['enemy_class'] = enemy[0][0]['enemy_class']
    enemy[0][0]['unlock'] = enemy[0][0]['unlock']
    enemy[0][0]['hp'] = enemy[0][0]['hp']
    enemy[0][0]['gold_carried'] = enemy[0][0]['gold_carried']
    enemy[0][0]['strength'] = enemy[0][0]['strength']
    enemy[0][0]['dexterity'] = enemy[0][0]['dexterity']
    enemy[0][0]['constitution'] = enemy[0][0]['constitution']
    enemy[0][0]['intelligence'] = enemy[0][0]['intelligence']
    enemy[0][0]['dodge'] = enemy[0][0]['dodge']
    enemy[0][0]['crit'] = enemy[0][0]['crit']
    enemy[0][0]['accuracy'] = enemy[0][0]['accuracy']
    enemy[0][0]['resistance'] = enemy[0][0]['resistance']
    enemy[0][0]['luck'] = enemy[0][0]['luck']
    enemy[0][0]['block'] = enemy[0][0]['block']
    enemy[0][0]['armour'] = 0
    enemy[0][0]['unit_type'] = 'enemy'

    return enemy[0][0]