C'est bon, j'ai survécu...
LE MICRO MODULE DE TEST
Vous arrivez derrière une porte. Vous l'ouvrez et arrivez dans un couloir. Quand les PNJs vous aperçoivent, ils s'empressent d'aller chercher armes et armures, s'en équipent et viennent à votre rencontre...
Une grille vous sépare encore d'eux.
>> évolution prévue : un garde essaye d'ouvrir la porte mais le levier maître est de votre côté, donc lui ne peut pas ouvrir si vous n'activez pas le levier maître...
LES FONCTIONS RAJOUTEES
ActionDoor (string sOrdre, int nMaster=TRUE, int nAll=FALSE)
Mets à jour l'état d'une porte en fonction de l'état du ou des leviers associés.
Tag des leviers associés de la forme : LEVER_
[TAG_DE_LA_PORTE]_x
où x = 1 pour le premier levier
Exemple :
Si le tag de la porte est "DOOR", les leviers de la porte sont LEVER_DOOR_1, LEVER_DOOR_2, etc...
- sOrdre : "open" ou "close" - déverrouille et ouvre / ferme et verrouille
- nMaster : ordre "maître" >> l'état des autres leviers est ignoré pour ouvrir ou fermer la porte. nAll est alors inutile.
- nAll : tous les leviers doivent être dans l'état correct pour exécuter l'ordre >> tous désactivés pour fermer / tous activés pour ouvrir.
NOTE : cette fonction a subit bien des évolutions, et je me demande aujourd'hui si nAll est vraiment utile depuis l'implémentation de l'idée "d'ordre maître"...
EXEMPLE D'UTILISATION :
Levier "Maître" un d'un côté d'une porte, levier "Defaut" de l'autre côté.
- le levier maître ouvre et ferme la porte sans ce soucier du levier par défaut.
ActionDoor ("close", TRUE);
// et
ActionDoor ("open", TRUE);
- le levier par défaut ne peut ouvrir et fermer la porte que si le levier maître est "activé".
ActionDoor ("close", FALSE, TRUE);
// et
ActionDoor ("open", FALSE, TRUE);
Hum... avec un peu de recul, je me dis que cette fonction pourrait être modifiée, grandement améliorée et surtout simplifiée... Bref !
ActionEquipBestArmor ()
Légère variante de "ActionEquipMostEffectiveArmor ()"
Rajoute notamment des jolis effets pour montrer que ça marche et surtout gère quelques variables locales.
>> Evolution : chercher aussi bouclier, capes, anneau, etc...
ActionEquipBestWeapon ()
Idem que ci-dessus pour les armes
NOTE : CETTE FONCTION N'EST PAS FINIE. Ne marche pas à tous les coups. Notamment dans le cas de deux armes et armes à deux mains.
ActionEquipDefaultArmor ()
Le PNJ remet l'armure qu'il avait par défaut.
Nécessite pour bien fonctionner de mettre "InitValues ()" dans le OnSpawn de la creature, pour justement mémoriser son armure par défaut.
>> A tester : si pas d'armure par défaut, enlève-t-il l'armure ?
ActionEquipDefaultWeapon ()
Idem ci-dessus pour les armes.
NOTE : CETTE FONCTION N'EST PAS FINIE... donc elle ne marche pas bien.
ActionGetReadyForCombat (int bFake=FALSE)
Prépare le perso au combat :
- se rue sur le rangement qui lui est associé*
- l'ouvre si le rangement est fermé
- cherche une armure et prend la première qu'il y trouve
- cherche une arme et prend la première qu'il y trouve
- s'équipe de la meilleure armure qu'il a à sa disposition
- s'équipe de la meilleure arme qu'il a à sa disposition
Note :
- la fonction prépare au combat mais ne force pas le combat
- bFake = TRUE : ne fouille pas le rangement dedié. Le PNJ utilise uniquement son propre inventaire pour s'équiper.
ActionTakeEquipmentInInventory (object oWeaponRack)
Action utilisée par "ActionGetReadyForCombat"
Cherche et prend dans l'inventaire de oWeaponRack :
- une et une seule armure
- une et une seule arme
GetWeaponMelee
Equivalent de GetWeaponRanged mais pour une arme de mélé.
A tester plus en profondeur, je crois qu'elle est un peu buggée.
InitActions ()
Pour l'instant pas grand chose... Sur le OnSpawn de la créature, elle ira s'asseoir sur une chaise dédiée.
Tag de la chaise dédiée de la forme "CHAIR_
[Tag du PNJ]"
InitValues ()
A placer sur le OnSpawn de la créature pour pouvoir utiliser correctement les actions décrites ci-dessus.