Author Archives: Yellowfive / Peter Coley

5.2 Stat Weights

With every new patch comes new stat weights!  Over the next week, we will be researching and refining stat weights for all classes and specs.  Check this blog post often for updates on your class and spec, and please leave comments or links to good 5.2 resources that you think we should review.

NOTE:
When we say “No Changes in 5.2″ – this means that the stat priority has not changed for that spec, or, it means the weights have not shifted enough to cause different gems to be most optimal, etc. It does NOT mean that the spec itself didn’t get changes and tweaks in the patch!

For other 5.2 updates, read this blog post.

Set Bonuses

We have completed initial calculations for all set bonuses.  We have also tweaked some of the tier 14 tank set bonuses.  Set bonus estimates can be a little tricky, so let us know if you run into any issues.  For background: we equate all set bonuses to a relevant stat.  When a set bonus doesn’t really map to a particular stat very well, we use AP or SP for damage and healer specs, and armor for tank specs.  Thus, your weights on those stats will impact the value of most set bonuses.

(Final set bonus estimates going live around 3 AM PST, 3/14.)

Death Knight – Blood

Status: Updated!

There were no major changes to blood tanking mechanics with 5.2, but we did make a slight tweak: due to popular demand, we have reduced the default weight on stamina such that the different builds will tend to favor their respective stats more (mastery, avoidance, etc.).  As always, we encourage users to adjust stamina to their personal preference — there is no “one correct answer”.

Recent change — we increased armor a bit to make the optimizer more consistently choose the armor meta gem, and favor some of the new tanking trinkets a little more.

Death Knight – Frost 2H

Status: No Changes in 5.2

Death Knight – Frost DW

Status: No Changes in 5.2

Death Knight – Unholy

Status: No Changes in 5.2

Druid – Moonkin

Status: No Changes in 5.2

Druid – Guardian

Status: Updated!

The main change that affects gearing: 20% boost to the value of mastery.  The rage-generation build doesn’t change much, but we did make one significant tweak: due to popular demand, we lowered the default weight on stamina.  Most tanks should like this, but as always — stamina is very much a personal preference!  Please adjust it as you see fit.

For the mitigation build, we have decided to bump mastery above dodge with the 20% buff.  Both stats were already pretty close in value for reducing damage, but we like the “smoother” nature of mastery.  Similar to the rage build, we have dropped stamina slightly in our defaults.  Please adjust stamina to your liking!  (You’ll hear us say that a lot.)

Druid – Feral

Status: Tweaked

Hit and Expertise are simulating out to be just as good as Mastery, so we are now recommending getting Hit/Exp capped as our default.

Druid – Restoration

Status: No Changes in 5.2

Our spreadsheet is mostly updated. The stat priority hasn’t changed because the major buff was the across-the-board 10% healing – which keeps everything relatively the same, just higher. Soul of the Forest is an even more attractive talent now, though. You can get some nice output from your Wild Growth using SotF as your talent choice.

Hunter – All Specs

Status: No Changes in 5.2

Marksmanship received a nice buff, but the actual stat priorities did not change as a result of the patch.

Mage – Arcane

Status: No Changes in 5.2

The Tier 15 4pc bonus looks like it is incredibly strong for Arcane, according to SimC right now.

Mage – Fire

Status: No Changes in 5.2

Fire gets a nice buff in 5.2, but the stat priorities have not changed.

Mage – Frost

Status: No Changes in 5.2

We are not confident right now that the Tier 15 4pc set bonus is working correctly in SimC for Frost. If it is working correctly, the set bonus is not worth getting. We will keep an eye on this and update if necessary.

Monk – Brewmaster

Status: Updated!

The default build still focuses around high energy/chi generation, with mastery moving above parry/dodge as the best passive mitigation stat.  We have also made a couple of tweaks based on user feedback: the default weight on stamina has been reduced, as most brewmasters prefer to rely more on high avoidance and stagger rather than large health pools.  As always, adjust this as you see fit!  The second change is that we now recommend gearing all the way to the hard expertise cap.  The reason for this change is straightforward: if you think expertise is good on a brewmaster, there is nothing that makes it stop being good at 7.5%.  So in line with our other tank class recommendations, go all the way to 15%.

We have also added an editable haste cap for those who wish to target a certain level of energy/chi generation.  We do not recommend any particular cap be default as it is a highly personal setting.  Play with it as you see fit!  Remember to use percentages, e.g. 0.3 would be in the neighborhood of 8000 haste rating from gear when fully buffed.

Update: it seems that some of my changes didn’t make it to the live site on the first update — we will be posting an update soon (sometime in the afternoon on 3/4) that has the stamina weight at the level we think most accurately reflects the monk tanking community’s preferred strategy (it will be pretty low, below most other stats).

Monk – Windwalker

Status: Updated

We updated these weights. Mastery moved above Crit in the stat priority and we included a soft cap on Haste at 40% (about 11500 on gear). Our testing showed this to be the value at which Haste started to drop off compared to other stats.

We have added an editable haste soft cap for windwalkers — feel free to play around with that and give us feedback.

Monk – Mistweaver

Status: No changes in 5.2

What do people think about the Tier 15 4pc bonus? It seems really weak by my calculations. The 2pc looks like it is strong.

Paladin – Holy

Status: No changes in 5.2

Paladin – Protection

Status: Updated!

Nothing significant has changed with respect to paladin gearing strategy in 5.2.  Due to some of the new gear available and the levels of gear that players can reach, we have made some very minor adjustments.  Thanks go out to Theck for providing some updated weights that keep the general gearing strategies similar, but tend to pick up socket bonuses more often, and not stack stamina as aggressively.

Something to note: it is popular for pally tanks to use the “Force Hit/Exp Cap” option.  In general this should work well to guarantee hit/exp cap (and not slightly under), but if it doesn’t seem to be working for you, try dropping the weight on stamina slightly (to 1.3 or 1.4).

Paladin – Retribution

Status: No Changes in 5.2

Priest – Discipline

Status: Updated

We reduced the weight on Crit so that Intellect gems will be favored, reduced the weight on Mastery, and increased the weight on Haste. We think Mastery is pretty weak compared to the other secondary stats in 5.2. We also added another preset for a Haste gearing strategy, since we think it might really be the best in 5.2. Mr. Robot’s priest healing spreadsheet has been mostly updated for 5.2.

Priest – Holy

Status: No Changes in 5.2

Priest – Shadow

Status: No Changes in 5.2

Rogue – All Specs

Status: No Changes in 5.2/span>

Shaman – Elemental

Status: No Changes in 5.2

Shaman – Enhancement

Status: Updated

We changed the default weights to assume you are using Elemental Mastery and Primal Elementalist, as this is simulating out to the highest DPS right now. This moves Haste up in the priority. The same weights will also work for Ancestral Swiftness, but AS simulates to lower DPS than EM right now. We also left the Echo of Elements build as another choice – the DPS is lower – about 3% or so.

Shaman – Restoration

Status: No Changes in 5.2

Is it just me, or is that 4 piece Tier 15 bonus absolutely terrible?

Warlock – Affliction

Status: No Changes in 5.2

We still don’t believe that you should value haste above mastery to obtain any particular haste threshold (in reality you’ll get a decent chunk of haste anyway). Haste thresholds aren’t as valuable for affliction in the real game as simulations would lead us to believe.

Warlock – Demonology

Status: No Changes in 5.2

Testing shows that secondary stats are still worth almost exactly the same for Demonology. Our current default of Mastery > Haste > Crit is still our recommendation, because you can make clever use of trinkets and fight mechanics to squeeze our more DPS in certain situations.

Warlock – Destruction

Status: Updated

We tweaked the stat weights based on the latest version of SimC. Grimoire of Supremacy is showing the best DPS with the 5.2 changes to Sacrifice. Our recommended stat priority has shifted to Crit > Haste > Mastery. There is not a dramatic gap between the secondary stats, so you could safely gear for more Mastery or Haste if it works better with your dual-spec or play style.

Warrior – TLDR

Mr. Robot: “Haste still sucks.”

Warrior – Arms

Status: Tweaked

The latest simulations show the stat priority unchanged for Arms. We tweaked the relative values a little bit to improve optimization, but the buff to haste doesn’t seem to have made that much of a difference.

Warrior – Single-Minded Fury

Status: Tweaked

The latest simulations show the stat priority basically unchanged for SMF. Haste is slightly better than it used to be – now it is equal with Hit (above 7.5%) as the worst secondary stat. We tweaked some of the relative values based on latest simulations as well.

Warrior – Titan’s Grip

Status: Tweaked

The latest simulations show the stat priority basically unchanged for TG. We tweaked some of the relative values based on latest simulations as well. The only real change is that Strength is somewhat stronger than Crit rating now.

Warrior – Protection

Status: Updated!

Shield Barrier got a small nerf, but this shouldn’t change how warriors play or gear.  Our weights remain basically unchanged, with only minor tweaks to work better with the new higher item level gear, and more consistently pick up good socket bonuses.  Warriors still enjoy what we would call the most “balanced” itemization of the different tanking classes, where there isn’t as hard a trade-off between passive mitigation and control — our stat weights try to reflect this.

We have increased Armor a bit to favor higher item-level items, and also favor some of the new damage absorption and self-healing style trinkets.

Character API Documentation (BETA!)

A test version of the character API is available!  Note that this is not 100% final, but it will probably not change much from the current form.

Known Issues:
- Only the player’s first gear set (“Gear” tab on the character builder UI) is available.  The final API will likely provide a way for you to specify any (or multiple) gear sets to retrieve, as well as companion gear sets.

Endpoints

http://swtor.askmrrobot.com/api/character/v1/{profile-id}

http://swtor.askmrrobot.com/api/test/character/v1/{profile-id}

Replace {profile-id} with the id as seen in the URL to the character profile.  For example, you can view my profile at:
http://swtor.askmrrobot.com/character/0f95a940-4cf1-4af3-a922-666e312ff49c
And you can get it via the API at:
http://swtor.askmrrobot.com/api/character/v1/0f95a940-4cf1-4af3-a922-666e312ff49c

The version (v1) is required.  We will document the current and supported versions whenever changes are made.

The only difference between the two endpoints is that the api/test endpoint returns formatted JSON that is easier to read — this endpoint will be removed when the API is complete.  The regular endpoint returns JSON without extra whitespace, and with null/default values omitted to reduce bandwidth.

Error Handling
Different http status codes are returned in the event of an error:

  • 404 – the profile does not exist or could not be found
  • 400 – the profile id was not a valid guid in the accepted format, or the version specified is not supported
  • 500 – all other errors
General Notes on the JSON
LastUpdated date is always in universal time, formatted as a text-sortable date/time string.

Buffs correspond to the buffs a user has selected on their profile, and can have the following values:

    public enum Buff
    {
        Power,     // sith warrior buff
        Stats,     // sith inquisitor buff
        Endurance, // bounty hunter buff
        Crit,      // imperial agent buff
    }

Stance is the selected stance, and can be:
(Note that stance values use the Empire name for both factions.)

    public enum Stance
    {
        None,

        DarkCharge,
        LightningCharge,
        SurgingCharge,

        Soresu,
        ShiiCho,
        Shien,
        Ataru,
        Juyo,

        Combustible,
        Ion,
        HighEnergy,
        CombatSupport,
        HighVelocity,
    }
Skill Tree Format
Skill trees are described as a SkillString:
  • SkillString is a triplet separated by dashes, with each section representing the corresponding tree from left-to-right, as seen in-game.
  • Each digit in a section corresponds to a single skill, with 0-5 possible ranks.
  • The least significant digit in each section (i.e. right-most digit) is the bottom-left skill in the tree.
  • The most significant digit in each section (i.e. left-most digit) is the top-right skill in the tree.
  • In other words, from least to most significant the digits correspond to each skill going from bottom to top, left to right as they appear in-game.
Gear Set Format

The gear set represents the main gear set for the player (the “Gear” tab on the UI on askmrrobot.com).  It is a dictionary of slot to item objects.  Slots can take the following values:

    public enum CharacterSlot : byte
    {
        None,
        MainHand,
        OffHand,
        Belt,
        Chest,
        Ears,
        Feet,
        Glove,
        Helm,
        Implant1,
        Leg,
        Wrist,
        Relic1,
        Implant2,
        Relic2,

        Part1,
        Part2,
        SensorUnit,
        Core1,
        Core2,
        Motor1,
        Motor2,
        Customization,
    }

Items have a list of Mods.  The list is in order as they appear on the item in-game.  Even if a mod slot is empty, a Mod object will be present with an Id of 0.  The Slot property on a mod can have the following values:

    public enum ModSlotEnum : byte
    {
        Armoring,
        Augment,
        Barrel,
        ColorCrystal,
        Enhancement,
        Hilt,
        Mod
    }

Stats on both items and mods are a dictionary of stat to value.  All values are short integers.  An item’s stats will be the total stats for that item, including any mods in the item.  The mod stats are included as a convenience if you wish to do some math to remove a mod manually, etc.  The possible stat keys are:

    public enum Stat : byte
    {
        Strength,
        Endurance,
        Crit,
        Power,
        Defense,
        Accuracy,
        Alacrity,
        Surge,
        Shielding,
        Presence,
        Will,
        Cunning,
        Aim,
        Absorb,
        Expertise,

        Armor,
        MinDamage,
        MaxDamage,

        TechPower,
        ForcePower
    }

Items will either have an ArmorType, WeaponType, or ShieldType — only one of these will be specified per item, and for some items they are all null (such as relics, companion customization items, etc.).  The possible values are:

    public enum WeaponType : byte
    {
        LightSaber,
        Pistol,
        PoleSaber,
        BlasterRifle,
        VibroKnife,
        VibroSword,
        TrainingSaber,
        ScatterGun,
        AssaultCannon,
        SniperRifle,
        ElectroStaff,
        TechBlade,
        TechStaff
    }

    public enum ArmorType : byte
    {
        Light,
        Medium,
        Heavy
    }

    public enum ShieldType : byte
    {
        Focus,
        Generator,
        ForceShield,
        TechShield,
    }
Items may also have an ItemSetId.  Items that belong to the same set (i.e. contribute to the same set bonuses) have the same ItemSetId.  If more detail is desired around item sets, please comment and let us know — the ID is all we provide at the moment.

Other Enumerated Values
Below are the possible values for many of the returned properties in the JSON.

Region

    public enum SwtorRegion
    {
        US,
        EU,
        Asia,
    }

Faction

    public enum Faction
    {
        Empire,
        Republic,
    }

AdvancedClass

    public enum AdvancedClass : byte
    {
        Guardian,
        Sentinel,
        Commando,
        Vanguard,
        Sage,
        Shadow,
        Gunslinger,
        Scoundrel,
        Juggernaut,
        Marauder,
        Mercenary,
        Powertech,
        Assassin,
        Sorcerer,
        Operative,
        Sniper,
    }

Gender

    public enum Gender : byte
    {
        Female,
        Male
    }

Race

    public enum Race
    {
        Chiss,
        Cyborg,
        Human,
        Miraluka,
        Mirialan,
        Rattataki,
        SithPureblood,
        Twilek,
        Zabrak,
    }

Alignment

    public enum Alignment
    {
        Neutral = 0,
        Dark1 = -1,
        Dark2 = -2,
        Dark3 = -3,
        Dark4 = -4,
        Dark5 = -5,
        Light1 = 1,
        Light2 = 2,
        Light3 = 3,
        Light4 = 4,
        Light5 = 5,
    }

SocialLevel

    public enum SocialLevel
    {
        None,
        Social1,
        Social2,
        Social3,
        Social4,
        Social5,
        Social6,
        Social7,
        Social8,
        Social9,
        Social10,
    }

CraftingCrewSkill, CrewSkill2, CrewSkill3

    public enum CrewSkill
    {
        None,
        Archaeology,
        Bioanalysis,
        Scavenging,
        Slicing,
        Armormech,
        Armstech,
        Artifice,
        Biochem,
        Cybertech,
        Synthweaving,
        Diplomacy,
        Investigation,
        TreasureHunting,
        UnderworldTrading,
    }

Quality

    public enum Quality : byte
    {
        Cheap,
        Standard,
        Premium,
        Prototype,
        Custom,
        Artifact,
        Legendary,
        Legacy,
    }
Slot
This slot appears directly on each item, and is a more general description of how the item can be used.
    public enum ItemSlot : byte
    {
        Belt,
        Ear,
        Helm,
        Chest,
        PrimaryRanged,
        SecondaryRanged,
        EitherRanged,
        CustomRanged,    // scattergun
        Foot,
        Hands,
        Wrist,
        Legs,
        Implant,
        Shield,
        MainHand,
        OffHand,
        EitherHand,
        CustomMelee,     // vibroknife
        Relic,

        DroidParts,
        DroidSensor,
        DroidMotor,
        DroidCore,

        Customization
    }
Datacrons

Datacrons are a list of datacron ids.  The following code block describes each datacron.  Feel free to copy and adapt this code into your own code base as needed.  More concise documentation or an API call to get JSON describing these is forthcoming.

private static readonly List _allDatacrons = new List();
        static Datacron()
        {
            _allDatacrons.Add(new Datacron
            {
                Id = 0,
                Planet = "Alderaan",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = 1107,
                Y = 80,
                CodexEntry = "Galactic History 43: The Great Droid Revolution",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 1,
                Planet = "Alderaan",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 3,
                X = -82,
                Y = -268,
                CodexEntry = "Galactic History 45: The Krath Cult",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 2,
                Planet = "Alderaan",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 3,
                X = -2508,
                Y = -427,
                CodexEntry = "Galactic History 47: Naddist Rebels",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 3,
                Planet = "Alderaan",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 4,
                X = 2190,
                Y = -2019,
                CodexEntry = "Galactic History 46: Nadd's Legacy",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 4,
                Planet = "Alderaan",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 3,
                X = 2721,
                Y = 2496,
                CodexEntry = "Galactic History 44: The Jedi Nomi",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 5,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 2,
                X = 727,
                Y = 2033,
                CodexEntry = "Galactic History 31: The Ritual of Nathema",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 6,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 2,
                X = -1017,
                Y = 1514,
                CodexEntry = "Galactic History 28: The Battle at Primus Goluud",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 7,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 2,
                X = 191,
                Y = -346,
                CodexEntry = "Galactic History 32: Long Exile",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 8,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 2,
                X = 1853,
                Y = 111,
                CodexEntry = "Galactic History 29: Sadow's Escape",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 9,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = null,
                Shard = "Green Matrix Shard",
                Amount = null,
                X = -505,
                Y = 1990,
                CodexEntry = "Galactic History 30: Rise of the Sith Emperor",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 10,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = 191,
                Y = -346,
                CodexEntry = "Galactic History 53: The Conclave at Deneba",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 11,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = -1017,
                Y = 1514,
                CodexEntry = "Galactic History 56: The Brotherhood of the Sith",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 12,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = 730,
                Y = 2030,
                CodexEntry = "Galactic History 57: The Brotherhood's Power Grows",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 13,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 3,
                X = -485,
                Y = -233,
                CodexEntry = "Galactic History 54: Ulic's Fall",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 14,
                Planet = "Balmorra",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = -779,
                Y = 2069,
                CodexEntry = "Galactic History 55: The Ascension of Exar Kun",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 15,
                Planet = "Belsavis",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = -501,
                Y = 768,
                CodexEntry = "Galactic History 72: The Fall of the Covenant",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 16,
                Planet = "Belsavis",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 4,
                X = -992,
                Y = -450,
                CodexEntry = "Galactic History 69: The Mandalorian Wars",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 17,
                Planet = "Belsavis",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = -1915,
                Y = -476,
                CodexEntry = "Galactic History 70: The Covenant Acts",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 18,
                Planet = "Belsavis",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = -785,
                Y = -1930,
                CodexEntry = "Galactic History 68: The Mandalorians Return",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 19,
                Planet = "Belsavis",
                Faction = null,
                Stat = null,
                Shard = "Green Matrix Shard",
                Amount = null,
                X = -315,
                Y = -2172,
                CodexEntry = "Galactic History 71: The Muur Talisman",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 20,
                Planet = "Corellia",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 4,
                X = -2755,
                Y = -2005,
                CodexEntry = "Galactic History 82: Darth Traya's Return",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 21,
                Planet = "Corellia",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = 703,
                Y = 1717,
                CodexEntry = "Galactic History 79: The Conclave at Katarr",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 22,
                Planet = "Corellia",
                Faction = null,
                Stat = null,
                Shard = "Blue Matrix Shard",
                Amount = null,
                X = -2425,
                Y = -1063,
                CodexEntry = "Galactic History 62: The Great Sith War Ends",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 23,
                Planet = "Corellia",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = 3425,
                Y = -3209,
                CodexEntry = "Galactic History 80: A Return from Exile",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 24,
                Planet = "Corellia",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = 3140,
                Y = -1790,
                CodexEntry = "Galactic History 78: The Sith Triumvirate",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 25,
                Planet = "Corellia",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = -2658,
                Y = -3114,
                CodexEntry = "Galactic History 81: The Battle of Telos Four",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 26,
                Planet = "Corellia",
                Faction = null,
                Stat = null,
                Shard = "Green Matrix Shard",
                Amount = null,
                X = 702,
                Y = -1884,
                CodexEntry = "Galactic History 61: The Brotherhood is Broken",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 27,
                Planet = "Corellia",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = -2404,
                Y = 2948,
                CodexEntry = "Galactic History 79: The Conclave at Katarr",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 28,
                Planet = "Coruscant",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 2,
                X = 2320,
                Y = 1055,
                CodexEntry = "Galactic History 08: Hyperspace Cannons",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 29,
                Planet = "Coruscant",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = null,
                Shard = "Yellow Matrix Shard",
                Amount = null,
                X = 905,
                Y = 4557,
                CodexEntry = "Galactic History 06: The Infinite Empire Collapses",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 30,
                Planet = "Coruscant",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 2,
                X = -3087,
                Y = 3030,
                CodexEntry = "Galactic History 07: The First Spaceflights",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 31,
                Planet = "Coruscant",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 2,
                X = -3729,
                Y = 161,
                CodexEntry = "Galactic History 04: King Adas",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 32,
                Planet = "Coruscant",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 2,
                X = 1021,
                Y = 3967,
                CodexEntry = "Galactic History 05: Rise of the Infinite Empire",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 33,
                Planet = "Dromund Kaas",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 2,
                X = 855,
                Y = 643,
                CodexEntry = "Galactic History 19: The Pius Dea Crusades",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 34,
                Planet = "Dromund Kaas",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 2,
                X = 581,
                Y = 798,
                CodexEntry = "Galactic History 21: The Birth of the Mandalorians",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 35,
                Planet = "Dromund Kaas",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 2,
                X = -1219,
                Y = 209,
                CodexEntry = "Galactic History 22: The Second Great Schism",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 36,
                Planet = "Dromund Kaas",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = null,
                Shard = "Yellow Matrix Shard",
                Amount = null,
                X = -187,
                Y = 1738,
                CodexEntry = "Galactic History 18: The Hutt Cataclysms",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 37,
                Planet = "Dromund Kaas",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 2,
                X = -793,
                Y = 1450,
                CodexEntry = "Galactic History 20: Chancellor Blotus",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 38,
                Planet = "Hoth",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = 1039,
                Y = -1243,
                CodexEntry = "Galactic History 65: An Exile on Rhen Var",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 39,
                Planet = "Hoth",
                Faction = null,
                Stat = null,
                Shard = "Red Matrix Shard",
                Amount = null,
                X = -738,
                Y = 1705,
                CodexEntry = "Galactic History 66: The Jedi Covenant",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 40,
                Planet = "Hoth",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 4,
                X = 2837,
                Y = -375,
                CodexEntry = "Galactic History 64: The Kanz Disorders",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 41,
                Planet = "Hoth",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = 3144,
                Y = 475,
                CodexEntry = "Galactic History 63: The Terentatek Hunt",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 42,
                Planet = "Hoth",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 4,
                X = -4102,
                Y = 115,
                CodexEntry = "Galactic History 67: Mandalore the Ultimate",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 43,
                Planet = "Hutta",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 2,
                X = -96,
                Y = 861,
                CodexEntry = "Galactic History 01: The Architects",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 44,
                Planet = "Hutta",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = null,
                Shard = "Blue Matrix Shard",
                Amount = null,
                X = -9,
                Y = 319,
                CodexEntry = "Galactic History 03: The Battalions of Zhell",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 45,
                Planet = "Hutta",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 2,
                X = 648,
                Y = -107,
                CodexEntry = "Galactic History 02: Ancient Civilizations",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 46,
                Planet = "Illum",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = 920,
                Y = 1075,
                CodexEntry = "Galactic History 83: The Republic Rebuilds",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 47,
                Planet = "Illum",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 4,
                X = 103,
                Y = -80,
                CodexEntry = "Galactic History 84: The G0-T0 Coup",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 48,
                Planet = "Illum",
                Faction = null,
                Stat = null,
                Shard = "Red Matrix Shard",
                Amount = null,
                X = 543,
                Y = 544,
                CodexEntry = "Galactic History 85: The Purge of the Dark Council",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 49,
                Planet = "Illum",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = 304,
                Y = -1568,
                CodexEntry = "Galactic History 87: A Wayward Apprentice",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 50,
                Planet = "Illum",
                Faction = null,
                Stat = null,
                Shard = "Yellow Matrix Shard",
                Amount = null,
                X = 311,
                Y = -377,
                CodexEntry = "Galactic History 86: The Empire's Revenge",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 51,
                Planet = "Korriban",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 2,
                X = 529,
                Y = 65,
                CodexEntry = "Galactic History 16: The Alsakan Conflicts",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 52,
                Planet = "Korriban",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 2,
                X = 150,
                Y = 78,
                CodexEntry = "Galactic History 15: Mandalore",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 53,
                Planet = "Korriban",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = null,
                Shard = "Red Matrix Shard",
                Amount = null,
                X = -55,
                Y = 379,
                CodexEntry = "Galactic History 17: The Duinuogwuin Contention",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 54,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 3,
                X = -3362,
                Y = -3316,
                CodexEntry = "Galactic History 33: Dromund Kaas",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 55,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 3,
                X = 3338,
                Y = -3287,
                CodexEntry = "Galactic History 35: The Gank Massacres",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 56,
                Planet = "Nar Shaada",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 3,
                X = 1958,
                Y = 3288,
                CodexEntry = "Galactic History 34: The Discovery of Ryll",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 57,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 3,
                X = 2156,
                Y = 3103,
                CodexEntry = "Galactic History 37: Freedon Nadd",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 58,
                Planet = "Nar Shaada",
                Faction = null,
                Stat = null,
                Shard = "Yellow Matrix Shard",
                Amount = null,
                X = 1781,
                Y = 3084,
                CodexEntry = "Galactic History 36: The Quarren-Mon Calamari War",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 59,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 3,
                X = -3699,
                Y = -1692,
                CodexEntry = "Galactic History 33: Dromund Kaas",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 60,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 3,
                X = 2930,
                Y = 400,
                CodexEntry = "Galactic History 35: The Gank Massacres",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 61,
                Planet = "Nar Shaada",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 3,
                X = 2017,
                Y = 2441,
                CodexEntry = "Galactic History 37: Freedon Nadd",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 62,
                Planet = "Ord Mantell",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = null,
                Shard = "Red Matrix Shard",
                Amount = null,
                X = 778,
                Y = 133,
                CodexEntry = "Galactic History 14: The Fall of Tion",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 63,
                Planet = "Ord Mantell",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 2,
                X = -971,
                Y = 201,
                CodexEntry = "Galactic History 13: The First Great Schism",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 64,
                Planet = "Ord Mantell",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 2,
                X = -660,
                Y = -561,
                CodexEntry = "Galactic History 12: The Birth of the Republic",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 65,
                Planet = "Quesh",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = 425,
                Y = -132,
                CodexEntry = "Galactic History 58: Ulic's Trials",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 66,
                Planet = "Quesh",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 4,
                X = 207,
                Y = 773,
                CodexEntry = "Galactic History 59: Aleema's Fate",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 67,
                Planet = "Quesh",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 4,
                X = 557,
                Y = 1422,
                CodexEntry = "Galactic History 60: The Destruction of Ossus",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 68,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 2,
                X = 1187,
                Y = -571,
                CodexEntry = "Galactic History 25: Two Rivals",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 69,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = 1187,
                Y = -571,
                CodexEntry = "Galactic History 51: The Krath Cult Strikes",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 70,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 2,
                X = -1515,
                Y = -253,
                CodexEntry = "Galactic History 23: The Sith Order Begins",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 71,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 3,
                X = -1515,
                Y = -253,
                CodexEntry = "Galactic History 48: The Audiences on Onderon",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 72,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 2,
                X = 1047,
                Y = 454,
                CodexEntry = "Galactic History 24: Empress Teta",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 73,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 4,
                X = 1047,
                Y = 454,
                CodexEntry = "Galactic History 49: Exar Kun",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 74,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 2,
                X = -362,
                Y = -227,
                CodexEntry = "Galactic History 26: Naga Sadow's Deceptions",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 75,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = null,
                Shard = "Green Matrix Shard",
                Amount = null,
                X = 1059,
                Y = 1039,
                CodexEntry = "Galactic History 27: The Great Hyperspace War",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 76,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = 444,
                Y = -772,
                CodexEntry = "Galactic History 50: Basilisk",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 77,
                Planet = "Taris",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = -643,
                Y = 1606,
                CodexEntry = "Galactic History 52: Exar Kun Faces Korriban",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 78,
                Planet = "Tatooine",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 3,
                X = 2140,
                Y = -3671,
                CodexEntry = "Galactic History 39: The Third Great Schism",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 79,
                Planet = "Tatooine",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 3,
                X = 2115,
                Y = -596,
                CodexEntry = "Galactic History 42: The Nevoota Extinction",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 80,
                Planet = "Tatooine",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Aim,
                Shard = null,
                Amount = 3,
                X = -628,
                Y = -30,
                CodexEntry = "Galactic History 38: The Tyrant of Onderon",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 81,
                Planet = "Tatooine",
                Faction = null,
                Stat = null,
                Shard = "Blue Matrix Shard",
                Amount = null,
                X = -2391,
                Y = -1381,
                CodexEntry = "Galactic History 40: Czerka Discovers Kashyyyk",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 82,
                Planet = "Tatooine",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 3,
                X = -2391,
                Y = -1381,
                CodexEntry = "Galactic History 41: The Droid Rights Movement",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 83,
                Planet = "Tatooine",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 3,
                X = 726,
                Y = 3137,
                CodexEntry = "Galactic History 39: The Third Great Schism",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 84,
                Planet = "Tython",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 2,
                X = -33,
                Y = -102,
                CodexEntry = "Galactic History 09: The Force Wars",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 85,
                Planet = "Tython",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 2,
                X = -648,
                Y = -72,
                CodexEntry = "Galactic History 10: The Tion Cluster",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 86,
                Planet = "Tython",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Stat = null,
                Shard = "Blue Matrix Shard",
                Amount = null,
                X = -93,
                Y = 922,
                CodexEntry = "Galactic History 11: The Tionese Face the Hutt Empire",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 87,
                Planet = "Voss",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Will,
                Shard = null,
                Amount = 4,
                X = -29,
                Y = 372,
                CodexEntry = "Galactic History 77: A Return to the Unknown Regions",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 88,
                Planet = "Voss",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Presence,
                Shard = null,
                Amount = 4,
                X = 2144,
                Y = -840,
                CodexEntry = "Galactic History 75: The Jedi Civil War",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 89,
                Planet = "Voss",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Endurance,
                Shard = null,
                Amount = 4,
                X = -1950,
                Y = -2220,
                CodexEntry = "Galactic History 73: The Battle of Malachor Five",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 90,
                Planet = "Voss",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Strength,
                Shard = null,
                Amount = 4,
                X = 655,
                Y = 2049,
                CodexEntry = "Galactic History 76: Revan is Remade",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 91,
                Planet = "Voss",
                Faction = null,
                Stat = TeamRobot.Swtor.Stat.Cunning,
                Shard = null,
                Amount = 4,
                X = 515,
                Y = 175,
                CodexEntry = "Galactic History 74: Revan and Malak Fall",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 92,
                Planet = "Imperial Fleet",
                Faction = TeamRobot.Swtor.Faction.Empire,
                Shard = "+10 All Stats",
                CodexEntry = "N/A",
            });
            _allDatacrons.Add(new Datacron
            {
                Id = 93,
                Planet = "Republic Fleet",
                Faction = TeamRobot.Swtor.Faction.Republic,
                Shard = "+10 All Stats",
                CodexEntry = "N/A",
            });
        }

Update on 7/25/12: we made the calculation js available for use (http://static2.askmrrobot.com/swtor/calc.js).  You can get more details here.