La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 21:28:01


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 14/09/2005 13:27:33 Sujet du message : Spawn de monstre à partir d'un objet

Alors voilà je cherche un script pour créer des monstres à partir d'un objet (plaçable, créatures...)
étant donné que je n'ai aucune connaissances en scripts il m'est difficile d'y arriver...
L'idée serait de faire en sorte que l'objet en question créer par exemple jusqu'a 5 monstres (sans trigger, le joueur n'a pas besoin d'être à côté) et dés qu'un ou plusieurs monstres sont détruit l'objet en recréer (il faudrait mettre un petit intervalle quand même entre les créations, qqch comme 20s). Pour supprimer les monstres il faudrait alors détruire l'objet créateur..
Je sais aps si c'est possible où s'il existe déja qqch de ce type sur le Vault, mais je savais pas trop sur quel critère rechercher... Confused
Merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Elandil2
Chevalier
Inscrit le: 14 Fév 2005
Messages: 97
Localisation: sur mon ordi loir-et-cher
Répondre en citant
Posté le : 15/09/2005 13:18:04 Sujet du message :

Le problème d'un telscript, c'est qu'il est sûrement a mettre dans le OnHertBeat ... donc demandeur de ressources ....
_________________
Rejoignez nous sur notre forum
Aelor, module en construction
Vive Gimli

 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 15/09/2005 14:11:39 Sujet du message :

Ça peut se faire sans être trop gourmand. Voici l'hypothèse et ce qui est nécessaire :

- L'objet génère X monstres de même type. Le tag de cet objet est "GENERATEUR_MONSTRES".
- Prévoir un monstre spécial dans la palette, avec un resref perso.
- Prévoir un Waypoint au point de spawn des monstres, dont le tag sera "WP_SPAWN_GOBS"
- Les monstres sont re - générés 20 secondes après que les X précédents aient été tués.

Il faut prévoir 2 scripts :

- OnHeartBeat de l'objet
- OnDeath des monstres

Et maintenant, les scripts en eux-mêmes :

--> OnDeath des monstres :

NWScript :
void main()
{
    object oItem = GetObjectByTag("GENERATEUR_MONSTRES");
    int nCompteur = GetLocalInt(oItem, "compteur_monstres");
    int nNb_Monstres = GetLocalInt(oItem, "nb_monstres");

    nCompteur++;
    SetLocalInt(oItem, "compteur_monstres", nCompteur);

    if(nCompteur == nNb_Monstres)
    {
        SetLocalInt(oItem, "spawn_actif", FALSE);
        SetLocalInt(oItem, "compteur_monstres", 0);
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



--> OnHeartBeat de l'objet :

NWScript :
void spawn_monstres()
{
    int i;
    int nNb_Monstres = GetLocalInt(OBJECT_SELF, "nb_monstres");
    string sResRef = "resref_du_monstre";

    for(i=0;i<nNb_Monstres;i++)
    CreateObject(OBJECT_TYPE_CREATURE, sResRef, GetLocation(GetWaypointByTag("WP_SPAWN_GOBS")));
}

void main()
{
    float fDelay = 20.0; // Delai, en secondes, avant respawn des monstres
    int nNb_Monstres = 5; // Nombre de monstres

    SetLocalInt(OBJECT_SELF, "nb_monstres", nNb_Monstres);

    if(GetLocalInt(OBJECT_SELF, "spawn_actif") == FALSE)
    {
        DelayCommand(fDelay, spawn_monstres());
        SetLocalInt(OBJECT_SELF, "spawn_actif", TRUE);
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Voilà, un truc dans le genre (j'ai pas testé, donc il est possible que ça ne fonctionne pas).
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 15/09/2005 20:02:39 Sujet du message :

Bon j'ai testé, ça marche Smile
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 17/09/2005 09:21:49 Sujet du message :

merci beaucoup ! Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 27/11/2005 00:15:04 Sujet du message :

j'ai récemment repris ce script, mais je voudrais qu'un petit effet d'invocation soit appliqué lors du spawn des monstres, dans un souci d'esthétisme...

NWScript :
void spawn_monstres()
{
    int i;
    int nNb_Monstres = GetLocalInt(OBJECT_SELF, "nb_monstres");
    string sResRef = "resref_du_monstre";

    for(i=0;i<nNb_Monstres;i++)
    CreateObject(OBJECT_TYPE_CREATURE, sResRef, GetLocation(GetWaypointByTag("WP_SPAWN_GOBS")));
}

void main()
{
    float fDelay = 20.0; // Delai, en secondes, avant respawn des monstres
    int nNb_Monstres = 5; // Nombre de monstres

    SetLocalInt(OBJECT_SELF, "nb_monstres", nNb_Monstres);

    if(GetLocalInt(OBJECT_SELF, "spawn_actif") == FALSE)
    {
        DelayCommand(fDelay, spawn_monstres());
        SetLocalInt(OBJECT_SELF, "spawn_actif", TRUE);
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Serait-ce possible de modifier ce script pour qu'un tel effet apparaisse ? je vous laisse faire ce que vous voulez, rien de trop compliqué non plus, 5 "ombres" (hostiles, naturellement) doivent apparaître dans une gerbe d'étincelle (si possible, rouge mais prenez les effets de sorts de base si c'est plus simple)
voilà (moi je sais là encore pas faire...)
_________________
A la recherche de gens...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 27/11/2005 21:15:34 Sujet du message :

Pour les effets visuels je sais pas, mais pour les intégristes de l'optimisation en ressource, j'ai une solution sans HeartBeat (un script de plus par contre)

OnSpawn du placeable

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Dans le UserDefined du placeable
NWScript :

void SpawnMonstre(location lLoc)
{
    string sResRef = "resrefcreature";
    object oMonstre = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLoc);
    SetLocalObject(oMonstre,"GENERATEUR",OBJECT_SELF);
}

void main()
{
    int nEvent = GetUserDefinedEventNumber();
    float fDelay = 20.0;
    location lPointSpawn = GetLocation(GetNearestObjectByTag("WP_SPAWN_GOBS"));
    if (nEvent==73212) //on spawn, je cree tous mes monstres
    {
        int nMaxMonstres = 5;
        float fDelay = 20.0;
        int i;
        for(i=0;i<nMaxMonstres;i++)
        {
            DelayCommand(fDelay+i/10,SpawnMonstre(lPointSpawn));
        }
    }
    if (nEvent == 73211) //un de mes petits est mort, j'en refais un
    {
    DelayCommand(fDelay,SpawnMonstre(lPointSpawn));

    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Dans le OnDeath des monstres
NWScript :

void main()
{
object oPapa = GetLocalObject(OBJECT_SELF,"GENERATEUR");
SignalEvent(oPapa,EventUserDefined(73211));

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


doit fournir le même résultat théoriquement.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 28/11/2005 18:19:04 Sujet du message :

Non car les plaçables n'ont pas de OnSpawn ^^ (mais il y a une multitude de possibilité de contourner le problème)
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 28/11/2005 19:54:27 Sujet du message :

et pr mon petit effet? Rolling Eyes
_________________
A la recherche de gens...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Yoyo
Seigneur
Inscrit le: 31 Aoû 2003
Messages: 223
Répondre en citant
Posté le : 29/11/2005 18:20:22 Sujet du message :

Pour le p'tit effet visuel rien de plus facile tu rajoute :

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


NWScript :

void spawn_monstres()
{
int i;
int nNb_Monstres = GetLocalInt(OBJECT_SELF, "nb_monstres");
string sResRef = "resref_du_monstre";

for(i=0;i<nNb_Monstres;i++)
CreateObject(OBJECT_TYPE_CREATURE, sResRef, GetLocation(GetWaypointByTag("WP_SPAWN_GOBS")));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_CE_QUE_TUVEUX), GetLocation(GetWaypointByTag("WP_SPAWN_GOBS")));
}

void main()
{
float fDelay = 20.0; // Delai, en secondes, avant respawn des monstres
int nNb_Monstres = 5; // Nombre de monstres

SetLocalInt(OBJECT_SELF, "nb_monstres", nNb_Monstres);

if(GetLocalInt(OBJECT_SELF, "spawn_actif") == FALSE)
{
DelayCommand(fDelay, spawn_monstres());
SetLocalInt(OBJECT_SELF, "spawn_actif", TRUE);
}
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


je suppose qu'il faut le mettre là mais apres...
Sinon tu peux mofifier les arguments du ApplyEffectToObject (la durée de l'effet (instant, temporary, permanent) et remplace VFX_CE_QUE_TUVEUX par l'effet que tu veux (VFX_FNF_FIREBALL...))
_________________
BOUH! (je vous ai fait peur ??) désolé

Vive moi
Pas vive Securom
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 30/11/2005 19:56:39 Sujet du message :

ok merci je vais essayer de personnaliser ça maintenant que je sais comment ça marche..
_________________
A la recherche de gens...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
nwar_dezir
Ecuyer
Inscrit le: 12 Aoû 2005
Messages: 61
Répondre en citant
Posté le : 30/11/2005 22:08:09 Sujet du message :

y veut pas compiler, y'a un bug qqpart, jtrouve pas...
(au niveau de la ligne rajoutée justement)
_________________
A la recherche de gens...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 01/12/2005 14:42:25 Sujet du message :

En fait il voulait dire ApplyEffectAtLocation() et pas ApplyEffectToObject(). Avec ces même paramètres ça marche.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Yoyo
Seigneur
Inscrit le: 31 Aoû 2003
Messages: 223
Répondre en citant
Posté le : 01/12/2005 16:09:31 Sujet du message :

A oui en effet j'ai confondu

Tu as 2 possibilités :

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


ou

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
BOUH! (je vous ai fait peur ??) désolé

Vive moi
Pas vive Securom
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 77.847ms