SQL 6xx Exemple de véhicule custom & SmartAI
#1
Thumbs Up 
[Image: 174445WoWScrnShot061517013707.jpg]
 
Cela fait un moment que je voulais faire ce tuto , mais un bug du core rendait ces véhicules pratiquement inutiles puisque l'on était dismount a chaque changement de zone .
Heureusement le grand Zorro ... heuuu le grand Noc est arrivé et a balayé ce " petit " souci ... qui m'emm****** depuis toujours .
En remerciement de ce haut fait je vous demanderais de commencer chaque prochaine réponse de ce post par un copier/coller de la phrase qui suit :
 
okai Merci Monsieur Noc  Idea




 
Un véhicule comme un char du Joug n'est rien d'autre a la base qu'un MOB , a ne pas confondre avec une monture invoqué .
Généralement en passif il est possible de lui affecter tout comme pour un MOB classique une IA grâce a SmartAI . Par exemple :
  • Suivre un waitpoint_data et ainsi en faire un moyen de transport comme les griffons .
  • Despawn le véhicule lorsqu'on le quitte (ceci afin de ne pas retrouver les véhicules n'importe ou ) .

L'exemple ci dessous est assez explicite et peux donc être reprit en copier/coller . Afin de rendre ce script compatible toute version , je l'ai basé sur des UPDATE plutot que des REPLACE . Le mob doit donc exister , au pire faite une copie d'un deja existant .
 
Citation :SET @ENTRY := 40791 ; 
SET @Name := "Dirigeable";
SET @IconName  := "vehichleCursor"; # Directions , Gunner , vehichleCursor , Driver , Attack , Buy , Speak , Pickup , Interact , Trainer , Taxi , Repair , LootAll , Quest , PVP  
SET @modelid1 := 31757 ; 
SET @subname :="" ;
SET @level := 45;
SET @speed := 2.5;
SET @faction := 35; # neutre 35 - Alliance 11 - Horde 85 
SET @Vehicleid := 292 ; # Determine ou apparait le joueur : default/debout 224 | cheval 156 | invisible 292 | canon 972  | armoire 212

                                      # pas dinterface 0 - Dirigeable/debout 219 | Assis 615 - avance/recule  en ligne droite 292 - 164 inertie char - en dessous 527
                                      # player invisible 292 - voler ?! 508 - mamouth 312/72 - cheval 62 - ours 53 - griffon 44 - ours53 - avion 44
                                      # 316 sans interface avec bouton sortie
SET @movementId := 0 ; # 180/156
SET @AIName := "SmartAI";
SET @InhabitType := 4; # 1 terre - 2 mer - 4 air  
SET @HoverHeight :=1 ; #  1 voler temporairement - Peut provoquer des tremblement avec des waypoint_data
SET @taille := 0.75 ;
SET @classe := 2; #  WARRIOR (1) - PALADIN (2) - ROGUE (4) - MAGE(8) 
SET @unit_flags := 16908290;
SET @unit_flags2 :=2112; # Defaut 2048 - mouvement forcé = 2112 
SET @npcflag := 50331648;
SET @type_flags := 0;
SET @type_flags2 := 0;
SET @dynamicflags :=0;
SET @type := 1 ; # Bete (1) - Mecanique (9) - Totem (11) - Humanoid (7) - Dragon (2) - Not specified (10) - elementaire (4)
SET @spell1 := 0;
SET @spell2 := 0 ; # Belier 62376 - Roquete 43769
SET @spell3 := 0 ; 
SET @spell4 := 0 ;
SET @spell5 := 0 ;
SET @spell6 := 0 ;
SET @`flagsextra` = 0 ;
SET @RegenHealth := 1;
SET @HealthModifier :=1;
SET @ManaModifier :=1;
SET @ArmorModifier :=1;
SET @DamageModifier :=1;
SET @mechanic_immune_mask := 344407931;

UPDATE `world`.`creature_template` SET `modelid1`=@modelid1,`modelid2`=0,`modelid3`=0,`modelid4`=0,`flags_extra` = @`flagsextra`  WHERE `creature_template`.`entry` = @ENTRY ;
UPDATE `world`.`creature_template` SET `unit_flags2`=@unit_flags2,`exp`=0,`mechanic_immune_mask`=@mechanic_immune_mask, `IconName`=@IconName,`name` = @Name ,`subname`=@subname,`minlevel`=@level,`maxlevel`=@level,`speed_run`=@speed,`speed_walk`=@speed,`scale`=@taille,`unit_class`=@classe,`unit_flags`=@unit_flags,`npcflag`=@npcflag,`type_flags`=@type_flags,`type_flags2`=@type_flags2,`dynamicflags`=@dynamicflags,`type`=@type,`spell1`=@spell1 ,`spell2`=@spell2,`spell3`=@spell3,`spell4`=@spell4,`spell5`=@spell5,`spell6`=@spell6,`HoverHeight`=@HoverHeight,`InhabitType`=@InhabitType,`AIName`=@AIName,`movementId`=@movementId,`faction`=@faction,`Vehicleid`=@Vehicleid,`RegenHealth`=@RegenHealth,`HealthModifier`=@HealthModifier,`ManaModifier`=@ManaModifier,`ArmorModifier`=@ArmorModifier,`DamageModifier`=@DamageModifier WHERE `creature_template`.`entry` = @ENTRY ;
DELETE FROM `world`.`npc_spellclick_spells` WHERE `npc_spellclick_spells`.`npc_entry` = @ENTRY;
INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES (@ENTRY, 65030, 1, 1); # Pour pouvoir le conduire

REPLACE INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES (@ENTRY, 0, 0, 33554432, 1, 0, 43775);        #  Pour Voler , sinon rien

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,20,0,28,0,100,0,0,0,0,0,41,100,0,0,0,0,0,1,0,0,0,0,0,0,0,"despawn si plus de passager");
 
Dans le cas particulier ou ce véhicule devrait vous servir a combattre , sachez que vous ne gagnerez pas d'xp avec lui puisque cest lui qui kill et que ce n'est pas votre pet :p
Ci ce véhicule doit vous servir dans une quete pour comptabiliser un nombre de kill , il vous faudra transférer ces informations du véhicule au joueur avec une ligne SmartAI supplémentairement comme sur le screen ci dessous :  


 
[Image: 519736vehiculekill.jpg]
Répondre
#2
Magnifique ce tutoriel, merci.

Pour information, les modifications viennent de https://github.com/TrinityCore/TrinityCore/issues/16021 , un grand merci a eux.
Si tu avances, tu meurs ... si tu recules, tu meurs ... alors dis moi ... pourquoi tu recules?
(Proverbe mongol)
Répondre
#3
[Image: okai.gif] Merci Monsieur Noc  [Image: lightbulb.gif]

Decembre 2015 ... a la base mes sources sont de fin 2016 , je me demande ce qu il n ont pas incorporé au trinity encore . sa laisse perplexe .

Pour l'histoire les 1000 pointes sont assez penibles a la nage , j'ajoute donc 1 pnj qui invoquera 1 dirigeable vers un des trois lieux de quetes .
Sa donnera un exemple plus concret de ce que l on peut faire avec. si je n'ai pas trop la fleme je ferais une video.
Répondre
#4
Tongue Merci Monsieur Noc   Tongue


Un petit exemple de véhicule , ici utilisé aux 1000 pointes comme système de taxi pour relier les 3 zones de donneurs de quêtes . A la nage sa serait plutot pénible ^^ 
Ce système remplacera les téléporteurs goblins encore présent sur cette vidéo .

Répondre
#5
Belle video merci, dommage que l'on ne voit pas le joueur. Pour ce qui est du patch, il date du 15 Janvier 2017
Si tu avances, tu meurs ... si tu recules, tu meurs ... alors dis moi ... pourquoi tu recules?
(Proverbe mongol)
Répondre
#6
Mise a jour @Vehicleid ou j'ai enfin trouvé ... entre autre ... le bon pour les dirigeables -> Dirigeable/debout 219
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)