View Events
O sistema de View Events permite que scripts reajam quando jogadores olham para outros jogadores, entidades ou blocos. Utiliza ray casting para detecção precisa da linha de visão.
Visão Geral
View events usam ray casting periódico para detectar o que os jogadores estão olhando. Existem três tipos de eventos:
view- Dispara continuamente enquanto olha algofocus- Dispara uma vez quando começa a olharunfocus- Dispara uma vez quando para de olhar
Sintaxe
View Events (Contínuo)
on view player:
# Dispara a cada verificação enquanto olha outro jogador
send action bar "&eLooking at: %target player%" to player
on view entity:
# Dispara enquanto olha qualquer entidade (incluindo players)
send action bar "&eEntity: %target type%" to player
on view block:
# Dispara enquanto olha um bloco
send action bar "&eBlock: %target block%" to player
on view any:
# Dispara enquanto olha qualquer coisa
send action bar "&eDistance: %view distance%m" to playerFocus Events (Começar a Olhar)
on focus player:
# Dispara quando começa a olhar outro jogador
send "&aYou are now looking at %target player%!" to player
on focus entity:
# Dispara quando começa a olhar qualquer entidade
play sound "random.click" to player
on focus block:
# Dispara quando começa a olhar um bloco
set {looking-at} to target blockUnfocus Events (Parar de Olhar)
on unfocus player:
# Dispara quando desvia o olhar de um jogador
send "&7You looked away from %target player%" to player
on unfocus entity:
# Dispara quando desvia de qualquer entidade
log "%player% stopped looking at entity"
on unfocus block:
# Dispara quando desvia de um bloco
clear {looking-at}Aliases
on look at player:
# Mesmo que "on view player:"
on start looking at player:
# Mesmo que "on focus player:"
on stop looking at player:
# Mesmo que "on unfocus player:"Dados Disponíveis
| Expressão | Tipo | Descrição |
|---|---|---|
| player / viewer | Player | O jogador que está olhando |
| target | ViewTarget | Objeto target completo |
| target type | String | Tipo: "player", "entity", "block", "none" |
| target name | String | Nome/descrição do target |
| distance / view distance | Float | Distância até o target em blocos |
| target player | Player | O jogador sendo olhado (se type é player) |
| target entity | Entity | A entidade sendo olhada (se type é entity) |
| target block | Block | O bloco sendo olhado (se type é block) |
Exemplos Práticos
Sistema de Highlight de Player
on focus player:
set {highlighted.%player%} to target player
send "&aYou are now targeting %target player%!" to player
on unfocus player:
if {highlighted.%player%} is set:
send "&7No longer targeting %{highlighted.%player%}%" to player
delete {highlighted.%player%}Combat Lock-On
on focus entity:
if target entity is not player:
set {combat-target.%player%} to target entity
send "&cLocked onto: %target name%!" to player
on unfocus entity:
if {combat-target.%player%} is set:
send "&7Target lost" to player
delete {combat-target.%player%}Sistema Anti-Stare
# Rastreia quanto tempo jogadores olham uns para os outros
on view player:
add 1 to {stare-time.%player%.%target player%}
if {stare-time.%player%.%target player%} >= 100:
send "&c%player% has been staring at you!" to target player
set {stare-time.%player%.%target player%} to 0
on unfocus player:
set {stare-time.%player%.%target player%} to 0Configuração
Configure o sistema de view em config.yml:
# Distância máxima para detecção (em blocos) view-max-distance: 100.0 # Intervalo de verificação em ticks (20 ticks = 1 segundo) # Valores menores = mais responsivo mas maior uso de CPU view-check-interval: 5 # 4 vezes por segundo
Considerações de Performance
- Intervalo de verificação - O padrão é 5 ticks (4x por segundo). Aumente se tiver muitos jogadores
- Distância máxima - Distâncias menores = ray casting mais rápido
- Tipos de target - Use tipos específicos (
player,block) ao invés deanyquando possível - Tipo de evento - Use
focus/unfocusao invés deviewquando só precisa de mudanças de estado
Detalhes Técnicos
- A detecção de view usa ray casting a partir da posição dos olhos do jogador
- Detecção de entidades usa interseção de bounding box com o raio
- Detecção de blocos usa VoxelRayTrace do PocketMine
- O sistema mantém cache do último target por jogador para detectar mudanças de focus
- Eventos view disparam a cada intervalo de verificação enquanto olha targets válidos
- Eventos focus/unfocus só disparam em mudanças de estado