Table des matières

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

Skills category

skills code

Skills typ

Correspondance entre le code et le nom littérale de la compétence

typ_generic_skills

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,
	};

Traveaux lier aux compétences

Compétences du lirri'a