================================================================================
  BOT AUTONOMO WYD — COMANDOS E DOCUMENTACAO
  BotEngine (cliente grafico WYD.exe)
  Atualizado: 2026-07-17
================================================================================

SUMARIO
  1. O que e
  2. Requisitos
  3. Comandos de chat (/bot)
  4. Modos de operacao
  5. Maquina de estados (FSM)
  6. Prioridade de decisao
  7. Configuracao (combat_tune.ini)
  8. Fluxos de uso recomendados
  9. Reposicao automatica (venda/deposito)
 10. Limitacoes conhecidas
 11. Arquivos do codigo-fonte

================================================================================
1. O QUE E
================================================================================

Motor de autonomia embutido no WYD.exe. Controla o personagem via /bot no chat.

Nivel 1 — GameAuto (UI classica)
Nivel 2 — BotEngine (/bot): farm, loot, fuga, party, suporte, area, rota,
          anti-stuck, morte/retorno, venda/deposito, kite, filtros.

Reconexao/retorno:
  /salvar grava o caminho percorrido em bot_path.txt (com movimento e portal)
  e arma a retomada automatica. Se a conexao cair, o cliente reaproveita o
  auto-login existente, reproduz o caminho salvo e religa o farm.

IMPORTANTE: BotEngine e GameAuto NAO rodam juntos. /bot on desliga o GameAuto.

================================================================================
2. REQUISITOS
================================================================================

  - Cliente recompilado com BotEngine (MSVC).
  - combat_tune.ini na pasta do WYD.exe.
  - Personagem em campo.
  - Para suporte: party + skills de cura/buff no cinto.
  - Para venda auto: NPC de loja (Reserved&0xF == 1) a vista.
  - Para deposito: NPC bau (Reserved&0xF == 2) a vista.

================================================================================
3. COMANDOS DE CHAT (/bot)
================================================================================

---- LIGAR / DESLIGAR ----
  /bot on [hp%]       Farm autonomo (loot+fuga). Ex: /bot on 30
  /bot auto [raio]    AUTONOMIA TOTAL: liga tudo e se auto-gerencia como jogador
                      (loot+fuga+venda+deposito+rota+humanize+reconexao).
                      Ex: /bot auto      -> sem limite de area
                          /bot auto 25   -> limita ao raio 25 do ponto atual
  /bot auto off       Desliga a autonomia total
  /bot upar           Loop cidade -> portal (marca da Gema) -> farm -> retorno
  /bot upar off
  /bot quest [item]   Loop quest com ingresso. Ex: /bot quest 1737
  /bot quest off
  /bot off            Desliga

---- CIDADE / DESTINOS ----
  /bot farm           Alias /bot on; NA CIDADE ativa UPAR e tenta o portal
  /bot marcar         Usa Gema Estelar (700) e grava a marca atual
  /bot destino farm   Salva a posicao atual como destino de farm/marca
  /bot destino cidade Salva a cidade/base atual
  /bot destino loja   Salva a posicao da loja NPC (venda/compra)
  /bot destino bau    Salva a posicao do bau
  /bot destino quest  Salva a entrada da quest atual
  /bot cidade status  Mostra bot_city.ini carregado
  /bot drop on|off    Liga/desliga loot no ciclo UPAR/Quest

---- COMPORTAMENTO HUMANO ----
  /bot humanize on|off   Varia o tempo de reacao/movimento (menos robotico).
                         Ligado automaticamente por /bot auto.

---- STATUS / DEBUG ----
  /bot status         Estado, modo, goal Utility, ultima decisao, loot, fuga, area, rota, human
                      + telemetria resupply/dry-run (fase, NPC, restock bloqueado, unstuck)
  /bot mind           Snapshot de percepcao + blackboard + telemetria resupply
  /bot debug on|off   Log periodico no chat (inclui goal e score)
  /bot dryrun on|off  Simula pacotes de economia (loja/portal/deposito/recall) sem enviar.
                      Mostra [bot dry] tag no chat. Repor em dry-run loga intencoes
                      e segue o ciclo (portal/rota) sem travar na loja. Reset ao /bot off.

---- SUPORTE / FOLLOW ----
  /bot suporte        Segue lider, cura/buff party, assiste alvo
  /bot suporte off
  /bot follow on|off  Segue lider e ataca o alvo dele (sem cura)

---- LOOT / FILTROS ----
  /bot loot on|off
  /bot filter Nome    So mobs com esse nome (contains)
  /bot filter clear
  /bot lootfilter Nome    So pega drops cujo nome contem Nome
  /bot lootfilter clear

---- FUGA / KITE ----
  /bot flee 30        Fuga abaixo de 30% HP
  /bot flee off
  /bot kite 5         Mantem distancia ~5 tiles (range)
  /bot kite off

---- AREA / ROTA ----
  /bot area 20        Geofence raio 20 a partir da posicao atual
  /bot area off
  /bot rota gravar    Grava waypoints andando (max 256; bot pode estar desligado)
  /bot rota parar     Salva em bot_route.txt
  /bot rota carregar  Carrega, liga o BotEngine e inicia a patrulha
  /bot rota usar on|off   Patrulha quando ocioso

---- REPOSICAO ----
  /bot sell on|off       Venda automatica de lixo no NPC loja
  /bot deposit on|off    Deposito automatico no bau

---- RECONEXAO / CAMINHO DE RETORNO ----
  /salvar
      Inicia a gravacao eficiente do caminho percorrido.
      - Salva automaticamente em bot_path.txt a cada ~5s
      - Registra movimento e confirmacao de portal
      - Arma reconexao/retorno/farm em bot_reconnect.ini
      - Se esquecer de /parar, a queda de conexao fecha e salva a rota

  /parar
      Encerra a gravacao e salva bot_path.txt.

  /reconectar
      Arma a reconexao automatica usando o caminho atual.

  /reconectar off
      Desarma a reconexao automatica.

================================================================================
4. MODOS
================================================================================

  FARM      /bot on            farm + loot + fuga
  ASSIST    /bot suporte       segue/cura/assiste lider (sem farm solo)
  FOLLOW    /bot follow on     segue lider e ataca alvo dele (com bot ligado)
  AUTO      /bot auto [raio]   AUTONOMIA TOTAL (FullAutonomy)
  UPAR      /bot upar          usa Pergaminho do Portal para voltar a marca
  QUEST     /bot quest [item]  usa ingresso e reentra apos kick para cidade

  FullAutonomy (/bot auto) liga de uma vez:
    - loot ON, fuga ON, venda ON, deposito ON
    - humanize ON (tempo de reacao variavel + perambular ocioso)
    - carrega bot_route.txt e patrulha quando ocioso (se houver rota)
    - arma reconexao/retorno automatico (como /reconectar)
    - opcional: geofence de raio se informado (/bot auto 25)
  Objetivo: comportamento proximo ao de um jogador, sem sequencia de comandos.

  Cidade/UPAR:
    - /bot marcar usa Gema Estelar (EF_VOLATILE 12, item 700) no spot.
    - Na cidade, /bot upar usa Pergaminho do Portal (EF_VOLATILE 13)
      para voltar a marca.
    - Inventario cheio no campo usa Pergaminho de Retorno (EF_VOLATILE 11)
      para voltar a cidade, repor e retornar a marca.

  Quest:
    - /bot destino quest grava a entrada da quest.
    - /bot quest [item] usa o ingresso informado; sem item, tenta qualquer
      item EF_VOLATILE 14.
    - Se o servidor expulsar para a cidade ao fim do tempo, o bot detecta
      IsInTown() e reentra conforme a configuracao.

================================================================================
5. ESTADOS (FSM)
================================================================================

  Idle, Buffing, Hunting, Looting, Fleeing, PartyFollow, PartySupport,
  Dead, Recovering, Returning, Waiting, Resupplying, City, Traveling

  Resupplying fases internas:
    SeekNpc -> OpenShop -> Selling -> Buying -> OpenCargo -> Depositing -> ReturnFarm

  Sessao de loja (contrato de progresso):
    - Cada venda/compra enviada precisa mudar inventario/gold em ate 1.5s;
      4 acoes sem resposta encerram a sessao (nao spamma pacotes).
    - Ao terminar (sucesso ou falha) o bot FECHA a loja sozinho e poe o NPC
      em blacklist temporaria (45s sucesso / 90s falha) — nao reabre em loop.
    - Se o jogador fechar a loja manualmente, a sessao e encerrada na hora
      (nao reabre). Maximo de 4 tentativas de abertura por sessao.
    - Loja sem estoque/falha com restock pendente: Resupply fica bloqueado
      por 90s (Utility segue com portal/rota/espera) e tenta de novo depois
      ou em nova visita a cidade.

  Ciclo cidade↔farm (pos-loja):
    - finishResupplyPhase fecha loja/bau e passa a tickCity (portal) ou Idle.
    - Sem NPC loja na cidade: nao fica em Waiting — segue ciclo (portal/rota).
    - Deposito: fecha bau ao concluir.

================================================================================
6. PRIORIDADE DE DECISAO
================================================================================

  1 Morte  2 Recovering  3 Returning  4 Waiting/Resupply/Traveling
  5 Sense (percepcao) + Blackboard
  6 Utility AI escolhe goal (Flee/GoCity/Resupply/Quest/Mark/Support/Loot/Hunt/Patrol)
  7 Dispatch do goal -> estado FSM correspondente

  GoCity dispara com inventario cheio OU poucas pocoes (< BotMinPotions),
  usando Pergaminho de Retorno (EF_VOLATILE 11).

  Na cidade, antes do portal: vende lixo e COMPRA pocoes + Pergaminho do Portal
  se faltar. So entao usa 1 portal (marca da Gema).

================================================================================
7. CONFIGURACAO (combat_tune.ini)
================================================================================

  MacroMpPercent / MacroPotionCheckMs / MacroChaseRange / MacroMobsOnly

  BotLootRange=2
  BotFollowDistance=4
  BotSupportHealPct=70
  BotStuckCheckMs=2000
  BotStuckThreshold=4
  BotDeathReviveMs=15000
  BotInventoryThreshold=58
  BotMinPotions=3
  BotTargetStickiness=12
  BotJunkMaxPrice=5000      # vende/deposita itens com preco <= este
  BotNpcRange=8            # distancia para interagir com NPC
  BotLootMinPrice=0         # 0=desliga; ignora drops baratos demais
  BotAutoSell=1
  BotAutoDeposit=1
  BotKiteDistance=0         # 0=off; >0 liga kite ao /bot on
  BotRouteSteps=12          # passos A* por movimento (4..24)
  ReloadSeconds=3

Arquivo de rota: bot_route.txt (mesma pasta do WYD.exe)
  linha1: quantidade
  demais: X Y por linha

Arquivos da reconexao:
  bot_path.txt
      Caminho gravado por /salvar. Guarda eventos MOVE, PORTAL e TELEPORT.
      Usado para voltar ao caminho apos reconectar.

  bot_reconnect.ini
      Sessao de retomada: farm_x/farm_y, flags de bot, pendencia de retorno.

Arquivo de autonomia na cidade:
  bot_city.ini
      mode=upar|quest|none
      home_x/home_y
      mark_x/mark_y
      quest_entry_x/quest_entry_y
      quest_ticket=0        # 0 = qualquer ingresso EF_VOLATILE 14
      drop_enabled=1
      sell_enabled=1
      deposit_enabled=1

================================================================================
8. FLUXOS RECOMENDADOS
================================================================================

Autonomia total (recomendado para "jogar sozinho"):
  1. (opcional) grave a rota: /bot rota gravar -> andar -> /bot rota parar
  2. (opcional) /salvar para gravar o caminho de retorno com teleporte
  3. /bot auto            (ou /bot auto 25 para limitar a area)
  O personagem passa a caçar, lootar, repor, fugir, patrulhar e reconectar
  sozinho, com tempos de reacao variaveis.

UPAR com cidade + Gema Estelar:
  1. Va ate o spot de farm/entrada desejada.
  2. Use /bot marcar (Gema Estelar) OU marque a Gema manualmente.
     O portal teleporta para a marca da Gema no SERVIDOR; /bot marcar
     tambem grava o retorno local em bot_city.ini.
  3. Tenha Pergaminho do Portal/Teleporte (699 ou 776) na mochila.
  4. (recomendado) Perto da loja NPC: /bot destino loja
  5. Na cidade: /bot upar (ou /bot farm — na cidade tambem ativa UPAR).
  O bot usa o portal, farma, usa Pergaminho de Retorno quando precisar
  voltar, repoe e retorna.

Quest com ingresso:
  1. Na entrada da quest, use /bot destino quest.
  2. Se quiser, use /bot marcar tambem para marcar essa entrada.
  3. Na cidade, use /bot quest 1737 (troque 1737 pelo item do ingresso).
  4. Ao ser expulso para a cidade pelo tempo da quest, o bot detecta a cidade
     e tenta reentrar usando o ingresso configurado.

Farm com area:
  /bot area 25
  /bot on

Reconexao com retorno eficiente:
  1. Va do ponto de retorno seguro ate o spot de farm.
  2. Digite /salvar antes de comecar o trajeto.
  3. Caminhe normalmente; pode usar portal/teleporte.
  4. Chegando no spot, digite /parar.
  5. Ligue o farm: /bot on
  Se a conexao cair, o cliente volta pelo auto-login, reproduz bot_path.txt
  e religa o farm ao final.

Patrulha persistente:
  /bot rota gravar  -> andar -> /bot rota parar
  /bot rota carregar
  (o comando de carregar ja liga o bot e inicia a patrulha)

Suporte:
  /bot suporte

Foema range:
  /bot kite 6
  /bot on

Loot seletivo:
  /bot lootfilter Diamante
  /bot on

================================================================================
9. REPOSICAO AUTOMATICA
================================================================================

Quando Carry slots usados >= BotInventoryThreshold OU pocoes < BotMinPotions:
  1. No campo: usa Pergaminho de Retorno (se houver) e salva ponto de farm
  2. Na cidade: procura NPC loja e abre (MSG_REQShopList)
  3. Vende 1 item de lixo por tick (preco <= BotJunkMaxPrice;
     nunca pocoes/racoes/pergaminhos)
  4. COMPRA pocoes (HP/MP) ate ~4x BotMinPotions e 1 Pergaminho do Portal
     se o modo UPAR/auto estiver ativo
  5. Se ainda cheio e ha bau: abre cargo e deposita
  6. Libera 1 tentativa de portal e volta ao farm (marca da Gema)

Se a loja nao vender pot/portal, o bot nao trava: avisa e tenta sair mesmo assim.

================================================================================
10. LIMITACOES
================================================================================

  - Compra depende do NPC loja ter pot (400-419/428-435) e portal (699/776)
    na vitrine aberta no cliente.
  - Pathfind = BASE_GetRoute (guloso); BotRouteSteps ajusta quantos tiles por pacote.
  - Anti-stuck: so dispara se o bot TENTOU se mover e nao saiu do lugar
    (parado de proposito em loja/portal nao conta). No campo tenta rota A*
    ao farm antes das 8 direcoes; na cidade so passos curtos (saida e por portal).
  - A marca de farm (mark_x/y) deve ser gravada NO SPOT DE FARM com /bot marcar.
    Marca dentro da cidade faz o retorno pos-portal virar "andar sem sentido";
    /bot upar avisa se a marca parecer ser dentro da cidade.
  - Rota max 256 pontos; arquivo bot_route.txt nao e por personagem.
  - bot_path.txt tambem nao e por personagem; grave novamente para cada spot.
  - Reconexao depende do auto-login/auto-enter-char ja configurado em wyd_login.ini.
  - NPC precisa estar visivel no cliente (container de humans).
  - Portal: no maximo 1 por visita; falha exige marca da Gema + /bot upar.
  - Requer rebuild do WYD.exe.

================================================================================
11. ARQUIVOS
================================================================================

  Source cliente/Projects/TMProject/BotEngine.h / .cpp
  Source cliente/Projects/TMProject/BotNet.h / .cpp       (dry-run + envio centralizado)
  Source cliente/Projects/TMProject/BotCityPlanner.h / .cpp
  Source cliente/Projects/TMProject/BotPerception.h / .cpp
  Source cliente/Projects/TMProject/BotBlackboard.h / .cpp
  Source cliente/Projects/TMProject/BotUtility.h / .cpp
  Source cliente/Projects/TMProject/BotAutoReconnect.h / .cpp
  Source cliente/Projects/TMProject/BotPathRecorder.h / .cpp
  Source cliente/Projects/TMProject/TMFieldScene.cpp  (/bot chat)
  Source cliente/Projects/TMProject/CombatTune.h / .cpp
  Release/GameServer/combat_tune.ini
  Release/GameServer/bot.txt   (referencia rapida)
  docs/bot.txt                 (este arquivo)
  docs/memory/BOTWYD.md

================================================================================
  FIM
================================================================================
