Aller au contenu


Restreindre L'utilisation De Munitions


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

#1 Lord Paillasson

Lord Paillasson

Posté 25 janvier 2007 - 18:45

Je souhaiterais créer un mod ajoutant des armes à feu primitives dans Morrowind. Les armes fonctionnent,(même si elles ont des animations d'arbalète, ce qui n'est pas trop gênant pour un mousquet à 2 mains) mais je ne sais vraiment pas comment faire pour les empêcher de tirer des carreaux, et que les arbalètes puissent toujours en tirer. Je voudrais aussi savoir si l'ID d'un objet change lorsqu'on l'enchante dans le jeu.

Modifié par Lord Paillasson, 26 janvier 2007 - 21:04.



#2 Not Quite Dead

Not Quite Dead

    Rincevent


Posté 26 janvier 2007 - 08:09

Alors, sans garantie aucune, voici une proposition de script à attacher sur le mousquet:

Begin Mousquet

Short OnPCEquip
Short PCSkipEquip

if ( OnPCEquip == 1 )								; si le joueur équipe le mousquet...
	  if ( Player->GetItemCount, "IDdesBalles" >= 1 ); et qu'il a des balles...
			Set PCSkipEquip to 0						; ça marche
			Return
	  else; mais s'il n'a pas de balle...
			Set PCSkipEquip to 1						; le mousquet se déséquipe...
			MessageBox "Vous n'avez pas de munitions pour cette arme."
			Set OnPCEquip to 0
	  endif
endif

End Mousquet

Rem1: Ce script suppose qu'il n'existe qu'un type de balle. Je ne l'ai pas testé, donc il faudrait s'assurer qu'il fonctionne. (Je ne suis pas un spécialiste d'OnPCEquip et PCSkipEquip et ce script est inspiré de celui de la p.37 de Morrowind Scripting For Dummies; j'espère ne rien avoir oublié.

Par contre, je ne saurai t'affirmer avec certitude que l'ID des objets enchantés est modifiée, bien que je suppose que ça doit être le cas, ce qui peut être problématique dans le cas qui nous occupe, à moins que l'armurier vendant le mousquet ne prévienne le joueur que la moindre modification des balles rendrait celle-ci impropre à l'utilisation. (Solution RP: la magicka et la poudre ne font pas bon ménage).

Rem2: en plus du problème d'éventuelles balles enchantées, il resterait à faire en sorte que les arbalètes ne puissent tirer des balles. Là, je ne sais pas quelle solution serait plus pratique: un script global, ou un script appliqué aux balles.  :grin:
« I was a soldier! I killed people!
- You were a doctor!
- I had bad days! »
John Watson, en train d'étrangler Sherlock Holmes, Sherlock - A Scandal in Belgravia (2012)
---------------
Vous aussi rejoignez les Fervents Partisans de l'Immuabilité Avatarienne!
---------------
VGM impénitent (était-il besoin de le préciser?)
---------------
Paterfamilias niv.IV

#3 chef

chef

Posté 26 janvier 2007 - 17:46

Tu n'as pas vraiment bien expliqué ce que tu demandais... De ce fait, je crois que Not Quite Dead n'as pas saisi ce que tu voulais... ( et il a mis un "end begin mousquet" à la fin... tu travailles trop Nqd :S )

Je me trompe ou tu veux obliger le joueur a tirer uniquement des balles et pas des carreaux ?

Dans ce cas, je verrais plutot le moyen de mettre une variable de globale à jour quand il a équipé les balle ou si il ne les a pas équipée...

begin Balles


if ( player->HasItemEquipped "Balle" )


set "variable de globale" to 1

else

set "variable de globale" to 0
endif


end

Et alors, sur le mousquet :

Begin Mousquet

Short OnPCEquip

if ( OnPCEquip == 1 )
	  if ( "variable de globale" == 1 )
			Return
	  else

			MessageBox "Vous n'avez pas équipée les bonne munitions pour cette arme.
			player->additem "Id de carreau bidon" 1
			player->equip "Id de carreau bidon"
			player->removeitem "Id de carreau bidon" 1
			Set OnPCEquip to 0

	  endif
endif

End

à vérifier...


Mais il devrait pas y avoir de probleme...

Team Stargate



"Si vous traversez l'enfer, ne vous y arrêtez pas." - Wiston Churchill


#4 Lord Paillasson

Lord Paillasson

Posté 26 janvier 2007 - 21:12

Je vais essayer d'être plus clair (c'est vrai que mon premier post ne l'était pas trop) :

-Je voudrais obliger les fusils et autres armes à feu à tirer des balles et rien d'autre.

-Par contre, je voudrais que les arbalètes tirent toujours des carreaux et non des balles.

-Je remercie ceux qui m'ont répondu car cela m'a bien aidé.


#5 Not Quite Dead

Not Quite Dead

    Rincevent


Posté 26 janvier 2007 - 23:13

La solution de chef a l'air bien meilleure que la mienne en effet.

Trop longtemps que je n'ai pas refait sérieusement des scripts, moi. Image IPB

Citation

-Par contre, je voudrais que les arbalètes tirent toujours des carreaux et non des balles.
Est-ce que ton mod dépend de Tribunal? Parce qu'il me semble qu'il y a dans Tribunal une fonction permettant de détecter le type d'arme équipé par le joueur.

Il serait ainsi possible de combiner deux conditions pour déterminer si le joueur a équipé une arbalète... qui n'est pas le mousquet via un script global, par exemple.

Enfin, je crois. :(
« I was a soldier! I killed people!
- You were a doctor!
- I had bad days! »
John Watson, en train d'étrangler Sherlock Holmes, Sherlock - A Scandal in Belgravia (2012)
---------------
Vous aussi rejoignez les Fervents Partisans de l'Immuabilité Avatarienne!
---------------
VGM impénitent (était-il besoin de le préciser?)
---------------
Paterfamilias niv.IV

#6 chef

chef

Posté 27 janvier 2007 - 01:06

On pourrait utiliser un script globale, qui fait que quand il n'a plus de mousquet, il retire les balle de l'inventaire et mémorise une variable de gloable, pour lui rendre quand il le récupere (ou réequipe...)

Quand il ramasse des munition, on dis "Vous avez obtenu X balles." et on lui reprens, mais on ajoute X a la variable...

Qu'en pensez vous ?

Citation

La solution de chef a l'air bien meilleure que la mienne en effet.

Venant de toi je prens ça comme un compliment... Merci.

Team Stargate



"Si vous traversez l'enfer, ne vous y arrêtez pas." - Wiston Churchill


#7 Lord Paillasson

Lord Paillasson

Posté 29 janvier 2007 - 21:24

Cela pourrait bien fonctionner mais je pensais plutôt à un script global qui "déséquipe" les balles quand on à déja une arbalète autre qu'une arme à feu (on peut apparemment faire fonctionner plusieurs objets avec un script de ce genre), un autre qui empêche d'équiper une arbalète quand on a des balles et enfin des scripts locaux similaires à celui de Not Quite Dead.

Tout ça dans le but de permettre au joueur d'être gêné par le poids des balles.

J'enverrais tout ça la prochaine fois, avec si possible une version de test du futur mod.


#8 Angora

Angora

    Danse avec les bugs


Posté 29 janvier 2007 - 22:41

A noter que je déconseille fortement de mettre un script sur les munitions, ce serait une très mauvaise idée !

Pour Morrowind, chaque objet scripté est unique, donc si on a trois cent flèches scriptées, on a trois cent cases occupées dans l'inventaire !

Le mieux est de faire un script global (StartScript) ou, à la rigueur, un script sur l'arme.

Il faut faire des tests avec HasItemEquipped pour les munitions et pour le mousquet. Quelque chose du style:

Si on équipe le mousquet
  Et s'il y a des balles
	on équipe aussi les balles
  Sinon
	on déséquipe le mousquet
	et on affiche un message disant qu'on est à court de munitions
sinon si on équipe les balles
  et qu'il y a un mousquet
	on équipe le mousquet
  sinon
	on déséquipe les balles
	et on affiche un message disant qu'il n'y a pas de flingue
sinon si le mousquet est équipé
  et qu'il n'y a pas de balles
	on déséquipe le mousquet
	et on affiche un message disant qu'on est à court de munitions
sinon si les balles sont équipées
  et qu'il n'y a pas de mousquet
	on déséquipe les balles
	et on affiche un message disant qu'il n'y a pas de flingue
Ouf !

(Désolé pour le pseudocode, mais je ne me souviens pas assez bien du langage pour faire du vrai. Oh, et désolé pour le pseudopode, aussi. Image IPB)
Le saviez-vous ?

En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.

#9 Lord Paillasson

Lord Paillasson

Posté 31 janvier 2007 - 10:41

Pas d'inquiétude pour les scripts sur les munitions car le TESCS ne le permet simplement pas !

Voila un script de ma création ( je ne sais vraiment pas si il marche, surtout l'histoire du "PCSkipEquip" ) )
Begin Restrict1


short weapon											  ; variable qui détermine le type d'arme

short PCSkipEquip										 ; vire les balles si on a une arbalète autre que le mousquet

short OnPCEquip										   ; sert à savoir si le joueur équipe les balles

if ( player-> OnPCEquip "Balle1" ==1 )			   ; si le joueur équipe des balles
	if ( player-> GetWeaponType == 10 )		   ; si il a une arbalète
	Set weapon to 1
	elseif ( player-> GetWeaponType != 10 )	   ; si il n'en a pas
	set weapon to 2
	endif
else
return
endif

		if ( weapon == 1 )
		if ( player-> GetItemCount "Mousquet1" >= 1 )	  ; si l'arbalète est un mousquet
		Set PCSkipEquip to 0										; on les laisse (les balles )
		Set weapon to 0
				else
		Set PCSkipEquip to 1																; sinon, on les dégage
		Messagebox "Vous ne pouvez pas tirer de balles avec une arbalète !" 
		Set weap to 0
			endif
				elseif	( weapon != 1 )
				Set weapon to 0
					Set PCSkipEquip to 0
				return
		endif
end Restrict1

Corrigez moi si je me goure, car le scripting n'est pas trop mon domaine.

Sinon, vaut il mieux le mettre en startscript ou en en tant que script global ?

EDIT : En fait je suis bête car la solution d'Angora a l'air bien pus pratique que la mienne.

Modifié par Lord Paillasson, 31 janvier 2007 - 11:22.



#10 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 03 février 2007 - 11:43

Pour les armes de GDI, j'ai trouvé un script bien sympathique dans un mod VO qui ajoute un "fusil à champigon" dwemer.

begin Temp_dwmrgun

;temp_dummy = arme factisse

; Thanks to elegiac for this script.

short DoOnce

if ( MenuMode == 1 )
	return
endif

if ( Player->GetItemCount, "Temp_dwmr_gun" == 0 )
	return
endif

if ( Player->HasItemEquipped, "Temp_dwmr_gun" == 0 )
	return
endif

if ( Player->HasItemEquipped, "Temp_dwmr_gun" == 1 )
	if ( Player->GetWeaponDrawn == 0 )
		 set DoOnce to 0
	endif
	if ( Player->GetWeaponDrawn == 1 )
		 if ( Player->GetItemCount "Temp_dwmr_shell" > 0 )
			  if ( Player->HasItemEquipped, "Temp_dwmr_shell" == 0 )
				   Player->equip, "Temp_dwmr_shell"
			  endif
		 else
			  if ( DoOnce == 0 )
				   MessageBox, "You do not have the correct ammunition."
				   set DoOnce to 1
			  endif
			  Player->AddItem, "Temp_dummy", 1
			  Player->Equip, "Temp_dummy"
			  Player->RemoveItem, "Temp_dummy", 1
		 endif
	endif
endif
end Temp_dwmrgun

temp_dummy est une arbalette qui permet de déséquiper le fusil, elle est par la suite retirée de l'inventaire
Le Steampunk, c'est bon, mangez en  !

#11 Lord Paillasson

Lord Paillasson

Posté 06 février 2007 - 21:40

J'ai donc essayé la méthode d'Angora mais mon script refuse de marcher, car le TESCS me dit "ammo uncorrect is not allowed on script restrict !". Vous le trouverez en spoiler. Désolé pour l'absence d'annotations.
Spoiler

Voilà la version de Von Zeeple, qui marche mais qui n'empêche pas le joueur de tirer les balles avec une arbalète

begin AMMO_RES1

;bidon = arme factice

; Thanks to elegiac for this script.

short DoOnce

if ( MenuMode == 1 )
	return
endif

if ( Player->GetItemCount, "Mousquet1" == 0 )
	return
endif

if ( Player->HasItemEquipped, "Mousquet1" == 0 )
	return
endif

if ( Player->HasItemEquipped, "Mousquet1" == 1 )
	if ( Player->GetWeaponDrawn == 0 )
		 set DoOnce to 0
	endif
	if ( Player->GetWeaponDrawn == 1 )
		 if ( Player->GetItemCount "Balle1" > 0 )
			  if ( Player->HasItemEquipped, "Balle1" == 0 )
				   Player->equip, "Balle1"
			  endif
		 else
			  if ( DoOnce == 0 )
				   MessageBox, "Vous n'avez pas de munitions pour cette arme"
				   set DoOnce to 1
			  endif
			  Player->AddItem, "bidon", 1
			  Player->Equip, "bidon"
			  Player->RemoveItem, "bidon", 1
		 endif
	endif
endif
end AMMO_RES1

Que me conseillez vous ? Faire un second script pour compléter celui qui fonctionne ou corriger le script buggé ?


#12 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 08 février 2007 - 15:54

Citation

Voilà la version de Von Zeeple, qui marche mais qui n'empêche pas le joueur de tirer les balles avec une arbalète

Pourquoi ne pas faire un misc item que l'on doit avoir obligatoirement pour utiliser un fusil ( poudrière par exemple ) et on y attache le script qui empeche de tirer avec le fusil si les balles ne sont pas équipées et qui empeche d'équiper des carreaux d'arbalette lorsque le fusil est équipé.
Le Steampunk, c'est bon, mangez en  !

#13 Lord Paillasson

Lord Paillasson

Posté 08 février 2007 - 18:51

Citation

Pourquoi ne pas faire un misc item que l'on doit avoir obligatoirement pour utiliser un fusil ( poudrière par exemple ) et on y attache le script qui empeche de tirer avec le fusil si les balles ne sont pas équipées et qui empeche d'équiper des carreaux d'arbalette lorsque le fusil est équipé.

Très bonne idée! Au début je voulais en intégrer une dans le mod mais je n'y trouvais pas d'utilité, maintenant c'est fait!
Reste à trouver un mesh et des textures... sleeping.gif

Ca me permet aussi de délester un peu les scripts globaux, parce que vu le nombre d'opérations à effectuer, ça aurait fini par bien farçir la mémoire vive. :yahoo:

PS : Je ne sais pas si je devrais parler de mon travail sur le forum des mods à venir, car je ne suis pas sûr que cela intéresse beaucoup de monde.(surement parce que les flingues ne collent pas trop avec l'univers du jeu)


#14 De passage

De passage

Posté 08 février 2007 - 22:17

Passe toujours ton annonce, y'aura bien quelqu'un que ça interressera. sleeping.gif
Moi le premier. :yahoo:
"Nous avons la vue raccourcie au bout de notre nez"  disait Montaigne

C'est dans ces moments là que je suis fier d'avoir un grand nez.

#15 Lord Paillasson

Lord Paillasson

Posté 09 février 2007 - 20:44

Bon bah Ok

Sinon sachez que je compte adapter les scripts pour pouvoir gérer une dizaine/quinzaine d'armes et entre un à cinq types de munitions par type d'armes ( il y en aura 7 ou 8, selon que j'arrive à créer des meshs ) Signalez moi si c'est trop!


#16 Scorflux

Scorflux

Posté 09 février 2007 - 21:01

Salut,

alors ce type de mod est une bonne idée,
seulement, cette idée a déjà été tenté, mais je ne sais pour qu'elle raison, beaucoup on arrété, (plus de contacte, ou abandon...).
Personnelement, j'ai un ami qui a tenté de faire des armes du type, lance pierre, ou encore un canon qui propulse des cailloux avec des reserves de skouma...
Les armes il les avait fini, mais il n'est pas parvenu a ses fin, car il étai dans l'incapacité de faire son script, et autre probleme d'animation...

Si tu y arrive t'en mieu, mais il faut que tu garde en tête, qu'un mod réussi, est un mod qui s'integre bien a morrowind, et une arbalete serait très bien (même si l'arbalete existe a la base...) mais éviter les armes comme, pistolet dwemer ou autres!

Un site allemand regroupe des mod par catégorie, tu recherche Waffen (arme en Deutsh) et tu trouvera des idée de script et de mesh!

Bon courage!
Titulaire du mods => MysturiA (video)


#17 Lord Paillasson

Lord Paillasson

Posté 09 février 2007 - 21:49

J'en ai bien conscience, et pour ceux qui veulent en discuter, allez voir "les débuts de la poudre" dans "mods et travaux"
Je mettrais un lien plus tard.

Pour le sérieux du mod, il y aura 3 versions : une "déconne" avec des armes débiles mais des scripts, une "libre" sans scripts
et une "sérieuse" ou tout sera bien contrôlé.

Sinon, les scripts avancent mais PITIE dites moi quand commence le trop de variables (J'ai déja regardé un peu partout, et je peux vous dire qu'il y aura + de var que dans nova magica )





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

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