Source code for antorum.packets.stats

import enum
import logging
from typing import TYPE_CHECKING

from antorum.packets import NetworkPacket
from antorum.utils import BufferReader

if TYPE_CHECKING:
    from antorum import multiplayer

packet_id = 18


[docs] class Stat(enum.Enum): STAMINA = 0 STRENGTH = 1 SMARTS = 2 SPEED = 3 ARMOR = 4 DAMAGE = 5 MAX_HEALTH = 6 SPEED_BONUS = 7
[docs] class StatBonuses: def __init__(self, reader: BufferReader): self.base_hp = reader.read_int32() self.base_hit_chance = reader.read_float() self.base_dodge_chance = reader.read_float() self.base_block_chance = reader.read_float() self.skill_success_bonus = reader.read_float()
[docs] class ClassBonuses: def __init__(self, reader: BufferReader): self.crafting_exp_bonus = reader.read_float() self.foraging_exp_bonus = reader.read_float() self.combat_exp_bonus = reader.read_float()
[docs] class Response(NetworkPacket): packet_id = packet_id def __init__(self, data: bytes): reader = BufferReader(data) self.stats = {Stat(reader.read_int8()): reader.read_int32() for _ in range(reader.read_int64())} self.bonuses = StatBonuses(reader) self.class_bonuses = ClassBonuses(reader) # Spell effects, not implemented yet for _ in range(reader.read_int64()): reader.read_int64(), reader.read_string(), reader.read_string(), reader.read_int64() reader.read_int32(), reader.read_int32(), reader.read_bool()
[docs] def update_stat(stat, value, client: "multiplayer.Client"): client.game.local_player.stats[stat] = value
[docs] def update_stats(stats, client: "multiplayer.Client"): for stat, value in stats.items(): update_stat(stat, value, client)
[docs] def handle(packet: Response, client: "multiplayer.Client"): logging.debug(f"Received stats: {packet.stats}") update_stats(packet.stats, client)
receive_packet = Response