mur boule de feu

Répondre
Partager Rechercher
Avant de m'y mettre et de voir que ce n'est pas possible, pouvez-vous me dire si c'est possible de créer un mur qui lance des boules de feu toute les x secondes et qui se désactiver par un levier?
J'accepte les "vas coucher gros noob" avec calme
vas coucher gros noob





(desole, tu m'as pas laissé le choix.)



Pour repondre plus serieusement, oui, c'est possible ^^
(enfin, non, mais en bidouillant un peu, c'est possible de rendre pareil )
Chapeau... quelle maitrise ^^



(t'as demandé a ce qu'on te laisse chercher, mais si je puis me permettre, je te suggere de t'orienter vers une creature invisible + un trigger + un OnHeartBeat + DestroyObject + Placeable onUsed )

Voila : je peut pas en dire moins moins sans n'avoir rien dit ^^
Emotion et tout et tout, mon premier script, pour les plus gros newbies que moi voici mes premiers jets en langage neverwinternien:


La partie que j'ai mise sur le générateur de boules de feu dans le
OnHeartbeat. Le Tag TARGET2 Designe la cible (ici un chien):

Code PHP:

void main()
{
    
object oTarget GetObjectByTag("TARGET2");
    
ActionCastSpellAtObject(SPELL_FIREBALL,oTarget,METAMAGIC_ANY,1);

Le script mis sur le chien pour le faire disparaître(dans le OnSpawn):

Code PHP:

void main()
{
object oObject GetObjectByTag("TARGET2");
        
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectInvisibility(
INVISIBILITY_TYPE_IMPROVED),oObject);

Le chien a toutes ses carac a fond pour ne pas succomber à ses blessures


Si je veux arrêter la boule feu feu, je pense mettre sur le OnUse d'un levier un script qui tue le chien, ainsi plus de cible a viser.

J'ai une question, il est possible d'être blessé par la boule de feu qui vole vers un point car pour le moment le PJ prend seulement des points de dégâts du a la zone d'impact. En fait les pj doivent passer un couloir traversé par une boule de feu toutes les 6 secondes et se mettre dans des renfoncements au bon moment.
Dans ce cas, il va falloir utiliser l'effet visuel de la boule de feu, et non pas le sort boule de feu.

ensuite, tu fait un Effet de type Beam entre ton point et ta cible (ou bien un effet de type cylindre, c'est aussi bien), sur le OnHeartBeat.)

PS : pour ton CPU, le mieux, c'est pas de tuer la cible, mais de tuer la creature invisible qui lance le sort, comme ca, plus de Script toutes les 6 sec (et donc, plus de BdF non plus ^^)
j'utilise donc un ActionCastFakeSpellAtObject pour l'effet lumineux? Le beam, il grille tout le couloir? Car c'est la boule de feu qu'ils doivent éviter, faut leur laisser une chance

J'avais pensé a déclarer un variable qui serait en FALSE pour quand le levier est enclenché, j'ai capté comment déclarer une variable locale, mais pour les globales c'est quelle commande?
donc je crée une variable locale sur le OnEnter de la zone, puis je sais modifier cette variable dans un script se trouvant sur un objet dans le OnUse par exemple?
oui, tu peut faire ca.

Une variable locale n'as de locale que le nom : en fait, elle est "attachée" a l'objet que tu designe dans le Set/Get, et c'est completement décorellé de l'endroit d'où se declenche le script.
Tu peut donc assigner une variable locale au module sur le script d'un OnHeartBeat ou d'un Onperception de creature (meme si a mon avis, ici, le onenter d'un trgger est en effet plus interessant... )
Pour m'enfoncer encore plus dans le monde de la quiche géante, j'ai encore une petite question.

Je viens du basic, amos, darkbasic, en peu de blitzbasic aussi.
On déclare la variable au début, ok, mais dans le cas de neverwinter, si je place la déclaration de la variable sur le OnEnter de la zone, puis que je la modifie. Lorsque je quitte et que je reviens dans cette zone, la variable va a nouveau s'initialiser, non ?(comme si on rechargeait un programme) ?

Le "va coucher gros noob" est toujours actif!
Pour faire plus realiste, je te conseil une variable global, ce qui permet a tous les PJ d avoir la meme chose car si un nouveau PJ rentre dans la zone, faudrai qd meme pas que celui qui vient de desactiver le piege et attend devant le mur piegé se fasse cramer les poil du nez.
Sinon, comment tu determine la directivite de la zone de detection ? je rappele la fonction :

object GetFirstObjectInShape(
int nShape,
float fSize,
location lTarget,
int bLineOfSight = FALSE,
int nObjectFilter = OBJECT_TYPE_CREATURE,
vector vOrigin = [0.0,0.0,0.0]
);

Je vois bien la forme du SHAPE, sa taille, la loc de depart, la ligne de vue, le filtre des cibles et un "" vOrigin "" .

vOrigin : Normally the spell-caster's position. (Default: [0.0,0.0,0.0])

ce qui signifie pour moi que c'est la position du caster.

Mais comment definie t on la direction ?

EDIT : desolé, j ai beaucoup de mal ce matin lTarget, c'est la loc de la cible donc ca definie un vecteur ..........
ok je vois ou vous voulez en venir, avec vos expliçations, dans mon cas ca va faire un cone dans lequel un sort va agir, mais en fait ce que je voudrais est plus vicieux, j'aimerais faire comme
dans le vieux jeu dungeon master, un mur qui lance une boule de feu et qui traverse un couloir, les pj doivent alors eviter cette boule de feu.
Le problème c'est qu'une boule de feu ne cause des dommages que lorsqu'elle arrive a destination, je voudrais qu'elle explose quand elle rencontre un joueur.
ce quil te faudrai, c'est un truc du genre :

Code PHP:

// Attention : beaucoups de bug on été siglalé sur GetFirstObjectInShape et je sais pas si tout marche bien ;)

// Rayon de l explosion
float fRadius 10.0f;
// Effet de l explosion
effect eDamage EffectDamage(d6(3), DAMAGE_TYPE_FIREDAMAGE_POWER_NORMAL);

// Le bout du couloir comporte un wp qui sert a maximiser la propagation et a orienter le sort
oTarget GetObjectByTag("WP_BoutDuCouloir");
lTarget GetLocation(oTarget);
// le +1 sert a s assurer de s arreter au bout du couloir et pas avant le wp
fLongueur GetDistanceToObject(oTarget) + 1.0f;

// Detection du premier obstacle
oObstacle GetFirstObjectInShape(SHAPE_SPELLCYLINDREfLongueurlTargetTRUEOBJECT_TYPE_CREATURE OBJECT_TYPE_WAYPOINT );
lObstacle GetLocation(oObstacle);
// Application des degats dues a l explosion
oBobo GetFirstObjectInShape(SHAPE_SPHEREfRadiuslObstacleTRUEOBJECT_TYPE_CREATURE OBJECT_TYPE_DOOR OBJECT_TYPE_PLACEABLE);

while(
GetIsObjectValid(oTarget))
      {
      
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamage,oBobo);   
      
oBobo GetNextObjectInShape(SHAPE_SPHEREfRadiuslObstacleTRUEOBJECT_TYPE_CREATURE OBJECT_TYPE_DOOR OBJECT_TYPE_PLACEABLE);
      } 
Il ne reste plus qu a appliquer les effets visuels c pas le plus facile

Ps : dites le si ya des fautes, je corrigerai
En fait, les bugs sur GetFirstInShape/GetNext n'en sont pas...

Je m'explique :

Tu cree une boucle GetFirst/GetNext pour simuler un sort. Dans ce sort, tu detruit l'objet s'il rate un JdP, et tu cree un Object de type cadavre, par exemple.

Et bien cela va detruire l'ordonnancement des objets, qui sont listés lors de la boucle. resutat : si tu fait une boucle du type :

Code PHP:

object oTarget GetFirstObjectInShape(4,10.0,lTarget,0,1);
while (
GetIsObjectValid(oTarget))
    {
    
object oNewObj CreateObject(64,"test",ltarget);
    
oTarget GetNextObjectInShape(4,10.0,lTarget,0,1);
    } 
tu va obtenir une boucle infinie...
Magique, non ?

En fait, l'explication, c'est que le oNewObj est crée juste apres l'object oTarget dans la liste des objet dans l'aire d'effet. Celui ci etant dans l'aire d'effet, alors, il est valide pour la boucle, et declenche la creation d'un nouveau oNewObj... et-caetera...

certains autres comportement "bizarre" sont obsevable, et relevent, a priori, du même souci.

Ma solution pour eviter ces "bugs", qui d'apres moi, n'en sont pas (mais je precise que ce n'est que mon interpretation e la chose, et qu'a priori, n'ayant que peu de connaissance en ce domaine, ce n'est que supputation), c'est tout simplement de mettre un DelayCommand dans toutes les actions effectuées par GetFirst/GetNext.

Voila

PS pour l'effet visuel, je vois pas ce qu'il y a de dur : Le FakeSpell sera parfait ^^
Je parle des bug de zone SHAPE_* . Je crois qu ils ont été corrigé , mais definies tu le diametre du cylindre du SHAPE_CYLINDRE ??? d apres des tests, il serait de 10 pas ( ou 10m , je sais plus) ce qui est enorme. il faudrai donc rajouter une formule mathematique pour calculer la distance entre l objet detecter et la droite qui va d un bout a l autre, sinon faudra faire des niche vachement profondes pour que le PJ se prenne pas la boule dans la tete.

Pour l effet visuel, faudrai un effet qui avance a une vitesse donner. pour ca, l effet boule de feu est pas mal. il reste toute fois un probleme : le moment de declenchement de l effet
_ si tu l active avant de detecter les obstacles, il ne s arretera jamais sur le mouton qui traverse .
_ si tu l active apres, comme le debut de l effet , cad la petite boule qui deviendra grosse, a une vitesse propre et comme il ne part que apres avoir fait le test de presence, le PJ pourra avancer avant de ce prendre la boule

ma solution serait de bloquer le PJ le temp que la boule le touche et mettre un delais en fonction de la distance pour l application des degats chui doué en math ( plus qu en ortaugraf, ca c sur) mais la j ai peur que ce sois un peu lourd a gerer pour les calculs mathématiques, du cote serveur je parle.

J ai pas trouvé la FakeSpell dans le Lexicon po glop

Sinon, le script vous semble correct ?

EDIT : juste pour un rappel de math : la distance entre une droite (AB) et un point M de l espace est obtenue par :
|| AB ^ AM || / || AB ||

:baille:
FakeSpell = ActionCastFakeSpellAtLocation() ou ActionCastFakeSpellToObject()

Citation :
Je parle des bug de zone SHAPE_* .
Je parle de ca aussi : les bugs que je connais sur les shapes sont tous lies a l'ordonnancement des objet dans le listing de ceux ci.
Je ne parlait pas de notre exemple particulier.

Citation :
??? d apres des tests, il serait de 10 pas ( ou 10m , je sais plus) ce qui est enorme.
Bein... euh... ca depend de ce que tu met dans les parametres...


Pour le pb qui nous concerne, il suffit de mettre ton script et le FakeSpell dans le OnHeartbeat d'une creature invisible. vec un controle sur une variable locale qu'un trigger va mettre a TRUE et que le levier va mettre a FALSE


(PS : pas lu ton script : desole : j'ai reunion dans 30sec ^^)
les bugs dont je parle concerne la ligne de vue et la zone de detection

pour la ligne de vue, le parametre TRUE ou FALSE n est pris en compte que pour les OBJECT_TYPE_CREATURE et pas pour les autres types :/

pour la zone de detection, il semblerai que dans certain cas , il ne detecte pas sur tout le domaine de detection que l on veut qu il scrute :/

Pour le SHAPE_CYLINDRE, le float que l on rentre donne la longueur du cylindre mais pas son rayon.
Pour le SHAPE_SPHERE, c le rayon ( logique ) , centre sur la cible
Pour le SHAPE_CUBE, c la longueur du demi cote, centre sur la cible
Pour le SHAPE_CONE, c le rayon du bout du cone, et la longueur de l emeteur jusqa la cible

arf , ActionCastFake etait la 4ieme fonction
on peut donc rajouter avant le while

Code PHP:

ActionCastFakeSpellAtLocation SPELL_FIREBALL,   lObstaclePROJECTILE_PATH_TYPE_ACCELERATING); 

et surtout mettre un DelayCommand sur le ApplyEffectToObject au cas ou ca tuerai la cible


PS : les réunions, c tabou, on en viendra tous a bout !!!!
je prend une aspirine et je teste ca ce soir.
Sinon le système D made in botumys, vu que c'est pour maitriser une partie, si je vois une boule de feu qui rentre en contact avec un joueur, hop le jeu en pause, je lance un jet pour la sauvegarde et si il échoue, paf adios je le kill manuellement !

Bon ok, c'est nul...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés