Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Quelqu'un peut-il me faire ce script ?

Par TheRack le 8/9/2002 à 21:02:11 (#2122018)

Salut à tous,

Je ne m'y connais pas bien en language C, et si je me débrouille pour les choses les plus faciles, dans le cas que je vais vous exposer, je suis un peu bloqué. Si jamais il y a déjà la réponse quelque part dans ce forum, prière de me l'indiquer.

Voilà, je souhaite mettre un script dans "OnPhysicalAttack" d'un NPC qui fasse ceci:

si l'attaquant attaque le NPC avec l'epée X, alors, le combat se déroule normalement. En revanche, si l'attaquant attaque par un autre moyen (autre arme ou magie), alors tous les dégats faits au NPC sont annulés, et, par contre, c'est l'attaquant qui subit les dégats qu'il aurait lui-même infligé.

Une sorte de contre-attaque miroir, quoi. ! Les dégats que l'attaquant aurait infligé au NPC ricochent sur le NPC et sont infligés à l'attaquant. Ca vaut aussi pour les sorts. Ceux-ci se retournent contre leur lanceur.

Si quelqu'un pouvait me pondre un petit script pour ça, il serait super-méga-sympa.

Merci à tous,

TheRack

Par Jedaï le 8/9/2002 à 22:37:46 (#2122728)

Je pense qu'il serait plus facile d'employer le OnDamaged et de rajouter ces quelques lignes au début du script par défaut (à moins d'utiliser le OnUserDefined) :

object oPC = GetLastDamager();

if (!(GetLastWeaponUsed(oPC) == GetObjectByTag("epeeX") ||
!(GetDamageDealtByType(DAMAGE_TYPE_MAGICAL) == 0)))
{
int nNbDmg = GetTotalDamageDealt();
effect eHeal = EffectHeal(nNbDmg);
effect eDamage = EffectDamage(nNbDmg, DAMAGE_TYPE_DIVINE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}

Par TheRack le 9/9/2002 à 13:43:13 (#2125543)

Merci pour le script, Jedaï, mais il ne semble pas fonctionner. Je l'ai essayé dans OnAttacked, OnPhysicalDamage et OnUserDefined, mais rien à faire, il se prend toujours les baffes des autres. Que faire ???

Sorry

Par Jedaï le 9/9/2002 à 17:49:02 (#2127124)

J'avais oublié une parenthèse !


object oPC = GetLastDamager();

if (!(GetLastWeaponUsed(oPC) == GetObjectByTag("epeeX")) ||
!(GetDamageDealtByType(DAMAGE_TYPE_MAGICAL) == 0))
{
int nNbDmg = GetTotalDamageDealt();
effect eHeal = EffectHeal(nNbDmg);
effect eDamage = EffectDamage(nNbDmg, DAMAGE_TYPE_DIVINE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}


Et il ne peut fonctionner que dans le OnDamaged.

Par TheRack le 9/9/2002 à 18:12:25 (#2127291)

Je suis désolé, mais ça marche toujours pas. Je l'ai pourtant mis au bon endroit, dans OnDamaged, mais toujours pas d'effet !!! Y a un binz !!!

Ben merde alors

Par Jedaï le 9/9/2002 à 19:48:18 (#2127936)

je comprend pas, essaie-ça mais les précédents devraient marcher ??:confus:


object oPC = GetLastDamager();

if ((GetLastWeaponUsed(oPC) != GetObjectByTag("epeeX")) ||
(GetDamageDealtByType(DAMAGE_TYPE_MAGICAL) > 0))
{
int nNbDmg = GetTotalDamageDealt();
effect eHeal = EffectHeal(nNbDmg);
effect eDamage = EffectDamage(nNbDmg);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}


Sinon tu as essayé de supprimer carrément le reste du script et de mettre juste ça ? Je ne vois pas d'erreur mais bon... Qu'est-ce qui se passe exactement : il se prend les dommages mais meurt-il ? etc..

Par Amaranthe le 9/9/2002 à 19:55:38 (#2127987)

Je pense qu'il est nécéssaire de préciser que l'épée en question doit impérativement avoir le tag : "epeeX".


Amaranthe.

Par Jedaï le 9/9/2002 à 20:08:38 (#2128100)

Effectivement Amaranthe mais je fais confiance à l'intelligence de Rack et de toute façon le pire qui puisse arriver avec un tag erroné c'est que le monstre soit intuable(....). Par contre je viens de tester avec mon gros barbare sur un gob un rien boosté (assez de point de vie pour qu'il ne meurt pas du premier coup). Il s'est massacré lui-même ! Par contre je n'avais mis que ceci dans le OnDamaged :


void main()
{
object oPC = GetLastDamager();

if ((GetLastWeaponUsed(oPC) != GetObjectByTag("epeeX")) ||
(GetDamageDealtByType(DAMAGE_TYPE_MAGICAL) > 0))
{
int nNbDmg = GetTotalDamageDealt();
effect eHeal = EffectHeal(nNbDmg);
effect eDamage = EffectDamage(nNbDmg);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}
}

Par TheRack le 10/9/2002 à 11:14:38 (#2130776)

De toute façon, avant de penser au tag de l'épée, j'aimerais bien que l'effet marche. J'ai tout fait comme tu me l'as montré, Jedai, et je suis sûr de ne pas m'être gourré (copié-collé, et hop, dans OnDamaged, sauvé, essayé). Que ça soit en Play-Solo ou en DMclient, le PNJ porteur du script se fait toujours buter, et pas de dégats pour les attaquants.

Peut-être est-ce trop demandé, mais pourais-tu m'envoyer un tout petit module avec deux PNJ et avec l'effet qui marche, comme dans ta description avec le barbare et le goblin ? Dis-moi aussi comment tu as essayé (

Je crois qu'il y a mon email quelque part en bas...

En tout cas, merci pour tout et désolé de t'em... avec ça !

bizarre :

Par Jedaï le 10/9/2002 à 21:42:38 (#2134790)

J'ai fait ce mini-module de test, il marche à la perfection et l'épée que j'ai créée est seule à pouvoir blesser le gob'.

Malheureusement le e-mail intégré à ce forum ne semble pas proposer l'option fichier lié (ou alors je l'ai loupée). Alors si tu veux que je l'envoie donne moi ton adresse e-mail ici.

D'autre part

Par Jedaï le 10/9/2002 à 21:46:27 (#2134805)

Si ton PNJ est trop juste au niveau points de vie (hit points : HP). Il se peut qu'il meure en un coup et dans ce cas le script ne marchera pas (eh oui c'est pas un EffectResurect...).
Donc vérifie ce point aussi.

Par Tyn' le 10/9/2002 à 22:29:02 (#2135065)

Et encore, une p'tite critique de vorpal dans la g... et on en parle plus :D

Qui a dit bourrin? Même pas vrai.

Par TheRack le 11/9/2002 à 9:12:42 (#2136665)

Oui, oui, mon PNJ se faisait butter en plusieurs coups. Donc, il avait assez de points de vie. J'ai hâte d'essayer ton module, et je pourrai comparer. Voici mon adresse:

mracordon@bluewin.ch

Encore merci de ta patience et de ta générosité !
TheRack

Par Jedaï le 11/9/2002 à 13:06:00 (#2137826)

Edit : voir message suivant

Par Jedaï le 11/9/2002 à 13:06:16 (#2137830)

Effectivement ce script ne rend pas le monstre invincible, en particulier les effets des sorts autres que les dommages sont parfaitement opérationnels... Si on veut vraiment un perso invincible et intouchable on met "plot" mais je pense que ce n'est pas ce que demandait TheRack.

Par Jedaï le 14/9/2002 à 12:31:33 (#2154880)

Alors est-ce-que ça a marché ?

Par Darkmore le 14/9/2002 à 14:30:06 (#2155577)

J'arrive un peu comme un cheveux sur la soupe alors excusez si mes remarques sont pas pertinentes.

Jedaï-->D'après ce que j'ai vu ton script soigne les blessures qui viennent d'être infliger par autre chose que l'épéeX.

Est ce qu'il ne serait pas plus logique de passer le PNJ en mode "plot " et utiliser Ondamage pour lui infligé un EffectDamage uniquement si l'arme utilisée est l'arme X.
Parce que la si un sort lui applique l'effet Death (sort de mort par exemple) le PNJ meurt quand même il me semble... et ça semble génant pour Rake.

Alors après la question c'est : est ce que le Ondamage se déclanche si le PNJ est en plot?
Et est ce qu'on peut appliquer un EffectDamage efficace sur un PNJ en plot ?

Désolé j'apport plus de question que de réponses :merci: :p

Par TheRack le 14/9/2002 à 17:11:06 (#2156296)

Désolé, Jedai, j'ai pas encore eu le temps de corriger mon module, mais avec ton exemple, je me débrouillerai. Cela dit, ce que dit Darkmore n'est pas dénudé de sens. Mon PNJ est censé renvoyer aussi tous les sorts, y compris les plus puissants.

Dans ce cas, je ne sais pas quelle est la meilleure solution. A vous de me dire...

En tout cas, merci encore...

Par Jedaï le 15/9/2002 à 16:59:54 (#2161967)

Mettre ton monstre en Plot serait pas mal mais ça empêcherait qu'il renvoie les dommages (eh oui : on ne pourrait calculer combien il se prend) par ailleurs pour les sorts ce n'est pas un problème il faut juste rajouter une ligne dans le OnSpawn. Pour le renvoi de sort j'ai trouvé une solution et je te renvoie mon module modifié pour faire les deux choses précités.

JOL Archives 1.0.1
@ JOL / JeuxOnLine