Clothing Validation fixes #842 #841

This commit is contained in:
Beny 2020-10-14 06:26:24 +02:00
parent e817431176
commit 96ecbfa8c2
2 changed files with 107 additions and 77 deletions

View File

@ -2,6 +2,7 @@ package com.eu.habbo.habbohotel.users.clothingvalidation;
import com.eu.habbo.habbohotel.users.Habbo;
import gnu.trove.TIntCollection;
import gnu.trove.map.hash.THashMap;
import gnu.trove.set.hash.TIntHashSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -97,87 +98,116 @@ public class ClothingValidationManager {
String[] newLookParts = look.split(Pattern.quote("."));
ArrayList<String> lookParts = new ArrayList<>();
THashMap<String, String[]> parts = new THashMap<>();
// add mandatory settypes
for(String lookpart : newLookParts) {
if(lookpart.contains("-")) {
try {
String[] data = lookpart.split(Pattern.quote("-"));
if (data.length > 1) {
FiguredataSettype settype = FIGUREDATA.settypes.get(data[0]);
if (settype == null) {
throw new Exception("Set type " + data[0] + " does not exist");
}
FiguredataPalette palette = FIGUREDATA.palettes.get(settype.paletteId);
if (palette == null) {
throw new Exception("Palette " + settype.paletteId + " does not exist");
}
int setId;
FiguredataSettypeSet set;
setId = Integer.parseInt(data[1]);
set = settype.getSet(setId);
if (set == null)
throw new Exception("Set " + setId + " does not exist in SetType");
if ((set.club && !isHC) || !set.selectable || (set.sellable && !ownedClothing.contains(set.id))) {
if(gender.equalsIgnoreCase("M") && !isHC && !settype.mandatoryMale0)
continue;
if(gender.equalsIgnoreCase("F") && !isHC && !settype.mandatoryFemale0)
continue;
if(gender.equalsIgnoreCase("M") && isHC && !settype.mandatoryMale1)
continue;
if(gender.equalsIgnoreCase("F") && isHC && !settype.mandatoryFemale1)
continue;
set = settype.getFirstNonHCSetForGender(gender);
setId = set.id;
}
ArrayList<String> dataParts = new ArrayList<>();
int color1 = -1;
int color2 = -1;
if (data.length > 2 && set.colorable) {
color1 = Integer.parseInt(data[2]);
FiguredataPaletteColor color = palette.getColor(color1);
if (color == null || (color.club && !isHC)) {
color1 = palette.getFirstNonHCColor().id;
}
}
if (data.length > 3 && set.colorable) {
color2 = Integer.parseInt(data[3]);
FiguredataPaletteColor color = palette.getColor(color2);
if (color == null || (color.club && !isHC)) {
color2 = palette.getFirstNonHCColor().id;
}
}
dataParts.add(settype.type);
dataParts.add("" + setId);
if (color1 > -1) {
dataParts.add("" + color1);
}
if (color2 > -1) {
dataParts.add("" + color2);
}
lookParts.add(String.join("-", dataParts));
}
}
catch (Exception e) {
//habbo.alert(e.getMessage());
if (lookpart.contains("-")) {
String[] data = lookpart.split(Pattern.quote("-"));
FiguredataSettype settype = FIGUREDATA.settypes.get(data[0]);
if(settype != null) {
parts.put(data[0], data);
}
}
}
FIGUREDATA.settypes.entrySet().stream().filter(x -> !parts.containsKey(x.getKey())).forEach(x ->
{
FiguredataSettype settype = x.getValue();
if(gender.equalsIgnoreCase("M") && !isHC && !settype.mandatoryMale0)
return;
if(gender.equalsIgnoreCase("F") && !isHC && !settype.mandatoryFemale0)
return;
if(gender.equalsIgnoreCase("M") && isHC && !settype.mandatoryMale1)
return;
if(gender.equalsIgnoreCase("F") && isHC && !settype.mandatoryFemale1)
return;
parts.put(x.getKey(), new String[] { x.getKey() });
});
parts.forEach((key, data) -> {
try {
if (data.length >= 1) {
FiguredataSettype settype = FIGUREDATA.settypes.get(data[0]);
if (settype == null) {
//throw new Exception("Set type " + data[0] + " does not exist");
return;
}
FiguredataPalette palette = FIGUREDATA.palettes.get(settype.paletteId);
if (palette == null) {
throw new Exception("Palette " + settype.paletteId + " does not exist");
}
int setId;
FiguredataSettypeSet set;
setId = Integer.parseInt(data.length >= 2 ? data[1] : "-1");
set = settype.getSet(setId);
if (set == null || (set.club && !isHC) || !set.selectable || (set.sellable && !ownedClothing.contains(set.id)) || (!set.gender.equalsIgnoreCase("U") && !set.gender.equalsIgnoreCase(gender))) {
if (gender.equalsIgnoreCase("M") && !isHC && !settype.mandatoryMale0)
return;
if (gender.equalsIgnoreCase("F") && !isHC && !settype.mandatoryFemale0)
return;
if (gender.equalsIgnoreCase("M") && isHC && !settype.mandatoryMale1)
return;
if (gender.equalsIgnoreCase("F") && isHC && !settype.mandatoryFemale1)
return;
set = settype.getFirstNonHCSetForGender(gender);
setId = set.id;
}
ArrayList<String> dataParts = new ArrayList<>();
int color1 = -1;
int color2 = -1;
if (set.colorable) {
color1 = data.length >= 3 ? Integer.parseInt(data[2]) : -1;
FiguredataPaletteColor color = palette.getColor(color1);
if (color == null || (color.club && !isHC)) {
color1 = palette.getFirstNonHCColor().id;
}
}
if (data.length >= 4 && set.colorable) {
color2 = Integer.parseInt(data[3]);
FiguredataPaletteColor color = palette.getColor(color2);
if (color == null || (color.club && !isHC)) {
color2 = palette.getFirstNonHCColor().id;
}
}
dataParts.add(settype.type);
dataParts.add("" + setId);
if (color1 > -1) {
dataParts.add("" + color1);
}
if (color2 > -1) {
dataParts.add("" + color2);
}
lookParts.add(String.join("-", dataParts));
}
} catch (Exception e) {
//habbo.alert(e.getMessage());
LOGGER.error("Error in clothing validation", e);
}
});
return String.join(".", lookParts);
}

View File

@ -20,7 +20,7 @@ public class FiguredataPalette {
}
public FiguredataPaletteColor getFirstNonHCColor() {
for(FiguredataPaletteColor color : this.colors.descendingMap().values()) {
for(FiguredataPaletteColor color : this.colors.values()) {
if(!color.club && color.selectable)
return color;
}