@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:
    Originally Posted by Wriggle View Post
    Reinboooooom, you haven't forgotten us, have you?
    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:
    {"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}]}]}
    Or, in slightly more human readable form:
    Code:
    {
       "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
                }
             ]
          }
       ]
    }
    (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:
    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)
    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:
    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).
    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:
    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
  • Quote:
    Originally Posted by Wriggle View Post
    -snip-
    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:
    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!
    We liked her shop remake too, enough to hire her.
  • Quote:
    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..
    That file is a part of the new itemshop. Bits and pieces have been released steadily.
  • Quote:
    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).
    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.