Descripción breve:
Esta tabla contiene todo el texto de habla (susurro, decir, gritar, texto de emote en burbujas de habla y en la ventana de chat) que se usa en la tabla SMART_SCRIPTS y en los scripts del core.
Descripción detallada:
¿Alguna vez te has preguntado cómo se scriptea un jefe como Sindragosa (→ wowhead)? No hace falta que te lo preguntes, ¡puedes verlo por ti mismo! (→ Archivo de script de Sindragosa)
Lo sé, lo sé; esto parece increíblemente complejo, ¡más de 1600 líneas de código! Sin embargo, no hace falta entenderlo todo de una vez. Centrémonos en algo simple, pero aun así muy importante, ¿de acuerdo?
Si miras el principio del código, encontrarás un enum llamado Texts que está compuesto de 12 elementos (números del 0 al 11); miremos más de cerca el primer elemento de este enum:
boss_sindragosa.cpp Expand source
enum Texts
{
SAY_AGGRO = 0, // You are fools to have come to this place! The icy winds of Northrend will consume your souls!
...
};
Puedes verificar en el juego por ti mismo que Sindragosa gritará esto cuando empieces un combate contra ella. ¿Notaste algo interesante? El texto real está colocado después de un // lo que significa que esta información es un comentario y nuestro compilador lo ignorará. Por otro lado, vemos claramente que ella está gritando ese texto, ¿cómo es posible?
Podrías decir: bueno, esto tiene más de 1600 líneas de largo, seguro que hay algo, simplemente aún no lo hemos encontrado. Te aseguro que no encontrarás nada; si no me crees, usa el atajo CTRL+F y diviértete buscando.
¿No hay nada? Es una lástima, pero quizá, quizá tuviste la oportunidad de descubrir algo.
boss_sindragosa.cpp Expand source
void EnterCombat(Unit* victim) override
{
...
Talk(SAY_AGGRO); // interesting!
}
¿Ves la última línea de esta función? ¡Están usando algo que no debería funcionar! Podemos concluir que esta función se llamará cuando Sindragosa entre en combate (¡mira el nombre de la función!), así que ahora vemos por qué grita al inicio.
Todavía hay una pregunta fundamental: ¿dónde se almacena la información sobre este texto? La respuesta es más simple de lo que podrías pensar. ¡Se almacena en la tabla CREATURE_TEXT!
continuará...
| Field | Type | Attributes | Key | Null | Default | Extra | Comment |
|---|---|---|---|---|---|---|---|
| CreatureID | MEDIUMINT | UNSIGNED | PRI | NO | creature_template entry | ||
| GroupID | TINYINT | UNSIGNED | PRI | NO | |||
| ID | TINYINT | UNSIGNED | PRI | NO | |||
| Text | longtext | utf8_general_ci | YES | NULL | |||
| Type | TINYINT | UNSIGNED | NO | ||||
| Language | TINYINT | UNSIGNED | NO | ||||
| Probability | FLOAT | SIGNED | NO | ||||
| Emote | MEDIUMINT | UNSIGNED | NO | ||||
| Duration | MEDIUMINT | UNSIGNED | NO | ||||
| Sound | MEDIUMINT | UNSIGNED | NO | ||||
| BroadcastTextId | MEDIUMINT | SIGNED | NO | ||||
| TextRange | TINYINT | UNSIGNED | NO | ||||
| comment | VARCHAR(255) | utf8_general_ci | YES | NULL |
Este es el creature_template.entry al que está vinculado el script.
Si hay más de uno del mismo entry (más de un texto que la criatura dice), esta columna se usa para elegir si es un decir aleatorio o una lista ordenada. Si una criatura tiene más de un texto de decir que se muestra en un orden dado, debe incrementarse por cada nueva entrada coincidente (ej. 0, 1, 2, 3...). Si solo hay una entrada o un solo grupo, este valor debe ser 0. Si hay varios grupos de textos, este valor permanece igual dentro del grupo mientras el id se incrementa dentro del mismo grupo.
Ejemplo del Guardia de la Ciudad de Ventormenta, criatura 68:
| CreatureID | GroupID | ID | Text |
|---|---|---|---|
| 68 | 0 | 0 | Taste blade, mongrel! |
| 68 | 0 | 1 | Please tell me that you didn't just do what I think you just did. Please tell me that I'm not going to have to hurt you... |
| 68 | 0 | 2 | As if we don't have enough problems, you go and create more! |
| 68 | 2 | 0 | %s throws a rotten apple at $n. |
| 68 | 3 | 0 | %s throws rotten banana on $n. |
| 68 | 4 | 0 | %s spits on $n. |
| 68 | 5 | 0 | Monster! |
| 68 | 5 | 1 | Murderer! |
| 68 | 5 | 2 | GET A ROPE! |
| 68 | 5 | 3 | How dare you set foot in our city! |
| 68 | 5 | 4 | You disgust me. |
| 68 | 5 | 5 | Looks like we're going to have ourselves an execution. |
| 68 | 5 | 6 | Traitorous dog. |
| 68 | 5 | 7 | My family was wiped out by the Scourge! MONSTER! |
Entrada para cada grupo de textos. Este es el identificador único cuando el entry (criatura) es el mismo y el groupid no cambia; debe incrementarse (ej. 0, 1, 2, 3...). Un decir de la criatura se seleccionará aleatoriamente de esta lista según el groupid al que pertenece.
El texto que dirá la criatura.
| Value | Old value | Localization | Picture Example |
|---|---|---|---|
| 12 | 0 | Say | ![]() |
| 14 | 1 | Yell | ![]() |
| 16 | 2 | Emote | ![]() |
| 41 | 3 | Boss Emote | ![]() |
| 15 | 4 | Whisper | ![]() |
| 42 | 5 | Boss Whisper | ![]() |
Valor de Languages.dbc (+ la tabla wiki del archivo dbc). Cuando se pone a 0, se usará el idioma por defecto actual.
Un valor de 1-100 que representa el porcentaje de probabilidad de que este texto se ejecute.
El valor debe ser >=0. Si el valor no cumple la condición, el SQL fallará en creature_text_chk_1.
El emote que la criatura reproduce cuando se ejecuta el texto. El valor a usar en este campo se puede obtener de emote.dbc
Tiempo en ms para ver el texto. 0 es el valor por defecto y lo calcula el core.
La entrada de sonido que esta criatura reproducirá al mismo tiempo que se ejecuta el texto. Los sonidos se encuentran en SoundEntries.dbc.
Id del texto equivalente que se encuentra en broadcast_text
| Value | Range |
|---|---|
| 0 | Normal/Default |
| 1 | Area |
| 2 | Zone |
| 3 | Map |
| 4 | World |
Este campo te permite etiquetar una entrada de texto.