Search in sources :

Example 11 with DeedProxy

use of delta.games.lotro.lore.deeds.DeedProxy in project lotro-tools by dmorcellet.

the class DeedLinksResolver method checkForUnwantedChildren.

private void checkForUnwantedChildren(DeedDescription deed) {
    List<DeedProxy> children = deed.getChildDeedProxies().getDeedProxies();
    // Grab child deed names
    Map<String, DeedProxy> childNames = new HashMap<String, DeedProxy>();
    for (DeedProxy child : children) {
        childNames.put(child.getName(), child);
    }
    // For each child, check if one of its previous is the children list
    List<DeedProxy> toRemove = new ArrayList<DeedProxy>();
    for (DeedProxy child : children) {
        DeedDescription childDeed = child.getDeed();
        DeedProxy previous = childDeed.getPreviousDeedProxy();
        while (previous != null) {
            DeedProxy previousInChildren = childNames.get(previous.getName());
            if (previousInChildren != null) {
                toRemove.add(previousInChildren);
                break;
            }
            DeedDescription previousDeed = previous.getDeed();
            previous = (previousDeed != null) ? previousDeed.getPreviousDeedProxy() : null;
        }
    }
    children.removeAll(toRemove);
}
Also used : DeedDescription(delta.games.lotro.lore.deeds.DeedDescription) DeedProxy(delta.games.lotro.lore.deeds.DeedProxy) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList)

Example 12 with DeedProxy

use of delta.games.lotro.lore.deeds.DeedProxy in project lotro-tools by dmorcellet.

the class LotroWikiDeedPageParser method parseDeed.

private DeedDescription parseDeed(int startIndex, String[] lines, String deedName) {
    DeedDescription deed = new DeedDescription();
    deed.setName(deedName);
    deed.setType(null);
    Rewards rewards = deed.getRewards();
    // Reputation
    Faction faction = null;
    Integer reputation = null;
    // Virtues
    VirtueId virtueId = null;
    Integer virtueCount = null;
    // Item rewards
    String[] itemRewards = null;
    Integer[] itemRewardCounts = null;
    // Categories
    String deedType = null;
    String deedSubtype = null;
    String regionalSub = null;
    // Deeds chain
    List<String> deedsChain = new ArrayList<String>();
    for (int index = startIndex + 1; index < lines.length; index++) {
        String line = lines[index].trim();
        if (line.contains("{{Deed"))
            break;
        String lineKey = fetchLineKey(line);
        // System.out.println(line);
        if ("name".equals(lineKey)) {
        // String name=getLineValue(line);
        // deed.setName(name);
        } else if ("Lore-text".equals(lineKey)) {
            String description = getLineValue(line);
            description = normalize(description);
            deed.setDescription(description);
        } else if ("Objective".equals(lineKey)) {
            StringBuilder sb = new StringBuilder();
            String firstLine = getLineValue(line);
            sb.append(firstLine);
            while (true) {
                String nextLine = lines[index + 1].trim();
                if (nextLine.startsWith("|")) {
                    break;
                }
                sb.append('\n').append(nextLine);
                index++;
            }
            String objectives = sb.toString().trim();
            objectives = normalize(objectives);
            deed.setObjectives(objectives);
        } else if ("Faction".equals(lineKey)) {
            faction = extractFaction(line);
        } else if ("Reputation".equals(lineKey)) {
            String repValue = getLineValue(line).replace(",", "");
            reputation = NumericTools.parseInteger(repValue);
        } else if ("Title".equals(lineKey)) {
            Title title = extractTitle(line);
            if (title != null) {
                rewards.addTitle(title);
            }
        } else if ("Virtue".equals(lineKey)) {
            virtueId = extractVirtue(line);
        } else if ("Virtue-value".equals(lineKey)) {
            virtueCount = NumericTools.parseInteger(getLineValue(line));
        } else if ("TP-reward".equals(lineKey)) {
            String tpStr = getLineValue(line);
            if ((!tpStr.isEmpty()) && (!"???".equals(tpStr))) {
                Integer tp = NumericTools.parseInteger(tpStr, false);
                if (tp != null) {
                    rewards.setLotroPoints(tp.intValue());
                } else {
                    _logger.warn("Bad LOTRO points value in file " + _currentFile + ": [" + tpStr + "]");
                }
            }
        } else if ("SM-reward".equals(lineKey)) {
            String smStr = getLineValue(line);
            if (!smStr.isEmpty()) {
                Integer marks = NumericTools.parseInteger(smStr, false);
                if (marks != null) {
                    ObjectsSet objects = deed.getRewards().getObjects();
                    ObjectItem item = new ObjectItem("Mark");
                    item.setItemId(1879224343);
                    objects.addObject(item, marks.intValue());
                } else {
                    _logger.warn("Bad SM value in file " + _currentFile + ": [" + smStr + "]");
                }
            }
        } else if ("CTP-reward".equals(lineKey)) {
            String value = getLineValue(line);
            if ("Y".equals(value)) {
            // TODO Class Trait Point
            }
        } else if ("Trait-reward".equals(lineKey)) {
            String traitStr = getLineValue(line);
            if (!traitStr.isEmpty()) {
                handleTraitReward(rewards, traitStr);
            }
        } else if ("Emote-reward".equals(lineKey)) {
            String emoteStr = getLineValue(line);
            if (!emoteStr.isEmpty()) {
                handleEmoteReward(rewards, emoteStr);
            }
        } else if ("Skill-reward".equals(lineKey)) {
            String skillStr = getLineValue(line);
            if (!skillStr.isEmpty()) {
                handleSkillReward(rewards, skillStr);
            }
        } else if ("Level".equals(lineKey)) {
            String levelStr = getLineValue(line);
            if ("?".equals(levelStr))
                levelStr = "";
            if ("???".equals(levelStr))
                levelStr = "";
            if (!levelStr.isEmpty()) {
                levelStr = levelStr.replace("&lt;", "<");
                if (levelStr.startsWith("<="))
                    levelStr = levelStr.substring(2);
                if (levelStr.equals("{{Level Cap}}"))
                    levelStr = "1000";
                if (levelStr.endsWith("+"))
                    levelStr = levelStr.substring(0, levelStr.length() - 1);
                levelStr = removeXmlComments(levelStr);
                Integer level = NumericTools.parseInteger(levelStr, false);
                if (level != null) {
                    deed.setMinLevel(level);
                } else {
                    _logger.warn("Bad level value in file " + _currentFile + ": [" + levelStr + "]");
                }
            }
        } else if ("Deed-type".equals(lineKey)) {
            deedType = getLineValue(line);
        } else if ("Deed-subtype".equals(lineKey)) {
            deedSubtype = getLineValue(line);
        } else if ("Regional-sub".equals(lineKey)) {
            regionalSub = getLineValue(line);
        } else if ((lineKey != null) && (lineKey.startsWith(DEED_CHAIN_SEED))) {
            Integer deedIndex = NumericTools.parseInteger(lineKey.substring(DEED_CHAIN_SEED.length()));
            if (deedIndex != null) {
                // Add missing entries
                int nbMissingEntries = deedIndex.intValue() - deedsChain.size();
                for (int i = 0; i < nbMissingEntries; i++) {
                    deedsChain.add(null);
                }
                // Set deed name in chain
                String deedNameInChain = getLineValue(line);
                deedsChain.set(deedIndex.intValue() - 1, deedNameInChain);
            }
        } else if ("Parent-deed".equals(lineKey)) {
            String parentDeed = getLineValue(line);
            if (!parentDeed.isEmpty()) {
                if (useParentDeedInfo(parentDeed, deedName)) {
                    parentDeed = fixParentDeedInfo(parentDeed, deedName);
                    DeedProxy parentProxy = new DeedProxy();
                    parentProxy.setName(parentDeed);
                    deed.getParentDeedProxies().add(parentProxy);
                }
            }
        }
        for (int i = 1; i <= 3; i++) {
            String suffix = (i != 1) ? String.valueOf(i) : "";
            if (("Item-reward" + suffix).equals(lineKey)) {
                String itemName = getLineValue(line);
                if (!itemName.isEmpty()) {
                    if (itemRewards == null) {
                        itemRewards = new String[3];
                    }
                    itemRewards[i - 1] = itemName;
                }
            }
            if (("Item-amount" + suffix).equals(lineKey)) {
                String itemCountStr = getLineValue(line);
                if (!itemCountStr.isEmpty()) {
                    if (itemRewardCounts == null) {
                        itemRewardCounts = new Integer[3];
                    }
                    itemRewardCounts[i - 1] = NumericTools.parseInteger(itemCountStr);
                }
            }
        }
    /*
| DP-reward    = 
| Hidden       = 
| Meta-deed     = 
| Extra         = 
       */
    }
    if ((faction != null) && (reputation != null)) {
        ReputationItem item = new ReputationItem(faction);
        item.setAmount(reputation.intValue());
        rewards.getReputation().add(item);
    }
    if (virtueId != null) {
        int count = (virtueCount != null) ? virtueCount.intValue() : 1;
        Virtue virtue = new Virtue(virtueId, count);
        rewards.addVirtue(virtue);
    }
    if (itemRewards != null) {
        handleItemRewards(deed, itemRewards, itemRewardCounts);
    }
    // Categories
    handleCategories(deed, deedType, deedSubtype, regionalSub);
    // Deeds chain
    handleDeedsChain(deed, deedsChain);
    return deed;
}
Also used : DeedDescription(delta.games.lotro.lore.deeds.DeedDescription) ArrayList(java.util.ArrayList) Title(delta.games.lotro.common.Title) ReputationItem(delta.games.lotro.common.ReputationItem) ObjectItem(delta.games.lotro.common.objects.ObjectItem) VirtueId(delta.games.lotro.common.VirtueId) DeedProxy(delta.games.lotro.lore.deeds.DeedProxy) Rewards(delta.games.lotro.common.Rewards) ObjectsSet(delta.games.lotro.common.objects.ObjectsSet) Virtue(delta.games.lotro.common.Virtue) Faction(delta.games.lotro.lore.reputation.Faction)

Example 13 with DeedProxy

use of delta.games.lotro.lore.deeds.DeedProxy in project lotro-tools by dmorcellet.

the class DeedsContainer method resolveProxies.

private void resolveProxies() {
    for (DeedDescription deed : _deeds) {
        DeedProxy previousProxy = deed.getPreviousDeedProxy();
        if (previousProxy != null) {
            resolveProxy(previousProxy);
        }
        DeedProxy nextProxy = deed.getNextDeedProxy();
        if (nextProxy != null) {
            resolveProxy(nextProxy);
        }
    }
}
Also used : DeedDescription(delta.games.lotro.lore.deeds.DeedDescription) DeedProxy(delta.games.lotro.lore.deeds.DeedProxy)

Example 14 with DeedProxy

use of delta.games.lotro.lore.deeds.DeedProxy in project lotro-tools by dmorcellet.

the class LotroWikiDeedPageParser method handleDeedsChain.

private void handleDeedsChain(DeedDescription deed, List<String> deedsChain) {
    if (!useDeedsChain(deed))
        return;
    deedsChain = normalizeDeedsChain(deedsChain);
    if (deedsChain.size() == 0)
        return;
    String name = deed.getName();
    int index = deedsChain.indexOf(name);
    if (index != -1) {
        if (index > 0) {
            DeedProxy previous = new DeedProxy();
            previous.setName(deedsChain.get(index - 1));
            deed.setPreviousDeedProxy(previous);
        }
        if (index < deedsChain.size() - 1) {
            DeedProxy next = new DeedProxy();
            next.setName(deedsChain.get(index + 1));
            deed.setNextDeedProxy(next);
        }
    } else {
        // Try to solve Hybold links
        if ("Hytbold (Deed)".equals(deedsChain.get(0))) {
            String parent = deedsChain.get(deedsChain.size() - 1);
            DeedProxy parentProxy = new DeedProxy();
            parentProxy.setName(parent);
            DeedProxy oldParentProxy = deed.getParentDeedProxies().getFirst();
            if (oldParentProxy != null) {
                if (!oldParentProxy.getName().equals(parent)) {
                    System.out.println("Mismatch!");
                }
            }
            deed.getParentDeedProxies().add(parentProxy);
        } else {
            System.out.println("Name [" + name + "] not found in [" + deedsChain);
        }
    }
}
Also used : DeedProxy(delta.games.lotro.lore.deeds.DeedProxy)

Example 15 with DeedProxy

use of delta.games.lotro.lore.deeds.DeedProxy in project lotro-tools by dmorcellet.

the class LotroCompendiumDeedsLoader method resolveProxies.

private void resolveProxies(List<DeedDescription> deeds) {
    for (DeedProxy proxy : _proxies) {
        int idToSearch = proxy.getId();
        for (DeedDescription deed : deeds) {
            if (deed.getIdentifier() == idToSearch) {
                proxy.setDeed(deed);
                proxy.setKey(deed.getKey());
                proxy.setName(deed.getName());
                break;
            }
        }
        if (proxy.getDeed() == null) {
            System.out.println("Unresolved deed: id=" + idToSearch);
        }
    }
}
Also used : DeedDescription(delta.games.lotro.lore.deeds.DeedDescription) DeedProxy(delta.games.lotro.lore.deeds.DeedProxy)

Aggregations

DeedProxy (delta.games.lotro.lore.deeds.DeedProxy)19 DeedDescription (delta.games.lotro.lore.deeds.DeedDescription)13 ArrayList (java.util.ArrayList)4 Rewards (delta.games.lotro.common.Rewards)2 Title (delta.games.lotro.common.Title)2 ObjectItem (delta.games.lotro.common.objects.ObjectItem)2 DeedProxies (delta.games.lotro.lore.deeds.DeedProxies)2 HashSet (java.util.HashSet)2 Emote (delta.games.lotro.common.Emote)1 ReputationItem (delta.games.lotro.common.ReputationItem)1 Trait (delta.games.lotro.common.Trait)1 Virtue (delta.games.lotro.common.Virtue)1 VirtueId (delta.games.lotro.common.VirtueId)1 ObjectsSet (delta.games.lotro.common.objects.ObjectsSet)1 Faction (delta.games.lotro.lore.reputation.Faction)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1