Saltearse al contenido

Interacciones de Objetos

Descripción General

Las interacciones de objetos definen cómo se comportan los objetos cuando se usan — ataques, colocación de bloques, consumo, uso de herramientas, rodadas evasivas y más. Cada interacción es un objeto JSON con un Type y un campo opcional Next que encadena al siguiente paso. Esto crea tuberías que pueden ramificarse en condiciones, causar daño, aplicar efectos, reproducir sonidos y generar partículas. Los archivos de interacción son referenciados por ID desde las definiciones de objetos a través de los campos Interactions e InteractionVars.

Ubicación del Archivo

Assets/Server/Item/Interactions/<Category>/<InteractionId>.json

Interacciones de nivel superior y raíz:

Assets/Server/Item/Interactions/Block_Primary.json
Assets/Server/Item/Interactions/Block_Secondary.json
Assets/Server/Item/Interactions/Dodge.json
Assets/Server/Item/Interactions/Stamina_Bar_Flash.json
Assets/Server/Item/RootInteractions/ — Puntos de entrada de interacciones raíz

Subcategorías:

Interactions/Consumables/ — Condiciones de consumo de comida y pociones
Interactions/Weapons/ — Cadenas de ataque de armas (Hacha, Arco, Maza, etc.)
Interactions/Weapons/Common/Melee/ — Daño cuerpo a cuerpo compartido y selector
Interactions/Tools/ — Interacciones específicas de herramientas
Interactions/Block/ — Interacciones de rotura/ataque de bloques
Interactions/Dodge/ — Interacciones de rodada evasiva
Interactions/NPCs/ — Interacciones activadas por NPCs
Interactions/Stat_Check/ — Condiciones de compuerta por estadísticas

Esquema

Campos Principales de Interacción

CampoTipoRequeridoPor DefectoDescripción
TypestringNo"Simple"Tipo de interacción. Ver lista de tipos abajo.
Nextstring u objectNoLa siguiente interacción a ejecutar en caso de éxito. Puede ser una cadena de ID de interacción o un objeto de interacción en línea.
Failedstring u objectNoLa interacción a ejecutar cuando esta falla (usado por Condition, UseBlock, PlaceBlock, etc.).
RunTimenumberNoDuración en segundos que esta interacción ocupa en la línea de tiempo de la cadena.
EffectsobjectNoEfectos aplicados cuando esta interacción se ejecuta exitosamente. Ver campos de Effects abajo.
ParentstringNoHereda campos de la interacción nombrada (herencia de plantilla).

Tipos de Interacción

TipoDescripción
SimpleSe ejecuta inmediatamente sin lógica, luego procede a Next.
ConditionVerifica una o más condiciones booleanas. Procede a Next si pasa, Failed si falla.
MovementConditionSe ramifica según la dirección de movimiento de la entidad (ForwardLeft, ForwardRight, Left, Right, BackLeft, BackRight).
UseBlockIntenta interactuar con un bloque objetivo. Cae a Failed si no se impacta ningún bloque.
PlaceBlockColoca el objeto de bloque sostenido en la ubicación objetivo.
SelectorBarre un arco o volumen de hitbox para detectar entidades y bloques. Enruta los impactos a sub-interacciones HitEntity y HitBlock.
SerialEjecuta una lista de interacciones hijas en secuencia. Usa un arreglo Interactions.
ApplyEffectAplica un efecto de juego por EffectId.
ReplaceLee una variable nombrada (Var) y sustituye su valor en la cadena. Recurre a DefaultValue si la variable no está establecida y DefaultOk es true.

Campos de Condición (Type: "Condition")

CampoTipoDescripción
RequiredGameModestringRequiere que la entidad esté en este modo de juego (ej. "Adventure").
CrouchingbooleanSi se establece, requiere (true) o prohíbe (false) estar agachado.
FlyingbooleanSi se establece, requiere (true) o prohíbe (false) estar volando.

Campos de Selector (Type: "Selector")

CampoTipoDescripción
Selector.IdstringTipo de forma del barrido (ej. "Horizontal").
Selector.DirectionstringDirección del barrido (ej. "ToLeft").
Selector.TestLineOfSightbooleanSi se verifica la línea de visión antes de registrar impactos.
Selector.StartDistancenumberBorde cercano del volumen de barrido.
Selector.EndDistancenumberBorde lejano del volumen de barrido.
Selector.LengthnumberLongitud del arco en grados.
Selector.YawStartOffsetnumberDesplazamiento de guiñada desde la dirección de mirada para iniciar el barrido.
HitEntityobjectCadena de interacción ejecutada por cada entidad impactada.
HitBlockobjectCadena de interacción ejecutada por cada bloque impactado.

Campos de DamageCalculator

Usados dentro de objetos de interacción para definir la salida de daño.

CampoTipoDescripción
TypestringMétodo de cálculo. "Absolute" usa un valor de daño base fijo.
BaseDamageobjectMapa de tipo de daño a cantidad (ej. { "Physical": 12 }).
RandomPercentageModifiernumberFracción del daño base agregada como varianza aleatoria (ej. 0.2 = ±20%).

Campos de Effects

CampoTipoDescripción
WorldSoundEventIdstringID del evento de sonido reproducido en la posición del mundo.
LocalSoundEventIdstringID del evento de sonido reproducido localmente (escuchado solo por el jugador que actúa).
WorldParticlesobject[]Arreglo de sistemas de partículas { "SystemId": "<id>" } generados en la posición del mundo.
Particlesobject[]Configuraciones de partículas con SystemId, Color, TargetNodeName, TargetEntityPart.
Trailsobject[]Configuraciones de efecto de estela de arma con TrailId, TargetNodeName, PositionOffset, RotationOffset.
CameraEffectstringID de sacudida/efecto de cámara aplicado al jugador que actúa (ej. "Impact", "Sword_Swing_Diagonal_Right").
ItemAnimationIdstringAnimación reproducida en el objeto sostenido (ej. "Consume", "Build").
WaitForAnimationToFinishbooleanSi la cadena espera a que la animación del objeto termine antes de continuar.
KnockbackobjectConfiguración de retroceso con Type, Force, Direction (X/Y/Z), VelocityType y VelocityConfig.

Ejemplos

Assets/Server/Item/Interactions/Block_Primary.json:

{
"Type": "Simple",
"Next": {
"Type": "UseBlock",
"Failed": "Block_Attack"
}
}

Assets/Server/Item/Interactions/Block_Secondary.json:

{
"Type": "UseBlock",
"Failed": {
"Type": "PlaceBlock",
"RunTime": 0.125,
"Effects": {
"WaitForAnimationToFinish": false,
"ItemAnimationId": "Build"
}
}
}

Assets/Server/Item/Interactions/Consumables/Condition_Consume_Food.json:

{
"Type": "Condition",
"RequiredGameMode": "Adventure",
"Crouching": false,
"Next": "Consume_Charge",
"Failed": "Block_Secondary"
}

Assets/Server/Item/Interactions/Dodge.json:

{
"Type": "Condition",
"Flying": false,
"Next": {
"Type": "MovementCondition",
"ForwardLeft": { "Type": "Simple" },
"ForwardRight": { "Type": "Simple" },
"Left": "Dodge_Left",
"Right": "Dodge_Right",
"BackLeft": { "Type": "Simple" },
"BackRight": { "Type": "Simple" }
}
}

Assets/Server/Item/Interactions/Weapons/Common/Melee/Common_Melee_Damage.json:

{
"Parent": "DamageEntityParent",
"DamageCalculator": {
"BaseDamage": {
"Physical": 6
}
},
"Effects": {
"CameraEffect": "Impact"
},
"DamageEffects": {
"Knockback": {
"Type": "Force",
"Force": 6.5,
"Direction": { "X": 0.0, "Y": 1.0, "Z": -1.5 },
"VelocityType": "Set"
},
"WorldSoundEventId": "SFX_Sword_T2_Impact",
"LocalSoundEventId": "SFX_Sword_T2_Impact"
}
}

Páginas Relacionadas