Aller au contenu


Bloquer L'Activation D'Un Effet Magique Sous Conditions


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

#1 Joubarbe

Joubarbe

Posté 24 janvier 2013 - 17:02

Bonjour,

Mon but est d'avoir un objet consommable (nourriture) disposant d'un effet magique qui s'active normalement lorsque le joueur est dans une cell spécifique et de façon scriptée lorsqu'il est hors de cette cell.

J'ai ainsi mis un event OnEffectStart sur mon effet magique. C'est tout simple : lorsque le joueur active son potage dans la cell, il obtient un objet, mais lorsqu'il l'active en dehors, il reçoit l'effet standard du potage. Seulement voilà, je ne sais pas comment bloquer ce dernier effet, car ça doit être l'un ou l'autre, mais pas les deux.

BlockOnActivation() ne semble pas fonctionner et ça me paraît trop agressif.

Pour résumer :

If player.isInLocation(CellX)

   Effet 1 ; on enlève artificiellement l'objet de l'inventaire du joueur car on bloque son activation normale

Else

  debug.notification("Vous mangez votre potage, rien d'autre ne se passe, et vous êtes content")

EndIf

EndofExplicationFoireuse

Merci !

#2 ced

ced

    les météores


Posté 24 janvier 2013 - 19:24

BlockActivation() & BlockActivation(false) marchent très bien chez moi.
Je les utilise sur des Actor.

Il faut juste que tu trouves les bons Event pour déclencher l'un ou l'autre.

Citation

If player.isInLocation(CellX)
Je me permets de faire une parenthèse quant à l'utilisation de la fonction IsInLocation(Location akLocation)
Ceci teste si l'object Reference (ou l'Actor) est dans une location, ça ne teste pas une Cell Unique (au cas où tu ne le saurais pas)

Ta partie de script est un activemagiceffect ? ou ObjectReference ?

#3 Joubarbe

Joubarbe

Posté 24 janvier 2013 - 19:28

Pas sûr de comprendre la parenthèse (je ne suis même pas au niveau du bas de l'échelle en script :) )

ActiveMagicEffect

EDIT : Comment utilise-t-on BlockActivation dans ce cas ? S'il me dit que la fonction n'existe pas, c'est que je dois merder qq part.

Modifié par Joubarbe, 24 janvier 2013 - 19:45.


#4 ced

ced

    les météores


Posté 24 janvier 2013 - 19:59

BlockActivation() marche pour un ObjectReference, n'importe quel object (Armes, ingrédients, Actors NPC, ...)
c'est expliqué ici : http://www.creationk...ObjectReference

Il faudrait que tu m'expliques exactement ce que tu veux faire car je vois mal un ActiveMagicEffect faire fonctionner le blocage de l'activation.

#5 Joubarbe

Joubarbe

Posté 24 janvier 2013 - 21:19

Bah justement, j'avais bien lu ça, mais moi j'ai un "function is unknown or does not exist"

Et désolé, je ne vois pas quoi expliquer de plus :$
J'vais relire un peu tout ça...

#6 ced

ced

    les météores


Posté 24 janvier 2013 - 21:36

Pas grave... c'est moi qui ai mal compris ce que tu souhaites...

En fait, le BlockActivation() sert à bloquer les intéractions avec l'objet dans le monde.
Dans l'inventaire, tu ne peux bloquer l'activation d'un ingrédient par script (d'après mes tests), tu peux seulement le bloquer si il est posé par terre et dans ce cas, tu ne peux le rammasser.

Cette fonction ne marche pas toute seule, il lui faut un ObjetReference qui l'appelle dans ton ActiveMagicEffect (ex: ObjetProperty.BlockActivation() )
Sinon tu peux très bien placer un script sur ton Objet (c'est un ingrédient je suppose) & appeler la fonction seule BlockActivation()

#7 Joubarbe

Joubarbe

Posté 24 janvier 2013 - 22:15

Non c'est une potion et d'après ce que je vois, ça complique les choses.

Event OnEffectStart(Actor akTarget, Actor akCaster)
Actor Player = Game.GetPlayer()

If Player.IsInLocation(Temple01)
  player.additem(Gold001, Stew.GetGoldValue())
  debug.notification("Poor people thank you! The temple gave you " + Stew.GetGoldValue() + " gold.")
Else
  debug.notification("You could give it to a temple...")
endif

endevent

Ok pour le IsInLocation, mais pour les temples, ça devrait fonctionner (quelle est la bonne fonction à utiliser dans ce cas ?)

Deux problèmes donc :

1/ Celui que je décrivais. Dans la première condition, ma "potion" est tout de même consommée ; ce qui n'a pas de sens vu que je suis censé la donner au temple (par un moyen idiot j'en conviens, mais passons).
2/ La valeur de vente du ragoût (qui est donc une potion et non un ingrédient). Avec ces propriétés j'ai un peu de mal, car là je peux donner 4 ragoûts qui ont chacun une valeur différente. Comment faire pour ne pas avoir 4 Magic Effects à faire ? Non pas que ce soit bien long, mais si je devais faire ça sur 50 ragoûts, ça le deviendrait sans doute. Existe-t-il un moyen de récupérer l'objet qui est lié à l'effet magique ? Comme ça, je pourrais définir "Stew" en tant que variable contenant l'un des 4 ragoûts utilisés.

Pfff, "les scripts me crispent", ça n'a jamais été autant vrai :)




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

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