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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

multiple spawn quand objets requis dans inventaire PNJ

Par Frohnir le 28/11/2002 à 13:42:30 (#2663553)

Voilà, quelqu'un pourrait-il se pencher sur la question ?

J'aimerai que lorsqu'un PNJ X se retrouve avec 6 objets spécifiques dans son inventaire (objets recherchés, apportés et donnés par le PJ lors d'une quête), il se produise un spawn d'une dizaine de vilains pas bô à ses côtés, et que d'amical, le PNJ devienne hostile. C'est-y possib' ?

Si oui, l'un des pros du forum pourrait-il écrire ce script, (me l'expliquer, ça suffira pas, je suis encore beaucoup trop nul).

D'avance :merci:

Par eMRaistlin le 28/11/2002 à 14:30:55 (#2663954)

Quelques pistes, vu que j'ai pas le temps cet AM :

- pourquoi ne pas partir d'un dialogue qui affecte des variable a chaque fois que le PC vient lui donner un objet, et qui verifie ensuite la presence de tout ces dialogue ?


- Sinon, un script sur le OnDisturbed qui fasse une verification de l'inventaire du NPC. (On peut barter avec un NPC non marchand oO?)

Par coolstar le 28/11/2002 à 15:57:20 (#2664603)

Hi!


Un début de piste ? :D

/* By coolstar */
// Exemple à insérer là dans les "Conditions d'exécution".
int StartingConditional()
{
object oNpc = OBJECT_SELF;
string sItem = "object1";

// Vérifie si l'objet est présent dans l'inventaire du NPC.
return(GetItemPossessedBy(oNpc,sItem) != OBJECT_INVALID);
}

Sinon, je teste d'autres trucs là pour ton affaire, mais y'a des fois où je vois vraiment pas pourquoi ça coince ??? et pourtant ça compile !!! :confus:


Haa néobyte quand tu nous tiens... :mdr:


;)

Par Frohnir le 28/11/2002 à 22:43:57 (#2668086)

Je sais que je suis une grosse quiche aux burnes, mais là je pige pas trop, alors voici peut-être plus clairement ce que je souhaitais :

Le PJ va parler au PNJ (un balor) qui lui demande d'aller lui chercher des cristaux (it_cristal01 - 02 - 03). Si il refuse... baston.
Si il accepte (recommandé :D ) lorsqu'il revient avec les cailloux, le PNJ le récompense avec un peu d'XP et un joli canif. Tout ça je sais faire, ce que je sais pas c'est la suite. Une fois que le PNJ (le balor toujours) a les cailloux sur lui (faut cocher détruire ou garder au fait ? :confus: ) J'aimerais qu'il y ait un spawn de 5 à 7 de ses copains de l'enfer, et que la faction "démon" que j'ai créée passe d'amicale à hostile envers le PJ.

Je sais, ça à l'air gros bill vu comme ça, mais techniquement le PJ a entre temps pu recruté un mercenaire spécialisé dans l'éradication infernale et est censé possédé un objet le protégeant des bébêtes en question. Faut bien ça pour sauver Féérune non ? :ange:

C'est trop compliqué ou juste trop con...

Merci de m'avoir écouté. :merci:

Par eMRaistlin le 28/11/2002 à 23:23:12 (#2668337)

cocher détruire ou garder au fait ?


Faut cocher Garder, si tu veux que ca squatte son inventaire.

Moi, ce que je te propose, c'est un script sur le OnDisturbed, ce qui aura pour effet de faire un check au moment ou on prend ou rajoute qqchose dans son inventaire.

En gros :


void main()
{
string sItem = "it_cristal01";
string sItem2 = "it_cristal02";
string sItem3 = "it_cristal03";
object oPC = GetLastDisturbed();

object oCreature = OBJECT_SELF; //(j'aime pas garder OBJECT_SELF dans un script ^^)

if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem))) //VERIF SI A L'objet 1
{
if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem2))) //VERIF SI A L'objet 2
{
if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem3))) //VERIF SI A L'objet 3... la ca fait beaucoup.. alors il s'ennerve !
{
SetIsTemporaryEnemy(oPC,oCreature,FALSE);
CreateObject(OBJECT_TYPE_CREATURE,"resref1",GetLocation(GetWaypointByTag("WP1")));
CreateObject(OBJECT_TYPE_CREATURE,"resref2",GetLocation(GetWaypointByTag("WP2")));
CreateObject(OBJECT_TYPE_CREATURE,"resref3",GetLocation(GetWaypointByTag("WP3")));
CreateObject(OBJECT_TYPE_CREATURE,"resref4",GetLocation(GetWaypointByTag("WP4")));
}
}
}
}


Enfin, je verrait bien un truc du genre... a tester, of course ^^
[Edit = correction]

Par Frohnir le 29/11/2002 à 8:47:06 (#2669920)

Merci, :merci: m'en vais tester ça ce soir ! :)

Mais pourquoi sur le OnDisturbed ? vu que normalement le PNJ acquière les 3 objets suite à un string de conversation en fin de quête ? Ya pas moyen de le faire en instantané dans action conséquente ou un truc dans le genre à la fin du dialogue ?

Par eMRaistlin le 29/11/2002 à 9:22:15 (#2670040)

bein, euh... si, surement, mais tu m'avais pas dis que les 3 objet ne seraient recuperable qu'un par un. Du coup, je t'ai prevu un truc qui verifie au fur et a mesure qu'on lui donne des objets.

(a priori, on devrait pouvoir tout donner d'un coup sans pb ^^)

Par Frohnir le 30/11/2002 à 20:24:52 (#2681546)

Merci eMRaistlin pour tes efforts, mais le script ne compile pas...
(et même si ça fonctionne, je suis pas certain d'obtenir l'effet escompté...) mais merci quand même ! :)

Par eMRaistlin le 30/11/2002 à 21:25:55 (#2681852)

correction faites... toujours a tester ^^

Une alternative au problème...

Par coolstar le 1/12/2002 à 5:43:03 (#2683629)

Perso, j'ai essayé de produire le Script au plus près de l'idée, ce qui d'ailleurs me permet de m'entraîner avec plus de force et d'entrain (merci à tous les petits défis aux bonnes idées pleines de stimulants)... :D


Quoi qu'il en soit, le Script que je propose tient compte de ta demande apparente, sachant cependant que certaines contradictions se présentent (6 ou 3 objets ? 1 par 1 ou tous en même temps ?? Rose ou violet le pyjama du grand chef des vilains pas bô ??? et les vilains d'ailleurs, identiques ou différents... telles sont les questions...) :maboule:


Auparavant... Encore une chose à noter impérativement avec la mise en place du script...

1) Ne pas oublier de paramétrer la Faction du ou des Vilains pas bô spawnés, pour que tout puisse se passer comme prévu (indépendemment des Scripts)...

2) (sauf erreur) Sache que si on utilise là le Tag pour chaque Item, il en est autrement pour les Créatures qui auront besoin du ResRef...

3) Bon, on y va ou quoi ?!

//::///////////////////////////////////////////////
//:: multiple spawn quand objets requis dans inventaire PNJ
//:: FileName quete_foireuse.nss
//:://////////////////////////////////////////////
/*
By "Frohnir"
Voilà, quelqu'un pourrait-il se pencher sur la question ?
J'aimerai que lorsqu'un PNJ X se retrouve avec 6 objets
spécifiques dans son inventaire (objets recherchés,
apportés et donnés par le PJ lors d'une quête), il se
produise un spawn d'une dizaine de vilains pas bô à ses
côtés, et que d'amical, le PNJ devienne hostile.
C'est-y possib' ?
Si oui, l'un des pros du forum pourrait-il écrire ce
script, (me l'expliquer, ça suffira pas, je suis encore
beaucoup trop nul).
: merci : D'avance
*/
//:://////////////////////////////////////////////
//:: Created By: Docteur coolstar "Honorable canard"
//:: Created On: 01/12/2002 04:57:53
//:://////////////////////////////////////////////
#include "nw_i0_generic"

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

object oItem01 = GetItemPossessedBy(oPC,"item01");
object oItem02 = GetItemPossessedBy(oPC,"item02");
object oItem03 = GetItemPossessedBy(oPC,"item03");
object oItem04 = GetItemPossessedBy(oPC,"item04");
object oItem05 = GetItemPossessedBy(oPC,"item05");
object oItem06 = GetItemPossessedBy(oPC,"item06");

if(GetIsObjectValid(oItem01) && GetIsObjectValid(oItem02)&& GetIsObjectValid(oItem03)
&& GetIsObjectValid(oItem04) && GetIsObjectValid(oItem05) && GetIsObjectValid(oItem06))
{
// "J'aimerai que lorsqu'un PNJ X se retrouve avec 6 objets spécifiques dans son inventaire..."
DestroyObject(oItem01); DestroyObject(oItem02); DestroyObject(oItem03);
DestroyObject(oItem04); DestroyObject(oItem05); DestroyObject(oItem06);

// "... il se produise un spawn d'une dizaine de vilains pas bô à ses côtés..."
string sTemplate01 = "vilains01";
string sTemplate02 = "vilains02";
string sTemplate03 = "vilains03";
string sTemplate04 = "vilains04";
string sTemplate05 = "vilains05";
string sTemplate06 = "vilains06";
string sTemplate07 = "vilains07";
string sTemplate08 = "vilains08";
string sTemplate09 = "vilains09";
string sTemplate10 = "vilains10";
int nObjectType = OBJECT_TYPE_CREATURE;
location lLocation = GetLocation (OBJECT_SELF);

CreateObject(nObjectType, sTemplate01, lLocation, TRUE);
CreateObject(nObjectType, sTemplate02, lLocation, TRUE);
CreateObject(nObjectType, sTemplate03, lLocation, TRUE);
CreateObject(nObjectType, sTemplate04, lLocation, TRUE);
CreateObject(nObjectType, sTemplate05, lLocation, TRUE);
CreateObject(nObjectType, sTemplate06, lLocation, TRUE);
CreateObject(nObjectType, sTemplate07, lLocation, TRUE);
CreateObject(nObjectType, sTemplate08, lLocation, TRUE);
CreateObject(nObjectType, sTemplate09, lLocation, TRUE);
CreateObject(nObjectType, sTemplate10, lLocation, TRUE);

// "... et que d'amical, le PNJ devienne hostile."
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DetermineCombatRound(GetPCSpeaker());
SpeakString("Parfait, vous êtes un vrai crétin !");
}
}


Bon, voilà... et s'il y a des remarques... ben...


ENJOY! ;)

Par Frohnir le 2/12/2002 à 8:05:31 (#2690784)

A vue de nez et bien que n'y connaissant pas grand chose, cela me semble plutôt bien... vais tester les 2 ce soir !

Merci à eMRaistlin et coolstar, que ferait-on sans vous ?
(pas des modules pour NWN c'est sûr !)



:merci: :merci: :merci:

Par eMRaistlin le 2/12/2002 à 9:54:58 (#2691198)


Merci à eMRaistlin et coolstar, que ferait-on sans vous ?
(pas des modules pour NWN c'est sûr !)



:merci: :merci: :merci:

Tu spammerait la boite a MP de tynril ??


:mdr: :mdr: :mdr: :mdr:

non, de rien... et previens quand ton module est pret, que je teste ^^

Par coolstar le 2/12/2002 à 9:55:23 (#2691201)

:D

Tiens-nous au courant!! ;)

Par Frohnir le 2/12/2002 à 20:47:09 (#2696445)

Bon alors voici les résultats : :sanglote: :sanglote:

Pour le tien eMRaistlin, dans le OnDisturbed, rien ne se passe (mais ça compile ! :D )

Pour le tien coolstar, je l'ai mis dans action conséquente à la fin du dialogue de quête, et vu que ça ne fait rien, je suppose que c'est pas le bon endroit hein ? :confus:

Quoi qu'on fait ?

Par eMRaistlin le 2/12/2002 à 21:12:09 (#2696657)


void main()
{
string sItem = "it_cristal01";
string sItem2 = "it_cristal02";
string sItem3 = "it_cristal03";
object oPC = GetLastDisturbed();

object oCreature = OBJECT_SELF; //(j'aime pas garder OBJECT_SELF dans un script ^^)

if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem))) //VERIF SI A L'objet 1
{SpeakString("OBJET1CHecked Ok");
if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem2))) //VERIF SI A L'objet 2
{SpeakString("OBJET2CHecked Ok");
if (GetIsObjectValid(GetItemPossessedBy(oCreature,sItem3))) //VERIF SI A L'objet 3... la ca fait beaucoup.. alors il s'ennerve !
{SpeakString("OBJET3CHecked Ok");
SetIsTemporaryEnemy(oPC,oCreature,FALSE);
CreateObject(OBJECT_TYPE_CREATURE,"resref1",GetLocation(GetWaypointByTag("WP1")));
CreateObject(OBJECT_TYPE_CREATURE,"resref2",GetLocation(GetWaypointByTag("WP2")));
CreateObject(OBJECT_TYPE_CREATURE,"resref3",GetLocation(GetWaypointByTag("WP3")));
CreateObject(OBJECT_TYPE_CREATURE,"resref4",GetLocation(GetWaypointByTag("WP4")));
}
}
}
}


On essaye avec des string de debugs ^^

Par coolstar le 2/12/2002 à 21:24:42 (#2696777)

Heeuuu... pour ce qui concerne ma proposition de Script, c bien dans Actions conséquentes qu'il faut le mettre... Perso, j'ai testé et retesté et tout marche! regarde plutôt au niveau des Items (c là que ça devrait coincer...)... si t'as mis les Tags à la place des Refs (ou que tu t'es trompé sur au moins un Ref!) c normal que ça bloque... n'oublie pas que la condition doit être entièrement remplie pour que ça marche! :D

;)

Par Jedaï le 2/12/2002 à 21:34:55 (#2696874)

Et comme d'habitude je te conseillerai d'enlever les scripts de fin de conversation (dans l'onglet "Autres fichiers" de l'éditeur de conversation). C'est souvent là que ça coince ;) (même si ici ça doit pas être le principal problème).

Par coolstar le 2/12/2002 à 21:41:21 (#2696928)

Ca peut pas être ça le prob vu que j'ai scripté et testé dans les conditions normales d'exécution... :D

Par Jaha Effect le 2/12/2002 à 23:09:13 (#2697647)

Un petit module de DEMO basé sur le scripte de Coolstar avec une petite modification. Je remplace son système de respawn de créature par un encounter créé avec l'assistant et qui se déclenchera dans les même conditions :)

multispawn à l'aide du SetEncounterActive

Détail du scripte à placer dans l'action conséquente du dialogue:

// juste une petite modif du script de Coolstar
// pour un multispawn de creature grace au generateur de rencontre

#include "nw_i0_generic"

void main()
{
object oPC = GetPCSpeaker();
object oItem1 = GetItemPossessedBy(oPC,"Cristal1");
object oItem2 = GetItemPossessedBy(oPC,"Cristal2");
object oItem3 = GetItemPossessedBy(oPC,"Cristal3");
object oItem4 = GetItemPossessedBy(oPC,"Cristal4");
object oItem5 = GetItemPossessedBy(oPC,"Cristal5");
object oItem6 = GetItemPossessedBy(oPC,"Cristal6");

if(GetIsObjectValid(oItem1) && GetIsObjectValid(oItem2)&& GetIsObjectValid(oItem3)
&& GetIsObjectValid(oItem4) && GetIsObjectValid(oItem5) && GetIsObjectValid(oItem6))
{
DestroyObject(oItem1); DestroyObject(oItem2); DestroyObject(oItem3);
DestroyObject(oItem4); DestroyObject(oItem5); DestroyObject(oItem6);

SetEncounterActive(TRUE,GetObjectByTag("spawn")); // voila qui active la rencontre
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DetermineCombatRound(oPC);
SpeakString("Parfait, vous êtes un vrai crétin !");
}
}


Il ne reste qu'a définir correctement la rencontre avec l'assistant.
définir la zone de spawn des mobs en n'oubliant pas que le pj doit être dedans pour la déclencher :)
Il suffit de mettre le niveau de difficulté, le type de monstre, le nombre de monstres maxi et mini, et dans les propriété avancé mettre la rencontre inactive.
Vous allez me dire c'est beaucoup de réglage pour un truc qui peux être réglé très vite avec un scripte à base de CreateObject ... et là je dis faux.
Car la difficulté de la rencontre est réglable et gère le type de monstre en fonction du level du PJ ce que ne fait pas un CreateObject :D

Jaha Effect :D

Par coolstar le 2/12/2002 à 23:13:26 (#2697681)

[IncrustEffect]Jaha![/IncrustEffect] :merci:

:D

Par Jaha Effect le 2/12/2002 à 23:21:44 (#2697746)

Les Encounter c'est bon mangez en !!!
Sérieusement, je trouve cette assistant excellent et ça me désole de voir que personne l'utilise jamais voir très peu sur ce forum et dans pas mal de modules.
Pourtant une rencontre correctement gérée évite très souvent des modules complètement déséquilibré par rapport au level des joueurs.
Alors vous allez en bouffer jusqu'à ce que vous aillez compris.

Jaha Effect :D

JOL Archives 1.0.1
@ JOL / JeuxOnLine