JeuxOnLineForumsPlusConnectés : 724 (sites) | 1308 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Encore un problème avec les GetFirst et GetNext RSS
   
Répondre
Partager Outils Rechercher
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
Unhappy

Encore un problème avec les GetFirst et GetNext

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
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
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.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
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 )
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
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 ...)
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
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...
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
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
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
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
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
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
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
)tu pouvais aussi mettre un AssignCommand(ActionAttack()) ou bien DetermineCombatRound().





(le mec qui arrive 15 ans apres :
Lien direct vers le message - Vieux
Avatar de ruru2a
ruru2a
Alpha & Oméga
 
Avatar de ruru2a
 
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
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar 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.
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
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
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
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)
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
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.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Encore un problème avec les GetFirst et GetNext
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 19h19.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite