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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

une malediction

Par Blam le 30/10/2002 à 15:54:16 (#2441386)

Par le tag d'un objet, j'aimerais que sur tout le module, des que le joueur qui a cet objet perd des points de vie, une créature qui lui est hostile soit invoquée prés de lui.
Une malédiction en quelque sorte......

Si quelqun a une solution simple...............................................

Par eMRaistlin le 30/10/2002 à 16:13:36 (#2441558)

Le mieux, c'est de faire en sorte que sur le OnHeartBeat du module (oO, j'aime pas l'utiliser, mais bon... y'a peut etre un moyen avec le OnUserDefined, mais j'en suis pas sur), tu compare avec les HPMax du PC qui a l'item.



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

while (GetIsObjectValid(oPC))
{
if (getLocalInt(oPC,"Malediction")!=1)
{
if (GetMaxHitPoints(oPC) > GetCurrentHitPoints(oPC))
{
if (GetIsObjectValid(GetItemPossessedBy(oPC, "TAG_De_L'objet")))
{
CreateObject("PUNISHER",GetLocation(oPC),FALSE);
SetLocalInt(oPC,"Malediction",1);
}
}
}
oPC = GetNextPC();
}
}



Et bien sur, tu met un script OnRest:


void main()
{
SetLocalInt(GetLastPCRested(),"Malediction",1);
}

pas mal

Par Blam le 30/10/2002 à 16:18:51 (#2441612)

mais le OnHeart bof !!!
j'aimerais plus cool mais j'ai du mal a mettre en place

"rajout" cela ne fonctionne pas en fait j'ai mis a la place de "punisher" "nw_demon" mais rien n'est invoqué.......
on m'aurais menti ???? :)


merci de ce debut de piste interressant :)
bon boulot

Par eMRaistlin le 30/10/2002 à 16:27:32 (#2441690)

J'aime pas non plus le OnHeartBeat.

Eventuellement, tu peut creer des trigger sur tes map et mettre ca, mais ca va devenir le bordel.

Eventuellement, tu peut le mettre sur le OnUserDefined, et lancer un appel sur le OnPerception des NPC autours... ou bien sur le OnConversation apres avoir fait un pattern vide (histoire que le NPC reponde a tout, comme ca, des qu'un PC parle, il risque l'invocation.)

Enfin, y'a pas mal de solutions, en fait ^^

Sur tout le module

Par Blam le 30/10/2002 à 16:33:58 (#2441754)

j'aimerai bien que la malediction soit sur tout le module

et que, meme sur les degats d'un piège, l'invocation se fasse.....

enfin si on arrive a mettre ca au point


merci.

Par Symphonik le 30/10/2002 à 21:28:00 (#2444141)

Les montres ont un evenement OnDamaged peut être existe-t-il le même pour les joueurs.
apparement c'est le n°1006 pour le definir avec le OnUserDefined.
j'ai pas le temps maintenant de faire de plus amples recherches mais je m'y attaque plus tard....

Par Tyn' le 31/10/2002 à 3:51:16 (#2445945)

Provient du message de Symphonik
apparement c'est le n°1006 pour le definir avec le OnUserDefined.
Source plz :D

Pitié

Par Lys le 31/10/2002 à 12:30:49 (#2447982)

Philippe, pitié pour nos pauvres avanturiers, déja que le passage en enfer est un vrai enfer.

j'en profite pour dénoncer un MJ sans pitié, chez lui l'enfer est infernal et il n'y a pas de sortie..........Au secourss!!!!
Au debut on a trouvé ca marrant toute les depouilles de Paladins, les armures et épées abandonnées, mais tres vite les balors, gardiens balors, seigneurs balors, archivistes balors (niveau 33), et le demi-Dieu des enfers, pff c'est tres dur, un scénario de représaille pour tous les grosbills ( niveaux inferieurs a 18 s'abstenir !)


Un peu de tendresse dans ce monde si..............cruel

Par Amaranthe le 31/10/2002 à 14:14:15 (#2448924)

Provient du message de Tynril
Source plz :D


dans le script on_spawn par défaut.


// CUSTOM USER DEFINED EVENTS
/*
The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
events user 1000 - 1010
*/
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007

Par Tynril le 1/11/2002 à 0:05:15 (#2453080)

Provient du message de Amaranthe
dans le script on_spawn par défaut.
Sympa, je connaissais pas... Et on peut récupérer, par exemple sur un UDE 1005, l'attaquant et l'attaqué ?

Par Amaranthe le 1/11/2002 à 11:33:11 (#2454729)

Provient du message de Tynril
Sympa, je connaissais pas... Et on peut récupérer, par exemple sur un UDE 1005, l'attaquant et l'attaqué ?


Bien sur :

L'attaquant : GetLastAttackedBy() de mémoire.
L'attaqué, c'est encore plus simple : OBJECT_SELF.

Par Jedaï le 1/11/2002 à 12:02:24 (#2454887)

Y a peut-être plus simple à faire sur le OnHeartbeat, et qui évite certains tests, en fait avec ta solution, eMRaistlin, on peut avoir jusqu'à (3*Nb de PC ds le module) de test "inutile" (c'est à dire qui ne déclenchera pas d'évènement au final). Or si utiliser le OnHeartbat est toujours mauvais, il faut quand on y est obligé, optimiser au maximum le script...:rolleyes:

Je propose donc une solution qui au max fera quatre test "inutile"



void main()
{
object oItem = GetObjectByTag("TagDeLaMerde");
object oPC;

if (GetIsPC(oPC = GetItemPossessor(oItem)))
{
if (GetMaxHitPoints(oPC) > GetCurrentHitPoints(oPC))
{
if (!GetIsResting(oPC))
{
if(!GetLocalInt(oPC,"Malediction"))
{
CreateObject(OBJECT_TYPE_CREATURE, "PUNISHER",GetLocation(oPC),FALSE);
SetLocalInt(oPC,"Malediction", TRUE);
DelayCommand(60.0, SetLocalInt(oPC,"Malediction", FALSE));
}
}
}
}
}


Je pense qu'avec ça c'est jouable d'utiliser le OnHeartBat : 2 affectations et entre 3 et 7 fonctions toutes les 6 secondes, ça ne tuera aucun ordinateur, même un vieux.:D

De plus je te signale qu'avec ta solution, la malédiction ne se déclenchait qu'une fois, et encore si le PC ne s'était pas reposé avant de se faire blesser !:cool:

Une petite erreur sur le CreateObject() également..

Par eMRaistlin le 1/11/2002 à 12:11:00 (#2454948)

euh, tu fais toujours tous les test d'une boucle depuis le partie la plus interieure... c'est pour ca que j'avais fini par le GetItemPossessedBy.


Pour le create... mea culpa ^^ et merci d'avoir corrigé

jedai explique moi ca :)

Par Blam le 1/11/2002 à 12:11:45 (#2454953)

voila, je suis (ben vi encore) un poil nul en scripts

le tag objet de la merde c'est ok c'est celui de l'objet

mais malediction est le tag de quoidequi ?

si PUNISHER est celui de la creature invoqué (c'est bien ca je met a la place de punisher le tag de la creature invoquée) ?


malédiction 'cest le tag de la localisation du possesseur de tagdelamerde ?

suis pas sur a 100%

merci d'avance.

Par eMRaistlin le 1/11/2002 à 12:37:40 (#2455100)

nan, malediction, c'est une variable locale, donc, pas besoin de s'en occuper.


Par contre, effectivement, PUNISHER, c'est le monstre a faire apparaitre... par contre, ce n'est pas le tag dont on a besoin pour punisher, mais son resref (car on ne le dira jamais assez, le Tag n'est reconnu que pour les objet deja present. Le createobject creant un objet nonpresent encore, il faut utiliser son bluprint RESREF, c'est a dire son "code barre" qui va permette de savoir comment creer l'objet, en faisant reference au patron present dans les palettes...)

c'est pas valorisant

Par Blam le 1/11/2002 à 14:14:23 (#2455684)

quand on vous parle comme a un demeuré ! (bouhhhh) :)

excellent et ca a le mérite que j'ai compris.......
merci et......encore merci.

en plus cela laisse entrevoir un espoir, celui que je comprenne un jour :)

Posez une question et ce forum vous y répondra !
c'est mon forum préféré (je l'ai déja dit ? )

Par Jedaï le 1/11/2002 à 14:19:59 (#2455720)

Je précise d'ailleurs qu'aussi bien moi que eMRaistlin avons intégré cette variable pour éviter que le PC soit submergé par des monstres apparraissant toutes les 6 secondes. Nouvelle version, plus claire et commentée :




void main()
{
object oItem = GetObjectByTag("TagDeLaMerde");//remplacer le tag par le tag de l'item maudit
object oPC;

if (GetIsPC(oPC = GetItemPossessor(oItem)))//verifie que l'item se trouve dans l'inventaire d'un PC
if (GetMaxHitPoints(oPC) > GetCurrentHitPoints(oPC))//que ce PC est blesse
if (!GetIsResting(oPC))//qu'il n'est pas en train de dormir
if(!GetLocalInt(oPC,"Malediction"))//et que la malediction n'a pas agi il y a moins d'une minute (tps reel)
{
//Cree le monstre, remplacer PUNISHER par le RESREF/BLUEPRINT du monstre
CreateObject(OBJECT_TYPE_CREATURE, "PUNISHER",GetLocation(oPC),FALSE);
//Empeche qu'un nouveau monstre soit recree
SetLocalInt(oPC,"Malediction", TRUE);
//Repermet la creation d'un monstre apres une minute
DelayCommand(60.0, SetLocalInt(oPC,"Malediction", FALSE));
}
}

ok

Par Blam le 4/11/2002 à 15:25:58 (#2477645)

mes remerciements a vous tous


ca marche

JOL Archives 1.0.1
@ JOL / JeuxOnLine