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 20:48:41


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 01/02/2007 20:22:34 Sujet du message : Allumer plusieurs braseros à l'aide d'un bouton

Bonjour a tous d'abord ^^
Ensuite je vous explique mon probleme, j'ai sur mon serveur un theatre, j'aimerai pouvoir a l'aide d'un dialogue sur une statue derriere la scene allumer ou eteindre tous les brasero de la salle.

NWScript :
void main()
{

    if (GetLocalInt(OBJECT_SELF,"NW_L_AMION") == 0)
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
        //DelayCommand(0.4,SetPlaceabl eIllumination(oSelf, TRUE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",1);
        //DelayCommand(0.5,RecomputeSt aticLighting(GetArea(oSelf)));
        effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_20);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oSelf);
    }
    else
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
        //DelayCommand(0.4,SetPlaceabl eIllumination(oSelf, FALSE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",0);
        //DelayCommand(0.9,RecomputeSt aticLighting(GetArea(oSelf)));
        effect eEffect = GetFirstEffect(oSelf);
        while (GetIsEffectValid(eEffect) == TRUE)
        {
            if (GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT)
                RemoveEffect(oSelf, eEffect);
            eEffect = GetNextEffect(oSelf);
        }

    }
}
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.

Voici le code d'un brasero de base, en l'utilisant il s'allume et s'eteint, j'ai donc penser me servir de ca.

En gros :

Une statue avec dialogue :

-Que souhaitez vous faire ? ?
Allumer (tous les brasero s'allume)
Eteindre (tous les brasero s'eteigne)

10 brasero allumer de base

Merci d'avance de votre aide Razz
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 02/02/2007 11:41:04 Sujet du message :

Un ptit up pour amener un script que j'ai tester sans succes, il compile mais ne marche pas, une idée ?
C'est le script de base on off du brasero avec des modif.

NWScript :
void main()
{
object oPC = GetPCSpeaker();
object oTarget;
oTarget = GetObjectByTag("brasero"); //le tag de la porte

    if (GetLocalInt(OBJECT_SELF,"NW_L_AMION") == 0)
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
        //DelayCommand(0.4,SetPlaceabl eIllumination(oSelf, TRUE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",1);
        //DelayCommand(0.5,RecomputeSt aticLighting(GetArea(oSelf)));
        effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_20);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oSelf);
    }
    else
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
        //DelayCommand(0.4,SetPlaceabl eIllumination(oSelf, FALSE));
        SetLocalInt(OBJECT_SELF,"NW_L_AMION",0);
        //DelayCommand(0.9,RecomputeSt aticLighting(GetArea(oSelf)));
        effect eEffect = GetFirstEffect(oSelf);
        while (GetIsEffectValid(eEffect) == TRUE)
        {
            if (GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT)
                RemoveEffect(oSelf, eEffect);
            eEffect = GetNextEffect(oSelf);
        }

    }
}
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.

_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 02/02/2007 13:37:09 Sujet du message :

Eh bien si tu inclus ce script dans une boucle sur les objets de la zone, ça devrait fonctionner. Renomme tous les tags de tes braséros en un tag unique, par exemple "BRASERO_ONOFF", et ça donnerait quelque chose dans ce genre-là :

NWScript :
void main()
{
  object oPlacable = GetFirstObjectInArea();
  while(GetIsObjectValid(oPlacable))
  {
    if(GetTag(oPlacable) == "BRASERO_ONOFF")
    {
      if(GetLocalInt(oPlacable,"NW_L_AMION") == 0)
      {
        PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);

        SetLocalInt(oPlacable,"NW_L_AMION",1);

        effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_20);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oPlacable);
      }
      else
      {
        PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

        SetLocalInt(oPlacable,"NW_L_AMION",0);

        effect eEffect = GetFirstEffect(oPlacable);
        while (GetIsEffectValid(eEffect) == TRUE)
        {
          if(GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT)
           RemoveEffect(oPlacable, eEffect);

          eEffect = GetNextEffect(oPlacable);
        }
      }
    }

    oPlacable = GetNextObjectInArea();
  }
}
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à, de mémoire et non testé, mais sur le principe c'est ça Smile

Tu pourrais améliorer un peu en utilisant un compteur : comme c'est un script assez gourmand en ressources, si tu sais combien tu as de braseros dans ta zone, tu ajoutes un compteur après le GetNextObjectInArea() qui s'incrémente à chaque boucle. Et si ton compteur atteint le nombre de braséros présents dans ta zone, tu stoppes la boucles pour éviter que le script continue inutilement.

C'est surtout utile si tu as beaucoup beaucoup de plaçables dans ta zone.
_________________
» 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
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 02/02/2007 14:28:38 Sujet du message :

J'ai testé, mais malheuresement, aucun resultat.
(J'ai mis BRASERO_ONOFF comme tag de tous mes brasero)
C'est con parce que je vois pas d'ou ca peux venir
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 03/02/2007 03:52:38 Sujet du message :

question tout bête (tappez pas j'ai pas eut le coeur de tout lire) mais....est-ce que tes placeables sont statiques??? si oui te demande plus pourquoi^^
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 03/02/2007 10:46:19 Sujet du message :

Non bien sur ils ne sont pas statiques Laughing
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 03/02/2007 14:08:13 Sujet du message :

Eh bien si ça ne marche pas, faut trouver d'où vient le problème et corriger, ça te tombera pas tout cuit dans le bec Cool

Essaye déjà de savoir à quel moment du script (boucle, condition, etc.) le script ne fonctionne pas. En utilisant la fonction SendMessageToPC() par exemple, tu peux avoir des indications, comme ceci :


NWScript :
void main()
{
  object oPlacable = GetFirstObjectInArea();
  object oPC = GetFirstPC();
  while(GetIsObjectValid(oPlacable))
  {
    SendMessageToPC(oPC, "Phase 1"); //...

    if(GetTag(oPlacable) == "BRASERO_ONOFF")
    {
      SendMessageToPC(oPC, "Phase 2"); //...

      if(GetLocalInt(oPlacable,"NW_L_AMION") == 0)
      {
        SendMessageToPC(oPC, "Phase 2 ON"); //...

        PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);

        SetLocalInt(oPlacable,"NW_L_AMION",1);

        effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_20);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oPlacable);
      }
      else
      {
        SendMessageToPC(oPC, "Phase 2 OFF"); //...

        PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);

        SetLocalInt(oPlacable,"NW_L_AMION",0);

        effect eEffect = GetFirstEffect(oPlacable);
        while (GetIsEffectValid(eEffect) == TRUE)
        {
          SendMessageToPC(oPC, "Phase 2 OFF effet"); //...

          if(GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT)
          RemoveEffect(oPlacable, eEffect);

          eEffect = GetNextEffect(oPlacable);
        }
      }
    }

    oPlacable = GetNextObjectInArea();
  }
}
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à, comme ça tu lances ton script dans une zone avec juste 2 ou 3 braséros pour éviter d'avoir une cascade de messages, tu regardes les messages que tu obtiens, et tu sais quelles parties du script se sont bien exécutées, et tu corriges en fonction.
_________________
» 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
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 03/02/2007 18:02:32 Sujet du message :

ah bien tients dont!!! voila un truc intelligent pour savoir où notre script foire!!! merci à toi finipe^^ Je vais m'en servir très souvent de ce truc je le sens!
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 04/02/2007 11:18:47 Sujet du message :

Je test et je vous tiens au courant Smile
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
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 55.186ms