Encore un problème avec les GetFirst et GetNext

Répondre
Partager Rechercher
Salut !

Suite à mon script sur les oeufs de poulet, j'ai voulu faire à peu près la même chose pour une autre scène.
Je voudrais que le joueur se retrouve en plein coeur d'une bataille, mais je ne voudrais pas que les protagonistes commencent à se battre quant le joueur n'est pas là...

J'ai donc mis tous les orcs (les méchants) de la zone en faction "Personne du Peuple", et je voudrais qu'au passage du joueur sur un trigger, ils passent en Hostile.
Tous mes orcs ont le même tag : "orc_baston".

J'ai donc fait ce script sur le OnEnter du trigger :
Code PHP:

object oCreature GetFirstObjectInArea();

void main()
{
if (
GetIsPC(GetEnteringObject()) == TRUE)
    {
    while (
GetTag(oCreature) == "orc_baston")
        if (
GetObjectType(oCreature) == OBJECT_TYPE_CREATURE)
        
ChangeToStandardFaction(oCreatureSTANDARD_FACTION_HOSTILE);
    }
oCreature GetNextObjectInArea();

Et évidemment... ça marche pas... En fait il ne se passe rien, les orques restent sur leur faction de Personne du peuple, ce qui fait que personne ne se bat...

Qu'est-ce que j'ai raté ?
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Déjà je pense que le GetNextMachin n'est pô à la bonne place.

Ensuite la condition de ton while est mauvaise.

Je traduis par: tant que la première bèbète est un ork...

Hors si le script prend le personnage-joueur en tant que première bèbète, le script n'ira pô plus loin, la boucle while va s'arreter sans même avoir détecter un seul ork.
Code PHP:

void main()
{
    
object oCreature GetFirstObjectInArea();

    if (
GetIsPC(GetEnteringObject()))
    {
        while (
GetIsObjectValid(oCreature))
        {
        if (
GetTag(oCreature) == "orc_baston")
            
ChangeToStandardFaction(oCreatureSTANDARD_FACTION_HOSTILE);
        
oCreature GetNextObjectInArea();
        }
    }

Ça devrait mieux marcher maintenant enfin je pense

La condition while peut bien s'effectuer comme ça:
while (TRUE)

On met juste le GetIsObjectValid pour l'arreter à un moment, d'ailleurs GetIsValid est vraisemblablement indissociable de GetFirst et GetNext dans ce genre de boucle.
(et hop, ma connerie du jour )
tiens, je me demandais, est ce que :

Code PHP:

void main()
{
   
int i 1;
    
object oCreature GetNearestObjectByTag("orc_baston"OBJECT_SELFi);

    if (
GetIsPC(GetEnteringObject()))
    {
        while (
GetIsObjectValid(oCreature))
        {
        
i++;
        if (
GetTag(oCreature) == "orc_baston")
            
ChangeToStandardFaction(oCreatureSTANDARD_FACTION_HOSTILE);
        
oCreature GetNearestObjectByTag("orc_baston"OBJECT_SELFi);
        }
    }

est plus lourd ou plus leger
je sais absolument pas comment ca marche tout ca moi , est ce que le GetNearest est en fait une boucle GetFirst GetNext avec un test ou qq chose comme ca ? auquel cas, je conçoit que ca sert à rien, mais si ca test que les objet taggés comme ca ...

(ou bien c pas du tt comme ca qu'elle s'utilise cette fonction ...)
A mon avis, GetFisrst est moins lourd, vu que GetNearest fait intervenir un calcul de distance relatives, qui, s'il ne doit pas couter plus qu'un tour d'horloge, ne doit pas être présent dans le GetFirst/GetNext...

A mon avis...
Okay, merci, je teste ce midi...

Je commence à comprendre comment ça marche, petit à petit
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
OK, ça marche, merci beaucoup !


Par contre il y a un autre petit problème : si les factions des orques changent bien, personne ne bouge, que ce soit les soldats ou les orques, ils restent à se regarder en chiens de faience jusqu'à ce que le joueur entre dans leur champ de vision (et encore, des fois ils sont long à la détente )

Comment pourrais-je faire pour qu'ils commencent à se battre dès que la faction change ?
J'ai pensé à mettre un script sur le OnPerception, mais si personne ne bouge, leur champ de vision ne changera jamais et ça ne se déclenchera pas, si ?
Et sur le OnHeartBeat, ça risque d'alourdir beaucoup, vu le nombre de combattants qu'il y a...
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Bon, c'est bon, j'ai contourné le problème en mettant un RandomWalk sur le OnSpawn des créatures
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Personnelement g une solution (de debutant ke je suis), ki consiste a utiliser les rencontres, en personnalisant ça et utilisant ta palette de créatures c tres facile.

Ca permettra de faire apparaitre une ou les 2 factions (tu pe même mettre un WP de chakune pour kelle ce rencontre a coup sure), juste ken les joueurs arrive au moment ou dois ce produire la scene.

Mais j'imagine ke tu y avais pensé, donc tu rira en te demandant ce k'un naze comme moi viens faire dans ton post
En passant (et puisque la mode est à l'exhumation de vieux posts ), j'ai constaté un méchant bug sur les GetFirst/NextObjectInArea().
En fait la fonction restait bloqué sur un même objet pendant plusieurs boucles (3 ou 4 je crois) avant de passer au suivant, d'où soucis
Mais avec un petit test d'objet ( if(objet actuel == objet précédent) on passe au suivant), je m'en sors quand même.
Ruru : oui, j'avais pensé aux Encounter, mais le problème c'est qu'ils sont liés au niveau du joueur, et qu'en plus les monstres spawnent tous sur le même point, en gros paquets, alors que là j'avais besoin qu'ils soient assez éparpillés et mélangés, donc...


emRaistlin : je vais essayer le AssignCommand(ActionAttack), parce qu'en fait j'ai besoin que deux des combattants s'attaquent l'un l'autre, et avec le RandomWalk ils ont un peu tendance à attaquer quelqu'un d'autre
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Citation :
Provient du message de Taern
En passant (et puisque la mode est à l'exhumation de vieux posts ), j'ai constaté un méchant bug sur les GetFirst/NextObjectInArea().
En fait la fonction restait bloqué sur un même objet pendant plusieurs boucles (3 ou 4 je crois) avant de passer au suivant, d'où soucis
Mais avec un petit test d'objet ( if(objet actuel == objet précédent) on passe au suivant), je m'en sors quand même.
Mis a part une charge serveur supplementaire, ca pose vraiment un pb, ce truc ?


(arff, vi, pour les comptage, c'est ca ?.... laisse tomber : j'ai rien dit)
Absolument pas (même pour compter hein), mais je vois pas pourquoi la fonction serait sensée faire ça

Enfin bon, après tout ça intéresse pitetre personne mais je le signale quand même au cas ou, vala.
Répondre

Connectés sur ce fil

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