- Desde
- 1 Oct 2019
- Mensajes
- 2,158
- Reacciones
- 1,951
- Honor
- 325
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).
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.
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).
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.
En la práctica, esto significa que la fase 0 corresponde al valor del bit 1
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...
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 IDENTIDAD | Nombre | Parámetro 1 | Parámetro 2 | Parámetro 3 | Parámetro 4 | Descripción |
---|---|---|---|---|---|---|
0 0 | EVENT_T_TIMER | InitialMin | InitialMax | RepeatMin | RepeatMax | SOLO EN COMBATE: InitialMin / Max determina cuánto tiempo se ejecutará el evento y RepeatMin / Max cuánto tiempo se repetirá. |
1 | EVENT_T_TIMER_OOC | InitialMin | InitialMax | RepeatMin | RepeatMax | FUERA DE LUCHA - InitialMin / Max determina cuánto tiempo comenzará el evento y RepeatMin / Max cuánto tiempo se repetirá después. |
2 | EVENT_T_HP | HPMax% | HPMin% | RepeatMin | RepeatMax | HPMax / Min% determina en qué porcentaje de HP se activará el evento y RepeatMin / Max cuánto tiempo después se repetirá. |
3 | EVENT_T_MANA | ManaMax% | ManaMin% | RepeatMin | RepeatMax | ManaMin / Max% determina en qué porcentaje de maná se activará el evento y RepeatMin / Max cuánto tiempo después se repetirá. |
4 4 | EVENT_T_AGGRO | norte | norte | norte | norte | El evento se dispara tan pronto como la criatura toma el aggro. |
5 5 | EVENT_T_KILL | RepeatMin | RepeatMax | norte | norte | El evento comienza después de la muerte del jugador y se repetirá cada RepeatMin / Max. |
6 6 | EVENT_T_DEATH | norte | norte | norte | norte | El evento comienza después de que la criatura muere. |
7 7 | EVENT_T_EVADE | norte | norte | norte | norte | El evento se dispara cuando la criatura entra en EvadeMode. (cuando la criatura abandona el ataque y vuelve a la posición de generación) |
8 | EVENT_T_SPELLHIT | SpellID | Colegio | RepeatMin | RepeatMax | El 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 9 | EVENT_T_RANGE | MinDist | MaxDist | RepeatMin | RepeatMax | El evento se activa si el jugador con la mayor amenaza está a una distancia de Param1 a Param2 yardas. Se repetirá cada RepeatMin / Max. |
10 | EVENT_T_OOC_LOS | NoHostile | No amigable | RepeatMin | RepeatMax | El 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. |
11 | EVENT_T_SPAWNED | norte | norte | norte | norte | El evento se dispara al primer engendro y reaparición de la criatura. |
12 | EVENT_T_TARGET_HP | HPMax% | HPMin% | RepeatMin | RepeatMax | El evento se dispara si el HP del objetivo de la criatura actual está entre HPMax / Min% y repetirá cada RepeatMin / Max. |
13 | EVENT_T_TARGET_CASTING | RepeatMin | RepeatMax | norte | norte | El evento se dispara si el objetivo actual lanza un hechizo. Se repetirá cada RepeatMin / Max. |
14 | EVENT_T_FRIENDLY_HP | Déficit de HP | Radio | RepeatMin | RepeatMax | El evento se activa si falta la unidad amiga en el circuito (Param2) (Param1) HP. El evento se repite cada RepeatMin / Max. |
15 | EVENT_T_FRIENDLY_IS_CC | DispelType | Radio | RepeatMin | RepeatMax | El 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éis | EVENT_T_MISSING_BUFF | SpellID | Radio | RepeatMin | RepeatMax | El evento se dispara si el hechizo expira (Param1) a una unidad amiga dentro de un radio (Param2) de yardas. Se repetirá cada RepeatMin / Max. |
17 | EVENT_T_SUMMONED_UNIT | ID de criatura | RepeatMin | RepeatMax | norte | El 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
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 IDENTIDAD | Nombre | Parámetro 1 | Parámetro 2 | Parámetro 3 | Descripción |
---|---|---|---|---|---|
1 | ACTION_T_SAY | ID de texto | norte | norte | Creatura dice texto con un ID de texto específico / decir |
2 | ACTION_T_YELL | ID de texto | norte | norte | Creatura grita el texto con una ID de texto / grito específico |
3 | ACTION_T_TEXTEMOTE | ID de texto | norte | norte | La criatura expresa un sentimiento textual. /MI |
4 4 | ACTION_T_SOUND | ID de sonido | norte | norte | La criatura hace un sonido. |
5 5 | ACTION_T_EMOTE | ID de Emote | norte | norte | La criatura expresa emoción. / llorar |
6 6 | ACTION_T_RANDOM_SAY | ID de texto 1 | ID de texto 2 | ID de texto 3 | Selecciona uno de estos 3 ID de texto y se lo dice. Si Text ID = -1, lo omite. |
7 7 | ACTION_T_RANDOM_YELL | ID de texto 1 | ID de texto 2 | ID de texto 3 | Selecciona uno de estos 3 ID de texto y lo grita. Si Text ID = -1, lo omite. |
8 | ACTION_T_RANDOM_TEXTEMOTE | ID de texto 1 | ID de texto 2 | ID de texto 3 | Selecciona una de estas 3 ID de texto y expresa la (s) sensación (es) de texto. Si Text ID = -1, lo omite. |
9 9 | ACTION_T_RANDOM_SOUND | ID de sonido 1 | ID de sonido 2 | ID de sonido 3 | Selecciona uno de estos 3 ID de sonido y lo libera. Si Sound ID = -1, lo omite. |
10 | ACTION_T_RANDOM_EMOTE | Emote ID 1 | Emote ID 2 | Emote ID 3 | Elige una de estas 3 ID de emoticón y la emite. Si Emote ID = -1 lo omite. |
11 | ACTION_T_CAST | ID de hechizo | T-Type | Interrumpir * | Lanza un hechizo al objetivo. Si Interrupt = 1, el hechizo puede ser interrumpido. |
12 | ACTION_T_SUMMON | ID de criatura | T-Type | Duració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. |
13 | ACTION_T_THREAT_SINGLE_PCT | Amenaza% | T-Type | norte | Modifica la amenaza objetivo por el porcentaje de amenaza. |
14 | ACTION_T_THREAT_ALL_PCT | Amenaza% | NU | norte | Modifica la amenaza de todos alrededor por el porcentaje de amenaza. |
15 | ACTION_T_QUEST_EVENT | ID de la misión | T-Type | norte | Completa una tarea de búsqueda especial (evento - SpecialFlags = 2) para el objetivo (debe ser un jugador). |
dieciséis | ACTION_T_CASTCREATUREGO | ID de la misión | ID de hechizo | T-Type | Simula hechizo de criatura en el objetivo (debe ser jugador) |
17 | ACTION_T_SET_UNIT_FIELD | Índice | Valor | T-Type | Establece el campo Índice en el Valor en el objetivo. (Consulte UpdateData, UpdateFields, datos de campo para los caracteres) |
18 años | ACTION_T_SET_UNIT_FLAG | Bandera (s) | T-Type | norte | Establece las banderas en el objetivo. |
19 | ACTION_T_REMOVE_UNIT_FLAG | Bandera (s) | T-Type | norte | Elimina la (s) bandera (s) en el objetivo. |
20 | ACTION_T_AUTO_ATTACK | Booleano | norte | norte | Si Boolean es 0 (falso), el ataque automático se detendrá, si Boolean es 1 (verdadero), el ataque continuará. |
21 | ACTION_T_COMBAT_MOVEMENT | Booleano | norte | norte | Si Boolean es 0 (falso), el movimiento de combate se detendrá, si Boolean es 1 (verdadero), se moverá. |
22 | ACTION_T_SET_PHASE | Fase # | norte | norte | Establece el estado en el número de fase 'Fase #' |
23 | ACTION_T_INC_PHASE | Número | norte | norte | Aumenta (o disminuye) el número de fase actual en el Número especificado. |
24 | ACTION_T_EVADE | norte | norte | norte | Obliga a la criatura a reiniciarse: finaliza la lucha y pierde la amenaza. |
25 | ACTION_T_FLEE | norte | norte | norte | Obliga a la criatura a huir del duelo. |
26 | ACTION_T_QUEST_EVENT_ALL | ID de la misión | norte | norte | Completa una tarea de búsqueda especial (evento - SpecialFlags = 2) para todos los jugadores en la lista de amenazas. |
27 | ACTION_T_CASTCREATUREGO_ALL | ID de la misión | ID de hechizo | norte | Simula el hechizo de criatura en todos los jugadores en la lista de amenazas. |
28 | ACTION_T_REMOVEAURASFROMSPELL | T-Type | ID de hechizo | norte | Elimina todas las auras (param2) del objetivo. |
29 | ACTION_T_RANGED_MOVEMENT | Distancia | Ángulo | norte | Utiliza un generador de movimiento a distancia que mantiene a la criatura a distancia. |
30 | ACTION_T_RANDOM_PHASE | Fase 1 | Fase 2 | Fase 3 | Selecciona aleatoriamente una fase de una lista de tres fases. |
31 | ACTION_T_RANDOM_PHASE_RANGE | Fase mínima | Fase máxima | norte | Selecciona una fase aleatoria de un rango especificado. |
32 | ACTION_T_SUMMON | ID de criatura | T-Type | ID de invocación | Invoca a la criatura en las coordenadas especificadas para la ID de invocación dada. La criatura invocada golpea el objetivo. |
33 | ACTION_T_KILLED_MONSTER | ID de criatura | T-Type | norte | Simula matar ID de criatura moba para jugadores por tipo de objetivo. |
34 | ACTION_T_SET_INST_DATA | Campo | Valor | norte | Establece el nuevo valor de valor en el campo de datos de instancia (afecta al script de instancia). |
35 | ACTION_T_SET_INST_DATA64 | Campo | T-Type | norte | Establece el GUID de destino en el campo Campo de datos de instancia (afecta al script de instancia). |
36 | ACTION_T_DIE | norte | norte | norte | Mata a una criatura. |
37 | ACTION_T_ZONE_COMBAT_PULSE | norte | norte | norte | Establece 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 IDENTIDAD | Sobre mí | Descripción |
---|---|---|
0 0 | TARGET_T_SELF | El objetivo es solo. |
1 | TARGET_T_HOSTILE | El objetivo es la víctima actual (generalmente el objetivo con el mayor aggrom en el área). |
2 | TARGET_T_HOSTILE_SECOND_AGGRO | El objetivo es una criatura con el segundo aggro más grande. |
3 | TARGET_T_HOSTILE_LAST_AGGRO | El objetivo es la criatura con el aggro más pequeño. |
4 4 | TARGET_T_HOSTILE_RANDOM | Selección aleatoria de un destino (destino cercano). |
5 5 | TARGET_T_HOSTILE_RANDOM_NOT_TOP | Selección aleatoria de un objetivo, a excepción de la criatura con el mayor aggro (objetivo cercano). |
6 6 | TARGET_T_ACTION_INVOKER | Apunta a la unidad que causó el evento; solo para ciertos eventos solamente. |
Lista de banderas de fundición
Bit / valor | Sobre mí | Descripción |
---|---|---|
0/1 | CAST_INTURRUPT_PREVIOUS | Interrumpe cualquier lanzamiento previo. |
1/2 | CAST_TRIGGERED | Te obliga a lanzar inmediatamente e ignora los maná / ayudas necesarios. |
2/4 | CAST_FORCE_CAST | Te obliga a lanzar un hechizo, aunque parezca que el objetivo está demasiado lejos o que la criatura tiene poco maná. |
3/8 | CAST_NO_MELEE_IF_OOM | Impide que la criatura inicie un ataque cuerpo a cuerpo cuando se queda sin maná o está demasiado lejos. |
4/16 | CAST_FORCE_TARGET_SELF | Obliga al objetivo a lanzar un hechizo sobre sí mismo. |
Lista de banderas de eventos
Bit / valor | Sobre mí | Descripción |
---|---|---|
0/1 | EFLAG_REPEATABLE | Repite el evento (no se repetirá si este indicador no está configurado) |
7/128 | EFLAG_DEBUG_ONLY | Aú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
fase | valor de bit correspondiente |
0 0 | 1 |
1 | 2 |
2 | 4 4 |
3 | 8 |
4 4 | dieciséis |
5 5 | 32 |
6 6 | 64 |
X | 2 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.