La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 14:26:33


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 09/04/2005 00:43:16 Sujet du message : Optimisation d'un script de garde

Bonjour,
Le sujet concernant le script de sommation de déposer les armes a déjà était posté, mais à chaque fois le script proposé faisait intervenir l'événement OnHearbeat ( ce que je souhaite éviter Wink )
j'ai donc opté pour la solution qui fait intervenir OnPerception : mais à vrai dire le résultat est plutôt décevant. Très souvent en me pointant avec une arme sous le nez du garde, celui-ci ne bouge pas d'un poil! Je voudrais savoir s'il y avait un moyen d'optimiser le OnPerception du garde pour remèdier à ce problème ?

Merci pour votre aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 09/04/2005 09:59:51 Sujet du message :

Le soucis du on perception, il se déclenche pas si souvent que le onheartbeat, en fait une fois que t'es detecté il se déclenche plus, ou alors longtemps après.Du coup si tu te ramenes devant ton garde sans arme, qu'ensuite tu sors une arme, il va probablement pas réagir.

Enfin, je dis peut-être des bétises mais j'ai ce genre de problème avec un autre PNJ et un script dans onperception.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 09/04/2005 10:59:11 Sujet du message :

Tout bien réfléchit, le nombre de gardes n'étant pas trop élevé, je vais opter pour le OnHeartbeat (c'est plus réaliste). En revanche je souhaite faire mon propre script, ce que j'ai fait Smile
Mais j'ai maintenant plusieurs problèmes :

1) Le garde stop sa ronde toujours au même endroit et s'équipe d'une torche.
2) La perception (et donc la sommation de déposer les armes ne marche pas du tout.
Si vous pourriez m'indiquer où sa cloche, parce que là je vois pas !

Voici le script que j'utilise (mince les "&" sont remplacés par des "&amp" Confused):
NWScript :
#include "NW_I0_GENERIC"

void main()
{
    string S1="";
    string S2="";
    string sTag;
    float WARN_DISTANCE = 30.0;
    object oPC;
    object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
    object oItem1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
    object oItem2 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
    object oItem3 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oHench);
    object oItem4 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oHench);
    object oTorch;

    if(GetIsNight() && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF) == OBJECT_INVALID)
            {
            oTorch = GetFirstItemInInventory(OBJECT_SELF);
            while (GetIsObjectValid(oTorch))
                {
                sTag = GetTag(oTorch);
                if(sTag == "NW_IT_TORCH001")
                    {
                DelayCommand(2.0, ClearAllActions());
                DelayCommand(2.1, ActionDoCommand(ActionEquipItem(oTorch, INVENTORY_SLOT_LEFTHAND)));
                    }
                oTorch = GetNextItemInInventory(OBJECT_SELF);
                }
            return;
            }
    if((GetIsDay() || GetIsDawn()) && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF) != OBJECT_INVALID)
            {
            oTorch = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF);
            sTag = GetTag(oTorch);
            if(sTag == "NW_IT_TORCH001")
                {
                DelayCommand(2.0, ClearAllActions());
            DelayCommand(2.1, ActionDoCommand(ActionUnequipItem(oTorch)));

                }
            }
        if (GetIsNight() || GetIsDusk())
            {
            object oFleefrom = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF,1);
                int iEnemy=0;
            if(GetIsReactionTypeHostile(oFleefrom, OBJECT_SELF))
                {
                    iEnemy=1;
                }

                int nHour = GetTimeHour();
               
            if (iEnemy==0 && nHour==20 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"vingt"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",20);
                }
            if (iEnemy==0 && nHour==21 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"vingt-et-une"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",21);
                }
            if (iEnemy==0 && nHour==22 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"vingt-deux"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",22);
                }
            if (iEnemy==0 && nHour==23 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"vingt-trois"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",23);
                }
            if (iEnemy==0 && nHour==0 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(""));
                SetLocalInt(OBJECT_SELF,"Called_Time",0);
                }
            if (iEnemy==0 && nHour==1 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"une"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",1);
                }
            if (iEnemy==0 && nHour==2 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"deux"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",2);
                }
            if (iEnemy==0 && nHour==3 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"trois"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",3);
                }
            if (iEnemy==0 && nHour==4 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(S1+"quatre"+S2));
                SetLocalInt(OBJECT_SELF,"Called_Time",4);
                }
            if (iEnemy==0 && nHour==5 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                DelayCommand(0.2,SpeakString(""));
                DelayCommand(5.0,SpeakString(""));
                SetLocalInt(OBJECT_SELF,"Called_Time",5);
                }
            }

        if(GetLocalInt(GetModule(), "WeaponAllowed") == TRUE)
            {
            return;
            }
        oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
        object oFleefrom = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF,1);
            if(GetIsReactionTypeHostile(oFleefrom, OBJECT_SELF))
            {
            ActionMoveAwayFromObject(oFleefrom, TRUE, 40.0f);
            DelayCommand(1.0,SpeakString("Des renforts! Des renforts! Y'a du grabuge! Des renforts!"));
            }
    if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC))
            {
            if((oItem1 !=OBJECT_INVALID) || (oItem2 !=OBJECT_INVALID ))
                {
            SetLocalInt(OBJECT_SELF, "WeaponOut", TRUE);
                }
            if((oItem3 !=OBJECT_INVALID) || (oItem4 !=OBJECT_INVALID ))
                {
            SetLocalInt(OBJECT_SELF, "HenchWeaponOut", TRUE);
                }
            if(GetLocalInt(OBJECT_SELF, "WeaponOut") == TRUE ||
            GetLocalInt(OBJECT_SELF, "HenchWeaponOut") == TRUE)
                    {
                AssignCommand(oPC, ClearAllActions());
                ClearAllActions();
                ActionMoveToObject(oPC, TRUE);
                ActionStartConversation(oPC);
                    }
            }
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 09/04/2005 13:18:36 Sujet du message :

Je suis loin d'être un pro mais je crois que l'erreur est dans les déclarations.

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.



Tu déclares comme ça, donc pour moi tes oItems ne fonctionnent pas.Car il doit dire : je prend l'objet dans la main gauche d'une creature non définie, donc y'a rien.

Ensuite quand tu apelles dans le script tes oItems, il ne relance pas le GetItemIsSlot, il se contente d'utiliser ce qui est défini, donc aucun objet (ou un objet invalid je sais pas comment il considère ce que tu as déclaré).

Hormis ça :
Un truc d'optimisation, je trouve que ça manque de Else.

Quand tu fais un test et qu'il échoue, j'aurai mis des elses pour réduire les instruction à effectuer.

Genre

If ( il est tel heure) faire ceci
Else If (il est tel heure)

Ca évite qu'il test toutes tes conditions suivantes s'il tombe sur la bonne du premier coup et dieu sait que les scripts sur les onheartbeat ont interêt d'être soigné sinon tes ressources morflent.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 09/04/2005 14:22:04 Sujet du message :

Merci pour ces précisions.

Citation :
Car il doit dire : je prend l'objet dans la main gauche d'une creature non définie, donc y'a rien.
Quel idiot je suis ! J'ai oublié de déclarer la valeur de oPC Wink
Bien entendu ici c'est :
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.


Citation :
Quand tu fais un test et qu'il échoue, j'aurai mis des elses pour réduire les instruction à effectuer.
C'est maintenant corrigé!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 09/04/2005 17:34:01 Sujet du message :

Bon, est ce que ça t'a résolu le probleme des joueurs armés ?

Sinon nulle part tu redis à ton garde de reprendre sa ronde après les actions, donc avec un ClearAllActions() il vide tout ce qu'il faisait, il sort sa torche, et reste planté là, non ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 09/04/2005 19:34:37 Sujet du message :


Citation :
Bon, est ce que ça t'a résolu le probleme des joueurs armés ?
Oui c'est fait.

Citation :
Sinon nulle part tu redis à ton garde de reprendre sa ronde après les actions, donc avec un ClearAllActions() il vide tout ce qu'il faisait, il sort sa torche, et reste planté là, non ?
J'ai modifié le script OnSpawn du garde ce qui lui permet de reprendre sa ronde.
Au final j'ai un script qui marche bien Smile
Mais j'ai une autre question : sachant que le garde porte un bouclier exclusivement le jour et une torche la nuit, si le garde passe en attaque la nuit (il est attaqué par le joueur où il se défend contre des créatures hostiles) comment l'intégré dans mon script pour qu'il prenne son bouclier pendant le combat et le range après son combat et s'équipe de nouveau avec la torche ? ( je sais ça fait beaucoup de questions , mais je débute alors...).
Si ça t'intéresse voici mon script :
NWScript :
//OnUserDefined
void main()
{
    string S1="";
    string S2="";
    string sTag;
    float WARN_DISTANCE = 20.0; // Distance de perception du garde
    object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
    object oFleefrom = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF,1);
    object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
    object oItem1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
    object oItem2 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
    object oItem3 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oHench);
    object oItem4 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oHench);
    object oTorch;
    int nItem1 = GetBaseItemType(oItem1);
    int nItem2 = GetBaseItemType(oItem2);
    int nItem3 = GetBaseItemType(oItem3);
    int nItem4 = GetBaseItemType(oItem4);
    int nUser = GetUserDefinedEventNumber();
    int nHour = GetTimeHour();

    if(nUser == 1001) //HEARTBEAT
    {
        // De nuit le garde porte une torche
        if(GetIsNight() && (GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF) == OBJECT_INVALID || GetTag(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == "NW_ASHSW001") && !GetIsInCombat())
            {
            oTorch = GetFirstItemInInventory(OBJECT_SELF);
            while (GetIsObjectValid(oTorch))
                {
                sTag = GetTag(oTorch);
                if(sTag == "NW_IT_TORCH001")
                    {
                    DelayCommand(0.9, ClearAllActions());
                    DelayCommand(2.1, ActionDoCommand(ActionEquipItem(oTorch, INVENTORY_SLOT_LEFTHAND)));
                    }
                    oTorch = GetNextItemInInventory(OBJECT_SELF);
                }
            return;
            }
        // De jour le garde ne porte plus la torche
        if((GetIsDay() || GetIsDawn()) && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF) != OBJECT_INVALID)
            {
            oTorch = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF);
            sTag = GetTag(oTorch);
            if(sTag == "NW_IT_TORCH001")
                {
                DelayCommand(2.0, ClearAllActions());
                DelayCommand(2.1, ActionDoCommand(ActionUnequipItem(oTorch)));
                DelayCommand(4.0,ActionDoCommand(ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND)));
                }
            }

        if (GetIsNight() || GetIsDusk())
        {
            int iEnemy=0;
            if(GetIsReactionTypeHostile(oFleefrom, OBJECT_SELF))
            {
                iEnemy=1;
            }
            if(GetLocalInt(GetModule(), "WeaponAllowed") == TRUE)
            {
            return;
            }
           
            if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC))
            {
            if((nItem2 != 256) && (nItem1 != 256 || nItem1 != 14 || nItem1 != 15 || nItem1 != 56 || nItem1 != 57))
                {
                SetLocalInt(OBJECT_SELF, "WeaponOut", TRUE);
                }
            if((nItem4 != 256) && (nItem3 != 256 || nItem3 != 14 || nItem3 != 15 || nItem3 != 56 || nItem3 != 57))
                {
              SetLocalInt(OBJECT_SELF, "HenchWeaponOut", TRUE);
                }
            if(GetLocalInt(OBJECT_SELF, "WeaponOut") == TRUE ||
                GetLocalInt(OBJECT_SELF, "HenchWeaponOut") == TRUE)
                    {
                    SetLocalInt(OBJECT_SELF,"WeaponOut",FALSE);
                    SetLocalInt(OBJECT_SELF,"HenchWeaponOut",FALSE);
                    AssignCommand(oPC, ClearAllActions());
                    ClearAllActions();
                    ActionMoveToObject(oPC, TRUE);
                    ActionStartConversation(oPC);
                    }
            }
               
                if (iEnemy==0 && nHour==20 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"vingt"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",20);
                }
                else if (iEnemy==0 && nHour==21 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"vingt-et-une"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",21);
                }
                else if (iEnemy==0 && nHour==22 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"vingt-deux"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",22);
                }
                else if (iEnemy==0 && nHour==23 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"vingt-trois"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",23);
                }
                else if (iEnemy==0 && nHour==0 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(""));
                    SetLocalInt(OBJECT_SELF,"Called_Time",0);
                }
                else if (iEnemy==0 && nHour==1 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"une"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",1);
                }
                else if (iEnemy==0 && nHour==2 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"deux"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",2);
                }
                else if (iEnemy==0 && nHour==3 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"trois"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",3);
                }
                else if (iEnemy==0 && nHour==4 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(S1+"quatre"+S2));
                    SetLocalInt(OBJECT_SELF,"Called_Time",4);
                }
                else if (iEnemy==0 && nHour==5 && GetLocalInt(OBJECT_SELF,"Called_Time")!=nHour)
                {
                    DelayCommand(0.2,SpeakString(""));
                    DelayCommand(2.5,SpeakString(""));
                    SetLocalInt(OBJECT_SELF,"Called_Time",5);
                }
        }
          if(GetIsDay() || GetIsDawn())
            {
                if(GetLocalInt(GetModule(), "WeaponAllowed") == TRUE)
                {
                return;
                }
               
                if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC))
                {
                if((nItem2 != 256) && (nItem1 != 256 || nItem1 != 14 || nItem1 != 15 || nItem1 != 56 || nItem1 != 57))
                    {
                    SetLocalInt(OBJECT_SELF, "WeaponOut", TRUE);
                    }
                if((nItem4 != 256) && (nItem3 != 256 || nItem3 != 14 || nItem3 != 15 || nItem3 != 56 || nItem3 != 57))
                    {
                  SetLocalInt(OBJECT_SELF, "HenchWeaponOut", TRUE);
                    }
                if(GetLocalInt(OBJECT_SELF, "WeaponOut") == TRUE ||
                    GetLocalInt(OBJECT_SELF, "HenchWeaponOut") == TRUE)
                        {
                        SetLocalInt(OBJECT_SELF,"WeaponOut",FALSE);
                        SetLocalInt(OBJECT_SELF,"HenchWeaponOut",FALSE);
                        AssignCommand(oPC, ClearAllActions());
                        ClearAllActions();
                        ActionMoveToObject(oPC, TRUE);
                        ActionStartConversation(oPC);
                        }
                }
          }
    }
    else if(nUser == 1002) // PERCEIVE
    {
       
          if(GetIsReactionTypeHostile(oFleefrom, OBJECT_SELF))
              {
              ActionMoveAwayFromObject(oFleefrom, TRUE, 40.0f);
              DelayCommand(1.0,SpeakString("Des renforts! Des renforts! Y'a du grabuge! Des renforts!"));
              }
    }
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 09/04/2005 20:05:22 Sujet du message :

Il n'y a pas un évenement qui dit que le NPC est en cours de combat Il me semble que si, alors dans ce cas, quand il commence à combattre tu mets un truc du genre EquipItem et quand ça cesse, un truc du genre UnEquipItem.... c'est juste une piste comme ça...
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 09/04/2005 20:13:37 Sujet du message :

NWScript :
if (GetIsNight() || GetIsDusk())
        {
            int iEnemy=0;
            if(GetIsReactionTypeHostile(oFleefrom, OBJECT_SELF))
            {
                iEnemy=1;
            }}
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.


Tu peux l'ajouter ici, quand il se rend compte qu'il y a des ennemis, il sort son bouclier pour se proteger au cas où.

NWScript :
object oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF);

if ((GetIsObjectValid(oItem)&& GetTag(oItem)!="tagbouclier")||(!GetIsObjectValid(oItem)))
//s'il porte quelque chose main gauche et que ce n'est pas le bouclier, ou s'il ne porte rien
{

ActionUnequipItem(oItem, INVENTORY_SLOT_LEFTHAND);

//on cherche le bouclier
oItem = GetFirstItemInInventory(OBJECT_SELF);
while (GetIsObjectValid(oItem)&&(GetTag(oItem)!="tagdubouclier"))
                {
                oItem = GetNextItemInInventory(OBJECT_SELF);
                }


if (GetTag(oItem)=="Tagdubouclier")
ActionEquipItem(oItem, INVENTORY_SLOT_LEFTHAND);
}
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à c'est probablement pas exactement le script qui fonctionnera ni que tu utiliseras mais ça retranscrit l'idée générale.
Je n'ai pas mis de ClearAllActions() car je crois que s'équiper ou se déséquiper sur la main gauche est permit en combat et se fait automatiquement sans gener le combat.

Si ça marche pas tu peux toujours leur faire porter des hallebardes comme de vrais gardes Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aldigo
Chevalier
Inscrit le: 23 Jan 2005
Messages: 70
Répondre en citant
Posté le : 09/04/2005 21:25:41 Sujet du message :

J'ai suivi ta piste et celle de Laxam : j'utilise l'évènement OnEndCombatRound pour permettre au garde de se rééquiper de la torche. Le résultat est très satisfaisant Very HappyVery HappyVery Happy
Ca marche donc pour des gardes ayant une arme à une main ou deux mains (mais dans ce cas le bouclier ne sert à rien Wink)
Encore merci pour vos conseils!
 
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 102.213ms