Ejemplo de fix npc: Twilight Geolord (8320). Explicación Smart_script. Rar con fixes de ejemplos varios.


Agregaremos un script a un npc. Algo bien simple: que castee spells al estar en combate.
Usamos la tabla: smart_script
ayuda: https://trinitycore.atlassian.net/wi.../smart_scripts


Columnas de la tabla

La tabla tiene muchas columnas y muchísimos posibles usos.
Seré lo mas conciso posible. Para mas detalles, ver la ayuda de Trinity, y mirar muchos ejemplos de fixes.

entryorguid source_type id link event_type event_phase_mask event_chance event_flags event_param1 event_param2 event_param3 event_param4

entryorguid - Si el valor es positivo, hacemos referencia al entry de una creature/gameobject/etc. O sea, todas las creatures que vayan a estar spawneadas, harán lo que le indiquemos.
Si el valor es negativo, hace referencia al Guid de una creature/gameobject. Es decir, solo la creature que tenga ese guid hará la acción que asignemos, no todas.
source_type - tipo de objeto: Creature=0 // Gameobject=1 // Areatrigger=2 // Actionlist=9
id - Cada linea que ingresamos tiene que tener un id único. Solo para identificarlo; esto no quiere decir que lo que haya en el id 4 vaya a ocurrir antes que el id 10.
link - Si se quiere que al dispararse el id 5, por ejemplo, se realize otra acción mas, se puede linkear a otro id (en caso de hacerlo, ese id linkeado debe tener event_type=61).
event_type - El evento que tiene que ocurrir para que se haga la acción. Ver la ayuda de TC para saber la lista.
event_phase_mask - Es complejo, no avanzaremos con esto por ahora.
event_chance - El porcentaje de probabilidad de que dicho evento realice la acción.
event_flags - Default 0. Si se pone 1, la acción la hará solo una vez aunque siga ocurriendo el evento. Otros valores son para que las acciones ocurran solo en dungeons normal/hero, o raids normal/hero.
event_param1 (2,3,4) - parámetros que necesita el evento.. depende de cada uno. Ver ayuda de Tc.


action_type action_param1 action_param2 action_param3 action_param4 action_param5 action_param6

action_type - La acción que hará el npc/gameobject cuando ocurra el evento.
action_param1 (2,3,4,5,6) - parámetros que necesita la acción.. depende de cada una. Ver ayuda de Tc.

target_type target_param1 target_param2 target_param3 target_x target_y target_z target_o comment

target_type - El destinatario de la acción.
target_param1 (2,3,x,y,z,o) - parámetros que necesita el target.. depende de cada uno. Ver ayuda de Tc.
comment - Comentamos quien, cuando y qué hará en esa linea ingresada.



Fix
Código:
-- Twilight Geolord (8320)
--  fix de Yugu

SET @Geolord := 11881;
SET @Boulder := 9483;
SET @Shock := 13728;

UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Geolord;
DELETE FROM smart_scripts WHERE entryorguid=@Geolord AND Source_type=0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@Geolord,0,0,0,0,0,100,0,1000,1000,3500,8000,11,@Boulder,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Twilight Geolord - In Combat - Cast Boulder'),
(@Geolord,0,1,0,0,0,100,0,2000,4000,5000,9000,11,@Shock,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Twilight Geolord - In Combat - Cast Earth Shock');


Explicación

Código:
-- Twilight Geolord (8320)
--  fix de Yugu
Queda mas prolijo siempre comentar todo. Cuando lo lea otra persona o lo vuelvas a leer dentro de meses, lo agradecerás.
Obviamente al ejecutar el script, todo lo que esté comentado no se ejecuta
Se pueden comentar otras partes del fix, por ejemplo para aclarar que estamos agregando un aura a un npc, que es la que lo cambia de fase, etc.
-- comentario de una linea
/* comentario
de varias
lineas */



Código:
SET @Geolord := 11881;
SET @Boulder := 9483;
SET @Shock := 13728;
Seteamos las constantes para que sea mas fácil la lectura luego.
En un fix tan chico no hace tanta falta pero sirve para acostumbrarnos.


Código:
UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Geolord;
¡Esto es importante!. Cuando agregamos un script a un npc/gameobject/areatrigger, tenemos que avisarle a ese objeto que tiene script. Si no se pone esto, jamás va a ejecutar todo lo que ingresemos.
Ahí le avisamos al npc @Geolord, que tiene smart_script.
En caso de que el script sea a un gameobject, correspondería:
UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `id`=@IdDelObjeto;


Código:
DELETE FROM smart_scripts WHERE entryorguid=@Geolord AND Source_type=0;
Borramos el script que tenga para poder ingresar el nuevo.


Código:
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@Geolord,0,0,0,0,0,100,0,1000,1000,3500,8000,11,@Boulder,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Twilight Geolord - In Combat - Cast Boulder'),
(@Geolord,0,1,0,0,0,100,0,2000,4000,5000,9000,11,@Shock,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Twilight Geolord - In Combat - Cast Earth Shock');
Ingresamos el script.
En negrita, el id, el evento, la acción, y el target.
En el id 0, decimos que cuando el npc esté en combate, luego de 1 segundo (con repetición entre los 3,5segs y 8segs), va a castear el spell @Boulder a quien tenga de target en ese momento.
En el id 1, decimos que cuando el npc esté en combate entre 2 y 4 segundos (con repetición entre los 5segs y 9segs), va a castear el spell @Shock a quien tenga de target en ese momento.