@Riot Reinboom/Shop Devs: API for RecItems now? :O

  • API Posted: http://na.leagueoflegends.com/board/...04090#31604090
    ItemID List: http://na.leagueoflegends.com/board/...04980#31604980

    Also, bug: if you click an item in the left area then navigate to a different item in the right area, the item stays selected in the left area so you can't go back to it.

    Example:
    Click Aegis in left list. Aegis is highlighted.
    Click Ruby Crystal in Aegis recipe.
    Click "Builds: Catalyst" so Catalyst is now the active item.
    Aegis is still highlighted in left area so I cannot click it to go back to Aegis.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by Wriggle View Post
    Reinboooooom, you haven't forgotten us, have you?
    </td></tr></table>
    I have not!

    So here's the quick rundown of the API, in steps.

    Step 1 - Location
    The path you will be looking for is:

    %LOLINSTALLDIR%\Config\Champions\%CHAMPIONID%\Reco mmended\

    %LOLINSTALLDIR% is wherever your PBE install is
    %CHAMPIONID% is the game folder ID for a champion. Such as Ahri or DrMundo

    This location isn't made for you. Go ahead and create the Characters, the ID, and the Recommended folders as necessary.

    Step 2 - The File
    You place any number of *.json files (the actual filename isn't relevant, as long as it ends in .json) in this folder.

    The JSON file commands the recommended item page and the overall structure appears like the following:
    Code:
    <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px inset; width: 640px; height: 34px; text-align: left; overflow: auto">{"champion":"Ahri","title":"default","type":"riot","map":"any","mode":"any","priority":false,"blocks":[{"type":"starting","items":[{"id":"1001","count":1},{"id":"3010","count":3}]},{"type":"essential","items":[{"id":"3001","count":1},{"id":"3089","count":1}]},{"type":"offensive","items":[{"id":"3100","count":1},{"id":"3128","count":1},{"id":"3135","count":1}]},{"type":"defensive","items":[{"id":"3140","count":1},{"id":"3157","count":1}]}]}</pre>
    Or, in slightly more human readable form:
    Code:
    <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px inset; width: 640px; height: 498px; text-align: left; overflow: auto">{ "champion":"Ahri", "title":"default", "type":"riot", "map":"any", "mode":"any", "priority":false, "blocks":[ { "type":"starting", "items":[ { "id":"1001", "count":1 }, { "id":"3010", "count":3 } ] }, { "type":"essential", "items":[ { "id":"3001", "count":1 }, { "id":"3089", "count":1 } ] }, { "type":"offensive", "items":[ { "id":"3100", "count":1 }, { "id":"3128", "count":1 }, { "id":"3135", "count":1 } ] }, { "type":"defensive", "items":[ { "id":"3140", "count":1 }, { "id":"3157", "count":1 } ] } ] }</pre>
    (Note: It likely requires to be minified).


    The important keys here:
    1. "map"
    This key may either be "any" or a single map id number (in string form). Some common ones you may wish to use:
    "1" is Summoners Rift
    "8" is Crystal Scar
    "10" is Twisted Treeline

    2. "mode"
    This key may either by "any" or a single mode string id. The available modes are:
    "CLASSIC"
    "ODIN" (Dominion)
    "ARAM"

    3. "priority"
    This defines if it should be loaded at top priority or not. This is mostly to reorder the data structure internally. We've left it false for most of the Riot made ones.
    Make sure this is true. This gives it priority over the Riot ones.

    The keys champion, title, and type are all used for organizational purposes and you won't have to use it. They also open us up to enabling multiple recommended pages in the future, so I still encourage you to use them. Just not required yet.
    Just make sure "type" is NOT "riot"

    4. "blocks"
    This is where the actual page begins. Blocks is an array of section. Each section begins with a type. The type is displayed as the header. The types "starting", "essential", "offensive", and "defensive" will also be localized for you (if you need more, I can add more based on recommendation).

    Each piece in the block, under the "items" key lists an item. The item currently simply has an id and a count to purchase.


    Overall, pretty simple. Though, there are parts of this that will likely expand and change.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by ploki122 View Post
    No PG?

    So for now we can only use those 4? I thought you said we could create any blocks we'd like...



    Otherwise, thanks a lot, once again, Reinboom... You are, yet again, moving up in my favorite Rioter ranking (still under Ames though, but about 4th-5th, with BuffMePlz being the top, uncontested)
    </td></tr></table>
    Proving Grounds is "3"

    You can use any block title you'd like, even:
    "Riot Reinboom is a meany mean head and I hate her."
    It just won't be translated for you.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by Wriggle View Post
    I assume these are the mistakes I made, I left most things the same except had it all expanded with multiple lines, type was riot, priority was false.

    Does "priority: true" mean that it will not load Riot ones at all, or that it will just appear above Riot ones in the list? If the latter, is it possible to disable the Riot ones?

    Also, 3 is Proving Grounds. I have to question this though: any holiday-themed Summoner's Rift maps are a different ID#, in other words, not '1'. 2,6,7 have all been Summoner's Rift in the past. If "map":"1" is used, it will prevent the recommended items from showing up in holiday maps, right? But.. without "map":"1", "mode":"CLASSIC" will also represent Twisted Treeline.

    \RADS\projects\lol_game_client_en_us\managedfiles\ LATESTVERSION\Data\Menu\fontconfig_en_us.txt, CTRL-F for "ITEMNAME" then look to the left where game_item_displayname or game_item_tooltip is. This will almost definitely not work for Enchanted Boots, because in the tooltip files those are "3009_A" or "EnchantmentHomeguard" for Swiftness: Homeguard, but internally they're some other item ID (32-something, I think).
    </td></tr></table>
    The item shop loads all recommended json files it can find for a single character. It keeps all pages ready to display, but then only has the interface to display the first one in that stack. priority:true pushes it to the top of that stack. (We will likely add a drop down or something similar in the future).

    The map ID thing is actually one of the things that may change in the future. What will likely happen though is I'll just make maps map to other maps.


    And I made a quick script to generate out the IDs for you all. Here you go!:
    Code:
    <pre class="alt2" dir="ltr" style=" margin: 0px; padding: 6px; border: 1px inset; width: 640px; height: 498px; text-align: left; overflow: auto">Explorer's Ward (costs: 0) = 2050 The Hex Core (costs: 0) = 3200 Total Biscuit of Rejuvination (costs: 1) = 2009 Health Potion (costs: 35) = 2003 Mana Potion (costs: 35) = 2004 Sight Ward (costs: 75) = 2044 Vision Ward (costs: 125) = 2043 Faerie Charm (costs: 180) = 1004 Rejuvenation Bead (costs: 180) = 1006 Crystalline Flask (costs: 225) = 2041 Elixir of Fortitude (costs: 250) = 2037 Elixir of Brilliance (costs: 250) = 2039 Cloth Armor (costs: 300) = 1029 Hunter's Machete (costs: 300) = 1039 Boots of Speed (costs: 350) = 1001 Sapphire Crystal (costs: 400) = 1027 Null-Magic Mantle (costs: 400) = 1033 Long Sword (costs: 400) = 1036 Dagger (costs: 400) = 1042 Brawler's Gloves (costs: 400) = 1051 Oracle's Elixir (costs: 400) = 2042 Oracle's Extract (costs: 400) = 2047 Mana Manipulator (costs: 400) = 3037 Amplifying Tome (costs: 435) = 1052 Ruby Crystal (costs: 475) = 1028 Doran's Shield (costs: 475) = 1054 Doran's Blade (costs: 475) = 1055 Doran's Ring (costs: 475) = 1056 Ichor of Rage (costs: 500) = 2040 Ichor of Illumination (costs: 500) = 2048 Emblem of Valor (costs: 650) = 3097 Sightstone (costs: 700) = 2049 Tear of the Goddess (costs: 700) = 3070 Philosopher's Stone (costs: 700) = 3096 Madred's Razors (costs: 700) = 3106 Chain Vest (costs: 720) = 1031 Cloak of Agility (costs: 730) = 1018 Kage's Lucky Pick (costs: 765) = 3098 Vampiric Scepter (costs: 800) = 1053 Spirit Stone (costs: 800) = 1080 Avarice Blade (costs: 800) = 3093 Bonetooth Necklace (costs: 800) = 3166 Bonetooth Necklace (costs: 800) = 3167 Bonetooth Necklace (costs: 800) = 3168 Bonetooth Necklace (costs: 800) = 3169 Bonetooth Necklace (costs: 800) = 3171 Head of Kha'Zix (costs: 800) = 3175 Negatron Cloak (costs: 810) = 1057 Heart of Gold (costs: 825) = 3132 Kindlegem (costs: 850) = 3067 Blasting Wand (costs: 860) = 1026 Pickaxe (costs: 875) = 1037 Chalice of Harmony (costs: 880) = 3028 Berserker's Greaves (costs: 900) = 3006 Recurve Bow (costs: 950) = 1043 Prospector's Blade (costs: 950) = 1062 Prospector's Ring (costs: 950) = 1063 Giant's Belt (costs: 1000) = 1011 Boots of Swiftness (costs: 1000) = 3009 Ninja Tabi (costs: 1000) = 3047 Fiendish Codex (costs: 1000) = 3108 Boots of Mobility (costs: 1000) = 3117 Augment: Power (costs: 1000) = 3196 Augment: Gravity (costs: 1000) = 3197 Augment: Death (costs: 1000) = 3198 Ionian Boots of Lucidity (costs: 1050) = 3158 Sorcerer's Shoes (costs: 1100) = 3020 Warden's Mail (costs: 1100) = 3082 Eleisa's Miracle (costs: 1100) = 3173 Zeal (costs: 1175) = 3086 Catalyst the Protector (costs: 1200) = 3010 Mercury's Treads (costs: 1200) = 3111 Sword of the Occult (costs: 1200) = 3141 Hextech Revolver (costs: 1200) = 3145 Moonflair Spellblade (costs: 1200) = 3170 Mejai's Soulstealer (costs: 1235) = 3041 Stinger (costs: 1250) = 3101 Grez's Spectral Lantern (costs: 1250) = 3159 Sheen (costs: 1260) = 3057 Ruby Sightstone (costs: 1300) = 2045 The Brutalizer (costs: 1337) = 3134 Hexdrinker (costs: 1350) = 3155 Berserker's Greaves - Enchantment: Homeguard (costs: 1375) = 3250 Berserker's Greaves - Enchantment: Distortion (costs: 1375) = 3253 Berserker's Greaves - Enchantment: Alacrity (costs: 1375) = 3254 Phage (costs: 1465) = 3044 Ninja Tabi - Enchantment: Homeguard (costs: 1475) = 3260 Ninja Tabi - Enchantment: Distortion (costs: 1475) = 3263 Ninja Tabi - Enchantment: Alacrity (costs: 1475) = 3264 Boots of Mobility - Enchantment: Homeguard (costs: 1475) = 3270 Boots of Mobility - Enchantment: Distortion (costs: 1475) = 3273 Boots of Mobility - Enchantment: Alacrity (costs: 1475) = 3274 Boots of Swiftness - Enchantment: Homeguard (costs: 1475) = 3280 Boots of Swiftness - Enchantment: Distortion (costs: 1475) = 3283 Boots of Swiftness - Enchantment: Alacrity (costs: 1475) = 3284 Haunting Guise (costs: 1485) = 3136 Glacial Shroud (costs: 1500) = 3024 Ionian Boots of Lucidity - Enchantment: Homeguard (costs: 1525) = 3275 Ionian Boots of Lucidity - Enchantment: Distortion (costs: 1525) = 3278 Ionian Boots of Lucidity - Enchantment: Alacrity (costs: 1525) = 3279 B. F. Sword (costs: 1550) = 1038 Berserker's Greaves - Enchantment: Furor (costs: 1550) = 3252 Sorcerer's Shoes - Enchantment: Homeguard (costs: 1575) = 3255 Sorcerer's Shoes - Enchantment: Distortion (costs: 1575) = 3258 Sorcerer's Shoes - Enchantment: Alacrity (costs: 1575) = 3259 The Lightbringer (costs: 1595) = 3185 Needlessly Large Rod (costs: 1600) = 1058 Wriggle's Lantern (costs: 1600) = 3154 Berserker's Greaves - Enchantment: Captain (costs: 1650) = 3251 Ninja Tabi - Enchantment: Furor (costs: 1650) = 3262 Boots of Mobility - Enchantment: Furor (costs: 1650) = 3272 Boots of Swiftness - Enchantment: Furor (costs: 1650) = 3282 Quicksilver Sash (costs: 1660) = 3140 Mercury's Treads - Enchantment: Homeguard (costs: 1675) = 3265 Mercury's Treads - Enchantment: Distortion (costs: 1675) = 3268 Mercury's Treads - Enchantment: Alacrity (costs: 1675) = 3269 Kage's Last Breath (costs: 1700) = 3092 Ionian Boots of Lucidity - Enchantment: Furor (costs: 1700) = 3277 Sorcerer's Shoes - Enchantment: Furor (costs: 1750) = 3257 Ninja Tabi - Enchantment: Captain (costs: 1750) = 3261 Boots of Mobility - Enchantment: Captain (costs: 1750) = 3271 Boots of Swiftness - Enchantment: Captain (costs: 1750) = 3281 Ionian Boots of Lucidity - Enchantment: Captain (costs: 1800) = 3276 Wicked Hatchet (costs: 1840) = 3122 Sorcerer's Shoes - Enchantment: Captain (costs: 1850) = 3256 Mercury's Treads - Enchantment: Furor (costs: 1850) = 3267 Wraith Collar (costs: 1900) = 3023 Executioner's Calling (costs: 1900) = 3123 Hextech Sweeper (costs: 1920) = 3187 Bilgewater Cutlass (costs: 1925) = 3144 Mercury's Treads - Enchantment: Captain (costs: 1950) = 3266 Sword of the Divine (costs: 2000) = 3131 Locket of the Iron Solari (costs: 2000) = 3190 Malady (costs: 2035) = 3114 Manamune (costs: 2100) = 3004 Muramana (costs: 2100) = 3042 Shurelya's Reverie (costs: 2100) = 3069 Last Whisper (costs: 2135) = 3035 Aegis of the Legion (costs: 2150) = 3105 Spirit Visage (costs: 2200) = 3065 Thornmail (costs: 2200) = 3075 Wit's End (costs: 2200) = 3091 Morellonomicon (costs: 2200) = 3165 Mikael's Crucible (costs: 2200) = 3222 Void Staff (costs: 2295) = 3135 Atma's Impaler (costs: 2300) = 3005 Tiamat (Melee Only) (costs: 2300) = 3077 Banner of Command (costs: 2400) = 3060 Spirit of the Spectral Wraith (costs: 2400) = 3206 Spirit of the Ancient Golem (costs: 2400) = 3207 Spirit of the Elder Lizard (costs: 2400) = 3209 Zeke's Herald (costs: 2450) = 3050 Overlord's Bloodmail (costs: 2455) = 3084 Sunfire Cape (costs: 2500) = 3068 Statikk Shiv (costs: 2500) = 3087 Banshee's Veil (costs: 2500) = 3102 Nashor's Tooth (costs: 2500) = 3115 Will of the Ancients (costs: 2500) = 3152 Kitae's Bloodrazor (costs: 2525) = 3186 Guardian Angel (costs: 2600) = 3026 Guinsoo's Rageblade (costs: 2600) = 3124 Odyn's Veil (costs: 2610) = 3180 Abyssal Scepter (costs: 2650) = 3001 Warmog's Armor (costs: 2650) = 3083 Archangel's Staff (costs: 2700) = 3003 Youmuu's Ghostblade (costs: 2700) = 3142 Seraph's Embrace (costs: 2710) = 3040 Runaan's Hurricane (Ranged Only) (costs: 2750) = 3085 Rod of Ages (costs: 2800) = 3027 Phantom Dancer (costs: 2800) = 3046 Athene's Unholy Grail (costs: 2800) = 3174 Ohmwrecker (costs: 2850) = 3056 Zephyr (costs: 2850) = 3172 Rylai's Crystal Scepter (costs: 2900) = 3116 Liandry's Torment (costs: 2900) = 3151 Blade of the Ruined King (costs: 2900) = 3153 Blackfire Torch (costs: 2950) = 3188 Lord Van Damm's Pillager (costs: 2962) = 3104 The Black Cleaver (costs: 3000) = 3071 Lich Bane (costs: 3000) = 3100 Deathfire Grasp (costs: 3000) = 3128 Frozen Heart (costs: 3100) = 3110 Randuin's Omen (costs: 3100) = 3143 Zhonya's Hourglass (costs: 3100) = 3157 Sanguine Blade (costs: 3150) = 3181 Rabadon's Deathcap (costs: 3200) = 3089 Runic Bulwark (costs: 3200) = 3107 Maw of Malmortius (costs: 3200) = 3156 Frozen Mallet (costs: 3300) = 3022 The Bloodthirster (costs: 3350) = 3072 Frozen Fist (costs: 3400) = 3025 Hextech Gunblade (costs: 3400) = 3146 Ravenous Hydra (Melee Only) (costs: 3500) = 3074 Wooglet's Witchcap (costs: 3520) = 3090 Entropy (costs: 3615) = 3184 Infinity Edge (costs: 3800) = 3031 Mercurial Scimitar (costs: 3810) = 3139 Trinity Force (costs: 4200) = 3078</pre>
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by Wriggle View Post
    -snip-
    </td></tr></table>
    Oh wonderful! My JSON interpreter supports whitespace. Happy accident ahoy!
    I mean... ehrm..

    The left pane should actually show "*", not the other way around. * is small text special (done for localization purposes) and "Special" is full width explanation.


    Also, purchasing out an item will simply gold border it (this might change in the future, possibly. We're still investigating.)
    We wanted to make sure that players could do whatever they want with the tool, not have the tool limit the player.
  • I will fix the recommended item page so that:
    1. It has more than four per row.
    2. It doesn't hard error on bad id.

    It may take a bit for those improvements to get to the PBE however. I'm doing a bit of other work on the item shop right now concerning tutorials that are of a slightly higher priority.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by EdgarAlanPWN88 View Post
    Thank you Wriggle for posting so much!

    Thank you so much Riot Reinboom! I loved your remake of the shop before you were a Rioter, (over two year ago), and this is an awesome system!

    Now we just need to find someone to make a nice little program to do all of this with slick visuals!
    </td></tr></table>
    We liked her shop remake too, enough to hire her.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by Wriggle View Post
    Search using RAFManager for "items.json", it's been included in the game files lately. Now, if only Characters/Champions/Heroes/etc.json was included too..
    </td></tr></table>
    That file is a part of the new itemshop. Bits and pieces have been released steadily.
  • Quote:
    <table cellpadding="6" cellspacing="0" border="0" width="100%"> <tr> <td class="alt2" style="border:1px inset; padding:10px;">
    Originally Posted by Rhaban View Post
    Oh, quick question. Has Wukong been "fixed" in the new API? Would be the perfect opportunity to leave the "MonkeyKing" business behind. Every other champion API id can be derived with a simple Regex.Replace(championname.ToLower(), "[^a-zA-Z0-9]", string.Empty).
    </td></tr></table>
    No, Wukong's folder is still MonkeyKing.

    We may explore changing this in the future (but not right now).
  • You may have arbitrary fields in it, as long as you make them distinct enough to not collide with future API additions.
    Underscores are great.