[SOC] Le Tutoriel modding - Question/Réponse

L'école de modding, les outils, le SDK, les tutos

Modérateurs : SkyfighterZERO, Artgalen

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 06 nov. 2011, 19:14

Q: Comment créer une nouvelle combinaison?

R: Une nouvelle combinaison nécessite un minimum de deux fichiers, les gamedata\config\misc\outfit.ltx et le gamedata\config\text\langue\string_table_outfit.xml:


Il suffit de prendre comme base une combinaison existante ( via le [nouvelle_combi]:outfit_base) et de changer les paramètres souhaités:

Code : Tout sélectionner

[nato_outfit]:outfit_base
GroupControlSection   = spawn_group
discovery_dependency =
$spawn          = "outfit\killer_outfit"
;$prefetch       = 32
class         = E_STLK
cform           = skeleton
visual          = equipments\stalker_killer_suit                 ---> visuel dans l'inventaire
actor_visual   = actors\killer\stalker_ki_antigas.ogf   ---> vue 3D
 
ef_equipment_type   = 4
 
inv_name         = nato_outfit_name                  --> nom de la combinaison(se réfère au .xml)
inv_name_short      = nato_outfit_name
description         = nato_outfit_description           --> description de la combinaison (se réfère au .xml)
inv_weight         = 7.50                                    ---> Poid de la combinaison
slot            = 6
inv_grid_width      = 2
inv_grid_height      = 3
inv_grid_x         = 4
inv_grid_y         = 15
full_icon_name      = npc_icon_killer_outfit                 --> Icône de l'inventaire quand le joueur met la combinaison (vue du personnage de face)
nightvision_sect   = effector_nightvision_bad                    --> Vision nocturne (_bad pour la première génération et _good pour la seconde génération)
 
cost            = 29000                                     --> Prix de la combinaison
full_scale_icon      = 4,11         ;èêîíêà ñòàëêåðà â êîñòþìå â ïîëíûé ðîñò
 
immunities_sect         = sect_nato_outfit_immunities
 
; MEDIUM RESISTANCE                            --> plus une valeur est forte, plus la protection est bonne (max = 1), à vérifier
burn_protection             = 0.5 --> Protection contre le feu
strike_protection             = 0.7 --> contre les mutants
shock_protection             = 0.5 --> Protection contre les électrocutions
wound_protection            = 0.8 --> contre les coup de couteau
radiation_protection          = 0.5 --> Protection contre la radio
telepatic_protection          = 0.2 --> Telepatic Protection (Protection from Controller Psy Attack)
chemical_burn_protection       = 0.4 --> Protection chimique
explosion_protection          = 0.7 --> Explosion Protection
fire_wound_protection           = 0.80 --> Gun Shot Protection
 
bones_koeff_protection = gilet_antigas_damage
 
additional_inventory_weight      = 10                         --> Poid additionnel que l'on peut porter en kg
 
[sect_nato_outfit_immunities]                --> immunités de la combinaison, plus la valeur est faible, plus la résistance est grande, à vérifier
burn_immunity            = 0.03
strike_immunity            = 0.01
shock_immunity            = 0.03
wound_immunity            = 0.01
radiation_immunity         = 0.00
telepatic_immunity         = 0.00
chemical_burn_immunity         = 0.03
explosion_immunity         = 0.03
fire_wound_immunity         = 0.005


Ajouter la description et le nom de la combinaison dans gamedata\config\text\langue\string_table_outfit.xml

Code : Tout sélectionner

</string>
   <string id="nato_outfit_description">
      <text>Devolped by American Defence Institute, this Soldier Suit is so power as a exoskeleton. Only NATO Soldiers In the zone use it.</text>
   </string>
   <string id="nato_outfit_outfit_name">
      <text>N.A.T.O. Soldier Suit</text>
   </string>


Remarque: l'ajout d'un nouvel icône pour l'inventaire nécessite de modifier le ui_icon_equipment.dds.
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 06 nov. 2011, 19:59

Q: Oh Grand Monolithe, donnes moi la force de voler dans la Zone!

R: En jeu, presses la touche console ² et pries le demo_record 1 puis Enter


En jeu, un ensemble de commandes console permet de faire différentes actions!

La première permettant un déplacement dans les 3 axes x,y et z est la commande

Code : Tout sélectionner

demo_record 1


Une fois en vol, le personnage se déplace à l'aide de la souris et des touches classiques ZQSD.
Les touches Maj et Ctrl permettent de contrôler la vitesse du déplacement.

Un menu doit apparaitre en rouge à l'écran: il permet de prendre des screens, de visualiser une galerie de la map, et de générer une image au format .dds de la map vu de dessus (comme une map du pda).

Pour quitter le vol, il suffit de presser Échappe.

Il arrive qu'une partie du hud disparaisse une fois de retour dans le jeu.
Les commandes suivantes permet de pallier ce désagrément:

Code : Tout sélectionner

hud_crosshair [0, 1]            Croix de visé ou crosshair (0 = inactive; 1 = active).
hud_crosshair_dist [0, 1]    Distance de la cible sur le crosshair
hud_info [0, 1]                    Éléments du hud
hud_weapon [0, 1]            Arme à l'écran


ATTENTION: la commande console considère que le clavier est un QWERTY!
Le joueur est vulnérable pendant le vol, il est nécessaire de se mettre à l'abri des mutants

REMARQUE: Je me posais la question quand à faire une vidéo en plein vol, tels les différents trailers de mods ou les cinématiques de jeu (agroprom par exemple).
Il se trouve qu'après avoir utilisé le demo_record 1, puis échappe, la commande demo_record 0 rétabli le mode de vol, mais sans le menu rouge à l'écran.

Liste complète des commandes console
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 06 nov. 2011, 21:01

Q: Comment spawner un objet sans scritp et sans utiliser l'acdc?

R: L'utilitaire xrSpawner est la solution.


Le xrSpawner est un outil développé par Zeed, certains l'apprécient, d'autres moins et préfèrent ouvrir leur all.spawn et faire le travail en direct.

Quoiqu'il en soit, cet outil est censé simplifier la vie du moddeur.

Il permet de spawner des mutants, Level_changer , les différents objets (Artefacts, combinaison, munitions, armes, nourriture et soins...) et les anomalies. Il permet également de modifier les Smart Terrain et autres données.

Mais ATTENTION: le xrspawner ne permet de créer des pnj!
ET SURTOUT IL EST CONÇU UNIQUEMENT POUR MODIFIER LE ALL.SPAWN ORIGINEL

-----------------------------

Le lien de dl http://rapidshare.com/files/75053416/xrSpawner_v0.13.1Beta_engs.rar

Une fois l'archive récupérée, la décompresser dans un dossier au choix puis copier-coller le all.spawn d'un SoC version 1.0004 dans ce dit dossier.

Image

Lancer l'application xrSpawner_10004english.exe



=> Files/Open/sélectionner le all.spawn puis Open

En haut à gauche, sur Spawn Tab, sélectionner Object Name pour mieux visualiser le spawn.
L'intégralité des objets du all.spawn apparaissent dans la colonne de gauche.

L'onglet Find (avec la touche Next à côté) permet de rechercher un objet pour peu que l'on connaisse son nom exact.

Exemple n°1:

Ajouter un objet nécessite de connaitre le nom de l'objet (meshes et .ltx correspondant) et le chemin pour y accéder dans le gamedata.
Une fois le all.spawn ouvert dans l'utilitaire,
Faire "Add object", cliquer dans le menu déroulant sous "add object" (coin en haut à droite) et choisir une des 2 options
* Transport (Véhicules)
* Monsters (Mutants)

Cliquer sur "Monsters", puis sur "burer_01" et finalement cliquer sur "Add"

On s'aperçoit que le mutant a été ajouter à la liste de spawn (colonne de gauche) et que des fenêtres sont à remplir au centre (Object Parameters):

Code : Tout sélectionner

Entity: m_burer_e (à changer en xxx, où xxx est le nom du mutant pris dans gamedata\config\creatures)
 
Object Name : burer_01 (à changer en yyy, ce sera le nom de l'objet spawné)
 
Object Path\file name (without extension): monsters\burer\burer_1 ---> Il faut changer le chemin selon le type de mutant choisi:  monsters\zzzz\z (se référer au dossier gamedata\meshes\monsters\zzzz\zzzzz)


Image

Choisir ensuite le level dans le menu déroulant, puis entrer les coordonnées de spawn Coord. X, Y et Z.
Cliquer sur "Save Change" pour sauvegarder les modifications (cette opération de sauvegarde reviendrait à enregistrer des modifications sur le alife_xxx.ltx).

-------------------------------

Exemple n°2:
Au centre de l'outil, il y a un grand onglet script. Celui ci permet de modifier des informations complémentaires au spawn brut.

Pour modifier les objets portés par le joueur en début de partie, il faut faire Find>Actor dans la liste des Entities.
Puis dans la fenêtre de script, il faut remplacer:

Code : Tout sélectionner

[dont_spawn_character_supplies]

[spawn]
wpn_binoc
wpn_wincheaster1300
detector_simple
specops_outfit
device_torch
ammo_12x70_buck = 5

Par

Code : Tout sélectionner

[spawn]
wpn_binoc
detector_simple
novice_outfit
device_torch
wpn_knife
wpn_lr300
ammo_5.56x45_ap = 20


En début de partie, le joueur aura ainsi un LR300, des munitions, un couteau etc.

Cliquer sur Save Change

Une fois les modifications terminés (exemple n°1 et 2), il faut sauvegarder le nouveau all.spawn (Files>Save)

Le logiciel sauvegarde toutes les modifications et fait également un backup du all.spawn.

Image
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 07 nov. 2011, 23:16

Q: Comment créer un smart_terrain et des mutants correspondant?

R: Il est nécessaire d'accéder au all.spawn, de créer le smart_terrain (ou ST), de lui attribuer un gulag (appel des logics) et de créer les mutants un à un.


Exemple issu du vanilla (smart_terrain pour des chiens aveugles au cordon)


Tout d'abord, ouvrir le alife_l01_escape.ltx issu du all.spawn

Le smart_terrain:

Code : Tout sélectionner

[202]              => lors de la création du ST ou de tout objet via le all.spawn, additionné les objets en fin de fichier et incrémenter ce numéro
; cse_abstract properties
section_name = smart_terrain                            => type d'objet spawné, cf la liste des objets accessible via l'acdc.pl
name = esc_dogs_swarm                                  => nom unique que l'on attribue à notre ST
position = 103.621398925781,1.06227028369904,474.088806152344                                                              => coordonnées x y z où l'on positionne le ST (séparé par une ",")
direction = -0.0192443951964378,-0.00269026355817914,-0.0561176985502243                                             => peut être remplacer par 0,0,0

; cse_alife_object properties
game_vertex_id = 221                                       => coordonnées où l'on crée le ST
distance = 16.7999992370605                             => inconnu
level_vertex_id = 404457                                    => coordonnées où l'on crée le ST
object_flags = 0xffffff3e                                     => inconnu, ne pas modifier
custom_data = <<END
[smart_terrain]
type = esc_dogs_swarm                                     => type de ST (ici c'est un modèle unique, il peut être remplacer par un general_lager)               
capacity = 4                                                     => capacité de ST, nombre de chien qu'il peut acceuillir
END

; cse_shape properties                                      => propriété géométrique du ST
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 3.48219966888428

; cse_alife_space_restrictor properties                 => inconnu
restrictor_type = 3

; se_smart_terrain properties


Ensuite, on génère x chiens selon le modèle suivant:

Code : Tout sélectionner

[203]                                                              => on incrémente la valeur
; cse_abstract properties
section_name = dog_weak                                            => type d'objet spawné
name = esc_dog_swarm_0001                                        => nom unique, tous les chiens de ce ST auront un nom différent (_0002, puis _0003....)
position = 103.410903930664,1.08417475223541,472.350433349609                   => coordonnées d'apparition du chien
direction = -0.0192443951964378,-0.00269026355817914,-0.0561176985502243           => orientation du chien (il regardera vers ce point à son apparition)

; cse_alife_object properties
game_vertex_id = 221                                      => coordonnées d'apparition du chien
distance = 18.1999988555908
level_vertex_id = 404455                                   => coordonnées d'apparition du chien
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_dogs_swarm = true                                    => on précise que ce chien sera dépendant du ST esc_dogs_swarm
END

; cse_visual properties
visual_name = monsters\dog\dog_white               => visuel, cf. le dossier gamedata\meshes\monster\xxxx\xxxxx

; cse_alife_creature_abstract properties              => inconnu
g_team = 0
g_squad = 1
g_group = 14
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =

upd:health = 1                                               => statut, si on remplace 1 par 0, le chien apparaitra mort
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 103.410903930664,1.08417475223541,472.350433349609                    => coordonnées d'apparition du chien
upd:o_model = 0
upd:o_torso = -0.00269026355817914,-0.0192443951964378,0                         
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 14

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535                         => ne pas modifier
upd:prev_game_vertex_id = 65535                         => ne pas modifier
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_ph_skeleton properties

; cse_alife_monster_base properties

; se_monster properties


Pour chaque chien créé, on utilisera un nouveau nom et un jeu de coordonnée unique.
On peut faire varier l'apparence du chien et bien entendu son type dog_normal, dog_weak et dog_strong qui correspondent à différents niveaux de résistance.

Dans ce cas présent, le way_l01_escape.ltx sera modifié. On attend donc pour compiler son all.spawn.

Maintenant, il faut attribué un gulag au ST. Le gulag est composé de plusieurs fichiers qui décrivent et appelent les comportements qu'auront les entités au sein du ST.

Gamedata\scripts\gulag_escape.scripts

Code : Tout sélectionner

local t = {}

function load_job(sj, gname, type, squad, groups)              => fonction qui permet de définir l'appel des logics selon le type de ST


if type == "esc_dogs_swarm" then                                    => si le ST est bien le "esc_dogs_swarm", alors on appel les logic@esc_dogs_swarm1...
      t = { section = "logic@esc_dogs_swarm1",         => nom du logic que l'on appel (il sera dans le gamedata\config\misc\gulag_escape.ltx
         idle = 0,                                               => inconnu, ne pas modifier
         prior = 5,                                             => correspond à une priorité si le ST change d'état (state); on peut aussi supposer que + la priorité sera grande, + les pnj/mutants auront tendance à occuper ce poste en premier (peut être utile si on veut placer des gardes en priorité sur un ST)
                        state = {0},                                         => état du ST: 0=offline; 1 = online pendant la nuit; 2 = online pendant le jour; 3=online ****voir définition de on/offline après
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm1",
         idle = 0,
         prior = 5, state = {0},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)

      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm3",
         idle = 0,
         prior = 5, state = {1},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)

      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
      t = { section = "logic@esc_dogs_swarm2",
         idle = 0,
         prior = 5, state = {2},
         online = true,
         in_rest = "", out_rest = ""
      }
      table.insert(sj, t)
   end
end


Le fait que la même chose soit répétée x fois peut être lié à la capacité réelle du smart_terrain, en effet, on défini une capacité à 4 chiens, mais si on décide arbitrairement d'augmenter cette valeur, que se passera-t-il? On peut supposer que ceci évite de saturer le smart_terrain lors des respawns successifs de mutants.

Toujours dans le même fichier, les fonctions suivantes:

Code : Tout sélectionner

function load_states(gname, type)                            => on charge l'état du ST par cette fonction (jour, nuit etc), je ne comprend pas trop cette fonction pour le moment
   if type == "esc_dogs_swarm" then
      return function(gulag)
         if game.get_game_time():diffSec(gulag.stateBegin) > 900 then
            if gulag.state == 0 then
               return 1
            elseif gulag.state == 1 then
               return 2
            elseif gulag.state == 2 then
               return 0
            end
         else
            return gulag.state
         end
   end
end

function load_ltx(gname, type)                                                  => fonction indispensable, ne pas dupliquer, ne pas modifier!!!! Un seul exemplaire par fichier
   return nil
end

function checkMonster(npc_community, gulag_type)                      => fonction qui vérifie que ce sont bien des chiens qui occupent un ST réservé au chien (comme défini dans le all.spawn)
   if gulag_type == "esc_dogs_swarm" then
      return npc_community == "dog"
   end
end


Attention, chaque fonctions dans un fichier gulag existant contient un ensemble de formule de type if ..... end : ne pas rompre une fonction existante, attention à l'enchainement...

A ce niveau, nous avons généré un ST, des mutants et un gulag.script qui doit appeler le(les) logic attribué(s).
Celle-ci est défini dans un second fichier gulag_escape, mais au format .ltx (gamedata\config\misc).

gamedata\config\misc\gulag_escape.ltx

Code : Tout sélectionner

[logic@esc_dogs_swarm1]
active = mob_home@esc_dogs_swarm1

[mob_home@esc_dogs_swarm1]
path_home = path1
home_min_radius = 30
home_max_radius = 50


[logic@esc_dogs_swarm2]
active = mob_home@esc_dogs_swarm1

[mob_home@esc_dogs_swarm2]
path_home = path2
home_min_radius = 30
home_max_radius = 50


[logic@esc_dogs_swarm3]
active = mob_home@esc_dogs_swarm3

[mob_home@esc_dogs_swarm3]
path_home = path3
home_min_radius = 30
home_max_radius = 50


Dans ce fichier sont renseignés les logic@esc_dogs_swarm appelé par le gulag_escape.script.
Ce type de logic est classique pour les mutants et est aussi le logic le plus conseillé.

Dans cette situation, le "territoire" du chien est défini par un point central à savoir le path_home = path1.
Les coordonnées de ce point sont définies dans le way_l01_escape.ltx issu du all.spawn:

Code : Tout sélectionner

[esc_dogs_swarm_path1]
points = p0
p0:name = wp00
p0:position = 70.4155502319336,1.05413722991943,557.052917480469
p0:game_vertex_id = 217
p0:level_vertex_id = 362317

Remarque: le path1 ne se nomme pas tel quel dans le way_l01_escape, il y a une nomenclature particulière: esc_dogs_swarm_path1

L'attitude du chien sera d'attaquer les pnj et le joueur s'ils pénétrent le coeur de son territoire, ici la zone home_min_radius = 30, c'est à dire que le chien attaquera toute personne à moins de 30 mètres du path_home.

La logique semble défini sur le fait que le chien marche automatiquement vers le coeur de son territoire si un individu pénètre ce périmètre.

Ce phénomène peut être accentuer de la manière suivante:

Code : Tout sélectionner

[logic@esc_dogs_swarm1]
active = mob_home@esc_dogs_swarm1

[mob_home@esc_dogs_swarm1]
path_home = path1
home_min_radius = 15
home_max_radius = 30
aggressive_home
panic = 0


Le logic agressive_home fait que le chien retournera au coeur de son territoire en courant.
Le panic = 0 réduit sa peur au minimum, il attaquera donc dans tout les cas, qu'on lui tire dessus ou non.

Ceci exacerbe l'agressivité des mutants.

Il reste finalement un fichier qui spécifie les pnj ou mutants qui peuvent apparaitre sur une map:
gamedata\config\misc\smart_terrains_preset.ltx

Code : Tout sélectionner

[l01_escape]
stalker      = novice, experienced
military   = novice, experienced, veteran
bandit      = novice, experienced

boar      =   weak, normal
flesh      =   weak, normal
dog         =   weak, normal
pseudodog   =   weak

A titre d'exemple, il faudra ajouter ",strong" si l'on souhaite spawner un chien de type dog_strong sur ce smart_terrain et de manière plus général sur la map l01_escape.

Une fois tout ceci fini, on compile son all.spawn et on crée son gamedata avec les arborescences et fichiers nécessaires.

ATTENTION: Ce tutoriel est basé sur des données issu du jeu, rien ne sert de les utiliser tel quel, cela reviendrait à dupliquer des éléments que le moteur n'apprécierait pas forcément.
Si vous souhaitez l'utiliser, modifier l'ensemble des coordonnées surtout les noms de ST, des chiens spawnés, des logic et des path_home...


------------------------


Pour finir ce pavé dans les régles, voici la chose promise concernant les states 0 offline, 1 online de jour , 2 online de nuit et 3 online:
Spoiler: Montrer
Texte original issu du wiki gsc
Hi there, this is not a real entry but an link to a conversation on the GSC Forum. Barin has written interessting stuff about this topic. Here are some sentences:

To understand how it works, first you need to know that in stalker there are two types of entities: either something is on-line or off-line. If it is on-line (somewhere around actor, not further then alife radius), then it is controlled by so called object_binder or any class derived from object_binder (bind_*.script; for npcs - xr_motivator.script). There you can save data using save() method and load via load() method, however, data saved in binder will be lost if you change level (because such data is no more needed, like for instance what doors npcs opened - not needed since you are on a completely different level then that npc is).

Finally, no matter if object is on- or off-line, it is controlled by its server class (se_*.script). This class remembers all data you save, so that's what you are after. In short, first you need to define your own variable (pda_spawned) in constructor (in this case: se_stalker::__ini()). Then to access this property, you first need to get off-line object (instance of this class):

alife():object(npc:id())


will return pointer to object of se_stalker class.- quote Barin


Bref, ce qu'il faut comprendre de tout ceci, pour ce qui nous intéresse, c'est que le joueur ne peut pas voir tout ce qu'il se passe, et que même si le jeu évolue en même temps sur d'autre map, le moteur ne peut pas se permettre de tout contrôler comme dans l'environnement proche du joueur.
Ainsi, sont défini en ligne (ou online) ce qui est dans l'environnement proche du joueur, et offline ce qui ne l'est pas.

On pourrait donc se dire ceci:
A l'avant poste militaire du cordon, on pourrait définir le gulag sur l'état 0 (off line) où tout les pnj se calfeutrent dans les batiments et ne bougent plus (le moteur n'aura donc pas à gérer les patrouilles et autres détails : on s'en fiche, le joueur est à des années lumières).
A l'inverse, quand le joueur se rapproche (si il est sur la map, si l'avant poste est dans son champs de vision..), on aura alors les états 3 par défaut (online) qui attribuera une logic particulière aux différents pnj, et plus précisément des états 1 et 2 si on souhaite attribuer une logic différente entre le jour et la nuit.

Au final, c'est une manière de voir les choses et de les exprimer.

Edité le 08/11/11 19h15
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 21 nov. 2011, 18:49

Q: Et si je veux ajouter des smart_terrain et gulag dans un nouveau level, que faut il en plus?

R: Ceci:


Il faut inventorier le nouveau fichier gulag_nomdulevel.ltx dans le fichier gamedata\config\misc\gulag_tasks.ltx.

Il faut également ajouter le nom du level et les mutants incorporer dans le fichier gamedata\config\misc\smart_terrain_presets.ltx.

Finalement, si vous utilisez les types de smart_terrains general_lager et general_lair, il faut compléter les fichiers suivants dans gamedata\config\misc:

- general_lager.ltx --> type de pnj pour le nouveau level
- general_lair.ltx --> type de monstres pour le nouveau level

Le petit plus, de quoi contrôler d'éventuels fautes de frappes dans les fichiers .script:
http://www.smart-mod-manager.org/other/LuaChecker-0.2.7z
http://www.smart-mod-manager.org/other/LtxChecker_0.6.7z
(liens et outils non testés)

Précision concernant un fait cité dans la question précédente; pour quoi trouvons nous plusieurs logic appelé pour un unique smart_terrain:

Dans le gulag_nomdulevel.script

Code : Tout sélectionner

function load_job(sj, gname, type, squad, groups)
  local t = {}
  if type == "marsh_boars1" then
    t = { section = "logic@marsh_boars1_1", -- premier sanglier
      idle = 0, prior = 5, state = {0},
      squad = squad, group = groups[1],
      in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    t = { section = "logic@marsh_boars1_2", -- 2nd sanglier
      idle = 0, prior = 5, state = {0},
      squad = squad, group = groups[1],
      in_rest = "", out_rest = ""
    }
    table.insert(sj, t)

    ...

    t = { section = "logic@marsh_boars1_nth", -- nième sanglier
      idle = 0, prior = 5, state = {0},
      squad = squad, group = groups[1],
      in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
  end
end
.....            => voir question précédente


Dans le gulag_nomdulevel.ltx

Code : Tout sélectionner

-- marsh_boars1 smart terrain

[logic@marsh_boars1_1] ;-- 1st boar
active = mob_home@marsh_boars1_1

[mob_home@marsh_boars1_1] ;-- logic du 1er sanglier
...

[logic@marsh_boars1_2] ;-- 2st boar
active = mob_home@marsh_boars1_2

[mob_home@marsh_boars1_1] ;-- logic du 2nd sanglier
...

...

[logic@marsh_boars1_nth] ;-- nth boar
active = mob_home@marsh_boars1_nth

[mob_home@marsh_boars1_nth] ;-- logic du nième sanglier
...


Il semble que lorsqu'un seul logic est créé, les différents mutants auront tendance à vouloir prendre l'unique place qui est déjà occupé.
Ce qui a donc pour effet de conduire à des CTD intempestifs.
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
kahului
Mon Préciiiiiiiiieux
Mon Préciiiiiiiiieux
Messages : 2391
Inscription : 25 mars 2008, 07:49

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar kahului » 29 févr. 2016, 17:37

Bonsoir

Désolé ,j'ai oublié comment on remédie à cette erreur de décompilation du all.spawn:

Image

Heureusement j'ai toujours ce topic de référence en favori.
Comment je peux faire pour continuer et passer cette erreur,s'il vous plaît?

Avatar de l’utilisateur
Borovos
Controleur
Controleur
Messages : 3520
Inscription : 31 janv. 2010, 17:11
Contact :

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar Borovos » 29 févr. 2016, 17:59

Dans l'acdc.pl, il faut que tu trouves le bloc qui défini tous les items.

Spoiler: Montrer
package alife_object;
use strict;
use stkutils::data_packet;
use constant section_to_class => {
actor => 'se_actor', #clear sky modified

graph_point => 'cse_alife_graph_point',

stalker => 'se_stalker',
mar_csky_commander => 'se_stalker',

stalker_monolith => 'se_stalker',
stalker_zombied => 'se_stalker',
stalker_trader => 'se_stalker',
stalker_sakharov => 'se_stalker',
m_barman => 'se_stalker',
m_osoznanie => 'se_stalker',

m_trader => 'cse_alife_trader',

m_bloodsucker_e => 'se_monster',
bloodsucker_weak => 'se_monster',
bloodsucker_normal => 'se_monster',
bloodsucker_strong => 'se_monster',
bloodsucker_arena => 'se_monster',
bloodsucker_mil => 'se_monster',

m_boar_e => 'se_monster',
boar_weak => 'se_monster',
boar_normal => 'se_monster',
boar_strong => 'se_monster',

m_burer_e => 'se_monster',
burer_arena => 'se_monster',
m_burer_normal => 'se_monster',
m_burer_normal_black => 'se_monster',
burer_indoor => 'se_monster',
burer_outdoor => 'se_monster',

m_cat_e => 'se_monster',
cat_weak => 'se_monster',
cat_normal => 'se_monster',
cat_strong => 'se_monster',

m_chimera_e => 'se_monster',
chimera_weak => 'se_monster',
chimera_normal => 'se_monster',
chimera_strong => 'se_monster',

m_controller_e => 'se_monster',
m_controller_normal => 'se_monster',
m_controller_normal_fat => 'se_monster',
m_controller_old => 'se_monster',
m_controller_old_fat => 'se_monster',
controller_tubeman => 'se_monster',

m_crow => 'cse_alife_creature_crow',

m_dog_e => 'se_monster',
dog_weak => 'se_monster',
dog_normal => 'se_monster',
dog_strong => 'se_monster',

m_flesh_e => 'se_monster',
flesh_weak => 'se_monster',
flesh_normal => 'se_monster',
flesh_strong => 'se_monster',

m_fracture_e => 'se_monster',
fracture_normal => 'se_monster',
fracture_strong => 'se_monster',

m_gigant_e => 'se_monster',
gigant_normal => 'se_monster',
gigant_strong => 'se_monster',

m_phantom => 'cse_alife_creature_phantom',

m_poltergeist_e => 'se_monster',
m_poltergeist_normal => 'se_monster',
m_poltergeist_normal_tele => 'se_monster',
m_poltergeist_tele_outdoor => 'se_monster',
m_poltergeist_normal_flame => 'se_monster',
m_poltergeist_strong_flame => 'se_monster',

m_pseudodog_e => 'se_monster',
pseudodog_weak => 'se_monster',
pseudodog_normal => 'se_monster',
pseudodog_strong => 'se_monster',
pseudodog_arena => 'se_monster',
psy_dog => 'se_monster',
psy_dog_phantom => 'se_monster', # cse_alife_psy_dog_phantom really
psy_dog_radar => 'se_monster',

m_rat_e => 'se_monster',

m_snork_e => 'se_monster',
snork_weak => 'se_monster',
snork_normal => 'se_monster',
snork_strong => 'se_monster',
aes_snork => 'se_monster',
snork_arena => 'se_monster',
snork_indoor => 'se_monster',
snork_outdoor => 'se_monster',
snork_jumper => 'se_monster',

m_tushkano_e => 'se_monster',
m_tushkano_normal => 'se_monster',
tushkano_normal => 'se_monster',

m_zombie_e => 'se_monster',
zombie_weak => 'se_monster',
zombie_normal => 'se_monster',
zombie_strong => 'se_monster',
zombie_immortal => 'se_monster',

breakable_object => 'cse_alife_object_breakable',

search_light => 'cse_alife_object_projector',
physic_object => 'cse_alife_object_physic',
physic_destroyable_object => 'cse_alife_object_physic',
climable_object => 'cse_alife_object_climable',
lights_hanging_lamp => 'cse_alife_object_hanging_lamp',

inventory_box => 'cse_alife_inventory_box',

space_restrictor => 'cse_alife_space_restrictor',
sim_faction => 'se_sim_faction', #clear sky modified

script_zone => 'cse_alife_space_restrictor',
touch_zone => 'cse_alife_space_restrictor',

level_changer => 'se_level_changer',

zone_team_base => 'cse_alife_team_base_zone',

smart_terrain => 'se_smart_terrain',

respawn => 'se_respawn',

anomaly_field => 'se_anomaly_field',

zone_burning_fuzz => 'se_zone_visual',
zone_burning_fuzz1 => 'se_zone_visual',
zone_burning_fuzz_weak => 'se_zone_visual',
zone_burning_fuzz_average => 'se_zone_visual',
zone_burning_fuzz_strong => 'se_zone_visual',
zone_burning_fuzz_bottom_weak => 'se_zone_visual',
zone_burning_fuzz_bottom_average => 'se_zone_visual',
zone_burning_fuzz_bottom_strong => 'se_zone_visual',

zone_buzz => 'se_zone_anom',
zone_buzz_weak => 'se_zone_anom',
zone_buzz_average => 'se_zone_anom',
zone_buzz_strong => 'se_zone_anom',

zone_gravi_zone => 'se_zone_anom',
zone_gravi_zone_weak => 'se_zone_anom',
zone_gravi_zone_average => 'se_zone_anom',
zone_gravi_zone_strong => 'se_zone_anom',

zone_campfire_mp_nolight => 'cse_alife_anomalous_zone',
zone_campfire_grill => 'cse_alife_anomalous_zone',
campfire => 'cse_alife_anomalous_zone',

zone_flame => 'cse_alife_anomalous_zone',
zone_zhar => 'cse_alife_anomalous_zone',
zone_emi => 'cse_alife_anomalous_zone',
zone_flame_small => 'cse_alife_anomalous_zone',

zone_mincer => 'se_zone_anom',
zone_mincer_weak => 'se_zone_anom',
zone_mincer_weak_noart => 'se_zone_anom',
zone_mincer_average => 'se_zone_anom',
zone_mincer_strong => 'se_zone_anom',

zone_mine_field => 'cse_alife_anomalous_zone',

zone_death => 'cse_alife_anomalous_zone',

zone_monolith => 'cse_alife_anomalous_zone',

zone_mosquito_bald => 'se_zone_anom',
zone_mosquito_bald_weak => 'se_zone_anom',
zone_mosquito_bald_weak_noart => 'se_zone_anom',
zone_mosquito_bald_average => 'se_zone_anom',
zone_mosquito_bald_strong => 'se_zone_anom',
zone_mosquito_bald_strong_noart => 'se_zone_anom',

zone_no_gravity => 'cse_alife_anomalous_zone',

zone_radioactive => 'cse_alife_anomalous_zone',
zone_radioactive_weak => 'cse_alife_anomalous_zone',
zone_radioactive_average => 'cse_alife_anomalous_zone',
zone_radioactive_strong => 'cse_alife_anomalous_zone',
zone_radioactive_killing => 'cse_alife_anomalous_zone',

zone_teleport => 'cse_alife_anomalous_zone',
zone_teleport_out => 'cse_alife_anomalous_zone',
zone_teleport_monolith => 'cse_alife_anomalous_zone',

torrid_zone => 'cse_alife_torrid_zone',
fireball_zone => 'cse_alife_torrid_zone',

zone_witches_galantine => 'se_zone_anom',
zone_witches_galantine_weak => 'se_zone_anom',
zone_witches_galantine_average => 'se_zone_anom',
zone_witches_galantine_strong => 'se_zone_anom',
zone_witches_galantine_safe => 'se_zone_anom',

zone_zharka_static => 'se_zone_anom',
zone_zharka_static_weak => 'se_zone_anom',
zone_zharka_static_average => 'se_zone_anom',
zone_zharka_static_strong => 'se_zone_anom',

af_ameba_mica => 'cse_alife_item_artefact',
af_ameba_slug => 'cse_alife_item_artefact',
af_blood => 'cse_alife_item_artefact',
af_cristall_flower => 'cse_alife_item_artefact',
af_dummy_battery => 'cse_alife_item_artefact',
af_dummy_dummy => 'cse_alife_item_artefact',
af_dummy_glassbeads => 'cse_alife_item_artefact',
af_dummy_pellicle => 'cse_alife_item_artefact',
af_dummy_spring => 'cse_alife_item_artefact',
af_electra_flash => 'cse_alife_item_artefact',
af_electra_moonlight => 'cse_alife_item_artefact',
af_electra_sparkler => 'cse_alife_item_artefact',
af_fireball => 'cse_alife_item_artefact',
af_fuzz_kolobok => 'cse_alife_item_artefact',
af_gold_fish => 'cse_alife_item_artefact',
af_gravi => 'cse_alife_item_artefact',
af_medusa => 'cse_alife_item_artefact',
af_mincer_meat => 'cse_alife_item_artefact',
af_night_star => 'cse_alife_item_artefact',
'af_rusty_sea-urchin' => 'cse_alife_item_artefact',
af_vyvert => 'cse_alife_item_artefact',

bread => 'cse_alife_item',
bread_a => 'cse_alife_item',
kolbasa => 'cse_alife_item',
vodka => 'cse_alife_item',
vodka_a => 'cse_alife_item',
medkit => 'cse_alife_item',
conserva => 'cse_alife_item',
energy_drink => 'cse_alife_item',
antirad => 'cse_alife_item',
bandage => 'cse_alife_item',
medkit => 'cse_alife_item',
medkit_army => 'cse_alife_item',
medkit_scientic => 'cse_alife_item',
guitar_a => 'cse_alife_item',
hand_radio => 'cse_alife_item',

af_blood_tutorial => 'cse_alife_item_artefact',
quest_case_01 => 'cse_alife_item',
quest_case_02 => 'cse_alife_item',
pri_decoder_documents => 'cse_alife_item',
dar_document4 => 'cse_alife_item',
gunslinger_flash => 'cse_alife_item',
decoder => 'cse_alife_item',

novice_outfit => 'cse_alife_item_custom_outfit',
outfit_novice_m1 => 'cse_alife_item_custom_outfit',
bandit_outfit => 'cse_alife_item_custom_outfit',
outfit_bandit_m1 => 'cse_alife_item_custom_outfit',
dolg_outfit => 'cse_alife_item_custom_outfit',
outfit_dolg_m1 => 'cse_alife_item_custom_outfit',
dolg_scientific_outfit => 'cse_alife_item_custom_outfit',
exo_outfit => 'cse_alife_item_custom_outfit',
outfit_exo_m1 => 'cse_alife_item_custom_outfit',
killer_outfit => 'cse_alife_item_custom_outfit',
outfit_killer_m1 => 'cse_alife_item_custom_outfit',
monolit_outfit => 'cse_alife_item_custom_outfit',
specops_outfit => 'cse_alife_item_custom_outfit',
outfit_specnaz_m1 => 'cse_alife_item_custom_outfit',
military_outfit => 'cse_alife_item_custom_outfit',
stalker_outfit => 'cse_alife_item_custom_outfit',
outfit_stalker_m1 => 'cse_alife_item_custom_outfit',
outfit_stalker_m2 => 'cse_alife_item_custom_outfit',
svoboda_heavy_outfit => 'cse_alife_item_custom_outfit',
svoboda_light_outfit => 'cse_alife_item_custom_outfit',
outfit_svoboda_m1 => 'cse_alife_item_custom_outfit',
protection_outfit => 'cse_alife_item_custom_outfit',
ecolog_outfit => 'cse_alife_item_custom_outfit',

wpn_addon_scope => 'cse_alife_item',
wpn_addon_scope_susat => 'cse_alife_item',
wpn_addon_silencer => 'cse_alife_item',
wpn_addon_grenade_launcher => 'cse_alife_item',
wpn_addon_grenade_launcher_m203 => 'cse_alife_item',

grenade_f1 => 'cse_alife_item_grenade',
grenade_rgd5 => 'cse_alife_item_grenade',

'ammo_11.43x23_fmj' => 'cse_alife_item_ammo',
'ammo_11.43x23_hydro' => 'cse_alife_item_ammo',
ammo_12x70_buck => 'cse_alife_item_ammo',
ammo_12x76_dart => 'cse_alife_item_ammo',
ammo_12x76_zhekan => 'cse_alife_item_ammo',
ammo_16x70_buck => 'cse_alife_item_ammo',
ammo_16x70_kart => 'cse_alife_item_ammo',
ammo_16x70_zhekan => 'cse_alife_item_ammo',
'ammo_5.45x39_ap' => 'cse_alife_item_ammo',
'ammo_5.45x39_fmj' => 'cse_alife_item_ammo',
'ammo_5.56x45_ap' => 'cse_alife_item_ammo',
'ammo_5.56x45_ss190' => 'cse_alife_item_ammo',
'ammo_7.62x54_7h1' => 'cse_alife_item_ammo',
'ammo_7.62x54_7h14' => 'cse_alife_item_ammo',
'ammo_7.62x54_ap' => 'cse_alife_item_ammo',
'ammo_7.62x39_fmj' => 'cse_alife_item_ammo',
'ammo_7.62x39_ap' => 'cse_alife_item_ammo',
ammo_9x18_fmj => 'cse_alife_item_ammo',
ammo_9x18_pmm => 'cse_alife_item_ammo',
ammo_9x19_fmj => 'cse_alife_item_ammo',
ammo_9x19_pbp => 'cse_alife_item_ammo',
ammo_9x39_pab9 => 'cse_alife_item_ammo',
ammo_9x39_sp5 => 'cse_alife_item_ammo',
ammo_9x39_ap => 'cse_alife_item_ammo',
'ammo_vog-25' => 'cse_alife_item_ammo',
'ammo_vog-25p' => 'cse_alife_item_ammo',
ammo_m209 => 'cse_alife_item_ammo',
'ammo_og-7b' => 'cse_alife_item_ammo',
ammo_gauss => 'cse_alife_item_ammo',

explosive_barrel => 'cse_alife_item_explosive',
explosive_barrel_low => 'cse_alife_item_explosive',
explosive_dinamit => 'cse_alife_item_explosive',
explosive_fuelcan => 'cse_alife_item_explosive',
explosive_mobiltank => 'cse_alife_item_explosive',
explosive_tank => 'cse_alife_item_explosive',

mounted_weapon => 'cse_alife_mounted_weapon',
stationary_mgun => 'cse_alife_mounted_weapon',

wpn_binoc => 'cse_alife_item_weapon_magazined',
wpn_rpg7 => 'cse_alife_item_weapon_magazined',
wpn_pm => 'cse_alife_item_weapon_magazined',
wpn_pb => 'cse_alife_item_weapon_magazined',
wpn_fort => 'cse_alife_item_weapon_magazined',
wpn_fort_m1 => 'cse_alife_item_weapon_magazined',
wpn_walther => 'cse_alife_item_weapon_magazined',
wpn_walther_m1 => 'cse_alife_item_weapon_magazined',
wpn_beretta => 'cse_alife_item_weapon_magazined',
wpn_hpsa => 'cse_alife_item_weapon_magazined',
wpn_sig220 => 'cse_alife_item_weapon_magazined',
wpn_usp => 'cse_alife_item_weapon_magazined',
wpn_desert_eagle => 'cse_alife_item_weapon_magazined',
wpn_eagle_m1 => 'cse_alife_item_weapon_magazined',
wpn_colt1911 => 'cse_alife_item_weapon_magazined',
wpn_colt_m1 => 'cse_alife_item_weapon_magazined',
wpn_mp5 => 'cse_alife_item_weapon_magazined',
wpn_mp5_m1 => 'cse_alife_item_weapon_magazined',
wpn_mp5_m2 => 'cse_alife_item_weapon_magazined',
wpn_val => 'cse_alife_item_weapon_magazined',
wpn_val_m1 => 'cse_alife_item_weapon_magazined',
wpn_vintorez => 'cse_alife_item_weapon_magazined_w_gl',
wpn_svd => 'cse_alife_item_weapon_magazined',
wpn_svd_m1 => 'cse_alife_item_weapon_magazined',
wpn_svu => 'cse_alife_item_weapon_magazined',
wpn_ak74u => 'cse_alife_item_weapon_magazined_w_gl', #clear sky modified
wpn_ak74u_m1 => 'cse_alife_item_weapon_magazined',
wpn_gauss => 'cse_alife_item_weapon_magazined',
wpn_groza => 'cse_alife_item_weapon_magazined_w_gl',
wpn_groza1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_groza_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_l85 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_l85_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_l85_m2 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_lr300 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_lr300_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_sig550 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_sig_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_sig_m2 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_ak74 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_ak74_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_abakan => 'cse_alife_item_weapon_magazined_w_gl',
wpn_abakan_m1 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_abakan_m2 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_fn2000 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_toz34 => 'cse_alife_item_weapon_shotgun',
wpn_spas12 => 'cse_alife_item_weapon_shotgun',
wpn_spas12_m1 => 'cse_alife_item_weapon_shotgun',
wpn_wincheaster1300 => 'cse_alife_item_weapon_shotgun',
wpn_winchester_m1 => 'cse_alife_item_weapon_shotgun',
wpn_bm16 => 'cse_alife_item_weapon_shotgun',
wpn_bm16_full => 'cse_alife_item_weapon_shotgun',
'wpn_rg-6' => 'cse_alife_item_weapon_shotgun',
wpn_rg6_m1 => 'cse_alife_item_weapon_shotgun',
hunters_toz => 'cse_alife_item_weapon_shotgun',

m_car => 'cse_alife_car',
helicopter => 'cse_alife_helicopter',

turret_mgun => 'se_turret_mgun',

#clear sky new
smart_cover => 'cse_smart_cover',
wpn_vintorec => 'cse_alife_item_weapon_magazined_w_gl',
zone_mine_gravitational_weak => 'se_zone_anom',
zone_mine_gravitational_average => 'se_zone_anom',
zone_mine_gravitational_strong => 'se_zone_anom',
zone_mine_thermal_weak => 'se_zone_anom',
zone_mine_thermal_average => 'se_zone_anom',
zone_mine_thermal_strong => 'se_zone_anom',
zone_mine_thermal_firetube => 'se_zone_anom',
zone_mine_electric_weak => 'se_zone_anom',
zone_mine_electric_average => 'se_zone_anom',
zone_mine_electric_strong => 'se_zone_anom',
zone_mine_acidic_weak => 'se_zone_anom',
zone_mine_acidic_average => 'se_zone_anom',
zone_mine_acidic_strong => 'se_zone_anom',

mar_csky_trader => 'se_stalker',
mar_csky_tech => 'se_stalker',
mar_csky_scientist => 'se_stalker',
mar_csky_barman => 'se_stalker',
mar_csky_tutorial_man => 'se_stalker',
mar_csky_tactic => 'se_stalker',

esc_stalker_guard_east_bridge => 'se_stalker',
esc_stalker_guard_west_bridge => 'se_stalker',
esc_leader_stalkerbase => 'se_stalker',
esc_trader_stalkerbase => 'se_stalker',
esc_tech_stalkerbase => 'se_stalker',
esc_wolf => 'se_stalker',
esc_zak_stalkerbase => 'se_stalker',
esc_driver => 'se_stalker',
esc_military_secret_trader => 'se_stalker',
esc_story_military => 'se_stalker',
esc_zak_stalkerbase_2 => 'se_stalker',
esc_military_general => 'se_stalker',
esc_wolf_brother => 'se_stalker',

agr_duty_base_trader => 'se_stalker',
agr_stalker_base_trader => 'se_stalker',
agr_secret_trader => 'se_stalker',
agr_holeman => 'se_stalker',
agr_snork_hole_1 => 'se_monster',
agr_snork_hole_2 => 'se_monster',
agr_snork_hole_3 => 'se_monster',
agr_snork_hole_4 => 'se_monster',
agr_snork_hole_5 => 'se_monster',
agr_snork_hole_6 => 'se_monster',
agr_snork_hole_7 => 'se_monster',
agr_snork_hole_8 => 'se_monster',
agr_snork_hole_9 => 'se_monster',
agr_snork_jumper_1 => 'se_monster',
agr_snork_jumper_2 => 'se_monster',
agr_snork_jumper_3 => 'se_monster',
agr_stalker_base_mechanic => 'se_stalker',
agr_stalker_base_leader => 'se_stalker',
agr_stalker_zombied_1_default => 'se_stalker',
agr_bloodsucker_home => 'se_monster',
agr_scientists_bloodsucker => 'se_monster',
agr_weaponmaster => 'se_stalker',
agr_barman => 'se_stalker',
agr_bar_stalker_1 => 'se_stalker',
agr_bar_stalker_2 => 'se_stalker',
agr_bar_stalker_3 => 'se_stalker',
agr_bar_stalker_4 => 'se_stalker',
agr_bar_stalker_5 => 'se_stalker',
agr_stalker_commander_1 => 'se_stalker',
agr_stalker_commander_2 => 'se_stalker',
agr_dog_01 => 'se_monster',
agr_dog_02 => 'se_monster',
agr_dog_03 => 'se_monster',
agr_dog_04 => 'se_monster',
agr_dog_05 => 'se_monster',
agr_dog_06 => 'se_monster',
agr_dog_07 => 'se_monster',
agr_dog_08 => 'se_monster',
agr_dog_09 => 'se_monster',
agr_dog_10 => 'se_monster',
agr_dolg_blockpost_commander => 'se_stalker',

gar_digger_messenger_man => 'se_stalker',
gar_bandit_barman => 'se_stalker',
gar_bandit_fixer => 'se_stalker',
gar_bandit_leader => 'se_stalker',
gar_bandit_trader => 'se_stalker',
gar_bandit_minigame => 'se_stalker',
gar_bandit_senya => 'se_stalker',
gar_bandit_ambush_1 => 'se_stalker',
gar_bandit_ambush_2 => 'se_stalker',
gar_bandit_robber_1 => 'se_stalker',
gar_bandit_robber_2 => 'se_stalker',
gar_digger_conc_camp_prisoner_1 => 'se_stalker',
gar_digger_conc_camp_prisoner_2 => 'se_stalker',
gar_digger_conc_camp_searcher_1 => 'se_stalker',
gar_digger_conc_camp_searcher_2 => 'se_stalker',
gar_digger_conc_camp_searcher_3 => 'se_stalker',
gar_digger_fighter_1 => 'se_stalker',
gar_digger_fighter_2 => 'se_stalker',
gar_digger_fighter_3 => 'se_stalker',
gar_digger_fighter_4 => 'se_stalker',
gar_digger_fighter_5 => 'se_stalker',
gar_digger_quester => 'se_stalker',
gar_digger_fixer => 'se_stalker',
gar_digger_traitor => 'se_stalker',
gar_digger_smuggler => 'se_stalker',
gar_bandit_digger_traitor => 'se_stalker',
gar_dead_camp_snork => 'se_monster',

default_duty => 'se_stalker',
default_freedom => 'se_stalker',
default_bandit => 'se_stalker',
default_stalker => 'se_stalker',
stalker_regular => 'se_stalker',
sim_default_duty_0 => 'se_stalker',
sim_default_duty_1 => 'se_stalker',
sim_default_duty_2 => 'se_stalker',
sim_default_duty_3 => 'se_stalker',
sim_default_duty_4 => 'se_stalker',
sim_default_monolith_0 => 'se_stalker',
sim_default_monolith_1 => 'se_stalker',
sim_default_monolith_2 => 'se_stalker',
sim_default_monolith_3 => 'se_stalker',
sim_default_monolith_4 => 'se_stalker',
sim_default_freedom_0 => 'se_stalker',
sim_default_freedom_1 => 'se_stalker',
sim_default_freedom_2 => 'se_stalker',
sim_default_freedom_3 => 'se_stalker',
sim_default_freedom_4 => 'se_stalker',
sim_default_bandit_0 => 'se_stalker',
sim_default_bandit_1 => 'se_stalker',
sim_default_bandit_2 => 'se_stalker',
sim_default_bandit_3 => 'se_stalker',
sim_default_bandit_4 => 'se_stalker',
sim_default_renegade_0 => 'se_stalker',
sim_default_renegade_1 => 'se_stalker',
sim_default_renegade_2 => 'se_stalker',
sim_default_csky_0 => 'se_stalker',
sim_default_csky_1 => 'se_stalker',
sim_default_csky_2 => 'se_stalker',
sim_default_csky_3 => 'se_stalker',
sim_default_csky_4 => 'se_stalker',
sim_default_stalker_0 => 'se_stalker',
sim_default_stalker_1 => 'se_stalker',
sim_default_stalker_2 => 'se_stalker',
sim_default_stalker_3 => 'se_stalker',
sim_default_stalker_4 => 'se_stalker',
sim_default_military_0 => 'se_stalker',
sim_default_military_1 => 'se_stalker',
sim_default_military_2 => 'se_stalker',
sim_default_military_3 => 'se_stalker',
sim_default_military_3_sniper => 'se_stalker',
sim_default_military_4 => 'se_stalker',
sim_default_killer_0 => 'se_stalker',
sim_default_killer_1 => 'se_stalker',
sim_default_killer_2 => 'se_stalker',
sim_default_killer_3 => 'se_stalker',
sim_default_killer_4 => 'se_stalker',
sim_default_digger_0 => 'se_stalker',
sim_default_digger_1 => 'se_stalker',
sim_default_digger_2 => 'se_stalker',
sim_default_digger_3 => 'se_stalker',
sim_default_digger_4 => 'se_stalker',
arena_first_battle_stalker_1 => 'se_stalker',
arena_first_battle_ally_stalker_1 => 'se_stalker',
arena_second_battle_stalker_1 => 'se_stalker',
arena_second_battle_stalker_1_boss => 'se_stalker',
arena_third_battle_stalker_1 => 'se_stalker',
arena_third_battle_stalker_1_boss => 'se_stalker',
arena_fourth_battle_stalker_1 => 'se_stalker',
arena_fourth_battle_stalker_2 => 'se_stalker',
arena_fourth_battle_stalker_3 => 'se_stalker',
arena_fourth_battle_stalker_4 => 'se_stalker',
arena_fourth_battle_stalker_5 => 'se_stalker',
arena_survival_spawn => 'se_stalker',
arena_survival_spawn1 => 'se_stalker',
arena_survival_spawn2 => 'se_stalker',
pl_test_sect => 'se_stalker',
pl_test_sect1 => 'se_stalker',

val_freedom_blockpost_guard_north_1 => 'se_stalker',
val_freedom_blockpost_guard_north_2 => 'se_stalker',
val_freedom_blockpost_guard_leader_north => 'se_stalker',
val_freedom_blockpost_guard_south_1 => 'se_stalker',
val_freedom_blockpost_guard_south_2 => 'se_stalker',
val_freedom_blockpost_guard_leader_south => 'se_stalker',
val_freedom_deadblockpost_guard_1 => 'se_stalker',
val_freedom_deadblockpost_guard_2 => 'se_stalker',
val_freedom_deadblockpost_guard_3 => 'se_stalker',
val_freedom_deadblockpost_guard_4 => 'se_stalker',
val_freedom_deadblockpost_guard_5 => 'se_stalker',
sim_default_freedom_sniper => 'se_stalker',
val_killer_sniper_1 => 'se_stalker',
val_killer_sniper_2 => 'se_stalker',
val_killer_sniper_3 => 'se_stalker',
val_killer_sniper_4 => 'se_stalker',
val_killer_sniper_5 => 'se_stalker',
val_killer_sniper_6 => 'se_stalker',
val_killer_sniper_7 => 'se_stalker',
val_killer_sniper_8 => 'se_stalker',
val_killer_sniper_9 => 'se_stalker',
val_killer_sniper_10 => 'se_stalker',
val_killer_1 => 'se_stalker',
val_killer_2 => 'se_stalker',
val_killer_3 => 'se_stalker',
val_killer_4 => 'se_stalker',
val_killer_5 => 'se_stalker',
val_killer_6 => 'se_stalker',
val_killer_7 => 'se_stalker',
val_killer_8 => 'se_stalker',
val_killer_9 => 'se_stalker',
val_killer_10 => 'se_stalker',
val_freedom_attack_1 => 'se_stalker',
val_freedom_attack_2 => 'se_stalker',
val_freedom_attack_3 => 'se_stalker',
val_freedom_attack_4 => 'se_stalker',
val_freedom_attack_commander => 'se_stalker',
val_freedom_attack_6 => 'se_stalker',
val_freedom_attack_7 => 'se_stalker',
val_freedom_attack_8 => 'se_stalker',
val_freedom_attack_9 => 'se_stalker',
val_freedom_attack_10 => 'se_stalker',
val_freedom_trader => 'se_stalker',
val_freedom_barmen => 'se_stalker',
val_bandit_spy_1 => 'se_stalker',
val_bandit_spy_2 => 'se_stalker',
val_bandit_spy_3 => 'se_stalker',
val_bandit_spy_4 => 'se_stalker',

m_lesnik => 'cse_alife_trader',
stalker_die_hard => 'se_stalker',
stalker_strelok => 'se_stalker',

device_pda_fang => 'cse_alife_item_pda',
esc_trader_habar => 'cse_alife_item_pda',
device_pda_military => 'cse_alife_item_pda',
device_pda_old => 'cse_alife_item_pda',
device_pda_garbage_traitor => 'cse_alife_item_pda',
device_pda_comendant => 'cse_alife_item_pda',
device_pda_freedom => 'cse_alife_item_pda',
device_pda_bloodsucker => 'cse_alife_item_pda',
device_pda_digger => 'cse_alife_item_pda',
red_forest_pda_map => 'cse_alife_item_pda',
# mar_quest_wpn_pm_1]:wpn_pm
# mar_quest_wpn_ak74u_1]:wpn_ak74u
# mar_quest_af_cristall_flower_1]:af_cristall_flower
mar_quest_scout_pda => 'cse_alife_item_pda',
# mar_quest_novice_outfit_1]:novice_outfit
# mil_quest_af_fuzz_kolobok]:af_fuzz_kolobok
mil_device_pda_lost_squard => 'cse_alife_item_pda',
esc_quest_magic_vodka => 'cse_alife_item_pda',
# esc_quest_akm47]:wpn_ak74
# esc_quest_luky_detector]:detector_simple
esc_quest_spec_medkit => 'cse_alife_item_pda',
esc_device_pda_driver => 'cse_alife_item_pda',
esc_mechanic_flash_card_1 => 'cse_alife_item_pda',
esc_mechanic_flash_card_2 => 'cse_alife_item_pda',
esc_mechanic_flash_card_3 => 'cse_alife_item_pda',
esc_mechanic_flash_card_4 => 'cse_alife_item_pda',
# gar_quest_wpn_wincheaster1300]:wpn_wincheaster1300
# gar_quest_wpn_desert_eagle]:wpn_desert_eagle
gar_quest_vodka_2 => 'cse_alife_item_pda',
# gar_quest_novice_outfit]:novice_outfit
# gar_quest_wpn_pm]:wpn_pm
# val_quest_scope_x8]:wpn_addon_scope
# val_quest_flash_movies]:dev_flash_2
# val_quest_guitar_serg]:guitar_a
# agr_quest_wpn_spas12]:wpn_spas12
agr_quest_duty_secret_pda => 'cse_alife_item_pda',
agr_quest_duty_case => 'cse_alife_item_pda',
# agr_quest_duty_abakan]:wpn_abakan
agr_pda_for_secret_trader => 'cse_alife_item_pda',
agr_map_animals => 'cse_alife_item_pda',
agr_mechanic_pda => 'cse_alife_item_pda',
# yan_quest_ammo_sleep]:ammo_7.62x54_ap
# yan_quest_scarlet_flower]:af_electra_flash
yan_quest_granade => 'cse_alife_item_pda',
red_forest_pda_map_2 => 'cse_alife_item_pda',
# red_quest_tank_minigun]:wpn_pkm
red_quest_prototipe_device => 'cse_alife_item_pda',

anomal_zone => 'cse_alife_space_restrictor',

zone_field_thermal_weak => 'cse_alife_anomalous_zone',
zone_field_thermal_average => 'cse_alife_anomalous_zone',
zone_field_thermal_strong => 'cse_alife_anomalous_zone',
zone_field_radioactive_weak => 'cse_alife_anomalous_zone',
zone_field_radioactive_average => 'cse_alife_anomalous_zone',
zone_field_radioactive_strong => 'cse_alife_anomalous_zone',
zone_field_psychic_weak => 'cse_alife_anomalous_zone',
zone_field_psychic_average => 'cse_alife_anomalous_zone',
zone_field_psychic_strong => 'cse_alife_anomalous_zone',
zone_field_acidic_weak => 'cse_alife_anomalous_zone',
zone_field_acidic_average => 'cse_alife_anomalous_zone',
zone_field_acidic_strong => 'cse_alife_anomalous_zone',
zone_mine_field_no_damage => 'cse_alife_anomalous_zone',
zone_mine_field_strong => 'cse_alife_anomalous_zone',

balon_01 => 'cse_alife_object_physic',
museum_ammo_12x70_buck => 'cse_alife_object_physic',
museum_ammo_545x39_fmj => 'cse_alife_object_physic',
museum_ammo_762x54_7h14 => 'cse_alife_object_physic',
museum_abakan => 'cse_alife_object_physic',
museum_ak74 => 'cse_alife_object_physic',
museum_ak74u => 'cse_alife_object_physic',
museum_groza => 'cse_alife_object_physic',
museum_lr300 => 'cse_alife_object_physic',
museum_rg6 => 'cse_alife_object_physic',
museum_rpg7 => 'cse_alife_object_physic',
museum_sig550 => 'cse_alife_object_physic',
museum_spas12 => 'cse_alife_object_physic',
museum_svd => 'cse_alife_object_physic',
museum_bm16 => 'cse_alife_object_physic',
museum_toz34 => 'cse_alife_object_physic',
museum_val => 'cse_alife_object_physic',
museum_vintorez => 'cse_alife_object_physic',
museum_winchester1300 => 'cse_alife_object_physic',
balon_01 => 'cse_alife_object_physic',
balon_02 => 'cse_alife_object_physic',
balon_02a => 'cse_alife_object_physic',
bidon => 'cse_alife_object_physic',
bochka_close_1 => 'cse_alife_object_physic',
bochka_close_2 => 'cse_alife_object_physic',
bochka_close_3 => 'cse_alife_object_physic',
bochka_close_4 => 'cse_alife_object_physic',
banka_kraski_1 => 'cse_alife_object_physic',
kanistra_01 => 'cse_alife_object_physic',
tiski => 'cse_alife_object_physic',
kanistra_02 => 'cse_alife_object_physic',
vedro_01 => 'cse_alife_object_physic',
notebook => 'cse_alife_object_physic',
priemnik_gorizont => 'cse_alife_object_physic',
rupor => 'cse_alife_object_physic',
transiver => 'cse_alife_object_physic',
tv_1 => 'cse_alife_object_physic',
table_lamp_01 => 'cse_alife_object_physic',
komp_monitor => 'cse_alife_object_physic',
komp_klava => 'cse_alife_object_physic',
komp_block => 'cse_alife_object_physic',
bottle_3l => 'cse_alife_object_physic',
freezer => 'cse_alife_object_physic',
bludo => 'cse_alife_object_physic',
kastrula => 'cse_alife_object_physic',
kastrula_up => 'cse_alife_object_physic',
krujka => 'cse_alife_object_physic',
lojka => 'cse_alife_object_physic',
miska => 'cse_alife_object_physic',
tarelka1 => 'cse_alife_object_physic',
tarelka2 => 'cse_alife_object_physic',
teapot_1 => 'cse_alife_object_physic',
kolyaska_01 => 'cse_alife_object_physic',
kolyaska_01_braked => 'cse_alife_object_physic',
kolyaska_wheel_01_braked => 'cse_alife_object_physic',
wheel_litter_01 => 'cse_alife_object_physic',
wheel_litter_01_braked => 'cse_alife_object_physic',
med_stolik_01 => 'cse_alife_object_physic',
shooting_target_1 => 'cse_alife_object_physic',

agru_door => 'cse_alife_object_physic',
red_forest_bridge => 'cse_alife_object_physic',

detector_simple => 'cse_alife_item_detector',
detector_elite => 'cse_alife_item_detector',

flesh_up_ac_mp5 => 'cse_alife_item_pda',
flesh_up_bd_mp5 => 'cse_alife_item_pda',
flesh_up_a_novice_outfit => 'cse_alife_item_pda',
flesh_up_ac_wincheaster1300 => 'cse_alife_item_pda',
flesh_up_bd_wincheaster1300 => 'cse_alife_item_pda',
flesh_up_ac_ak74u => 'cse_alife_item_pda',
flesh_up_fh_scientific_outfit => 'cse_alife_item_pda',
flesh_up_aceg_scientific_outfit => 'cse_alife_item_pda',
flesh_up_bdfh_scientific_outfit => 'cse_alife_item_pda',
flesh_up_ab_svu => 'cse_alife_item_pda',
flesh_up_cd_svu => 'cse_alife_item_pda',
flesh_up_abcd_svu => 'cse_alife_item_pda',
flesh_up_ab_pkm => 'cse_alife_item_pda',
flesh_up_cd_pkm => 'cse_alife_item_pda',
flesh_up_abcd_pkm => 'cse_alife_item_pda',
flesh_up_ac_desert_eagle => 'cse_alife_item_pda',
flesh_up_bd_desert_eagle => 'cse_alife_item_pda',
flesh_up_ac_spas12 => 'cse_alife_item_pda',

lights_signal_light => 'cse_alife_object_hanging_lamp',

explosive_hide => 'cse_alife_item_explosive',
explosive_grenade => 'cse_alife_item_explosive',

af_compass => 'cse_alife_item_artefact',

#Le temps du changement
zone_mine_steam_average => 'se_zone_anom',
zone_mine_steam_strong => 'se_zone_anom',
veh_zaz => 'cse_alife_car',
veh_zaz_968 => 'cse_alife_car',
veh_zil_130 => 'cse_alife_car',
veh_tr13 => 'cse_alife_car',
veh_uaz => 'cse_alife_car',
veh_uaz_01 => 'cse_alife_car',
veh_niva_g => 'cse_alife_car',
veh_niva_w => 'cse_alife_car',
veh_moskvich => 'cse_alife_car',
veh_moskvich_1 => 'cse_alife_car',
veh_kamaz => 'cse_alife_car',
veh_uaz_buhanka => 'cse_alife_car',
veh_kavz => 'cse_alife_car',
veh_laz => 'cse_alife_car',
veh_gaz => 'cse_alife_car',
vehicle_kamaz_nopricep => 'cse_alife_car',
veh_btr => 'cse_alife_car',
veh_btr_0 => 'cse_alife_car',
veh_bmp2 => 'cse_alife_car',
veh_kamaz_arma => 'cse_alife_car',

generator_torrid => 'cse_alife_torrid_zone',
generator_electra => 'se_zone_anom',
generator_dust => 'cse_alife_torrid_zone',
zone_sarcofag => 'cse_alife_anomalous_zone',
bloodsucker_night_king => 'se_monster',
fracture_weak => 'se_monster',
bloodsucker_fast => 'se_monster',
gigant_large_strong => 'se_monster',
fireball_electric_zone => 'cse_alife_torrid_zone',
bloodsucker_redforest => 'se_monster',
burer_strong => 'se_monster',
af_baloon => 'cse_alife_item_artefact',
af_cristall => 'cse_alife_item_artefact',
af_ice => 'cse_alife_item_artefact',
zombie_trup2 => 'se_monster',
electro_chimera => 'se_monster',
ecolog_outfit_silver => 'cse_alife_item_custom_outfit',
wpn_g36 => 'cse_alife_item_weapon_magazined_w_gl',
wpn_pkm => 'cse_alife_item_weapon_magazined_w_gl',
ammo_pkm_100 => 'cse_alife_item_ammo',
af_soul => 'cse_alife_item_artefact',
af_glass => 'cse_alife_item_artefact',
af_eye => 'cse_alife_item_artefact',
fireball_acidic_zone => 'cse_alife_torrid_zone',
wpn_m1000 => 'cse_alife_item_weapon_magazined_w_gl',
lx8_service_instruction => 'cse_alife_item_pda',
zat_a23_gauss_rifle_docs => 'cse_alife_item_pda',
rat_1 => 'se_monster',
rat_3 => 'se_monster',
rat_4 => 'se_monster',
pri_a19_lab_x16_info => 'cse_alife_item_pda',
x17_doc => 'cse_alife_item_pda',
pri_a19_lab_x10_info => 'cse_alife_item_pda',
x10_doc => 'cse_alife_item_pda',
jup_a9_delivery_info => 'cse_alife_item_pda',


};


Et que tu ajoutes ton item en trouvant la class qui va avec.
donc tu peux commencer par ça:

baton_b => 'cse_alife_item',


En cherchant dans le gamedata du mod, tu auras surement le [baton_b] défini dans un des .ltx du dossier configs. Avec ça et au vue des propriétés de l'objet, tu peux déjà t'orienter sur le type d'item, une arme, un explosif, une combi, un mutant, une zone anormale etc.
C'est un jeu de piste en fait et des fois c'est impossible à résoudre.

Et ça deviendra de plus en plus dur vu qu'avec le code source les moddeurs peuvent totalement revoir les "class" d'objets.
"Je ne connaitrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi..." Litanie contre la peur, F. Herbert

Avatar de l’utilisateur
kahului
Mon Préciiiiiiiiieux
Mon Préciiiiiiiiieux
Messages : 2391
Inscription : 25 mars 2008, 07:49

Re: [SOC] Le Tutoriel modding - Question/Réponse

Messagepar kahului » 29 févr. 2016, 20:05

Ah merci beaucoup!
Cet objet est passé ,mais bloqué au suivant.
Je me souviens maintenant comment on fait ,toujours grâce à tes précieuses indications,merci!
Bonne soirée

:biere: :biere:


Revenir vers « Mapping & modding »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron