Skills
Sur cette page je vais essayer de resumer toute mes recherches sur les skills leur génération a partir de fichiers, ce qu'il faut modifier pour en ajouter, …
Issue corespondante sur gitlab: https://git.khaganat.net/khaganat/khanat-ressources/issues/2
Scoui
Nomentlature
Les nom des skill peuvent se décomposer en PLACEHOLDER parties.
La première lettre sera toujours la même signifiant simplement que c'est un skill.
S = Skill
La deuxieme lettre correspond au type de la compétence comme suit.
C = Craft D = Défense F = Fight H = Harvest M = Magic
skill_extractor
Pour le moment cette partie n'est qu'une version brute de ce que j’extrais directement du code source et sera à compléter/détailler par la suite, je le met comme ça pour déjà avoir une base en utilisant les nom de variable du code afin de voir un peu mieux ce qui attendu.
skill_extrator.exe génère lui même les fichiers skills.cpp et skills.h contenant l'enumeration des code des skills.
Voila ce que j'ai compris jusque la:
Les leveldesigner font leur popote dans le fichier skillscategory.xls qui sert de fichier de travail.
Ensuite ils exportent les skills qu'il veulent intégrer au jeu dans le fichier skills.csv qui est fournit à skill_extractor.exe qui en sort tous les fichiers nécessaire.
Ne reste plus qu'a recompiler ensuite.
Structure des fichiers (xml, txt, ... ) générés par skill_extractor.exe
Fichiers sources
Fichier de travail pour les designer - skillscategory.xls
Ce fichier sert de brouillon où, si j'ai bien compris, les designer font leur popote sur la feuille “skills” ils ajoutent des skills dans tous les sens, préparent leurs branches de compétence puis font un tri et une version au propre de ce qu'ils veulent intégrer au jeu sur la feuille “sheet2” pour l'export au format cvs qu'utilisera ensuite skill_extractor.
= skillscategory.xls =
Il s'agit la d'un document de travail dont il n'est nul besoin de garder la forme la seule chose important c'est la feuille destiné à l'export au format csv(sheet2).
skills, la feuille dans laquelle le travail brut est effectuer, une sorte de brouillon de travail. sheet2, la version au propre destiné à l'export au format csv. sheet3, une liste des branches de bases.
= skills.csv =
WIP
La version final de la lsites des compétence au format csv a fournit à skill_extractor.
Elle suit le format suivant:
code_competence_complet;code_competence_sans_parent;code_competence_parent;level_max;stage_value;categorie
prenons par exemple Le combat a une main contondant ( one Hand Melee Blunt ) dont le code est SFM1B et dont la branche parente est le combat a une main ( one Hand Melee ) avec le code SFM1.
le premier S est pour skill il est present dans toutes les compétences. Ensuite nous avons F pour “Fight”
Ainsi toutes les compétences de combat commenceront par SF
Ensuite le M pour Mêlée donnant donc SFM pour toutes les compétence de combat de mêlée.
Ensuite le 1 pour une main donc SFM1 pour le combat de mêlée a une main (le skill parent SFM1 ici donc le parent et SFM qui a lui pour parent SF )
Et enfin le B pour blunt, SFM1B correspond donc au combat de mêlée à une main contondant.
Nous avons donc l'arbre suivant (en ajoutant d'autres branches pour que ca soit plus représentatif):
0 20 50 100 (Level) SF - SFM (mêlée) - SFM1 (une main) - SFM1H (contondant) | | - SFR (Tir) - SFM2 (deux main)
Pour reprendre notre skill de combat à une main contondant SFM1H Son code complet est donc SFM1H le code de son parent est donc SFM1 et le code sans parent H et son level max 100
le fichier csv aura donc la ligne suivante:
(visiblement le dernier paramètre est en français et non en anglais)
SFM1H;H;SFM1;100;0;Combat
Concernant stage_value je ne sais pas à quoi cela correspond pour le moment n'hesiter pas a faire savoir si vous avez une idée, actuellement tout est à 0 sauf le craft à 1.
Fichiers générés par skill_extractor
Resultat de la fonction void writeInSheet(COFile &fo)
<STRUCT Name="NormalizedSkillName"> <ATOM Name="Skill" Value="SkillName" /> <ATOM Name="SkillCode" Value="Code" /> <ATOM Name="MaxSkillValue" Value="Code" /> <ATOM Name="Type of Stage" Value="MaxValue" /> <ATOM Name="ParentSkill" Value="ParentSkill" /> <ARRAY Name="ChildSkills"> <ATOM Name="Children_NormalizedSkillName" Value="Children_SkillName" /> </ARRAY> </STRUCT>
skill_codes.txt
// Liste des skill et code associé sous la forme: NormalizedSkillName Code
.typ file
<?xml version="1.0"?> <TYPE Type="String" UI="NonEditableCombo" Default="unknown" Version="0.1" State="modified"> <DEFINITION Label="unknown" Value="unknown"/> <DEFINITION Label="SkillName" Value="NormalizedSkillName"/> </TYPE>
.dfn file
<?xml version="1.0"?> <DFN Version="0.0" State="modified"> <!-- note du scoui: la valeur de Filename "creature_stat.typ" est hardcodé --> <ELEMENT Name="NormalizedSkillName" Type="Type" Filename="creature_stat.typ"/> </DFN>
skills.pds
// NbSkills in enum : size Report this in database.xml file "skills.h" { enum TSkill { BeginSkill { NormalizedSkillName , NormalizedSkillName // note du scoui: etc... pour chaque skill } } EndSkill }
Man
Create a file .typ for george contained a subset of skills SKILL_EXTRACTOR <output file> <input file skills> <[<selector> ...] param 1 : create tree (yes) or no (no)\n"); if output file have .typ extension, generate .typ george file format if output file have .dfn extension, generate .dfn george file format param 3 is sheet2 of SkillCategory.xls exported in csv format Selector is category present in input file, selectors begins by '+' for or operation and by '.' for and operation the first selector must be or operation (begin by '+' character)
skill_extractor.cfg
// csv file CsvDir // path for the generated source files SrcDir // path for the generated source files PdsDir // path for the generated dfn DfnDir // path for the generated skill tree SkillTreeDir
dfn, typ
// skill name
skillName
// code
Code
// parent skill
ParentSkill
// max skill value
MaxValue
// stage type
StageType
// main category
MainCategory
// secondary category
SecondaryCategory
Matériel de recherche
Liste des fichiers utiles
Correspondance entre le code et le nom littérale de la compétence
Lien vers la partie création de la compétence de l'activité pêche
Liste des skills
Source: khanat-code\code\ryzom\common\src\game_share\skills.h
enum ESkills { SC = 0, SCA, SCAH, SCAHB, SCAHBE, SCAHBEM, SCAHG, SCAHGE, SCAHGEM, SCAHH, SCAHHE, SCAHHEM, SCAHP, SCAHPE, SCAHPEM, SCAHS, SCAHSE, SCAHSEM, SCAHV, SCAHVE, SCAHVEM, SCAL, SCALB, SCALBE, SCALBEM, SCALG, SCALGE, SCALGEM, SCALP, SCALPE, SCALPEM, SCALS, SCALSE, SCALSEM, SCALV, SCALVE, SCALVEM, SCAM, SCAMB, SCAMBE, SCAMBEM, SCAMG, SCAMGE, SCAMGEM, SCAMP, SCAMPE, SCAMPEM, SCAMS, SCAMSE, SCAMSEM, SCAMV, SCAMVE, SCAMVEM, SCAS, SCASB, SCASBE, SCASBEM, SCASS, SCASSE, SCASSEM, SCJ, SCJA, SCJAA, SCJAAE, SCJAAEM, SCJB, SCJBA, SCJBAE, SCJBAEM, SCJD, SCJDA, SCJDAE, SCJDAEM, SCJE, SCJEA, SCJEAE, SCJEAEM, SCJP, SCJPA, SCJPAE, SCJPAEM, SCJR, SCJRA, SCJRAE, SCJRAEM, SCM, SCM1, SCM1A, SCM1AE, SCM1AEM, SCM1D, SCM1DE, SCM1DEM, SCM1M, SCM1ME, SCM1MEM, SCM1P, SCM1PE, SCM1PEM, SCM1S, SCM1SE, SCM1SEM, SCM1T, SCM1TE, SCM1TEM, SCM2, SCM2A, SCM2AE, SCM2AEM, SCM2M, SCM2ME, SCM2MEM, SCM2P, SCM2PE, SCM2PEM, SCM2S, SCM2SE, SCM2SEM, SCMC, SCMCA, SCMCAE, SCMCAEM, SCR, SCR1, SCR1P, SCR1PE, SCR1PEM, SCR2, SCR2A, SCR2AE, SCR2AEM, SCR2L, SCR2LE, SCR2LEM, SCR2R, SCR2RE, SCR2REM, SF, SFM, SFM1, SFM1B, SFM1BM, SFM1BMM, SFM1BS, SFM1BSM, SFM1P, SFM1PS, SFM1PSM, SFM1S, SFM1SA, SFM1SAM, SFM1SS, SFM1SSM, SFM2, SFM2B, SFM2BM, SFM2BMM, SFM2P, SFM2PP, SFM2PPM, SFM2S, SFM2SA, SFM2SAM, SFM2SS, SFM2SSM, SFMC, SFMCA, SFMCAD, SFMCADM, SFMCAH, SFMCAHM, SFR, SFR1, SFR1A, SFR1AP, SFR1APM, SFR2, SFR2A, SFR2AA, SFR2AAM, SFR2AL, SFR2ALM, SFR2AR, SFR2ARM, SH, SHF, SHFD, SHFDA, SHFDAE, SHFDAEM, SHFF, SHFFA, SHFFAE, SHFFAEM, SHFJ, SHFJA, SHFJAE, SHFJAEM, SHFL, SHFLA, SHFLAE, SHFLAEM, SHFP, SHFPA, SHFPAE, SHFPAEM, SM, SMD, SMDA, SMDAA, SMDAAE, SMDAAEM, SMDH, SMDHA, SMDHAE, SMDHAEM, SMO, SMOA, SMOAA, SMOAAE, SMOAAEM, SMOE, SMOEA, SMOEAE, SMOEAEM, NUM_SKILLS, unknown, any, };