Salut salut,
Je reviens pour un nouveau problème que je rencontre, je vais résumer rapidement.
Actuellement j'arrive a récupérer les infos des "farmCell". Sur certaines map ça fonction mais sur la plupart ça marche pas du tout. :(
Donc d'après mes test/analyse, le serveur envoi MapComplementaryInformationsDataMessage, avec StatedElement pour savoir si il est récoltable ou pas, et InteractiveElement pour les autres infos pour la lecture d2o.
Déjà premier question, pourquoi il y plus d'InteractiveElement que de ressources sur la map ?
Ensuite je compare l'elementID du de chaques InteractiveElement reçus avec l'identifier du GraphicalElement des dlm et si c'est les mêmes alors ça veut dire que la cell est une farmCell.
Sauf que sur la plupart des maps, il y a les "bonne" cell mais le reste c'est des cell où il n'y a absolument rien comme ressource.
Par exemple sur cette map on voit bien 3 ressources.
Loading Image
Sauf que moi j’obtiens les 3, mais 2 de trop.
Loading Image
Voici le code :
Dès la réception du MapComplementary
Cliquez pour révéler
Cliquez pour masquer
StaticInfos.element.Clear();
foreach (InteractiveElement i in mcidm.interactiveElements)
{
if (i is InteractiveElementWithAgeBonus)
StaticInfos.element.Add(i as InteractiveElementWithAgeBonus);
}
StaticInfos.statedElement = mcidm.statedElements;
MainWindow._MainWindow.setRessourceOnMap();
La fonction qui m'affiche les données :
setRessourceOnMap
Cliquez pour révéler
Cliquez pour masquer
string canGather = "";
string ressourceName;
MapData.setFarmCell();
ressourceOnMap.Items.Clear();
foreach (UsableElement i in StaticInfos.usableElement)
{
foreach (InteractiveElementSkill ie in i.skills)
{
DataClass d = GameData.GetDataObject("Skills", ie.skillId);
if ((int)d.Fields["gatheredRessourceItem"] == -1)
continue;
int iId = (int)d.Fields["interactiveId"];
ressourceName = I18n.GetText((int)GameData.GetDataObject("Interactives", iId).Fields["nameId"]);
foreach (StatedElement se in StaticInfos.statedElement)
{
if (se.elementId == i.elementId)
{
canGather = se.elementState == 0 ? "Non" : "Oui";
break;
}
}
ressourceOnMap.Items.Add(new RessourceOnMap() { Name = ressourceName, cellId = i.cellId ,canGather = canGather});
canGather = "";
}
}
}
setFarmCell
Cliquez pour révéler
Cliquez pour masquer
UsableElement item;
bool Bool = true;
StaticInfos.usableElement.Clear();
foreach (InteractiveElementWithAgeBonus i in StaticInfos.element)
{
InteractiveElementWithAgeBonus ie = (InteractiveElementWithAgeBonus)i;
if (ie.enabledSkills.Count >= 1)
{
foreach (Layer l in Data.layers)
{
foreach (Cell c in l.cells)
{
foreach (BasicElement b in c.elements)
{
if (b is GraphicalElement)
{
GraphicalElement ge = b as GraphicalElement;
if (ge.identifier == ie.elementId)
{
item = new UsableElement()
{
cellId = c.cellId,
elementId = ie.elementId,
element = ie,
skills = ie.enabledSkills
};
foreach (UsableElement u in StaticInfos.usableElement)
{
if (u.cellId == item.cellId)
Bool = false;
}
if (Bool)
StaticInfos.usableElement.Add(item);
Bool = true;
}
}
}
}
}
}
}
Voilà si quelqu'un pourrais m'aider et me dire comment récupérer parfaitement les cells, ou me corriger ça serai top :)