Gaming Zone Communautes Battlefield PiTrust Communautes Mods
SommairemapstutorielsforumtétéchargementsdiversLes liensLivre d'Or
Contrôler les entités après leur spawn (suite).


Dans ce tutorial vous allez apprendre à contrôler les entités une fois qu'elles ont spawnées. Mais cette fois-ci contrairement à l'autre tutorial vous pourrez les controler grâce à leur targetname. C'est à dire quelque soit leur équipe, leur classname ...

1/ MAPPING.

Sur la map proposée, vous trouverez :
- le spawn d'une seule entité (Trigger (fin_trigg) entourant le Numéro 1). (Targetname / fin)
- le spawn de 3 unités (Trigger (ens_trigg) entourant le Numéro 2). (Targetname / ensemble)

Ces entités après leur spawn se retrouveront "pacifiques" et ce dirigeront vers leur "node".
De plus les 3 Ai seront mises en tableau et leur mort constituera un objectif.

N'oubliez pas de cocher la case spawner.

2/ SCRIPTING.

a/ Fichier .gsc

//Tutorial cree par Tropheus.
// Tutorial created by Tropheus.

main()
{
    maps\_load::main();

   //GIVE PLAYER WEAPONS
    level.player takeallweapons();
    level.player giveWeapon("panzerfaust");
    level.player giveWeapon("thompson");
    level.player giveWeapon("colt");
    level.player giveWeapon("fraggrenade");
    level.player switchToWeapon("thompson");

   level.spawn_ens_array = getentarray("ensemble" , "targetname");
   level.count=level.spawn_ens_array.size;

   thread cont_spawn_seul();
   thread cont_spawn_groupe();
   thread compteur();

}

/////Controler seulement une entite apres son spawn.////////////
cont_spawn_seul()
{
    level.spawner = getent("fin","targetname");
    trig = getent ("fin_trigg","targetname");
    trig waittill("trigger");
    level.spawner = level.spawner dospawn();
    level.spawner.pacifist=1;
    node = getnode(level.spawner.target ,"targetname");
    level.spawner setgoalnode (node);

}


///////////Controler plusieurs entites apres leur spawn.//////////

cont_spawn_groupe()
{
    trig=getent("ens_trigg","targetname");
    trig waittill("trigger");
    thread obj();
    for(i=0;i<level.spawn_ens_array.size;i++)//
    {

        level.spawn_ens_array[i] = level.spawn_ens_array[i] dospawn();
        level.spawn_ens_array[i].pacifist = 1;
        level.spawn_ens_array[i] thread bot();
        node = getnode(level.spawn_ens_array[i].target ,"targetname");
        level.spawn_ens_array[i] setgoalnode (node);
    }
}

/////////////////////////////////////////////////
///////////Définition de l'objectif !////////////
/////////////////////////////////////////////////
obj()
{

    objective_add(1,"active",&"CONT_SPAWN_OBJ1");
    objective_string(1, &"CONT_SPAWN_OBJ1", level.count);
    objective_current(1);
}

//////////////////////////////////////////////////////////////////////////
///////////Décrémentation du compteur en fct de la mort des AI////////////
//////////////////////////////////////////////////////////////////////////

bot()
{
    self waittill("death");
    level.count--;
    level notify("update_objective_1");
}

//////////////////////////////////////////////////////////////////////////
////////////Compteur // Affichage // Statut de l'objectif/////////////////
//////////////////////////////////////////////////////////////////////////

compteur()
{
    while(level.count>0)
    {
        level waittill("update_objective_1");
        objective_string(1, &"CONT_SPAWN_OBJ1", level.count);
    }
    objective_state(1,"done");
    objective_string(1,&"CONT_SPAWN_OBJ1_FINI");
}

Explications.

//Tutorial cree par Tropheus.//moi l'auteur.
// Tutorial created by Tropheus.//le même mais en anglais.

main()
{
    maps\_load::main();

   //GIVE PLAYER WEAPONS
    level.player takeallweapons();
    level.player giveWeapon("panzerfaust");
    level.player giveWeapon("thompson");
    level.player giveWeapon("colt");
    level.player giveWeapon("fraggrenade");
    level.player switchToWeapon("thompson");

   level.spawn_ens_array = getentarray("ensemble" , "targetname");//mise en tableau des entités à spawner.
   C'est à dire qu'on met en tableau les spawners.

   level.count=level.spawn_ens_array.size;//définition de la valeur du compteur.(cf tuto)

   thread cont_spawn_seul();//envoi vers le spawn simple.
   thread cont_spawn_groupe();//envoi vers le spawn de groupe.
   thread compteur();//envoi vers l'affichage et l'update de celui-ci.

}

/////Controler seulement une entite apres son spawn.
cont_spawn_seul()
{
    level.spawner = getent("fin","targetname");//definition de l'entité.
    trig = getent ("fin_trigg","targetname");//definition du trigger.
    trig waittill("trigger");//trigger attend l'activation.
    level.spawner = level.spawner dospawn();//définition de l'entité spawnée.
    level.spawner.pacifist=1;//elle devient pacifiste
    node = getnode(level.spawner.target ,"targetname");//définition du noeud de destination.
    level.spawner setgoalnode (node);//déplacement vers le node.

}


///////////Controler plusieurs entites apres leur spawn.

cont_spawn_groupe()
{
    trig=getent("ens_trigg","targetname");//definition du trigger.
    trig waittill("trigger");//trigger attend l'activation.
    thread obj();//envoi vers le thread "obj".
    A mettre ici car si on le met dès le début, l'objectif s'affiche alors qu'aucun axe n'est présent sur la map.

    for(i=0;i<level.spawn_ens_array.size;i++)//boucle "for" pour le spawn de l'entité et ses caractéristiques.
    {

        level.spawn_ens_array[i] = level.spawn_ens_array[i] dospawn();//définition de l'entité spawnée.
        level.spawn_ens_array[i].pacifist = 1;//elle devient pacifiste
        level.spawn_ens_array[i] thread bot();//envoi vers le thread "bot".
        node = getnode(level.spawn_ens_array[i].target ,"targetname");//définition du noeud de destination.
        level.spawn_ens_array[i] setgoalnode (node);//déplacement vers le node.
    }
}

/////////////////////////////////////////////////
///////////Définition de l'objectif.
/////////////////////////////////////////////////

obj()
{

    objective_add(1,"active",&"CONT_SPAWN_OBJ1");
    objective_string(1, &"CONT_SPAWN_OBJ1", level.count);
    objective_current(1);
}

//////////////////////////////////////////////////////////////////////////
///////////Décrémentation du compteur en fct de la mort des AI.
//////////////////////////////////////////////////////////////////////////

bot()
{
    self waittill("death"); //on attend que l'entité meure
    level.count--;//decrémentation de la valeur du compteur
    level notify("update_objective_1");//mise à jour de l'objectif.
}

//////////////////////////////////////////////////////////////////////////
////////////Compteur // Affichage // Statut de l'objectif.
//////////////////////////////////////////////////////////////////////////

compteur()
{
    while(level.count>0)//tant que la valeur de level.count est supérieure à 0
    {
        level waittill("update_objective_1");//on attend que l'objectif soit mis à jour
        objective_string(1, &"CONT_SPAWN_OBJ1", level.count);//texte à afficher.
    }

    //si level.count<0 alors lecture de ces 2 lignes.
    objective_state(1,"done");//objectif accompli
    objective_string(1,&"CONT_SPAWN_OBJ1_FINI");//affichage du texte.
}

b/ Fichier .str

REFERENCE       OBJ1
LANG_FRENCH   "Il reste encore %s Allemands à tuer."

REFERENCE       OBJ1_FINI
LANG_FRENCH   "Vous avez tué tous les Allemands."


ENDMARKER

Voila j'espère que cela vous aidera.

Bye

Télécharger le pk3 de test (pour CODUO seulement)

 

Par Tropheus - 2005 Copyright © by CaskAmi Prod. Tout droit réservé.

 

Page générée en

Design / concept Amigos3D - Copyright ©2006 CaskAmi Prod. Tous droits réservés.
Caskami.com est hébergé; par Eliott-Ness.