HELP Random Walk de pnj? + eboueur

Répondre
Partager Rechercher
Bonjour, je suis encore moins qu'une quiche en script et voici ma question

j'aimerai, si possible, que quelqu'un m'explique comment faire un randomwalk. j'ai été regarder dans le forum mais il y a tellement de lignes dans certains scripts que ca me casse la tete!

si qq'un pouvait me faire un petit script du genre

.....
.....
action... "ici-tu-mets-le-tag-de..."

tu mets ce script dans ...

et idem pour un script d'eboueur car j'ai fait un copier/coller mais je sais pas ce que je dois changer et où!

en vous remerciant de tout coeur d'avance,

un moins que quiche en script

Allez je m'y colle
Je suis un de rares à être en vacances, alors...
Random Walks, tu as un joli script, qui s'appelle "dans ville il y a vie", tome 1. Créé par moi, il est fait pour être éducatif... T'as de la chance, hein ? T'as juste à regarder dans le post à liens pour script. Pour éboueurs, tu veux que ça fasse quoi exactement ? (durée avant disparitions, etc.) Ca te vas si j'utilise un heartbeat (CPU-- ) ou tu veux un truc plus léger ?
Exclamation
Heu...ca m'intéresse aussi
oui oui!

Moi ce que j'aimerai bien avoir c'est un éboueur léger (pas Heartbeat) qui fasse disparaître les items posés ou laissés au sol après un certain temps (1min. environ).

*Court avant de se faire taper par le posteur initial!*

Merci
Ben il me semble que RAT a fait un script déjà pour l'éboueur non ? Même un pack complet téléchargeable il me semble, contenant le Boueux et son script. Ensuite tu as juste à tout installer dans le module et à poser les PNJ dans les endroits que tu veux.

Rat me dit qu'il t'expliquera où trouver le script et comment l'installer dès qu'il arrive au Taf.
Bon voilà, je remets le code ici car il est perdu dans plusieurs posts .

En fait la tu fais un copier/coller sur un script vierge.
tu le sauvegarde en le nommant comme tu veux.
Après, tu te crées un NPC . Et dans les propriétés, dans l'onglet OnHeartbeat (trigger) , tu mets le nom du script que tu viens de sauvegarder ou tu vas chercher dans la liste. Tu sauvegardes tout.

Et voilà ,

Bon dès que je rentre ce soir, je peux vous faire un petit pack car je ne l'ai plus sur mon DD ni sur mon site.
Je ne pensais pas que ce script aurait été utilisé lol

Enfin j'espère que tu as mieux compris. Désolé si j'ai fais peut être une explication simpliste pour ceux qui connaissent un peu nwn, mais j'ai voulu être le plus simple possible pour que même une personne qui ne connaît pas du tout puisse le faire.
Donc je m'excuse d'avance

@ bientôt,

RAT

Code PHP:

//::///////////////////////////////////////////////
//:: Default On Heartbeat
//:: NW_C2_DEFAULT1
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    This script will have people perform default
    animations.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 23, 2001
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Modifie par: RAT
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"

void main()
{
    if(
GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
    {
        if(
TalentAdvancedBuff(40.0))
        {
            
SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMYFALSE);
            return;
        }
    }

    if(
GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING))
    {
        
int nDay FALSE;
        if(
GetIsDay() || GetIsDawn())
        {
            
nDay TRUE;
        }
        if(
GetLocalInt(OBJECT_SELF"NW_GENERIC_DAY_NIGHT") != nDay)
        {
            if(
nDay == TRUE)
            {
                
SetLocalInt(OBJECT_SELF"NW_GENERIC_DAY_NIGHT"TRUE);
            }
            else
            {
                
SetLocalInt(OBJECT_SELF"NW_GENERIC_DAY_NIGHT"FALSE);
            }
            
WalkWayPoints();
        }
    }

    if(!
GetHasEffect(EFFECT_TYPE_SLEEP))
    {
        if(!
GetIsPostOrWalking())
        {
            if(!
GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
            {
                if(!
GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATIONREPUTATION_TYPE_ENEMYOBJECT_SELF1CREATURE_TYPE_PERCEPTIONPERCEPTION_SEEN)))
                {
                    if(!
GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF))
                    {
                        if(
GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN))
                        {
                            
PlayMobileAmbientAnimations();
                        }
                        else if(
GetIsEncounterCreature() &&
                        !
GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATIONREPUTATION_TYPE_ENEMYOBJECT_SELF1CREATURE_TYPE_PERCEPTIONPERCEPTION_SEEN)))
                        {
                            
PlayMobileAmbientAnimations();
                        }
                        else if(
GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) &&
                           !
GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATIONREPUTATION_TYPE_ENEMYOBJECT_SELF1CREATURE_TYPE_PERCEPTIONPERCEPTION_SEEN)))
                        {
                            
PlayImmobileAmbientAnimations();
                        }
                    }
                    else
                    {
                        
DetermineSpecialBehavior();
                    }
                }
                else
                {
                    
//DetermineCombatRound();
                
}
            }
        }
    }
    else
    {
        if(
GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
        {
            
effect eVis EffectVisualEffect(VFX_IMP_SLEEP);
            if(
d10() > 6)
            {
                
ApplyEffectToObject(DURATION_TYPE_INSTANTeVisOBJECT_SELF);
            }
        }
    }
    if(
GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
    {
        
SignalEvent(OBJECT_SELFEventUserDefined(1001));
    }

//:://////////////////////////////////////////////
//:: Cree par :RAT
//:: script permettant de faire les nettoyeux publics sur un module
//:: ils rammassent les objets qu'ils peuvent voir
//:: et le detruisent dans leur inventaire
//:: Mettre les NPC en perception longue
//:://////////////////////////////////////////////

//:://////////////////////////////////////////////
//:: Declaration des variables
//:://////////////////////////////////////////////

 
object oitem=GetNearestObject(OBJECT_TYPE_ITEM,OBJECT_SELF,1);
 
object oNPC=OBJECT_SELF;
 
int inth=1;
float fDuree=60.0;  // si vous voulez qu'ils attendent plus d'une minute, vous
// devez changer cette valeur

if (GetIsObjectValid(oitem))
{
  if (
GetDistanceToObject(oitem)<=20.0//s'il voit un objet ds un rayon de 20 metres
  
{

    
ClearAllActions();


   
string stag=GetTag(oitem);
     if (
GetLocalInt(oitem,"BLOKE_EBOUEUR")==0)  // verifie si l item possede le tag pour bloquer le NPC
      
{
      
DelayCommand(fDuree,SetLocalInt(oitem,"BLOKE_EBOUEUR",1)); // au bout d'une minute , on debloque le NPC
      
}
      else
      {
     
SetLocalInt(oitem,"BLOKE_EBOUEUR",0);
      
ActionPickUpItem(oitem);   // et donc va chercher l'item
      
object oinvent=GetFirstItemInInventory(OBJECT_SELF);   // on regarde le premier objet dans son inventaire
         // ActionRandomWalk();
      
DestroyObject(oinvent,1.0);   // et il le supprime
      // SendMessageToAllDMs(stag); // message de test
       
ActionRandomWalk();  // on redemande au NPC de marcher aleatoirement
       //break;

      
}
  }

  else
  {

   
string stag2=GetTag(oitem);   // si le NPC le voit a plus de 20 metre ,

   
ActionPickUpItem(oitem);  //on le deplace, mais il sera rebloquer pendant une minute quand l'item
                             //rentrera dans son rayon de 20 metres

    
SetLocalInt(oitem,"BLOKE_EBOUEUR",0);
  }

}
else
{
SetLocalInt(oitem,"BLOKE_EBOUEUR",0);
  
ActionRandomWalk();

}

//:://////////////////////////////////////////////
//::                FIN DU SCRIPT
//:://////////////////////////////////////////////






Etant moi-même une quiche, je te suggère d'utiliser une solution simple, parce que le fait d'utiliser les scripts compliqués de quelqu'un d'autre comporte quelques inconvénients : dès que tu veux modifier quelque chose t'es paumé.
Pour apprendre faut y aller petit à petit.

Donc ma solution simplissime pour un randomwalk :
...
je suppose que le but est de donner un peu de vie aux habitants du village que tu as crée, par exemple...

Alors tu poses un npc, tu lui laisses ses scripts par défaut.

Tu édites celui du OnSpawn ( nw_c2_default9 )
Tu enlèves les // devant les lignes suivantes:
//SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
//SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);

Puis tu sauves ce script sous un autre nom, par ex "villageois".

Voilà, maintenant tu mets le script "villageois" sur le OnSpawn de chaque villageois ( enfin ceux que tu veux qu'ils se déplacent aléatoirement)...

Pour l'éboueur, je n'ai aucune solution simple comme celle-là...

Voilà de quoi te dépanner en attendant de pouvoir rédiger tes propres scripts...
Merci à tous.
Pour le randomwalk, j'ai utilisé le script de BERNARD_JULIUS
et par hasard, je dois changer quoi pour qu'il court au lieu de marcher?

Par contre, pour l'éboueur, serait-il possible de le faire sans PNJ, un script qui s'exécute apres 5 min et fais disparaitre les objets au sol. j'avais vu un script dans le genre où il fallait mettre une partie dans les propriétés du mod puis une deuxième partie dans les propriétés de la zone à nettoyer. C'est celui-là que j'avais copier/coller mais ils s'exécute pas car je sais pas s'il faut changer qq chose (mettre le tag de la zone ou du mod, ...) qq part.

Voila, merci d'avance
Ba bien sur , la faudra plus le mettre dans le onheartbeat du module, et utiliser le onenter du module

ou de la zone au choix

En tout cas, si tu pourrais me donner le lien, pour que je puisse analyser le code pour que je puisse t'aider

Cela serait sympa
Vi comme j'ai dis soit le onheartbeat soit le onenter en utilisant la simulation du heartbeat .


je crois connaître ce script là je vais aller vérifier cela
Bon j'ai regardé rapidement , déjà il se lance toutes les 6 secondes, normal comme c'est dans le Onheartbeat du module .


Maintenant, je trouve ça dommage de mettre un script dans chaque area comme ça mais bon c'est mon avis perso, alors qu'on peut très bien le faire dans un seul script
Bon ben je vais essayer l'éboueur de RAT.

on verra ce que ca donne

merci beaucoup

euh petit bug dans le script de RAT
cette ligne (19) : if (GetIsObjectValid(oitem))

il me dit erreur et que ca ne compile pas

de plus, je l'ai quand meme essayé. mais ton éboueur, c'est pour une zone calme? car le miens il s'intéresse pas du tout au déchets mais plutot aux gobelins des alentours. ce qui fait qu'il se fait buter!
Ba pour la faute si tu me dis pas l'erreur , je vais pas pouvoir t'aider .

J'ai peut être oublier de tout copier sur l'ancien post, mais je trouve cela étrange :////


Maintenant pour l'éboueur , c'est un peu logique, car faudrait que tu le mettes en intrigue pour qu'il soit invulnérable.
Et si tu veux mettre le même npc autant pour tous les types d'alignements.

Tu peux créer une faction et tu fais soit tous à 50% soit tout à 100% .

Sinon, tu le mets en personne du peuple et en général ça passe très bien.


Je rappelle juste comme ça, que mon éboueur attend une minute des qu'il trouve un objet dans sa perception avant d'aller le chercher et de le détruire
Répondre

Connectés sur ce fil

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