A boire et a manger !

Répondre
Partager Rechercher
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 !!! *
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.
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é"
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 !*
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 )
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!"
----------------------------------------------
http://forums.jeuxonline.info/picture.php?albumid=445&pictureid=3404
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
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à...

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

Citation :
Hé !!! Le Jedai n'est pas comestible !!!!

Me demandais si tu le remarquerais


Pour la suite du onactivate.
On ajoute aux différents aliments et boissons leur efficacité respective comme le propose Jedaï. On va donc directement mettre les valeurs dans le tag, plus précisément en fin de TAG

Exemple (bête):
DR_milk_50
DR_water_70
DR_bier_00

On va faire en sorte que 00 corresponde à 100, le genre de truc qui réveille un mort

on récupére la valeur:
Code PHP:

int nBonus StringToIntGetStringRightGetTagoItem), 2)); 

Cette définition pourra servir aussi bien pour la bouffe que la picol... heu la boisson

Ça nous donne un truc comme ça:
Code PHP:

void main()
{
    
object oItem GetItemActivated();
    
object oTarget GetItemActivator();
    
string sItemTag GetStringLeftGetTagoItem), 2);
    
int nFaimnSoif;
    
int nBonus StringToIntGetStringRightGetTagoItem), 2));

    if (
nBonus == 0nBonus 100;

    if (
sItemTag == "FD")
    {
        
nFaim GetLocalIntoTarget"nFaim") - nBonus;
        if (
nFaim 0nFaim 0;
        
SendMessageToPCoTarget"Vous mangez un peu.");
        
SetLocalIntoTarget"nFaim"nFaim);
        
// Effet, PlayAnimation, tout le tralala
    
}

    if (
sItemTag == "DR")
    {
        
nSoif GetLocalIntoTarget"nSoif") - nBonus;
        if (
nSoif 0nSoif =0;
        
SendMessageToPC(oTarget"Vous buvez un peu.");
        
SetLocalIntoTarget"nSoif"nSoif);
        
// Effet, PlayAnimation, tout le tralala
    
}

Je pense que ça devrait fonctionner avec ce qu'à fait Jedaï
Heu... bon ! y des trucs que je comprend facilement,je suis aisément le cheminement de vos scripts,mais y à des trucs (encore eux! ) que je ne sait pas ou intégré dans les scripts initiaux,ou alors c'est moi qui me plante et il faut retapé tout...pourrais-tu me dire ou je met cela skanzo s'il-te-plaît pour les bases et les tests? il faut recréer un nouveau script ou faire des modifs dans le script onheartbeat?
Je commence à comprendre la logique des scripts mais reste tout-de-même une quiche! S'il-vous-plaît dites moi à quoi ressembles les scripts au final,ou les mettres exactement et comment.(Note:il serai très intéressant par la suite de l'intégré à la base de scripts du forum vu comment il ont l'air bien faits!).

Merci franchement de votre aide précieuse les gars

Note sup:Bon...commentchange-t'on la FAMINE pour la soif dans le script ohb_soif?
J'ai déjà créer les 2 scripts ohb et pris ton script skanzo pour le onactivate mais ne sait toujours pas comment et ou mettre les bases avec les tests...
Bon, pour initialiser tout ça, il faut en fait rajouter quelques lignes sur le OnClientEnter :

Code PHP:

//ton OnClientEnter :

void main() {

    
object oPC GetEnteringObject();
    
    if( 
GetIsPCoPC ) ) {
        
        
//réglage du délai d'augmentation de la faim, ici une
        //unité en 1/2 heure
        
SetLocalFloatoPC"fDelay_Faim"HoursToSeconds) / 2.0 );
        
        
//idem pour la soif, ici 1/6 d'heure
        
SetLocalFloatoPC"fDelay_Soif"HoursToSeconds) / 6.0 );
        
        
//amorçage des deux scripts :
        
ExecuteScript"ohb_faim"oPC );
        
ExecuteScript"ohb_soif"oPC );
        
    }
    
    
//le code qui était déjà dans ton main() avant
    //fais quand même attention à ne pas redéclarer oPC
    

Pour les variables du type FAMINE, ou ASSOIFFE, elles n'ont en réalité aucune importance, à part rajouter de la lisibilité au script, ce sont juste les valeurs en unité de faim/soif à partir desquelles tu appliques certains effets, tu pourrais mettre directement les valeurs dans les test, mais ça serait moins lisible.

La structure des if/else if c'est :
Code PHP:

if( nSoif >= PIRE_ETAT_DE_SOIF ) {
    
//effets à appliquer dans ce cas
}
else if( 
nSoif >= UN_PEU_MOINS_PIRE ){
    
//effets à appliquer dans ce cas
}
else if( 
nSoif >= PRESQUE_SUPPORTABLE ){
    
//....
}
//....autant de cas que tu veux 
Tu vois le topo ?

Evidemment fait à ta sauce, modifie les délais, les états possibles, les effets, etc... Après c'est toi qui décide, après tout c'est ton monde ! Mordiou !
Ca fonctionne pas et je ne comprend pas pourquoi (j'ai tout créer dans un module vierge,donc pas de délire)...

Skanzo ou Jedaï,si vous pouviez m'envoyer un module test fonctionnant via mail ce serai parfait!...

Si klk'un d'autre a repérer un bug dans tout celà merci de nous faire signe.

Note:Jedaï je t'ai envoyé un message perso et tu n'y à pas répondu.

Lau3@wanadoo.fr

Merci
Exclamation
Y a quelqu'un ? par ce que je n'ai toujours pas eut de scripts qui fonctionnent vraiment pour mon problème...

En ait besoin désespérément!!!

Draconyss
Peux-tu nous mettre tes scripts de faim et de soif ici : ce sont eux qui déterminent les effets en cas de faim/soif.
Désolé mais je pensais que répondre à tes PMs sur le forum était préférable.
De toutes façons, actuellement je ne suis pas chez moi, et je ne vais pas pouvoir faire grand chose....
EDIT: J'ai trouvé
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés