|
|
|
@ -28,10 +28,10 @@ CSString GroupTypContent;
|
|
|
|
|
CSString WKContent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Assigne une nouvelle MP à une creature
|
|
|
|
|
// Assign a new raw mat to a creature
|
|
|
|
|
void AssignerMP( const CSString& creatureName, const CSString& materialName )
|
|
|
|
|
{
|
|
|
|
|
// on regarde si la créature est dégénérée ou non
|
|
|
|
|
// we check if a creature is degenerated or not
|
|
|
|
|
if ( ( creatureName.c_str()[3] != 'c' ) && ( creatureName.c_str()[3] != 'd' )
|
|
|
|
|
&& ( creatureName.c_str()[3] != 'f' ) && ( creatureName.c_str()[3] != 'j' )
|
|
|
|
|
&& ( creatureName.c_str()[3] != 'l' ) && ( creatureName.c_str()[3] != 'p' ) )
|
|
|
|
@ -43,7 +43,7 @@ void AssignerMP( const CSString& creatureName, const CSString& materialName )
|
|
|
|
|
CSString fileName = toString( "%s//_%s_mp.creature", RAW_MATERIAL_ASSIGN.c_str(), creatureName.c_str() );
|
|
|
|
|
CSString data;
|
|
|
|
|
|
|
|
|
|
// création si le fichier n'existe pas
|
|
|
|
|
// create file if not exists
|
|
|
|
|
if(!CFile::fileExists(fileName))
|
|
|
|
|
{
|
|
|
|
|
CSString str;
|
|
|
|
@ -66,7 +66,7 @@ void AssignerMP( const CSString& creatureName, const CSString& materialName )
|
|
|
|
|
|
|
|
|
|
if ( !data.contains( materialName.c_str() ) )
|
|
|
|
|
{
|
|
|
|
|
// on recherche le premier numéro de MP non utilisé
|
|
|
|
|
// look for first number of unused raw mat
|
|
|
|
|
CSString str = data;
|
|
|
|
|
int nb= 0;
|
|
|
|
|
while ( str.contains( "Name=\"MP" ) )
|
|
|
|
@ -75,7 +75,7 @@ void AssignerMP( const CSString& creatureName, const CSString& materialName )
|
|
|
|
|
nb = str.firstWord().atoi();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// on insère la nouvelle MP
|
|
|
|
|
// insert new raw mat
|
|
|
|
|
str = " <STRUCT Name=\"MP";
|
|
|
|
|
str += toString( "%d\">\r\n <ATOM Name=\"AssociatedItem\"", nb+1 );
|
|
|
|
|
str += toString( " Value=\"%s\"/>\r\n </STRUCT>\r\n </STRUCT>\r\n </STRUCT>\r\n", materialName.c_str() );
|
|
|
|
@ -87,8 +87,7 @@ void AssignerMP( const CSString& creatureName, const CSString& materialName )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// enregistrement des differentes
|
|
|
|
|
// caractéristiques de chaque craft part
|
|
|
|
|
// save stats for each craft part
|
|
|
|
|
void LoadCraftParts()
|
|
|
|
|
{
|
|
|
|
|
CSString data, ligne, info;
|
|
|
|
@ -117,7 +116,7 @@ void LoadCraftParts()
|
|
|
|
|
{
|
|
|
|
|
ligne = data.splitTo( "\n", true );
|
|
|
|
|
|
|
|
|
|
// on recherche la ligne correspondant à notre craft part
|
|
|
|
|
// look for line concerning our craft part
|
|
|
|
|
info = ligne.splitTo( ";", true );
|
|
|
|
|
if ( !info.empty() )
|
|
|
|
|
{
|
|
|
|
@ -126,13 +125,12 @@ void LoadCraftParts()
|
|
|
|
|
for ( int i=0; i<6; i++ )
|
|
|
|
|
ligne.splitTo( ";", true );
|
|
|
|
|
|
|
|
|
|
// parcours des différentes caractèristiques
|
|
|
|
|
// browse each characteristics
|
|
|
|
|
for ( int i=0; i<NumMPStats; i++ )
|
|
|
|
|
{
|
|
|
|
|
info = ligne.splitTo( ";", true ).left(1);
|
|
|
|
|
|
|
|
|
|
// si la cellule n'est pas vide, cette caractèristique
|
|
|
|
|
// est générée par la craft part
|
|
|
|
|
// if the cell is not empty, this characteristic is generated by craft part
|
|
|
|
|
if ( ( info == "C" ) || ( info == "D" ) || ( info == "X" ) )
|
|
|
|
|
craftParts[index].Carac[i] = true;
|
|
|
|
|
else
|
|
|
|
@ -143,7 +141,7 @@ void LoadCraftParts()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Enregistre les noms des différents fichiers de creature dans le bestiaire
|
|
|
|
|
// Save creatures filenames in bestiary
|
|
|
|
|
void LoadCreatureFiles()
|
|
|
|
|
{
|
|
|
|
|
printf( "-- REGISTERING CREATURE FILES --\n" );
|
|
|
|
@ -163,8 +161,7 @@ void LoadCreatureFiles()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Enregistre pour chaque créature la liste des différents
|
|
|
|
|
// niveaux d'item à générer
|
|
|
|
|
// Save items levels list to generate for each creature
|
|
|
|
|
void InitCreatureMP()
|
|
|
|
|
{
|
|
|
|
|
CSString data, ligneN, ligneM;
|
|
|
|
@ -184,12 +181,12 @@ void InitCreatureMP()
|
|
|
|
|
ligneN = data.splitTo( "\n", true );
|
|
|
|
|
ligneM = data.splitTo( "\n", true );
|
|
|
|
|
|
|
|
|
|
// on vérifie que la ligne est valide
|
|
|
|
|
// check if line is valid
|
|
|
|
|
if ( !ligneN.splitTo( ";", true ).empty() )
|
|
|
|
|
{
|
|
|
|
|
ligneM.splitTo( ";", true );
|
|
|
|
|
|
|
|
|
|
// on se déplace jusqu'au données
|
|
|
|
|
// move until data
|
|
|
|
|
ligneN.splitTo( ";", true );
|
|
|
|
|
ligneM.splitTo( ";", true );
|
|
|
|
|
ligneN.splitTo( ";", true );
|
|
|
|
@ -211,8 +208,7 @@ void InitCreatureMP()
|
|
|
|
|
ligneN = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// pour chaque nouveau nom de créature trouvé,
|
|
|
|
|
// on enregistre les items à générer
|
|
|
|
|
// save items to generate for each new creature name found
|
|
|
|
|
for ( char eco='a'; eco<='z'; eco++ )
|
|
|
|
|
{
|
|
|
|
|
for ( int level=0; level<10; level++ )
|
|
|
|
@ -221,12 +217,12 @@ void InitCreatureMP()
|
|
|
|
|
{
|
|
|
|
|
CSString fileName = toString( "c%s%c%c%d", code.toLower().c_str(), eco,
|
|
|
|
|
'a' + level, creatureLevel );
|
|
|
|
|
// on recherche si une créature correspond à ces données
|
|
|
|
|
// look for corresponding creature
|
|
|
|
|
it = creatureFiles.find( fileName );
|
|
|
|
|
|
|
|
|
|
if ( it != creatureFiles.end() )
|
|
|
|
|
{
|
|
|
|
|
// si oui, on signale que cet item devra être généré
|
|
|
|
|
// if yes, this item should be generated
|
|
|
|
|
CreatureMPItem* creatureMP = new CreatureMPItem;
|
|
|
|
|
creatureMP->creatureLevel = creatureLevel;
|
|
|
|
|
creatureMP->eco = eco;
|
|
|
|
@ -246,7 +242,7 @@ void InitCreatureMP()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne la qualité maximum pour un level d'item
|
|
|
|
|
// Return quality maximum foran item level
|
|
|
|
|
int GetMaxQuality( int level )
|
|
|
|
|
{
|
|
|
|
|
if ( level == 0 )
|
|
|
|
@ -256,7 +252,7 @@ int GetMaxQuality( int level )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne l'énergie maximum pour un level d'item
|
|
|
|
|
// Return energy maximum for an item level
|
|
|
|
|
int GetStatEnergy( int level )
|
|
|
|
|
{
|
|
|
|
|
if ( level == 0 )
|
|
|
|
@ -266,7 +262,7 @@ int GetStatEnergy( int level )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne le nom de classe de l'item selon ses caractèristiques
|
|
|
|
|
// Return item class name depending on its characteristics
|
|
|
|
|
void GetItemClass( int level, bool mission, bool creature, CSString& outClassName )
|
|
|
|
|
{
|
|
|
|
|
static CSString missionClasses[] = { "Plain", "Average", "Prime", "Select",
|
|
|
|
@ -308,7 +304,7 @@ bool endsWith( const CSString& s, const CSString& substring )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Génére les noms d'un item
|
|
|
|
|
// Generate item names
|
|
|
|
|
void GenerateItemNames( const CSString& nomMP, char eco, int level, bool mission, bool creature, CSString& outStr )
|
|
|
|
|
{
|
|
|
|
|
CSString itemClass, prefix, singularWithNoPrefix;
|
|
|
|
@ -411,7 +407,7 @@ void GenerateItemNames( const CSString& nomMP, char eco, int level, bool mission
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne le numéro de la famille passée en paramètre
|
|
|
|
|
// Return number of specified family
|
|
|
|
|
int GetNumeroMP( const CSString& nomMP )
|
|
|
|
|
{
|
|
|
|
|
CSString result;
|
|
|
|
@ -420,27 +416,25 @@ int GetNumeroMP( const CSString& nomMP )
|
|
|
|
|
int res;
|
|
|
|
|
|
|
|
|
|
// *** Get the family number, and add it to faimly.typ if not already done
|
|
|
|
|
// on recherche si la MP est présente
|
|
|
|
|
// dans le fichier item_mp_family.typ
|
|
|
|
|
// look for raw mat existence in item_mp_family.typ file
|
|
|
|
|
sprintf( buffer, "%s\" Value=\"", nomMP.c_str() );
|
|
|
|
|
result = FamilyTypContent.splitFrom( buffer );
|
|
|
|
|
|
|
|
|
|
// si oui, on retourne son numéro de MP
|
|
|
|
|
// if yes, return raw mat number
|
|
|
|
|
if ( !result.empty() )
|
|
|
|
|
res = result.splitTo( "\"" ).atoi();
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// sinon, on génère un nouveau numéro :
|
|
|
|
|
// on recupère le dernier numéro de MP (le max)
|
|
|
|
|
// else, generate a new number:
|
|
|
|
|
// get last raw mat number (the max)
|
|
|
|
|
result = FamilyTypContent.splitTo( "<LOG>" ).right(10);
|
|
|
|
|
result.splitTo( "\"", true );
|
|
|
|
|
result = result.splitTo( "\"" );
|
|
|
|
|
|
|
|
|
|
// on ajoute 1 pour avoir un numéro non utilisé
|
|
|
|
|
// increase by 1 to get the unused number
|
|
|
|
|
res = result.atoi() + 1;
|
|
|
|
|
|
|
|
|
|
// on ajoute la nouvelle MP :
|
|
|
|
|
// dans le fichier item_mp_family.typ
|
|
|
|
|
// add new raw mat in file item_mp_family.typ
|
|
|
|
|
sprintf( buffer, " <DEFINITION Label=\"%s\" Value=\"%d\"/>\n<LOG>", nomMP.c_str(), res );
|
|
|
|
|
FamilyTypContent= FamilyTypContent.replace( "<LOG>", buffer );
|
|
|
|
|
FamilyTypContent.writeToFile( ITEM_MP_FAMILY_TYP );
|
|
|
|
@ -463,7 +457,7 @@ int GetNumeroMP( const CSString& nomMP )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne le numéro du groupe passé en paramètre
|
|
|
|
|
// Return number from specified group
|
|
|
|
|
int GetNumeroGroupe( const CSString& groupe )
|
|
|
|
|
{
|
|
|
|
|
CSString result;
|
|
|
|
@ -472,27 +466,25 @@ int GetNumeroGroupe( const CSString& groupe )
|
|
|
|
|
int res;
|
|
|
|
|
|
|
|
|
|
// *** Get the group number, and add it to group.typ if not already done
|
|
|
|
|
// on recherche si le groupe est présent
|
|
|
|
|
// dans le fichier item_mp_group.typ
|
|
|
|
|
// look for group existence in item_mp_group.typ file
|
|
|
|
|
sprintf( buffer, "%s\" Value=\"", groupe.c_str() );
|
|
|
|
|
result = GroupTypContent.splitFrom( buffer );
|
|
|
|
|
|
|
|
|
|
// si oui, on retourne son numéro de groupe
|
|
|
|
|
// if yes, return its group number
|
|
|
|
|
if ( !result.empty() )
|
|
|
|
|
res = result.splitTo( "\"" ).atoi();
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// sinon, on génère un nouveau numéro :
|
|
|
|
|
// on recupère le dernier numéro de groupe (le max)
|
|
|
|
|
// else, generate a new number :
|
|
|
|
|
// get the last group number (the max)
|
|
|
|
|
result = GroupTypContent.splitTo( "<LOG>" ).right(10);
|
|
|
|
|
result.splitTo( "\"", true );
|
|
|
|
|
result = result.splitTo( "\"" );
|
|
|
|
|
|
|
|
|
|
// on ajoute 1 pour avoir un numéro non utilisé
|
|
|
|
|
// increase by 1 to get the unused number
|
|
|
|
|
res = result.atoi() + 1;
|
|
|
|
|
|
|
|
|
|
// on ajoute la nouvelle MP :
|
|
|
|
|
// dans le fichier item_mp_group.typ
|
|
|
|
|
// add new raw mat in file item_mp_group.typ
|
|
|
|
|
sprintf( buffer, "<DEFINITION Label=\"%s\" Value=\"%d\"/>\n<LOG>", groupe.c_str(), res );
|
|
|
|
|
GroupTypContent= GroupTypContent.replace( "<LOG>", buffer );
|
|
|
|
|
GroupTypContent.writeToFile( ITEM_MP_GROUPE_TYP );
|
|
|
|
@ -516,7 +508,7 @@ int GetNumeroGroupe( const CSString& groupe )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Génère l'item parent pour une MP
|
|
|
|
|
// Generate parent item for a raw mat
|
|
|
|
|
void CreateParentSItem( int numMP,
|
|
|
|
|
const CSString& nomMP,
|
|
|
|
|
const CSString& groupe,
|
|
|
|
@ -527,10 +519,10 @@ void CreateParentSItem( int numMP,
|
|
|
|
|
CSString output;
|
|
|
|
|
CSString outputFileName;
|
|
|
|
|
|
|
|
|
|
// nom du fichier de sortie
|
|
|
|
|
// output filename
|
|
|
|
|
outputFileName = toString( "%s_parent\\_m%04d.sitem", MP_DIRECTORY.c_str(), numMP );
|
|
|
|
|
|
|
|
|
|
// entete xml
|
|
|
|
|
// xml header
|
|
|
|
|
output = "<?xml version=\"1.0\"?>\n<FORM Version=\"0.0\" State=\"modified\">\n";
|
|
|
|
|
|
|
|
|
|
// basics
|
|
|
|
@ -538,15 +530,15 @@ void CreateParentSItem( int numMP,
|
|
|
|
|
output += " <ATOM Name=\"Drop or Sell\" Value=\"";
|
|
|
|
|
|
|
|
|
|
if ( !dropOrSell )
|
|
|
|
|
// il s'agit d'un item de mission, non vendable
|
|
|
|
|
// mission items can't be sold
|
|
|
|
|
output += "false\"/>\n";
|
|
|
|
|
else
|
|
|
|
|
// sinon, on peut le vendre
|
|
|
|
|
// the others, yes
|
|
|
|
|
output += "true\"/>\n";
|
|
|
|
|
|
|
|
|
|
output += " <ATOM Name=\"Bulk\" Value=\"0.5\"/>\n </STRUCT>\n";
|
|
|
|
|
|
|
|
|
|
// mp
|
|
|
|
|
// raw mat
|
|
|
|
|
output += " <STRUCT Name=\"mp\">\n";
|
|
|
|
|
output += " <ATOM Name=\"Family\" Value=\"";
|
|
|
|
|
output += nomMP;
|
|
|
|
@ -573,16 +565,16 @@ void CreateParentSItem( int numMP,
|
|
|
|
|
|
|
|
|
|
output += " </STRUCT>\n </STRUCT>\n";
|
|
|
|
|
|
|
|
|
|
// fin du fichier
|
|
|
|
|
// end of file
|
|
|
|
|
output += " <STRUCT/>\n <STRUCT/>\n <STRUCT/>\n <STRUCT/>\n</FORM>\n";
|
|
|
|
|
|
|
|
|
|
// écriture finale
|
|
|
|
|
// final write
|
|
|
|
|
output.writeToFile( outputFileName );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Remplit les différents informations concernant le craft par un item
|
|
|
|
|
// Fill information related to craft with an item
|
|
|
|
|
void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
int worstStat1, int worstStat2, CSString& outStr )
|
|
|
|
|
{
|
|
|
|
@ -630,8 +622,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
|
|
|
|
|
currentDocItem.push( DtCraftSlotName, craftParts[index].Desc.splitFrom( "(" ).splitTo( ")" ) );
|
|
|
|
|
|
|
|
|
|
// enregistrements des stats de chaque
|
|
|
|
|
// caractèristique
|
|
|
|
|
// save stats for each characteristic
|
|
|
|
|
for ( int i=0; i<NumMPStats; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( craftParts[index].Carac[i] )
|
|
|
|
@ -641,7 +632,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
else
|
|
|
|
|
stat = mediumStatsByStatQuality[ level ];
|
|
|
|
|
|
|
|
|
|
// gestion des points forts/faibles de la MP
|
|
|
|
|
// manage weak/strong points of a raw mat
|
|
|
|
|
if ( i == bestStat )
|
|
|
|
|
{
|
|
|
|
|
if ( worstStat2 == -1 )
|
|
|
|
@ -651,8 +642,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
|
|
|
|
|
if ( stat > 100 )
|
|
|
|
|
{
|
|
|
|
|
// si une des stats dépasse 100, les autres
|
|
|
|
|
// stats sont augmentées
|
|
|
|
|
// if a stat exceeds 100, other are increased
|
|
|
|
|
remaining = stat - 100;
|
|
|
|
|
stat = 100;
|
|
|
|
|
}
|
|
|
|
@ -661,7 +651,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
{
|
|
|
|
|
stat -= 20;
|
|
|
|
|
|
|
|
|
|
// durabilité minimum
|
|
|
|
|
// minimum durability
|
|
|
|
|
if ( ( i == 0 ) && ( stat < 1 ) )
|
|
|
|
|
stat = 1;
|
|
|
|
|
}
|
|
|
|
@ -677,7 +667,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
if ( nbToRaise != 0 )
|
|
|
|
|
ajout = remaining/nbToRaise;
|
|
|
|
|
|
|
|
|
|
// ajout des informations pour chaque carac
|
|
|
|
|
// add information for each characteristic
|
|
|
|
|
for ( int i=0; i<NumMPStats; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( stats[i] != -1 )
|
|
|
|
@ -696,7 +686,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CraftCivSpec en fonction de l'écosystème
|
|
|
|
|
// CraftCivSpec depending on ecosystem
|
|
|
|
|
outStr += " <ATOM Name=\"CraftCivSpec\" Value=\"";
|
|
|
|
|
CSString craftCiv;
|
|
|
|
|
|
|
|
|
@ -739,7 +729,7 @@ void FillCraftData( char craft, int eco, int level, bool creature, int bestStat,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Création d'une fiche d'item
|
|
|
|
|
// Create item sheets
|
|
|
|
|
void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
const CSString& code, char eco,
|
|
|
|
|
int level, const MPCraftStats& craftStats,
|
|
|
|
@ -801,7 +791,7 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
else
|
|
|
|
|
currentDocItem.push( DtLevelZone, "-" );
|
|
|
|
|
|
|
|
|
|
// remplissage des informations de la fiche
|
|
|
|
|
// fill sheets information
|
|
|
|
|
output = "<?xml version=\"1.0\"?>\n<FORM Version=\"0.0\" State=\"modified\">\n";
|
|
|
|
|
output += " <PARENT Filename=\"_m";
|
|
|
|
|
output += eco;
|
|
|
|
@ -809,7 +799,7 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
output += chaineNum;
|
|
|
|
|
output += ".sitem\"/>\n";
|
|
|
|
|
|
|
|
|
|
// le code est celui d'une créature, on doit donc rajouter le parent
|
|
|
|
|
// if a creature code, add it its parent
|
|
|
|
|
if ( creature )
|
|
|
|
|
{
|
|
|
|
|
output += " <PARENT Filename=\"_m";
|
|
|
|
@ -824,7 +814,7 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
output += " <STRUCT Name=\"mp\">\n";
|
|
|
|
|
output += " <ATOM Name=\"MpColor\" Value=\"";
|
|
|
|
|
|
|
|
|
|
// materiaux de missions toujours Beige
|
|
|
|
|
// mission materials always Beige
|
|
|
|
|
if ( craftStats.Craft.empty() )
|
|
|
|
|
{
|
|
|
|
|
output += "Beige\"/>\n";
|
|
|
|
@ -833,14 +823,14 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// on récupère la couleur
|
|
|
|
|
// get the color
|
|
|
|
|
GetItemColor( craftStats.color, eco, level, color );
|
|
|
|
|
output += color;
|
|
|
|
|
output += "\"/>\n";
|
|
|
|
|
|
|
|
|
|
currentDocItem.push( DtColor, color );
|
|
|
|
|
|
|
|
|
|
// on ajoute les données de craft
|
|
|
|
|
// add craft data
|
|
|
|
|
output += " <STRUCT Name=\"MpParam\">\n";
|
|
|
|
|
for ( uint i=0; i<craftStats.Craft.size(); i++ )
|
|
|
|
|
{
|
|
|
|
@ -906,7 +896,7 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
|
|
|
|
|
output.writeToFile( toString( "%s%s\\%s", MP_DIRECTORY.c_str(), directory.c_str(), outputFileName.c_str() ) );
|
|
|
|
|
|
|
|
|
|
// Génération des noms
|
|
|
|
|
// Generate names
|
|
|
|
|
if ( !specialItem )
|
|
|
|
|
{
|
|
|
|
|
outputFileName = toString( "m%04d%s%c%c%02d", numMP, code.c_str(), eco, 'a' + level, variation );
|
|
|
|
@ -934,7 +924,7 @@ void CreateSheet( int numMP, const CSString& nomMP,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Pour une MP se trouvant dans des déposits, génération de ses items
|
|
|
|
|
// Generate deposits items for harvested raw mats
|
|
|
|
|
void GenerateDepositItems( int numMP, const CSString& nomMP, const MPCraftStats& craftStats, const CSString& loc )
|
|
|
|
|
{
|
|
|
|
|
CSString code;
|
|
|
|
@ -959,11 +949,11 @@ void GenerateDepositItems( int numMP, const CSString& nomMP, const MPCraftStats&
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// 2 items dans common
|
|
|
|
|
// 2 items in common
|
|
|
|
|
CreateSheet( numMP, nomMP, code, 'c', 1, craftStats );
|
|
|
|
|
CreateSheet( numMP, nomMP, code, 'c', 2, craftStats );
|
|
|
|
|
|
|
|
|
|
// 3 items par zone
|
|
|
|
|
// 3 items per zone
|
|
|
|
|
for ( int i=0; i<3; i++ )
|
|
|
|
|
{
|
|
|
|
|
CreateSheet( numMP, nomMP, code, 'd', 3+i, craftStats );
|
|
|
|
@ -976,24 +966,24 @@ void GenerateDepositItems( int numMP, const CSString& nomMP, const MPCraftStats&
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Pour une MP se trouvant sur un créature, génération de ses items
|
|
|
|
|
// Generate creatures items for a looted raw mat
|
|
|
|
|
void GenerateCreatureItems( int numMP, CSString& nomMP, const MPCraftStats& craftStats )
|
|
|
|
|
{
|
|
|
|
|
map<CSString, ListeCreatureMP>::const_iterator itLCMP;
|
|
|
|
|
int quality;
|
|
|
|
|
static int statQuality[] = { 0, 1, 0, 1, 3, 6, 4, 2 };
|
|
|
|
|
|
|
|
|
|
// On obtient la liste des niveau d'item à generer pour la créature
|
|
|
|
|
// Get items levels to generate for the creature
|
|
|
|
|
itLCMP = itemsAGenerer.find( nomMP.firstWord() );
|
|
|
|
|
|
|
|
|
|
if ( itLCMP != itemsAGenerer.end() )
|
|
|
|
|
{
|
|
|
|
|
ListeCreatureMP::const_iterator itMP = (*itLCMP).second.begin();
|
|
|
|
|
|
|
|
|
|
// pour chaque niveau d'item à générer
|
|
|
|
|
// for each level of an item to generate
|
|
|
|
|
while ( itMP != (*itLCMP).second.end() )
|
|
|
|
|
{
|
|
|
|
|
// on enregistre ses caractéristiques
|
|
|
|
|
// save its stats
|
|
|
|
|
char eco = (*itMP)->eco;
|
|
|
|
|
int creatureLevel = (*itMP)->creatureLevel;
|
|
|
|
|
int itemLevel = (*itMP)->itemLevel;
|
|
|
|
@ -1043,7 +1033,7 @@ void GenerateCreatureItems( int numMP, CSString& nomMP, const MPCraftStats& craf
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Génération d'un item spécial
|
|
|
|
|
// Generate special item
|
|
|
|
|
void GenerateSpecialItem( int numMP, const CSString& nomMP, const MPCraftStats& craftStats,
|
|
|
|
|
const CSString& loc,CSString& itemData, int variation )
|
|
|
|
|
{
|
|
|
|
@ -1060,15 +1050,15 @@ void GenerateSpecialItem( int numMP, const CSString& nomMP, const MPCraftStats&
|
|
|
|
|
CreateSheet( numMP, nomMP, code, info.c_str()[0], info.c_str()[1]-'a', craftStats, true, variation );
|
|
|
|
|
|
|
|
|
|
name = toString( "m%04d%s%s%02d\t", numMP, code.c_str(), info.c_str(), variation );
|
|
|
|
|
name += itemData.splitTo( "/", true ); // singulier
|
|
|
|
|
name += itemData.splitTo( "/", true ); // singular
|
|
|
|
|
name += "\t";
|
|
|
|
|
name += itemData.splitTo( "/", true ); // article indéfini
|
|
|
|
|
name += itemData.splitTo( "/", true ); // undefined article
|
|
|
|
|
name += "\t";
|
|
|
|
|
name += itemData.splitTo( "/", true ); // article défini
|
|
|
|
|
name += itemData.splitTo( "/", true ); // defined article
|
|
|
|
|
name += "\t";
|
|
|
|
|
name += itemData.splitTo( "/", true ); // pluriel
|
|
|
|
|
name += itemData.splitTo( "/", true ); // plural
|
|
|
|
|
name += "\t\t";
|
|
|
|
|
name += itemData.splitTo( "/", true ); // article pluriel
|
|
|
|
|
name += itemData.splitTo( "/", true ); // plural article
|
|
|
|
|
|
|
|
|
|
itemNames.insert( name );
|
|
|
|
|
}
|
|
|
|
@ -1095,7 +1085,7 @@ void parseSpecialAttributes(const CSString &specialAttributes, MPCraftStats &cra
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Nouvelle MP à traiter
|
|
|
|
|
// New raw mat to process
|
|
|
|
|
void NewMP( CSString& ligne )
|
|
|
|
|
{
|
|
|
|
|
CSString nomMP, groupe, loc, icon, overlay, special, stat, specialAttributes;
|
|
|
|
@ -1113,7 +1103,7 @@ void NewMP( CSString& ligne )
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// récupération des infos
|
|
|
|
|
// get information
|
|
|
|
|
groupe = ligne.splitTo( ";", true );
|
|
|
|
|
craftStats.Craft = ligne.splitTo( ";", true );
|
|
|
|
|
specialAttributes= ligne.splitTo( ";" , true );
|
|
|
|
@ -1189,7 +1179,7 @@ void NewMP( CSString& ligne )
|
|
|
|
|
currentDocItem.push( DtRMFamily, nomMP );
|
|
|
|
|
currentDocItem.push( DtGroup, groupe );
|
|
|
|
|
|
|
|
|
|
// récupréation du numéro de MP
|
|
|
|
|
// get raw mat number
|
|
|
|
|
numMP = GetNumeroMP( nomMP );
|
|
|
|
|
printf( " Processing Family %d : %s\n", numMP, nomMP.c_str() );
|
|
|
|
|
|
|
|
|
@ -1203,12 +1193,12 @@ void NewMP( CSString& ligne )
|
|
|
|
|
MPFamilies[numMP].Icon= icon;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// MP trouvées dans les déposits ou dans la goo
|
|
|
|
|
// raw mats found in deposits or goo
|
|
|
|
|
if ( loc.left(1) != "C" )
|
|
|
|
|
{
|
|
|
|
|
if ( !specialOnly )
|
|
|
|
|
{
|
|
|
|
|
// Génération des items
|
|
|
|
|
// Generate items
|
|
|
|
|
GenerateDepositItems( numMP, nomMP, craftStats, loc );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1221,14 +1211,14 @@ void NewMP( CSString& ligne )
|
|
|
|
|
|
|
|
|
|
overlay = nomMP.firstWord().toUpper().left(6);
|
|
|
|
|
}
|
|
|
|
|
// MP trouvées sur les creature
|
|
|
|
|
// looted raw mats
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GenerateCreatureItems( numMP, nomMP, craftStats );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// items spéciaux
|
|
|
|
|
// special items
|
|
|
|
|
CSString codeSpecial, nouveauCode;
|
|
|
|
|
int variation = 1;
|
|
|
|
|
CSortedStringSet::const_iterator it = specialNames.begin();
|
|
|
|
@ -1250,7 +1240,7 @@ void NewMP( CSString& ligne )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Création de la fiche parente pour la MP
|
|
|
|
|
// Create parent sheet for raw mat
|
|
|
|
|
CreateParentSItem( numMP, nomMP, groupe, extraInfo.DropOrSell, icon, overlay );
|
|
|
|
|
|
|
|
|
|
currentDocItem.reset( DtRMFamily );
|
|
|
|
@ -1260,7 +1250,7 @@ void NewMP( CSString& ligne )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Génération du Primitive Necklace (objet particulier)
|
|
|
|
|
// Generate Primitive Necklace (special object)
|
|
|
|
|
void CreatePrimitiveNecklace()
|
|
|
|
|
{
|
|
|
|
|
CSString output;
|
|
|
|
@ -1282,7 +1272,7 @@ void CreatePrimitiveNecklace()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Enregistre les différents noms
|
|
|
|
|
// Save names
|
|
|
|
|
void ItemNamesSave()
|
|
|
|
|
{
|
|
|
|
|
printf( "-- SAVING ITEM NAMES --\n");
|
|
|
|
@ -1325,8 +1315,7 @@ void ItemNamesSave()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Charge les différentes Customized Properties
|
|
|
|
|
// définies dans raw_material_generation.cfg
|
|
|
|
|
// Load Customized Properties defined in raw_material_generation.cfg
|
|
|
|
|
void LoadCustomizedProperties()
|
|
|
|
|
{
|
|
|
|
|
CSString data, name, prop, val;
|
|
|
|
@ -1356,7 +1345,7 @@ void LoadCustomizedProperties()
|
|
|
|
|
CSString fileName, str, output;
|
|
|
|
|
fileName = CPath::lookup( name, false, false, true );
|
|
|
|
|
|
|
|
|
|
// on vérifie que le fichier concerné existe
|
|
|
|
|
// check if file exists
|
|
|
|
|
if ( !fileName.empty() )
|
|
|
|
|
{
|
|
|
|
|
CSString zone = prop.splitTo( ".", true );
|
|
|
|
@ -1368,7 +1357,7 @@ void LoadCustomizedProperties()
|
|
|
|
|
output += toString( "%s\">\n <ATOM Name=\"", zone.c_str() );
|
|
|
|
|
output += toString( "%s\" Value=\"%s\"/>\n </STRUCT>", prop.c_str(), val.c_str() );
|
|
|
|
|
|
|
|
|
|
// on vérifie que la propriétés n'a pas déjà été insérée
|
|
|
|
|
// check if property is not already inserted
|
|
|
|
|
if ( !str.contains( output.c_str() ) )
|
|
|
|
|
{
|
|
|
|
|
str = str.replace( "<STRUCT>", output.c_str() );
|
|
|
|
@ -1381,7 +1370,7 @@ void LoadCustomizedProperties()
|
|
|
|
|
output += toString( " <ATOM Name=\"" );
|
|
|
|
|
output += toString( "%s\" Value=\"%s\"/>\n", prop.c_str(), val.c_str() );
|
|
|
|
|
|
|
|
|
|
// on vérifie que la propriétés n'a pas déjà été insérée
|
|
|
|
|
// check if property is not already inserted
|
|
|
|
|
if ( !str.contains( toString( "%s\" Value=\"%s\"/>\n", prop.c_str(), val.c_str() ).c_str() ) )
|
|
|
|
|
{
|
|
|
|
|
str = str.replace( toString( " <STRUCT Name=\"%s\">\n", zone.c_str() ).c_str(), output.c_str() );
|
|
|
|
@ -1422,7 +1411,7 @@ void SaveFamiliesForageSource()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Génère la documentation
|
|
|
|
|
// Generate documentation
|
|
|
|
|
void GenerateDoc()
|
|
|
|
|
{
|
|
|
|
|
CProducedDocHtml MainDoc;
|
|
|
|
@ -1470,7 +1459,7 @@ void GenerateDoc()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Initialise les repertoires à partir de raw_material_generation.cfg
|
|
|
|
|
// Initialize directories from raw_material_generation.cfg
|
|
|
|
|
void SetupDirectories()
|
|
|
|
|
{
|
|
|
|
|
CSString data;
|
|
|
|
@ -1503,8 +1492,7 @@ void SetupDirectories()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Parcours les différentes familles de MP pour effectuer
|
|
|
|
|
// les traitements nécessaires
|
|
|
|
|
// Browse all raw mats families to do all related processes
|
|
|
|
|
void LoadFamillesMP()
|
|
|
|
|
{
|
|
|
|
|
printf( "-- LOADING RAW MATERIAL FAMILIES --\n" );
|
|
|
|
@ -1530,14 +1518,13 @@ void LoadFamillesMP()
|
|
|
|
|
|
|
|
|
|
ligne = fileData.splitTo( "\n", true );
|
|
|
|
|
|
|
|
|
|
while ( ligne != "" )
|
|
|
|
|
while ( !ligne.empty() )
|
|
|
|
|
{
|
|
|
|
|
NewMP( ligne );
|
|
|
|
|
ligne = fileData.splitTo( "\n", true );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// le Primitive Necklace n'étant pas spécifié dans la liste des MP
|
|
|
|
|
// on le rajoute à la main
|
|
|
|
|
// we manually add Primitive Necklace because it's not specified in raw mats list
|
|
|
|
|
CreatePrimitiveNecklace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|