Search in sources :

Example 1 with Title

use of delta.games.lotro.common.Title in project lotro-tools by dmorcellet.

the class LotroCompendiumDeedsLoader method buildDeedFromRawData.

@SuppressWarnings("unchecked")
private DeedDescription buildDeedFromRawData(Object data) {
    if (!(data instanceof Map)) {
        return null;
    }
    Map<String, Object> map = (Map<String, Object>) data;
    DeedDescription deed = new DeedDescription();
    // [d, c, next, pois, o, virtues, prev, id, mobs, t, level, emotes, name, reputation, titles, traits, receive, zone]
    // [mobs]
    // ID
    Double id = (Double) map.get("id");
    deed.setIdentifier(id.intValue());
    // Name
    String name = (String) map.get("name");
    deed.setName(name);
    // Description
    String description = (String) map.get("d");
    if (description != null) {
        description = description.replace("  ", " ");
    }
    deed.setDescription(description);
    /*
    // c=Comments?
    List<String> comments=(List<String>)map.get("c");
    // TODO
     */
    // Previous
    List<Double> prevIds = (List<Double>) map.get("prev");
    if (prevIds != null) {
        if (prevIds.size() > 1) {
            System.out.println("Multiple previous deeds for id=" + deed.getIdentifier() + ": " + prevIds);
        }
        for (Double prevId : prevIds) {
            DeedProxy previousDeedProxy = new DeedProxy();
            previousDeedProxy.setId(prevId.intValue());
            deed.setPreviousDeedProxy(previousDeedProxy);
            _proxies.add(previousDeedProxy);
        }
    }
    // Next
    List<Double> nextIds = (List<Double>) map.get("next");
    if (nextIds != null) {
        if (nextIds.size() > 1) {
            System.out.println("Multiple next deeds for id=" + deed.getIdentifier() + ": " + nextIds);
        }
        for (Double nextId : nextIds) {
            DeedProxy nextDeedProxy = new DeedProxy();
            nextDeedProxy.setId(nextId.intValue());
            deed.setNextDeedProxy(nextDeedProxy);
            _proxies.add(nextDeedProxy);
        }
    }
    /*
    // pois
    // TODO
    // mobs
    // TODO
    List<Object> mobs=(List<Object>)map.get("mobs");
    */
    // Type
    String type = (String) map.get("t");
    handleType(deed, type);
    // Zone
    String zone = (String) map.get("zone");
    zone = normalizeZone(zone);
    deed.setCategory(zone);
    // Objectives
    String objectives = (String) map.get("o");
    if (objectives != null) {
        objectives = objectives.replace("  ", " ");
        objectives = objectives.replace("Find\n", "");
        objectives = objectives.replace("Find ", "");
    }
    deed.setObjectives(objectives);
    // Level
    Double level = (Double) map.get("level");
    if (level != null) {
        deed.setMinLevel(Integer.valueOf(level.intValue()));
    }
    // Rewards
    Rewards rewards = deed.getRewards();
    // - titles
    {
        List<Object> titles = (List<Object>) map.get("titles");
        if (titles != null) {
            for (Object title : titles) {
                Map<String, Object> titleMap = (Map<String, Object>) title;
                String titleLabel = (String) titleMap.get("val");
                Title titleRewards = new Title(titleLabel, titleLabel);
                rewards.addTitle(titleRewards);
            }
        }
    }
    // - traits
    {
        List<Object> traits = (List<Object>) map.get("traits");
        if (traits != null) {
            for (Object trait : traits) {
                Map<String, Object> traitMap = (Map<String, Object>) trait;
                String traitLabel = (String) traitMap.get("val");
                Trait traitRewards = new Trait(traitLabel);
                rewards.addTrait(traitRewards);
            }
        }
    }
    // - emotes
    {
        List<Object> emotes = (List<Object>) map.get("emotes");
        if (emotes != null) {
            for (Object emote : emotes) {
                Map<String, Object> emoteMap = (Map<String, Object>) emote;
                String emoteCommand = (String) emoteMap.get("val");
                if (emoteCommand.startsWith("/")) {
                    emoteCommand = emoteCommand.substring(1);
                }
                Emote emoteRewards = new Emote(emoteCommand);
                rewards.addEmote(emoteRewards);
            }
        }
    }
    // - items
    // receive={{id="70018CBD",q="(x2)",val="Yule Festival Token"}}
    {
        List<Object> items = (List<Object>) map.get("receive");
        if (items != null) {
            for (Object item : items) {
                Map<String, Object> itemMap = (Map<String, Object>) item;
                handleItem(rewards, itemMap);
            }
        }
    }
    // - virtues
    List<Object> virtueItems = (List<Object>) map.get("virtues");
    handleVirtues(rewards, virtueItems);
    // - reputation
    List<Object> reputationItems = (List<Object>) map.get("reputation");
    handleReputation(rewards, reputationItems);
    return deed;
}
Also used : DeedDescription(delta.games.lotro.lore.deeds.DeedDescription) Emote(delta.games.lotro.common.Emote) Title(delta.games.lotro.common.Title) DeedProxy(delta.games.lotro.lore.deeds.DeedProxy) Rewards(delta.games.lotro.common.Rewards) ArrayList(java.util.ArrayList) List(java.util.List) Trait(delta.games.lotro.common.Trait) Map(java.util.Map)

Example 2 with Title

use of delta.games.lotro.common.Title 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 3 with Title

use of delta.games.lotro.common.Title in project lotro-tools by dmorcellet.

the class LotroWikiDeedPageParser method extractTitle.

private Title extractTitle(String line) {
    Title title = null;
    String titleName = getLineValue(line);
    if (!titleName.isEmpty()) {
        if (titleName.endsWith(TITLE_SUFFIX)) {
            titleName = titleName.substring(0, titleName.length() - TITLE_SUFFIX.length());
        }
        int index = titleName.indexOf("{{!}}");
        if (index != -1) {
            titleName = titleName.substring(index + 5);
        }
        index = titleName.indexOf("| display=");
        if (index != -1) {
            titleName = titleName.substring(index + 10);
        }
        index = titleName.indexOf('|');
        if (index != -1) {
            titleName = titleName.substring(0, index);
        }
        titleName = titleName.trim();
        title = new Title(null, titleName);
    }
    return title;
}
Also used : Title(delta.games.lotro.common.Title)

Example 4 with Title

use of delta.games.lotro.common.Title in project lotro-tools by dmorcellet.

the class RewardsHTMLParser method parseTitleReward.

private void parseTitleReward(Element rewardDiv, Rewards rewards) {
    List<Element> as = rewardDiv.getAllElements(HTMLElementName.A);
    int size = (as != null) ? as.size() : 0;
    if (size == 1) {
        String name = null;
        String titleIdentifier = null;
        // String iconURL=null;
        Element firstA = as.get(0);
        String url = firstA.getAttributeValue("href");
        if ((url != null) && (url.startsWith(TITLE_URL_SEED))) {
            titleIdentifier = url.substring(TITLE_URL_SEED.length()).trim();
        }
        name = CharacterReference.decodeCollapseWhiteSpace(firstA.getContent());
        if ((name != null) && (titleIdentifier != null)) {
            Title title = new Title(titleIdentifier, name);
            rewards.addTitle(title);
        }
    } else {
        _logger.warn(_objectId + ": title with " + size + " anchor tags!");
    }
/*
<div class="questReward">
<div>
<strong>Titles:</strong>
</div>
<div>
<a href="/wiki/Title:_Honorary_Shirriff"> Honorary Shirriff</a>
</div>
</div>
 */
}
Also used : Element(net.htmlparser.jericho.Element) Title(delta.games.lotro.common.Title)

Aggregations

Title (delta.games.lotro.common.Title)4 Rewards (delta.games.lotro.common.Rewards)2 DeedDescription (delta.games.lotro.lore.deeds.DeedDescription)2 DeedProxy (delta.games.lotro.lore.deeds.DeedProxy)2 ArrayList (java.util.ArrayList)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 ObjectItem (delta.games.lotro.common.objects.ObjectItem)1 ObjectsSet (delta.games.lotro.common.objects.ObjectsSet)1 Faction (delta.games.lotro.lore.reputation.Faction)1 List (java.util.List)1 Map (java.util.Map)1 Element (net.htmlparser.jericho.Element)1