J'ai fait un script pour une arme boomerang qui revient directement dans l'inventaire du joueur après utilisation. Le script est pensé de telle sorte à ce que l'arme soit unique. Il doit fonctionner en script global car une arme de jet n'est pas scriptable.
Il marche bien, donc je vous le propose s'il peut vous être utile, et en même temps, une fonction marche mal, je m'explique. Voilà le script :
Begin RAJ2_PahkinasFangScript Short Armed If ( Player->GetItemCount RAJ2_PahkinasFang == 0 ); Si le joueur n'en a plus... If ( Armed == 1 ) ; ... mais qu'il en avait une équipée avant, on lui rend. Set Armed to 0 Player->Additem RAJ2_PahkinasFang 1 Return Endif Endif If ( Player->HasItemEquipped RAJ2_PahkinasFang == 1 ); Si le joueur en a un, on le note. Set Armed to 1 Return Endif If ( Player->HasItemEquipped RAJ2_PahkinasFang == 0 ); Si le joueur en n'en a pas équipé, on fait rien. Set Armed to 0 Return Endif End
Le souci qui se présente, c'est que si on ajoute un "Player->Equip RAJ2_PahkinasFang" dans le premier bloc (là où l'arme revient, de façon à la rééquiper automatiquement), le jeu bug un peu et on se retrouve avec le .nif qui reste en main, même si on la déséquipe ou si on met une autre arme. Ca donne des résultats potentiellement très moches.
En gros, tout marche bien jusqu'à cet "Equip" qui semble être une fonction pas super bien codée. Si on n'a pas l'auto-Equip quand l'arme revient, c'est assez fastidieux à jouer il faut admettre. Si on le met, ça bug graphiquement.
Comme j'ai l'art de me poser des questions et d'y répondre tout seul après, voilà la réponse : Le bug graphique est occasionné par l'Equip d'une arme alors que le jeu devrait nous en empêcher. Vous savez "Attendez d'avoir fini votre attaque avant d'équiper une autre arme." comme il dit le jeu, en gros.
Solution, temporiser. Il suffit de mettre un petit timer pour que l'attaque prenne effectivement fin. 1s suffit en fait. Après on peut s'amuser à faire des boomerangs temporisés qui reviennent après 3s, 5s, etc...
Voilà donc pour ceux qui voudraient scripter une arme boomerang :
Begin RAJ2_PahkinasFangScript Short Armed Float Timer If ( MenuMode == 1 ) Return Endif If ( Timer > 0 ) Set Timer to ( Timer - GetSecondsPassed ) Return Endif if ( Timer <= 0 ) ; Au terme du timer, on récupère l'arme. If ( Armed == 2 ) Player->Additem RAJ2_PahkinasFang 1 Player->Equip RAJ2_PahkinasFang Set Armed to 1 Endif Endif If ( Player->GetItemCount RAJ2_PahkinasFang == 0 ) ; Si le joueur n'en a plus, on lance le timer. If ( Armed == 1 ) Set Armed to 2 Set Timer to 1 Return Endif Endif If ( Player->HasItemEquipped RAJ2_PahkinasFang == 1 ); Si le joueur en a un, on le note. Set Armed to 1 Return Endif If ( Player->HasItemEquipped RAJ2_PahkinasFang == 0 ); Si le joueur en n'en a pas équipé, on fait rien. Set Armed to 0 Return Endif End
Modifié par Souris Cornue, 21 juin 2009 - 17:40.