About This File
**********************************
*** Jedi Knight: Jedi Academy ***
**********************************
TITLE: FJA_scripts.pk3
AUTHOR: French Jedi Academy Clan
WEBSITE : http://french-jediacademy.forumactif.org/
*************************** FJA_scripts.pk3 **********************************
This PK3 contains 6 scripts for those who don't know script and want to anim NPC on their maps.
__________________________ Scripts in the pk3 :_____________________________
* npc_navI_ally : the npc walk between points. He doesn't attack players. At the last point, he turns by 180° and return. Example for 4 nav points : 1 2 3 4 3 2 1 2 3 4...
* npc_navO_ally : the npc walk between points in circle. He doesn't attack players.At the last nav point, he return directly to the first point. Example for 4 nav points : 1 2 3 4 1 2 3 4 1 2 3 4 ...
* npc_navI_enemy : like npc_navI_ally except npc attack players.
* npc_navO_enemy : like npc_nav0_ally except npc attack players.
* respawn : respawn a npc when he dies after X miliseconds.
* npc_spawns : spawn a npc at the start of the map if it is a "NPC_spawner" and not a "NPC_Jedi"
___________________________________ NPC ______________________________
NPC_Jedi : spawn at the start of the map. Can launch npc_spawns script to spawn NPC_spawner.
NPC_spawner : doesn't spawn at the start of the map, but can be spawn a lot of times (for example enemy NPC). You can spawn them a first time whit NPC_spawner script.
there exist a lot of other NPC Class but these are the most useful.
________________________ NPC NAV Scripts ___________________________________
If you make entities modding and not mapping, here are the entities to use :
* Navgoal
The NPC walk between navgoal. He must see the next navgoal to walk.
{
"classname" "waypoint_navgoal"
"targetname" "Nom_CIBLE"
"origin" "4956 -2368 992"
}
Number of Navgoals is on parm2 (max 12 navgoals)
Navgoal targetnames are on parm3 to 14.
Example with 4 navgoals
{
"classname" "NPC_Jedi"
"NPC_type" "kyle"
"origin" "-77 -628 0"
"angle" "70"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_navI_ally"
"parm2" "4"
"parm3" "kyle_nav1"
"parm4" "kyle_nav2"
"parm5" "kyle_nav3"
"parm6" "kyle_nav4"
}
{
"classname" "waypoint_navgoal"
"targetname" "kyle_nav1"
"origin" "-77 -628 0"
}
{
"classname" "waypoint_navgoal"
"targetname" "kyle_nav2"
"origin" "104 238 0"
}
{
"classname" "waypoint_navgoal"
"targetname" "kyle_nav3"
"origin" "2132 -521 128"
}
{
"classname" "waypoint_navgoal"
"targetname" "kyle_nav4"
"origin" "345 47 34"
}
It is a npc who walk. I give him 9999 health, because i don't want players kill him.
_____________________Respawn script ______________________
Used with a NPC_spawner Classname.
You must use NPC_spawner script or a trigger to spawn a first time the NPC.
When the NPC die, the game wait X milliseconds before respawning the NPC.
parm1 = X milliseconds waiting
parm15 = NPC_targetname (= name of the NPC, not the type of npc)
parm16 = targetname (= name of the NPC_spawner)
Example :
{
"classname" "NPC_spawner"
"npc_type" "reborn"
"origin" "4190 -68 24"
"angle" "0"
"spawnflags" "32"
"count" "100000"
"targetname" "reborn_spawn"
"NPC_targetname" "Dark_Mogwai"
"deathscript" "fja/respawn"
"parm1" "60000"
"parm15" "Dark_Mogwai"
"parm16" "reborn_spawn"
}
Here, the npc respawn 60 seconds after he dies (= 60 000 millisecondes).
It is a NPC_spawner, so you must spawn him a first time. You can use NPC_spawner script.
(If he doesn't spawn a first time, he can't die, so he can't respawn....)
Respawn is compatible with walking scripts
________________________ Spawn the npc : _______________________
Here are presented two solutions : item and NPC_spawner script, but you can use others solutions.
*** Item ***
{
"classname" "item_force_boon"
"target" "kyle_spawn"
"origin" "2509 1516 -59"
"noglobalsound" "1"
"wait" "60"
"count" "-1"
}
{
"classname" "NPC_spawner"
"npc_type" "kyle"
"origin" "4190 -68 24"
"angle" "0"
"spawnflags" "32"
"count" "100000"
"targetname" "kyle_spawn"
}
*** NPC_spawner script ***
The goal is to use a NPC_Jedi which spawn at the start of the map and which lauch NPC_spawner script to spawn NPC_spawner.
parm1 : number of NPC_spawner to spawn (max 15)
parm2 to parm16 : targetnames of NPC_spawner to spawn
{
"classname" "NPC_Jedi"
"NPC_type" "chewie"
"origin" "2647 4568 -167"
"angle" "125"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_spawns"
"parm1" "3"
"parm2" "garde1_du_hangar"
"parm3" "garde2_du_hangar"
"parm4" "garde_de_la_cour"
}
{
"classname" "NPC_spawner"
"NPC_type" "bespincop"
"origin" "2647 659 -167"
"angle" "125"
"spawnflags" "32"
"targetname" "garde1_du_hangar"
}
{
"classname" "NPC_spawner"
"NPC_type" "bespincop"
"origin" "3056 234 -56"
"angle" "125"
"spawnflags" "32"
"targetname" "garde2_du_hangar"
}
{
"classname" "NPC_spawner"
"NPC_type" "bespincop"
"origin" "236 -789 67"
"angle" "125"
"spawnflags" "32"
"targetname" "garde_de_la_cour"
}
_______________________EXAMPLE __________________________________
Example with
1) a NPC_spawner enemy which walk and respawn when he die
2) a NPC_Jedi ally who walk
3) a NPC_spawner enemy who respawn when he die
4) a NPC_Jedi ally who spawne the two NPC_spawner :
4)
{
"spawnflags" "32"
"origin" "2647 659 -167"
"classname" "NPC_Jedi"
"NPC_type" "wookie_sword"
"angle" "125"
"health" "9999"
"spawnscript" "fja/npc_spawns"
"parm1" "2"
"parm2" "reborn_fixe"
"parm3" "storm_patrouille"
}
2)
{
"classname" "NPC_Jedi"
"NPC_type" "wookie"
"origin" "764 676 32"
"angle" "180"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_navO_ally"
"parm2" "4"
"parm3" "Lave_nav1"
"parm4" "Lave_nav2"
"parm5" "Lave_nav3"
"parm6" "Lave_nav4"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav1"
"origin" "764 676 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav2"
"origin" "-780 703 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav3"
"origin" "-795 1610 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav4"
"origin" "777 1589 32"
}
3)
{
"classname" "NPC_spawner"
"npc_type" "reborn"
"origin" "5859 1507 -167"
"angle" "180"
"spawnflags" "32"
"count" "100000"
"targetname" "reborn_fixe"
"NPC_targetname" "Darth_Xar"
"deathscript" "fja/respawn"
"parm1" "30000"
"parm15" "Darth_Xar"
"parm16" "reborn_fixe"
}
1)
{
"classname" "NPC_spawner"
"NPC_type" "stormtroolper"
"spawnflags" "32"
"origin" "5177 -1156 -167"
"angle" "0"
"count" "100000"
"spawnscript" "fja/npc_navI_enemy"
"deathscript" "fja/respawn"
"targetname" "storm_patrouille"
"NPC_targetname" "stormtrooper1"
"parm1" "80000"
"parm15" "stormtrooper1"
"parm16" "storm_patrouille"
"parm2" "3"
"parm3" "storm1_nav1"
"parm4" "storm1_nav2"
"parm5" "storm1_nav3"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav1"
"origin" "5177 -1156 -167"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav2"
"origin" "5577 -1073 -167"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav3"
"origin" "5611 17 -167"
}
*****************
*** Credits ***
*****************
French Jedi Academy Clan.
*************************** French Manual *******************************
*************************** Fichiers scripts pour NPCs **********************************
Voici quelques fichiers scripts que je vous ai fait : vous pourrez les utiliser pour faire marcher et respawn vos NPCs sans avoir besoin de savoir scripter. Je vous ai mis ces scripts dans un pk3 pour que vous sachiez dans quel dossier les mettre, mais je vous conseille de les remettre à chaque fois dans le pk3 de la map qui les utilise.
Ce pk3 contient 4 scripts pour faire marcher des npc de différentes façon, et un script pour faire respawn un npc quand il meurt. Le script de respawn peut être utiliser en même temps qu'un script de déplacement.
_______________________Choisir le type de NPC :___________________________
Il existe deux classname de NPCs que j'utilise beaucoup : les NPC_Jedi et les NPC_spawner.
=> Les NPC_Jedi sont des npc qui apparaissent au lancement de la map.
=> Les NPC_spawner sont des points de spawn de npc qui peuvent être utilisés plusieurs fois. Néanmoins, le npc ne spawne pas au lancement de la map. Il faut donc l'activer une première fois via un autre script.
Tout dépend de ce que vous voulez faire : si vous voulez qu'un npc respawne plusieurs fois (par exemple les créatures de Zoras), utilisez un NPC_spawner. Dans les autres cas, prenez un NPC_Jedi.
__________________________ Les scripts contenus dans le pk3 :_____________________________
* npc_navI_ally : fait marcher un npc entre plusieurs points en va et viens. Par exemple pour 4 points, le npc suivra le chemin suivant 1 2 3 4 3 2 1 2 3 4... le I symbolise le fait de faire les 100 pas : le npc se retourne au dernier point et refait le chemin en sens inverse. Le npc ignore les attaques et ne réagit pas. Il se contente de marcher. C'est donc un script destiné aux npc alliés servant de décor : par exemple les passants qui marchent sur Naboo Theed.
* npc_navO_ally : identique au précédent excepté que le npc marche en cercle (d'où le O) : une fois arrivé au dernier point, il revient au premier point sans passer par les autres et recommence son chemin. C'est donc un script destiné aux trajets en carrés par exemple.
* npc_navI_enemy : fait marcher un npc entre plusieurs points en va et viens. Cependant, si le npc croise un ennemi, il s'arrête de suivre le chemin et attaque l'ennemi. Destiné aux soldats et aux gardes ennemis.
* npc_navO_enemy : identique au précédent excepté que le npc fait une boucle avec les points et non un va et viens.
* respawn : fait respawn un npc mort au bout de la durée indiquée.
* npc_spawns : sert à faire spawner les NPC_spawners une première fois au lancement de la map (par exemple, les créatures de Zoras sont des NPC_spawners).
________________________Déplacement d'un npc :___________________________________
Le NPC se déplace entre les navgoal indiqués. Les navgoals sont des entités placées sur la map et ayant pour structure :
{
"classname" "waypoint_navgoal"
"targetname" "Nom_CIBLE"
"origin" "4956 -2368 992"
}
L'origin est l'emplacement du Navgoal. En général, le premier navgoal possède les mêmes coordonnées que le spawn du npc. Pour pouvoir marcher jusqu'au navgoal suivant, un npc doit pouvoir voir ce navgoal (matérialisé par un point imaginaire au sol). Au moindre obstacle (légère butée, angle de mur, ...), le npc s'arrêtera. Ainsi, les escaliers et portes sont particulièrement problématiques, ainsi que les "collines" car le npc ne voit pas l'autre côté de la colline. Il faut donc placer un navgoal au somment. Pareil pour les escalier, il faut placer un navgoal juste au sommet de l'escalier, au bord de la dernière marche. Pour les portes, il faut que la porte s'ouvre tout seule (ne pas être obligé d'appuyer sur entré) et il faut placer un navgoal de chaque côté de la porte.
Nous allons ensuite indiqué dans l'entité du npc le script de déplacement, et les paramètres du déplacement. En effet, on peut stocker 16 paramètres sur une entité (parm1 à parm16) et les scripts utilisent ces paramètres pour savoir quels navgoals suivre.
Le nombre de navgoals est stocké sur parm2
Les noms (= les targetname) des navgoals sont stockés sur les parm3 à 14.
Vous pouvez ainsi placer jusqu'à 12 points de déplacement.
Exemple avec 4 navgoals
{
"classname" "NPC_Jedi"
"NPC_type" "wookie2"
"origin" "-77 -628 0"
"angle" "70"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_navI_ally" // le script à lancer au spawn du npc (le déplacement)
"parm2" "4"
"parm3" "mon_wookie_point1"
"parm4" "mon_wookie_point2"
"parm5" "mon_wookie_point3"
"parm6" "mon_wookie_point4"
}
{
"classname" "waypoint_navgoal"
"targetname" "mon_wookie_point1"
"origin" "-77 -628 0"
}
{
"classname" "waypoint_navgoal"
"targetname" "mon_wookie_point2"
"origin" "104 238 0"
}
{
"classname" "waypoint_navgoal"
"targetname" "mon_wookie_point3"
"origin" "2132 -521 128"
}
{
"classname" "waypoint_navgoal"
"targetname" "mon_wookie_point4"
"origin" "345 47 34"
}
Là, dans ce cas, il s'agit d'un npc allié qui se promène, je ne veux pas que Alden les tuent alors j'ai ajouté "health" "9999" au npc.
______________________Le respawn d'un NPC :______________________
Dans ce cas, il faut utiliser un NPC_spawner pour le classname du npc.
Le principe est simple : lorsque le npc meurt, le jeu attends X millisecondes avant de le faire respawn.
Le script utilise les paramètres parm1 pour la durée X, et les paramètres parm15 et 16 pour le respawn.
En effet, le spawner est séparé du npc : le spawner possède un targetname qui sert à spawn le npc. Le NPC lui possède un NPC_targetname qui sert à gérer le npc.
parm1 : durée d'attente du respawn en millisecondes.
parm15 : le NPC_targetname du NPC qui vient de mourir (obligatoirement le même) (pour enlever le cadavre, sinon bugs)
parm16 : le targetname du npc à faire spawn (pour faire respawn le npc) (ça peut être un autre npc)
Bon, normalement, je devrais pouvoir scripter sans les parm15 et 16 mais comme je connais pas encore toutes les subtilités, je préfère être sûr que ça marche. A noter que avec le parm16, vous pouvez faire spawner un autre npc à la mort du premier npc.
Le count est le nombre de fois maximale que le npc peut respawn. Arrivé à 0, il ne peut plus spawner. On met donc 100000 pour que ce soir quasi infini.
Exemple :
{
"classname" "NPC_spawner"
"npc_type" "howlerbig"
"origin" "4190 -68 24"
"angle" "0"
"spawnflags" "32"
"count" "100000"
"targetname" "mon_howler_spawn"
"NPC_targetname" "mon_howler_tout_chou"
"deathscript" "fja/respawn"
"parm1" "60000"
"parm15" "mon_howler_tout_chou"
"parm16" "mon_howler_spawn"
}
Ici, le npc respawn au bout de 60 secondes (60000 millisecondes).
Problème, comme c'est un NPC_spawner, il faut le faire spawner une première fois (sinon, comme il apparait pas, il peut pas mourir, et donc il ne respawnera jamais). On va donc passer par le script npc_spawn :
Le script de respawn est utilisable avec un script de déplacement (les parm ont des chiffres différents).
________________________Faire spawner les NPC_spawner :_______________________
Pour cela, vous avez deux solutions :
* si vous avez des npcs ennemis qui doivent spawner au lancement de la map (par exemple les créatures et les mercenaires de la jungle de Zoras), vous utilisez le script que je vais détailler plus bas.
* si vous voulez faire spawner un seul npc (par exemple les npc d'entrainement), vous l'associez à un item. Dans ce cas, pas besoin de script :
{
"classname" "item_force_boon"
"target" "kyle_spawn"
"origin" "2509 1516 -59"
"noglobalsound" "1"
"wait" "60" => temps en SECONDES entre deux activations possibles de l'item
"count" "-1"
}
{
"classname" "NPC_spawner"
"npc_type" "kyle"
"origin" "4190 -68 24"
"angle" "0"
"spawnflags" "32"
"count" "100000"
"targetname" "kyle_spawn"
}
_____________________ Utiliser le script : __________________________________
Le principe va être d'utiliser un NPC_Jedi qui spawne au lancement de la map (par exemple un wookie avec une bulle de dialogue), qui déclenche un script en apparaissant, lequel va spawner tous les NPC_spawner indiqués.
On indique en parm1 le nombre d'entités à déclencher. Les autres parm sont les targetname des NPC_spawner à déclencher
{
"classname" "NPC_Jedi"
"NPC_type" "wookie2"
"origin" "2647 659 -167"
"angle" "125"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_spawns"
"parm1" "3"
"parm2" "garde1_du_hangar"
"parm3" "garde2_du_hangar"
"parm4" "garde_de_la_cour"
}
(option) On peut ajouter la bulle de dialogue au npc :
{
"classname" "item_ysalimari"
"origin" "2630 684 -167"
"noglobalsound" "1"
"wait" "8"
"count" "-1"
"target" "place_wookie1"
}
{
"targetname" "place_wookie1"
"message" "^3Chalbev :\nBienvenue dans notre Cité. C'est l'une des rares à ne pas être construite dans les Wroshyrs, les grands arbres de Kashyyk."
"wait" "4"
"spawnflag" "4"
"origin" "2630 684 -167"
"classname" "target_print"
}
_______________________EXEMPLE __________________________________
Voici l'exemple d'un ensemble, constitué d'un NPC_spawner ennemi, qui partrouille et respawne quant il meurt, d'un npc allié qui marche, d'un npc ennemi qui reste immobile et respawne, et d'un npc allié qui sert à spawner les deux NPC_spawner :
// Le npc immobile qui déclenche les spawners au lancement de la map
{
"spawnflags" "32"
"origin" "2647 659 -167"
"classname" "NPC_Jedi"
"NPC_type" "wookie_sword"
"angle" "125"
"health" "9999"
"spawnscript" "fja/npc_spawns"
"parm1" "2"
"parm2" "reborn_fixe"
"parm3" "storm_patrouille"
}
// le npc allié qui marche
{
"classname" "NPC_Jedi"
"NPC_type" "wookie"
"origin" "764 676 32"
"angle" "180"
"spawnflags" "32"
"health" "9999"
"spawnscript" "fja/npc_navO_ally"
"parm2" "4"
"parm3" "Lave_nav1"
"parm4" "Lave_nav2"
"parm5" "Lave_nav3"
"parm6" "Lave_nav4"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav1"
"origin" "764 676 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav2"
"origin" "-780 703 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav3"
"origin" "-795 1610 32"
}
{
"classname" "waypoint_navgoal"
"targetname" "Lave_nav4"
"origin" "777 1589 32"
}
// Le reborn fixe qui respawn :
{
"classname" "NPC_spawner"
"npc_type" "reborn"
"origin" "5859 1507 -167"
"angle" "180"
"spawnflags" "32"
"count" "100000"
"targetname" "reborn_fixe"
"NPC_targetname" "Darth_Xar"
"deathscript" "fja/respawn"
"parm1" "30000"
"parm15" "Darth_Xar"
"parm16" "reborn_fixe"
}
// Le stormtrooper qui patrouille et respawn
{
"classname" "NPC_spawner"
"NPC_type" "stormtroolper"
"spawnflags" "32"
"origin" "5177 -1156 -167"
"angle" "0"
"count" "100000"
"spawnscript" "fja/npc_navI_enemy"
"deathscript" "fja/respawn"
"targetname" "storm_patrouille"
"NPC_targetname" "stormtrooper1"
"parm1" "80000"
"parm15" "stormtrooper1"
"parm16" "storm_patrouille"
"parm2" "3"
"parm3" "storm1_nav1"
"parm4" "storm1_nav2"
"parm5" "storm1_nav3"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav1"
"origin" "5177 -1156 -167"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav2"
"origin" "5577 -1073 -167"
}
{
"classname" "waypoint_navgoal"
"targetname" "storm1_nav3"
"origin" "5611 17 -167"
}
THIS FILE IS NOT MADE, DISTRIBUTED, OR SUPPORTED BY ACTIVISION PUBLISHING, INC., RAVEN SOFTWARE, OR LUCASARTS ENTERTAINMENT COMPANY, LLC. ELEMENTS™ & © LUCASFILM LTD.™ & DISNEY, INC.™ AND/OR ITS LICENSORS. STAR WARS®, JEDI®, & JEDI KNIGHT® ARE REGISTERED TRADEMARKS OF LUCASFILM LTD™ AND WALT DISNEY, INC.™ STAR WARS®, JEDI®, & JEDI KNIGHT® ARE REGISTERED TRADEMARKS OF LUCASFILM LTD™ & DISNEY, INC.™