Aller au contenu


Ia Enrichie


  • Veuillez vous connecter pour répondre
1 réponse à ce sujet

#1 lnari

lnari

    Chocapic Cortexicus


Posté 01 février 2010 - 14:06

Coucou !

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 ! ^^

#2 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 04 février 2010 - 21:37

Normalement, la RefId est unique dans tout le jeu, ou du moins, dans ton jeu chargé (cette référence devient obsolète à la recharge).

2 points à vérifier chez toi, puisque tu as les scripts prêts et le mod sous la main :

1) Ta globale est-elle bien un long ? (une erreur est vite arrivée, d'ailleurs le second script n'a pas la variable long déclarée, je suppose que ce n'est pas le vrai script, sinon le problème vient p'tet de là)

2) As-tu vérifié que la string que tu récupères dans le premier script avait la même tête dans le second ? Normalement, tu devrais avoir le même long si le passage par globale fonctionne. Il serait bien que tu affiches cette valeur dans une message box pour tester, histoire de voir ce qui peut clocher.

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)