WB [Warband]Tutoriel:Ajouter une nouvelle arme/armure en utilisant le module_system

Users who are viewing this thread

Bonjour ( et encore un tutoriel)
Je part du principe que vous venez de télécharger/créer des items pour warband et vous voulez créer un mod avec ces items.
Ce tuto vas vous apprendre a ajouter ces items au module_system.

Necessaire pour acomplir cette tache:
Le module_system de warband ou du mod de votrez choix
OpenBrf pour visualiser les items et le nom des mesh
De la patience  :roll:

Pour ajouter des items vous aller travailler avec module_items.py et openBrf.

Petit résumé de la situation:
Je présume que vous venez de voir un pack avecs plein d'armes/armures intéressantes mais ils y a un hic, pas de fichier itemkinds.txt pour vous aider et vous paniquez ( je parle par expérience perso ).
Le pack contiens des fichiers "machin".dds et "truc".brf et vous ne savez pas quoi en faire, bref ce petit tuto écrit par un débutant et pour les débutant va (essayer de) vous aider (dsl pour le manque d'images).

Pour commencer:
--> Que sont les fichiers .dds?
Les fichiers .dds sont les textures qui vont être appliqués sur les armes/armures contenues dans le .brf

---> C'est quoi un fichier .brf?
Un fichier .brf c'est un fichier qui contient les informations a propos des armes/armures et des textures qui leur sont assignées.

--> Ou dois-je mettre un fichier .dds et un fichier .brf
Les .dds doivent aller dans le dossier Texture du mod de votre choix et les fichiers .brf dans le dossier Resource du meme mod.

--> Une fois que j'ai mis les fichiers aux endroits correspondants que dois-je faire?
Il faut ajouter une entrée dans module.ini pour que le jeu puisse lire le .brf et les textures

-->Comment je crée cette entrée?
ouvrez le module.ini et vers la fin ( entre load_resource = town_houses_e et works_with_version_min  = (peut contenir divers nombres)
vous ajoutez une nouvelle entrée load_module_resource = (ici le nom du .brf) par exemple si le brf s'appele fort.brf l'entrée s'appele load_module_resource = fort.
Vérifiez que:
scan_module_textures = 1
scan_module_resource = 1
et aprés enregistrez les modifications aportés.

--> J'ai fait tout ça et les items ne sont toujours pas disponibles. Pourquoi?
Les items ne sont pas disponibles car vous ne les avez pas encore crées, vous avez leus modele et leurs textures et maintenant il faut les créer.

---> Comment je crée les items?

Ouvrez votre module_items.py avec un editeur de texte ( notepad c'est le meilleur a ma conaissance et c'est gratuit)
Vous aller voir un paquet de codes mais n'aillez pas peur (surtout ne touchez a rien si vous ne savez pas a quoi ça sert!)

Exemple du code d'une arme:

Code:
["tutorial_sword", "Sword", [("long_sword",0),("scab_longsw_a", ixmesh_carry)], itp_type_one_handed_wpn|itp_primary, itc_longsword|itcf_carry_sword_left_hip|itcf_show_holster_when_drawn, 0 , weight(1.5)|difficulty(0)|spd_rtng(100) | weapon_length(102)|swing_damage(18 , cut) | thrust_damage(15 ,  pierce),imodbits_sword ],
Ceci est le code de l'épée en bois utilisée dans le tuto de Warband, maintenant on vas analizer les diférentes parties du code

tutorial_sword --> Ceci est le nom de l'entrée de l'arme, quand vous voulez equiper cette épée a un soldat, vous allez l'ajouter dans son inventaire sous le nom de itm_tutorial_sword

Sword ---> Ceci est le nom que l'arme va prendre une fois dans le jeu

long_sword ---> Ceci est le nom du modele de l'arme ( c'est la que OpenBrf entreras en jeu plus tard)

scab_longsw_a ---> Ceci est le nom du modele du foureau qui vas porter l'arme

itp_type_one_handed_wpn ---> Ceci definit quel tipe d'objet il s'agit, dans ce cas c'est un arme à une main

itp_primary ----> (il me semble que) Ceci definit si l'arme est primaire ou secondaire, cella permet au bots de choisir cette arme comme prioritaire ou non s'ils disposent d'une arme secondaire

itcf_carry_sword_left_hip --> Ceci définit l'emplacement de l'arme can elle est dans son foureau, dans ce cas l'arme ce situe a gauche.

itcf_show_holster_when_drawn ---> Ceci définit si le foureau reste visible quand l'arme en est retirée, dans ce cas le foureau reste visible.

weight(1.5) --> poids de l'arme, il me semble que le poids est en pounds ( mesure de poids en Angleterre ) mais je suis pas sur (demande confirmation)

difficulty(0) --> Les attributs necessaires pour utiliser l'arme (pour les armes de mélée c'est de la force (Strenght) et pour les arcs du "power draw"

spd_rtng(100) --> vitesse d'attaque de l'arme

weapon_length(102) ---> taille de l'arme (openBrf benificie d'une régle (ruler) qui permet de mesurer les armes et boucliers qui nécessitent que la taille soit précisé)

swing_damage(18 , cut) ---> Détermine conbient de dommage l'arme fait en coupant

thrust_damage(15 ,  pierce) ----> Détermine conbient de dommage fait l'arme quand on "l'enfonce" dans l'ennemi

imodbits_sword ---> ceci sont des modificateurs de l'arme qui sont disponible tout en haut de module_items.py, il détermine quel tipe de modificateur l'objet vas bénificier dans ce cas il vas bénificier des bonus/malus des épées ( rouillé, etc..)


#Ce tuto est incomplet je vais le finir plus tard
 
2éme Partie:
Maintenant vous allez ouvrir le programme OpenBrf:
Pour vous faciliter la tache choisissez le module lu par défaut
61982521.png
Choisissez le module et cliquez Ok.
Une fois sélectionné, allez dans l'option module -> select a Brf in module (ou sinon utilisez le racourci, la touche : f7)
74468005.png
Et voici les option qui vont apparaître:
50205382.png
Sélectionnez le Brf de votre choix
11366571.png
Copiez le nom de la mesh de l'objet de votre choix ( f2 et aprés ctrl + c (copier) )
Ouvrez le fichier items.py du module system de votre mod avec notepad et créez l'entrée de l'objet désiré. (avant ["items_end", "Items End", [("shield_round_a",0)], itp_type_horse, 0, 1, 0, imodbits_none ],
])
Exemple:
72311781.png

39616898.png

85936996.png

Quand votre tâche est terminée, n'oubliez pas de sauvegarder (icone bleu)

Configurez le module system pour compiler dans le dossier de votre mod:
-Ouvrez module_info.py et configurez export_dir= vers le fichier de votre mod
Ex: export_dir="C:/Utilisateur/Desktop/Dossier du mod/"  et n'oubliez pas les " " et utilisez que des /

Après compilez votre module_system (build_module.bat)

#Si des erreurs persistent ou si vous voulez rajouter des infos manquantes, il suffit de demander  :wink:
Bon modding!

 
Le procès pour additionner une armure ou un casque est très similaire à celui pour additionner une arme.
Par exemple le code d'une armure:
Code:
["mail_shirt", "Mail Shirt", [("mail_shirt_a",0)], itp_merchandise| itp_type_body_armor  |itp_covers_legs ,0,
 1040 , weight(19)|abundance(100)|head_armor(0)|body_armor(37)|leg_armor(12)|difficulty(7) ,imodbits_armor ],
mail_shirt -> ID de l'armure, c'est a partir de l'ID que l'on ajoute l'armure a une troupe, en ajoutant le préfixe itm_, dans ce cas itm_mail_shirt
Mail Shirt -> Nom de l'armure en jeu, c'est le nom que vous verrez quand l'armure apparait chez le marchand
mail_shirt_a -> Nom de la mesh ( armure dans OpenBrf )
itp_ -> Il me semble que ça veut dire item properties ( propriétés de l'objet ), dans ce cas nous avons:
itp_merchandise -> L'objet apparait chez les marchands
itp_body_armor -> L'objet est une armure corporelle
itp_covers_legs -> L'objet remplace l'armure de base de M&B, les caleçons, oublier cette case peut causer un petit problème visuel ou les deux armures se superposent
1040 -> Prix de l'objet
Weight -> Poids de l'ojet
abundance -> abondance de l'objet chez les marchands ( plus le nombre est bas plus il est rare )
head_armor(0) -> Valeur de protection pour la tête (change le nombre 0 )
body_armor(37) -> Valeur de protection pour le corps
leg_armor(12)  -> Valeur de protection pour les jambes
difficulty(7) -> Niveau minimum de force requise pour utiliser l'objet
imodbits_armor -> Modificateur d'armure ( les variantes disponibles, rouillé, bien faite, etc...)

Pour les casques c'est presque comme l'armure:
Code:
["flat_topped_helmet", "Flat Topped Helmet", [("flattop_helmet_new",0)], itp_merchandise| itp_type_head_armor   ,0, 
203 , weight(1.75)|abundance(100)|head_armor(33)|body_armor(0)|leg_armor(0)|difficulty(7) ,imodbits_plate ],
les différences c'est que les casques ont itp_type_head_armor, ce qui veut dire que l'objet en question a comme propriété d'être une protection pour la tête.

Si des questions persistent n'hésite pas
 
Oui désolé mais j'ai encore un soucis , deja merci beaucoups pour tes reponses , j'ai dans mon cas présent réussi a faire la ligne de code :
Code:
flemish_armet", "Heaume De Guerre", [("flemish_armet",0)], itp_type_head_armor|itp_merchandise|itp_fit_to_head ,0, 5000, weight(3)|abundance(100)|head_armor(50)|body_armor(0)|leg_armor(0), imodbits_plate ],

Voilà , ce casque apparait dans les marchand mais l'image n'apparait pas , m&b n'arrive pas a le trouver , cependant le nom du mesh est bien flemish_armet mais la texture que la texture que j'ai ajouté au dossier texture ne correspond pas exactement a ceci . En faite la texture que j'ai ajouté en comporte plusieur de casque comment faire ?

Si tu veut télécharger ce que moi j'ai prit et constater les mêmes choses que moi sa sera peut etre plus facile .
http://forums.taleworlds.com/index.php/topic,76943.0.html

J'ai de nouveau regarder en faite les noms des mesh dans openbrf ne correspond pas aux nom des textures qui sont dans le winrar .
 
Code:
["flemish_armet", "Heaume De Guerre", [("flemish_armet",0)], itp_type_head_armor|itp_merchandise|itp_fit_to_head ,0, 5000, weight(3)|abundance(100)|head_armor(50)|body_armor(0)|leg_armor(0), imodbits_plate ],
As tu le code entier comme ci dessus? car il te manquais ["
-->Comment je crée cette entrée?
ouvrez le module.ini et vers la fin ( entre load_resource = town_houses_e et works_with_version_min  = (peut contenir divers nombres)
vous ajoutez une nouvelle entrée load_module_resource = (ici le nom du .brf) par exemple si le brf s'appele fort.brf l'entrée s'appele load_module_resource = fort
Vérifiez que:
scan_module_textures = 1
scan_module_resource = 1
et aprés enregistrez les modifications aportés.
As tu fait ce pas ci ?
 
Oui j'ai bien ; erreur de ma part en recopiant le code :
Code:
["flemish_armet", "Heaume De Guerre", [("flemish_armet",0)], itp_type_head_armor|itp_merchandise|itp_fit_to_head ,0, 5000, weight(3)|abundance(100)|head_armor(50)|body_armor(0)|leg_armor(0), imodbits_plate ],

Et oui je l'ai ajouté en bas avant find .
Pour ce qui est du module.ini j'ai mis :
module_name = Calradia









map_min_x  = -180.000000
map_max_x  = 180.000000
map_min_y  = -145.000000
map_max_y  = 145.000000
map_sea_direction = -40 #wave foam direction
map_sea_wave_rotation = 300 #This is where the tear artefact is visible on the sea.
map_sea_speed_x = 0.02
map_sea_speed_y = -0.02
map_river_direction = 140
map_river_speed_x = 0.01
map_river_speed_y = -0.01

air_friction_arrow = 0.002
air_friction_bullet = 0.002

# use meshes map_tree_a through map_tree_r on for map trees
map_tree_types = 17
map_snow_tree_types  = 3
map_steppe_tree_types = 5
map_desert_tree_types  = 4

map_max_distance = 175.0
has_tutorial = 1

time_multiplier = 0.25
seeing_range    = 6.5
track_spotting_multiplier = 0.8

# heroes with health below this will not appear in battles and will not contribute to party skills.
player_wounded_treshold = 5
hero_wounded_treshold = 15

skill_prisoner_management_bonus = 5
skill_leadership_bonus = 3
base_companion_limit = 20

player_xp_multiplier  = 2.0
hero_xp_multiplier    = 2.0
regulars_xp_multiplier = 3.0


display_wp_firearms = 0

# damage below this will not interrupt melee attacks
damage_interrupt_attack_threshold      = 3.0
# Same thing for multiplayer
damage_interrupt_attack_threshold_mp  = 1.0

# No extra penetration flags are set, so keep them ineffective
extra_penetration_factor_soak = 1.0
extra_penetration_factor_reduction = 1.0

# You can modify the damage system by editing the following values:
# The first three values determine the amount which will be directly subtracted from damage due to armor.
# The next three values determine the percentage reduction from the damage.

armor_soak_factor_against_cut      = 0.8
armor_soak_factor_against_pierce    = 0.65
armor_soak_factor_against_blunt    = 0.5

armor_reduction_factor_against_cut      = 1.0
armor_reduction_factor_against_pierce    = 0.5
armor_reduction_factor_against_blunt    = 0.75


horse_charge_damage_multiplier        = 1.0
couched_lance_damage_multiplier      = 0.65
fall_damage_multiplier                = 1.0

#missiles with damage > shield_penetration_offset + shield_penetration_factor * shield
#will penetrate.

shield_penetration_offset = 30.0
shield_penetration_factor = 3.0

#setting speed_power to 2.0 makes damage scale with the square of missile's speed.
# you can set it to 1.0 to make it scale linearly as it was before.
missile_damage_speed_power = 1.9
melee_damage_speed_power = 2.0

multiplayer_walk_enabled = 0

mission_object_prune_time = 180

#change this to 0 if you want to keep the food slot in inventory window.
disable_food_slot      = 1

# Change this to 1 if you want to load
# textures from Modules/<Module_Dir>/Textures/

scan_module_textures = 1
scan_module_sounds = 1

#edit mode should be enabled
#give_performance_warnings = 1


#You can also use load_mod_resource instead of load_resource to make sure you are reading files from module directory.

load_resource = test
load_resource = textures_face_gen
load_resource = shaders
load_resource = textures
load_resource = materials
load_resource = materials_face_gen

load_resource = uimeshes
load_resource = meshes_face_gen
load_resource = helpers
load_resource = map_tree_meshes
load_resource = map_icon_meshes
load_resource = particle_meshes
load_resource = skeletons
load_resource = tree_meshes
load_resource = xtree_meshes
load_resource = grass_meshes
load_resource = plant_meshes
load_resource = body_meshes
load_resource = object_meshes
load_resource = object_bodies


load_resource = goods_meshes
load_resource = item_meshes1
load_resource = horse_a

load_resource = arabian_horses
load_resource = arabian_castle

load_resource = food
load_resource = beards
load_resource = armors_b
load_resource = armors_c
load_resource = armors_d
load_resource = armors_e
load_resource = armors_f
load_resource = armors_g
load_resource = armors_h

load_resource = armors_i

load_resource = boots_b
load_resource = boots_c
load_resource = helmets

load_resource = helmets_b
load_resource = village_houses
load_resource = village_houses_a
load_resource = village_houses_b
load_resource = hair
load_resource = deneme

load_resource = interiors_a
load_resource = interiors_b
load_resource = interiors_c
load_resource = arena
load_resource = map_icons_b
load_resource = castle_a
load_resource = dungeon
load_resource = stone_houses
load_resource = snowy_houses
load_resource = snowy_castle
load_resource = helmets_d
load_resource = helmets_e
load_resource = helmets_f

load_resource = castle_b
load_resource = square_keep
load_resource = anim_b
load_resource = shields
load_resource = shields_b
load_resource = weapon_meshes_c
load_resource = xtree_meshes_b
load_resource = map_icons_c
load_resource = pictures
load_resource = user_interface_b
load_resource = user_interface_c

load_resource = scene_encounter_spot
load_resource = interior_thirsty_lion
load_resource = scene_small_tavern

load_resource = weapon_meshes1
load_resource = weapon_meshes_b

load_resource = houses1
load_resource = wall_meshes1

load_resource = town_houses
load_resource = doors
load_resource = churches


load_resource = town_houses_b
load_resource = castle_c
load_resource = castle_d
load_resource = castle_e
load_resource = castle_f
load_resource = castle_g
load_resource = castle_h
load_resource = castle_i

load_resource = gatehouse
load_resource = viking_houses


load_resource = fake_houses
load_resource = town_houses_c
load_resource = banners
load_resource = map_flags
load_resource = map_flags_b
load_resource = map_flags_c
load_resource = map_flags_d

#load_resource = costumes_a
load_resource = particles_2
load_resource = prisons
load_resource = prisons_b
load_resource = interiors_d
load_resource = costumes_b
load_resource = costumes_c
load_resource = arena_costumes
load_resource = boots_a
load_resource = terrain_borders
load_resource = terrain_borders_b
load_resource = skyboxes
load_resource = object_b
load_resource = tree_e_meshes
load_resource = destroy
load_resource = xtree_meshes_c
load_resource = grass_meshes_b



load_resource = interiors_steppe

load_resource = grooming_horse
load_resource = town_houses_d


load_resource = horses_b
load_resource = ani_horse_mounted
load_resource = deneme2
load_resource = horse_skeleton

load_resource = steppe_fake_houses
load_resource = weapon_meshes_d

load_resource = tableau_shields
load_resource = heraldic_armors

load_resource = spear
load_resource = weapons_e
load_resource = weapons_f
load_resource = instruments
load_resource = sarranid_armors

load_resource = custom_banner

load_resource = simple_primitives

load_resource = ani_man_walk
load_resource = ani_twohanded
load_resource = ani_onehanded
load_resource = ani_death
load_resource = ani_stand_guardsman

load_resource = ani_human_mounted
load_resource = ani_lady_stand
load_resource = ani_poses
load_resource = ani_stand_shopkeeper
load_resource = ani_man_cheer
load_resource = ani_stand_onhorse
load_resource = ani_throw_stone
load_resource = ani_strikes
load_resource = ani_equip_arms
load_resource = ani_run_p
load_resource = ani_run_forward_left_right
load_resource = uni_strikes3
load_resource = ani_walk_sideways
load_resource = ani_run_sideways
load_resource = ani_stand

load_resource = ani_crouch_down
load_resource = ani_low_walk
load_resource = ani_turn_man
load_resource = ani_attacks_single
load_resource = ani_lancer
load_resource = ani_attacks
load_resource = ani_kicks
load_resource = ani_parry_attack
load_resource = ani_walk_backward
load_resource = ani_run_lookingsides
load_resource = ani_defends
load_resource = ani_walk_lookingsides
load_resource = ani_jump
load_resource = ani_wedding
load_resource = arabian_props


#animations
load_resource = uni_jump
load_resource = uni_stances
load_resource = uni_equip
load_resource = uni_strike
load_resource = uni_throws
load_resource = uni_fistswing
load_resource = uni_lord_stand
load_resource = uni_defence
load_resource = uni_sideways

load_resource = dart

load_resource = armors_new_a
load_resource = armors_new_b
load_resource = armors_new_heraldic
load_resource = armors_new_arena

load_resource = crossbows
load_resource = arabian_armors
load_resource = rock
load_resource = costumes_d
load_resource = nordic_helmets
load_resource = sarranid_helmets
load_resource = sarranid_armor
load_resource = raw_materials
load_resource = khergit_lady_dress
load_resource = vaegir_helmets
load_resource = gauntlets_new
load_resource = sarranid_lady_dress
load_resource = sarranid_boots
load_resource = bride_dress
load_resource = full_plate_armor
load_resource = weapon_meshes_e
load_resource = fur_armors_a
load_resource = ui_server_filter
load_resource = warhorse_new
load_resource = ship
load_resource = arabian_houses
load_resource = object_c
load_resource = tree_f
load_resource = interiors_arabian
load_resource = arabian_village
load_resource = valleyProps
load_resource = workshops

load_resource = barrier_primitives
load_resource = town_houses_e
load_module_resource = medievalhelmets


#works_with_version_min  = 1000 #deprecated, use module_version and compatible_savegame_module_version instead
#works_with_version_max  = 1011 #deprecated, use module_version and compatible_savegame_module_version instead

#module_version = 0 #can be used for multiplayer and single player (saved game) module versioning
#compatible_module_version = 0 #can be used for multiplayer module versioning
#compatible_savegame_module_version = 0 #can be used for single player (saved game) module versioning

limit_hair_colors = 1
show_faction_color = 1
show_quest_notes = 1

dont_load_regular_troop_inventories = 1

#assign '1' for moveable physics on all scene props; no sokf_moveable flag will be needed
disable_moveable_flag_optimization = 0

#You can change the following to 1 for ease in module development
show_party_ids_instead_of_names = 0

crush_through_treshold = 2.4

 
Moi j'ai un souci ... pas en ce qui concerne le code mais une fois en jeux ...

Je m'explique,je ne sais pas modeler alors plutot que de me prendre la tête pour la version bêta de mon mod, je n'est fait que "copier" un item existant (une armure) et modifier les propriété de protection quel apporte (soit les jambes et le torse) jusque là aucun souci, les mesh sont bien attribuer tous les paramètres sont ok mais une fois en jeux, plus précisément en combat hum, comment dire ... bah mes mecs ont le cul à l'air comme si le modèle de l'armure restait plat uniquement à l'arrière je ne comprend pas ...

Pour être sur que le souci ne venait pas de moi, j'ai simplement copier l'item sans le modifier, puis renommer sont ID et son nom mais avec la plus grande surprise toujours rien ... mes troupes ont quand même le cul à l'air ...
 
oui c'est bien indiquer, le problème c'est que j'ai fait du gros copier coller de itm_heraldic_new_a ... et ces propriété sont toute bien indiquer, lorsque j'utilise l'original, je n'est pas ce souci, mais avec l'objet modifier si, enfin bref je vais vérifier que le souci ne vienne pas de moi, à force de bosser le soir avec la fatigue les erreurs arrive très facilement !!!

Je retourne vérifier sa correctement, je te tient au courant.
Et merci de ta réponse rapide ^^
 
Bon, je suis de retour !

Alors pour conclure ... en étant poli mes yeux était remplit de m****, le problème venait de mon code, cela fonctionne désormais !

Merci pour ton aide ... et désoler du dérangement je pense que coder les yeux propre et ouvert serait mieu !
 
J'ai voulu importer des objets de la native expansion 2.0 à diplomacy 4.1, j'ai suivi tes explications et tout marche sauf que tous les boucliers sont transparents même les armures avec la banniere. Quelqu'un pourrait m'aider svp
 
Yop j'ai de mon coté, bien plus d'option au niveau des armes :
exemple :
itc_longsword| ?
["am_hammer",  "Magnus Hammer", [("am_hammer",0)], itp_type_two_handed_wpn|itp_merchandise| itp_two_handed|itp_primary|itp_bonus_against_shield|itp_wooden_parry|itp_unbalanced, itc_nodachi|itcf_carry_axe_back,
90 , weight(5.5)|difficulty(10)|spd_rtng(90) | weapon_length(90)|swing_damage(38 , blunt) | thrust_damage(0 ,  blunt),imodbits_mace ],
etc...


Tu pourrais détailler ?
 
Back
Top Bottom