Je cherche à enrichir l'IA des ennemis, au travers d'un module qui devrait proposer, si j'arrive à tout faire marcher :
- De rendre les créatures de même espèce plus sociables, donc alerter de proche en proche.
- D'équilibrer les sorts, afin d'avoir des ennemis plus intéressants, manipulant des sorts d'attaque, des compétences de corps à corps, des trucs qui entravent le joueur type Cécité, Silence, ou encore de jouer de l'Invisibilité, protections diverses...
- De les rendre interactifs, notamment avec des soigneurs capable d'agir sur leurs semblables, et de tenir les autres en vie, obligeant le joueur à jouer plus stratégiquement.
Mais si les 2 premiers points n'ont pas été durs, le dernier est plus costaud. J'ai donc commencé le travail sous MWSE, qui permet de récupérer l'ID unique de la créature, sa référence appellée xRefID, "skeleton0000001" par exemple, ceci afin de permettre le ciblage d'une créature précise et pas avoir mon soigneur qui va soigner le squelette en pleine forme alors que son voisin meurt.
Bref, le souci premier, c'est que MWSE n'a pas de fonction xCast, ou Cast étendue. Donc je ne peux pas utiliser ma xRefID dans une fonction Cast, dès lors je dois penser d'autres méthodes. Pour réduire le problème, je me propose d'avoir simplement à orienter le healer dans la direction de la créature à soigner, puis de lancer un sort ciblé sur le healer même, avec un effet contact inutile (regain de santé 1pt sur soi) et un effet à distance qui est celui voulu. Pour orienter le healer vers sa cible, en pouvant utiliser RefID, j'utilise xStartCombat.
Bon, mon souci, évidemment, ça marche pas sinon je serais pas là. ^^ Ma grande question, c'est, si certains ici utilisent MWSE et savent, est ce que xRefID est voué à une utilisation locale, ou est ce qu'on peut l'utiliser en globale ? Car actuellement, ma créature blessée sonne l'alarme, mettant son xRefID dans une locale, puis une globale pour pouvoir être passée dans le script du healer qui remet en locale (car les fonctions étendues ne veulent pas de globale de base, donc je contourne), et l'utilise. J'ai bien peur qu'arrivée dans le script du healer, mon xRefID n'ait plus aucun sens, car vouée à du local...
En tous cas voici les 2 scripts. La créature appelante marche bien, pour test à la console, la variable prend bien une valeur quand elle tombe mi-vie.
Begin GWM_Lich short Alert long Lic_Heal If ( GetHealth <= 75 ); On regarde si mi-vie If ( GWM_Lic_Heal == 0 ); et si la créature n'a pas appellé Set Alert to 1 ; alors elle passe en alerte Endif Endif Ifx ( Alert ) ; Si elle est en alerte Setx Lic_Heal to xRefID; On met son xRefID dans une locale Set GWM_Lic_Heal to Lic_Heal; puis une globale Set Alert to 0 ; maintenant on peut retirer l'alerte vu qu'on a la globale qui dira la suite au healer Endif End
Le healer, lui, ne bug pas, mais ne fait rien. A la console, le fonctionnement du sort ciblé sur lui-même fonctionne bien, avec l'envoi du projectile face à lui, chose pour laquelle je voudrais l'orienter vers le monstre à soigner. Ca ne marche pas à partir du xStartCombat qui devrait cibler la xRefID, chose pour laquelle je suppose que son utilisation doit rester locale (surtout que sa valeur est très aléatoire, ce n'est jamais la même à chaque alerte de la créature à soigner).
Begin GWM_AncestorGhost short Heal_SkC If ( GWM_Lic_Heal != 0 ) ; Si une créature appelle Set Heal_Lic to GWM_Lic_Heal; On récupère son xRefID dans la globale, pour remettre en local Endif Ifx ( Heal_Lic ) ; Si la créature a besoin de soin xStartCombat Heal_Lic ; StartCombat pour regarder vers elle Cast GWM_empathicheal ancestor_ghost; On lance le sort Set GWM_Lic_Heal to 0 ; On arrête l'alerte de la créature soignée Set Heal_Lic to 0 ; On supprime la locale StartCombat Player ; Et on repart contre le joueur Endif Endif
Voilà, mon problème... Je suis preneur de toute info que vous avez sur MGE, ou suggestion sur le problème en général ! ^^