import quest_pb2 as _quest_pb2
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, Mapping as _Mapping
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union

DESCRIPTOR: _descriptor.FileDescriptor

class NpcRole(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    NPC_ROLE_UNSPECIFIED: _ClassVar[NpcRole]
    NPC_ROLE_OUTCAST_SCAVENGER: _ClassVar[NpcRole]
    NPC_ROLE_BONE_BLACKSMITH: _ClassVar[NpcRole]
    NPC_ROLE_BLOOD_SHAMAN: _ClassVar[NpcRole]
    NPC_ROLE_FERAL_TRACKER: _ClassVar[NpcRole]
    NPC_ROLE_SAVAGE_HERMIT: _ClassVar[NpcRole]
    NPC_ROLE_FERAL_SPIRIT: _ClassVar[NpcRole]
    NPC_ROLE_WAR_CHIEF: _ClassVar[NpcRole]

class NpcServiceType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    NPC_SERVICE_UNSPECIFIED: _ClassVar[NpcServiceType]
    NPC_SERVICE_DIALOGUE: _ClassVar[NpcServiceType]
    NPC_SERVICE_QUEST_DISPATCH: _ClassVar[NpcServiceType]
    NPC_SERVICE_SHOP_VAULT: _ClassVar[NpcServiceType]
    NPC_SERVICE_CRAFTING_FORGE: _ClassVar[NpcServiceType]
    NPC_SERVICE_MERIDIAN_INSIGHT: _ClassVar[NpcServiceType]
    NPC_SERVICE_MAP_TELEPORT_GUIDE: _ClassVar[NpcServiceType]
    NPC_SERVICE_SECRET_TRIAL: _ClassVar[NpcServiceType]
NPC_ROLE_UNSPECIFIED: NpcRole
NPC_ROLE_OUTCAST_SCAVENGER: NpcRole
NPC_ROLE_BONE_BLACKSMITH: NpcRole
NPC_ROLE_BLOOD_SHAMAN: NpcRole
NPC_ROLE_FERAL_TRACKER: NpcRole
NPC_ROLE_SAVAGE_HERMIT: NpcRole
NPC_ROLE_FERAL_SPIRIT: NpcRole
NPC_ROLE_WAR_CHIEF: NpcRole
NPC_SERVICE_UNSPECIFIED: NpcServiceType
NPC_SERVICE_DIALOGUE: NpcServiceType
NPC_SERVICE_QUEST_DISPATCH: NpcServiceType
NPC_SERVICE_SHOP_VAULT: NpcServiceType
NPC_SERVICE_CRAFTING_FORGE: NpcServiceType
NPC_SERVICE_MERIDIAN_INSIGHT: NpcServiceType
NPC_SERVICE_MAP_TELEPORT_GUIDE: NpcServiceType
NPC_SERVICE_SECRET_TRIAL: NpcServiceType

class NpcDialogueChoicePayload(_message.Message):
    __slots__ = ("choice_id", "text", "required_level", "required_quest_id", "target_node_id", "trigger_service", "trigger_param", "is_terminal")
    CHOICE_ID_FIELD_NUMBER: _ClassVar[int]
    TEXT_FIELD_NUMBER: _ClassVar[int]
    REQUIRED_LEVEL_FIELD_NUMBER: _ClassVar[int]
    REQUIRED_QUEST_ID_FIELD_NUMBER: _ClassVar[int]
    TARGET_NODE_ID_FIELD_NUMBER: _ClassVar[int]
    TRIGGER_SERVICE_FIELD_NUMBER: _ClassVar[int]
    TRIGGER_PARAM_FIELD_NUMBER: _ClassVar[int]
    IS_TERMINAL_FIELD_NUMBER: _ClassVar[int]
    choice_id: str
    text: str
    required_level: int
    required_quest_id: str
    target_node_id: str
    trigger_service: NpcServiceType
    trigger_param: str
    is_terminal: bool
    def __init__(self, choice_id: _Optional[str] = ..., text: _Optional[str] = ..., required_level: _Optional[int] = ..., required_quest_id: _Optional[str] = ..., target_node_id: _Optional[str] = ..., trigger_service: _Optional[_Union[NpcServiceType, str]] = ..., trigger_param: _Optional[str] = ..., is_terminal: _Optional[bool] = ...) -> None: ...

class NpcDialogueNodePayload(_message.Message):
    __slots__ = ("node_id", "speaker_title", "content", "voice_cue_id", "choices", "is_terminal")
    NODE_ID_FIELD_NUMBER: _ClassVar[int]
    SPEAKER_TITLE_FIELD_NUMBER: _ClassVar[int]
    CONTENT_FIELD_NUMBER: _ClassVar[int]
    VOICE_CUE_ID_FIELD_NUMBER: _ClassVar[int]
    CHOICES_FIELD_NUMBER: _ClassVar[int]
    IS_TERMINAL_FIELD_NUMBER: _ClassVar[int]
    node_id: str
    speaker_title: str
    content: str
    voice_cue_id: str
    choices: _containers.RepeatedCompositeFieldContainer[NpcDialogueChoicePayload]
    is_terminal: bool
    def __init__(self, node_id: _Optional[str] = ..., speaker_title: _Optional[str] = ..., content: _Optional[str] = ..., voice_cue_id: _Optional[str] = ..., choices: _Optional[_Iterable[_Union[NpcDialogueChoicePayload, _Mapping]]] = ..., is_terminal: _Optional[bool] = ...) -> None: ...

class NpcInfoPayload(_message.Message):
    __slots__ = ("npc_id", "name", "title", "role", "zone_id", "x", "y", "z", "interaction_radius", "supported_services", "default_dialogue_node_id", "required_level", "current_dialogue_tree_id", "is_visible")
    NPC_ID_FIELD_NUMBER: _ClassVar[int]
    NAME_FIELD_NUMBER: _ClassVar[int]
    TITLE_FIELD_NUMBER: _ClassVar[int]
    ROLE_FIELD_NUMBER: _ClassVar[int]
    ZONE_ID_FIELD_NUMBER: _ClassVar[int]
    X_FIELD_NUMBER: _ClassVar[int]
    Y_FIELD_NUMBER: _ClassVar[int]
    Z_FIELD_NUMBER: _ClassVar[int]
    INTERACTION_RADIUS_FIELD_NUMBER: _ClassVar[int]
    SUPPORTED_SERVICES_FIELD_NUMBER: _ClassVar[int]
    DEFAULT_DIALOGUE_NODE_ID_FIELD_NUMBER: _ClassVar[int]
    REQUIRED_LEVEL_FIELD_NUMBER: _ClassVar[int]
    CURRENT_DIALOGUE_TREE_ID_FIELD_NUMBER: _ClassVar[int]
    IS_VISIBLE_FIELD_NUMBER: _ClassVar[int]
    npc_id: str
    name: str
    title: str
    role: NpcRole
    zone_id: str
    x: float
    y: float
    z: float
    interaction_radius: float
    supported_services: _containers.RepeatedScalarFieldContainer[NpcServiceType]
    default_dialogue_node_id: str
    required_level: int
    current_dialogue_tree_id: str
    is_visible: bool
    def __init__(self, npc_id: _Optional[str] = ..., name: _Optional[str] = ..., title: _Optional[str] = ..., role: _Optional[_Union[NpcRole, str]] = ..., zone_id: _Optional[str] = ..., x: _Optional[float] = ..., y: _Optional[float] = ..., z: _Optional[float] = ..., interaction_radius: _Optional[float] = ..., supported_services: _Optional[_Iterable[_Union[NpcServiceType, str]]] = ..., default_dialogue_node_id: _Optional[str] = ..., required_level: _Optional[int] = ..., current_dialogue_tree_id: _Optional[str] = ..., is_visible: _Optional[bool] = ...) -> None: ...

class InteractNpcRequest(_message.Message):
    __slots__ = ("player_id", "npc_id", "zone_id", "player_x", "player_y", "player_level", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    NPC_ID_FIELD_NUMBER: _ClassVar[int]
    ZONE_ID_FIELD_NUMBER: _ClassVar[int]
    PLAYER_X_FIELD_NUMBER: _ClassVar[int]
    PLAYER_Y_FIELD_NUMBER: _ClassVar[int]
    PLAYER_LEVEL_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    npc_id: str
    zone_id: str
    player_x: float
    player_y: float
    player_level: int
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., npc_id: _Optional[str] = ..., zone_id: _Optional[str] = ..., player_x: _Optional[float] = ..., player_y: _Optional[float] = ..., player_level: _Optional[int] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class InteractNpcResponse(_message.Message):
    __slots__ = ("success", "message", "npc_info", "active_dialogue_node", "relevant_quests")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    NPC_INFO_FIELD_NUMBER: _ClassVar[int]
    ACTIVE_DIALOGUE_NODE_FIELD_NUMBER: _ClassVar[int]
    RELEVANT_QUESTS_FIELD_NUMBER: _ClassVar[int]
    success: bool
    message: str
    npc_info: NpcInfoPayload
    active_dialogue_node: NpcDialogueNodePayload
    relevant_quests: _containers.RepeatedCompositeFieldContainer[_quest_pb2.QuestState]
    def __init__(self, success: _Optional[bool] = ..., message: _Optional[str] = ..., npc_info: _Optional[_Union[NpcInfoPayload, _Mapping]] = ..., active_dialogue_node: _Optional[_Union[NpcDialogueNodePayload, _Mapping]] = ..., relevant_quests: _Optional[_Iterable[_Union[_quest_pb2.QuestState, _Mapping]]] = ...) -> None: ...

class SelectDialogueChoiceRequest(_message.Message):
    __slots__ = ("player_id", "npc_id", "current_node_id", "choice_id", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    NPC_ID_FIELD_NUMBER: _ClassVar[int]
    CURRENT_NODE_ID_FIELD_NUMBER: _ClassVar[int]
    CHOICE_ID_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    npc_id: str
    current_node_id: str
    choice_id: str
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., npc_id: _Optional[str] = ..., current_node_id: _Optional[str] = ..., choice_id: _Optional[str] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class SelectDialogueChoiceResponse(_message.Message):
    __slots__ = ("success", "message", "next_node", "triggered_service", "triggered_payload_id")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    NEXT_NODE_FIELD_NUMBER: _ClassVar[int]
    TRIGGERED_SERVICE_FIELD_NUMBER: _ClassVar[int]
    TRIGGERED_PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
    success: bool
    message: str
    next_node: NpcDialogueNodePayload
    triggered_service: NpcServiceType
    triggered_payload_id: str
    def __init__(self, success: _Optional[bool] = ..., message: _Optional[str] = ..., next_node: _Optional[_Union[NpcDialogueNodePayload, _Mapping]] = ..., triggered_service: _Optional[_Union[NpcServiceType, str]] = ..., triggered_payload_id: _Optional[str] = ...) -> None: ...
