Aller au contenu


Function ? Déséquipé...


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

#1 chef

chef

Posté 07 octobre 2006 - 13:04

Bonjour ! J'ai besoin de la fonction pour déséquiper un objet...


J'ai essaié OnUnEquip mais c'etais pas ça  :beat:

J'ai recherché et regarder dans la liste des fonctions, sans résultat...

Savez vous comment faire ?

Merci


Edit : Je dois aussi détecter si le joueur est mobile ou imobile, vous avez une idée ?

Modifié par chef, 07 octobre 2006 - 13:13.

Team Stargate



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


#2 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 07 octobre 2006 - 14:27

Hello ! :woot

Il n'existe à ma connaissance pas de fonction pour déséquiper l'objet. Mais il est toujours possible de ruser. :)
La solution est d'ajouter à l'inventaire un objet bidon du même type que l'objet à équiper, de le faire équiper grace à la fonction Equip (l'objet à déséquiper le sera donc automatiquement), puis de retirer l'objet bidon de l'inventaire ! :beat:
L'inconvénient de cette méthode est qu'elle est relativement gourmande en mémoire vive : si tu veux déséquiper tout l'inventaire, mieux vaut le faire en plusieurs frame sans quoi les plus petites configurations risquent un plantage in-game... :(

Quand à ton second problème, tu peux utiliser la fonction GetPos et comparer avec la position précédente : si elles diffèrent trop, c'est que le joueur a bougé. :)
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#3 chef

chef

Posté 07 octobre 2006 - 14:47

Je connaissais déjà cela Nenfëa :beat:

Mais je me suis mal exprimé... Je voulais savoir quand un objet est déséquipé...

Team Stargate



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


#4 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 07 octobre 2006 - 15:20

Si ton mod est Tribunal-dépendant, tu peux utiliser la fonction HasItemEquipped. Sinon, je ne suis pas sur que ce soit possible... :beat:
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#5 Orann

Orann

    Nérévarine de Pertevue


Posté 07 octobre 2006 - 15:36

Sans Trib ou bloodmoon, peut-être utiliser onpcequip?

Le problème serait qu'il faudrait voir à chaque frame si le joueur à toujours l'objet équipé. On met une variable à 1 et si, à la frame suivante, onpcequip passe à 0, on met la variable à 2 et on sait que le joueur s'est déséquipé à l'instant de l'objet...

Je n'ai pas testé donc je ne sais pas si cette solution marche effectivement et surtout si elle n'utilise pas trop de mémoire...  :beat:
Palme d'honneur 2010 pour le mod Archipel de Pertevue

Entamez votre voyage vers l'Archipel de Pertevue ! Test communautaire en cours.

#6 chef

chef

Posté 07 octobre 2006 - 21:21

Je pense pas que sa marchera orann, car, quand on utilise se systeme le short (onpcequipe) est mi a un, et il ne peut pas retourner a 0 (je pense du moins) du fait que on dois remettre set onpcequip to 0. Je ne suis pas sur de se que j'avance, mais je pense que c est juste.


Merci Nenfëa, je suis tribunal requis, donc, pas de problème  :P

Merci a de votre aide  ;)

Team Stargate



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


#7 vor

vor

    Bugovore


Posté 07 octobre 2006 - 21:58

onpcequip ne doit pas être remis à zéro par le script, sauf à vouloir déséquiper soi-même le pj dans le même bloc de commande. C'est "une variable avec test intégré", un booléen en fait. tant que le test est fait, cela retourne 1 si l'objet est équipé, zéro dès qu'il ne l'est pas.
Comme le dit Orann, il faut une deuxième variable définie par l'utilisateur, qui enregistre le changement d'état de onpcequip.

#8 chef

chef

Posté 07 octobre 2006 - 22:06

Ah... Mais en utilisant Hasitemequiped :


mon script marche pas !

le voici :

begin _BS_SCR_clo_caisse

short fait
short HasItemEquipped


if ( player->HasItemEquipped "B_B_teste" == 1 ) 


if ( PCGet3rdPerson == 0 ); si le perso est a la vue a la 1er personne :

Messagebox "Pour utiliser la caisse, vous devez être en vue à la 3eme personne."

player->additem "common_robe_02_tt" 1
player->Equip "common_robe_02_tt"
player->removeitem "common_robe_02_tt" 1

return

endif


if ( PCGet3rdPerson == 1 ); un peu inutile mais je pense pas que le probleme vienne de la...
if ( fait == 0 )

set fait to 1

DisablePlayerViewSwitch; on l'empeche de faire quelques trucs...
Disableplayerfighting
Disableplayermagic
Disablelevitation
DisablePlayerJumping

endif
endif


endif

if ( fait == 1 )
if ( player->HasItemEquipped "B_B_teste" == 0 ); si il déséquipe le vétement camouflé en caisse ^^ :

set fait to 0
EnablePlayerViewSwitch
Enableplayerfighting
Enableplayermagic
Enablelevitation
EnablePlayerJumping


endif
endif




end


Alors, enfaite, ce script est pour le mod de metal gear solid, je voudrais que le joueur puisse se cacher dans une caisse (une robe camouflée en caisse...) et ne puisse pas se battre ou quoi que se soit d autre quand il est sous cette forme ^^

Vous savez pourquoi sa marche pas ? Il ne se passe tout simplement rien... J'équipe et il met la "robe" et il se passe rien... je peux toujours sauter, me battre... Le script ne fonctionne tout simplement pas, vous savez pourquoi ? Auriez vous une solution ?

Merci

Team Stargate



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


#9 vor

vor

    Bugovore


Posté 07 octobre 2006 - 22:38

HasItemEquipped est une fonction, donc si tu déclare un short du même nom, il me semble que ça va coincer.

Un bon moyen de déméler un script, c'est de faire un messagebox dans chaque branche conditionnelle. Tu peux ainsi voir là où passe, ou ne passe pas, le moteur du jeu et donc cerner le test défectueux, ou la commande !

#10 chef

chef

Posté 07 octobre 2006 - 23:11

Oui, mais non, il ne fesait rien du tout ! Je me suis meme demandé si j'avais pas oublié de mettre le script sur l'objet...

je vais essaier !

Edit : Hasitemequiped est un short, donc je suis obligé de le déclarer au début. Ensuite, j'ai essaié de l'enlever (dans le short), de mettre un elseif a la place du 2eme,... Et sa ne marche pas. Je ne sais pas comment faire... Je vais dormire, je verrais si je tilte pas une solution demain, parce que la je suis completement mort... Si sa se trouve demain je vais trouver une erreur grosse comme une maison...

Modifié par chef, 07 octobre 2006 - 23:47.

Team Stargate



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


#11 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 08 octobre 2006 - 00:22

Voir le messagechef, le 08.10.2006 à 00:11, dit :

Edit : Hasitemequiped est un short, donc je suis obligé de le déclarer au début. Ensuite, j'ai essaié de l'enlever (dans le short), de mettre un elseif a la place du 2eme,... Et sa ne marche pas. Je ne sais pas comment faire...
Ca me surprend, HasItemEquipped n'a normalement pas à être déclarée. ;) Tu l'écris bien avec deux "p" dans le "Equipped" ?

Si besoin est, voilà un exemple de script que j'ai utilisé dans Kalendaar qui fonctionne sans soucis ! :P
Spoiler

Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#12 chef

chef

Posté 08 octobre 2006 - 11:41

Super ! Comme ceci sa marche !  :beat:

Spoiler

Merci ! Mais le probleme, c est que je dois détecter quand le joueur marche, lui réduire sa discretion a 25(addspell malédiction...) et lui remettre quand il s'arrete...

Mais je ne vois pas comment faire, quand mémoriser les position ? Quand les vérifiée ? Quand les remettre a jour ?

Team Stargate



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


#13 vor

vor

    Bugovore


Posté 08 octobre 2006 - 11:51

il y a déjà un mod qui fait ça (discrétion variable)
* pars fouiller dans son répertoire*
l'analyse de ce qu'ont fait d'autres moddeurs est aussi un moyen d'apprentissage :beat:

EDIT : juste retrouvé le read-me ! Son nom More Realistic Sneaking Version 1.9 by Polycrates
peut-etre déja camembérisé. Parmi d'autres choses, il fait ce que tu souhaites

Modifié par vor, 08 octobre 2006 - 11:56.


#14 vor

vor

    Bugovore


Posté 08 octobre 2006 - 12:37

c'est un mod vo donc un peu de lecture s'impose :beat:
lien de téléch en début de page, merci google :woot

#15 chef

chef

Posté 08 octobre 2006 - 13:17

Ah ? Je n'ai trouvé que sa sur wiwiland...

http://morromods.wiw...

Je vais essaier de m'arranger avec des timer, getspell, addspell, removespell, ... Je vais voir se que sa donne.


Edit : Voila sa que sa donne, mais sa ne marche pas... Que je bouge ou pas, il ne me donne pas le sort, il ne montre pas non plus le message box qui indique si on a bougé ou pas...

Spoiler

Team Stargate



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


#16 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 08 octobre 2006 - 13:36

Bonjour

Tester des égalités (ou des !=) sur des float c'est un procédé assez risqué qui d'ailleurs ne marche pas du tout sur certaines machines (les getpos xyz peuvent varier faiblement même si le joueur ne se déplace pas).

Une méthode raisonnable (bien qu'imparfaite) pour détecter le mouvement se trouve dans le script _MSD_vol de Nova Magica.

(pour résumer, on calcule (x2-x1)², (y2-y1)² et (z2-z1)²; si ces valeurs sont suffisamment faibles pendant un certain nombre de frames on considère que le perso ne bouge pas )

#17 chef

chef

Posté 08 octobre 2006 - 14:31

:beat:

J'ai... J'ai pas compris.
J'ai compris le principe, mais dans le script je comprens pas comment le réaliser...

Team Stargate



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


#18 isa

isa

    Fée Pachier


Posté 08 octobre 2006 - 16:02

Et on évite autant que possible de supprimer ses propres posts quand il y a eu une réponse entre temps, question de respect vis à vis de celui qui se penche sur ton problème  :beat:
Chlorophylle de la Dictature Eclairée des 7 Idiots en Jaune
Conceptrice d'Apprenants dont le segment manipulateur antérieur manœuvre l'outil scripteur dans le but de générer une motricité de proximité \o/

#19 chef

chef

Posté 08 octobre 2006 - 17:37

Désolé, mais j'ai suprimé, et j'avais pas vu la 2eme page... Désolé Vor.

Team Stargate



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


#20 vor

vor

    Bugovore


Posté 08 octobre 2006 - 19:20

supprimer pour faire un copié-collé et marquer la suite après un "EDIT", c'est pas la peine : si deux posts sont trop rapprochés, ils sont automatiquement fusionnés.
C'est pas grave tant que ça devient pas une habitude :D

j'espère que t'en as profité pour prendre connaissance du lien sur le mod et son descriptif.
Comme le dit nerwal, les tests de comparaison "absolue" sur des nombres réels sont à éviter. Même si ton perso est sur une zone plate (plane et horizontale), prendre deux fois consécutives (à deux ou trois frames près ) ne te donnera que rarement exactement la même valeur. Si le perso est en pente, ça peut devenir tragique comme écarts.
S'ensuivent plusieurs méthodes pour évaluer cet écart et le déclarer déclenchant ou pas
exemple :
x1=0.5    x2=0.6
la valeur (x2-x1) =0.1 est "au dixième" : écart de déplacement détecté d'un dixième d'unité
la valeur (x2-x1)²=0.01 est "au centième" : déplacement détecté d'un centième d'unité

si ton calcul d'écart dépasse une certaine valeur tu en déduis que le perso a bougé, sinon il est immobile.

Si cette partie mathématique est un peu ardue pour toi, prends des conditions plus facile à gérer, temporairement, pour faire tourner ton script. Cela démêlera les pbs de codage des pb de math

#21 chef

chef

Posté 08 octobre 2006 - 19:42

x1 = on save les parametre...
x2 = on verifie les parametres une seconde apres la save ?



Si c'est bien se que j'ai compris, en gros, tu propose de détecter la position du joueur au disieme ou centieme pres ?
Moi, je voudrais savoir si le joueur a bougé d'une unitée, ou meme de 10... Un diseme ou un centieme n'est pas tres important pour moi... Et sa donnerais quoi en script ?

Team Stargate



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


#22 vor

vor

    Bugovore


Posté 08 octobre 2006 - 19:56

(x2-x1) te donnera toujours l'écart de distance aux deux moments où tu as fait les relevés.
Cette valeur, mise dans une variable, tu la compares à ton seuil désiré, 1 ou 10 ou 50
if (y<= 50) then
blabla ; le pj n'a pas bougé
else
blabla ; le pj a bougé

à toi de le coder avec le langage du tescs :D
mais il vaut mieux etre sûr de ton script avant : le fait de mettre la robe, de l'enlever, les messages qui resteront finalement qui apparaissent quand il faut...

#23 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 08 octobre 2006 - 20:46

Citation

(x2-x1) te donnera toujours l'écart de distance aux deux moments où tu as fait les relevés.
Cette valeur, mise dans une variable, tu la compares à ton seuil désiré, 1 ou 10 ou 50
if (y<= 50) then
blabla ; le pj n'a pas bougé
else
blabla ; le pj a bougé

En fait la mise au carré n'était pas gratuite; elle évite d'être ennuyé par les cas où x2-x1<0 ... (on peut aussi choisir de faire set y to (x2-x1) si c'est > 0 et set y to (x1 - x2) sinon)

#24 chef

chef

Posté 11 octobre 2006 - 13:44

- par - = +   :huhu:

Pas bête du tout ! Voici ce que j'ai tenté de faire mais ça marche pas... Parfois il ne fait plus rien (le script s'arrete... j ai plus de messagebox, notament quand je m eloigne de l endroit ou j ai pris l objet) et il ne détecte jamais quand je bouge, il pense que je suis toujours immobile... Pourtant je pense courrire plus que 100 unitée !

Voici le script :

Spoiler

Modifié par chef, 13 octobre 2006 - 16:53.

Team Stargate



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


#25 chef

chef

Posté 13 octobre 2006 - 16:49

Salut ! J'ai reglé le probleme, mais un autre persiste.

Enfaite,  c'est au niveau du(des else(s) que ça marchais pas...
maitenant, j'ai corrigé, enlevé les messagebox, et rajouté quelques lignes par cei par la...

Spoiler

Le probleme est de type Right eval, mais il avait fais pareil quand j'ai retiré les returns, apres plusieur modifications divers il bugais plus... Alors les messagebox provoqueraient le meme probleme ?

J'attens votre aide et avis,
Merci

Edit : En effet, le probleme venait de la... Mais maitenant, quand je l'equipe il est sensé ajooter et equiper un objet... Hors, il ne le fait pas... Voici le script a nouveau modifié...

Spoiler

Vous avez une idée ?

Modifié par chef, 14 octobre 2006 - 09:34.

Team Stargate



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





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

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