Aller au contenu


Vérrouiller Une Cible

Gameplay script

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

#1 Fiyjet

Fiyjet

Posté 28 juin 2012 - 10:53

salut,

Je suis un joueur handicapé , j'aime Skyrim mais j'ai quelques difficultés à suivre les ennemis avec ma souris. Ainsi, le mod demandé doit permettre aux gens de verrouiller / déverrouiller un ennemi en appuyant sur une touche personnalisée / bouton de la souris. dans mon esprit, le verrouillage signifie uniquement que le regard  du joueur est toujours centré sur le mob verrouillé, ce n'est pas un mod de combat automatique, ainsi, le joueur doit être capable de se battre, tirer une flèche, lancer un sort, crier, accéder à l'inventaire et même se déplacer (en gardant l'ennemi à l'oeuil)

Est-il possible de le faire ?

J'ai le creation kit, et quelques notion en prog. Je n'ai jamais moddé avant par contre. si quelqu'un pouvait m'aiguiller pour démarrer.

merci

Modifié par Fiyjet, 28 juin 2012 - 10:57.


#2 Gérauld

Gérauld

Posté 28 juin 2012 - 16:10

Ayant aussi un handicap (provisoire (j'espère)) depuis quelques mois, j'ai changé la souris de main par nécessité donc je penses comprendre un petit peu ton soucis.
Il est peut-être possible de partir de cette instruction en l'applicant sur le joueur :
http://www.creationk...ObjectReference

http://www.creationk...tLookAt_-_Actor
Le problème avec les instructions cherchant un actor directement, c'est qu'elles peuvent retourner la référence du joueur.
Je ferai des essais ce weekend.

Modifié par Gérauld, 28 juin 2012 - 16:19.

L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#3 Aurix

Aurix

    La Bidouille ou un truc comme ça


Posté 28 juin 2012 - 16:50

je n'ose imaginer le résultat si ça renvoie la référence du joueur... penser à écarter ce cas de test...

le truc, c'est que ton jeu va (beaucoup) saccader... et que tu seras vraiment embêté si tu dois viser par anticipation, avec une flèche par exemple... mais pour du bourrinage à la claymore, ça fera son taf à merveille^^ je suppose que ça devrait même te permettre d'éviter les friendly fire (sauf en cas de lag...)
"You are the best Septim that's ever ruled. Well, except for that Martin fellow, but he turned into a dragon god, and that's hardly sporting... You know, I was there for that whole sordid affair. Marvelous time! Butterflies, blood, a Fox, a severed head... Oh, and the cheese! To die for."

Shéogorath - Prince de la folie

Vrai Grand Moddeur et FPIA à ses heures...

#4 Fiyjet

Fiyjet

Posté 28 juin 2012 - 18:18

Je crois que j'ai une mauvaise nouvelle, apparement le scriptage d'une touche n'est pas possible puisque j'ai pas trouvé dévénement associé à la pression de touche.dans la doc je veux dire. me trompe-je. et : http://forums.steamp...d.php?t=2586825
si ce problème est solvable soluble, set lookat semble etre bien.

Modifié par Fiyjet, 28 juin 2012 - 18:20.


#5 Aurix

Aurix

    La Bidouille ou un truc comme ça


Posté 28 juin 2012 - 18:28

Ahahah petit joueur, cest sans compter sur l'ingéniosité des moddeurs... Trêve de lauriers, tu peux créer un lesser power , tu cibles un type avec et ça dure jusqu'à sa mort... Pour les détails, il faut voir mais sinon, ça semble faisable...
"You are the best Septim that's ever ruled. Well, except for that Martin fellow, but he turned into a dragon god, and that's hardly sporting... You know, I was there for that whole sordid affair. Marvelous time! Butterflies, blood, a Fox, a severed head... Oh, and the cheese! To die for."

Shéogorath - Prince de la folie

Vrai Grand Moddeur et FPIA à ses heures...

#6 Gérauld

Gérauld

Posté 28 juin 2012 - 18:31

SKSE permet l'utilisation de touches à part aussi... Histoire de garder la touche des cris disponible.
A tout problème, il y a une solution. Je vais en parler à un moddeur qui connait bien SKSE...
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#7 Sagittarius22

Sagittarius22

Posté 28 juin 2012 - 18:46

* Invocation de moddeur * :wizard:
Mais je fous quoi ici moi?! Bon, en gros oui c'est posible avec SKSE (IsKeyPressed). Il faut aussi utiliser la fonction

SetAngle(); la fonction SetLookAt() ne fonctionne pas sur le joueur...



Pour résumer:



scriptname _LockEnemyScript Extends Quest
Import Input
Actor Property PlayerREF Auto
Int Property Key = 16 Auto ; ;;;;http://fose.silverlock.org/fose_command_doc.html#DirectX_Scancodes"]http://fose.silverlo...rectX_Scancodes


ReferenceAlias Property ClosestActor Auto
Int Property KeyPressed = 0 Auto



Event OnInit()
	RegisterForSingleUpdate(0.1)
EndEvent

Event OnUpdate()
	if IsKeyPressed(16) && KeyPressed == 0
float zOffset = PlayerREF.GetHeadingAngle(ClosestActor.GetReference())
PlayerREF.SetAngle(PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ() + zOffset)
KeyPressed = 1
   elseif IsKeyPressed(16) == 0
	KeyPressed = 0  
endif
RegisterForSingleUpdate(0.1)


EndEvent


Il faut aussi une deuxième quête qui met l'Alias de l'acteur le plus proche à jour, en gros voilà...

Modifié par Sagittarius22, 29 juin 2012 - 10:29.

"Le désespoir, un vocable creux inventé par les gens qui ne regardent jamais les étoiles."


#8 Gérauld

Gérauld

Posté 28 juin 2012 - 21:13

* range son kit d'invocation *
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#9 Sagittarius22

Sagittarius22

Posté 28 juin 2012 - 21:14

*disparaît dans un nuage de fumée*

"Le désespoir, un vocable creux inventé par les gens qui ne regardent jamais les étoiles."


#10 Fiyjet

Fiyjet

Posté 29 juin 2012 - 10:28

ok, j'ai farpaitement compris le script. :grin: J'ai des question qd même.
  • Est-ce possible de déterminer in-game la touche de lock ? (là, elle est en dur sur "a" -clavier azerty-),je suppose que oui bien-sûr (mettre un variable), le problème c'est de retenir la configuration entre les parties, tout en pemettant aux joueurs de changer çà a tout moment.Là encore, je suppose que çà peut se faire mais je ne sais pas trop comment.
  • Le ciblage de l'acteur le plus près ne va pas, je vais tirer sur lydia lol. De plus, je veux pouvoir ciblé un mec planqué en haut de sa tour (j'ai plutot un style à 2 dagues mais cela m'arrive de tirer (une fille) à l'arc :arrow:  ok je sors... donc je pense qu'il faut cibler le mob pointé par le réticule au moment du lock (je ne sais pas si c'est possible si la barre de santé de l'ennemi n'apparait pas d'ailleurs)
  • je vais peaufiner des détails peut-être mais au final, je n'aurai presque rien fait. donc, je demande à l'auteur la permission d'uploader son script sur nexus (avec ©) et ici pour la communauté.
  • enfin, comment compilé ce script et l'intégré in-game (flemme de lire la doc)
merci

#11 Sagittarius22

Sagittarius22

Posté 29 juin 2012 - 10:32

Est-ce possible de déterminer in-game la touche de lock? Non, pas encore.
Le ciblage de l'acteur le plus près ne va pas, je vais tirer sur lydia lol. - Impossible de déterminer pour le moment ce que le réticule vise. Rajoute une condition à l'Alias pour que tes compagnons ne soient pas visés
je vais peaufiner des détails peut-être mais au final, je n'aurai presque rien fait. donc, je demande à l'auteur la permission d'uploader son script sur nexus (avec ©) et ici pour la communauté. - Oui bien entendu!
enfin, comment compilé ce script et l'intégré in-game (flemme de lire la doc) - Lis la doc :twisted2:

"Le désespoir, un vocable creux inventé par les gens qui ne regardent jamais les étoiles."


#12 Fiyjet

Fiyjet

Posté 01 juillet 2012 - 13:19

salut, j'ai reussi à lancer la compilation du script (tel quel, je ferai les modif lorsque j'aurai créer mon 1er esp) le problème c'est qu'il (papyrus compiler) ne reconnait pas les fonction skse. Ca parait logique. mes recherches sur l'ami google n'ont rien donné et skse n'est pas documenté ou je ne lai pas vu. si sagitarius veut bien me dire ou chercher...
merci

#13 Sagittarius22

Sagittarius22

Posté 01 juillet 2012 - 15:25

J'ai mis à jour le script, peux-tu réessayer?

"Le désespoir, un vocable creux inventé par les gens qui ne regardent jamais les étoiles."


#14 Fiyjet

Fiyjet

Posté 01 juillet 2012 - 19:53

marche pas mais c'est pt'etre mon compilo kié(vive l'orthographe) mal configuré cf fichier joint (sortie)
merci vraiment de ton aide.
edit j'ai tjs pas vu le bouton pièce jointe je dois être con

C:\Program Files (x86)\Notepad++>"C:\Program Files (x86)\The Elder Scrolls V Sky
rim\Papyrus Compiler\PapyrusCompiler.exe" "C:\Program Files (x86)\The Elder Scro
lls V Skyrim\Data\Scripts\Source\_LockEnemyScript.psc" -f="TESV_Papyrus_Flags.fl
g" -i="C:\Program Files (x86)\The Elder Scrolls V Skyrim\Data\Scripts\Source" -o
="C:\Program Files (x86)\The Elder Scrolls V Skyrim\Data\Scripts"
Starting 1 compile threads for 1 files...
Compiling "_LockEnemyScript"...
[u]C:\Program Files (x86)\The Elder Scrolls V Skyrim\Data\Scripts\Source\_LockEnemy
Script.psc(4,13): cannot name a variable or property the same as a known type or
script[/u]
No output generated for C:\Program Files (x86)\The Elder Scrolls V Skyrim\Data\S
cripts\Source\_LockEnemyScript.psc, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on C:\Program Files (x86)\The Elder Scrolls V Skyrim\Data\Scripts\Source\
_LockEnemyScript.psc

C:\Program Files (x86)\Notepad++>pause
Appuyez sur une touche pour continuer...
ps j'ai eu 1 mp de quelqu'un interéssé (super)

Modifié par Fiyjet, 01 juillet 2012 - 20:04.


#15 Gérauld

Gérauld

Posté 01 juillet 2012 - 20:22

D'après le message d'erreur, il semblerait que tu te retrouves avec une propriété ou une variable qui porte le même nom qu'un script existant. Il faut changer le nom de cette variable ou propriété.
N'utilisant que l'éditeur de base du CK je ne pourrais t'en dire plus car il semble que tu compiles à partir de notepad ++.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#16 Fiyjet

Fiyjet

Posté 01 juillet 2012 - 21:02

ok, j'avais bien pigé le message mais étant donné le script, c'est bizarre in test donc

@sagittarius : c'est moi ou la ligne 4 est inutile, tu déclare int key puis tu ne l'utilise pas ?

#17 Aurix

Aurix

    La Bidouille ou un truc comme ça


Posté 01 juillet 2012 - 21:07

elle n'est pas inutile, c'est elle qui plante... le mot "Key" ne lui plait pas, c'est pas un mot clé du langage par hasard ?
"You are the best Septim that's ever ruled. Well, except for that Martin fellow, but he turned into a dragon god, and that's hardly sporting... You know, I was there for that whole sordid affair. Marvelous time! Butterflies, blood, a Fox, a severed head... Oh, and the cheese! To die for."

Shéogorath - Prince de la folie

Vrai Grand Moddeur et FPIA à ses heures...

#18 Fiyjet

Fiyjet

Posté 01 juillet 2012 - 21:22

si je pense, mais je vois nulle-part ou key en dehors de la déclaration est utilisé après...

#19 Gérauld

Gérauld

Posté 01 juillet 2012 - 22:26

Bon, étant donné que Sagi ne sera pas dispo les jours qui viennent, je viens filer un petit coup de main.

Il existe un script qui s'appelle "key" dans le jeu vanilla. Le compileur bloque à cause de ça.
D'après moi, au départ, Sagi voulait se servir de cette variable pour les instructions iskeypressed() et a ensuite préféré mettre le 16 directement dedans.
Essaie en mettant le signe ; devant la ligne et teste en jeu. Ça devrait marcher.

Un petit truc pour les moddeurs qui lisent le sujet : il est intéressant de noter aussi que Sagi utilise la propriété de type actor playerref pour appeler le joueur. Cela optimise le script (les instructions faisant appel au joueur de cette manière sont 20 fois plus rapides que l'instruction game. getplayer()).

Modifié par Gérauld, 01 juillet 2012 - 22:36.

L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#20 Fiyjet

Fiyjet

Posté 02 juillet 2012 - 09:00

ok, c'est bien ce qui me semblait, la compil a marché. mais j'ai pas mon esp encore. Je suppose qu'il faut un espèce de trigger invisible pour déclencher la quête.
car la, en jeu, ça donne rien.

Je suis désolé que vous(la communauté) deviez me tenir la main à ce point, mais elle gagnera peut-être un nouveau moddeur

#21 Gérauld

Gérauld

Posté 02 juillet 2012 - 23:58

En fait, une quête peut être démarrée dès le début de manière invisible pour placer le script ou être démarré par le biais de menus ajoutés, de sorts....
C'est pas un soucis.

Tu n'auras jamais un esp à partir d'un script. Il faut ouvrir le CK et créer les objets (quêtes, referencealias...) nécessaires et y placer les scripts.

Le script ci-dessus ne sert qu'à faire tourner le joueur vers l'ennemi le plus proche en appuyant sur une touche.
Il te faut maintenant déterminer qui est l'actor le plus proche.

Le seul truc important, c'est l'alias ClosestActor qui selon moi doit être placé dans une autre quête.
tu obtien :
- une quête avec ton script (placé dans l'onglet script de la quête (le type de script est précisé après extends de la première ligne).
- un quête avec 2 alias : - le joueur (n'importe quel nom d'alias, mais ne pas cocher "allow reuse inq quest.
   - closest actor qui sera de type find matching reference avec les 2 cases find in loadede area et closest et un isactor == 1 dans les conditions.
- une quête avec un stage dans le fragment duquel tu mets un registerfosingle update(1)
et un script du genre

Quest property maquetedesalias auto ; tu remplis la propriété avec le nom de la quête des alias.
event onupdate()
		   maquetedesalias.stop()
		   utility.wait(0.1)
		   maquetedesalias.start()
		   registerforsingleupdate(2)
enevent
Quand tu créé une quête, toujours refermer et ouvrir la fenêtre avant de créer les alias. Après avoir créé l'alias et avant d'y ajouter un script. Fermer puis réouvrir toutes les fenêtres.
Dans le CK, tu double-cliques sur tes script et tu remplis les properties. Par exemple closestactor du script de Sagi doit pointer vers l'alias que tu aura créé dans une autre quête.

Le bout de script ci-dessus est loin d'être suffisant. Il faudrait ajouter une condition sur variable globale pour pouvoir stopper les registerforsingleupdate (pour la désinstallation du mod...) C'est fonctionnel pour un essai mais ne le fais pas sur ta save principale. On verra le reste plus tard.

EDIT :
En fait il doit être possible de tout faire tenir en un script. Il faut juste jongler un peu avec les probabilités et faire un compromis entre efficacité et temps de latence de la commande. J'ai déjà utilisé une routine de ce type dans plusieurs mods et ça fonctionne.

Il permettra de verrouiller la cible la plus proche de l'axe du joueur et non la plus proche. Ce qui collera plus à ta demande.
En gros un appui sur la touche verrouillera la cible, un autre appui deverrouillera.
Je ferai le script et l'esp ce weekend en me basant sur celui de Sagi.
La partie appui touche et calage du regard du joueur sera celle de Sagi.

Je t'enverrai un esp de test ce weekend. Vu qu'il n'y aura qu'un seul script, ça devrait aller vite.

Il y aura un fichier texte expliquant le tout et surtout comment attacher le script dans l'esp pour qu'il fonctionne en jeu. Prend le comme un exemple pédagogique. Cela te permettra de faire plein d'autres mods en t'inspirant du modèle.

En fait, je vais tester ça dans quelques minutes :
Scriptname SG_targetlockingscript extends Quest

;c'est le script du mod auto...pas encore au point. On va plutôt revenir sur l'idée de Sagi : une visée quand on appuie sur la touche. Et garder ça en réserve...

;Le lien qui peut mener au mapping des touches
;http://fose.silverlock.org/fose_command_doc.html#DirectX_Scancodes"]http://fose.silverlo...rectX_Scancodes
import debug
Import Input
import math
Actor Property PlayerREF Auto
faction property currentfollowerfaction auto
globalvariable property SG_MODON auto ;cela permettra de désactiver le mod avant désinstallation
actor closest = None ; c'est la variable où je stocke l'acteur le plus proche de l'axe. Remplacé à chaque fois que je trouve plus proche.
ReferenceAlias Property ClosestActor Auto
Int Property KeyPressed = 0 Auto
function detect()
float zoffset ; servira pour les calculs dans la fonction, ne pas confondre avec la variable des event. Elle est connue que par la fonction.
float zoffsetmin = 90 ; stockera la valeur la plus petite, plus la valeur est élevée, plus le champ de recherche est grand. C'est donc un réglage à faire.
int t = 0 ; la variable qui me servira à compter le nombre d'itérations
while (t <= 7) ; le nombre d'itérations ou l'art du compromis entre rapidité et efficacité. C'est ça le truc en fait.
  Actor randomActor = Game.FindRandomActorFromRef(playerref, 5000.0) ;la commande demandant l'actor le plus proche retourne toujours le joueur alors je tape au hasard pendant mes itérations. Autre astuce.
  if  (!((randomActor == playerref) || (randomActor.GetFactionRank(CurrentFollowerFaction) >= 0))) && !randomactor.isdead() && randomActor != None && playerref.hasLOS(randomactor) && randomactor.IsHostileToActor(playerref) ; je ne fais les calculs et la prise en compte que si ce n'est pas le joueur, un compagnon et qu'un actor a été trouvé.
	zOffset = playerref.GetHeadingAngle(randomactor) ; je demande l'écart par rapport à l'axe du joueur.
	if abs(zoffset) < abs(zoffsetmin) ;si l'actor trouvé est plus dans l'axe que le précédent, l'écart ainsi que son nom sont stockés...
	zoffsetmin = zoffset
	closest = randomactor ;la variable closest est commune à toutes les instances du script car déclarée au début du script
   endif
  endif
  t = t +1 ;important sinon la fonction tourne en boucle.
endwhile
if closest == none
  notification("Aucune cible trouvée")
else
  notification("Cible verrouillée.")
endif
endfunction

Event OnInit()
RegisterForSingleUpdate(0.1) ;à l'initialisation du script, on se prépare à appeler une fois l'event onupdate()
EndEvent
auto state attente ; le joueur n'a pas de cible vérouillée
Event OnUpdate()
  if IsKeyPressed(45) && KeyPressed == 0
   KeyPressed = 1
   detect()
   if closest != none
	gotostate("tracking")
	float zOffset = PlayerREF.GetHeadingAngle(closest)
	PlayerREF.SetAngle(PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ() + zOffset)
	notification("En mode poursuite auto")
   else
	notification("aucune cible trouvée")
   endif
  elseif IsKeyPressed(45) == 0
   KeyPressed = 0
  endif
  if SG_MODON.getvalueint() == 1
   RegisterForSingleUpdate(0.1)
  endif
EndEvent
endstate
state tracking
event onupdate()
  PlayerREF.SetAngle(PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ() + PlayerREF.GetHeadingAngle(closest))
  if closest.isdead()
   notification("Cible décédé : poursuite interrompue")
   gotostate("attente")
  ;elseif !playerref.hasLOS(closest)
  ; notification("Vous ne voyez plus la cible : poursuite interrompue")
  ; gotostate("attente")
  endif
  if IsKeyPressed(45) && KeyPressed == 0
   gotostate("attente")
   notification("poursuite interrompue par le joueur")
   KeyPressed = 1
  elseif IsKeyPressed(45) == 0
   KeyPressed = 0
  endif
  if SG_MODON.getvalueint() == 1
   RegisterForSingleUpdate(0.1)
  endif
endevent
endstate

Le script fonctionne en jeu mais il est loin d'être parfait. Je vais revenir à une valeur de 0.1 comme Sagi avait mis pour diminuer les saccades en poursuite. Tester aussi deux choses supplémentaires : si le joueur voit l'acteur verrouillé et si l'acteur est vivant.
Sinon, un appui sur X, la cible est verrouillée et le regard sui cette cible. Un deuxième appui sur X, fin du verrouillage.
Je peux aussi faire une version sans le suivi automatique...(on ne recale que lors de l'appui sur unee touche) si tu veux. En gros, il suffit de mélanger le script de Sagi et celui que j'ai modifié.

Le mieux serait de faire un menu in-game permettant de choisir entre les options (poursuite auto ou non, distance max de recherche, angle de recherche autour de l'axe de regard du joueur, choix entre certaines touches (Il est possible de faire un choix entre plusieurs configurations pré-définies afin de satisfaire ceux qui ont des soucis du bras gauche ou du bras droit (comme ma pomme...)).
Cela ne prendrait pas longtemps à faire et serait un vrai plus favorisant encore l'accessibilité du jeu.
Comme tu le vois, chaque ligne ou presque ajoutée est expliquée.

EDIT : je mettrai le script ci-dessus à jour au fur et à mesure des essais en jeu.

EDIT2 : La poursuite auto n'est pas terrible (ça saccade un peu) et est un peu haute pour l'utiliser pour l'arc.
Demain, sortira une deuxième version du script reprenant le fonctionnement que Sagi avait en tête.
Un appui sur X te mettra face à l'ennemi, visible, vivant, le plus proche de l'axe ou tu regardes (ou du moins un des plus proches (compromis rapidité/efficacité à trouver).
La version auto sera conservée mais en option car pas pratique du tout avec mes réglages (avec un taux de rafraichissement réglable par le menu, il serait possible d'adapter le mod aux besoins de tout le monde...).
Je t'envoie tout ça rapidement par MP comme ça tu pourras le modifier en fonction de tes besoins.

Le script où la vue se recale que quand on appuie sur la touche :

Scriptname SG_targetview extends Quest
;ce script permet de voir la ou une des cibles les plus proches de l'axe de visée du joueur, évitant les grands mouvemets de souris.
;Le lien qui peut mener au mapping des touches
;http://fose.silverlock.org/fose_command_doc.html#DirectX_Scancodes"]http://fose.silverlo...rectX_Scancodes
import debug
Import Input
import math
Actor Property PlayerREF Auto
faction property currentfollowerfaction auto
globalvariable property SG_MODON auto ;cela permettra de désactiver le mod avant désinstallation
actor closest = None ; c'est la variable où je stocke l'acteur le plus proche de l'axe. Remplacé à chaque fois que je trouve plus proche.
ReferenceAlias Property ClosestActor Auto
Int Property KeyPressed = 0 Auto
function detect()
float zoffset ; servira pour les calculs dans la fonction, ne pas confondre avec la variable des event. Elle est connue que par la fonction.
float zoffsetmin = 90 ; stockera la valeur la plus petite, plus la valeur est élevée, plus le champ de recherche est grand. C'est donc un réglage à faire.
int t = 0 ; la variable qui me servira à compter le nombre d'itérations
while (t <= 7) ; le nombre d'itérations ou l'art du compromis entre rapidité et efficacité. C'est ça le truc en fait.
  Actor randomActor = Game.FindRandomActorFromRef(playerref, 5000.0) ;la commande demandant l'actor le plus proche retourne toujours le joueur alors je tape au hasard pendant mes itérations. Autre astuce.
  if  (!((randomActor == playerref) || (randomActor.GetFactionRank(CurrentFollowerFaction) >= 0))) && !randomactor.isdead() && randomActor != None && playerref.hasLOS(randomactor) && randomactor.IsHostileToActor(playerref) ; je ne fais les calculs et la prise en compte que si ce n'est pas le joueur, un compagnon et qu'un actor a été trouvé.
	zOffset = playerref.GetHeadingAngle(randomactor) ; je demande l'écart par rapport à l'axe du joueur.
	if abs(zoffset) < abs(zoffsetmin) ;si l'actor trouvé est plus dans l'axe que le précédent, l'écart ainsi que son nom sont stockés...
	zoffsetmin = zoffset
	closest = randomactor ;la variable closest est commune à toutes les instances du script car déclarée au début du script
   endif
  endif
  t = t +1 ;important sinon la fonction tourne en boucle.
endwhile
if closest == none
  notification("Aucune cible trouvée")
endif
endfunction

Event OnInit()
RegisterForSingleUpdate(0.1) ;à l'initialisation du script, on se prépare à appeler une fois l'event onupdate()
EndEvent

Event OnUpdate()
if IsKeyPressed(45) && KeyPressed == 0
  KeyPressed = 1
  detect()
  if closest != none
   float zOffset = PlayerREF.GetHeadingAngle(closest)
   PlayerREF.SetAngle(PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ() + zOffset)
  endif
elseif IsKeyPressed(45) == 0
  KeyPressed = 0
endif
if SG_MODON.getvalueint() == 1
  RegisterForSingleUpdate(0.1)
endif
EndEvent
Il ne manquera plus qu'à le tester demain en attendant de faire le menu.
Tu proposes le choix entre quelles touches? J'ai mis X par défaut car proche des autres mais c'est pas pratique pour ceux qui utilisent le clavier main droite.

Modifié par Gérauld, 03 juillet 2012 - 00:31.

L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#22 Fiyjet

Fiyjet

Posté 03 juillet 2012 - 10:35

Merci mec, un script commenté c'est cool.

Par contre, je n'ai pas bien compris l'étape de création des quetes (je charge skyrim.esm, ds quest, je fais new, puis je crée un id  j'y met le scirpt de sagi (pr l'instant car j'avais pas vu les tiens. Mais ces histoire d'alias... je pige pas. Tu connaitrais pas un tuto en fr avec le scripting skse dedans (ca n'a peut-être rien à voir, mais je dois comprendre les bases avant de prétendre modder

Citation

Il y aura un fichier texte expliquant le tout et surtout comment attacher le script dans l'esp pour qu'il fonctionne en jeu. Prend le comme un exemple pédagogique. Cela te permettra de faire plein d'autres mods en t'inspirant du modèle.
exact

Citation

Tu proposes le choix entre quelles touches? J'ai mis X par défaut car proche des autres mais c'est pas pratique pour ceux qui utilisent le clavier main droite
c'est pas possible de saisir l'input du joueur en réponse à quelle touche voulez-vous ? mais X c'est bien pr moi déja

#23 Gérauld

Gérauld

Posté 03 juillet 2012 - 11:13

En fait, avec mon script, pas besoin d'alias.

Il faut créer une variable globale dans le CK (dans miscellaneous) en l'appelant SG_MODON et mettre sa valeur par défaut à 1.
Tu prends un des deux scripts et il suffit de les mettre dans l'onglet script de la quête crée.
Ensuite, dans cet onglet tu double-clqieu sur le nom du script et tu cliques sur "auto fill all".
Tu sauvegardes avec le CK en mettant n nom qui va bien.

Tu actives le mod dans le launcher et tut peux ainsi tester le mod.
Je ferai ça de manière plus propre pour te montrer comment peut se créer un menu.

Il doit y avoir moyen de choisir sa touche in-game effectivement. C'est juste un script supplémentaire à faire et une vaiable globale à utiliser pour stocker la valeur. Il faut donc un menu.
L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.

#24 Aurix

Aurix

    La Bidouille ou un truc comme ça


Posté 03 juillet 2012 - 16:36

t'es un dingue, mais je crois que tu commences à le savoir...

sinon, puisque le sujet est presque clos, j'en profite pour te demander si tu as d'autres trucs pour optimiser les scripts ? nan parce que j'ai quelques trucs assez méchants qui gagneraient à aller un poil plus vite (notamment mon sort de rangement...) donc, si t'en as d'autres, je pense qu'un petit topic à côté dans "les scripts me crispent" de skyrim, ça sauverait des vies (ou au moins des processeurs...)

Modifié par Aurix, 03 juillet 2012 - 16:36.

"You are the best Septim that's ever ruled. Well, except for that Martin fellow, but he turned into a dragon god, and that's hardly sporting... You know, I was there for that whole sordid affair. Marvelous time! Butterflies, blood, a Fox, a severed head... Oh, and the cheese! To die for."

Shéogorath - Prince de la folie

Vrai Grand Moddeur et FPIA à ses heures...

#25 Gérauld

Gérauld

Posté 03 juillet 2012 - 17:13

Je peux commencer à créer un topic, en espérant que Sagi, Thanatos et les tous les autres le nourriront aussi au fur et à mesure des découvertes.
J'avais commencé un truc du genre dans la forge sur la Conf' (ma résidence principale).
Je ne peux mettre de lien car cette partie est uniquement aux "moddeurs" et "moddeurs en herbe" inscrits.

Le mieux serait de faire un topic par type d'optimisation afin de s'y retrouver plus facilement et de ne pas mélanger les questions/réponses et précisions.
Par exemple, un topic tout simple qui explique les déclarations et les propriétés et l'incidence du placement des déclarations, un autre pour le playerref au lieu de game.getplayer(), un autre sur l'utilisation des registerforsingleupdate() au lieu des registerforupdate()....

Cela permet aussi de vérifier à chaque fois que le topic n'a pas déjà été créé et permet à tout le monde d'y aller de ses trucs et astuces.

Concernant le mod, je testerai le deuxième script ce soir et préparerai les menus (dont celui du choix de la touche).
Je pourrai ensuite reprendre tranquillement les corrections de SEI.

EDIT : je téléchargerai et regarderai les scripts de ton mod ce weekend pour voir s'il y a un moyen simple de gagner un peu en vitesse. Un coup d'oeil d'un autre scripteur avec ses habitudes sera sans doute aussi nécessaire. Nous apprenons encore beaucoup de choses tous les jours...Ce qui a échappé à l'un peut sauter aux yeux de l'autre.

EDIT : En fait il esmble exister une instruction toute simple :
http://www.creationk...raTarget_-_Game

Ça ne marche pas. Ça sert juste à avoir la caméra 3ème personne centrée sur un autre acteur...Donc, ça ne sert à rien...
Je cherche toujours la manière de rendre le truc jouable.

Modifié par Gérauld, 03 juillet 2012 - 22:14.

L'ours blanc est l'un des plus grands carnivores de Nirn. Les poils du pelage sont translucides et creux. C'est la réfraction de la lumière visible sur la surface interne des poils creux et incolores qui les fait paraître blancs. Cette particularité lui permet de se camoufler dans son environnement de neige et de glace, afin de mieux surprendre ses proies. Ce plantigrade vit exclusivement en Bordeciel et sur l'île de Solstheim.




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

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