JeuxOnLineForumsPlusConnectés : 195 (sites) | 494 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > A boire et a manger ! RSS
   
Répondre
Partager Outils Rechercher
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
Talking

A boire et a manger !

Bon ... voilà mon problème ;
Etant quiche en scriptage,j'ai repris tant bien que mal un script assez simple recréant la faim et la soif et y est fait quelques modifs simples mais le problème est que les objets (fiole d'eau avec le tag "DR" et la nourriture "FD" sont utilisés mais ne remettent pas la variable de la faim/soif à 0...ainsi le personnage continue de souffrir pour rien

Merci à toi Templier d'avoir remi mon script entres des balises php (pour les scripts voir le post de Templier en-dessous! )
Pour les objets ils ont la proprièté de pouvoir unique utilisable sur soi.(qu'est-ce qui est le mieux d'ailleur?utilisable sur soi ou utilisable tout court?).

Je suppose que ce genre de chose va être règler en 5 secondes pour les fins scripteurs que vous êtes mais pour moi c'est un peu du charabia,meme si j'arrive à "lire" un peu le script correctement,l'utilisation et la mise en forme de ligne de script reste encore assez obscure pour moi.

Merci de votre aide !
Note pour Skanzo : Merci! c'est dur mais j'essai de soign"é" celà pour les scripts.Merci pour l'astuce des éèàäÂ...

*Se met à courir très vite envoyant les services de l'hospital psychatrique arriver rapidement !!! *
Lien direct vers le message - Vieux
Avatar de Templier
Templier
Roi
 
Avatar de Templier
 
Re: A boire et a manger !
Citation:
Provient du message de Draconyss

Voici les scripts :

D'abord dans le OnActivedItem de mon module :

Code PHP:
void main()
{
    
object oItem GetItemActivated();
    
object oTarget GetItemActivatedTarget();
    if(
GetTag(oItem) == "DR"//put a drink's tag here
    
{
        
SendMessageToPC(oTarget"Vous buvez un peu.");
        
SetLoçalInt(oTarget"Thirsty",0); //C'est là ou le bas blesse !!!
        //effect eEffect = (Whatever you want to happen);
        //ApplyEffectToObject(DURATION_TYPE_*, eEffect, oTarget);
    
}
    if(
GetTag(oItem) == "_FD"//put the food's tag here
    
{
        
SendMessageToPC(oTarget"Vous mangez un peu.");
        
//Use the two lines below this to do a single effect. Use the 5th line down and below to have a 50% chance of doing an effect.
        //effect eEffect = (Whatever you want to happen);
        //ApplyEffectToObject(DURATION_TYPE_*, eEffect, oTarget);
        //uncomment the lines below to have a 50% chance of doing an effect.
        //int iRand = Random(2);
        //if(iRand == 0)
        //{
            //effect eEffect = (Whatever you want to happen);
            //ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget);
            //Enter a message to say what the effect was if you want.
            //SendMessageToPC(oTarget, "this did happen.");
            //SetLocalInt(oTarget, "Hungry", 0);
        //}
        //if(iRand = 1)
        //{
            //SendMessageToPC(oTarget, "this didn't happen.");
            //SetLocalInt(oTarget, "Hungry", 0); //Meme probleme
        //}
    
}


Puis dans le OnHeartbeat de la zone du module :

Code PHP:
void main()
{
   
object oPC GetFirstPC();
   
int iVar GetLocalInt(oPC"Hungry");
   while(
GetIsObjectValid(oPC))
   {
      if(
iVar 480)
      {
         
effect eEff GetFirstEffect(oPC);
         while(
GetIsEffectValid(eEff))
         {
            
RemoveEffect(oPCeEff);
            
eEff GetNextEffect(oPC);
         }
         
SetLocalInt(oPC"Hungry"iVar 1);
      }
      else if(
iVar == 480)
      {
         
SetLocalInt(oPC"Hungry"iVar 1);
         
SendMessageToPC(oPC"Vous avez faim.");
      }
       else if(
iVar == 480)
      {
         
SetLocalInt(oPC"Hungry"iVar 1);
         
SendMessageToPC(oPC"Vous avez TRES faim.");
         
effect eDamage EffectAbilityDecrease(ABILITY_CONSTITUTION1);
         
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
      }
      else if(
iVar 480)
      {
         
SetLocalInt(oPC"Hungry"iVar 1);
         
SendMessageToPC(oPC"Vous etes affame.");
         
effect eDamage EffectDamage(1DAMAGE_TYPE_MAGICALDAMAGE_POWER_PLUS_FIVE);
         
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
      }
      
int iDrink GetLocalInt(oPC"Thirsty");
      if(
iVar 20)
      {
         
effect eEff GetFirstEffect(oPC);
         while(
GetIsEffectValid(eEff))
         {
            
RemoveEffect(oPCeEff);
            
eEff GetNextEffect(oPC);
         }
         
SetLocalInt(oPC"Thirsty"iDrink 1);
      }
      else if(
iVar == 40)
      {
         
SetLocalInt(oPC"Thirsty"iDrink 1);
         
SendMessageToPC(oPC"Vous avez soif");
      }
      else if(
iVar == 60)
      {
         
SetLocalInt(oPC"Thirsty"iDrink 1);
         
SendMessageToPC(oPC"Vous avez TRES soif");
          
effect eDamage EffectAbilityDecrease(ABILITY_STRENGTH1);
               
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
      }
      else if(
iVar == 80)
      {
         
SetLocalInt(oPC"Thirsty"iDrink 1);
         
SendMessageToPC(oPC"Vous avez la gorge seche");
          
effect eDamage EffectAbilityDecrease(ABILITY_DEXTERITY1);
               
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
      }
      else if(
iVar == 120)
      {
         
SetLocalInt(oPC"Thirsty"iDrink 1);
         
SendMessageToPC(oPC"Vous etes deshydrate");
          
effect eDamage EffectSlow();
               
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
      }
      else if(
iVar 120)
      {
         
SetLocalInt(oPC"Thirsty"iDrink 1);
         
SendMessageToPC(oPC"Vous mourrez de soif!");
         
int iDice d2(1);
         switch(
iDice)
         {
            case 
1:
            {
               
effect eDamage EffectDamage(1DAMAGE_TYPE_MAGICALDAMAGE_POWER_PLUS_FIVE);
         
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
               break;
            }
            case 
2:
            {
               
effect eDamage EffectDamage(1DAMAGE_TYPE_MAGICALDAMAGE_POWER_PLUS_FIVE);
         
ApplyEffectToObject(DURATION_TYPE_INSTANTeDamageoPC);
               break; 
//idem ici je ne sait pas comment faire pour ne plus avoir qu'un seul effet puisque ce sont les memes
            
}
         }
      }
      
oPC GetNextPC();
   }



Je me suis permis de remettre tes scripts dans des balises PHP afin que les scripteurs de JOL puissent mieux t'aider et mieux visualiser le problème.

Enfin j'espère que ca sera utile, mais d'habitude c'est ce qu'il demande toujours. De mon cotés je ne pourrais pas t'aider plus n'étant pas moi même Scripteur.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
object oTarget = GetItemActivatedTarget();

J'aurais plutôt mis:

object oTarget = GetItemActivator();

Mais bon ça dépend si l'item a un pouvoir unique simple ou un pouvoir unique sur soi-même. Perso je vois pô trop l'interet de devoir choisir une cible, on ne force pô les gens à manger et boire en général.
En tout cas, je pense qu'il est possible de faire mieux comme script de faim paske ya pô mal de choses pô très logique mais ça peut s'arranger

Petite astuce, tu peut taper les lettres avec accent dans Wordpad pour ensuite les copier coller dans aurora, ça te permettra de transformer "Vous etes affame" par "Vous êtes affamé"
Lien direct vers le message - Vieux
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
Note: Pour les remerciements c'est plus haut ! ()
Je voulait savoir si il n'y avait pas plus simple et plus efficace.Tout en reprenant un peu la chronologie et l'esprit des scripts plus haut.Mon but est de faire un système qui change selon l'environnement (Beaucoup plus soif dans le désert qu'en campagne etc...)Cà fonctionnait bien dans le Heartbeat de la zone mais le système de remise à zéro semble déconné et je n'ai pas assez de connaissances pour pouvoir y remèdier.

Help! *Gloup gloup gloup !*
Lien direct vers le message - Vieux
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
--- Oupss! Désolé Raistlin ---
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
Citation:
Provient du message de Skanzo Sylan

Petite astuce, tu peut taper les lettres avec accent dans Wordpad pour ensuite les copier coller dans aurora, ça te permettra de transformer "Vous etes affame" par "Vous êtes affamé"
ou alors ds le champ de filtre des fonction/constante/etc.
les accents rentre là (moi je trouve ca idiot, pk là et pas là fin bon )
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Citation:
ou alors ds le champ de filtre des fonction/constante/etc
En effet, c'est très bête, tellement que je m'en suis jamais rendu compte
Merci
Lien direct vers le message - Vieux
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
Unhappy
Heu...je voudrais pas dire mais il me semble que vous avez oubliez les raisons de ce post ... à savoir le script et pourquoi il fonctionne si mal.



[Edit] : Si vous pensez que ce script est trop pourrave et que vous en possèdez un autre du même genre mais beaucoup plus fonctionnel et complet,je suis prenneur!
__________________
----------------------------------------------
A méditer : "Si ça saigne, ça peut mourir! Et quand ça saigne pas, on le fait quand même saigner. A partir de là, ça peut mourir!"
----------------------------------------------
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
alors, pas de cédille dans un nom de fonction
regarde le 'SetLocalInt( . . ., "thirsty)" du premier script
et ensuite quand tu mange de toute facon ca fait rien, tt est commenté
donc :
Code PHP:
void main()
{
    
object oItem GetItemActivated();
    
object oTarget GetItemActivatedTarget();
    if(
GetTag(oItem) == "DR"//put a drink's tag here
    
{
        
SendMessageToPC(oTarget"Vous buvez un peu.");
        
SetLocalInt(oTarget"Thirsty",0); //C'est là ou le bas blesse !!!
        //effect eEffect = (Whatever you want to happen);
        //ApplyEffectToObject(DURATION_TYPE_*, eEffect, oTarget);
    
}
    if(
GetTag(oItem) == "_FD"//put the food's tag here
    
{
        
SendMessageToPC(oTarget"Vous mangez un peu.");
        
//Use the two lines below this to do a single effect. Use the 5th line down and below to have a 50% chance of doing an effect.
        //effect eEffect = (Whatever you want to happen);
        //ApplyEffectToObject(DURATION_TYPE_*, eEffect, oTarget);
        //uncomment the lines below to have a 50% chance of doing an effect.
        //int iRand = Random(2);
        //if(iRand == 0)
        //{
            //effect eEffect = (Whatever you want to happen);
            //ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget);
            //Enter a message to say what the effect was if you want.
            //SendMessageToPC(oTarget, "this did happen.");
            //SetLocalInt(oTarget, "Hungry", 0);
        //}
        //if(iRand = 1)
        //{
            //SendMessageToPC(oTarget, "this didn't happen.");
            
SetLocalInt(oTarget"Hungry"0); //Meme probleme
        //}
    
}


euh, pourquoi y un test bizarre qd on mange ?
si 1 => remise à zéro
si 0 => remise à zéro

g rien testé hein, donc c p-e pas ca
Lien direct vers le message - Vieux
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
G modifié le script comme tu me l'as indiquer et corriger (Le plus bizarre est que je n'avait pas de ç dans le code original ).Cepedant force est de constaté que cela ne fonctionne toujours pas

Quand au test bizarre lorsque tu manges je ne sait pas non plus ce qu'il fait là...

Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Personellement, je serais pour un contrôle faim/soif par un pseudo-OHB sur les joueurs selon ma méthode classique du DelayCommand( ExecuteScript ) mais avec un délai stocké dans une variable sur le joueur, ce qui permettrait d'accélérer/ralentir le processus si nécessaire (dans ce cas on séparerait la faim et la soif, on n'a pas forcément plus faim dans le désert, de toutes façons, je pense que la faim pourrait avoir une périodicité bien plus grande, on peut avoir faim beaucoup plus longtemps que soif sans trop d'effets).
Ensuite les nourritures/boissons agiraient directement sur les compteurs de faim/soif en leur soustrayant une certaine valeur (les remettre à 0 ne me semble pas réaliste) avec un test pour éviter une valeur négative (peut-être des effets négatifs pour les joueurs trop gloutons si on est vraiment sadique ).

Tout cela me semble raisonnablement facile à mettre en place, qu'en pensez vous ?
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
ba, j'y avais pensé quand j'ai lu le sujet, parce que ca me rappelais le truc du sommeil (si si c'est vrai )
mais je me suis dit que là les delais étant plus court, le ohb étais peut être mieux, mais c'est sure que pour un truc aussi précis et complet que ce que tu demande c'est bien mieux
C'est toi qui t'y colle ?
Lien direct vers le message - Vieux
Avatar de MaJo
MaJo
Empereur
 
Avatar de MaJo
 
Y à klk'un pour m'aider?Jedaï Reyan ???
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Ben on va faire ça petit à petit

J'ai pour habitude de ne pô donner le même tag à tous mes items donc pour la boisson:
DR_milk
DR_bier
DR_wine
DR_water
etc...

La bouffe:
FD_poulet
FD_gigot
FD_fish
FD_jedai
FD_soupe
etc...

Dans ton script tu récupère juste la partie qui t'intéresse, les deux premieres lettres, DR_milk.
Code PHP:
string sItemTag GetStringLeftGetTagoItem), 2); 
Et comme dans les scripts précédents, on teste:
Code PHP:
if (sItemTag == "DR") {
   
//boisson
   

Code PHP:
if (sItemTag == "FD") {
   
//bouffe
   

Voilà déjà une bonne façon de commencer et poser nos bases
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Hé !!! Le Jedai n'est pas comestible !!!!

Au secours !


Sinon, voici au moins les pseudo-OHB pour la faim et la soif :
Code PHP:
//sauvegarder ce script sous le nom de "ohb_faim"

void main() {
    
    {
        
//variables pour définir les différents degré de faim
        
int FAIBLESSE 15;
        
int ANEMIE 25;
        
int FAMINE 40;
        
int STARVED 90;
        
        
//on récupère la valeur actuelle de la faim
        
object oSelf OBJECT_SELF;
        
int nFaim GetLocalIntoSelf"nFaim" );
        
        
//On incrémente la faim d'une unité
        
SetLocalIntoSelf"nFaim"nFaim );
        
        
//On récupère la durée actuelle des effets
        
float fDelay GetLocalFloatoSelf"fDelay_Faim" );
        
        if( 
nFaim >= STARVED ) {
            
SendMessageToPCoSelf"Vous êtes mort de faim, désolé..." );
            
ApplyEffectToObjectDURATION_TYPE_INSTANTExtraordinaryEffectEffectDeath() ), oSelf );
        }
        else if( 
nFaim >= FAMINE ) {
            
SendMessageToPCoSelf"La faim vous torture à un tel point que vous ne " +
                                    
"parvenez plus à penser clairement, vos forces vous fuient !");
            
effect eFamine ExtraordinaryEffectEffectCurse42640) );
            
ApplyEffectToObjectDURATION_TYPE_TEMPORARYeFamineoSelffDelay );
        }
        else if( 
nFaim >= ANEMIE ) {
            
//blabla, effect eAnemie, blabla
        
}
        
//je crois que vous m'avez compris, de toutes façon, ça n'est qu'un exemple
        //chacun fera à sa sauce
        
    
}
    
    
//répéter le script à intervalle défini par la variable "fDelay_Faim"
    
DelayCommand
                  
GetLocalFloatOBJECT_SELF"fDelay_Faim" ),
                  
ExecuteScript"ohb_faim"OBJECT_SELF )
                );
    

Pour la soif :
Code PHP:
//Veuillez remplacer "Faim" par "Soif" dans le script précédent, 
//vous pouvez aussi changer le nom des degré de soif parce que 
//"FAMINE" pour un degré de soif ça fait pas sérieux. 
Voilà, reste à décider des intervalles entre les exécutions de ces scripts et de l'"efficacité" des diverses boissons et nourritures.
De plus, il faut bien sûr initialiser tous ces scripts dans le OnClientEnter. se demander aussi si la mort met fin à ces basses contingences matérielles ou non, etc...

Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > A boire et a manger !
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 05h21.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite