Régénération d'un mob aux contact d'autres



  • Bonjour tout le monde,

    je vous expose mon problème (ce n'est pas vraiment un problème, c'est juste que je ne trouve absolument pas comment faire), je voudrais que mon boss régénère s'il y a de ses sbires dans les environs (32 blocs), et plus il y a de sbires,plus il régénère vite !

    j'ai pensé à ce code :

    
    int nombreSbires = // Code pour avoir le nombre de sbires sur 32 blocs);
    for(int i = 0; i => nombreSbires; i++) {
       if(!this.worldObj.isRemote) {
             this.heal(i);
       }
    }
    
    

    Merci d'avance 😄 !



  • Ben ya deux possibilités
    Soit tu fait spawn tes sbires et tu les rajoute à une LinkedList. Puis tu vérifie la distance avec sbire.getDistanceSqToEntity(this) < (32*32)

    Ou alors, c'est plus simple mais moins performant, tu recherche toutes les entités dans un rayon de 32 blocks puis tu compte le nombre de sbires
    J'ai pas le code sous les yeux, cherche du côté de World.getEntities



  • Edit : Arf trop lent je me suis fait doubler ^^

    Si tu as la possibilité de lier le mob au sbires c'est facile. Je m'explique :

    • Dans ta classe sbire tu garde une structure de donnée statique qui maintient un lien vers chacun des sbires qui ont spawn.
    • Périodiquement ton mob principal peut accéder à cette liste via la classe des sbires et compter le nombre de sbires à portée (distance entre les deux positions). A partir de la tu sais de combien il peut se soigner.

    Par contre cela ne fonctionne que pour un petit nombre de sbires. Si ils pop aléatoirement partout sur la map la vérification prendrait trop de temps (ordre de grandeur proportionnel au nombre de sbire existant). Mais si c'est le mob principal qui les invoque et qu'il y a une limite ça devrait faire l'affaire.

    Sinon il existe une methode worldObj.getClosestPlayer(). Peut-être est-il possible de trouver une similaire qui te donne les entité dans un certain rayon (à approfondir).



  • Merci à tous les deux ! Mais j'aurais dû préciser que les mobs spawnent autour du boss, non aléatoirement ^^



  • Pas la peine de static la list, il suffit de gérer une liste par mob principal
    Si c'est le boss qui fait spawn les sbires.



  • Ok merci je vais tester ça 🙂


  • Moddeurs confirmés Rédacteurs Administrateurs

    @'Porteffroi':

    • Dans ta classe sbire tu garde une structure de donnée statique qui maintient un lien vers chacun des sbires qui ont spawn.

    Mauvaise idée de mettre une variable static dans un mob qui à plusieurs instance. Car ducoup si il y a plusieurs bosses dans la map, ils partagerons ensemble le nombre de sbires.



  • Oui en effet, mais je pensait que ce n'était pas le boss qui était responsable de la génération des sbires. Du coup un sbire pouvait avoir un effet sur plusieurs bosses et donc doit être partagé.

    En fait j'utilise une structure similaire dans le mod que je développe. J'ai une série d'entités robotisée qui ont chacune un id et la structure statique sert à retrouver les entités existante et éventuellement les faire communiquer entre elles. Ça marche pas trop mal mais le spawn est controlé par le joueur ce qui limite le nombre d'entités.

    Par contre si tu as une solution plus jolie et pratique ça m'intéresse 🙂 .


  • Moddeurs confirmés Rédacteurs Administrateurs

    J'aurai fait ce que rafoudiablol a dit avec world.selectEntitiesWithinAABB(entity, boundingBox, filter);



  • Je vous adore pour cette fonction! Sa doit bien faire 2h que je cherche à la coder alors qu'elle existe déjà ^^ !


Log in to reply