ACID (Artificial Creature Intelligence Database)

Desde
1 Oct 2019
Mensajes
2,334
Reacciones
2,120
Honor
541
Desde la revisión 220, ScriptDev2 ha implementado un sistema de secuencias de comandos basado en DB que permite el uso de una base de datos (MySQL) para crear eventos personalizados. El sistema se llama ACID (Artificial Creature Intelligence Database) , anteriormente conocido como EventAI. .

Y las 2 oraciones básicas de eventAI son: “¿Qué hacer? ¿Cuándo hacerlo? La primera oración (Co) se llamará una acción. La segunda oración (Cuándo) se llamará un evento. Cualquier persona que quiera crear un script eventAI solo necesita responder las dos preguntas anteriores. Algunos eventos ocurrirán solo una vez, mientras que otros se pueden cronometrar para que se activen en un intervalo específico que determinemos. La idea básica del guión ha sido explicada, así que sigamos adelante. Un evento puede usar tres parámetros diferentes, y estos parámetros controlan cosas diferentes dependiendo del evento. Si el parámetro no se nombra explícitamente para el evento, no se usará para ese evento.

En la base de datos ScriptDev2, busque las tablas `eventai_scripts` y` localized_texts`. Solo en estas dos tablas se forman estos eventos. La tabla `eventai_scripts` se usa para declarar un evento y la tabla` localized_texts` se usa para almacenar textos personalizados (ID de texto). Centrémonos ahora en la tabla `eventai_scripts`. Su primera columna `id` es la clave primaria, que no nos interesa en absoluto. La segunda columna es `creature_id`. Como su nombre lo indica, la ID de la criatura se escribirá aquí. Quizás te estés preguntando: "¿Y cómo afectará eso a esa criatura?" Esta criatura será el evento principal de nuestro evento. La siguiente columna `event_type` es la columna en la que escribimos el tipo de evento (segunda oración).

Tipos de eventos individuales (event_type)
CARNÉ DE IDENTIDADNombreParámetro 1Parámetro 2Parámetro 3Parámetro 4Descripción
0 0EVENT_T_TIMERInitialMinInitialMaxRepeatMinRepeatMaxSOLO EN COMBATE: InitialMin / Max determina cuánto tiempo se ejecutará el evento y RepeatMin / Max cuánto tiempo se repetirá.
1EVENT_T_TIMER_OOCInitialMinInitialMaxRepeatMinRepeatMaxFUERA DE LUCHA - InitialMin / Max determina cuánto tiempo comenzará el evento y RepeatMin / Max cuánto tiempo se repetirá después.
2EVENT_T_HPHPMax%HPMin%RepeatMinRepeatMaxHPMax / Min% determina en qué porcentaje de HP se activará el evento y RepeatMin / Max cuánto tiempo después se repetirá.
3EVENT_T_MANAManaMax%ManaMin%RepeatMinRepeatMaxManaMin / Max% determina en qué porcentaje de maná se activará el evento y RepeatMin / Max cuánto tiempo después se repetirá.
4 4EVENT_T_AGGROnortenortenortenorteEl evento se dispara tan pronto como la criatura toma el aggro.
5 5EVENT_T_KILLRepeatMinRepeatMaxnortenorteEl evento comienza después de la muerte del jugador y se repetirá cada RepeatMin / Max.
6 6EVENT_T_DEATHnortenortenortenorteEl evento comienza después de que la criatura muere.
7 7EVENT_T_EVADEnortenortenortenorteEl evento se dispara cuando la criatura entra en EvadeMode. (cuando la criatura abandona el ataque y vuelve a la posición de generación)
8EVENT_T_SPELLHITSpellIDColegioRepeatMinRepeatMaxEl evento se dispara después de un hechizo, si SpellID = 0, se dispara después de un hechizo con cualquier hechizo. Si se establece el parámetro de la escuela, se activa cuando se golpean los hechizos de un grupo dado. El evento se repetirá cada RepeatMin / Max.
9 9EVENT_T_RANGEMinDistMaxDistRepeatMinRepeatMaxEl evento se activa si el jugador con la mayor amenaza está a una distancia de Param1 a Param2 yardas. Se repetirá cada RepeatMin / Max.
10EVENT_T_OOC_LOSNoHostileNo amigableRepeatMinRepeatMaxEl evento se dispara cuando el jugador entra en el área de visibilidad de la criatura. No se iniciará para el Hostil del Jugador si el parámetro NoHostile no está configurado en 0, no se iniciará para el Jugador Amistoso si el parámetro NoFriendly no está configurado en 0. Se repetirá cada RepeatMin / Max. nunca corre por criaturas / mascotas, o si una criatura está en un duelo.
11EVENT_T_SPAWNEDnortenortenortenorteEl evento se dispara al primer engendro y reaparición de la criatura.
12EVENT_T_TARGET_HPHPMax%HPMin%RepeatMinRepeatMaxEl evento se dispara si el HP del objetivo de la criatura actual está entre HPMax / Min% y repetirá cada RepeatMin / Max.
13EVENT_T_TARGET_CASTINGRepeatMinRepeatMaxnortenorteEl evento se dispara si el objetivo actual lanza un hechizo. Se repetirá cada RepeatMin / Max.
14EVENT_T_FRIENDLY_HPDéficit de HPRadioRepeatMinRepeatMaxEl evento se activa si falta la unidad amiga en el circuito (Param2) (Param1) HP. El evento se repite cada RepeatMin / Max.
15EVENT_T_FRIENDLY_IS_CCDispelTypeRadioRepeatMinRepeatMaxEl evento se dispara si la unidad amiga está bajo la influencia de CC * en el circuito (param2). Se repetirá cada RepeatMin / Max. * CC = hechizos como aturdimiento, ovejas, etc.
dieciséisEVENT_T_MISSING_BUFFSpellIDRadioRepeatMinRepeatMaxEl evento se dispara si el hechizo expira (Param1) a una unidad amiga dentro de un radio (Param2) de yardas. Se repetirá cada RepeatMin / Max.
17EVENT_T_SUMMONED_UNITID de criaturaRepeatMinRepeatMaxnorteEl evento se dispara si la criatura (Param1) se genera, para todos los parámetros1 Param1 = 0. Se repetirá cada RepeatMin / Max.

La siguiente columna `event_param1` es del tipo de parámetro. Esto significa que escribimos datos en esta columna que ingresa al evento y lo afecta. Tienen sus propios tipos (Tiempo en ms, Porcentaje, Banderas). Como habrás notado, la tabla describe los parámetros individuales 1 2 3 para ciertos tipos de eventos. Aquí hay un pequeño ejemplo, así que no te confundas.

Escribir ID 123 a `creature_id`. Escriba 4 en `event_type`, que es EVENT_T_HP; significa que este evento se activará cuando se alcance un cierto% de HP. ¿Un cierto% de HP significa qué? Adivina :) ... Es el parámetro 1 (puedes leer de la tabla) y ¿dónde puedo encontrar este valor? En la tabla, específicamente en la columna `event_param1`. Simple, ¿no es así? Bueno, sigamos adelante. La siguiente columna es `event_param2` tiene las mismas propiedades que el parámetro 1 (` event_param1`) pero no siempre se puede usar (el parámetro 1 no siempre se puede usar). Pongamos un ejemplo. Imagina que tu madre hornea un pastel para ti y ahora saca tres moldes de pastel, pero solo hace un pastel. Pero ¿y si llegara una visita? Tendría que cocinar tres pasteles y usar tres moldes para pasteles. Es lo mismo con los parámetros. P.ej. con un temporizador, solo necesita el tiempo (intervalo) durante el cual se repite cierta acción,mientras que en el caso de EVENT_T_HP, otro parámetro podría ser útil, por ejemplo, para pasar el tiempo como un retraso. Resumamos mientras escribimos: `creature_id` 123,` event_type` 4 (EVENT_T_HP), `event_param1` 90 (al 90% HP)` event_param2` 2000 (2000 milisegundos de retraso). Ahora hemos "respondido" la segunda oración: el evento (Cuándo hacerlo). ¿Y qué hay de nuestra primera oración? Cuando lo miras desde la distancia en la segunda oración (Cuándo hacerlo), dice que se debe hacer algo. ¿Y qué? Eso es lo que nos dice nuestra primera oración. Ahora lo transferiremos a eventAI.

La siguiente columna en la tabla `eventai_scripts` es` action1_type`. En esta columna almacenamos qué tipo de acción se debe realizar en nuestro evento.Ahora hemos "respondido" la segunda oración: el evento (Cuándo hacerlo). ¿Y qué hay de nuestra primera oración? Cuando lo miras desde la distancia en la segunda oración (Cuándo hacerlo), dice que se debe hacer algo. ¿Y qué? Eso es lo que nos dice nuestra primera oración. Ahora lo transferiremos a eventAI. La siguiente columna en la tabla `eventai_scripts` es` action1_type`. En esta columna almacenamos qué tipo de acción se debe realizar en nuestro evento.Ahora hemos "respondido" la segunda oración: el evento (Cuándo hacerlo). ¿Y qué hay de nuestra primera oración? Cuando lo miras desde la distancia en la segunda oración (Cuándo hacerlo), dice que se debe hacer algo. ¿Y qué? Eso es lo que nos dice nuestra primera oración. Ahora lo transferiremos a eventAI. La siguiente columna en la tabla `eventai_scripts` es` action1_type`. En esta columna almacenamos qué tipo de acción se debe realizar en nuestro evento.

Tipos de acciones individuales (action_type)
CARNÉ DE IDENTIDADNombreParámetro 1Parámetro 2Parámetro 3Descripción
1ACTION_T_SAYID de textonortenorteCreatura dice texto con un ID de texto específico / decir
2ACTION_T_YELLID de textonortenorteCreatura grita el texto con una ID de texto / grito específico
3ACTION_T_TEXTEMOTEID de textonortenorteLa criatura expresa un sentimiento textual. /MI
4 4ACTION_T_SOUNDID de sonidonortenorteLa criatura hace un sonido.
5 5ACTION_T_EMOTEID de EmotenortenorteLa criatura expresa emoción. / llorar
6 6ACTION_T_RANDOM_SAYID de texto 1ID de texto 2ID de texto 3Selecciona uno de estos 3 ID de texto y se lo dice. Si Text ID = -1, lo omite.
7 7ACTION_T_RANDOM_YELLID de texto 1ID de texto 2ID de texto 3Selecciona uno de estos 3 ID de texto y lo grita. Si Text ID = -1, lo omite.
8ACTION_T_RANDOM_TEXTEMOTEID de texto 1ID de texto 2ID de texto 3Selecciona una de estas 3 ID de texto y expresa la (s) sensación (es) de texto. Si Text ID = -1, lo omite.
9 9ACTION_T_RANDOM_SOUNDID de sonido 1ID de sonido 2ID de sonido 3Selecciona uno de estos 3 ID de sonido y lo libera. Si Sound ID = -1, lo omite.
10ACTION_T_RANDOM_EMOTEEmote ID 1Emote ID 2Emote ID 3Elige una de estas 3 ID de emoticón y la emite. Si Emote ID = -1 lo omite.
11ACTION_T_CASTID de hechizoT-TypeInterrumpir *Lanza un hechizo al objetivo. Si Interrupt = 1, el hechizo puede ser interrumpido.
12ACTION_T_SUMMONID de criaturaT-TypeDuración *Invoca a una criatura (peta). Tiempo de duración por cuánto tiempo ha desaparecido la mascota. Si Duración = 0 (predeterminado), la mascota desaparece cuando muere.
13ACTION_T_THREAT_SINGLE_PCTAmenaza%T-TypenorteModifica la amenaza objetivo por el porcentaje de amenaza.
14ACTION_T_THREAT_ALL_PCTAmenaza%NUnorteModifica la amenaza de todos alrededor por el porcentaje de amenaza.
15ACTION_T_QUEST_EVENTID de la misiónT-TypenorteCompleta una tarea de búsqueda especial (evento - SpecialFlags = 2) para el objetivo (debe ser un jugador).
dieciséisACTION_T_CASTCREATUREGOID de la misiónID de hechizoT-TypeSimula hechizo de criatura en el objetivo (debe ser jugador)
17ACTION_T_SET_UNIT_FIELDÍndiceValorT-TypeEstablece el campo Índice en el Valor en el objetivo. (Consulte UpdateData, UpdateFields, datos de campo para los caracteres)
18 añosACTION_T_SET_UNIT_FLAGBandera (s)T-TypenorteEstablece las banderas en el objetivo.
19ACTION_T_REMOVE_UNIT_FLAGBandera (s)T-TypenorteElimina la (s) bandera (s) en el objetivo.
20ACTION_T_AUTO_ATTACKBooleanonortenorteSi Boolean es 0 (falso), el ataque automático se detendrá, si Boolean es 1 (verdadero), el ataque continuará.
21ACTION_T_COMBAT_MOVEMENTBooleanonortenorteSi Boolean es 0 (falso), el movimiento de combate se detendrá, si Boolean es 1 (verdadero), se moverá.
22ACTION_T_SET_PHASEFase #nortenorteEstablece el estado en el número de fase 'Fase #'
23ACTION_T_INC_PHASENúmeronortenorteAumenta (o disminuye) el número de fase actual en el Número especificado.
24ACTION_T_EVADEnortenortenorteObliga a la criatura a reiniciarse: finaliza la lucha y pierde la amenaza.
25ACTION_T_FLEEnortenortenorteObliga a la criatura a huir del duelo.
26ACTION_T_QUEST_EVENT_ALLID de la misiónnortenorteCompleta una tarea de búsqueda especial (evento - SpecialFlags = 2) para todos los jugadores en la lista de amenazas.
27ACTION_T_CASTCREATUREGO_ALLID de la misiónID de hechizonorteSimula el hechizo de criatura en todos los jugadores en la lista de amenazas.
28ACTION_T_REMOVEAURASFROMSPELLT-TypeID de hechizonorteElimina todas las auras (param2) del objetivo.
29ACTION_T_RANGED_MOVEMENTDistanciaÁngulonorteUtiliza un generador de movimiento a distancia que mantiene a la criatura a distancia.
30ACTION_T_RANDOM_PHASEFase 1Fase 2Fase 3Selecciona aleatoriamente una fase de una lista de tres fases.
31ACTION_T_RANDOM_PHASE_RANGEFase mínimaFase máximanorteSelecciona una fase aleatoria de un rango especificado.
32ACTION_T_SUMMONID de criaturaT-TypeID de invocaciónInvoca a la criatura en las coordenadas especificadas para la ID de invocación dada. La criatura invocada golpea el objetivo.
33ACTION_T_KILLED_MONSTERID de criaturaT-TypenorteSimula matar ID de criatura moba para jugadores por tipo de objetivo.
34ACTION_T_SET_INST_DATACampoValornorteEstablece el nuevo valor de valor en el campo de datos de instancia (afecta al script de instancia).
35ACTION_T_SET_INST_DATA64CampoT-TypenorteEstablece el GUID de destino en el campo Campo de datos de instancia (afecta al script de instancia).
36ACTION_T_DIEnortenortenorteMata a una criatura.
37ACTION_T_ZONE_COMBAT_PULSEnortenortenorteEstablece el modo de combate de criaturas para todos los jugadores en la instancia. Solo funciona en combate y en instancias internas.

De nuevo, tienes una tabla con una descripción. Nuevamente, estas acciones toman parámetros que los afectan. Hemos agregado otro tipo de parámetro a los parámetros de acción, y ese es TARGET (target).

Lista de todos los OBJETIVOS posibles
CARNÉ DE IDENTIDADSobre míDescripción
0 0TARGET_T_SELFEl objetivo es solo.
1TARGET_T_HOSTILEEl objetivo es la víctima actual (generalmente el objetivo con el mayor aggrom en el área).
2TARGET_T_HOSTILE_SECOND_AGGROEl objetivo es una criatura con el segundo aggro más grande.
3TARGET_T_HOSTILE_LAST_AGGROEl objetivo es la criatura con el aggro más pequeño.
4 4TARGET_T_HOSTILE_RANDOMSelección aleatoria de un destino (destino cercano).
5 5TARGET_T_HOSTILE_RANDOM_NOT_TOPSelección aleatoria de un objetivo, a excepción de la criatura con el mayor aggro (objetivo cercano).
6 6TARGET_T_ACTION_INVOKERApunta a la unidad que causó el evento; solo para ciertos eventos solamente.

Lista de banderas de fundición
Bit / valorSobre míDescripción
0/1CAST_INTURRUPT_PREVIOUSInterrumpe cualquier lanzamiento previo.
1/2CAST_TRIGGEREDTe obliga a lanzar inmediatamente e ignora los maná / ayudas necesarios.
2/4CAST_FORCE_CASTTe obliga a lanzar un hechizo, aunque parezca que el objetivo está demasiado lejos o que la criatura tiene poco maná.
3/8CAST_NO_MELEE_IF_OOMImpide que la criatura inicie un ataque cuerpo a cuerpo cuando se queda sin maná o está demasiado lejos.
4/16CAST_FORCE_TARGET_SELFObliga al objetivo a lanzar un hechizo sobre sí mismo.

Lista de banderas de eventos
Bit / valorSobre míDescripción
0/1EFLAG_REPEATABLERepite el evento (no se repetirá si este indicador no está configurado)
7/128EFLAG_DEBUG_ONLYAún sin implementar.

Campo event_inverse_phase_mask
El campo event_inverse_phase_mask se usa para diferenciar diferentes eventos de acuerdo con la fase actual. Actualmente, el ACID admite 32 fases, la fase predeterminada es 0 y la más alta posible es 31 (cuando se establece una fase más alta, se mostrará un error y no se puede usar el campo event_inverse_phase_mask). Event_inverse_phase_mask sirve como una máscara de 32 bits de fases para las cuales no ocurre un evento, cada bit representa una fase, si el bit dado es uno, entonces el evento no comienza en esa fase. event_inverse_phase_mask se puede imaginar como bits: (00000000 00000000 00000000 00000000) b = 0. Para determinar en qué fases no se inicia el evento, es necesario calcular el valor de los bits en una posición dada y agregar el resultado.

fase: ... 98 7 6 5 4 3 2 1 0 (número de fase al que corresponde el bit) eipm: 00000000 00000000 00000000 0 0 0 0 0 0 0 0 (bits individuales de número event_inverse_phase_mask) valores de bit: 32 16 8 4 2 1 (valor de bit para la fase dada)

En la práctica, esto significa que la fase 0 corresponde al valor del bit 1

fasevalor de bit correspondiente
0 01
12
24 4
38
4 4dieciséis
5 532
6 664
X2 y x

Si queremos que el evento no ocurra en las fases 1, 2, 3, establecemos event_inverse_phase_mask en 2 + 4 + 8 = 14 (a nivel de bit se puede imaginar como (00000000 00000000 00000000 00001110) b = (1110) b. (También es posible usar calculadora disponible en Windows en modo BIN y luego convertir de nuevo a DEC)

Veamos ahora algunos ejemplos prácticos...
SQL:
Necesitas, Acceder o Registrarse para ver el contenido.
 

Crea una cuenta o inicia sesión para comentar

Debes ser usuario para poder dejar un comentario.

¡Regístrate!

Crea una cuenta en nuestra comunidad. ¡Es fácil!

Acceder

¿Ya tienes una cuenta? Accede aquí

3,735Temas
24,593Mensajes
15,318Usuarios
GatoRRÚltimo usuario
Top