Aller au contenu


[auto-résolu] Une Arme Boomerang


  • Veuillez vous connecter pour répondre
3 réponses à ce sujet

#1 lnari

lnari

    Chocapic Cortexicus


Posté 21 juin 2009 - 17:06

Coucou.

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.


#2 elendell

elendell

    Mécano Dell'Arte


Posté 21 juin 2009 - 19:44

Ça peut en effet servir, merci !  :grin:

Note que si on met une temporisation plus longue que le minimum requis par le jeu pour pouvoir changer d'arme, on peut utiliser une autre arme dans l'intervalle (avant le retour du boomerang) ou jeter un sort entre temps.  :mrgreen:

#3 lnari

lnari

    Chocapic Cortexicus


Posté 21 juin 2009 - 19:54

J'ai noté ça, mais curieusement si j'utilise une autre arme et que je suis en train d'attaquer (donc théoriquement incapable de changer d'arme) quand le boomerang revient s'équiper, y'a pas de message d'erreur ni de bug graphique, le boomerang remplace l'arme en train d'être utilisée et l'attaque est interrompue.

#4 elendell

elendell

    Mécano Dell'Arte


Posté 21 juin 2009 - 22:33

Il me semble que ce message d'erreur n'existe que si l'on est en "menumode". Si on change d'arme sans passer par l'inventaire (touche raccourci), on n'a pas le message d'erreur.




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

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