05/03/2019, 17:56
Les Phasemask , a ne pas confondre avec les Phases (ACTION_SET_INGAME_PHASE_MASK), sont aux AI ce que sont les Phases pour un joueur ou un mobs .
Suivant un événement les phases servent a projeter le joueur dans un espace alternatif et superposé des mobs et gobs différents pour une mème coordonnée.
Les Phasemask sont un peux similaires mais dans le domaine des AI , c'est a dire qu'un mob par défaut exécute sont code SmartAI en Phasemask 0 , il peut etre intéressant pour un événement particulier de lui faire exécuter une autre AI défini ici en Phasemask 1 ou Phasemask 2.
Quelques situations d'exemples :
- Vous pouvez script un mob avec plusieurs spécialités , par exemple a l'agro un mage ce comportera aléatoirement comme utilisant les sorts de feu ou les sorts de givre
- Une quete vous demandera d'interagir avec un pnj qui pourrait répondre favorablement ou défavorablement a votre demande
Pour ce mob nous aurons donc 3 états différents : 1 par defaut et 2 en rapport avec la quete et s'activeront aléatoirement après un gossip menu
- Phasemask 0 : l'etat normal qui servira a gérer le mob normalement c'est a dire sans avoir pris la quete
Ligne 10 : compétence de combat par défaut
Ligne 40 : apres le gossip retire l'aura qui le maintenait allongé
Ligne 50 : apres le gossip bascule le mob aléatoirement en Phasemask 1 ou Phasemask 2
apres ce moment la le mob n’exécutera plus le smartAI Phasemask 0 mais uniquement le Phasemask 1 ou 2
- Phasemask 1 : Le mob accepte paisiblement votre ordre
Ligne 105 : ferme la fenetre du gossip menu
Ligne 110 : fait un commentaire comme quoi il ce remet au travail
Ligne 115 : avance rapidement pour simuler son retour a son poste de travail
Ligne 120 : despawn
- Phasemask 2 : Le mob prend très mal votre demande
Ligne 152 154 155 : ces lignes changent la faction de 3 mobs(id) différents dans un rayon de 20m , sinon sa serait trop facile :p
Ligne 160 : un petit message pour vous indiquer qu'il va vous faire regretter votre demande
Ligne 165 : sa compétence de combat en Phasemask 2
Ensuite il faut penser a la re initialisation pour divers cas : Vous vous êtes éloigné et le mob quite le combat , vous êtes mort , ... elle sera detecté par un EVENT_RESET
Ligne 170 : remet la faction d'origine au mob
Ligne 175 : repasse le mob en Phasemask 0
Vous remarquerez que les lignes 170 et 175 sont en Phasemask 2 puisque en effet cette initialisation ne peux ce produire qu’après la fin de la initialisation 2
Ligne 180 : remet l'aura allongé au mob lorsqu'il a rejoind sa position d'origine . Elle s’exécute en Phasemask 0 puisque elle vient après l'action de la ligne 175
Citation :Le code pour le pnj parésseu :
-- Travailleur paresseux SAI
SET @ENTRY := 47292;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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
(@ENTRY,0,10,0,4,0,100,1,0,0,0,0,11,14890,0,0,0,0,0,2,0,0,0,0,0,0,0,"Coup désarçonnant"),
(@ENTRY,0,40,0,62,0,100,0,12238,0,0,0,28,32951,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rendez-vous utile ! 27969 : retire aura"),
(@ENTRY,0,50,0,62,0,100,0,12238,0,0,0,37,1,2,0,0,0,0,1,0,0,0,0,0,0,0,"Rendez-vous utile ! 27969 : RND phase"),
(@ENTRY,0,100,105,1,1,100,1,0,0,3000,3000,33,47127,0,0,0,0,0,7,0,0,0,0,0,0,0," - phase 1 : Rendez-vous utile ! 27969 : credit"),
(@ENTRY,0,105,110,61,1,100,0,12238,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0," - phase 1 : Rendez-vous utile ! 27969 : fermer gossip"),
(@ENTRY,0,110,115,61,1,100,1,12238,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0," - phase 1 : Rendez-vous utile ! 27969 : blabla"),
(@ENTRY,0,115,120,61,1,100,0,12238,0,0,0,46,15,0,0,0,0,0,1,0,0,0,0,0,0,0," - phase 1 : Rendez-vous utile ! 27969 : avance"),
(@ENTRY,0,120,0,61,1,100,0,12238,0,0,0,41,2000,0,0,0,0,0,1,0,0,0,0,0,0,0," - phase 1 : Rendez-vous utile ! 27969 : despawn"),
(@ENTRY,0,150,0,60,2,100,1,0,0,3000,3000,2,1924,0,0,0,0,0,1,0,0,0,0,0,0,0,"phase 2 : Rendez-vous utile ! 27969 : faction 1924"),
(@ENTRY,0,152,0,60,2,100,1,0,0,3000,3000,2,1924,0,0,0,0,0,9,47690,0,20,0,0,0,0,"phase 2 : Rendez-vous utile ! 27969 : faction 1924 pour pnj 47690"),
(@ENTRY,0,154,0,60,2,100,1,0,0,3000,3000,2,1924,0,0,0,0,0,9,47291,0,20,0,0,0,0,"phase 2 : Rendez-vous utile ! 27969 : faction 1924 pour pnj 47291"),
(@ENTRY,0,155,0,60,2,100,1,0,0,3000,3000,2,1924,0,0,0,0,0,9,47974,0,20,0,0,0,0,"phase 2 : Rendez-vous utile ! 27969 : faction 1924 pour pnj 47974"),
(@ENTRY,0,160,0,60,2,100,1,0,0,3000,3000,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"phase 2 : Rendez-vous utile ! 27969 : blabla"),
(@ENTRY,0,165,0,0,2,100,0,0,0,2500,2500,11,14890,0,0,0,0,0,2,0,0,0,0,0,0,0,"phase 2 : Coup désarçonnant"),
(@ENTRY,0,170,0,25,2,100,0,0,0,0,0,2,190,0,0,0,0,0,1,0,0,0,0,0,0,0," - phase 2 : reset faction"),
(@ENTRY,0,175,0,25,2,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"reset phase mask 0"),
(@ENTRY,0,180,0,21,0,100,0,12238,0,0,0,75,32951,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rendez-vous utile ! 27969 : reset aura");
En vert : on active aléatoirement la Phasemask 1 ou 2 . Autre Action possible : ACTION_SET_EVENT_PHASE , ACTION_INC_EVENT_PHASE
En bleu défini le/les Phasemask pour cette ligne en ouvrant la fenetre en rouge