from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from collections.abc import Iterable as _Iterable
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union

DESCRIPTOR: _descriptor.FileDescriptor

class MartialArtType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    MARTIAL_ACTIVE_ESSENCE: _ClassVar[MartialArtType]
    MARTIAL_AUGMENT_SIGIL: _ClassVar[MartialArtType]

class FiveElementsType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    ELEMENT_PHYSICAL_KIM: _ClassVar[FiveElementsType]
    ELEMENT_POISON_MOC: _ClassVar[FiveElementsType]
    ELEMENT_COLD_THUY: _ClassVar[FiveElementsType]
    ELEMENT_FIRE_HOA: _ClassVar[FiveElementsType]
    ELEMENT_DEFENSE_THO: _ClassVar[FiveElementsType]

class SkillTagProto(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    TAG_UNSPECIFIED: _ClassVar[SkillTagProto]
    TAG_MELEE: _ClassVar[SkillTagProto]
    TAG_PROJECTILE: _ClassVar[SkillTagProto]
    TAG_AOE: _ClassVar[SkillTagProto]
    TAG_STRIKE: _ClassVar[SkillTagProto]
    TAG_SLAM: _ClassVar[SkillTagProto]
    TAG_SPELL: _ClassVar[SkillTagProto]
    TAG_CHANNELING: _ClassVar[SkillTagProto]
    TAG_DOT: _ClassVar[SkillTagProto]
    TAG_DEFENSIVE: _ClassVar[SkillTagProto]
    TAG_MOVEMENT: _ClassVar[SkillTagProto]
    TAG_FIRE: _ClassVar[SkillTagProto]
    TAG_COLD: _ClassVar[SkillTagProto]
    TAG_LIGHTNING: _ClassVar[SkillTagProto]
    TAG_POISON: _ClassVar[SkillTagProto]
    TAG_PHYSICAL: _ClassVar[SkillTagProto]

class WeaponRequirementProto(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    WEAPON_ANY: _ClassVar[WeaponRequirementProto]
    WEAPON_SWORD: _ClassVar[WeaponRequirementProto]
    WEAPON_BLADE: _ClassVar[WeaponRequirementProto]
    WEAPON_STAFF: _ClassVar[WeaponRequirementProto]
    WEAPON_PROJECTILE_BOW: _ClassVar[WeaponRequirementProto]
    WEAPON_UNARMED_FIST: _ClassVar[WeaponRequirementProto]
MARTIAL_ACTIVE_ESSENCE: MartialArtType
MARTIAL_AUGMENT_SIGIL: MartialArtType
ELEMENT_PHYSICAL_KIM: FiveElementsType
ELEMENT_POISON_MOC: FiveElementsType
ELEMENT_COLD_THUY: FiveElementsType
ELEMENT_FIRE_HOA: FiveElementsType
ELEMENT_DEFENSE_THO: FiveElementsType
TAG_UNSPECIFIED: SkillTagProto
TAG_MELEE: SkillTagProto
TAG_PROJECTILE: SkillTagProto
TAG_AOE: SkillTagProto
TAG_STRIKE: SkillTagProto
TAG_SLAM: SkillTagProto
TAG_SPELL: SkillTagProto
TAG_CHANNELING: SkillTagProto
TAG_DOT: SkillTagProto
TAG_DEFENSIVE: SkillTagProto
TAG_MOVEMENT: SkillTagProto
TAG_FIRE: SkillTagProto
TAG_COLD: SkillTagProto
TAG_LIGHTNING: SkillTagProto
TAG_POISON: SkillTagProto
TAG_PHYSICAL: SkillTagProto
WEAPON_ANY: WeaponRequirementProto
WEAPON_SWORD: WeaponRequirementProto
WEAPON_BLADE: WeaponRequirementProto
WEAPON_STAFF: WeaponRequirementProto
WEAPON_PROJECTILE_BOW: WeaponRequirementProto
WEAPON_UNARMED_FIST: WeaponRequirementProto

class MartialSkillCore(_message.Message):
    __slots__ = ("skill_id", "skill_name", "art_type", "mastery_level", "element", "energy_cost", "cooldown_ms", "linked_sigil_ids", "tags", "weapon_required", "upside_desc", "downside_desc", "animation_lock_ms", "recoil_damage_pct")
    SKILL_ID_FIELD_NUMBER: _ClassVar[int]
    SKILL_NAME_FIELD_NUMBER: _ClassVar[int]
    ART_TYPE_FIELD_NUMBER: _ClassVar[int]
    MASTERY_LEVEL_FIELD_NUMBER: _ClassVar[int]
    ELEMENT_FIELD_NUMBER: _ClassVar[int]
    ENERGY_COST_FIELD_NUMBER: _ClassVar[int]
    COOLDOWN_MS_FIELD_NUMBER: _ClassVar[int]
    LINKED_SIGIL_IDS_FIELD_NUMBER: _ClassVar[int]
    TAGS_FIELD_NUMBER: _ClassVar[int]
    WEAPON_REQUIRED_FIELD_NUMBER: _ClassVar[int]
    UPSIDE_DESC_FIELD_NUMBER: _ClassVar[int]
    DOWNSIDE_DESC_FIELD_NUMBER: _ClassVar[int]
    ANIMATION_LOCK_MS_FIELD_NUMBER: _ClassVar[int]
    RECOIL_DAMAGE_PCT_FIELD_NUMBER: _ClassVar[int]
    skill_id: int
    skill_name: str
    art_type: MartialArtType
    mastery_level: int
    element: FiveElementsType
    energy_cost: int
    cooldown_ms: int
    linked_sigil_ids: _containers.RepeatedScalarFieldContainer[int]
    tags: _containers.RepeatedScalarFieldContainer[SkillTagProto]
    weapon_required: WeaponRequirementProto
    upside_desc: str
    downside_desc: str
    animation_lock_ms: int
    recoil_damage_pct: float
    def __init__(self, skill_id: _Optional[int] = ..., skill_name: _Optional[str] = ..., art_type: _Optional[_Union[MartialArtType, str]] = ..., mastery_level: _Optional[int] = ..., element: _Optional[_Union[FiveElementsType, str]] = ..., energy_cost: _Optional[int] = ..., cooldown_ms: _Optional[int] = ..., linked_sigil_ids: _Optional[_Iterable[int]] = ..., tags: _Optional[_Iterable[_Union[SkillTagProto, str]]] = ..., weapon_required: _Optional[_Union[WeaponRequirementProto, str]] = ..., upside_desc: _Optional[str] = ..., downside_desc: _Optional[str] = ..., animation_lock_ms: _Optional[int] = ..., recoil_damage_pct: _Optional[float] = ...) -> None: ...

class CastMartialSkillRequest(_message.Message):
    __slots__ = ("caster_entity_id", "skill_id", "target_x", "target_y", "active_weapon_set", "client_timestamp_ms", "auto_weapon_swapped")
    CASTER_ENTITY_ID_FIELD_NUMBER: _ClassVar[int]
    SKILL_ID_FIELD_NUMBER: _ClassVar[int]
    TARGET_X_FIELD_NUMBER: _ClassVar[int]
    TARGET_Y_FIELD_NUMBER: _ClassVar[int]
    ACTIVE_WEAPON_SET_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    AUTO_WEAPON_SWAPPED_FIELD_NUMBER: _ClassVar[int]
    caster_entity_id: int
    skill_id: int
    target_x: float
    target_y: float
    active_weapon_set: int
    client_timestamp_ms: int
    auto_weapon_swapped: bool
    def __init__(self, caster_entity_id: _Optional[int] = ..., skill_id: _Optional[int] = ..., target_x: _Optional[float] = ..., target_y: _Optional[float] = ..., active_weapon_set: _Optional[int] = ..., client_timestamp_ms: _Optional[int] = ..., auto_weapon_swapped: _Optional[bool] = ...) -> None: ...

class PhantomEvasionRequest(_message.Message):
    __slots__ = ("entity_id", "evasion_dir_x", "evasion_dir_y", "client_timestamp_ms")
    ENTITY_ID_FIELD_NUMBER: _ClassVar[int]
    EVASION_DIR_X_FIELD_NUMBER: _ClassVar[int]
    EVASION_DIR_Y_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    entity_id: int
    evasion_dir_x: float
    evasion_dir_y: float
    client_timestamp_ms: int
    def __init__(self, entity_id: _Optional[int] = ..., evasion_dir_x: _Optional[float] = ..., evasion_dir_y: _Optional[float] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class CombatDamageEvent(_message.Message):
    __slots__ = ("source_entity_id", "target_entity_id", "raw_damage", "mitigated_damage", "is_critical", "target_evaded", "element", "recoil_damage_to_source")
    SOURCE_ENTITY_ID_FIELD_NUMBER: _ClassVar[int]
    TARGET_ENTITY_ID_FIELD_NUMBER: _ClassVar[int]
    RAW_DAMAGE_FIELD_NUMBER: _ClassVar[int]
    MITIGATED_DAMAGE_FIELD_NUMBER: _ClassVar[int]
    IS_CRITICAL_FIELD_NUMBER: _ClassVar[int]
    TARGET_EVADED_FIELD_NUMBER: _ClassVar[int]
    ELEMENT_FIELD_NUMBER: _ClassVar[int]
    RECOIL_DAMAGE_TO_SOURCE_FIELD_NUMBER: _ClassVar[int]
    source_entity_id: int
    target_entity_id: int
    raw_damage: int
    mitigated_damage: int
    is_critical: bool
    target_evaded: bool
    element: FiveElementsType
    recoil_damage_to_source: int
    def __init__(self, source_entity_id: _Optional[int] = ..., target_entity_id: _Optional[int] = ..., raw_damage: _Optional[int] = ..., mitigated_damage: _Optional[int] = ..., is_critical: _Optional[bool] = ..., target_evaded: _Optional[bool] = ..., element: _Optional[_Union[FiveElementsType, str]] = ..., recoil_damage_to_source: _Optional[int] = ...) -> None: ...
