Repository: joel1st/championweb
Branch: master
Commit: f98e5d775bc9
Files: 97
Total size: 2.4 MB
Directory structure:
gitextract_n_uzk69e/
├── .gitignore
├── Procfile
├── README.md
├── api_data/
│ ├── champions.json
│ ├── dd_patch.json
│ ├── index.js
│ ├── items.json
│ ├── masteries.json
│ ├── runes.js
│ ├── skills.json
│ └── summoners.json
├── app.js
├── bash.txt
├── bin/
│ ├── update_server.sh
│ └── www.js
├── config/
│ └── config.js
├── db/
│ └── championgg/
│ ├── webchampionpages.bson
│ ├── webchampionpages.metadata.json
│ ├── webchampionroles.bson
│ ├── webchampionroles.metadata.json
│ ├── webhomepagesummaries.bson
│ ├── webhomepagesummaries.metadata.json
│ ├── webmatchuppages.bson
│ ├── webmatchuppages.metadata.json
│ ├── weboverallroledatas.bson
│ ├── weboverallroledatas.metadata.json
│ ├── weboverallstats.bson
│ ├── weboverallstats.metadata.json
│ ├── webstatisticspages.bson
│ └── webstatisticspages.metadata.json
├── db.js
├── gruntfile.js
├── headline.js
├── logic/
│ ├── lower_case_champ.js
│ ├── produce_error.js
│ └── role_hash_table.js
├── middleware/
│ └── overall_data.js
├── models/
│ ├── web_champion_page.js
│ ├── web_champion_roles.js
│ ├── web_home_page_summaries.js
│ ├── web_matchup_page.js
│ ├── web_overall_role_data.js
│ ├── web_overall_stats.js
│ └── web_statistics_page.js
├── package.json
├── public/
│ ├── cpmstar/
│ │ └── cpmstar_siteskin_iframebuster.html
│ ├── css/
│ │ ├── master.css
│ │ └── sprite.css
│ ├── dist/
│ │ └── js/
│ │ ├── angular-bootstrap.js
│ │ ├── angular.js
│ │ ├── chart.js
│ │ ├── dirDisqus.js
│ │ └── tc-angular-chartjs.js
│ ├── googled8153283379da1fb.html
│ ├── js/
│ │ ├── app.js
│ │ ├── champion_data.js
│ │ ├── champion_page.js
│ │ ├── championgg_tooltip.js
│ │ ├── chart_options.js
│ │ ├── matchup_page.js
│ │ ├── statistics_jquery.js
│ │ └── statistics_page.js
│ ├── opensearchdescription.xml
│ ├── riot.html
│ └── template/
│ └── typeahead/
│ └── typeahead-popup.html
├── routes/
│ ├── api_static.js
│ ├── champion.js
│ ├── faq.js
│ ├── index.js
│ ├── matchup.js
│ ├── matchup_json.js
│ └── statistics.js
├── update_data.sh
├── update_server.sh
└── views/
├── champion/
│ ├── advertisement.ejs
│ ├── champion_image_roles.ejs
│ ├── champion_statistics.ejs
│ ├── core_build.ejs
│ ├── counters_matchups.ejs
│ ├── first_items.ejs
│ ├── gamelength_experience_summoners.ejs
│ ├── masteries.ejs
│ ├── reddit.ejs
│ ├── runes.ejs
│ ├── skill_order.ejs
│ ├── viktor_upgrade.ejs
│ └── winrate_playrate_damage_advert_trinket.ejs
├── champion.ejs
├── error.ejs
├── faq.ejs
├── footer.ejs
├── header.ejs
├── index.ejs
├── matchup.ejs
├── new_champion.ejs
├── scripts.ejs
└── statistics.ejs
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
### Node ###
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
### SublimeText ###
# cache files for sublime text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# workspace files are user-specific
*.sublime-workspace
# project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using SublimeText
# *.sublime-project
# sftp configuration file
sftp-config.json
================================================
FILE: Procfile
================================================
worker: node worker.js
web: npm start
clock: node clock.js
================================================
FILE: README.md
================================================
champion.gg
========
WEBSITE: http://champion.gg
A MEAN project (with a dash of angular).
In order to get a local version of champion.gg running you need to have MongoDb, Node and NPM installed. (ensure MongoDB is running when trying to run champion.gg)
To get a working version set up you'll need to clone the repo, install the dependencies, build the database and then start the server from the command line.
The commands to enter are listed below.
# Getting set up
Clone champion.gg:
```sh
git clone https://github.com/joel1st/championweb.git
```
Install dependencies from project directory:
```sh
npm install
```
Restore database from project directory
```sh
mongorestore --db championgg --collection webchampionpages --drop db/championgg/webchampionpages.bson
mongorestore --db championgg --collection webchampionroles --drop db/championgg/webchampionroles.bson
mongorestore --db championgg --collection webmatchuppages --drop db/championgg/webmatchuppages.bson
mongorestore --db championgg --collection weboverallroledatas --drop db/championgg/weboverallroledatas.bson
mongorestore --db championgg --collection weboverallstats --drop db/championgg/weboverallstats.bson
mongorestore --db championgg --collection webhomepagesummaries --drop db/championgg/webhomepagesummaries.bson
mongorestore --db championgg --collection webstatisticspages --drop db/championgg/webstatisticspages.bson
```
Start Champion.gg
```sh
npm start
#if you have another web server running on port 80 you can set the port as such
PORT=8888 npm start
```
You can now access champion.gg on http://localhost/ or if you set a port number http://localhost:8888/
# Development
In order to work on champion.gg more effectively I've created a grunt tasks to facilitate automation of javascript hinting (helps avoid nasty javascript errors).
```sh
grunt watch
```
To get assets ready for production:
```sh
grunt production
```
================================================
FILE: api_data/champions.json
================================================
{"Aatrox":{"id":266,"key":"Aatrox","name":"Aatrox","title":"the Darkin Blade"},"Ahri":{"id":103,"key":"Ahri","name":"Ahri","title":"the Nine-Tailed Fox"},"Akali":{"id":84,"key":"Akali","name":"Akali","title":"the Fist of Shadow"},"Alistar":{"id":12,"key":"Alistar","name":"Alistar","title":"the Minotaur"},"Amumu":{"id":32,"key":"Amumu","name":"Amumu","title":"the Sad Mummy"},"Anivia":{"id":34,"key":"Anivia","name":"Anivia","title":"the Cryophoenix"},"Annie":{"id":1,"key":"Annie","name":"Annie","title":"the Dark Child"},"Ashe":{"id":22,"key":"Ashe","name":"Ashe","title":"the Frost Archer"},"AurelionSol":{"id":136,"key":"AurelionSol","name":"Aurelion Sol","title":"The Star Forger"},"Azir":{"id":268,"key":"Azir","name":"Azir","title":"the Emperor of the Sands"},"Bard":{"id":432,"key":"Bard","name":"Bard","title":"the Wandering Caretaker"},"Blitzcrank":{"id":53,"key":"Blitzcrank","name":"Blitzcrank","title":"the Great Steam Golem"},"Brand":{"id":63,"key":"Brand","name":"Brand","title":"the Burning Vengeance"},"Braum":{"id":201,"key":"Braum","name":"Braum","title":"the Heart of the Freljord"},"Caitlyn":{"id":51,"key":"Caitlyn","name":"Caitlyn","title":"the Sheriff of Piltover"},"Camille":{"id":164,"key":"Camille","name":"Camille","title":"the Steel Shadow"},"Cassiopeia":{"id":69,"key":"Cassiopeia","name":"Cassiopeia","title":"the Serpent's Embrace"},"Chogath":{"id":31,"key":"Chogath","name":"Cho'Gath","title":"the Terror of the Void"},"Corki":{"id":42,"key":"Corki","name":"Corki","title":"the Daring Bombardier"},"Darius":{"id":122,"key":"Darius","name":"Darius","title":"the Hand of Noxus"},"Diana":{"id":131,"key":"Diana","name":"Diana","title":"Scorn of the Moon"},"Draven":{"id":119,"key":"Draven","name":"Draven","title":"the Glorious Executioner"},"DrMundo":{"id":36,"key":"DrMundo","name":"Dr. Mundo","title":"the Madman of Zaun"},"Ekko":{"id":245,"key":"Ekko","name":"Ekko","title":"the Boy Who Shattered Time"},"Elise":{"id":60,"key":"Elise","name":"Elise","title":"the Spider Queen"},"Evelynn":{"id":28,"key":"Evelynn","name":"Evelynn","title":"the Widowmaker"},"Ezreal":{"id":81,"key":"Ezreal","name":"Ezreal","title":"the Prodigal Explorer"},"Fiddlesticks":{"id":9,"key":"Fiddlesticks","name":"Fiddlesticks","title":"the Harbinger of Doom"},"Fiora":{"id":114,"key":"Fiora","name":"Fiora","title":"the Grand Duelist"},"Fizz":{"id":105,"key":"Fizz","name":"Fizz","title":"the Tidal Trickster"},"Galio":{"id":3,"key":"Galio","name":"Galio","title":"the Colossus"},"Gangplank":{"id":41,"key":"Gangplank","name":"Gangplank","title":"the Saltwater Scourge"},"Garen":{"id":86,"key":"Garen","name":"Garen","title":"The Might of Demacia"},"Gnar":{"id":150,"key":"Gnar","name":"Gnar","title":"the Missing Link"},"Gragas":{"id":79,"key":"Gragas","name":"Gragas","title":"the Rabble Rouser"},"Graves":{"id":104,"key":"Graves","name":"Graves","title":"the Outlaw"},"Hecarim":{"id":120,"key":"Hecarim","name":"Hecarim","title":"the Shadow of War"},"Heimerdinger":{"id":74,"key":"Heimerdinger","name":"Heimerdinger","title":"the Revered Inventor"},"Illaoi":{"id":420,"key":"Illaoi","name":"Illaoi","title":"the Kraken Priestess"},"Irelia":{"id":39,"key":"Irelia","name":"Irelia","title":"the Will of the Blades"},"Ivern":{"id":427,"key":"Ivern","name":"Ivern","title":"the Green Father"},"Janna":{"id":40,"key":"Janna","name":"Janna","title":"the Storm's Fury"},"JarvanIV":{"id":59,"key":"JarvanIV","name":"Jarvan IV","title":"the Exemplar of Demacia"},"Jax":{"id":24,"key":"Jax","name":"Jax","title":"Grandmaster at Arms"},"Jayce":{"id":126,"key":"Jayce","name":"Jayce","title":"the Defender of Tomorrow"},"Jhin":{"id":202,"key":"Jhin","name":"Jhin","title":"the Virtuoso"},"Jinx":{"id":222,"key":"Jinx","name":"Jinx","title":"the Loose Cannon"},"Kalista":{"id":429,"key":"Kalista","name":"Kalista","title":"the Spear of Vengeance"},"Karma":{"id":43,"key":"Karma","name":"Karma","title":"the Enlightened One"},"Karthus":{"id":30,"key":"Karthus","name":"Karthus","title":"the Deathsinger"},"Kassadin":{"id":38,"key":"Kassadin","name":"Kassadin","title":"the Void Walker"},"Katarina":{"id":55,"key":"Katarina","name":"Katarina","title":"the Sinister Blade"},"Kayle":{"id":10,"key":"Kayle","name":"Kayle","title":"The Judicator"},"Kennen":{"id":85,"key":"Kennen","name":"Kennen","title":"the Heart of the Tempest"},"Khazix":{"id":121,"key":"Khazix","name":"Kha'Zix","title":"the Voidreaver"},"Kindred":{"id":203,"key":"Kindred","name":"Kindred","title":"The Eternal Hunters"},"Kled":{"id":240,"key":"Kled","name":"Kled","title":"the Cantankerous Cavalier"},"KogMaw":{"id":96,"key":"KogMaw","name":"Kog'Maw","title":"the Mouth of the Abyss"},"Leblanc":{"id":7,"key":"Leblanc","name":"LeBlanc","title":"the Deceiver"},"LeeSin":{"id":64,"key":"LeeSin","name":"Lee Sin","title":"the Blind Monk"},"Leona":{"id":89,"key":"Leona","name":"Leona","title":"the Radiant Dawn"},"Lissandra":{"id":127,"key":"Lissandra","name":"Lissandra","title":"the Ice Witch"},"Lucian":{"id":236,"key":"Lucian","name":"Lucian","title":"the Purifier"},"Lulu":{"id":117,"key":"Lulu","name":"Lulu","title":"the Fae Sorceress"},"Lux":{"id":99,"key":"Lux","name":"Lux","title":"the Lady of Luminosity"},"Malphite":{"id":54,"key":"Malphite","name":"Malphite","title":"Shard of the Monolith"},"Malzahar":{"id":90,"key":"Malzahar","name":"Malzahar","title":"the Prophet of the Void"},"Maokai":{"id":57,"key":"Maokai","name":"Maokai","title":"the Twisted Treant"},"MasterYi":{"id":11,"key":"MasterYi","name":"Master Yi","title":"the Wuju Bladesman"},"MissFortune":{"id":21,"key":"MissFortune","name":"Miss Fortune","title":"the Bounty Hunter"},"MonkeyKing":{"id":62,"key":"MonkeyKing","name":"Wukong","title":"the Monkey King"},"Mordekaiser":{"id":82,"key":"Mordekaiser","name":"Mordekaiser","title":"the Iron Revenant"},"Morgana":{"id":25,"key":"Morgana","name":"Morgana","title":"Fallen Angel"},"Nami":{"id":267,"key":"Nami","name":"Nami","title":"the Tidecaller"},"Nasus":{"id":75,"key":"Nasus","name":"Nasus","title":"the Curator of the Sands"},"Nautilus":{"id":111,"key":"Nautilus","name":"Nautilus","title":"the Titan of the Depths"},"Nidalee":{"id":76,"key":"Nidalee","name":"Nidalee","title":"the Bestial Huntress"},"Nocturne":{"id":56,"key":"Nocturne","name":"Nocturne","title":"the Eternal Nightmare"},"Nunu":{"id":20,"key":"Nunu","name":"Nunu","title":"the Yeti Rider"},"Olaf":{"id":2,"key":"Olaf","name":"Olaf","title":"the Berserker"},"Orianna":{"id":61,"key":"Orianna","name":"Orianna","title":"the Lady of Clockwork"},"Pantheon":{"id":80,"key":"Pantheon","name":"Pantheon","title":"the Artisan of War"},"Poppy":{"id":78,"key":"Poppy","name":"Poppy","title":"Keeper of the Hammer"},"Quinn":{"id":133,"key":"Quinn","name":"Quinn","title":"Demacia's Wings"},"Rakan":{"id":497,"key":"Rakan","name":"Rakan","title":"The Charmer"},"Rammus":{"id":33,"key":"Rammus","name":"Rammus","title":"the Armordillo"},"RekSai":{"id":421,"key":"RekSai","name":"Rek'Sai","title":"the Void Burrower"},"Renekton":{"id":58,"key":"Renekton","name":"Renekton","title":"the Butcher of the Sands"},"Rengar":{"id":107,"key":"Rengar","name":"Rengar","title":"the Pridestalker"},"Riven":{"id":92,"key":"Riven","name":"Riven","title":"the Exile"},"Rumble":{"id":68,"key":"Rumble","name":"Rumble","title":"the Mechanized Menace"},"Ryze":{"id":13,"key":"Ryze","name":"Ryze","title":"the Rune Mage"},"Sejuani":{"id":113,"key":"Sejuani","name":"Sejuani","title":"Fury of the North"},"Shaco":{"id":35,"key":"Shaco","name":"Shaco","title":"the Demon Jester"},"Shen":{"id":98,"key":"Shen","name":"Shen","title":"the Eye of Twilight"},"Shyvana":{"id":102,"key":"Shyvana","name":"Shyvana","title":"the Half-Dragon"},"Singed":{"id":27,"key":"Singed","name":"Singed","title":"the Mad Chemist"},"Sion":{"id":14,"key":"Sion","name":"Sion","title":"The Undead Juggernaut"},"Sivir":{"id":15,"key":"Sivir","name":"Sivir","title":"the Battle Mistress"},"Skarner":{"id":72,"key":"Skarner","name":"Skarner","title":"the Crystal Vanguard"},"Sona":{"id":37,"key":"Sona","name":"Sona","title":"Maven of the Strings"},"Soraka":{"id":16,"key":"Soraka","name":"Soraka","title":"the Starchild"},"Swain":{"id":50,"key":"Swain","name":"Swain","title":"the Master Tactician"},"Syndra":{"id":134,"key":"Syndra","name":"Syndra","title":"the Dark Sovereign"},"TahmKench":{"id":223,"key":"TahmKench","name":"Tahm Kench","title":"the River King"},"Taliyah":{"id":163,"key":"Taliyah","name":"Taliyah","title":"the Stoneweaver"},"Talon":{"id":91,"key":"Talon","name":"Talon","title":"the Blade's Shadow"},"Taric":{"id":44,"key":"Taric","name":"Taric","title":"the Shield of Valoran"},"Teemo":{"id":17,"key":"Teemo","name":"Teemo","title":"the Swift Scout"},"Thresh":{"id":412,"key":"Thresh","name":"Thresh","title":"the Chain Warden"},"Tristana":{"id":18,"key":"Tristana","name":"Tristana","title":"the Yordle Gunner"},"Trundle":{"id":48,"key":"Trundle","name":"Trundle","title":"the Troll King"},"Tryndamere":{"id":23,"key":"Tryndamere","name":"Tryndamere","title":"the Barbarian King"},"TwistedFate":{"id":4,"key":"TwistedFate","name":"Twisted Fate","title":"the Card Master"},"Twitch":{"id":29,"key":"Twitch","name":"Twitch","title":"the Plague Rat"},"Udyr":{"id":77,"key":"Udyr","name":"Udyr","title":"the Spirit Walker"},"Urgot":{"id":6,"key":"Urgot","name":"Urgot","title":"the Headsman's Pride"},"Varus":{"id":110,"key":"Varus","name":"Varus","title":"the Arrow of Retribution"},"Vayne":{"id":67,"key":"Vayne","name":"Vayne","title":"the Night Hunter"},"Veigar":{"id":45,"key":"Veigar","name":"Veigar","title":"the Tiny Master of Evil"},"Velkoz":{"id":161,"key":"Velkoz","name":"Vel'Koz","title":"the Eye of the Void"},"Vi":{"id":254,"key":"Vi","name":"Vi","title":"the Piltover Enforcer"},"Viktor":{"id":112,"key":"Viktor","name":"Viktor","title":"the Machine Herald"},"Vladimir":{"id":8,"key":"Vladimir","name":"Vladimir","title":"the Crimson Reaper"},"Volibear":{"id":106,"key":"Volibear","name":"Volibear","title":"the Thunder's Roar"},"Warwick":{"id":19,"key":"Warwick","name":"Warwick","title":"the Uncaged Wrath of Zaun"},"Xayah":{"id":498,"key":"Xayah","name":"Xayah","title":"the Rebel"},"Xerath":{"id":101,"key":"Xerath","name":"Xerath","title":"the Magus Ascendant"},"XinZhao":{"id":5,"key":"XinZhao","name":"Xin Zhao","title":"the Seneschal of Demacia"},"Yasuo":{"id":157,"key":"Yasuo","name":"Yasuo","title":"the Unforgiven"},"Yorick":{"id":83,"key":"Yorick","name":"Yorick","title":"Shepherd of Souls"},"Zac":{"id":154,"key":"Zac","name":"Zac","title":"the Secret Weapon"},"Zed":{"id":238,"key":"Zed","name":"Zed","title":"the Master of Shadows"},"Ziggs":{"id":115,"key":"Ziggs","name":"Ziggs","title":"the Hexplosives Expert"},"Zilean":{"id":26,"key":"Zilean","name":"Zilean","title":"the Chronokeeper"},"Zyra":{"id":143,"key":"Zyra","name":"Zyra","title":"Rise of the Thorns"}}
================================================
FILE: api_data/dd_patch.json
================================================
{"ddPatch":"7.11.1"}
================================================
FILE: api_data/index.js
================================================
var items = require('./items');
var masteries = require('./masteries.json');
var runes = require('./runes');
var skills = require('./skills');
var summoners = require('./summoners');
module.exports = {
items: items,
masteries: masteries,
runes: runes,
skills: skills,
summoners: summoners
};
================================================
FILE: api_data/items.json
================================================
{"1001":{"name":"Boots of Speed","description":"Limited to 1.
UNIQUE Passive - Enhanced Movement: +25 Movement Speed","colloq":";","plaintext":"Slightly increases Movement Speed","into":["3006","3047","3020","3158","3111","3117","3009"],"image":{"full":"1001.png","sprite":"item0.png","group":"item","x":0,"y":0,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":300,"sell":210},"tags":["Boots"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":25},"id":1001},"1004":{"name":"Faerie Charm","description":"+25% Base Mana Regen ","colloq":";","plaintext":"Slightly increases Mana Regen","into":["3028","3070","3073","3114","3098"],"image":{"full":"1004.png","sprite":"item0.png","group":"item","x":48,"y":0,"w":48,"h":48},"gold":{"base":125,"purchasable":true,"total":125,"sell":88},"tags":["ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":1004},"1006":{"name":"Rejuvenation Bead","description":"+50% Base Health Regen ","colloq":";","plaintext":"Slightly increases Health Regen","into":["3077","3097","2053","3801","3096","3194"],"image":{"full":"1006.png","sprite":"item0.png","group":"item","x":96,"y":0,"w":48,"h":48},"gold":{"base":150,"purchasable":true,"total":150,"sell":105},"tags":["HealthRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":1006},"1011":{"name":"Giant's Belt","description":"+380 Health","colloq":";","plaintext":"Greatly increases Health","from":["1028"],"into":["3083","3143","3084","3022","3742"],"image":{"full":"1011.png","sprite":"item0.png","group":"item","x":144,"y":0,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":1000,"sell":700},"tags":["Health"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":380},"depth":2,"id":1011},"1018":{"name":"Cloak of Agility","description":"+20% Critical Strike Chance","colloq":";","plaintext":"Increases critical strike chance","into":["3031","3185","3508"],"image":{"full":"1018.png","sprite":"item0.png","group":"item","x":192,"y":0,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":800,"sell":560},"tags":["CriticalStrike"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.2},"id":1018},"1026":{"name":"Blasting Wand","description":"+40 Ability Power","colloq":";","plaintext":"Moderately increases Ability Power","into":["3089","3135","3124","3029","3151","3027","3100","3102","3116"],"image":{"full":"1026.png","sprite":"item0.png","group":"item","x":240,"y":0,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":850,"sell":595},"tags":["SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":40},"id":1026},"1027":{"name":"Sapphire Crystal","description":"+250 Mana","colloq":";blue","plaintext":"Increases Mana","into":["3057","3070","3010","3024","3073","3802"],"image":{"full":"1027.png","sprite":"item0.png","group":"item","x":288,"y":0,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":245},"tags":["Mana"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250},"id":1027},"1028":{"name":"Ruby Crystal","description":"+150 Health","colloq":";red","plaintext":"Increases Health","into":["1011","3211","3136","2045","2049","3010","3801","3044","3052","3067","3116","3143","3748","3751"],"image":{"full":"1028.png","sprite":"item0.png","group":"item","x":336,"y":0,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":400,"sell":280},"tags":["Health"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":150},"id":1028},"1029":{"name":"Cloth Armor","description":"+15 Armor","colloq":";","plaintext":"Slightly increases Armor","into":["3047","1031","3191","3024","3082","3075","2053","3105","3026"],"image":{"full":"1029.png","sprite":"item0.png","group":"item","x":384,"y":0,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":300,"sell":210},"tags":["Armor"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":15},"id":1029},"1031":{"name":"Chain Vest","description":"+40 Armor","colloq":";","plaintext":"Greatly increases Armor","from":["1029"],"into":["3075","3068","3109","2053","3193","3742"],"image":{"full":"1031.png","sprite":"item0.png","group":"item","x":432,"y":0,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":800,"sell":560},"tags":["Armor"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":40},"depth":2,"id":1031},"1033":{"name":"Null-Magic Mantle","description":"+25 Magic Resist","colloq":";","plaintext":"Slightly increases Magic Resist","into":["3111","3211","1057","3028","3140","3155","3105","3102","3814","3190","3194"],"image":{"full":"1033.png","sprite":"item0.png","group":"item","x":0,"y":48,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":450,"sell":315},"tags":["SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":25},"id":1033},"1036":{"name":"Long Sword","description":"+10 Attack Damage","colloq":";","plaintext":"Slightly increases Attack Damage","into":["3134","3077","3123","1053","3133","3034","3035","3044","3052","3053","3072","3122","3144","3155","3252"],"image":{"full":"1036.png","sprite":"item0.png","group":"item","x":48,"y":48,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":245},"tags":["Damage","Lane"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":10},"id":1036},"1037":{"name":"Pickaxe","description":"+25 Attack Damage","colloq":";","plaintext":"Moderately increases Attack Damage","into":["3124","3004","3008","3031","3074","3814","3812","3139","3181"],"image":{"full":"1037.png","sprite":"item0.png","group":"item","x":96,"y":48,"w":48,"h":48},"gold":{"base":875,"purchasable":true,"total":875,"sell":613},"tags":["Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25},"id":1037},"1038":{"name":"B. F. Sword","description":"+40 Attack Damage","colloq":";bf","plaintext":"Greatly increases Attack Damage","into":["3026","3031","3072","3147","3508"],"image":{"full":"1038.png","sprite":"item0.png","group":"item","x":144,"y":48,"w":48,"h":48},"gold":{"base":1300,"purchasable":true,"total":1300,"sell":910},"tags":["Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":40},"id":1038},"1039":{"name":"Hunter's Talisman","description":"+150% Base Mana Regen while in Jungle
UNIQUE Passive - Tooth: Damaging a monster with a spell or attack steals 25 Health over 5 seconds. Killing monsters grants special bonus experience.","colloq":";jungle;Jungle","plaintext":"Provides damage against Monsters and Mana Regen in the Jungle","into":["3706","3711","3715"],"image":{"full":"1039.png","sprite":"item0.png","group":"item","x":192,"y":48,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":245},"tags":["LifeSteal","ManaRegen","OnHit","Jungle"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"5","Effect5Amount":"0","Effect6Amount":"1.5","Effect7Amount":"15"},"id":1039},"1041":{"name":"Hunter's Machete","description":"+10% Life Steal vs. Monsters
UNIQUE Passive - Nail: Basic attacks deal 25 bonus damage on hit vs. Monsters. Killing monsters grants special bonus experience.","colloq":";jungle;Jungle","plaintext":"Provides damage and life steal versus Monsters","into":["3706","3711","3715"],"image":{"full":"1041.png","sprite":"item0.png","group":"item","x":240,"y":48,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":245},"tags":["LifeSteal","OnHit","Jungle"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"12","Effect2Amount":"25","Effect3Amount":"0.1","Effect4Amount":"2","Effect5Amount":"0","Effect6Amount":"0.1","Effect7Amount":"15"},"id":1041},"1042":{"name":"Dagger","description":"+12% Attack Speed","colloq":";","plaintext":"Slightly increases Attack Speed","into":["1043","3091","3006","3085","2015","3046","3086","3101"],"image":{"full":"1042.png","sprite":"item0.png","group":"item","x":288,"y":48,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":300,"sell":210},"tags":["AttackSpeed"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.12},"id":1042},"1043":{"name":"Recurve Bow","description":"+25% Attack Speed
UNIQUE Passive: Basic attacks deal an additional 15 physical damage on hit.","colloq":";","plaintext":"Greatly increases Attack Speed","from":["1042","1042"],"into":["3091","3153","3124","3675","1416","1418","1419"],"image":{"full":"1043.png","sprite":"item0.png","group":"item","x":336,"y":48,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":1000,"sell":700},"tags":["AttackSpeed","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.25},"effect":{"Effect1Amount":"15"},"depth":2,"id":1043},"1051":{"name":"Brawler's Gloves","description":"+10% Critical Strike Chance","colloq":";","plaintext":"Slightly increases Critical Strike Chance","into":["3086","3122"],"image":{"full":"1051.png","sprite":"item0.png","group":"item","x":384,"y":48,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":400,"sell":280},"tags":["CriticalStrike"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.1},"id":1051},"1052":{"name":"Amplifying Tome","description":"+20 Ability Power","colloq":";amptome","plaintext":"Slightly increases Ability Power","into":["3108","3191","3136","3135","3145","3113","3090","3116","1402","1410","1414","3050","3089","3165","3673","3802"],"image":{"full":"1052.png","sprite":"item0.png","group":"item","x":432,"y":48,"w":48,"h":48},"gold":{"base":435,"purchasable":true,"total":435,"sell":305},"tags":["SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":20},"id":1052},"1053":{"name":"Vampiric Scepter","description":"+15 Attack Damage +10% Life Steal","colloq":";","plaintext":"Basic attacks restore Health","from":["1036"],"into":["3072","3074","3812","3139","3144","3181"],"image":{"full":"1053.png","sprite":"item0.png","group":"item","x":0,"y":96,"w":48,"h":48},"gold":{"base":550,"purchasable":true,"total":900,"sell":630},"tags":["Damage","LifeSteal"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":15,"PercentLifeStealMod":0.1},"depth":2,"id":1053},"1054":{"name":"Doran's Shield","description":"+80 Health
Passive: Restores 6 Health every 5 seconds. Passive: Basic attacks deal an additional 5 physical damage to minions on hit. UNIQUE Passive: Regain an additional 20 health over 10 seconds after taking damage from an enemy champion.","colloq":";dshield","plaintext":"Good defensive starting item","image":{"full":"1054.png","sprite":"item0.png","group":"item","x":48,"y":96,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":400,"sell":160},"tags":["Health","HealthRegen","Lane"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":80,"FlatHPRegenMod":1.2},"effect":{"Effect1Amount":"0","Effect2Amount":"10","Effect3Amount":"5","Effect4Amount":"2"},"id":1054},"1055":{"name":"Doran's Blade","description":"+8 Attack Damage +80 Health +3% Life Steal","colloq":";dblade","plaintext":"Good starting item for attackers","image":{"full":"1055.png","sprite":"item0.png","group":"item","x":96,"y":96,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":450,"sell":180},"tags":["Damage","Health","Lane","LifeSteal"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":8,"FlatHPPoolMod":80,"PercentLifeStealMod":0.03},"effect":{"Effect1Amount":"10"},"id":1055},"1056":{"name":"Doran's Ring","description":"+60 Health +15 Ability Power +50% Base Mana Regen
Passive: Restores 4 Mana upon killing a unit.","colloq":";dring","plaintext":"Good starting item for casters","image":{"full":"1056.png","sprite":"item0.png","group":"item","x":144,"y":96,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":400,"sell":160},"tags":["Health","Lane","ManaRegen","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":60,"FlatMagicDamageMod":15},"effect":{"Effect1Amount":"4"},"id":1056},"1057":{"name":"Negatron Cloak","description":"+40 Magic Resist","colloq":";","plaintext":"Moderately increases Magic Resist","from":["1033"],"into":["3170","3091","3512","3001","3193"],"image":{"full":"1057.png","sprite":"item0.png","group":"item","x":192,"y":96,"w":48,"h":48},"gold":{"base":270,"purchasable":true,"total":720,"sell":504},"tags":["SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":40},"depth":2,"id":1057},"1058":{"name":"Needlessly Large Rod","description":"+60 Ability Power","colloq":";nlr","plaintext":"Greatly increases Ability Power","into":["3089","3090","3003","3007","3285"],"image":{"full":"1058.png","sprite":"item0.png","group":"item","x":240,"y":96,"w":48,"h":48},"gold":{"base":1250,"purchasable":true,"total":1250,"sell":875},"tags":["SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":60},"id":1058},"1082":{"name":"The Dark Seal","description":"+15 Ability Power +25% Increased Healing from Potions +100 Mana
UNIQUE Passive - Dread: Grants +3 Ability Power per Glory. UNIQUE Passive - Do or Die: Grants 2 Glory for a champion kill or 1 Glory for an assist, up to 10 Glory total. Lose 4 Glory on death.","colloq":";Noxian","plaintext":"Provides Ability Power and Mana. Increases in power as you kill enemies.","into":["3041"],"image":{"full":"1082.png","sprite":"item0.png","group":"item","x":288,"y":96,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":245},"tags":["HealthRegen","SpellDamage","Mana","Lane"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatMPPoolMod":100,"FlatMagicDamageMod":15},"effect":{"Effect1Amount":"0.25","Effect2Amount":"2","Effect3Amount":"1","Effect4Amount":"10","Effect5Amount":"3","Effect6Amount":"4"},"id":1082},"1083":{"name":"Cull","description":"+7 Attack Damage +3 Life on Hit
UNIQUE Passive: Killing a lane minion grants 1 additional Gold. Killing 100 lane minions grants an additional 350 bonus gold immediately and disables this passive.","colloq":";dblade","plaintext":"Provides damage and Life Steal on hit - Killing minions grant bonus Gold","image":{"full":"1083.png","sprite":"item0.png","group":"item","x":336,"y":96,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":450,"sell":180},"tags":["Damage","LifeSteal","Lane"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":7},"effect":{"Effect1Amount":"3","Effect2Amount":"1","Effect3Amount":"100","Effect4Amount":"350"},"id":1083},"1400":{"name":"Enchantment: Warrior","description":"+60 Attack Damage +10% Cooldown Reduction","colloq":"","plaintext":"Grants Attack Damage and Cooldown Reduction","from":["3133","3706"],"hideFromAll":true,"image":{"full":"1400.png","sprite":"item0.png","group":"item","x":384,"y":96,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"-0.2","Effect7Amount":"2","Effect8Amount":"3","Effect9Amount":"0.1"},"depth":3,"id":1400},"1401":{"name":"Enchantment: Cinderhulk","description":"+400 Health +15% Bonus Health
UNIQUE Passive - Immolate: Deals 11 (+1 per champion level) magic damage a second to nearby enemies while in combat. Deals 200% bonus damage to minions and monsters. ","colloq":"","plaintext":"Grants Health and Immolate Aura","from":["3751","3706"],"hideFromAll":true,"image":{"full":"1401.png","sprite":"item0.png","group":"item","x":432,"y":96,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":400},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"-0.2","Effect7Amount":"2","Effect8Amount":"3","Effect9Amount":"0.1"},"depth":3,"id":1401},"1402":{"name":"Enchantment: Runic Echoes","description":"+60 Ability Power +7% Movement Speed
UNIQUE Passive - Echo: Gain charges upon moving or casting. At 100 charges, the next damaging spell hit expends all charges to deal 60 (+10% of Ability Power) bonus magic damage to up to 4 targets on hit.
This effect deals 250% damage to Large Monsters. Hitting a Large Monster with this effect will restore 18% of your missing Mana.","colloq":"","plaintext":"Grants Ability Power and periodically empowers your Spells","from":["3113","1052","3706"],"hideFromAll":true,"image":{"full":"1402.png","sprite":"item0.png","group":"item","x":0,"y":144,"w":48,"h":48},"gold":{"base":340,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.07,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"-0.2","Effect7Amount":"2","Effect8Amount":"3","Effect9Amount":"0.1"},"depth":3,"id":1402},"1408":{"name":"Enchantment: Warrior","description":"+60 Attack Damage +10% Cooldown Reduction","colloq":"","plaintext":"Grants Attack Damage and Cooldown Reduction","from":["3133","3711"],"hideFromAll":true,"image":{"full":"1408.png","sprite":"item0.png","group":"item","x":48,"y":144,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"30","Effect9Amount":"0.1","Effect10Amount":"150"},"depth":3,"id":1408},"1409":{"name":"Enchantment: Cinderhulk","description":"+400 Health +15% Bonus Health
UNIQUE Passive - Immolate: Deals 11 (+1 per champion level) magic damage a second to nearby enemies while in combat. Deals 200% bonus damage to minions and monsters. ","colloq":"","plaintext":"Grants Health and Immolate Aura","from":["3751","3711"],"hideFromAll":true,"image":{"full":"1409.png","sprite":"item0.png","group":"item","x":96,"y":144,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":400},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"30","Effect9Amount":"0.1","Effect10Amount":"150"},"depth":3,"id":1409},"1410":{"name":"Enchantment: Runic Echoes","description":"+60 Ability Power +7% Movement Speed
UNIQUE Passive - Echo: Gain charges upon moving or casting. At 100 charges, the next damaging spell hit expends all charges to deal 60 (+10% of Ability Power) bonus magic damage to up to 4 targets on hit.
This effect deals 250% damage to Large Monsters. Hitting a Large Monster with this effect will restore 18% of your missing Mana.","colloq":"","plaintext":"Grants Ability Power and periodically empowers your Spells","from":["3113","1052","3711"],"hideFromAll":true,"image":{"full":"1410.png","sprite":"item0.png","group":"item","x":144,"y":144,"w":48,"h":48},"gold":{"base":340,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.07,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"30","Effect9Amount":"0.1","Effect10Amount":"150"},"depth":3,"id":1410},"1412":{"name":"Enchantment: Warrior","description":"+60 Attack Damage +10% Cooldown Reduction","colloq":"","plaintext":"Grants Attack Damage and Cooldown Reduction","from":["3133","3715"],"hideFromAll":true,"image":{"full":"1412.png","sprite":"item0.png","group":"item","x":192,"y":144,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"18","Effect9Amount":"0.1","Effect10Amount":"4"},"depth":3,"id":1412},"1413":{"name":"Enchantment: Cinderhulk","description":"+400 Health +15% Bonus Health
UNIQUE Passive - Immolate: Deals 11 (+1 per champion level) magic damage a second to nearby enemies while in combat. Deals 200% bonus damage to minions and monsters. ","colloq":"","plaintext":"Grants Health and Immolate Aura","from":["3751","3715"],"hideFromAll":true,"image":{"full":"1413.png","sprite":"item0.png","group":"item","x":240,"y":144,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":400},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"18","Effect9Amount":"0.1","Effect10Amount":"4"},"depth":3,"id":1413},"1414":{"name":"Enchantment: Runic Echoes","description":"+60 Ability Power +7% Movement Speed
UNIQUE Passive - Echo: Gain charges upon moving or casting. At 100 charges, the next damaging spell hit expends all charges to deal 60 (+10% of Ability Power) bonus magic damage to up to 4 targets on hit.
This effect deals 250% damage to Large Monsters. Hitting a Large Monster with this effect will restore 18% of your missing Mana.","colloq":"","plaintext":"Grants Ability Power and periodically empowers your Spells","from":["3113","1052","3715"],"hideFromAll":true,"image":{"full":"1414.png","sprite":"item0.png","group":"item","x":288,"y":144,"w":48,"h":48},"gold":{"base":340,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.07,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"18","Effect9Amount":"0.1","Effect10Amount":"4"},"depth":3,"id":1414},"1416":{"name":"Enchantment: Bloodrazor","description":"+50% Attack Speed
UNIQUE Passive: Basic attacks deal 4% of the target's maximum Health in bonus physical damage (max 75 vs. monsters and minions) on hit.","colloq":"","plaintext":"Increases Attack Speed and deals damage based on the target's Health","from":["1043","3706"],"hideFromAll":true,"image":{"full":"1416.png","sprite":"item0.png","group":"item","x":336,"y":144,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.5},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"-0.2","Effect7Amount":"2","Effect8Amount":"3","Effect9Amount":"0.1"},"depth":3,"id":1416},"1418":{"name":"Enchantment: Bloodrazor","description":"+50% Attack Speed
UNIQUE Passive: Basic attacks deal 4% of the target's maximum Health in bonus physical damage (max 75 vs. monsters and minions) on hit.","colloq":"","plaintext":"Increases Attack Speed and deals damage based on the target's Health","from":["1043","3711"],"hideFromAll":true,"image":{"full":"1418.png","sprite":"item0.png","group":"item","x":384,"y":144,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.5},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"30","Effect9Amount":"0.1","Effect10Amount":"150"},"depth":3,"id":1418},"1419":{"name":"Enchantment: Bloodrazor","description":"+50% Attack Speed
UNIQUE Passive: Basic attacks deal 4% of the target's maximum Health in bonus physical damage (max 75 vs. monsters and minions) on hit.","colloq":"","plaintext":"Increases Attack Speed and deals damage based on the target's Health","from":["1043","3715"],"hideFromAll":true,"image":{"full":"1419.png","sprite":"item0.png","group":"item","x":432,"y":144,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":2625,"sell":1838},"tags":[],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.5},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"18","Effect9Amount":"0.1","Effect10Amount":"4"},"depth":3,"id":1419},"2003":{"name":"Health Potion","description":"Limited to 5 at one time. Limited to 1 type of Healing Potion.
Click to Consume: Restores 150 Health over 15 seconds.","colloq":";","plaintext":"Consume to restore Health over time","stacks":5,"consumed":true,"image":{"full":"2003.png","sprite":"item0.png","group":"item","x":0,"y":192,"w":48,"h":48},"gold":{"base":50,"purchasable":true,"total":50,"sell":20},"tags":["Consumable","Jungle","Lane"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"150","Effect2Amount":"15"},"id":2003},"2009":{"name":"Total Biscuit of Rejuvenation","description":"Click to Consume: Restores 80 Health and 50 Mana over 10 seconds.","colloq":";","plaintext":"","consumed":true,"inStore":false,"image":{"full":"2009.png","sprite":"item0.png","group":"item","x":48,"y":192,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":2009},"2010":{"name":"Total Biscuit of Rejuvenation","description":"Click to Consume: Restores 15 Health and 15 Mana immediately and then 150 Health over 15 seconds.","colloq":";","plaintext":"","stacks":5,"consumed":true,"inStore":false,"image":{"full":"2010.png","sprite":"item0.png","group":"item","x":96,"y":192,"w":48,"h":48},"gold":{"base":50,"purchasable":false,"total":50,"sell":20},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"15","Effect2Amount":"15","Effect3Amount":"150","Effect4Amount":"15"},"id":2010},"2011":{"name":"Elixir Of Skill","description":"Click to Consume: Grants +1 Skill Point.","colloq":";","plaintext":"","stacks":5,"consumed":true,"inStore":false,"image":{"full":"2011.png","sprite":"item0.png","group":"item","x":144,"y":192,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Consumable","Lane","Jungle"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":2011},"2015":{"name":"Kircheis Shard","description":"+15% Attack Speed
Passive: Moving and attacking will make an attack Energized.
UNIQUE Passive - Energized Strike: Your Energized attacks deal 50 bonus magic damage on hit.","colloq":";","plaintext":"Attack speed and a chargable magic hit","from":["1042"],"into":["3094","3087"],"image":{"full":"2015.png","sprite":"item0.png","group":"item","x":192,"y":192,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":800,"sell":560},"tags":["AttackSpeed","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.15},"effect":{"Effect1Amount":"50"},"depth":2,"id":2015},"2031":{"name":"Refillable Potion","description":"Limited to 1 type of Healing Potion.
UNIQUE Active: Consumes a charge to restore 125 Health over 12 seconds. Holds up to 2 charges and refills upon visiting the shop.","colloq":";","plaintext":"Restores Health over time. Refills at shop.","into":["2032","2033"],"image":{"full":"2031.png","sprite":"item0.png","group":"item","x":240,"y":192,"w":48,"h":48},"gold":{"base":150,"purchasable":true,"total":150,"sell":60},"tags":["HealthRegen","Consumable","Active","Lane","Jungle"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"125","Effect2Amount":"0","Effect3Amount":"12","Effect4Amount":"2"},"id":2031},"2032":{"name":"Hunter's Potion","description":"Limited to 1 type of Healing Potion.
UNIQUE Active: Consumes a charge to restore 60 Health and 35 Mana over 8 seconds. Holds up to 5 charges and refills upon visiting the shop.
Killing a Large Monster grants 1 charge.
(Killing a Large Monster at full charges will automatically consume the newest charge.)","colloq":";","plaintext":"Restores Health and Mana over time - Refills at shop and has increased capacity","from":["2031"],"image":{"full":"2032.png","sprite":"item0.png","group":"item","x":288,"y":192,"w":48,"h":48},"gold":{"base":250,"purchasable":true,"total":400,"sell":160},"tags":["HealthRegen","ManaRegen","Consumable","Active","Jungle"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"60","Effect2Amount":"35","Effect3Amount":"8","Effect4Amount":"5"},"depth":2,"id":2032},"2033":{"name":"Corrupting Potion","description":"Limited to 1 type of Healing Potion.
UNIQUE Active: Consumes a charge to restore 125 Health and 75 Mana over 12 seconds and grants Touch of Corruption during that time. Holds up to 3 charges that refills upon visiting the shop.
Touch of Corruption: Damaging spells and attacks burn enemy champions for 15 - 30 magic damage over 3 seconds. (Half Damage for Area of Effect or Damage over Time spells. Damage increases with champion level.)
(Corrupting Potion can be used even at full Health and Mana.)","colloq":";","plaintext":"Restores Health and Mana over time and boosts combat power - Refills at Shop","from":["2031"],"image":{"full":"2033.png","sprite":"item0.png","group":"item","x":336,"y":192,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":500,"sell":200},"tags":["Active","Consumable","HealthRegen","Lane","ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"125","Effect2Amount":"75","Effect3Amount":"12","Effect4Amount":"3","Effect5Amount":"10","Effect6Amount":"0.1","Effect7Amount":"15","Effect8Amount":"3","Effect9Amount":"30"},"depth":2,"id":2033},"2045":{"name":"Ruby Sightstone","description":"+500 Health
UNIQUE Passive: Item Active cooldowns are reduced by 20%. UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 4 charges and refills when visiting the shop.
(A player may only have 3 Stealth Wards on the map at one time. Unique Passives with the same name don't stack.)","colloq":";","plaintext":"Greatly increases Health and provides Stealth Wards over time","from":["2049","1028"],"image":{"full":"2045.png","sprite":"item0.png","group":"item","x":384,"y":192,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":1600,"sell":640},"tags":["Active","Health","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":500},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"4","Effect3Amount":"150"},"depth":3,"id":2045},"2047":{"name":"Oracle's Extract","description":"Click to Consume: Grants detection of nearby invisible or unseen enemy units for 5 minutes.","colloq":";","plaintext":"Allows champion to see invisible or unseen enemy units","consumed":true,"consumeOnFull":true,"image":{"full":"2047.png","sprite":"item0.png","group":"item","x":432,"y":192,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":300,"sell":120},"tags":["Consumable","Stealth","Vision"],"maps":{"8":true,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{},"id":2047},"2049":{"name":"Sightstone","description":"+150 Health
UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 3 charges which refill upon visiting the shop.
(A player may only have 3 Stealth Wards on the map at one time. Unique Passives with the same name don't stack.)","colloq":";","plaintext":"Increases Health and provides Stealth Wards over time","from":["1028"],"into":["2045","2301","2302","2303"],"image":{"full":"2049.png","sprite":"item0.png","group":"item","x":0,"y":240,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":800,"sell":320},"tags":["Active","Health","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":150},"effect":{"Effect1Amount":"3","Effect2Amount":"150"},"depth":2,"id":2049},"2050":{"name":"Explorer's Ward","description":"Click to Consume: Places an invisible ward that reveals the surrounding area for 60 seconds.","colloq":";","plaintext":"","inStore":false,"image":{"full":"2050.png","sprite":"item0.png","group":"item","x":48,"y":240,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Consumable"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":2050},"2051":{"name":"Guardian's Horn","description":"+150 Health
Passive: Restores 20 Health every 5 seconds. UNIQUE Passive: Blocks 12 damage from attacks and spells from champions (25% effectiveness vs. damage over time abilities).
Limited to 1 Guardian's Item.","colloq":"Golden Arm of Kobe;Golden Bicep of Kobe;Horn; Horn of the ManWolf; ManWolf","plaintext":"Good starting item for tanks","image":{"full":"2051.png","sprite":"item0.png","group":"item","x":96,"y":240,"w":48,"h":48},"gold":{"base":950,"purchasable":true,"total":950,"sell":380},"tags":["Health","HealthRegen","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":150,"FlatHPRegenMod":4},"effect":{"Effect1Amount":"12","Effect2Amount":"0.25"},"id":2051},"2052":{"name":"Poro-Snax","description":"This savory blend of free-range, grass-fed Avarosan game hens and organic, non-ZMO Freljordian herbs contains the essential nutrients necessary to keep your Poro purring with pleasure.
All proceeds will be donated towards fighting Noxian animal cruelty.","colloq":";","plaintext":"","stacks":2,"consumed":true,"inStore":false,"image":{"full":"2052.png","sprite":"item0.png","group":"item","x":144,"y":240,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":2052},"2053":{"name":"Raptor Cloak","description":"+40 Armor +125% Base Health Regen
UNIQUE Passive - Point Runner: Builds up to +20% Movement Speed over 2 seconds while near turrets, fallen turrets and Void Gates.","colloq":";","plaintext":"Enhances Movement Speed near turrets","from":["1006","1031"],"into":["3512","3056","3069"],"image":{"full":"2053.png","sprite":"item0.png","group":"item","x":192,"y":240,"w":48,"h":48},"gold":{"base":250,"purchasable":true,"total":1200,"sell":840},"tags":["Armor","HealthRegen","NonbootsMovement"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":40},"effect":{"Effect1Amount":"20","Effect2Amount":"2"},"depth":3,"id":2053},"2054":{"name":"Diet Poro-Snax","description":"All the flavor of regular Poro-Snax, without the calories! Keeps your Poro happy AND healthy.
Click to Consume: Gives your Poros a delicious healthy treat.","colloq":"","plaintext":"","consumed":true,"inStore":false,"image":{"full":"2054.png","sprite":"item0.png","group":"item","x":240,"y":240,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":2054},"2055":{"name":"Control Ward","description":"Can only carry 3 Control Wards in inventory.
Click to Consume: Places a ward that grants vision of the surrounding area. This device will also reveal invisible traps and reveal / disable wards. Control Wards do not disable other Control Wards. Camouflaged units will also be revealed.
Limit 1 Control Ward on the map per player.","colloq":"orange;","plaintext":"Used to disable wards and invisible traps in an area.","stacks":3,"consumed":true,"image":{"full":"2055.png","sprite":"item0.png","group":"item","x":288,"y":240,"w":48,"h":48},"gold":{"base":75,"purchasable":true,"total":75,"sell":30},"tags":["Consumable","Lane","Stealth","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1","Effect2Amount":"3"},"id":2055},"2138":{"name":"Elixir of Iron","description":"Level 9 required to purchase.
Click to Consume: Grants +300 Health, 25% Tenacity, increased champion size, and Path of Iron for 3 minutes.
Path of Iron: Moving leaves a path behind that boosts allied champion's Movement Speed by 15%.
(Only one Elixir effect may be active at a time.)","colloq":";white","plaintext":"Temporarily increases defenses. Leaves a trail for allies to follow.","consumed":true,"consumeOnFull":true,"image":{"full":"2138.png","sprite":"item0.png","group":"item","x":336,"y":240,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":500,"sell":200},"tags":["Health","Consumable","NonbootsMovement","Tenacity"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"300","Effect2Amount":"0.25","Effect3Amount":"3","Effect4Amount":"0.15","Effect5Amount":"0.15","Effect6Amount":"0","Effect7Amount":"0","Effect8Amount":"9"},"id":2138},"2139":{"name":"Elixir of Sorcery","description":"Level 9 required to purchase.
Click to Consume: Grants +50 Ability Power, 15 bonus Mana Regen per 5 seconds and Sorcery for 3 minutes.
Sorcery: Damaging a champion or turret deals 25 bonus True Damage. This effect has a 5 second cooldown versus champions but no cooldown versus turrets.
(Only one Elixir effect may be active at a time.) ","colloq":";blue","plaintext":"Temporarily grants Ability Power and Bonus Damage to champions and turrets.","consumed":true,"consumeOnFull":true,"image":{"full":"2139.png","sprite":"item0.png","group":"item","x":384,"y":240,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":500,"sell":200},"tags":["Consumable","ManaRegen","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"50","Effect2Amount":"50","Effect3Amount":"25","Effect4Amount":"3","Effect5Amount":"5","Effect6Amount":"3","Effect7Amount":"0","Effect8Amount":"9"},"id":2139},"2140":{"name":"Elixir of Wrath","description":"Level 9 required to purchase.
Click to Consume: Grants +30 Attack Damage and Bloodlust for 3 minutes.
Bloodlust: Dealing physical damage to champions heals for 15% of the damage dealt.
(Only one Elixir effect may be active at a time.)","colloq":";red","plaintext":"Temporarily grants Attack Damage and heals you when dealing physical damage to champions.","consumed":true,"consumeOnFull":true,"image":{"full":"2140.png","sprite":"item0.png","group":"item","x":432,"y":240,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":500,"sell":200},"tags":["Consumable","Damage","LifeSteal","SpellVamp"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"30","Effect2Amount":"30","Effect3Amount":"0.15","Effect4Amount":"3","Effect5Amount":"0","Effect6Amount":"0","Effect7Amount":"0","Effect8Amount":"9"},"id":2140},"2301":{"name":"Eye of the Watchers","description":"+200 Health +50% Base Mana Regen +35 Ability Power +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Tribute: Damaging spells and attacks against champions or buildings deal 15 additional damage and grant 15 Gold. This can occur up to 3 times every 30 seconds. UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 4 charges which refill upon visiting the shop.
QUEST: Earn 650 gold using this item. REWARD: Tribute is upgraded into Queen's Tribute.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Provides Ability Power and Stealth Wards over time","from":["2049","3098"],"image":{"full":"2301.png","sprite":"item0.png","group":"item","x":0,"y":288,"w":48,"h":48},"gold":{"base":550,"purchasable":true,"total":2200,"sell":880},"tags":["Health","SpellDamage","ManaRegen","Vision","Active","GoldPer","CooldownReduction"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":200,"FlatMagicDamageMod":35},"effect":{"Effect1Amount":"2","Effect2Amount":"15","Effect3Amount":"15","Effect4Amount":"4","Effect5Amount":"30","Effect6Amount":"12","Effect7Amount":"150","Effect8Amount":"3"},"depth":3,"id":2301},"2302":{"name":"Eye of the Oasis","description":"+200 Health +125% Base Health Regen +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Favor: Enemy minions killed by your allies sometimes drop coins that give either 30 gold or 8% missing mana (minimum 15). Cannon minions always drop coins. UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 4 charges which refill upon visiting the shopQUEST: Earn 650 gold using this item. REWARD: Favor is upgraded to Emperor's Favor and you receive an Elixir Of Skill.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Provides Gold, Mana, and Stealth Wards over time","from":["2049","3096"],"image":{"full":"2302.png","sprite":"item0.png","group":"item","x":48,"y":288,"w":48,"h":48},"gold":{"base":250,"purchasable":true,"total":1900,"sell":760},"tags":["Health","HealthRegen","ManaRegen","Vision","Active","GoldPer","CooldownReduction"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":200},"effect":{"Effect1Amount":"2","Effect2Amount":"15","Effect3Amount":"25","Effect4Amount":"4","Effect5Amount":"0","Effect6Amount":"0","Effect7Amount":"150"},"depth":3,"id":2302},"2303":{"name":"Eye of the Equinox","description":"+500 Health +200% Base Health Regen +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Spoils of War: Melee basic attacks execute minions below 320 (+20 per level) Health. Killing a minion heals the owner and the nearest allied champion for 50 Health and grants them kill Gold. These effects require a nearby ally. Recharges every 30 seconds. Max 4 charges. UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 4 charges which refill upon visiting the shop.QUEST: Earn 650 gold using this item. REWARD: Shield Battery, a permanent shield that regenerates slowly outside of combat.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Provides Health and Stealth Wards over time","from":["2049","3097"],"image":{"full":"2303.png","sprite":"item0.png","group":"item","x":96,"y":288,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2300,"sell":920},"tags":["Health","HealthRegen","Vision","Active","GoldPer"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":500},"effect":{"Effect1Amount":"320","Effect2Amount":"50","Effect3Amount":"30","Effect4Amount":"4","Effect5Amount":"0","Effect6Amount":"0","Effect7Amount":"150","Effect8Amount":"0","Effect9Amount":"2","Effect10Amount":"20"},"depth":3,"id":2303},"3001":{"name":"Abyssal Mask","description":"+300 Health +65 Magic Resist +100% Base Health Regeneration +10% Cooldown Reduction
UNIQUE Aura: Nearby enemy champions take 10% more magic damage.","colloq":";","plaintext":"Nearby enemies take more magic damage","from":["3211","1057"],"image":{"full":"3001.png","sprite":"item0.png","group":"item","x":144,"y":288,"w":48,"h":48},"gold":{"base":880,"purchasable":true,"total":2800,"sell":1960},"tags":["Health","SpellBlock","HealthRegen","Aura","CooldownReduction","MagicPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatSpellBlockMod":65},"effect":{"Effect1Amount":"-10","Effect2Amount":"-25","Effect3Amount":"0.1"},"depth":3,"id":3001},"3003":{"name":"Archangel's Staff","description":"+80 Ability Power +250 Mana
UNIQUE Passive - Awe: Grants Ability Power equal to 3% of maximum Mana. Refunds 25% of Mana spent. UNIQUE Passive - Mana Charge: Grants +8 maximum Mana (max +750 Mana) for each spell cast or Mana expenditure (occurs up to 2 times every 8 seconds).
Transforms into Seraph's Embrace at +750 Mana.","colloq":";aa","plaintext":"Increases Ability Power based on maximum Mana","from":["3070","1058"],"image":{"full":"3003.png","sprite":"item0.png","group":"item","x":192,"y":288,"w":48,"h":48},"gold":{"base":1100,"purchasable":true,"total":3100,"sell":2170},"tags":["Mana","ManaRegen","SpellDamage"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.03","Effect2Amount":"8","Effect3Amount":"750","Effect4Amount":"2","Effect5Amount":"8","Effect6Amount":"0","Effect7Amount":"0.25"},"depth":3,"id":3003},"3004":{"name":"Manamune","description":"+25 Attack Damage +250 Mana
UNIQUE Passive - Awe: Grants bonus Attack Damage equal to 2% of maximum Mana. Refunds 15% of Mana spent. UNIQUE Passive - Mana Charge: Grants +4 maximum Mana (max +750 Mana) for each basic attack, spell cast or Mana expenditure (occurs up to 2 times every 8 seconds).
Transforms into Muramana at +750 Mana.","colloq":";","plaintext":"Increases Attack Damage based on maximum Mana","from":["3070","1037"],"image":{"full":"3004.png","sprite":"item0.png","group":"item","x":240,"y":288,"w":48,"h":48},"gold":{"base":775,"purchasable":true,"total":2400,"sell":1680},"tags":["Damage","Mana","ManaRegen","OnHit"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"FlatMPPoolMod":250},"effect":{"Effect1Amount":"0.02","Effect2Amount":"4","Effect3Amount":"750","Effect4Amount":"2","Effect5Amount":"8","Effect6Amount":"1","Effect7Amount":"0.15"},"depth":3,"id":3004},"3006":{"name":"Berserker's Greaves","description":" +35% Attack Speed
UNIQUE Passive - Enhanced Movement: +45 Movement Speed","colloq":";","plaintext":"Enhances Movement Speed and Attack Speed","from":["1001","1042"],"image":{"full":"3006.png","sprite":"item0.png","group":"item","x":288,"y":288,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1100,"sell":770},"tags":["AttackSpeed","Boots"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":45,"PercentAttackSpeedMod":0.35},"depth":2,"id":3006},"3007":{"name":"Archangel's Staff (Quick Charge)","description":"+80 Ability Power +250 Mana
UNIQUE Passive - Awe: Grants Ability Power equal to 3% of maximum Mana. Refunds 25% of Mana spent. UNIQUE Passive - Mana Charge: Grants +12 maximum Mana (max +750 Mana) for each spell cast or Mana expenditure (occurs up to 2 times every 8 seconds).
Transforms into Seraph's Embrace at +750 Mana.","colloq":";aa","plaintext":"Increases Ability Power based on maximum Mana","from":["3073","1058"],"image":{"full":"3007.png","sprite":"item0.png","group":"item","x":336,"y":288,"w":48,"h":48},"gold":{"base":1100,"purchasable":true,"total":3100,"sell":2170},"tags":["Mana","ManaRegen","SpellDamage"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.03","Effect2Amount":"12","Effect3Amount":"750","Effect4Amount":"2","Effect5Amount":"8","Effect6Amount":"0","Effect7Amount":"0.25"},"depth":3,"id":3007},"3008":{"name":"Manamune (Quick Charge)","description":"+25 Attack Damage +250 Mana
UNIQUE Passive - Awe: Grants bonus Attack Damage equal to 2% of maximum Mana. Refunds 15% of Mana spent. UNIQUE Passive - Mana Charge: Grants +6 maximum Mana (max +750 Mana) for each basic attack, spell cast or Mana expenditure (occurs up to 2 times every 8 seconds).
Transforms into Muramana at +750 Mana.","colloq":";","plaintext":"Increases Attack Damage based on maximum Mana","from":["3073","1037"],"image":{"full":"3008.png","sprite":"item0.png","group":"item","x":384,"y":288,"w":48,"h":48},"gold":{"base":775,"purchasable":true,"total":2400,"sell":1680},"tags":["Damage","Mana","ManaRegen","OnHit"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"FlatMPPoolMod":250},"effect":{"Effect1Amount":"0.02","Effect2Amount":"6","Effect3Amount":"750","Effect4Amount":"2","Effect5Amount":"8","Effect6Amount":"1","Effect7Amount":"0.15"},"depth":3,"id":3008},"3009":{"name":"Boots of Swiftness","description":"UNIQUE Passive - Enhanced Movement: +55 Movement Speed UNIQUE Passive - Slow Resist: Movement slowing effects are reduced by 25%.","colloq":";","plaintext":"Enhances Movement Speed and reduces the effect of slows","from":["1001"],"image":{"full":"3009.png","sprite":"item0.png","group":"item","x":432,"y":288,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":900,"sell":630},"tags":["Boots"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":55},"effect":{"Effect1Amount":"0.25"},"depth":2,"id":3009},"3010":{"name":"Catalyst of Aeons","description":"+225 Health +300 Mana
UNIQUE Passive - Eternity: 15% of damage taken from champions is gained as Mana.
Spending Mana restores 20% of the cost as Health, up to 15 per spell cast.
(Toggled Spells heal for a maximum of 15 per second.)","colloq":";","plaintext":"Spend Mana to recover Health","from":["1028","1027"],"into":["3027","3029","3030","3800"],"image":{"full":"3010.png","sprite":"item0.png","group":"item","x":0,"y":336,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1100,"sell":770},"tags":["Health","HealthRegen","Mana","ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":225,"FlatMPPoolMod":300},"effect":{"Effect1Amount":"150","Effect2Amount":"200","Effect3Amount":"8","Effect4Amount":"15","Effect5Amount":"0.2","Effect6Amount":"0.15"},"depth":2,"id":3010},"3020":{"name":"Sorcerer's Shoes","description":"+15 Magic Penetration
UNIQUE Passive - Enhanced Movement: +45 Movement Speed","colloq":";","plaintext":"Enhances Movement Speed and magic damage","from":["1001"],"image":{"full":"3020.png","sprite":"item0.png","group":"item","x":48,"y":336,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":1100,"sell":770},"tags":["Boots","MagicPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":45},"effect":{"Effect1Amount":"15"},"depth":2,"id":3020},"3022":{"name":"Frozen Mallet","description":"+700 Health +30 Attack Damage
UNIQUE Passive - Icy: Basic attacks slow the target's Movement Speed for 1.5 seconds on hit (40% slow for melee attacks, 30% slow for ranged attacks).","colloq":";fm","plaintext":"Basic attacks slow enemies","from":["3052","1011"],"image":{"full":"3022.png","sprite":"item0.png","group":"item","x":96,"y":336,"w":48,"h":48},"gold":{"base":900,"purchasable":true,"total":3100,"sell":2170},"tags":["Damage","Health","OnHit","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":30,"FlatHPPoolMod":700},"effect":{"Effect1Amount":"1.5","Effect2Amount":"0.4","Effect3Amount":"0.3"},"depth":3,"id":3022},"3024":{"name":"Glacial Shroud","description":"+25 Armor +250 Mana
UNIQUE Passive: +10% Cooldown Reduction","colloq":";","plaintext":"Increases Armor and Cooldown Reduction","from":["1027","1029"],"into":["3110","3025","3050","3060","3187"],"image":{"full":"3024.png","sprite":"item0.png","group":"item","x":144,"y":336,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1000,"sell":700},"tags":["Armor","CooldownReduction","Mana"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250,"FlatArmorMod":25},"effect":{"Effect1Amount":"-0.1"},"depth":2,"id":3024},"3025":{"name":"Iceborn Gauntlet","description":"+65 Armor +20% Cooldown Reduction +500 Mana
UNIQUE Passive - Spellblade: After using an ability, the next basic attack deals bonus physical damage equal to 100% of base Attack Damage in an area and creates an icy zone for 2 seconds that slows Movement Speed by 30% (1.5 second cooldown).
Size of zone increases with bonus armor.","colloq":";frozen fist","plaintext":"Basic attacks create a slow field after spell cast","from":["3057","3024"],"image":{"full":"3025.png","sprite":"item0.png","group":"item","x":192,"y":336,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2700,"sell":1890},"tags":["Armor","Mana","CooldownReduction","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":500,"FlatArmorMod":65},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"1","Effect3Amount":"2","Effect4Amount":"-0.3","Effect5Amount":"1.5"},"depth":3,"id":3025},"3026":{"name":"Guardian Angel","description":"+40 Attack Damage +30 Armor
UNIQUE Passive: Upon taking lethal damage, restores 50% of base Health and 30% of maximum Mana after 4 seconds of stasis (300 second cooldown).","colloq":";ga","plaintext":"Periodically revives champion upon death","from":["1038","1029"],"image":{"full":"3026.png","sprite":"item0.png","group":"item","x":240,"y":336,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":2400,"sell":960},"tags":["Armor","Damage"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":40,"FlatArmorMod":30},"effect":{"Effect1Amount":"0.5","Effect2Amount":"4","Effect3Amount":"300","Effect4Amount":"0.3"},"depth":2,"id":3026},"3027":{"name":"Rod of Ages","description":"+300 Health +300 Mana +60 Ability Power
Passive: Grants +20 Health, +10 Mana, and +4 Ability Power per stack (max +200 Health, +100 Mana, and +40 Ability Power). Grants 1 stack per minute (max 10 stacks). UNIQUE Passive - Eternity: 15% of damage taken from champions is gained as Mana. Spending Mana restores 20% of the cost as Health, up to 25 per spell cast.","colloq":";roa","plaintext":"Greatly increases Health, Mana, and Ability Power","from":["3010","1026"],"image":{"full":"3027.png","sprite":"item0.png","group":"item","x":288,"y":336,"w":48,"h":48},"gold":{"base":750,"purchasable":true,"total":2700,"sell":1890},"tags":["Health","HealthRegen","Mana","ManaRegen","SpellDamage"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMPPoolMod":300,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"20","Effect2Amount":"10","Effect3Amount":"4","Effect4Amount":"1","Effect5Amount":"10","Effect6Amount":"150","Effect7Amount":"200","Effect8Amount":"8","Effect9Amount":"25","Effect10Amount":"0.2","Effect11Amount":"0.15"},"depth":3,"id":3027},"3028":{"name":"Chalice of Harmony","description":"+30 Magic Resist +50% Base Mana Regen
UNIQUE Passive - Harmony: Grants bonus % Base Health Regen equal to your bonus % Base Mana Regen.","colloq":";","plaintext":"Increases Mana and Health Regeneration","from":["1004","1033","1004"],"into":["3174","3222"],"image":{"full":"3028.png","sprite":"item0.png","group":"item","x":336,"y":336,"w":48,"h":48},"gold":{"base":100,"purchasable":true,"total":800,"sell":560},"tags":["SpellBlock","HealthRegen","ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":30},"effect":{"Effect1Amount":"2","Effect2Amount":"5","Effect3Amount":"600","Effect4Amount":"180","Effect5Amount":"8","Effect6Amount":"1","Effect7Amount":"1"},"depth":2,"id":3028},"3029":{"name":"Rod of Ages (Quick Charge)","description":"+300 Health +300 Mana +60 Ability Power
Passive: Grants +20 Health, +10 Mana, and +4 Ability Power per stack (max +200 Health, +100 Mana, and +40 Ability Power). Grants 1 stack per 40 seconds (max 10 stacks). UNIQUE Passive - Eternity: 15% of damage taken from champions is gained as Mana. Spending Mana restores 20% of the cost as Health, up to 25 per spell cast.","colloq":";roa","plaintext":"Greatly increases Health, Mana, and Ability Power","from":["3010","1026"],"image":{"full":"3029.png","sprite":"item0.png","group":"item","x":384,"y":336,"w":48,"h":48},"gold":{"base":750,"purchasable":true,"total":2700,"sell":1890},"tags":["Health","HealthRegen","Mana","ManaRegen","SpellDamage"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMPPoolMod":300,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"20","Effect2Amount":"10","Effect3Amount":"4","Effect4Amount":"1","Effect5Amount":"10","Effect6Amount":"150","Effect7Amount":"200","Effect8Amount":"8","Effect9Amount":"25","Effect10Amount":"0.2","Effect11Amount":"0.15"},"depth":3,"id":3029},"3030":{"name":"Hextech GLP-800","description":"+300 Health +400 Mana +80 Ability Power
UNIQUE Passive - Eternity: 15% of damage taken from champions is gained as Mana. Spending Mana restores 20% of the cost as Health, up to 25 per spell cast. UNIQUE Active - Frost Bolt: Fires a spray of icy bolts that explode, dealing 100 - 200 (+35% of your Ability Power) magic damage to all enemies hit. (40 second cooldown, shared with other Hextech items).
Enemies hit are slowed by 65% decaying over 0.5 seconds.
(Frost Bolt has a cast time, in contrast to most actives.) ","colloq":"frost cannon;","plaintext":"Activate to fire icy bolts to slow enemies","from":["3010","3145"],"image":{"full":"3030.png","sprite":"item0.png","group":"item","x":432,"y":336,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":3000,"sell":2100},"tags":["Health","HealthRegen","SpellDamage","Mana","ManaRegen","Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMPPoolMod":400,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"0.5","Effect5Amount":"0.65","Effect6Amount":"100","Effect7Amount":"200","Effect8Amount":"0.35","Effect9Amount":"25","Effect10Amount":"0.2","Effect11Amount":"0.15","Effect12Amount":"40"},"depth":3,"id":3030},"3031":{"name":"Infinity Edge","description":"+70 Attack Damage +20% Critical Strike Chance
UNIQUE Passive: Critical strike bonus damage is increased by 50%.","colloq":";ie","plaintext":"Massively enhances critical strikes","from":["1038","1037","1018"],"image":{"full":"3031.png","sprite":"item0.png","group":"item","x":0,"y":384,"w":48,"h":48},"gold":{"base":425,"purchasable":true,"total":3400,"sell":2380},"tags":["CriticalStrike","Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":70,"FlatCritChanceMod":0.2},"effect":{"Effect1Amount":"0.5"},"depth":2,"id":3031},"3033":{"name":"Mortal Reminder","description":"+50 Attack Damage
UNIQUE Passive - Executioner: Physical damage inflicts Grievous Wounds on enemy champions for 5 seconds. UNIQUE Passive - Last Whisper: +35% Bonus Armor Penetration.","colloq":";lw;grievous","plaintext":"Overcomes enemies with high Health recovery and Armor","from":["3035","3123"],"image":{"full":"3033.png","sprite":"item0.png","group":"item","x":48,"y":384,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":2600,"sell":1820},"tags":["ArmorPenetration","Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":50},"effect":{"Effect1Amount":"5","Effect2Amount":"0.35"},"depth":3,"id":3033},"3034":{"name":"Giant Slayer","description":"+10 Attack Damage
UNIQUE Passive - Giant Slayer: Grants up to +10% physical damage against enemy champions with greater maximum Health than you (+1% damage per 100 Health difference, maxing at 1000 Health difference).
(Unique Passives with the same name don't stack.)","colloq":";gs","plaintext":"Overcomes enemies with high Health","from":["1036"],"into":["3036"],"image":{"full":"3034.png","sprite":"item0.png","group":"item","x":96,"y":384,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":1000,"sell":700},"tags":["Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":10},"effect":{"Effect1Amount":"0.1","Effect2Amount":"100","Effect3Amount":"0.01","Effect4Amount":"1000"},"depth":2,"id":3034},"3035":{"name":"Last Whisper","description":"+10 Attack Damage
UNIQUE Passive - Last Whisper: +35% Bonus Armor Penetration","colloq":";lw","plaintext":"Overcomes enemies with high Armor","from":["1036"],"into":["3033","3036"],"image":{"full":"3035.png","sprite":"item0.png","group":"item","x":144,"y":384,"w":48,"h":48},"gold":{"base":950,"purchasable":true,"total":1300,"sell":910},"tags":["ArmorPenetration","Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":10},"effect":{"Effect1Amount":"0.35","Effect2Amount":"0.35"},"depth":2,"id":3035},"3036":{"name":"Lord Dominik's Regards","description":"+50 Attack Damage
UNIQUE Passive - Giant Slayer: Grants up to +20% physical damage against enemy champions with greater maximum Health than you (+2% damage per 100 Health difference, maxing at 1000 Health difference). UNIQUE Passive - Last Whisper: +35% Bonus Armor Penetration","colloq":";lw","plaintext":"Overcomes enemies with high health and armor","from":["3035","3034"],"image":{"full":"3036.png","sprite":"item0.png","group":"item","x":192,"y":384,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":2600,"sell":1820},"tags":["Damage","ArmorPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":50},"effect":{"Effect1Amount":"0.35","Effect2Amount":"0.2","Effect3Amount":"0","Effect4Amount":"100","Effect5Amount":"0.02","Effect6Amount":"1000"},"depth":3,"id":3036},"3040":{"name":"Seraph's Embrace","description":"+80 Ability Power +1000 Mana
UNIQUE Passive - Awe: Grants Ability Power equal to 3% of maximum Mana. Refunds 25% of Mana spent. UNIQUE Active - Mana Shield: Consumes 20% of current Mana to grant a shield for 3 seconds that absorbs damage equal to 150 plus the amount of Mana consumed (120 second cooldown).","colloq":";","plaintext":"","specialRecipe":3003,"inStore":false,"image":{"full":"3040.png","sprite":"item0.png","group":"item","x":240,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":1000,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.03","Effect2Amount":"0.2","Effect3Amount":"3","Effect4Amount":"150","Effect5Amount":"120","Effect6Amount":"0","Effect7Amount":"0.25"},"id":3040},"3041":{"name":"Mejai's Soulstealer","description":"+20 Ability Power +200 Mana
UNIQUE Passive - Dread: Grants +5 Ability Power per Glory. Grants 10% Movement Speed if you have at least 15 Glory. UNIQUE Passive - Do or Die: Grants 4 Glory for a champion kill or 2 Glory for an assist, up to 25 Glory total. Lose 10 stacks of Glory upon dying.","colloq":";","plaintext":"Grants Ability Power for kills and assists","from":["1082"],"image":{"full":"3041.png","sprite":"item0.png","group":"item","x":288,"y":384,"w":48,"h":48},"gold":{"base":1050,"purchasable":true,"total":1400,"sell":980},"tags":["SpellDamage","Mana"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatMPPoolMod":200,"FlatMagicDamageMod":20},"effect":{"Effect1Amount":"5","Effect2Amount":"4","Effect3Amount":"2","Effect4Amount":"25","Effect5Amount":"0.5","Effect6Amount":"0.1","Effect7Amount":"10","Effect8Amount":"15"},"depth":2,"id":3041},"3042":{"name":"Muramana","description":"+25 Attack Damage +1000 Mana
UNIQUE Passive - Awe: Grants bonus Attack Damage equal to 2% of maximum Mana. Refunds 15% of Mana spent. UNIQUE Passive - Shock: Single target spells and attacks (on hit) on Champions consume 3% of current Mana to deal bonus physical damage equal to twice the amount of Mana consumed.
This effect only activates while you have greater than 20% maximum Mana.","colloq":";","plaintext":"","specialRecipe":3004,"inStore":false,"image":{"full":"3042.png","sprite":"item0.png","group":"item","x":336,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"FlatMPPoolMod":1000},"effect":{"Effect1Amount":"0.15"},"id":3042},"3043":{"name":"Muramana","description":"+25 Attack Damage +1000 Mana
UNIQUE Passive - Awe: Grants bonus Attack Damage equal to 2% of maximum Mana. Refunds 15% of Mana spent. UNIQUE Passive - Shock: Single target spells and attacks (on hit) on Champions consume 3% of current Mana to deal bonus physical damage equal to twice the amount of Mana consumed.
This effect only activates while you have greater than 20% maximum Mana.","colloq":"","plaintext":"","specialRecipe":3008,"inStore":false,"image":{"full":"3043.png","sprite":"item0.png","group":"item","x":384,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"FlatMPPoolMod":1000},"effect":{"Effect1Amount":"0.15"},"id":3043},"3044":{"name":"Phage","description":"+200 Health +15 Attack Damage
UNIQUE Passive - Rage: Basic attacks grant 20 Movement Speed for 2 seconds. Kills grant 60 Movement Speed instead. This Movement Speed bonus is halved for ranged champions.","colloq":";","plaintext":"Attacks and kills give a small burst of speed","from":["1028","1036"],"into":["3078","3071"],"image":{"full":"3044.png","sprite":"item0.png","group":"item","x":432,"y":384,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1250,"sell":875},"tags":["Damage","Health","NonbootsMovement","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":15,"FlatHPPoolMod":200},"effect":{"Effect1Amount":"20","Effect2Amount":"2","Effect3Amount":"60"},"depth":2,"id":3044},"3046":{"name":"Phantom Dancer","description":"+45% Attack Speed +30% Critical Strike Chance +5% Movement Speed
UNIQUE Passive - Spectral Waltz: While within 550 units of an enemy champion you can see, +7% Movement Speed and you can move through units. UNIQUE Passive - Lament: The last champion hit deals 12% less damage to you (ends after 10 seconds of not hitting).","colloq":";pd","plaintext":"Move faster near enemies and reduce incoming damage","from":["1042","3086","1042"],"image":{"full":"3046.png","sprite":"item0.png","group":"item","x":0,"y":432,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":2600,"sell":1820},"tags":["AttackSpeed","CriticalStrike","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.3,"PercentMovementSpeedMod":0.05,"PercentAttackSpeedMod":0.45},"effect":{"Effect1Amount":"0.12","Effect2Amount":"10","Effect3Amount":"550","Effect4Amount":"0.07"},"depth":3,"id":3046},"3047":{"name":"Ninja Tabi","description":"+30 Armor
UNIQUE Passive: Blocks 10% of the damage from basic attacks. UNIQUE Passive - Enhanced Movement: +45 Movement Speed","colloq":";","plaintext":"Enhances Movement Speed and reduces incoming basic attack damage","from":["1001","1029"],"image":{"full":"3047.png","sprite":"item0.png","group":"item","x":48,"y":432,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1100,"sell":770},"tags":["Armor","Boots"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":45,"FlatArmorMod":30},"effect":{"Effect1Amount":"0.1"},"depth":2,"id":3047},"3048":{"name":"Seraph's Embrace","description":"+80 Ability Power +1000 Mana
UNIQUE Passive - Awe: Grants Ability Power equal to 3% of maximum Mana. Refunds 25% of Mana spent. UNIQUE Active - Mana Shield: Consumes 20% of current Mana to grant a shield for 3 seconds that absorbs damage equal to 150 plus the amount of Mana consumed (120 second cooldown).","colloq":"","plaintext":"","specialRecipe":3007,"inStore":false,"image":{"full":"3048.png","sprite":"item0.png","group":"item","x":96,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":1000,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.03","Effect2Amount":"0.2","Effect3Amount":"3","Effect4Amount":"150","Effect5Amount":"120","Effect6Amount":"0","Effect7Amount":"0.25"},"id":3048},"3050":{"name":"Zeke's Harbinger","description":"+250 Mana +30 Armor +50 Ability Power +10% Cooldown Reduction
UNIQUE Active - Conduit: Bind to target ally (60 second cooldown). UNIQUE Passive: When within 1000 units of each other, you and your ally generate Charges. Attacking or casting spells generates extra Charges. At 100 Charges, causing damage consumes them, increasing your and your ally's Ability Power by 20% and Critical Strike Chance by 50% for 8 seconds.
(Champions can only be linked by one Zeke's Harbinger at a time.)","colloq":";haroldandkumar","plaintext":"Grants an ally bursts of Critical Strike Chance and Ability Power","from":["1052","3024","1052"],"image":{"full":"3050.png","sprite":"item0.png","group":"item","x":144,"y":432,"w":48,"h":48},"gold":{"base":380,"purchasable":true,"total":2250,"sell":1575},"tags":["Armor","SpellDamage","Mana","Aura","Active","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250,"FlatMagicDamageMod":50,"FlatArmorMod":30},"effect":{"Effect1Amount":"-0.1","Effect2Amount":"1","Effect3Amount":"0.5","Effect4Amount":"0.2","Effect5Amount":"1000","Effect6Amount":"100","Effect7Amount":"8","Effect8Amount":"10","Effect9Amount":"4","Effect10Amount":"2","Effect11Amount":"2","Effect12Amount":"6","Effect13Amount":"60","Effect14Amount":"5"},"depth":3,"id":3050},"3052":{"name":"Jaurim's Fist","description":"+15 Attack Damage +150 Health
UNIQUE Passive: Killing a unit grants 5 maximum Health. This bonus stacks up to 30 times.","colloq":";enforcer","plaintext":"Attack Damage and stacking Health on Unit Kill","from":["1036","1028"],"into":["3104","3022","3053","3748"],"image":{"full":"3052.png","sprite":"item0.png","group":"item","x":192,"y":432,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":1200,"sell":840},"tags":["Health","Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":15,"FlatHPPoolMod":150},"effect":{"Effect1Amount":"30","Effect2Amount":"5","Effect3Amount":"2","Effect4Amount":"150"},"depth":2,"id":3052},"3053":{"name":"Sterak's Gage","description":"+400 Health +30% Base Attack Damage
UNIQUE Passive - Lifeline: Upon taking at least 400 to 1800 damage (based on level) within 5 seconds, gain a shield for 75% of your bonus Health that decays over 3 seconds (60 second cooldown).
Sterak's Fury: When Lifeline triggers, grow in size and strength, gaining +30% additional Base Attack Damage for 8 seconds.","colloq":";juggernaut;primal","plaintext":"Shields against large bursts of damage","from":["3052","1036"],"image":{"full":"3053.png","sprite":"item0.png","group":"item","x":240,"y":432,"w":48,"h":48},"gold":{"base":1050,"purchasable":true,"total":2600,"sell":1820},"tags":["Health","Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":400},"effect":{"Effect1Amount":"400","Effect2Amount":"0.3","Effect3Amount":"5","Effect4Amount":"0.75","Effect5Amount":"0","Effect6Amount":"8","Effect7Amount":"60","Effect8Amount":"3","Effect9Amount":"1800"},"depth":3,"id":3053},"3056":{"name":"Ohmwrecker","description":"+300 Health +50 Armor +150% Base Health Regen +10% Cooldown Reduction
UNIQUE Active: Prevents nearby enemy turrets from attacking for 3 seconds (120 second cooldown). This effect cannot be used against the same turret more than once every 8 seconds.
UNIQUE Passive - Point Runner: Builds up to +20% Movement Speed over 2 seconds while near turrets (including fallen turrets) and Void Gates.","colloq":";","plaintext":"Temporarily disables enemy turrets","from":["2053","3067"],"image":{"full":"3056.png","sprite":"item0.png","group":"item","x":288,"y":432,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2650,"sell":1855},"tags":["Active","Armor","CooldownReduction","Health","HealthRegen","NonbootsMovement"],"maps":{"8":false,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatArmorMod":50},"effect":{"Effect1Amount":"3","Effect2Amount":"120","Effect3Amount":"8","Effect4Amount":"0.2","Effect5Amount":"1"},"depth":4,"id":3056},"3057":{"name":"Sheen","description":"+250 Mana +10% Cooldown Reduction
UNIQUE Passive - Spellblade: After using an ability, the next basic attack deals bonus physical damage equal to 100% base Attack Damage on hit (1.5 second cooldown).","colloq":";","plaintext":"Grants a bonus to next attack after spell cast","from":["1027"],"into":["3078","3100","3025"],"image":{"full":"3057.png","sprite":"item0.png","group":"item","x":336,"y":432,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":1050,"sell":735},"tags":["Mana","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250},"effect":{"Effect1Amount":"1.5","Effect2Amount":"1"},"depth":2,"id":3057},"3060":{"name":"Banner of Command","description":"+60 Armor +30 Magic Resist +400 Mana +10% Cooldown Reduction
UNIQUE Active - Promote: Greatly increases the power of a lane minion and grants it immunity to magic damage (120 second cooldown).","colloq":";flag","plaintext":"Promotes a siege minion to a more powerful unit","from":["3105","3024"],"image":{"full":"3060.png","sprite":"item0.png","group":"item","x":384,"y":432,"w":48,"h":48},"gold":{"base":100,"purchasable":true,"total":2200,"sell":1540},"tags":["SpellBlock","Armor","Mana","Active","CooldownReduction"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":30,"FlatMPPoolMod":400,"FlatArmorMod":60},"effect":{"Effect1Amount":"0.5","Effect2Amount":"15","Effect3Amount":"0.75"},"depth":3,"id":3060},"3065":{"name":"Spirit Visage","description":"+450 Health +55 Magic Resist +100% Base Health Regen +10% Cooldown Reduction
UNIQUE Passive: Increases all healing received by 30%.","colloq":";sv","plaintext":"Increases Health and healing effects","from":["3211","3067"],"image":{"full":"3065.png","sprite":"item0.png","group":"item","x":432,"y":432,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":2800,"sell":1960},"tags":["CooldownReduction","Health","HealthRegen","SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":450,"FlatSpellBlockMod":55},"effect":{"Effect1Amount":"0","Effect2Amount":"0.3","Effect3Amount":"0.5"},"depth":3,"id":3065},"3067":{"name":"Kindlegem","description":"+200 Health
UNIQUE Passive: +10% Cooldown Reduction","colloq":";","plaintext":"Increases Health and Cooldown Reduction","from":["1028"],"into":["3187","3401","3065","3071","3056","3083","3152"],"image":{"full":"3067.png","sprite":"item1.png","group":"item","x":0,"y":0,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":800,"sell":560},"tags":["CooldownReduction","Health"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":200},"effect":{"Effect1Amount":"-0.1"},"depth":2,"id":3067},"3068":{"name":"Sunfire Cape","description":"+425 Health +60 Armor
UNIQUE Passive - Immolate: Deals 11 (+1 per champion level) magic damage per second to nearby enemies. Deals 200% bonus damage to minions and monsters.","colloq":";","plaintext":"Constantly deals damage to nearby enemies","from":["1031","3751"],"image":{"full":"3068.png","sprite":"item1.png","group":"item","x":48,"y":0,"w":48,"h":48},"gold":{"base":1000,"purchasable":true,"total":2900,"sell":2030},"tags":["Armor","Health"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":425,"FlatArmorMod":60},"effect":{"Effect1Amount":"11","Effect2Amount":"1","Effect3Amount":"2"},"depth":3,"id":3068},"3069":{"name":"Talisman of Ascension","description":"+45 Armor +175% Base Health Regen +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Point Runner: Builds up to +20% Movement Speed over 2 seconds while near turrets, fallen turrets and Void Gates. UNIQUE Passive - Favor: Enemy minions killed by your allies sometimes drop coins that give either 30 gold or 8% missing mana (minimum 15). Cannon minions always drop coins. UNIQUE Active: Grants nearby allies +40% Movement Speed for 3 seconds (60 second cooldown).QUEST: Earn 650 gold using this item. REWARD: Favor is upgraded to Emperor's Favor and you receive an Elixir Of Skill.
Limited to 1 Gold Income Item.
''Praise the sun.'' - Historian Shurelya, 22 September, 25 CLE","colloq":";shurelya;reverie","plaintext":"Increases Health / Mana Regeneration and Cooldown Reduction. Activate to speed up nearby allies.","from":["3096","2053"],"image":{"full":"3069.png","sprite":"item1.png","group":"item","x":96,"y":0,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":2400,"sell":960},"tags":["HealthRegen","Armor","ManaRegen","Active","GoldPer","CooldownReduction","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":45},"effect":{"Effect1Amount":"-0.1","Effect2Amount":"2","Effect3Amount":"15","Effect4Amount":"25","Effect5Amount":"0.4","Effect6Amount":"3","Effect7Amount":"60","Effect8Amount":"20","Effect9Amount":"2"},"depth":4,"id":3069},"3070":{"name":"Tear of the Goddess","description":"+250 Mana
UNIQUE Passive - Awe: Refunds 15% of Mana spent. UNIQUE Passive - Mana Charge: Grants 4 maximum Mana on spell cast or Mana expenditure (up to 2 times per 8 seconds).
Caps at +750 Mana.","colloq":";","plaintext":"Increases maximum Mana as Mana is spent","from":["1027","1004"],"into":["3003","3004"],"image":{"full":"3070.png","sprite":"item1.png","group":"item","x":144,"y":0,"w":48,"h":48},"gold":{"base":275,"purchasable":true,"total":750,"sell":525},"tags":["Mana","ManaRegen"],"maps":{"8":false,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250},"effect":{"Effect1Amount":"4","Effect2Amount":"8","Effect3Amount":"1","Effect4Amount":"8","Effect5Amount":"750","Effect6Amount":"2","Effect7Amount":"0.15"},"depth":2,"id":3070},"3071":{"name":"The Black Cleaver","description":"+400 Health +40 Attack Damage +20% Cooldown Reduction
UNIQUE Passive: Dealing physical damage to an enemy champion Cleaves them, reducing their Armor by 4% for 6 seconds (stacks up to 6 times, up to 24%). UNIQUE Passive - Rage: Dealing physical damage grants 20 movement speed for 2 seconds. Assists on Cleaved enemy champions or kills on any unit grant 60 movement speed for 2 seconds instead. This Movement Speed is halved for ranged champions.","colloq":";bc","plaintext":"Dealing physical damage to enemy champions reduces their Armor","from":["3044","3067"],"image":{"full":"3071.png","sprite":"item1.png","group":"item","x":192,"y":0,"w":48,"h":48},"gold":{"base":950,"purchasable":true,"total":3000,"sell":2100},"tags":["ArmorPenetration","CooldownReduction","Damage","Health","NonbootsMovement","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":40,"FlatHPPoolMod":400},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"0.04","Effect3Amount":"6","Effect4Amount":"6","Effect5Amount":"0.24","Effect6Amount":"20","Effect7Amount":"2","Effect8Amount":"60","Effect9Amount":"2"},"depth":3,"id":3071},"3072":{"name":"The Bloodthirster","description":"+80 Attack Damage
UNIQUE Passive: +20% Life Steal UNIQUE Passive: Your basic attacks can now overheal you. Excess life is stored as a shield that can block 50-350 damage, based on champion level.
This shield decays slowly if you haven't dealt or taken damage in the last 25 seconds.","colloq":";bt","plaintext":"Grants Attack Damage, Life Steal and Life Steal now overheals","from":["1038","1036","1053"],"image":{"full":"3072.png","sprite":"item1.png","group":"item","x":240,"y":0,"w":48,"h":48},"gold":{"base":1150,"purchasable":true,"total":3700,"sell":2590},"tags":["Damage","LifeSteal"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":80},"effect":{"Effect1Amount":"50","Effect2Amount":"350","Effect3Amount":"25","Effect4Amount":"0.2"},"depth":3,"id":3072},"3073":{"name":"Tear of the Goddess (Quick Charge)","description":"+250 Mana
UNIQUE Passive - Awe: Refunds 15% of Mana spent. UNIQUE Passive - Mana Charge: Grants 6 maximum Mana on spell cast or Mana expenditure (up to 2 times per 8 seconds).
Caps at +750 Mana.","colloq":";","plaintext":"Increases maximum Mana as Mana is spent","from":["1027","1004"],"into":["3007","3008"],"image":{"full":"3073.png","sprite":"item1.png","group":"item","x":288,"y":0,"w":48,"h":48},"gold":{"base":275,"purchasable":true,"total":750,"sell":525},"tags":["Mana","ManaRegen"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":250},"effect":{"Effect1Amount":"6","Effect2Amount":"8","Effect3Amount":"1","Effect4Amount":"8","Effect5Amount":"750","Effect6Amount":"2","Effect7Amount":"0.15"},"depth":2,"id":3073},"3074":{"name":"Ravenous Hydra","description":"+80 Attack Damage +100% Base Health Regen +12% Life Steal
Passive: 50% of total Life Steal applies to damage dealt by this item. UNIQUE Passive - Cleave: Basic attacks deal 20% to 60% of total Attack Damage as bonus physical damage to enemies near the target on hit (enemies closest to the target take the most damage). UNIQUE Active - Crescent: Deals 60% to 100% of total Attack Damage as physical damage to nearby enemy units (closest enemies take the most damage) (10 second cooldown).","colloq":";","plaintext":"Melee attacks hit nearby enemies, dealing damage and restoring Health","from":["3077","1053","1037"],"image":{"full":"3074.png","sprite":"item1.png","group":"item","x":336,"y":0,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":3500,"sell":2450},"tags":["Active","Damage","HealthRegen","LifeSteal","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":80,"PercentLifeStealMod":0.12},"effect":{"Effect1Amount":"0.2","Effect2Amount":"0.6","Effect3Amount":"0.6","Effect4Amount":"1","Effect5Amount":"10"},"depth":3,"id":3074},"3075":{"name":"Thornmail","description":"+100 Armor
UNIQUE Passive: Upon being hit by a basic attack, reflects magic damage back to the attacker equal to 25% of your bonus Armor plus 15% of the incoming damage.
(Bonus Armor is Armor from items, buffs, runes and masteries.) (Reflect damage is calculated based on damage taken before being reduced by Armor.)","colloq":";","plaintext":"Returns damage taken from basic attacks as magic damage","from":["1029","1031"],"image":{"full":"3075.png","sprite":"item1.png","group":"item","x":384,"y":0,"w":48,"h":48},"gold":{"base":1250,"purchasable":true,"total":2350,"sell":1645},"tags":["Armor"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":100},"effect":{"Effect1Amount":"0.15","Effect2Amount":"0.25"},"depth":3,"id":3075},"3077":{"name":"Tiamat","description":"+20 Attack Damage +50% Base Health Regen
UNIQUE Passive - Cleave: Basic attacks deal 20% to 60% of total Attack Damage as bonus physical damage to enemies near the target on hit (enemies closest to the target take the most damage). UNIQUE Active - Crescent: Deals 60% to 100% of total Attack Damage as physical damage to nearby enemy units (enemies closest to the target take the most damage) (10 second cooldown).","colloq":";","plaintext":"Melee attacks hit nearby enemies","from":["1036","1006","1036"],"into":["3074","3748"],"image":{"full":"3077.png","sprite":"item1.png","group":"item","x":432,"y":0,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1200,"sell":840},"tags":["HealthRegen","Damage","Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":20},"effect":{"Effect1Amount":"0.2","Effect2Amount":"0.6","Effect3Amount":"0.6","Effect4Amount":"1","Effect5Amount":"10"},"depth":2,"id":3077},"3078":{"name":"Trinity Force","description":"+250 Health +250 Mana +25 Attack Damage +40% Attack Speed +20% Cooldown Reduction +5% Movement Speed
UNIQUE Passive - Rage: Basic attacks grant 20 Movement Speed for 2 seconds. Kills grant 60 Movement Speed instead. This Movement Speed bonus is halved for ranged champions. UNIQUE Passive - Spellblade: After using an ability, the next basic attack deals bonus physical damage equal to 200% of base Attack Damage on hit (1.5 second cooldown).","colloq":";triforce;tons of damage","plaintext":"Tons of Damage","from":["3101","3057","3044"],"image":{"full":"3078.png","sprite":"item1.png","group":"item","x":0,"y":48,"w":48,"h":48},"gold":{"base":333,"purchasable":true,"total":3733,"sell":2613},"tags":["Health","Damage","AttackSpeed","Mana","CooldownReduction","OnHit","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"PercentMovementSpeedMod":0.05,"FlatHPPoolMod":250,"FlatMPPoolMod":250,"PercentAttackSpeedMod":0.4},"effect":{"Effect1Amount":"20","Effect2Amount":"60","Effect3Amount":"2","Effect4Amount":"2","Effect5Amount":"1.5"},"depth":3,"id":3078},"3082":{"name":"Warden's Mail","description":"+40 Armor
UNIQUE Passive - Cold Steel: When hit by basic attacks, reduces the attacker's Attack Speed by 15% for 1 seconds.","colloq":";","plaintext":"Slows Attack Speed of enemy champions when receiving basic attacks","from":["1029","1029"],"into":["3110","3143"],"image":{"full":"3082.png","sprite":"item1.png","group":"item","x":48,"y":48,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":1000,"sell":700},"tags":["Armor","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatArmorMod":40},"effect":{"Effect1Amount":"-0.15","Effect2Amount":"1"},"depth":2,"id":3082},"3083":{"name":"Warmog's Armor","description":"+800 Health +200% Base Health Regen
UNIQUE Passive: +10% Cooldown Reduction UNIQUE Passive: Grants Warmog's Heart if you have at least 2750 maximum Health.
Warmog's Heart: Restores 25% of maximum Health every 5 seconds if damage hasn't been taken within 6 seconds (3 seconds for damage from minions and monsters).","colloq":";","plaintext":"Grants massive Health and Health Regen","from":["1011","3067","3801"],"image":{"full":"3083.png","sprite":"item1.png","group":"item","x":96,"y":48,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":2850,"sell":1995},"tags":["Health","HealthRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":800},"effect":{"Effect1Amount":"0.015","Effect2Amount":"5","Effect3Amount":"0.25","Effect4Amount":"2750","Effect5Amount":"6","Effect6Amount":"-0.1","Effect7Amount":"6","Effect8Amount":"3"},"depth":3,"id":3083},"3084":{"name":"Overlord's Bloodmail","description":"+800 Health +100% Base Health Regen
UNIQUE Passive: Upon champion kill or assist, restores 300 Health over 5 seconds.","colloq":";","plaintext":"Restores Health on kill or assist","from":["1011","3801"],"image":{"full":"3084.png","sprite":"item1.png","group":"item","x":144,"y":48,"w":48,"h":48},"gold":{"base":900,"purchasable":true,"total":2550,"sell":1785},"tags":["Health","HealthRegen"],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":800},"effect":{"Effect1Amount":"300","Effect2Amount":"5"},"depth":3,"id":3084},"3085":{"name":"Runaan's Hurricane","description":"+40% Attack Speed +30% Critical Strike Chance +7% Movement Speed
UNIQUE Passive - Wind's Fury: When basic attacking, bolts are fired at up to 2 enemies near the target, each dealing (40% of Attack Damage) physical damage. Bolts can critically strike and apply on hit effects.","colloq":";","plaintext":"Ranged attacks fire two bolts at nearby enemies","from":["1042","3086","1042"],"image":{"full":"3085.png","sprite":"item1.png","group":"item","x":192,"y":48,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":2600,"sell":1820},"tags":["CriticalStrike","AttackSpeed","OnHit","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.3,"PercentMovementSpeedMod":0.07,"PercentAttackSpeedMod":0.4},"effect":{"Effect1Amount":"0","Effect2Amount":"40","Effect3Amount":"2","Effect4Amount":"0","Effect5Amount":"40","Effect6Amount":"1"},"depth":3,"id":3085},"3086":{"name":"Zeal","description":"+15% Attack Speed +20% Critical Strike Chance
UNIQUE Passive: +5% Movement Speed","colloq":";","plaintext":"Slight bonuses to Critical Strike Chance, Movement Speed and Attack Speed","from":["1051","1042"],"into":["3094","3085","3046","3087"],"image":{"full":"3086.png","sprite":"item1.png","group":"item","x":240,"y":48,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1200,"sell":840},"tags":["AttackSpeed","CriticalStrike","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.2,"PercentAttackSpeedMod":0.15},"effect":{"Effect1Amount":"0.05"},"depth":2,"id":3086},"3087":{"name":"Statikk Shiv","description":"+35% Attack Speed +30% Critical Strike Chance +5% Movement Speed
Passive: Moving and attacking will make an attack Energized.
UNIQUE Passive - Shiv Lightning: Your Energized attacks deal 60~160 bonus magic damage (based on level) to up to 5 targets on hit (deals +65% bonus damage to minions and can critically strike).","colloq":";","plaintext":"Movement builds charges that release chain lightning on basic attack","from":["3086","2015"],"image":{"full":"3087.png","sprite":"item1.png","group":"item","x":288,"y":48,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":2600,"sell":1820},"tags":["AttackSpeed","CriticalStrike","NonbootsMovement","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.3,"PercentMovementSpeedMod":0.05,"PercentAttackSpeedMod":0.35},"effect":{"Effect1Amount":"100","Effect2Amount":"80","Effect3Amount":"5","Effect4Amount":"750","Effect5Amount":"60","Effect6Amount":"160","Effect7Amount":"5","Effect8Amount":"0.65"},"depth":3,"id":3087},"3089":{"name":"Rabadon's Deathcap","description":"+120 Ability Power
UNIQUE Passive: Increases Ability Power by 35%.","colloq":";dc;banksys;hat","plaintext":"Massively increases Ability Power","from":["1026","1058","1052"],"image":{"full":"3089.png","sprite":"item1.png","group":"item","x":336,"y":48,"w":48,"h":48},"gold":{"base":1265,"purchasable":true,"total":3800,"sell":2660},"tags":["SpellDamage"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":120},"effect":{"Effect1Amount":"35"},"depth":2,"id":3089},"3090":{"name":"Wooglet's Witchcap","description":"+100 Ability Power +45 Armor
UNIQUE Passive: Increases Ability Power by 25% UNIQUE Active: Champion becomes invulnerable and untargetable for 2.5 seconds, but is unable to move, attack, cast spells, or use items during this time (120 second cooldown).","colloq":";hat","plaintext":"Massively increases Ability Power and can be activated to enter stasis","from":["3191","1058"],"image":{"full":"3090.png","sprite":"item1.png","group":"item","x":384,"y":48,"w":48,"h":48},"gold":{"base":1050,"purchasable":true,"total":3500,"sell":2450},"tags":["Active","Armor","SpellDamage"],"maps":{"8":true,"10":true,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatMagicDamageMod":100,"FlatArmorMod":45},"effect":{"Effect1Amount":"25","Effect2Amount":"2.5","Effect3Amount":"120"},"depth":3,"id":3090},"3091":{"name":"Wit's End","description":"+40% Attack Speed +40 Magic Resist
UNIQUE Passive: Basic attacks deal 40 bonus magic damage on hit. UNIQUE Passive: Basic attacks steal 5 Magic Resist from the target on hit (stacks up to 5 times.)","colloq":";","plaintext":"Deals bonus magic damage on basic attacks","from":["1043","1057","1042"],"image":{"full":"3091.png","sprite":"item1.png","group":"item","x":432,"y":48,"w":48,"h":48},"gold":{"base":480,"purchasable":true,"total":2500,"sell":1750},"tags":["AttackSpeed","OnHit","SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":40,"PercentAttackSpeedMod":0.4},"effect":{"Effect1Amount":"40","Effect2Amount":"5","Effect3Amount":"5"},"depth":3,"id":3091},"3092":{"name":"Frost Queen's Claim","description":"+60 Ability Power +10% Cooldown Reduction +2 Gold per 10 seconds +50% Base Mana Regen
UNIQUE Passive - Tribute: Damaging spells and attacks against champions or buildings deal 15 additional damage and grant 15 Gold. This can occur up to 3 times every 30 seconds. UNIQUE Active: Summon 2 icy ghosts for 6 seconds that seek out nearby enemy champions. Ghosts reveal enemies on contact and slow them by 40% for between 2 and 5 seconds based on how far the ghosts have traveled (90 second cooldown).QUEST: Earn 650 gold using this item. REWARD: Tribute is upgraded into Queen's Tribute.
Limited to 1 Gold Income Item.","colloq":"spooky ghosts;","plaintext":"Sends out seeking wraiths that track hidden enemies and slow them","from":["3098","3108"],"image":{"full":"3092.png","sprite":"item1.png","group":"item","x":0,"y":96,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":2200,"sell":880},"tags":["Active","CooldownReduction","GoldPer","ManaRegen","Slow","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"15","Effect2Amount":"15","Effect3Amount":"12","Effect4Amount":"3","Effect5Amount":"30","Effect6Amount":"2","Effect7Amount":"1","Effect8Amount":"2","Effect9Amount":"2","Effect10Amount":"-0.4","Effect11Amount":"5","Effect12Amount":"6","Effect13Amount":"50","Effect14Amount":"90","Effect15Amount":"0.25","Effect16Amount":"2"},"depth":3,"id":3092},"3094":{"name":"Rapid Firecannon","description":"+30% Attack Speed +30% Critical Strike Chance +5% Movement Speed
Passive: Moving and attacking will make an attack Energized.
UNIQUE Passive - Firecannon: Your Energized attacks gain 35% bonus Range (+150 range maximum) and deal 50~120 bonus magic damage (based on level) on hit.
Attacks become Energized 25% faster. Energized attacks function on structures.","colloq":";canon;rapidfire;rfc","plaintext":"Movement builds charges that release a sieging fire attack on release","from":["3086","2015"],"image":{"full":"3094.png","sprite":"item1.png","group":"item","x":48,"y":96,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":2600,"sell":1820},"tags":["AttackSpeed","CriticalStrike","NonbootsMovement","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatCritChanceMod":0.3,"PercentMovementSpeedMod":0.05,"PercentAttackSpeedMod":0.3},"effect":{"Effect1Amount":"0.35","Effect2Amount":"150","Effect3Amount":"50","Effect4Amount":"120","Effect5Amount":"5","Effect6Amount":"0.25"},"depth":3,"id":3094},"3096":{"name":"Nomad's Medallion","description":"+50% Base Health Regen +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Favor: Enemy minions killed by your allies sometimes drop coins that give either 30 gold or 8% missing mana (minimum 15). Cannon minions always drop coins.QUEST: Earn 650 gold using this item. REWARD: Favor is upgraded to Emperor's Favor and you receive an Elixir Of Skill.
Limited to 1 Gold Income Item.
''The medallion shines with the glory of a thousand voices when exposed to the sun.'' - Historian Shurelya, 22 June, 24 CLE","colloq":";","plaintext":"Grants gold and mana when nearby minions die that you didn't kill","from":["1006","3301"],"into":["2302","3069"],"image":{"full":"3096.png","sprite":"item1.png","group":"item","x":96,"y":96,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":850,"sell":340},"tags":["HealthRegen","ManaRegen","Active","GoldPer","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"2","Effect2Amount":"15","Effect3Amount":"50","Effect4Amount":"10"},"depth":2,"id":3096},"3097":{"name":"Targon's Brace","description":"+175 Health +50% Base Health Regen +2 Gold per 10 seconds
UNIQUE Passive - Spoils of War: Melee basic attacks execute minions below 200 (+10 per level) Health. Killing a minion heals the owner and the nearest allied champion for 40 Health and grants them kill Gold.
These effects require a nearby ally. Recharges every 30 seconds. Max 3 charges.QUEST: Earn 650 gold using this item. REWARD: Shield Battery, a permanent shield that regenerates slowly outside of combat.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Periodically kill enemy minions to heal and grant gold to a nearby ally","from":["3302","1006"],"into":["2303","3401"],"image":{"full":"3097.png","sprite":"item1.png","group":"item","x":144,"y":96,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":850,"sell":340},"tags":["Aura","GoldPer","Health","HealthRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":175},"effect":{"Effect1Amount":"200","Effect2Amount":"40","Effect3Amount":"30","Effect4Amount":"3","Effect5Amount":"2","Effect6Amount":"10"},"depth":2,"id":3097},"3098":{"name":"Frostfang","description":"+20 Ability Power +2 Gold per 10 seconds +50% Base Mana Regen
UNIQUE Passive - Tribute: Damaging spells and attacks against champions or buildings deal 15 additional damage and grant 15 Gold. This can occur up to 3 times every 30 seconds. Killing minions slows Tribute generation.QUEST: Earn 650 gold using this item. REWARD: Tribute is upgraded into Queen's Tribute.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Grants gold when you damage an enemy","from":["3303","1004"],"into":["2301","3092"],"image":{"full":"3098.png","sprite":"item1.png","group":"item","x":192,"y":96,"w":48,"h":48},"gold":{"base":375,"purchasable":true,"total":850,"sell":340},"tags":["Active","GoldPer","ManaRegen","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":20},"effect":{"Effect1Amount":"15","Effect2Amount":"15","Effect3Amount":"12","Effect4Amount":"3","Effect5Amount":"30","Effect6Amount":"2"},"depth":2,"id":3098},"3100":{"name":"Lich Bane","description":"+80 Ability Power +7% Movement Speed +10% Cooldown Reduction +250 Mana
UNIQUE Passive - Spellblade: After using an ability, the next basic attack deals 75% Base Attack Damage (+50% of Ability Power) bonus magic damage on hit (1.5 second cooldown).","colloq":";","plaintext":"Grants a bonus to next attack after spell cast","from":["3057","3113","1026"],"image":{"full":"3100.png","sprite":"item1.png","group":"item","x":240,"y":96,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":3200,"sell":2240},"tags":["SpellDamage","Mana","CooldownReduction","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.07,"FlatMPPoolMod":250,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.75","Effect2Amount":"0.5","Effect3Amount":"1.5"},"depth":3,"id":3100},"3101":{"name":"Stinger","description":"+35% Attack Speed
UNIQUE Passive: +10% Cooldown Reduction","colloq":";","plaintext":"Increased Attack Speed and Cooldown Reduction","from":["1042","1042"],"into":["3115","3137","3078"],"image":{"full":"3101.png","sprite":"item1.png","group":"item","x":288,"y":96,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1100,"sell":770},"tags":["AttackSpeed","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.35},"effect":{"Effect1Amount":"10"},"depth":2,"id":3101},"3102":{"name":"Banshee's Veil","description":"+70 Ability Power +60 Magic Resist +10% Cooldown Reduction
UNIQUE Passive: Grants a spell shield that blocks the next enemy ability. This shield refreshes after no damage is taken from enemy champions for 40 seconds.","colloq":";bv","plaintext":"Periodically blocks enemy abilities","from":["3108","1033","1026"],"image":{"full":"3102.png","sprite":"item1.png","group":"item","x":336,"y":96,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":3000,"sell":2100},"tags":["SpellBlock","SpellDamage","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":60,"FlatMagicDamageMod":70},"effect":{"Effect1Amount":"40","Effect2Amount":"45","Effect3Amount":"10","Effect4Amount":"-0.1","Effect5Amount":"8","Effect6Amount":"2"},"depth":3,"id":3102},"3104":{"name":"Lord Van Damm's Pillager","description":"+300 Health +50 Attack Damage +10% Cooldown Reduction
UNIQUE Passive - Ashes to Ashes: Controlling the nearest Altar sets you aflame, dealing 25 (+1 per champion level) magic damage per second to nearby enemies (Deals 50% bonus damage to minions and monsters). Controlling the furthest Altar causes your basic attacks to burn targets for up to 114 true damage (based on champion level) over 3 seconds.","colloq":"lvd;","plaintext":"Reduces Armor of nearby enemies","from":["3133","3052"],"image":{"full":"3104.png","sprite":"item1.png","group":"item","x":384,"y":96,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":3000,"sell":2100},"tags":["Health","Damage","Aura","CooldownReduction","OnHit","ArmorPenetration"],"maps":{"8":false,"10":true,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":50,"FlatHPPoolMod":300},"effect":{"Effect1Amount":"25","Effect2Amount":"1","Effect3Amount":"0.5"},"depth":3,"id":3104},"3105":{"name":"Aegis of the Legion","description":"+30 Armor +30 Magic Resist","colloq":";","plaintext":"Grants Armor and Magic Resistance","from":["1033","1029"],"into":["3190","3060"],"image":{"full":"3105.png","sprite":"item1.png","group":"item","x":432,"y":96,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1100,"sell":770},"tags":["SpellBlock","Armor"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":30,"FlatArmorMod":30},"depth":2,"id":3105},"3107":{"name":"Redemption","description":"+300 Health +75% Base Health Regen +125% Base Mana Regen +10% Cooldown Reduction
UNIQUE Passive: +10% Heal and Shield Power UNIQUE Active: Target an area within 5500 range. After 2.5 seconds, call down a beam of light to heal allies for 40 (+25 per level of target) Health, burn enemy champions for 10% of their maximum Health as true damage and deal 250 true damage to enemy minions (120 second cooldown).
Can be used while dead.
(Half effect if the target has been affected by another Redemption recently.)","colloq":";","plaintext":"Further improves defenses for nearby allies","from":["3114","3801"],"image":{"full":"3107.png","sprite":"item1.png","group":"item","x":0,"y":144,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2100,"sell":1470},"tags":["Health","HealthRegen","ManaRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300},"effect":{"Effect1Amount":"0.1","Effect2Amount":"40","Effect3Amount":"25","Effect4Amount":"0.1","Effect5Amount":"250","Effect6Amount":"120","Effect7Amount":"550","Effect8Amount":"5500","Effect9Amount":"0.5","Effect10Amount":"8"},"depth":3,"id":3107},"3108":{"name":"Fiendish Codex","description":"+30 Ability Power
UNIQUE Passive: +10% Cooldown Reduction","colloq":";","plaintext":"Increases Ability Power and Cooldown Reduction","from":["1052"],"into":["3174","3092","3115","3165","3102","3157"],"image":{"full":"3108.png","sprite":"item1.png","group":"item","x":48,"y":144,"w":48,"h":48},"gold":{"base":465,"purchasable":true,"total":900,"sell":630},"tags":["CooldownReduction","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":30},"effect":{"Effect1Amount":"-0.1"},"depth":2,"id":3108},"3109":{"name":"Knight's Vow","description":"+400 Health +100% Base Health Regen +40 Armor
UNIQUE Active: Designate an allied champion as your Partner (90 second cooldown). UNIQUE Passive: If your Partner is nearby, gain +20 additional Armor and +15% Movement Speed towards them. UNIQUE Passive: If your Partner is nearby, heal for 12% of the damage your Partner deals to champions and redirect 12% of the damage your Partner takes from champions to you as true damage (healing and damage redirection are reduced by 50% if you are ranged).
(Champions can only be linked by one Knight's Vow at a time.)","colloq":";","plaintext":"Partner with an ally to protect each other","from":["3801","1031"],"image":{"full":"3109.png","sprite":"item1.png","group":"item","x":96,"y":144,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":2300,"sell":1610},"tags":["Health","HealthRegen","Armor","Aura","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":400,"FlatArmorMod":40},"effect":{"Effect1Amount":"20","Effect2Amount":"0.15","Effect3Amount":"0.12","Effect4Amount":"0.12","Effect5Amount":"90","Effect6Amount":"0.5","Effect7Amount":"1000"},"depth":3,"id":3109},"3110":{"name":"Frozen Heart","description":"+90 Armor +20% Cooldown Reduction +400 Mana
UNIQUE Aura: Reduces the Attack Speed of nearby enemies by 15%.","colloq":";fh","plaintext":"Massively increases Armor and slows enemy basic attacks","from":["3082","3024"],"image":{"full":"3110.png","sprite":"item1.png","group":"item","x":144,"y":144,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":2700,"sell":1890},"tags":["Armor","Aura","CooldownReduction","Mana"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":400,"FlatArmorMod":90},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"-0.15"},"depth":3,"id":3110},"3111":{"name":"Mercury's Treads","description":"+25 Magic Resist
UNIQUE Passive - Enhanced Movement: +45 Movement Speed UNIQUE Passive - Tenacity: Reduces the duration of stuns, slows, taunts, fears, silences, blinds, polymorphs, and immobilizes by 30%.","colloq":";","plaintext":"Increases Movement Speed and reduces duration of disabling effects","from":["1001","1033"],"image":{"full":"3111.png","sprite":"item1.png","group":"item","x":192,"y":144,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1100,"sell":770},"tags":["Boots","SpellBlock","Tenacity"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":45,"FlatSpellBlockMod":25},"depth":2,"id":3111},"3112":{"name":"Guardian's Orb","description":"+150 Health +35 Ability Power +10 Mana regen per 5 seconds
Limited to 1 Guardian's Item.","colloq":";","plaintext":"Good starting item for mages","image":{"full":"3112.png","sprite":"item1.png","group":"item","x":240,"y":144,"w":48,"h":48},"gold":{"base":950,"purchasable":true,"total":950,"sell":380},"tags":["Health","SpellDamage","Mana","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":150,"FlatMagicDamageMod":35},"id":3112},"3113":{"name":"Aether Wisp","description":"+30 Ability Power
UNIQUE Passive: +5% Movement Speed","colloq":";","plaintext":"Increases Ability Power and Movement Speed","from":["1052"],"into":["1402","1410","1414","3100","3285","3504","3673"],"image":{"full":"3113.png","sprite":"item1.png","group":"item","x":288,"y":144,"w":48,"h":48},"gold":{"base":415,"purchasable":true,"total":850,"sell":595},"tags":["NonbootsMovement","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":30},"effect":{"Effect1Amount":"0.05"},"depth":2,"id":3113},"3114":{"name":"Forbidden Idol","description":"+50% Base Mana Regen
UNIQUE Passive: +10% Cooldown Reduction UNIQUE Passive: +8% Heal and Shield Power","colloq":";","plaintext":"Increases Mana Regeneration and Cooldown Reduction","from":["1004","1004"],"into":["3107","3222","3504"],"image":{"full":"3114.png","sprite":"item1.png","group":"item","x":336,"y":144,"w":48,"h":48},"gold":{"base":550,"purchasable":true,"total":800,"sell":560},"tags":["CooldownReduction","ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"-0.1","Effect2Amount":"0.08"},"depth":2,"id":3114},"3115":{"name":"Nashor's Tooth","description":"+50% Attack Speed +80 Ability Power
UNIQUE Passive: +20% Cooldown Reduction UNIQUE Passive: Basic attacks deal 15 (+15% of Ability Power) bonus magic damage on hit. ","colloq":";","plaintext":"Increases Attack Speed, Ability Power, and Cooldown Reduction","from":["3101","3108"],"image":{"full":"3115.png","sprite":"item1.png","group":"item","x":384,"y":144,"w":48,"h":48},"gold":{"base":1000,"purchasable":true,"total":3000,"sell":2100},"tags":["AttackSpeed","CooldownReduction","OnHit","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":80,"PercentAttackSpeedMod":0.5},"depth":3,"id":3115},"3116":{"name":"Rylai's Crystal Scepter","description":"+300 Health +75 Ability Power
UNIQUE Passive: Damaging spells and abilities reduce enemy movement speed by 20% for 1 second.","colloq":";","plaintext":"Abilities slow enemies","from":["1026","1052","1028"],"image":{"full":"3116.png","sprite":"item1.png","group":"item","x":432,"y":144,"w":48,"h":48},"gold":{"base":915,"purchasable":true,"total":2600,"sell":1820},"tags":["Health","SpellDamage","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMagicDamageMod":75},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"-0.2","Effect3Amount":"-0.2","Effect4Amount":"1","Effect5Amount":"1","Effect6Amount":"1"},"depth":2,"id":3116},"3117":{"name":"Boots of Mobility","description":"UNIQUE Passive - Enhanced Movement: +25 Movement Speed. Increases to +115 Movement Speed when out of combat for 5 seconds.","colloq":";","plaintext":"Greatly enhances Movement Speed when out of combat","from":["1001"],"image":{"full":"3117.png","sprite":"item1.png","group":"item","x":0,"y":192,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":900,"sell":630},"tags":["Boots"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":115},"effect":{"Effect1Amount":"0","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"0","Effect5Amount":"0","Effect6Amount":"0","Effect7Amount":"0","Effect8Amount":"25"},"depth":2,"id":3117},"3122":{"name":"Wicked Hatchet","description":"+20 Attack Damage +10% Critical Strike Chance
UNIQUE Passive: Critical Strikes cause your target to bleed for an additional 60% of your bonus Attack Damage as magic damage over 3 seconds.","colloq":";ie","plaintext":"Critical Strikes cause your target to bleed","from":["1051","1036"],"into":["3104","3185"],"image":{"full":"3122.png","sprite":"item1.png","group":"item","x":48,"y":192,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":1200,"sell":840},"tags":["CriticalStrike","Damage","OnHit"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":20,"FlatCritChanceMod":0.1},"effect":{"Effect1Amount":"0.6","Effect2Amount":"3"},"depth":2,"id":3122},"3123":{"name":"Executioner's Calling","description":"+15 Attack Damage
UNIQUE Passive - Executioner: Physical damage inflicts Grievous Wounds on enemy champions for 3 seconds.","colloq":";grievous","plaintext":"Overcomes enemies with high health gain","from":["1036"],"into":["3033"],"image":{"full":"3123.png","sprite":"item1.png","group":"item","x":96,"y":192,"w":48,"h":48},"gold":{"base":450,"purchasable":true,"total":800,"sell":560},"tags":["Damage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":15},"effect":{"Effect1Amount":"3"},"depth":2,"id":3123},"3124":{"name":"Guinsoo's Rageblade","description":"+35 Attack Damage +50 Ability Power +25% Attack Speed
Passive: Basic attacks deal an additional 15 magic damage on hit. UNIQUE Passive: Basic attacks grant +8% Attack Speed, +3 Attack Damage, and +4 Ability Power for 5 seconds (stacks up to 6 times). While you have 6 stacks, gain Guinsoo's Rage.
Guinsoo's Rage: Every other basic attack will trigger on hit effects an additional time.","colloq":";","plaintext":"Increases Ability Power and Attack Damage","from":["1026","1043","1037"],"image":{"full":"3124.png","sprite":"item1.png","group":"item","x":144,"y":192,"w":48,"h":48},"gold":{"base":875,"purchasable":true,"total":3600,"sell":2520},"tags":["Damage","AttackSpeed","SpellDamage","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":35,"FlatMagicDamageMod":50,"PercentAttackSpeedMod":0.25},"effect":{"Effect1Amount":"0.08","Effect2Amount":"4","Effect3Amount":"3","Effect4Amount":"5","Effect5Amount":"6","Effect6Amount":"0","Effect7Amount":"0","Effect8Amount":"15","Effect9Amount":"1"},"depth":3,"id":3124},"3133":{"name":"Caulfield's Warhammer","description":"+25 Attack Damage
UNIQUE Passive: +10 Lethality UNIQUE Passive: +20 Movement Speed out of Combat.","colloq":";lethality","plaintext":"Increases Attack Damage and Lethality","stacks":0,"from":["1036","1036"],"into":["3142","3814","3147"],"image":{"full":"3134.png","sprite":"item1.png","group":"item","x":240,"y":192,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":1100,"sell":770},"tags":["Damage","NonbootsMovement","ArmorPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25},"effect":{"Effect1Amount":"0","Effect2Amount":"10","Effect3Amount":"20"},"depth":2,"id":3134},"3135":{"name":"Void Staff","description":"+80 Ability Power
UNIQUE Passive: +35% Magic Penetration.","colloq":";","plaintext":"Increases magic damage","from":["1026","1052"],"image":{"full":"3135.png","sprite":"item1.png","group":"item","x":288,"y":192,"w":48,"h":48},"gold":{"base":1365,"purchasable":true,"total":2650,"sell":1855},"tags":["MagicPenetration","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.35"},"depth":2,"id":3135},"3136":{"name":"Haunting Guise","description":"+25 Ability Power +200 Health
UNIQUE Active - Quicksilver: Removes all debuffs, and if the champion is melee, also grants +50% bonus Movement Speed for 1 second (90 second cooldown).","colloq":";","plaintext":"Activate to remove all debuffs and grant massive Movement Speed","from":["3140","3101"],"image":{"full":"3137.png","sprite":"item1.png","group":"item","x":384,"y":192,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":2700,"sell":1890},"tags":["Active","AttackSpeed","CooldownReduction","NonbootsMovement","SpellBlock"],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatSpellBlockMod":45,"PercentAttackSpeedMod":0.5},"effect":{"Effect1Amount":"0.5","Effect2Amount":"1","Effect3Amount":"90"},"depth":3,"id":3137},"3139":{"name":"Mercurial Scimitar","description":"+65 Attack Damage +35 Magic Resist +10% Life Steal
UNIQUE Active - Quicksilver: Removes all crowd control debuffs and also grants +50% bonus Movement Speed for 1 second (90 second cooldown).","colloq":";","plaintext":"Activate to remove all crowd control debuffs and grant massive Movement Speed","from":["3140","1037","1053"],"image":{"full":"3139.png","sprite":"item1.png","group":"item","x":432,"y":192,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":3600,"sell":2520},"tags":["SpellBlock","Damage","LifeSteal","Active","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":65,"FlatSpellBlockMod":35,"PercentLifeStealMod":0.1},"effect":{"Effect1Amount":"0.5","Effect2Amount":"1","Effect3Amount":"90"},"depth":3,"id":3139},"3140":{"name":"Quicksilver Sash","description":"+30 Magic Resist
UNIQUE Active - Quicksilver: Removes all crowd control debuffs (90 second cooldown).","colloq":";qss","plaintext":"Activate to remove all crowd control debuffs","from":["1033"],"into":["3139","3137"],"image":{"full":"3140.png","sprite":"item1.png","group":"item","x":0,"y":240,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":1300,"sell":910},"tags":["Active","SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":30},"effect":{"Effect1Amount":"90"},"depth":2,"id":3140},"3142":{"name":"Youmuu's Ghostblade","description":"+60 Attack Damage +10% Cooldown Reduction
UNIQUE Passive: +15 Lethality UNIQUE Passive: +20 Movement Speed out of Combat UNIQUE Active: Grants +20% Movement Speed for 6 seconds (45 second cooldown).","colloq":";lethality","plaintext":"Activate to greatly increase Movement Speed","from":["3133","3134"],"image":{"full":"3142.png","sprite":"item1.png","group":"item","x":48,"y":240,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":2900,"sell":2030},"tags":["Damage","Active","CooldownReduction","NonbootsMovement","ArmorPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":60},"effect":{"Effect1Amount":"45","Effect2Amount":"15","Effect3Amount":"0.2","Effect4Amount":"0","Effect5Amount":"6","Effect6Amount":"20"},"depth":3,"id":3142},"3143":{"name":"Randuin's Omen","description":"+350 Health +60 Armor
UNIQUE Passive: -20% damage taken from basic attack critical strikes. UNIQUE Passive - Cold Steel: When hit by basic attacks, reduces the attacker's Attack Speed by 15% for 1 second. UNIQUE Active: Slows the Movement Speed of nearby enemy units by 55% for 2 seconds (60 second cooldown).","colloq":";","plaintext":"Greatly increases defenses, activate to slow nearby enemies","from":["1028","3082","1028"],"image":{"full":"3143.png","sprite":"item1.png","group":"item","x":96,"y":240,"w":48,"h":48},"gold":{"base":1100,"purchasable":true,"total":2900,"sell":2030},"tags":["Active","Armor","Health","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":350,"FlatArmorMod":60},"effect":{"Effect1Amount":"2","Effect2Amount":"0.2","Effect3Amount":"-0.55","Effect4Amount":"1","Effect5Amount":"-0.15","Effect6Amount":"0.15","Effect7Amount":"0.3"},"depth":3,"id":3143},"3144":{"name":"Bilgewater Cutlass","description":"+25 Attack Damage +10% Life Steal
UNIQUE Active: Deals 100 magic damage and slows the target champion's Movement Speed by 25% for 2 seconds (90 second cooldown).","colloq":";","plaintext":"Activate to deal magic damage and slow target champion","from":["1053","1036"],"into":["3146","3153"],"image":{"full":"3144.png","sprite":"item1.png","group":"item","x":144,"y":240,"w":48,"h":48},"gold":{"base":250,"purchasable":true,"total":1500,"sell":1050},"tags":["Active","Damage","LifeSteal","Slow"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":25,"PercentLifeStealMod":0.1},"effect":{"Effect1Amount":"-0.25","Effect2Amount":"2","Effect3Amount":"90","Effect4Amount":"100"},"depth":3,"id":3144},"3145":{"name":"Hextech Revolver","description":"+40 Ability Power
UNIQUE Passive - Magic Bolt: Damaging an enemy champion with a basic attack shocks them for 50 - 125 bonus magic damage (40 second cooldown, shared with other Hextech items).
Magic Bolt's cooldown is reduced by Active Item cooldown reduction.
(Damage scales based on level. Hextech effects can trigger other item spell effects.)","colloq":";","plaintext":"Increases Ability Power. Deal bonus magic damage on attack periodically.","from":["1052","1052"],"into":["3146","3152","3030"],"image":{"full":"3145.png","sprite":"item1.png","group":"item","x":192,"y":240,"w":48,"h":48},"gold":{"base":180,"purchasable":true,"total":1050,"sell":735},"tags":["SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":40},"effect":{"Effect1Amount":"0","Effect2Amount":"50","Effect3Amount":"0","Effect4Amount":"125","Effect5Amount":"40"},"depth":2,"id":3145},"3146":{"name":"Hextech Gunblade","description":"+40 Attack Damage +80 Ability Power
UNIQUE Passive: Heal for 15% of damage dealt. This is 33% as effective for Area of Effect damage. UNIQUE Active - Lightning Bolt: Deals 175 - 250 (+30% of Ability Power) magic damage and slows the target champion's Movement Speed by 40% for 2 seconds (40 second cooldown, shared with other Hextech items).","colloq":";","plaintext":"Increases Attack Damage and Ability Power, activate to slow a target","from":["3144","3145"],"image":{"full":"3146.png","sprite":"item1.png","group":"item","x":240,"y":240,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":3400,"sell":2380},"tags":["Active","Damage","LifeSteal","Slow","SpellDamage","SpellVamp"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":40,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"0.15","Effect2Amount":"40","Effect3Amount":"175","Effect4Amount":"250"},"depth":4,"id":3146},"3147":{"name":"Duskblade of Draktharr","description":"+65 Attack Damage
UNIQUE Passive: +15 Lethality UNIQUE Passive: +20 Movement Speed out of Combat. UNIQUE Passive - Nightstalker: After being unseen for at least 1 second, your next Basic Attack against an enemy champion will deal 75 (+200% Lethality) true damage on-hit (lasts for 4 seconds after being seen by an enemy champion). UNIQUE Passive - Blackout: When spotted by an enemy ward, causes a blackout for 8 seconds, revealing invisible traps and revealing / disabling wards (90 second cooldown).","colloq":";lethality","plaintext":"Deals additional true damage on-hit and provides true sight periodically","from":["3134","1038"],"image":{"full":"3147.png","sprite":"item1.png","group":"item","x":288,"y":240,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":3250,"sell":2275},"tags":["Damage","OnHit","NonbootsMovement","ArmorPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":65},"effect":{"Effect1Amount":"15","Effect2Amount":"20","Effect3Amount":"0","Effect4Amount":"90","Effect5Amount":"75","Effect6Amount":"2"},"depth":3,"id":3147},"3151":{"name":"Liandry's Torment","description":"+80 Ability Power +300 Health
UNIQUE Passive - Eyes of Pain: +15 Magic Penetration UNIQUE Passive: Spells burn enemies for 3 seconds, dealing bonus magic damage equal to 2% of their current Health per second. Burn damage is doubled against movement-impaired units.","colloq":";mask","plaintext":"Spell damage burns enemies for a portion of their Health","stacks":0,"from":["3136","1026"],"image":{"full":"3151.png","sprite":"item1.png","group":"item","x":336,"y":240,"w":48,"h":48},"gold":{"base":750,"purchasable":true,"total":3100,"sell":2170},"tags":["Health","MagicPenetration","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMagicDamageMod":80},"effect":{"Effect1Amount":"15","Effect2Amount":"0.02","Effect3Amount":"3","Effect4Amount":"100","Effect5Amount":"2"},"depth":3,"id":3151},"3152":{"name":"Hextech Protobelt-01","description":"+300 Health +60 Ability Power +10% Cooldown Reduction
UNIQUE Active - Fire Bolt: Dash forward and unleash a nova of fire bolts that deal 75 - 150 (+25% of your Ability Power) as magic damage (40 second cooldown, shared with other Hextech items).
Champions and Monsters hit by multiple fire bolts take 10% damage per additional bolt.
(This dash cannot pass through terrain.)","colloq":"rocket belt;","plaintext":"Activate to dash forward and unleash a fiery explosion","from":["3145","3067"],"image":{"full":"3152.png","sprite":"item1.png","group":"item","x":384,"y":240,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2500,"sell":1750},"tags":["Health","SpellDamage","Active","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"0.12","Effect2Amount":"0.04","Effect3Amount":"40","Effect4Amount":"75","Effect5Amount":"150","Effect6Amount":"0.1","Effect7Amount":"0.25","Effect8Amount":"40","Effect9Amount":"0.5"},"depth":3,"id":3152},"3153":{"name":"Blade of the Ruined King","description":"+40 Attack Damage +25% Attack Speed +12% Life Steal
UNIQUE Passive: Basic attacks deal 8% of the target's current Health as bonus physical damage on hit. UNIQUE Active: Deals 100 magic damage to target champion and steals 25% of their Movement Speed for 3 seconds (90 second cooldown).
Minimum bonus physical damage dealt is 15. Maximum bonus physical damage dealt to monsters and minions is 60. User's Life Steal is applied to bonus physical damage dealt.","colloq":";brk;bork;bork;bork;botrk","plaintext":"Deals damage based on target's Health, can steal Movement Speed","from":["3144","1043"],"image":{"full":"3153.png","sprite":"item1.png","group":"item","x":432,"y":240,"w":48,"h":48},"gold":{"base":900,"purchasable":true,"total":3400,"sell":2380},"tags":["Active","AttackSpeed","Damage","LifeSteal","NonbootsMovement","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":40,"PercentAttackSpeedMod":0.25,"PercentLifeStealMod":0.12},"effect":{"Effect1Amount":"0.08"},"depth":4,"id":3153},"3155":{"name":"Hexdrinker","description":"+20 Attack Damage +35 Magic Resist
UNIQUE Passive - Lifeline: Upon taking magic damage that would reduce Health below 30%, grants a shield that absorbs 110 to 280 (based on level) magic damage for 5 seconds (90 second cooldown).","colloq":";","plaintext":"Increases Attack Damage and Magic Resist","stacks":0,"from":["1036","1033"],"into":["3156"],"image":{"full":"3155.png","sprite":"item1.png","group":"item","x":0,"y":288,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":1300,"sell":910},"tags":["Damage","SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":20,"FlatSpellBlockMod":35},"effect":{"Effect1Amount":"0.3","Effect2Amount":"110","Effect3Amount":"5","Effect4Amount":"90","Effect5Amount":"280","Effect6Amount":"100","Effect7Amount":"10"},"depth":2,"id":3155},"3156":{"name":"Maw of Malmortius","description":"+50 Attack Damage +45 Magic Resist +10% Cooldown Reduction
UNIQUE Passive - Lifeline: Upon taking magic damage that would reduce Health below 30%, grants a shield that absorbs magic damage equal to 300 + 1 per bonus Magic Resistance for 5 seconds (90 second cooldown). Lifegrip: When Lifeline triggers, gain +20 Attack Damage, +10% Spell Vamp and +10% Life Steal until out of combat.","colloq":";","plaintext":"Grants bonus Attack Damage when Health is low","stacks":0,"from":["3155","3133"],"image":{"full":"3156.png","sprite":"item1.png","group":"item","x":48,"y":288,"w":48,"h":48},"gold":{"base":850,"purchasable":true,"total":3250,"sell":2275},"tags":["SpellBlock","Damage","LifeSteal","CooldownReduction","SpellVamp"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":50,"FlatSpellBlockMod":45},"effect":{"Effect1Amount":"1","Effect2Amount":"35","Effect3Amount":"0.3","Effect4Amount":"300","Effect5Amount":"5","Effect6Amount":"90","Effect7Amount":"20","Effect8Amount":"0","Effect9Amount":"0.1","Effect10Amount":"0.1"},"depth":3,"id":3156},"3157":{"name":"Zhonya's Hourglass","description":"+70 Ability Power +45 Armor +10% Cooldown Reduction
UNIQUE Active - Stasis: Champion becomes invulnerable and untargetable for 2.5 seconds, but is unable to move, attack, cast spells, or use items during this time (120 second cooldown).","colloq":";zhg;zonyas","plaintext":"Activate to become invincible but unable to take actions","from":["3191","3108"],"image":{"full":"3157.png","sprite":"item1.png","group":"item","x":96,"y":288,"w":48,"h":48},"gold":{"base":800,"purchasable":true,"total":2900,"sell":2030},"tags":["Armor","SpellDamage","Active","CooldownReduction"],"maps":{"8":true,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":70,"FlatArmorMod":45},"effect":{"Effect1Amount":"0","Effect2Amount":"2.5","Effect3Amount":"120"},"depth":3,"id":3157},"3158":{"name":"Ionian Boots of Lucidity","description":"UNIQUE Passive: +10% Cooldown Reduction UNIQUE Passive - Enhanced Movement: +45 Movement Speed UNIQUE Passive: Reduces Summoner Spell cooldowns by 10%
''This item is dedicated in honor of Ionia's victory over Noxus in the Rematch for the Southern Provinces on 10 December, 20 CLE.''","colloq":";","plaintext":"Increases Movement Speed and Cooldown Reduction","from":["1001"],"image":{"full":"3158.png","sprite":"item1.png","group":"item","x":144,"y":288,"w":48,"h":48},"gold":{"base":600,"purchasable":true,"total":900,"sell":630},"tags":["Boots","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":45},"effect":{"Effect1Amount":"-0.1","Effect2Amount":"0.1"},"depth":2,"id":3158},"3165":{"name":"Morellonomicon","description":"+100 Ability Power +400 Mana
UNIQUE Passive: +20% Cooldown Reduction UNIQUE Passive: Dealing magic damage to champions below 35% Health inflicts Grievous Wounds for 8 seconds. UNIQUE Passive: Kills and Assists restore 20% of your maximum Mana.","colloq":";nmst;grievous","plaintext":"Greatly increases Ability Power and Cooldown Reduction","from":["3108","1052","3802"],"image":{"full":"3165.png","sprite":"item1.png","group":"item","x":192,"y":288,"w":48,"h":48},"gold":{"base":665,"purchasable":true,"total":2900,"sell":2030},"tags":["SpellDamage","Mana","ManaRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":400,"FlatMagicDamageMod":100},"effect":{"Effect1Amount":"20","Effect2Amount":"35","Effect3Amount":"8","Effect4Amount":"0.2"},"depth":3,"id":3165},"3170":{"name":"Moonflair Spellblade","description":"+50 Ability Power +50 Armor +50 Magic Resist
UNIQUE Passive - Tenacity: Reduces the duration of stuns, slows, taunts, fears, silences, blinds, polymorphs, and immobilizes by 35%.","colloq":";","plaintext":"Improves defense and reduces duration of disabling effects","from":["3191","1057"],"image":{"full":"3170.png","sprite":"item1.png","group":"item","x":240,"y":288,"w":48,"h":48},"gold":{"base":580,"purchasable":true,"total":2500,"sell":1750},"tags":["Armor","SpellBlock","SpellDamage","Tenacity"],"maps":{"8":true,"10":true,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatSpellBlockMod":50,"FlatMagicDamageMod":50,"FlatArmorMod":50},"depth":3,"id":3170},"3174":{"name":"Athene's Unholy Grail","description":"+40 Ability Power +30 Magic Resist +20% Cooldown Reduction +75% Base Mana Regen
UNIQUE Passive: Gain 20% of the premitigation damage dealt to champions as Blood Charges, up to 100 - 250 max. Healing or shielding another ally consumes charges to heal them, up to the original effect amount. UNIQUE Passive - Harmony: Grants bonus % Base Health Regen equal to your bonus % Base Mana Regen.
(Maximum amount of Blood Charges stored is based on level. Healing amplification is applied to the total heal value.)","colloq":";","plaintext":"Deal damage to empower your heals and shields","from":["3108","3028"],"image":{"full":"3174.png","sprite":"item1.png","group":"item","x":288,"y":288,"w":48,"h":48},"gold":{"base":400,"purchasable":true,"total":2100,"sell":1470},"tags":["SpellBlock","HealthRegen","SpellDamage","ManaRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":30,"FlatMagicDamageMod":40},"effect":{"Effect1Amount":"20","Effect2Amount":"30","Effect3Amount":"2","Effect4Amount":"5","Effect5Amount":"100","Effect6Amount":"0.2","Effect7Amount":"100","Effect8Amount":"250","Effect9Amount":"1","Effect10Amount":"1","Effect11Amount":"0.25","Effect12Amount":"600","Effect13Amount":"8","Effect14Amount":"90"},"depth":3,"id":3174},"3175":{"name":"Head of Kha'Zix","description":"UNIQUE Active - Bonetooth Totem: Places a Stealth Ward that lasts 180 seconds (90 Second cooldown). Limit 3 Stealth Wards on the map per player.
UNIQUE Passive - Mementos of the Hunt: Rengar collects trophies when killing Champions and gains bonus effects based on how many trophies he has. Kills and assists grant 1 trophy.
3 Trophies: Rengar gains 25 Movement Speed whilst out of combat or in brush. 6 Trophies: Increases the range of Rengar's Leap by 125. 12 Trophies: Thrill of the Hunt's duration is increased by 5 seconds. 20 Trophies: Rengar gains the movement speed bonus of Thrill of the Hunt while he is stealthed.","colloq":"","plaintext":"","specialRecipe":3169,"inStore":false,"requiredChampion":"Rengar","hideFromAll":true,"image":{"full":"3175.png","sprite":"item1.png","group":"item","x":336,"y":288,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"125","Effect3Amount":"5","Effect4Amount":"180","Effect5Amount":"90"},"id":3175},"3181":{"name":"Sanguine Blade","description":"+45 Attack Damage +10% Life Steal
UNIQUE Passive: Basic attacks grant +6 Attack Damage and +1% Life Steal for 8 seconds on hit (effect stacks up to 5 times).","colloq":";","plaintext":"Greatly increases Attack Damage and Life Steal","from":["1037","1053"],"image":{"full":"3181.png","sprite":"item1.png","group":"item","x":384,"y":288,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":2400,"sell":1680},"tags":["Damage","LifeSteal"],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":45,"PercentLifeStealMod":0.1},"effect":{"Effect1Amount":"6","Effect2Amount":"0.01","Effect3Amount":"8","Effect4Amount":"5"},"depth":3,"id":3181},"3184":{"name":"Guardian's Hammer","description":"+150 Health +20 Attack Damage +10% Life Steal
Limited to 1 Guardian's Item.","colloq":";dblade","plaintext":"Good starting item for attackers","image":{"full":"3184.png","sprite":"item1.png","group":"item","x":432,"y":288,"w":48,"h":48},"gold":{"base":950,"purchasable":true,"total":950,"sell":380},"tags":["Health","Damage","LifeSteal","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":20,"FlatHPPoolMod":150,"PercentLifeStealMod":0.1},"id":3184},"3185":{"name":"The Lightbringer","description":"+30 Attack Damage +30% Critical Strike Chance
UNIQUE Passive: Critical Strikes cause enemies to bleed for an additional 90% of bonus Attack Damage as magic damage over 3 seconds and reveal them for the duration. UNIQUE Passive - Trap Detection: Nearby stealthed enemy traps are revealed. UNIQUE Active - Hunter's Sight: A stealth-detecting mist grants vision in the target area for 5 seconds, revealing enemy champions that enter for 3 seconds (60 second cooldown).","colloq":";lb","plaintext":"Critical Strikes cause your target to bleed and be revealed","from":["3122","1018"],"image":{"full":"3185.png","sprite":"item1.png","group":"item","x":0,"y":336,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":2350,"sell":1645},"tags":["Active","CriticalStrike","Damage","OnHit","Stealth","Vision"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":30,"FlatCritChanceMod":0.3},"effect":{"Effect1Amount":"0.9","Effect2Amount":"3","Effect3Amount":"0","Effect4Amount":"5","Effect5Amount":"3","Effect6Amount":"60"},"depth":3,"id":3185},"3187":{"name":"Arcane Sweeper","description":"+225 Health +250 Mana +25 Armor +20% Cooldown Reduction
UNIQUE Passive - Trap Detection: Grants True Sight of nearby enemy traps. UNIQUE Active - Hunter's Sight: An arcane mist grants vision in the target area for 5 seconds, revealing enemy champions in the area for 3 seconds (60 second cooldown).","colloq":";","plaintext":"Activate to reveal a nearby area of the map","from":["3024","3067"],"image":{"full":"3187.png","sprite":"item1.png","group":"item","x":48,"y":336,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":2150,"sell":1505},"tags":["Active","Armor","CooldownReduction","Health","Mana","Stealth","Vision"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatHPPoolMod":225,"FlatMPPoolMod":250,"FlatArmorMod":25},"effect":{"Effect1Amount":"-0.2","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"5","Effect5Amount":"3","Effect6Amount":"60"},"depth":3,"id":3187},"3190":{"name":"Locket of the Iron Solari","description":"+30 Armor +60 Magic Resist
UNIQUE Active: Grants a decaying shield to nearby allies for 2.5 seconds that absorbs up to 35 (+35 per level) damage (90 second cooldown).
(Half effect if the target has been affected by another Locket of the Iron Solari recently.)","colloq":";","plaintext":"Activate to shield nearby allies from damage","from":["3105","1033"],"image":{"full":"3190.png","sprite":"item1.png","group":"item","x":96,"y":336,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2200,"sell":1540},"tags":["SpellBlock","Armor","Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":60,"FlatArmorMod":30},"effect":{"Effect1Amount":"0","Effect2Amount":"0.75","Effect3Amount":"2.5","Effect4Amount":"35","Effect5Amount":"35","Effect6Amount":"90"},"depth":3,"id":3190},"3191":{"name":"Seeker's Armguard","description":"+30 Armor +20 Ability Power
UNIQUE Passive: Killing a unit grants 0.5 bonus Armor and Ability Power. This bonus stacks up to 30 times.","colloq":";","plaintext":"Increases Armor and Ability Power","from":["1029","1052","1029"],"into":["3090","3170","3157"],"image":{"full":"3191.png","sprite":"item1.png","group":"item","x":144,"y":336,"w":48,"h":48},"gold":{"base":165,"purchasable":true,"total":1200,"sell":840},"tags":["Armor","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":20,"FlatArmorMod":30},"effect":{"Effect1Amount":"0.5","Effect2Amount":"30"},"depth":2,"id":3191},"3193":{"name":"Gargoyle Stoneplate","description":"+40 Armor +40 Magic Resist
UNIQUE Passive - Stone Skin: If 3+ enemy champions are nearby, grants 40 bonus Armor and Magic Resist. UNIQUE Active - Metallicize: Increases Health by 40% and increases champion size, but reduces damage dealt by 60% for 4 seconds (90 second cooldown). If Stone Skin is active, the Health increase becomes 100% instead.","colloq":";","plaintext":"Greatly increases defense near multiple enemies.","from":["1031","1057"],"image":{"full":"3193.png","sprite":"item1.png","group":"item","x":192,"y":336,"w":48,"h":48},"gold":{"base":980,"purchasable":true,"total":2500,"sell":1750},"tags":["Health","SpellBlock","Armor"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":40,"FlatArmorMod":40},"effect":{"Effect1Amount":"40","Effect2Amount":"850","Effect3Amount":"3","Effect4Amount":"4","Effect5Amount":"0.6","Effect6Amount":"0.4","Effect7Amount":"0.07","Effect8Amount":"1","Effect9Amount":"0.25","Effect10Amount":"90","Effect11Amount":"1"},"depth":3,"id":3193},"3194":{"name":"Adaptive Helm","description":"+300 Health +55 Magic Resist +100% Base Health Regeneration +10% Cooldown Reduction
UNIQUE Passive: Taking magic damage from a spell or effect reduces all subsequent magic damage from that same spell or effect by 15% for 4 seconds.","colloq":";","plaintext":"Reduces damage from repeated spells and effects.","from":["1033","3211","1006"],"image":{"full":"3194.png","sprite":"item1.png","group":"item","x":240,"y":336,"w":48,"h":48},"gold":{"base":1000,"purchasable":true,"total":2800,"sell":1960},"tags":["Health","SpellBlock","HealthRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":300,"FlatSpellBlockMod":55},"effect":{"Effect1Amount":"15","Effect2Amount":"4","Effect3Amount":"25"},"depth":3,"id":3194},"3196":{"name":"The Hex Core mk-1","description":"+3 Ability Power per level +15 Mana per level
UNIQUE Passive - Progress: Viktor can upgrade one of his basic spells.","colloq":";viktor","plaintext":"Allows Viktor to improve an ability of his choice","from":["3200"],"requiredChampion":"Viktor","into":["3197"],"image":{"full":"3196.png","sprite":"item1.png","group":"item","x":288,"y":336,"w":48,"h":48},"gold":{"base":1250,"purchasable":true,"total":1250,"sell":875},"tags":["Mana","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"3","Effect2Amount":"15"},"depth":2,"id":3196},"3197":{"name":"The Hex Core mk-2","description":"+6 Ability Power per level +20 Mana per level
UNIQUE Passive - Progress: Viktor can upgrade one of his basic spells.","colloq":";viktor","plaintext":"Allows Viktor to improve an ability of his choice","from":["3196"],"requiredChampion":"Viktor","into":["3198"],"image":{"full":"3197.png","sprite":"item1.png","group":"item","x":336,"y":336,"w":48,"h":48},"gold":{"base":1000,"purchasable":true,"total":2250,"sell":1575},"tags":["Mana","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"6","Effect2Amount":"20"},"depth":3,"id":3197},"3198":{"name":"Perfect Hex Core","description":"+10 Ability Power per level +25 Mana per level
UNIQUE Passive - Glorious Evolution: Viktor has reached the pinnacle of his power, upgrading Chaos Storm in addition to his basic spells.","colloq":";viktor","plaintext":"Allows Viktor to improve an ability of his choice","from":["3197"],"requiredChampion":"Viktor","image":{"full":"3198.png","sprite":"item1.png","group":"item","x":384,"y":336,"w":48,"h":48},"gold":{"base":750,"purchasable":true,"total":3000,"sell":2100},"tags":["Mana","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"10","Effect2Amount":"25"},"depth":4,"id":3198},"3200":{"name":"Prototype Hex Core","description":"+1 Ability Power per level +10 Mana per level
UNIQUE Passive - Progress: This item can be upgraded three times to enhance Viktor's basic abilities.","colloq":";viktor","plaintext":"Increases Ability Power and can be upgraded to improve Viktor's abilities","inStore":false,"requiredChampion":"Viktor","into":["3196"],"image":{"full":"3200.png","sprite":"item1.png","group":"item","x":432,"y":336,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1","Effect2Amount":"10"},"id":3200},"3211":{"name":"Spectre's Cowl","description":"+250 Health +25 Magic Resist
UNIQUE Passive: Grants 150% Base Health Regen for up to 10 seconds after taking damage from an enemy champion.","colloq":";hat","plaintext":"Improves defense and grants regeneration upon being damaged","from":["1028","1033"],"into":["3065","3001","3194"],"image":{"full":"3211.png","sprite":"item1.png","group":"item","x":0,"y":384,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":1200,"sell":840},"tags":["Health","HealthRegen","SpellBlock"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":250,"FlatSpellBlockMod":25},"effect":{"Effect1Amount":"1.5","Effect2Amount":"10"},"depth":2,"id":3211},"3222":{"name":"Mikael's Crucible","description":"+40 Magic Resist +10% Cooldown Reduction +100% Base Mana Regen
UNIQUE Passive: +20% Heal and Shield Power UNIQUE Passive - Harmony: Grants bonus % Base Health Regen equal to your bonus % Base Mana Regen. UNIQUE Active: Cleanses all stuns, roots, taunts, fears, silences, and slows on an allied champion and grants them slow immunity for 2 seconds (120 second cooldown).
Cleansing an effect grants the ally 40% movement speed for 2 seconds.","colloq":";","plaintext":"Activate to remove all disabling effects from an allied champion","from":["3028","3114"],"image":{"full":"3222.png","sprite":"item1.png","group":"item","x":48,"y":384,"w":48,"h":48},"gold":{"base":500,"purchasable":true,"total":2100,"sell":1470},"tags":["SpellBlock","HealthRegen","ManaRegen","Active","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatSpellBlockMod":40},"effect":{"Effect1Amount":"2","Effect2Amount":"5","Effect3Amount":"0.5","Effect4Amount":"0.25","Effect5Amount":"600","Effect6Amount":"8","Effect7Amount":"90","Effect8Amount":"1","Effect9Amount":"1","Effect10Amount":"0.4","Effect11Amount":"0.2","Effect12Amount":"2","Effect13Amount":"120"},"depth":3,"id":3222},"3252":{"name":"Poacher's Dirk","description":"+10 Attack Damage
UNIQUE Passive: +20 Movement Speed out of Combat UNIQUE Passive: After poaching 3 large monsters from the enemy jungle (50 second cooldown), transforms into a Serrated Dirk.","colloq":";serrated dirk;lethality","plaintext":"Transforms into a Serrated Dirk after poaching in the enemy jungle.","stacks":0,"from":["1036"],"image":{"full":"3252.png","sprite":"item1.png","group":"item","x":96,"y":384,"w":48,"h":48},"gold":{"base":250,"purchasable":true,"total":600,"sell":420},"tags":["Damage","NonbootsMovement","ArmorPenetration"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":10},"effect":{"Effect1Amount":"100","Effect2Amount":"15","Effect3Amount":"20","Effect4Amount":"50"},"depth":2,"id":3252},"3285":{"name":"Luden's Echo","description":"+100 Ability Power +10% Movement Speed
UNIQUE Passive - Echo: Gain charges upon moving or casting. At 100 charges, the next damaging spell hit expends all charges to deal 100 (+10% of Ability Power) bonus magic damage to up to 4 targets on hit.","colloq":";","plaintext":"Movement and casting builds charges that release chain lightning on next spell hit","from":["1058","3113"],"image":{"full":"3285.png","sprite":"item1.png","group":"item","x":144,"y":384,"w":48,"h":48},"gold":{"base":1100,"purchasable":true,"total":3200,"sell":2240},"tags":["NonbootsMovement","OnHit","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.1,"FlatMagicDamageMod":100},"effect":{"Effect1Amount":"100","Effect2Amount":"100","Effect3Amount":"4","Effect4Amount":"0.1","Effect5Amount":"35","Effect6Amount":"10"},"depth":3,"id":3285},"3301":{"name":"Ancient Coin","description":"+5% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Favor: Enemy minions killed by your allies sometimes drop coins that give either 20 gold or 8% missing mana (minimum 15). Cannon minions always drop coins.QUEST: Earn 650 gold using this item and upgrade to Nomad's Medallion. REWARD: Favor is upgraded to Emperor's Favor and you receive an Elixir Of Skill.
Limited to 1 Gold Income Item.
''Gold dust rises from the desert and clings to the coin.'' - Historian Shurelya, 11 November, 23 CLE","colloq":";","plaintext":"Grants gold and mana when nearby minions die that you didn't kill","into":["3096"],"image":{"full":"3301.png","sprite":"item1.png","group":"item","x":192,"y":384,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":140},"tags":["ManaRegen","GoldPer","CooldownReduction","Lane"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"10","Effect2Amount":"13","Effect3Amount":"2"},"id":3301},"3302":{"name":"Relic Shield","description":"+75 Health +2 Gold per 10 seconds
UNIQUE Passive - Spoils of War: Melee basic attacks execute minions below 195 (+5 per level) Health. Killing a minion heals the owner and the nearest allied champion for 15 Health and grants them kill Gold. These effects require a nearby ally. Recharges every 40 seconds. Max 2 charges.QUEST: Earn 650 gold using this item and upgrade to Targon's Brace. REWARD: Shield Battery, a permanent shield that regenerates slowly outside of combat.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Kill minions periodically to heal and grant gold to a nearby ally","into":["3097"],"image":{"full":"3302.png","sprite":"item1.png","group":"item","x":240,"y":384,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":140},"tags":["Aura","GoldPer","Health","Lane"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":75},"effect":{"Effect1Amount":"195","Effect2Amount":"15","Effect3Amount":"2","Effect4Amount":"5"},"id":3302},"3303":{"name":"Spellthief's Edge","description":"+5 Ability Power +2 Gold per 10 seconds +25% Base Mana Regen
UNIQUE Passive - Tribute: Damaging spells and attacks against champions or buildings deal 10 additional damage and grant 8 Gold. This can occur up to 3 times every 30 seconds. Killing minions slows Tribute generation.QUEST: Earn 650 gold using this item and upgrade to Frostfang. REWARD: Tribute is upgraded into Queen's Tribute.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Grants gold when you damage enemies","into":["3098"],"image":{"full":"3303.png","sprite":"item1.png","group":"item","x":288,"y":384,"w":48,"h":48},"gold":{"base":350,"purchasable":true,"total":350,"sell":140},"tags":["GoldPer","Lane","ManaRegen","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":5},"effect":{"Effect1Amount":"10","Effect2Amount":"8","Effect3Amount":"12","Effect4Amount":"3","Effect5Amount":"30","Effect6Amount":"2"},"id":3303},"3340":{"name":"Warding Totem (Trinket)","description":"Limited to 1 Trinket.
Active: Consume a charge to place an invisible Stealth Ward which reveals the surrounding area for 60 - 120 seconds.
Stores one charge every 180 - 90 seconds, up to 2 maximum charges.
Ward duration and recharge time gradually improve with level.
(Limit 3 Stealth Wards on the map per player. Switching to a Lens type trinket will disable Trinket use for 120 seconds.)","colloq":"yellow;","plaintext":"Periodically place a Stealth Ward","image":{"full":"3340.png","sprite":"item1.png","group":"item","x":336,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Active","Jungle","Lane","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"60","Effect2Amount":"180","Effect3Amount":"120","Effect4Amount":"90","Effect5Amount":"2","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120"},"id":3340},"3341":{"name":"Sweeping Lens (Trinket)","description":"Limited to 1 Trinket.
Active: Scans an area for 6 seconds, warning against hidden hostile units and revealing invisible traps and revealing / disabling wards (90 to 60 second cooldown).
Cast range and sweep radius gradually improve with level.
(Switching to a Totem-type trinket will disable Trinket use for 120 seconds.)","colloq":"red;","plaintext":"Detects and disables nearby invisible wards and traps","image":{"full":"3341.png","sprite":"item1.png","group":"item","x":384,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Active","Jungle","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"6","Effect2Amount":"90","Effect3Amount":"400","Effect4Amount":"60","Effect5Amount":"1500","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120","Effect9Amount":"60","Effect10Amount":"450","Effect11Amount":"575"},"id":3341},"3345":{"name":"Soul Anchor (Trinket)","description":"Limited to 1 Trinket.
Active: Consumes a charge to instantly revive at your Summoner Platform and grants 125% Movement Speed that decays over 12 seconds.
Additional charges are gained at levels 9 and 14.
(Max: 2 charges)
","colloq":"","plaintext":"Consumes charge to revive champion.","inStore":false,"image":{"full":"3345.png","sprite":"item1.png","group":"item","x":432,"y":384,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3345},"3348":{"name":"Arcane Sweeper","description":"UNIQUE Active - Hunter's Sight: An arcane mist grants vision in the target area for 5 seconds, revealing enemy champions and granting True Sight of traps in the area for 3 seconds (90 second cooldown).","colloq":";","plaintext":"Activate to reveal a nearby area of the map","inStore":false,"image":{"full":"3348.png","sprite":"item1.png","group":"item","x":0,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Vision","Trinket","Stealth","Active"],"maps":{"8":true,"10":true,"11":false,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"0","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"5","Effect5Amount":"3","Effect6Amount":"90"},"id":3348},"3361":{"name":"Greater Stealth Totem (Trinket)","description":"Limited to 1 Trinket. *Level 9+ required to upgrade.
UNIQUE Active: Consume a charge to place an invisible ward that reveals the surrounding area for 180 seconds. Stores a charge every 60 seconds, up to 2 total. Limit 3 Stealth Wards on the map per player.
(Trinkets cannot be used in the first 30 seconds of a game. Selling a Trinket will disable Trinket use for 120 seconds).","colloq":"yellow;","plaintext":"Periodically place a Stealth Ward","inStore":false,"image":{"full":"3361.png","sprite":"item1.png","group":"item","x":48,"y":432,"w":48,"h":48},"gold":{"base":250,"purchasable":false,"total":250,"sell":175},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"180","Effect2Amount":"60","Effect3Amount":"0","Effect4Amount":"0","Effect5Amount":"0","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120"},"id":3361},"3362":{"name":"Greater Vision Totem (Trinket)","description":"Limited to 1 Trinket. *Level 9+ required to upgrade.
UNIQUE Active: Places a visible ward that reveals the surrounding area and invisible units in the area until killed (120 second cooldown). Limit 1 Vision Ward on the map per player.
(Trinkets cannot be used in the first 30 seconds of a game. Selling a Trinket will disable Trinket use for 120 seconds).","colloq":"yellow;","plaintext":"Periodically place a Vision Ward","inStore":false,"image":{"full":"3362.png","sprite":"item1.png","group":"item","x":96,"y":432,"w":48,"h":48},"gold":{"base":250,"purchasable":false,"total":250,"sell":175},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"120","Effect2Amount":"0","Effect3Amount":"0","Effect4Amount":"0","Effect5Amount":"0","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120"},"id":3362},"3363":{"name":"Farsight Alteration","description":"* Level 9+ required to upgrade.
Alters the Warding Totem Trinket:
+ Massively increased cast range (+650%) + Infinite duration and does not count towards ward limit - 10% increased cooldown - Ward is visible, fragile, untargetable by allies - 45% reduced ward vision radius - Cannot store charges","colloq":"blue; totem;","plaintext":"Grants increased range and reveals the targetted area","image":{"full":"3363.png","sprite":"item1.png","group":"item","x":144,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"4000","Effect2Amount":"2","Effect3Amount":"5","Effect4Amount":"198","Effect5Amount":"60","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120","Effect9Amount":"6.5","Effect10Amount":"198","Effect11Amount":"99","Effect12Amount":"60","Effect13Amount":"180","Effect14Amount":"10","Effect15Amount":"45"},"id":3363},"3364":{"name":"Oracle Alteration","description":"* Level 9+ required to upgrade.
Alters the Sweeping Lens Trinket:
+ Increased detection radius + Sweeping effect follows you for 10 seconds - Cast range reduced to zero","colloq":"red; lens;","plaintext":"Disables nearby invisible wards and traps for a duration","image":{"full":"3364.png","sprite":"item1.png","group":"item","x":192,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"6","Effect2Amount":"10","Effect3Amount":"90","Effect4Amount":"60","Effect5Amount":"0","Effect6Amount":"9","Effect7Amount":"30","Effect8Amount":"120","Effect9Amount":"60"},"id":3364},"3401":{"name":"Face of the Mountain","description":"+450 Health +100% Base Health Regen +10% Cooldown Reduction +2 Gold per 10 seconds
UNIQUE Passive - Spoils of War: Melee basic attacks execute minions below 320 (+20 per level) Health. Killing a minion heals the owner and the nearest allied champion for 50 Health and grants them kill Gold. These effects require a nearby ally. Recharges every 30 seconds. Max 4 charges. UNIQUE Active: Grant a shield to you and an ally equal to 10% of your maximum Health for 4 seconds. After 4 seconds, the shields explode to slow nearby enemies by 40% for 2 seconds (60 second cooldown). Automatically targets the most wounded ally if cast upon self.QUEST: Earn 650 gold using this item. REWARD: Shield Battery, a permanent shield that regenerates slowly outside of combat.
Limited to 1 Gold Income Item.","colloq":";","plaintext":"Shield an ally from damage based on your Health","from":["3097","3067"],"image":{"full":"3401.png","sprite":"item1.png","group":"item","x":240,"y":432,"w":48,"h":48},"gold":{"base":550,"purchasable":true,"total":2200,"sell":880},"tags":["Health","HealthRegen","Active","GoldPer","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":450},"effect":{"Effect1Amount":"320","Effect2Amount":"50","Effect3Amount":"0.1","Effect4Amount":"4","Effect5Amount":"-0.4","Effect6Amount":"2","Effect7Amount":"60","Effect8Amount":"120","Effect9Amount":"2","Effect10Amount":"20"},"depth":3,"id":3401},"3410":{"name":"Head of Kha'Zix","description":"UNIQUE Active - Sweeping Lens: Reveals and disables nearby invisible traps and invisible wards for 6 seconds in a medium radius and grants detection of invisible units for 10 seconds (60 second cooldown).
UNIQUE Passive - Mementos of the Hunt: Rengar collects trophies when killing Champions and gains bonus effects based on how many trophies he has. Kills and assists grant 1 trophy.
3 Trophies: Rengar gains 25 Movement Speed whilst out of combat or in brush. 6 Trophies: Increases the range of Rengar's Leap by 125. 12 Trophies: Thrill of the Hunt's duration is increased by 5 seconds. 20 Trophies: Thrill of the Hunt's Movement Speed while stealthed is doubled.","colloq":"","plaintext":"","specialRecipe":3169,"inStore":false,"requiredChampion":"Rengar","hideFromAll":true,"image":{"full":"3410.png","sprite":"item1.png","group":"item","x":288,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"125","Effect3Amount":"5","Effect4Amount":"6","Effect5Amount":"10","Effect6Amount":"60"},"id":3410},"3416":{"name":"Head of Kha'Zix","description":"UNIQUE Active - Scrying: Reveals a small location within 4000 range for 2 seconds. Enemy champions found will be revealed for 5 seconds (90 second cooldown).
UNIQUE Passive - Mementos of the Hunt: Rengar collects trophies when killing Champions and gains bonus effects based on how many trophies he has. Kills and assists grant 1 trophy.
3 Trophies: Rengar gains 25 Movement Speed whilst out of combat or in brush. 6 Trophies: Increases the range of Rengar's Leap by 125. 12 Trophies: Thrill of the Hunt's duration is increased by 5 seconds. 20 Trophies: Thrill of the Hunt's Movement Speed while stealthed is doubled.","colloq":"","plaintext":"","specialRecipe":3169,"inStore":false,"requiredChampion":"Rengar","hideFromAll":true,"image":{"full":"3416.png","sprite":"item1.png","group":"item","x":336,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"125","Effect3Amount":"5","Effect4Amount":"4000","Effect5Amount":"2","Effect6Amount":"5","Effect7Amount":"90"},"id":3416},"3422":{"name":"Head of Kha'Zix","description":"UNIQUE Passive - Mementos of the Hunt: Rengar collects trophies when killing Champions and gains bonus effects based on how many trophies he has. Kills and assists grant 1 trophy.
3 Trophies: Rengar gains 25 Movement Speed whilst out of combat or in brush. 6 Trophies: Increases the range of Rengar's Leap by 125. 12 Trophies: Thrill of the Hunt's duration is increased by 5 seconds. 20 Trophies: Thrill of the Hunt's Movement Speed while stealthed is doubled.","colloq":"","plaintext":"","specialRecipe":3169,"inStore":false,"requiredChampion":"Rengar","hideFromAll":true,"image":{"full":"3422.png","sprite":"item1.png","group":"item","x":384,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":true,"10":true,"11":false,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"125","Effect3Amount":"5"},"id":3422},"3455":{"name":"Head of Kha'Zix","description":"UNIQUE Passive - Mementos of the Hunt: Rengar collects trophies when killing Champions and gains bonus effects based on how many trophies he has. Kills and assists grant 1 trophy.
3 Trophies: Rengar gains 25 Movement Speed whilst out of combat or in brush. 6 Trophies: Increases the range of Rengar's Leap by 125. 12 Trophies: Thrill of the Hunt's duration is increased by 5 seconds. 20 Trophies: Thrill of the Hunt's Movement Speed while stealthed is doubled.","colloq":"","plaintext":"","specialRecipe":3169,"inStore":false,"requiredChampion":"Rengar","hideFromAll":true,"image":{"full":"3455.png","sprite":"item1.png","group":"item","x":432,"y":432,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"25","Effect2Amount":"125","Effect3Amount":"5"},"id":3455},"3460":{"name":"Golden Transcendence","description":"Active: Use this trinket to teleport to one of the battle platforms. Can only be used from the summoning platform.
''It is at this magical precipice where a champion is dismantled, reforged, and empowered.''","colloq":"","plaintext":"","inStore":false,"image":{"full":"3460.png","sprite":"item2.png","group":"item","x":0,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3460},"3461":{"name":"Golden Transcendence (Disabled)","description":"Active: Use this trinket to teleport to one of the battle platforms. Can only be used from the summoning platform.
''It is at this magical precipice where a champion is dismantled, reforged, and empowered.''","colloq":"","plaintext":"","inStore":false,"image":{"full":"3461.png","sprite":"item2.png","group":"item","x":48,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3461},"3462":{"name":"Seer Stone (Trinket)","description":"Limited to 1 Trinket.
Active: Reveals a small area within 2500 range for 3 seconds. Enemy champions will be revealed for 5 seconds (60 second cooldown)","colloq":"blue;","plaintext":"Briefly reveals a nearby targeted area","inStore":false,"image":{"full":"3462.png","sprite":"item2.png","group":"item","x":96,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":true,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"2500","Effect2Amount":"60","Effect3Amount":"3","Effect4Amount":"5","Effect5Amount":"550"},"id":3462},"3504":{"name":"Ardent Censer","description":"+60 Ability Power +10% Cooldown Reduction +50% Base Mana Regen
UNIQUE Passive: +10% Heal and Shield Power UNIQUE Passive: +8% Movement Speed UNIQUE Passive: Your heals and shields on another allied champion grant them 20% - 35% Attack Speed and their attacks drain 20 - 35 health on-hit for 6 seconds.
(This does not include regeneration effects or effects on yourself. Bonus effects are based on target's level.)","colloq":"","plaintext":"Shield and heal effects on other units grant them Attack Speed and their attacks drain life","from":["3114","3113"],"image":{"full":"3504.png","sprite":"item2.png","group":"item","x":144,"y":0,"w":48,"h":48},"gold":{"base":650,"purchasable":true,"total":2300,"sell":1610},"tags":["CooldownReduction","ManaRegen","NonbootsMovement","SpellDamage"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMagicDamageMod":60},"effect":{"Effect1Amount":"0.08","Effect2Amount":"0.2","Effect3Amount":"6","Effect4Amount":"20","Effect5Amount":"0.1","Effect6Amount":"0.35","Effect7Amount":"35"},"depth":3,"id":3504},"3508":{"name":"Essence Reaver","description":"+70 Attack Damage +20% Critical Strike Chance
UNIQUE Passive: +10% Cooldown Reduction UNIQUE Passive: Gain increasingly more Cooldown Reduction from Critical Strike Chance provided by other sources (maximum +20% additional Cooldown Reduction at 30% Critical Strike Chance). UNIQUE Passive: Critical strikes restore 3% of your maximum Mana pool.","colloq":";","plaintext":"Critical Strike provides Cooldown Reduction and Mana","from":["1038","3133","1018"],"image":{"full":"3508.png","sprite":"item2.png","group":"item","x":192,"y":0,"w":48,"h":48},"gold":{"base":200,"purchasable":true,"total":3400,"sell":2380},"tags":["Damage","CriticalStrike","ManaRegen","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":70,"FlatCritChanceMod":0.2},"effect":{"Effect1Amount":"0.1","Effect2Amount":"0.03","Effect3Amount":"0.2","Effect4Amount":"0.3","Effect5Amount":"0.0167","Effect6Amount":"0.1667"},"depth":3,"id":3508},"3512":{"name":"Zz'Rot Portal","description":"+55 Armor +55 Magic Resist +125% Base Health Regen
UNIQUE Passive - Point Runner: Builds up to +20% Movement Speed over 2 seconds while near turrets, fallen turrets and Void Gates. UNIQUE Active: Spawns a Void Gate for 120 seconds (120 second cooldown).
Every 4 seconds the gate makes a Voidspawn. The first and every fourth Voidspawn gains 15% of maximum Health as damage.","colloq":";Void Gate","plaintext":"Makes a Voidspawn generating Void Gate to push a lane with.","from":["2053","1057"],"image":{"full":"3512.png","sprite":"item2.png","group":"item","x":240,"y":0,"w":48,"h":48},"gold":{"base":780,"purchasable":true,"total":2700,"sell":1890},"tags":["SpellBlock","HealthRegen","Armor","Active","NonbootsMovement"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatSpellBlockMod":55,"FlatArmorMod":55},"effect":{"Effect1Amount":"20","Effect2Amount":"4","Effect3Amount":"50","Effect4Amount":"0","Effect5Amount":"120","Effect6Amount":"120","Effect7Amount":"0.5","Effect8Amount":"0.15","Effect9Amount":"3","Effect10Amount":"20","Effect11Amount":"2","Effect12Amount":"100","Effect13Amount":"20","Effect14Amount":"50","Effect15Amount":"2"},"depth":4,"id":3512},"3513":{"name":"Eye of the Herald","description":" UNIQUE Passive - Glimpse of the Void: The holder of the Eye of the Herald has Empowered Recall.
UNIQUE Active: Channel for 3.5 seconds to crush the Eye of the Herald, summoning the Rift Herald to siege enemy turrets.
The Eye of the Herald will be lost to the Void if not used within 240 seconds.","colloq":";Herald's Eye","plaintext":"Eye of the Herald - a Gift of the Void.","consumed":true,"inStore":false,"image":{"full":"3513.png","sprite":"item2.png","group":"item","x":288,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Trinket","Active"],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"240","Effect2Amount":"3.5","Effect3Amount":"40"},"id":3513},"3599":{"name":"The Black Spear","description":" Active: Offer to bind with an ally for the remainder of the game, becoming Oathsworn Allies. Oathsworn empowers you both while near one another.","colloq":";spear","plaintext":"Kalista's spear that binds an Oathsworn Ally.","requiredChampion":"Kalista","image":{"full":"3599.png","sprite":"item2.png","group":"item","x":336,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Active"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":3599},"3630":{"name":"Siege Teleport","description":"Active: Use this trinket to teleport to one of your team's port pads. Can only be used from the summoning platform.","colloq":"","plaintext":"","inStore":false,"image":{"full":"3630.png","sprite":"item2.png","group":"item","x":384,"y":0,"w":48,"h":48},"gold":{"base":10,"purchasable":false,"total":10,"sell":7},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3630},"3631":{"name":"Siege Ballista","description":" Deploys a ballista that shoots the closest turret.
Places a long range ballista if within 2200 range of an enemy turret. After a 5 second delay, it will begin firing at the nearest enemy turret, dealing heavy damage. If the targeted turret expires, the ballista will as well.","colloq":"","plaintext":"Place a long range anti-turret ballista","consumed":true,"consumeOnFull":true,"image":{"full":"3631.png","sprite":"item2.png","group":"item","x":432,"y":0,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"5","Effect2Amount":"5","Effect3Amount":"20","Effect4Amount":"3","Effect5Amount":"0","Effect6Amount":"2200","Effect7Amount":"10","Effect8Amount":"0","Effect9Amount":"0.5"},"id":3631},"3632":{"name":"","description":"","colloq":"","plaintext":"","inStore":false,"image":{"full":"3632.png","sprite":"item2.png","group":"item","x":0,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"15","Effect2Amount":"1","Effect3Amount":"310","Effect4Amount":"5000","Effect5Amount":"20","Effect6Amount":"0","Effect7Amount":"3","Effect8Amount":"45","Effect9Amount":"10","Effect10Amount":"1","Effect11Amount":"15","Effect12Amount":"3000"},"id":3632},"3633":{"name":"Siege Teleport","description":"Active: Use this trinket to teleport to one of your team's port pads. Can only be used from the summoning platform.","colloq":"","plaintext":"","inStore":false,"image":{"full":"3633.png","sprite":"item2.png","group":"item","x":48,"y":48,"w":48,"h":48},"gold":{"base":10,"purchasable":false,"total":10,"sell":7},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3633},"3634":{"name":"Tower: Beam of Ruination","description":" Attach, then recast to fire a damaging beam from a turret to your cursor.
First Cast: Attach a Slayer Beam to the target turret that can be fired 3 times. Next Three Casts: Fires the attached beam towards your cursor, dealing 30/level + 30% of the hit target's maximum health (20% damage to minions) in magic damage to all targets in a line.
Beam will last 15 seconds, or until it has been fired 3 times.","colloq":"","plaintext":"Attaches a three shot beam to a turret which can then be aimed and fired","consumed":true,"consumeOnFull":true,"image":{"full":"3634.png","sprite":"item2.png","group":"item","x":96,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"3","Effect2Amount":"1.5","Effect3Amount":"3000","Effect4Amount":"0","Effect5Amount":"30","Effect6Amount":"0.2","Effect7Amount":"15","Effect8Amount":"0.3","Effect9Amount":"0","Effect10Amount":"76"},"id":3634},"3635":{"name":"Port Pad","description":" Deploy an additional teleport target.
Places a Port Pad at target location. After a 4 second delay, it activates, allowing you or your allies to teleport to it from base.","colloq":"","plaintext":"Creates another point for your team to Teleport to","consumed":true,"consumeOnFull":true,"image":{"full":"3635.png","sprite":"item2.png","group":"item","x":144,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"4","Effect2Amount":"1000","Effect3Amount":"3","Effect4Amount":"10"},"id":3635},"3636":{"name":"Tower: Storm Bulwark","description":" Makes a turret go invulnerable, then rain fire.
Makes the target turret invulnerable for 6 seconds. Two seconds before expiry, it unleashes a missile volley, dealing 2600 true damage over the remaining time to all nearby enemies.
Cannot be used on the same turret more than once in 15 seconds.","colloq":"","plaintext":"Make a turret go invulnerable while charging a powerful barrage","consumed":true,"consumeOnFull":true,"image":{"full":"3636.png","sprite":"item2.png","group":"item","x":192,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{"FlatCritChanceMod":3},"effect":{"Effect1Amount":"6","Effect2Amount":"15","Effect3Amount":"650","Effect4Amount":"825","Effect5Amount":"1.2"},"id":3636},"3637":{"name":"Nexus Siege: Siege Weapon Slot","description":"In Nexus Siege, Summoner Spells are replaced with Siege Weapon Slots. Spend Crystal Shards to buy single-use Siege Weapons from the item shop, then use your Summoner Spell keys to activate them!","colloq":"","plaintext":"","inStore":false,"image":{"full":"3637.png","sprite":"item2.png","group":"item","x":240,"y":48,"w":48,"h":48},"gold":{"base":10,"purchasable":false,"total":10,"sell":7},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3637},"3640":{"name":"Flash Zone","description":" Allows team to cast Flash repeatedly in a limited zone.
Creates a magic zone for your team for 5 seconds. While in this zone, you and your allies have your summoner spells replaced by an instant cast blink that moves you to any location in the zone (1 second cooldown).","colloq":"","plaintext":"Allows you and allies to repeatedly flash while in a zone","consumed":true,"consumeOnFull":true,"image":{"full":"3640.png","sprite":"item2.png","group":"item","x":288,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1","Effect2Amount":"5"},"id":3640},"3641":{"name":"Vanguard Banner","description":" Place a banner that buffs minions.
Place a Vanguard Banner at target location. After a 2 second delay, any nearby minions will be granted a buff, increasing their damage by 50%, and granting them 50 Armor and 100 Magic Resistance while within range.","colloq":"","plaintext":"Strengthens nearby minions","consumed":true,"image":{"full":"3641.png","sprite":"item2.png","group":"item","x":336,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"0","Effect2Amount":"0.5","Effect3Amount":"50","Effect4Amount":"100","Effect5Amount":"5","Effect6Amount":"0.3","Effect7Amount":"2","Effect8Amount":"10","Effect9Amount":"1400"},"id":3641},"3642":{"name":"Siege Refund","description":"Refunds all purchased Siege Weapons for their full price.","colloq":"","plaintext":"Refunds all current Siege Weapons","consumed":true,"consumeOnFull":true,"image":{"full":"3642.png","sprite":"item2.png","group":"item","x":384,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1"},"id":3642},"3643":{"name":"Entropy Field","description":" Stun minions and slow champions in an area.
Places an Entropy Field at target location for 5 seconds. Enemy minions and Siege Ballistas trapped in the field are unable to move or attack while in the field. Enemy champions in the field have their Movement Speed reduced by 25%.","colloq":"","plaintext":"Places a field that stuns enemy minions and slows champions","consumed":true,"consumeOnFull":true,"image":{"full":"3643.png","sprite":"item2.png","group":"item","x":432,"y":48,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"5","Effect2Amount":"600","Effect3Amount":"25"},"id":3643},"3645":{"name":"Seer Stone (Trinket)","description":"Limited to 1 Trinket.
Active: Reveals a small area within 1400 range for 3 seconds. Enemy champions will be revealed for 5 seconds (60 second cooldown)","colloq":"blue;","plaintext":"Briefly reveals a nearby targeted area","inStore":false,"image":{"full":"3645.png","sprite":"item2.png","group":"item","x":0,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":["Active","Trinket","Vision"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1400","Effect2Amount":"60","Effect3Amount":"3","Effect4Amount":"5","Effect5Amount":"550"},"id":3645},"3647":{"name":"Shield Totem","description":" Place a totem that shields nearby deployables.
Places a Shield Totem at target location. After a 2 second delay, the totem will activate, granting a 2 (+1 per additional Shield Totem) strength shield to all nearby deployables.","colloq":"","plaintext":"Grants bonus health to nearby Siege Weapons","consumed":true,"image":{"full":"3647.png","sprite":"item2.png","group":"item","x":48,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"2","Effect2Amount":"3","Effect3Amount":"2","Effect4Amount":"1","Effect5Amount":"1000","Effect6Amount":"0.25","Effect7Amount":"10","Effect8Amount":"1","Effect9Amount":"4"},"id":3647},"3648":{"name":"Siege Teleport (Inactive)","description":"","colloq":"","plaintext":"","inStore":false,"image":{"full":"3648.png","sprite":"item2.png","group":"item","x":96,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"id":3648},"3649":{"name":"Siege Sight Warder","description":"Limited to 1 Trinket.
Active: Places a Stealth Ward that lasts 30 seconds (30 second cooldown).","colloq":"","plaintext":"","inStore":false,"image":{"full":"3649.png","sprite":"item2.png","group":"item","x":144,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":false,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"30"},"id":3649},"3671":{"name":"Enchantment: Warrior","description":"+60 Attack Damage +10% Cooldown Reduction","colloq":";","plaintext":"","from":["3133"],"hideFromAll":true,"image":{"full":"3671.png","sprite":"item2.png","group":"item","x":192,"y":96,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":1625,"sell":1138},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":60},"depth":3,"id":3671},"3672":{"name":"Enchantment: Cinderhulk","description":"+400 Health +15% Bonus Health
UNIQUE Passive - Immolate: Deals 7 (+2 per champion level) magic damage a second to nearby enemies while in combat. Deals 100% bonus damage to monsters. ","colloq":";","plaintext":"","from":["3751"],"hideFromAll":true,"image":{"full":"3672.png","sprite":"item2.png","group":"item","x":240,"y":96,"w":48,"h":48},"gold":{"base":525,"purchasable":true,"total":1625,"sell":1138},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":400},"depth":3,"id":3672},"3673":{"name":"Enchantment: Runic Echoes","description":"+60 Ability Power +7% Movement Speed
UNIQUE Passive - Echo: Gain charges upon moving or casting. At 100 charges, the next damaging spell hit expends all charges to deal 60 (+10% of Ability Power) bonus magic damage to up to 4 targets on hit.
This effect deals 250% damage to Large Monsters. Hitting a Large Monster with this effect will restore 18% of your missing Mana.","colloq":";","plaintext":"","from":["3113","1052"],"hideFromAll":true,"image":{"full":"3673.png","sprite":"item2.png","group":"item","x":288,"y":96,"w":48,"h":48},"gold":{"base":340,"purchasable":true,"total":1625,"sell":1138},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentMovementSpeedMod":0.07,"FlatMagicDamageMod":60},"depth":3,"id":3673},"3675":{"name":"Enchantment: Bloodrazor","description":"+50% Attack Speed
UNIQUE Passive: Basic attacks deal 4% of the target's maximum Health in bonus physical damage (max 75 vs. monsters and minions) on hit.","colloq":";","plaintext":"","from":["1043"],"hideFromAll":true,"image":{"full":"3675.png","sprite":"item2.png","group":"item","x":336,"y":96,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":1625,"sell":1138},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"PercentAttackSpeedMod":0.5},"depth":3,"id":3675},"3680":{"name":"Frosted Snax","description":"Active - Feed The King: The King lobs many projectiles at far-away enemies, each dealing 213-775 magic damage to targets in the center of the impact, scaling down to 85-310 on the edge. (120s cooldown)","colloq":"","plaintext":"King: Fires a barrage of icy artillery","image":{"full":"3680.png","sprite":"item2.png","group":"item","x":384,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Trinket","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"5","Effect2Amount":"120","Effect3Amount":"40","Effect4Amount":"15","Effect5Amount":"250","Effect6Amount":"213","Effect7Amount":"775","Effect8Amount":"85","Effect9Amount":"310"},"id":3680},"3681":{"name":"Super Spicy Snax","description":"Active - Feed The King: The King breathes fire for 4 seconds, dealing 705-1479 true damage over the duration to enemies caught in the cone. Deals up to 560 true damage to Turrets. (120s cooldown)","colloq":"","plaintext":"King: Shoots flames that burn units and Turrets","image":{"full":"3681.png","sprite":"item2.png","group":"item","x":432,"y":96,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Trinket","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"4","Effect2Amount":"120","Effect3Amount":"700","Effect4Amount":"2.35","Effect5Amount":"560","Effect6Amount":"705","Effect7Amount":"1479"},"id":3681},"3682":{"name":"Espresso Snax","description":"Active - Feed The King: The King leaps into the air and crashes down twice, knocking enemies away and dealing 40-190 physical damage. He also gains a decaying shield for 20% of his maximum health, lasting 4 seconds. (30s cooldown)","colloq":"","plaintext":"King: Knocks back and grants a large shield","image":{"full":"3682.png","sprite":"item2.png","group":"item","x":0,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Trinket","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"1.8","Effect2Amount":"30","Effect3Amount":"10","Effect4Amount":"10","Effect5Amount":"20","Effect6Amount":"4","Effect7Amount":"600","Effect8Amount":"40","Effect9Amount":"190","Effect10Amount":"500"},"id":3682},"3683":{"name":"Rainbow Snax Party Pack!","description":"Active - Feed The King: The King tosses many Snax behind the enemy, attracting Poros which dash back towards him. Enemy champions hit will be knocked forwards and dealt 230-680 physical damage. (120s cooldown)","colloq":"","plaintext":"King: Poros knock enemies towards him","image":{"full":"3683.png","sprite":"item2.png","group":"item","x":48,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":["Trinket","Lane"],"maps":{"8":false,"10":false,"11":false,"12":true,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"6","Effect2Amount":"120","Effect3Amount":"140","Effect4Amount":"30","Effect5Amount":"1","Effect6Amount":"1500","Effect7Amount":"1650","Effect8Amount":"1000","Effect9Amount":"230","Effect10Amount":"680","Effect11Amount":"2"},"id":3683},"3690":{"name":"Cosmic Shackle","description":"Passive - Cosmic Shackle: Death Sentence pulls much farther (based on the target's Missing Health), and can be ignited by the Dark Star to do more damage.
''A still more glorious dawn awaits.''","colloq":";","plaintext":"","image":{"full":"3690.png","sprite":"item2.png","group":"item","x":96,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3690},"3691":{"name":"Singularity Lantern","description":"Passive - Singularity Lantern: Dark Passage automatically saves disabled allies. However, it no longer provides a shield.
''The stars call to us.''","colloq":";","plaintext":"","image":{"full":"3691.png","sprite":"item2.png","group":"item","x":144,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3691},"3692":{"name":"Dark Matter Scythe","description":"Passive - Dark Matter Scythe: Flay's on-hit passive charges damage very quickly. Flay will throw enemies much farther (based on their Missing Health).
''If you want to make a Singularity from scratch, you must first destroy the universe.''","colloq":";","plaintext":"","image":{"full":"3692.png","sprite":"item2.png","group":"item","x":192,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{},"id":3692},"3693":{"name":"Gravity Boots","description":"Passive - Mass Conversion: Thresh's Health represents how far enemy pulls and pushes will send him. At lower Health, he will be thrown farther.
Passive - Terminus Dwellers: Abyss Scuttlers emerge periodically, and will scurry towards the Dark Star when attacked. Gravitational disturbances will temporarily attract many of them.","colloq":";","plaintext":"","image":{"full":"3693.png","sprite":"item2.png","group":"item","x":240,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":50},"id":3693},"3694":{"name":"Cloak of Stars","description":"Passive - Stellar Spirit: Upon spawning, Thresh is invulnerable, untargetable, cannot cast, and is able to travel in open space. This is lost when stepping foot on stable ground.
Being saved by Dark Passage or using Death Sentence on one of the three Gravity Anchors will briefly put you into this invulnerable state and break enemy chains on you.","colloq":";","plaintext":"","image":{"full":"3694.png","sprite":"item2.png","group":"item","x":288,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":50},"id":3694},"3695":{"name":"Dark Star Sigil","description":"Passive - Stellar Fealty: Thresh cannot kill units directly - their souls, experience, and gold belong to the Dark Star.
Pulling or pushing an enemy into the Dark Star will destroy them instantly, scoring points for your team (+5, or +1 for Abyss Scuttlers).
Winning a round requires 100 points, and the final points must be from a champion kill.","colloq":";","plaintext":"","image":{"full":"3695.png","sprite":"item2.png","group":"item","x":336,"y":144,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":false,"10":false,"11":false,"12":false,"14":false,"16":false},"stats":{"FlatMovementSpeedMod":50},"id":3695},"3706":{"name":"Stalker's Blade","description":"Limited to 1 Jungle item
+10% Life Steal vs. Monsters +180% Base Mana Regen while in Jungle
UNIQUE Passive - Chilling Smite: Smite can be cast on enemy champions, dealing reduced true damage and stealing 20% Movement Speed for 2 seconds. UNIQUE Passive - Tooth / Nail: Basic attacks deal 25 bonus damage vs. monsters. Damaging a monster with a spell or attack steals 30 Health over 5 seconds. Killing monsters grants special bonus experience.","colloq":";jungle;Jungle;jangle","plaintext":"Lets your Smite slow Champions","from":["1039","1041"],"into":["1400","1401","1402","1416"],"image":{"full":"3706.png","sprite":"item2.png","group":"item","x":384,"y":144,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":1000,"sell":700},"tags":["LifeSteal","ManaRegen","Slow","OnHit","NonbootsMovement","Jungle"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"-0.2","Effect7Amount":"2","Effect8Amount":"3","Effect9Amount":"0.1"},"depth":2,"id":3706},"3711":{"name":"Tracker's Knife","description":"Limited to 1 Jungle item
+10% Life Steal vs. Monsters +180% Base Mana Regen while in Jungle
UNIQUE Passive - Tooth / Nail: Basic attacks deal 25 bonus damage vs. monsters. Damaging a monster with a spell or attack steals 30 Health over 5 seconds. Killing monsters grants special bonus experience. UNIQUE Active - Warding: Consumes a charge to place a Stealth Ward that reveals the surrounding area for 150 seconds. Holds up to 2 charges which refill upon visiting the shop.
(A player may only have 3 Stealth Wards on the map at one time. Unique Passives with the same name don't stack.)","colloq":";jungle;Jungle","plaintext":"Provides Stealth Wards over time","from":["1039","1041"],"into":["1408","1409","1410","1418"],"image":{"full":"3711.png","sprite":"item2.png","group":"item","x":432,"y":144,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":1000,"sell":700},"tags":["LifeSteal","ManaRegen","Vision","Active","OnHit","Jungle"],"maps":{"8":false,"10":false,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"30","Effect9Amount":"0.1","Effect10Amount":"150"},"depth":2,"id":3711},"3715":{"name":"Skirmisher's Sabre","description":"Limited to 1 Jungle item
+10% Life Steal vs. Monsters +180% Base Mana Regen while in Jungle
Passive - Challenging Smite: Smite can be cast on enemy champions, marking them for 4 seconds. While marked, the target is revealed, your basic attacks deal bonus true damage over 3 seconds, and their damage to you is reduced by 20%. UNIQUE Passive - Tooth / Nail: Basic attacks deal 25 bonus damage vs. monsters. Damaging a monster with a spell or attack steals 30 Health over 5 seconds. Killing monsters grants special bonus experience.","colloq":";jungle;Jungle","plaintext":"Lets your Smite mark Champions, giving you combat power against them.","from":["1039","1041"],"into":["1412","1413","1414","1419"],"image":{"full":"3715.png","sprite":"item2.png","group":"item","x":0,"y":192,"w":48,"h":48},"gold":{"base":300,"purchasable":true,"total":1000,"sell":700},"tags":["LifeSteal","ManaRegen","OnHit","Jungle"],"maps":{"8":false,"10":true,"11":true,"12":false,"14":false,"16":false},"stats":{},"effect":{"Effect1Amount":"30","Effect2Amount":"25","Effect3Amount":"1.8","Effect4Amount":"5","Effect5Amount":"30","Effect6Amount":"3","Effect7Amount":"20","Effect8Amount":"18","Effect9Amount":"0.1","Effect10Amount":"4"},"depth":2,"id":3715},"3742":{"name":"Dead Man's Plate","description":"+425 Health +60 Armor
UNIQUE Passive - Dreadnought: While moving, build stacks of Momentum, increasing movement speed by up to 60 at 100 stacks. Momentum decays while under the effect of a slow, stun, taunt, fear, polymorph, or immobilize effect, as well as when basic attacking. UNIQUE Passive - Crushing Blow: Basic attacks at 100 stacks deal 100 bonus damage and discharge the stacks. If the attacker is melee, they also slow the target by 50% for 1 second.
''There's only one way you'll get this armor from me...'' - forgotten namesake","colloq":";juggernaut;dreadnought","plaintext":"Build momentum as you move around then smash into enemies.","from":["1031","1011"],"image":{"full":"3742.png","sprite":"item2.png","group":"item","x":48,"y":192,"w":48,"h":48},"gold":{"base":1100,"purchasable":true,"total":2900,"sell":2030},"tags":["Health","Armor","OnHit","NonbootsMovement","Bilgewater"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":425,"FlatArmorMod":60},"effect":{"Effect1Amount":"60","Effect2Amount":"100","Effect3Amount":"2","Effect4Amount":"-0.5","Effect5Amount":"1"},"depth":3,"id":3742},"3748":{"name":"Titanic Hydra","description":"+450 Health +35 Attack Damage +100% Base Health Regen
UNIQUE Passive - Cleave: Basic attacks deal 5 + 1% of your maximum health as bonus physical damage to your target and 40 + 2.5% of your maximum health as physical damage to other enemies in a cone on hit. UNIQUE Active - Crescent: Cleave damage to all targets is increased to 40 + 10% of your maximum health as bonus physical damage in a larger cone for your next basic attack (20 second cooldown).
(Unique Passives with the same name don't stack.)","colloq":";juggernaut","plaintext":"Deals area of effect damage based on owner's health","from":["3077","1028","3052"],"image":{"full":"3748.png","sprite":"item2.png","group":"item","x":96,"y":192,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":3500,"sell":2450},"tags":["Health","HealthRegen","Damage","Active","OnHit"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":35,"FlatHPPoolMod":450},"effect":{"Effect1Amount":"0.025","Effect2Amount":"40","Effect3Amount":"0","Effect4Amount":"0","Effect5Amount":"0.1","Effect6Amount":"0","Effect7Amount":"20","Effect8Amount":"40","Effect9Amount":"0.01","Effect10Amount":"5"},"depth":3,"id":3748},"3751":{"name":"Bami's Cinder","description":"+280 Health
UNIQUE Passive - Immolate: Deals 5 (+1 per champion level) magic damage per second to nearby enemies. Deals 50% bonus damage to minions and monsters.","colloq":";","plaintext":"Grants Health and Immolate Aura","from":["1028"],"into":["3068","1401","1409","1413","3672"],"image":{"full":"3751.png","sprite":"item2.png","group":"item","x":144,"y":192,"w":48,"h":48},"gold":{"base":700,"purchasable":true,"total":1100,"sell":770},"tags":["Health"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":280},"effect":{"Effect1Amount":"5","Effect2Amount":"1","Effect3Amount":"50"},"depth":2,"id":3751},"3800":{"name":"Righteous Glory","description":"+500 Health +300 Mana +100% Base Health Regen
UNIQUE Passive - Eternity: 15% of damage taken from champions is gained as Mana. Spending Mana restores 20% of the cost as Health, up to 25 per spell cast. UNIQUE Active: Grants +75% Movement Speed when moving towards enemies or enemy turrets for 4 seconds. After 3 seconds, a shockwave is emitted, slowing nearby enemy champion Movement Speed by 75% for 2 second(s) (90 second cooldown).
This effect may be reactivated early to instantly release the shockwave.","colloq":";","plaintext":"Grants Health, Mana. Activate to speed towards enemies and slow them.","from":["3010","3801"],"image":{"full":"3800.png","sprite":"item2.png","group":"item","x":192,"y":192,"w":48,"h":48},"gold":{"base":750,"purchasable":true,"total":2500,"sell":1750},"tags":["Health","HealthRegen","Mana","ManaRegen","Active","Slow","NonbootsMovement"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":500,"FlatMPPoolMod":300},"effect":{"Effect1Amount":"0.75","Effect2Amount":"4","Effect3Amount":"-0.75","Effect4Amount":"2","Effect5Amount":"90","Effect6Amount":"0.2","Effect7Amount":"25","Effect8Amount":"0.15","Effect9Amount":"3"},"depth":3,"id":3800},"3801":{"name":"Crystalline Bracer","description":"+200 Health +50% Base Health Regen ","colloq":";","plaintext":"Grants Health and Health Regen","from":["1028","1006"],"into":["3109","3800","3083","3084","3107"],"image":{"full":"3801.png","sprite":"item2.png","group":"item","x":240,"y":192,"w":48,"h":48},"gold":{"base":100,"purchasable":true,"total":650,"sell":455},"tags":["Health","HealthRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatHPPoolMod":200},"depth":2,"id":3801},"3802":{"name":"Lost Chapter","description":"+25 Ability Power +300 Mana
UNIQUE Passive: Upon levelling up, restores 20% of your maximum Mana over 3 seconds.","colloq":";","plaintext":"Restores Mana upon levelling up.","from":["1052","1027"],"into":["3165"],"image":{"full":"3802.png","sprite":"item2.png","group":"item","x":288,"y":192,"w":48,"h":48},"gold":{"base":115,"purchasable":true,"total":900,"sell":630},"tags":["SpellDamage","Mana","ManaRegen"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatMPPoolMod":300,"FlatMagicDamageMod":25},"effect":{"Effect1Amount":"25","Effect2Amount":"-0.1","Effect3Amount":"15","Effect4Amount":"10","Effect5Amount":"20","Effect6Amount":"5","Effect7Amount":"0.2","Effect8Amount":"3"},"depth":2,"id":3802},"3812":{"name":"Death's Dance","description":"+80 Attack Damage +10% Cooldown Reduction
UNIQUE Passive: Dealing physical damage heals for 15% of the damage dealt. This is 33% as effective for Area of Effect damage. UNIQUE Passive: 30% of damage taken is dealt as a Bleed effect over 3 seconds instead.","colloq":";Bloodbag","plaintext":"Trades incoming damage now for incoming damage later","stacks":0,"from":["1053","1037","3133"],"image":{"full":"3812.png","sprite":"item2.png","group":"item","x":336,"y":192,"w":48,"h":48},"gold":{"base":625,"purchasable":true,"total":3500,"sell":2450},"tags":["Damage","LifeSteal","CooldownReduction"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":80},"effect":{"Effect1Amount":"0.15","Effect2Amount":"0.3","Effect3Amount":"3"},"depth":3,"id":3812},"3814":{"name":"Edge of Night","description":"+55 Attack Damage +35 Magic Resist
UNIQUE Passive: +15 Lethality UNIQUE Passive: +20 Movement Speed out of Combat UNIQUE Active - Night's Veil: Channel for 1.5 second to grant a spell shield that blocks the next enemy ability. Lasts for 5 seconds (45 second cooldown).
(Can move while channeling, but taking damage breaks the channel.)","colloq":";lethality","plaintext":"Blocks an incoming enemy spell.","stacks":0,"from":["1037","3134","1033"],"image":{"full":"3814.png","sprite":"item2.png","group":"item","x":384,"y":192,"w":48,"h":48},"gold":{"base":675,"purchasable":true,"total":3100,"sell":2170},"tags":["SpellBlock","Damage","NonbootsMovement","ArmorPenetration"],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{"FlatPhysicalDamageMod":55,"FlatSpellBlockMod":35},"effect":{"Effect1Amount":"15","Effect2Amount":"5","Effect3Amount":"20","Effect4Amount":"45","Effect5Amount":"5"},"depth":3,"id":3814},"3901":{"name":"Fire at Will","description":"Requires 500 Silver Serpents.
UNIQUE Passive: Cannon Barrage fires at an increasing rate over time (additional 6 waves over the duration).","colloq":"","plaintext":"Cannon Barrage gains extra waves","consumed":true,"consumeOnFull":true,"requiredChampion":"Gangplank","image":{"full":"3901.png","sprite":"item2.png","group":"item","x":432,"y":192,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":3901},"3902":{"name":"Death's Daughter","description":"Requires 500 Silver Serpents.
UNIQUE Passive: Cannon Barrage additionally fires a mega-cannonball at center of the Barrage, dealing 300% true damage and slowing them by 60% for 1.5 seconds. ","colloq":"","plaintext":"Cannon Barrage fires a mega-cannonball","consumed":true,"consumeOnFull":true,"requiredChampion":"Gangplank","image":{"full":"3902.png","sprite":"item2.png","group":"item","x":0,"y":240,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":3902},"3903":{"name":"Raise Morale","description":"Requires 500 Silver Serpents.
UNIQUE Passive: Allies in the Cannon Barrage gain 30% Movement Speed for 2 seconds.","colloq":"","plaintext":"Cannon Barrage hastes allies","consumed":true,"consumeOnFull":true,"requiredChampion":"Gangplank","image":{"full":"3903.png","sprite":"item2.png","group":"item","x":48,"y":240,"w":48,"h":48},"gold":{"base":0,"purchasable":true,"total":0,"sell":0},"tags":[],"maps":{"8":true,"10":true,"11":true,"12":true,"14":false,"16":false},"stats":{},"id":3903}}
================================================
FILE: api_data/masteries.json
================================================
{"6111":{"id":6111,"name":"Fury","description":["+0.8% Attack Speed","+1.6% Attack Speed","+2.4% Attack Speed","+3.2% Attack Speed","+4% Attack Speed"],"image":{"full":"6111.png","sprite":"mastery0.png","group":"mastery","x":0,"y":0,"w":48,"h":48},"ranks":5,"prereq":"0"},"6114":{"id":6114,"name":"Sorcery","description":["+0.4% increased Ability damage","+0.8% increased Ability damage","+1.2% increased Ability damage","+1.6% increased Ability damage","+2.0% increased Ability damage"],"image":{"full":"6114.png","sprite":"mastery0.png","group":"mastery","x":48,"y":0,"w":48,"h":48},"ranks":5,"prereq":"0"},"6121":{"id":6121,"name":"Fresh Blood","description":["Your first basic attack against a champion deals an additional 10 +1 per level damage (6 second cooldown)"],"image":{"full":"6121.png","sprite":"mastery0.png","group":"mastery","x":96,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6122":{"id":6122,"name":"Feast","description":["Killing a unit restores 20 Health (30 second cooldown)"],"image":{"full":"6122.png","sprite":"mastery0.png","group":"mastery","x":144,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6123":{"id":6123,"name":"Expose Weakness","description":["Damaging enemy champions causes them to take 3% more damage from your allies"],"image":{"full":"6123.png","sprite":"mastery0.png","group":"mastery","x":192,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6131":{"id":6131,"name":"Vampirism","description":["+0.4% Lifesteal and Spell Vamp","+0.8% Lifesteal and Spell Vamp","+1.2% Lifesteal and Spell Vamp","+1.6% Lifesteal and Spell Vamp","+2.0% Lifesteal and Spell Vamp"],"image":{"full":"6131.png","sprite":"mastery0.png","group":"mastery","x":240,"y":0,"w":48,"h":48},"ranks":5,"prereq":"0"},"6134":{"id":6134,"name":"Natural Talent","description":["Gain 0.4 + 0.09 per level Attack Damage, and 0.6 + 0.13 per level Ability Power (+2 Attack Damage and 3 Ability Power at level 18)","Gain 0.8 + 0.18 per level Attack Damage, and 1.2 + 0.27 per level Ability Power (+4 Attack Damage and 6 Ability Power at level 18)","Gain 1.2 + 0.27 per level Attack Damage, and 1.8 + 0.4 per level Ability Power (+6 Attack Damage and 9 Ability Power at level 18)","Gain 1.6 + 0.36 per level Attack Damage, and 2.4 + 0.53 per level Ability Power (+8 Attack Damage and 12 Ability Power at level 18)","Gain 2 + 0.44 per level Attack Damage, and 3 + 0.67 per level Ability Power (+10 Attack Damage and 15 Ability Power at level 18)"],"image":{"full":"6134.png","sprite":"mastery0.png","group":"mastery","x":288,"y":0,"w":48,"h":48},"ranks":5,"prereq":"0"},"6141":{"id":6141,"name":"Bounty Hunter","description":["Deal 1% increased damage for each unique enemy champion you have killed"],"image":{"full":"6141.png","sprite":"mastery0.png","group":"mastery","x":336,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6142":{"id":6142,"name":"Double Edged Sword","description":["Deal 3% additional damage, take 1.5% additional damage."],"image":{"full":"6142.png","sprite":"mastery0.png","group":"mastery","x":384,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6143":{"id":6143,"name":"Battle Trance","description":["Gain up to 3% increased damage over 3 seconds when in combat with enemy Champions"],"image":{"full":"6143.png","sprite":"mastery0.png","group":"mastery","x":432,"y":0,"w":48,"h":48},"ranks":1,"prereq":"0"},"6151":{"id":6151,"name":"Battering Blows","description":["+1.4% Armor Penetration","+2.8% Armor Penetration","+4.2% Armor Penetration","+5.6% Armor Penetration","+7% Armor Penetration"],"image":{"full":"6151.png","sprite":"mastery0.png","group":"mastery","x":0,"y":48,"w":48,"h":48},"ranks":5,"prereq":"0"},"6154":{"id":6154,"name":"Piercing Thoughts","description":["+1.4% Magic Penetration","+2.8% Magic Penetration","+4.2% Magic Penetration","+5.6% Magic Penetration","+7% Magic Penetration"],"image":{"full":"6154.png","sprite":"mastery0.png","group":"mastery","x":48,"y":48,"w":48,"h":48},"ranks":5,"prereq":"0"},"6161":{"id":6161,"name":"Warlord's Bloodlust","description":["Moving or attacking will charge an Energized attack. Energized attacks heal for 5-40% of your total Attack Damage (amplified by Critical Strikes) and grant 30% Movement Speed for 0.75 seconds."],"image":{"full":"6161.png","sprite":"mastery0.png","group":"mastery","x":96,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6162":{"id":6162,"name":"Fervor of Battle","description":["Hitting champions with basic attacks generates a Fervor stack (2 for melee attacks). Stacks of Fervor last 8 seconds (max 8 stacks)and increase your AD by 1-8 for each stack."],"image":{"full":"6162.png","sprite":"mastery0.png","group":"mastery","x":144,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6164":{"id":6164,"name":"Deathfire Touch","description":["Your damaging abilities cause enemy champions to take magic damage over 4 seconds.
Damage: 8 + 45% Bonus Attack Damage and 25% Ability Power
Deathfire Touch's duration is reduced for: - Area of Effect: 2 second duration. - Damage over Time: 1 second duration."],"image":{"full":"6164.png","sprite":"mastery0.png","group":"mastery","x":192,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6211":{"id":6211,"name":"Recovery","description":["+0.4 Health per 5 seconds","+0.8 Health per 5 seconds","+1.2 Health per 5 seconds","+1.6 Health per 5 seconds","+2.0 Health per 5 seconds"],"image":{"full":"6211.png","sprite":"mastery0.png","group":"mastery","x":0,"y":144,"w":48,"h":48},"ranks":5,"prereq":"0"},"6212":{"id":6212,"name":"Unyielding","description":["+1% Bonus Armor and Magic Resist","+2% Bonus Armor and Magic Resist","+3% Bonus Armor and Magic Resist","+4% Bonus Armor and Magic Resist","+5% Bonus Armor and Magic Resist"],"image":{"full":"6212.png","sprite":"mastery0.png","group":"mastery","x":48,"y":144,"w":48,"h":48},"ranks":5,"prereq":"0"},"6221":{"id":6221,"name":"Explorer","description":["+15 Movement Speed in Brush and River"],"image":{"full":"6221.png","sprite":"mastery0.png","group":"mastery","x":96,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6222":{"id":6222,"name":"Siegemaster","description":["Gain 8 Armor and Magic Resistance when near an allied tower"],"image":{"full":"6222.png","sprite":"mastery0.png","group":"mastery","x":192,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6223":{"id":6223,"name":"Tough Skin","description":["You take 2 less damage from champion and neutral monster basic attacks"],"image":{"full":"6223.png","sprite":"mastery0.png","group":"mastery","x":144,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6231":{"id":6231,"name":"Runic Armor","description":["Shields, healing, regeneration, and lifesteal on you are 1.6% stronger","Shields, healing, regeneration, and lifesteal on you are 3.2% stronger","Shields, healing, regeneration, and lifesteal on you are 4.8% stronger","Shields, healing, regeneration, and lifesteal on you are 6.4% stronger","Shields, healing, regeneration, and lifesteal on you are 8% stronger"],"image":{"full":"6231.png","sprite":"mastery0.png","group":"mastery","x":240,"y":144,"w":48,"h":48},"ranks":5,"prereq":"0"},"6232":{"id":6232,"name":"Veteran's Scars","description":["+10 Health","+20 Health","+30 Health","+40 Health","+50 Health"],"image":{"full":"6232.png","sprite":"mastery0.png","group":"mastery","x":288,"y":144,"w":48,"h":48},"ranks":5,"prereq":"0"},"6241":{"id":6241,"name":"Insight","description":["Reduces the cooldown of Summoner Spells by 15%"],"image":{"full":"6241.png","sprite":"mastery0.png","group":"mastery","x":336,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6242":{"id":6242,"name":"Perseverance","description":["+50% Base Health Regen, increased to +200% when below 25% Health"],"image":{"full":"6242.png","sprite":"mastery0.png","group":"mastery","x":384,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6243":{"id":6243,"name":"Fearless","description":["Gain 10% +1.5 per level bonus Armor and Magic Resist when damaged by an enemy champion for 2 seconds (9s Cooldown)"],"image":{"full":"6243.png","sprite":"mastery0.png","group":"mastery","x":432,"y":144,"w":48,"h":48},"ranks":1,"prereq":"0"},"6251":{"id":6251,"name":"Swiftness","description":["+3% Tenacity and Slow Resist","+6% Tenacity and Slow Resist","+9% Tenacity and Slow Resist","+12% Tenacity and Slow Resist","+15% Tenacity and Slow Resist"],"image":{"full":"6251.png","sprite":"mastery0.png","group":"mastery","x":0,"y":192,"w":48,"h":48},"ranks":5,"prereq":"0"},"6252":{"id":6252,"name":"Legendary Guardian","description":["+0.6 Armor and Magic Resist for each nearby enemy champion","+1.2 Armor and Magic Resist for each nearby enemy champion","+1.8 Armor and Magic Resist for each nearby enemy champion","+2.4 Armor and Magic Resist for each nearby enemy champion","+3 Armor and Magic Resist for each nearby enemy champion"],"image":{"full":"6252.png","sprite":"mastery0.png","group":"mastery","x":48,"y":192,"w":48,"h":48},"ranks":5,"prereq":"0"},"6261":{"id":6261,"name":"Grasp of the Undying","description":["Every 4 seconds in combat, your next attack against an enemy champion deals damage equal to 3% of your max Health and heals you for 1.5% of your max Health (halved for ranged champions, deals magic damage)"],"image":{"full":"6261.png","sprite":"mastery0.png","group":"mastery","x":96,"y":192,"w":48,"h":48},"ranks":1,"prereq":"0"},"6262":{"id":6262,"name":"Courage of the Colossus","description":["Gain a shield for 3-54 (+5% of your maximum health) for each nearby enemy champion for 3 seconds after hitting an enemy champion with a stun, taunt, snare, or knock up (45-30 second cooldown, based on level)."],"image":{"full":"6262.png","sprite":"mastery0.png","group":"mastery","x":144,"y":192,"w":48,"h":48},"ranks":1,"prereq":"0"},"6263":{"id":6263,"name":"Stoneborn Pact","description":["Gain 5% total health. Your movement impairing effects brand enemy champions with an earthen rune for 4 seconds. Other allied champions who attack branded enemies heal for 5 + 2.5% of your maximum health over 2 seconds (halved if you are ranged)."],"image":{"full":"6263.png","sprite":"mastery0.png","group":"mastery","x":192,"y":192,"w":48,"h":48},"ranks":1,"prereq":"0"},"6311":{"id":6311,"name":"Wanderer","description":["+0.6% Movement Speed out of combat","+1.2% Movement Speed out of combat","+1.8% Movement Speed out of combat","+2.4% Movement Speed out of combat","+3% Movement Speed out of combat"],"image":{"full":"6311.png","sprite":"mastery0.png","group":"mastery","x":240,"y":48,"w":48,"h":48},"ranks":5,"prereq":"0"},"6312":{"id":6312,"name":"Savagery","description":["Single target attacks and spells deal 1 bonus damage to minions and monsters","Single target attacks and spells deal 2 bonus damage to minions and monsters","Single target attacks and spells deal 3 bonus damage to minions and monsters","Single target attacks and spells deal 4 bonus damage to minions and monsters","Single target attacks and spells deal 5 bonus damage to minions and monsters"],"image":{"full":"6312.png","sprite":"mastery0.png","group":"mastery","x":288,"y":48,"w":48,"h":48},"ranks":5,"prereq":"0"},"6321":{"id":6321,"name":"Runic Affinity","description":["Buffs from neutral monsters last 15% longer"],"image":{"full":"6321.png","sprite":"mastery0.png","group":"mastery","x":336,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6322":{"id":6322,"name":"Secret Stash","description":["Your Potions and Elixirs last 10% longer.
Your Health Potions are replaced with Biscuits that restore 15 Health and Mana instantly on use"],"image":{"full":"6322.png","sprite":"mastery0.png","group":"mastery","x":384,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6323":{"id":6323,"name":"Assassin","description":["Deal 2% increased damage to champions when no allied champions are nearby"],"image":{"full":"6323.png","sprite":"mastery0.png","group":"mastery","x":432,"y":48,"w":48,"h":48},"ranks":1,"prereq":"0"},"6331":{"id":6331,"name":"Merciless","description":["Deal 0.6% increased damage to champions below 40% Health","Deal 1.2% increased damage to champions below 40% Health","Deal 1.8% increased damage to champions below 40% Health","Deal 2.4% increased damage to champions below 40% Health","Deal 3% increased damage to champions below 40% Health"],"image":{"full":"6331.png","sprite":"mastery0.png","group":"mastery","x":0,"y":96,"w":48,"h":48},"ranks":5,"prereq":"0"},"6332":{"id":6332,"name":"Meditation","description":["Regenerate 0.25% of your missing Mana every 5 seconds","Regenerate 0.5% of your missing Mana every 5 seconds","Regenerate 0.75% of your missing Mana every 5 seconds","Regenerate 1.0% of your missing Mana every 5 seconds","Regenerate 1.25% of your missing Mana every 5 seconds"],"image":{"full":"6332.png","sprite":"mastery0.png","group":"mastery","x":48,"y":96,"w":48,"h":48},"ranks":5,"prereq":"0"},"6341":{"id":6341,"name":"Greenfather's Gift","description":["Stepping into brush causes your next damaging attack or ability to deal 3% of your target's current health as bonus magic damage (9s Cooldown)"],"image":{"full":"6341.png","sprite":"mastery0.png","group":"mastery","x":96,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"},"6342":{"id":6342,"name":"Bandit","description":["Gain 1 gold for each nearby minion killed by an ally.
Gain 3 gold (10 if melee) when hitting an enemy champion with a basic attack (5 second cooldown)"],"image":{"full":"6342.png","sprite":"mastery0.png","group":"mastery","x":144,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"},"6343":{"id":6343,"name":"Dangerous Game","description":["Champion kills and assists restore 5% of your missing Health and Mana"],"image":{"full":"6343.png","sprite":"mastery0.png","group":"mastery","x":192,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"},"6351":{"id":6351,"name":"Precision","description":["Gain 1.2 Lethality and 0.3 + 0.05 per level Magic Penetration","Gain 2.4 Lethality and 0.6 + 0.10 per level Magic Penetration","Gain 3.6 Lethality and 0.9 + 0.15 per level Magic Penetration","Gain 4.8 Lethality and 1.2 + 0.20 per level Magic Penetration","Gain 6 Lethality and 1.5 + 0.25 per level Magic Penetration"],"image":{"full":"6351.png","sprite":"mastery0.png","group":"mastery","x":240,"y":96,"w":48,"h":48},"ranks":5,"prereq":"0"},"6352":{"id":6352,"name":"Intelligence","description":["Your Cooldown Reduction cap is increased to 41% and you gain 1% Cooldown Reduction","Your Cooldown Reduction cap is increased to 42% and you gain 2% Cooldown Reduction","Your Cooldown Reduction cap is increased to 43% and you gain 3% Cooldown Reduction","Your Cooldown Reduction cap is increased to 44% and you gain 4% Cooldown Reduction","Your Cooldown Reduction cap is increased to 45% and you gain 5% Cooldown Reduction"],"image":{"full":"6352.png","sprite":"mastery0.png","group":"mastery","x":288,"y":96,"w":48,"h":48},"ranks":5,"prereq":"0"},"6361":{"id":6361,"name":"Stormraider's Surge","description":["Dealing 30% of a champion's max Health within 2.5 seconds grants you 40% Movement Speed and 75% Slow Resistance for 3 seconds (10 second cooldown)."],"image":{"full":"6361.png","sprite":"mastery0.png","group":"mastery","x":336,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"},"6362":{"id":6362,"name":"Thunderlord's Decree","description":["Your 3rd attack or damaging spell against the same enemy champion calls down a lightning strike, dealing magic damage in the area.
Damage: 10 per level, plus 30% of your Bonus Attack Damage, and 10% of your Ability Power (25-15 second cooldown, based on level)."],"image":{"full":"6362.png","sprite":"mastery0.png","group":"mastery","x":384,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"},"6363":{"id":6363,"name":"Windspeaker's Blessing","description":["Your heals and shields are 10% stronger. Additionally, your shields and heals on other allies increase their armor by 5-22 (based on level) and their magic resistance by half that amount for 3 seconds."],"image":{"full":"6363.png","sprite":"mastery0.png","group":"mastery","x":432,"y":96,"w":48,"h":48},"ranks":1,"prereq":"0"}}
================================================
FILE: api_data/runes.js
================================================
module.exports = '';
================================================
FILE: api_data/skills.json
================================================
{"Aatrox":{"id":266,"key":"Aatrox","name":"Aatrox","title":"the Darkin Blade","spells":[{"id":"AatroxQ","name":"Dark Flight","description":"Aatrox takes flight and slams down at a targeted location, dealing damage and knocking up enemies at the center of impact.","tooltip":"Aatrox takes flight and slams down at target location, dealing {{ e1 }} (+{{ a1 }}) physical damage and knocking up enemies at the center of impact for {{ e4 }} second.
Aatrox fills up 20% of the Blood Well upon cast.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12.5,12,11.5,11],"cooldownBurn":"13/12.5/12/11.5/11","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,35,60,95,120],[310,310,310,310,310],[190,190,190,190,190],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/35/60/95/120","310","190","1","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[25000,25000,25000,25000,25000],"rangeBurn":"25000","image":{"full":"AatroxQ.png","sprite":"spell0.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"AatroxW","name":"Blood Thirst / Blood Price","description":"While toggled on Aatrox deals bonus damage and fills a portion of his Blood Well every third subsequent attack. While toggled off Aatrox restores Health every third subsequent attack.","tooltip":"Toggle Off: Blood Thirst: Every third attack, Aatrox restores {{ e3 }} (+{{ f1*100 }}% Missing Health) Health.
Toggle On: Blood Price: Every third attack, Aatrox deals {{ e2 }} (+{{ a2 }}) bonus physical damage and fills up 20% of the Blood Well.","leveltip":{"label":["Heal","Damage"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[200,200,200,200,200],[45,80,115,150,185],[30,45,60,75,90],[50,50,50,50,50],[50,50,50,50,50],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"200","45/80/115/150/185","30/45/60/75/90","50","50","0.5","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.75,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"AatroxW.png","sprite":"spell0.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"AatroxE","name":"Blades of Torment","description":"Aatrox unleashes the power of his blade, dealing damage to enemies hit and slowing them.","tooltip":"Aatrox unleashes the power of his blade, dealing {{ e1 }} (+{{ a2 }}) physical damage to enemies hit and slowing them by {{ e2 }}% for {{ e3 }} seconds.
Aatrox fills up 20% of the Blood Well upon cast.","leveltip":{"label":["Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[70,110,150,190,230],[30,35,40,45,50],[2,2,2,2,2],[30,30,30,30,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","30/35/40/45/50","2","30","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.7,"key":"a2"}],"costType":" Health","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"AatroxE.png","sprite":"spell0.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ e4 }} Health"},{"id":"AatroxR","name":"Massacre","description":"Aatrox draws in the blood of his foes, damaging all nearby enemy champions around him and gaining increased Attack Speed and bonus Attack Range for a short duration.","tooltip":"Aatrox draws in the blood of his foes, dealing {{ e2 }} (+{{ a1 }}) magic damage to nearby enemy champions, filling up 20% of the Blood Well for each hit.
Aatrox gains {{ e3 }}% attack speed and {{ e5 }} attack range for {{ e8 }} seconds upon cast.","leveltip":{"label":["Damage","Attack Speed","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[0,0,0],"costBurn":"0","effect":[null,[12,12,12],[200,300,400],[40,50,60],[10,10,10],[175,175,175],[50,65,80],[20,20,20],[12,12,12],[0,0,0],[0,0,0]],"effectBurn":[null,"12","200/300/400","40/50/60","10","175","50/65/80","20","12","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"AatroxR.png","sprite":"spell0.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Ahri":{"id":103,"key":"Ahri","name":"Ahri","title":"the Nine-Tailed Fox","spells":[{"id":"AhriOrbofDeception","name":"Orb of Deception","description":"Ahri sends out and pulls back her orb, dealing magic damage on the way out and true damage on the way back. Ahri gains movement speed that decays while her orb is traveling.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage on the way out, and {{ e1 }} (+{{ a1 }}) true damage on the way back.
Ahri gains movement speed that decays while her orb is traveling.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[65,70,75,80,85],"costBurn":"65/70/75/80/85","effect":[null,[40,65,90,115,140],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/65/90/115/140","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"},{"link":"spelldamage","coeff":0.35,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[880,880,880,880,880],"rangeBurn":"880","image":{"full":"AhriOrbofDeception.png","sprite":"spell0.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AhriFoxFire","name":"Fox-Fire","description":"Ahri releases three fox-fires, that lock onto and attack nearby enemies.","tooltip":"Releases three fox-fires that lock on to nearby enemies (prioritizes Champions) dealing {{ e1 }} (+{{ a1 }}) magic damage.
Enemies hit with multiple fox-fires take 30% damage from each additional fox-fire beyond the first, for a maximum of {{ f1 }} damage to a single enemy.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[40,65,90,115,140],[12,19.5,27,34.5,42],[64,104,144,184,224],[30,30,30,30,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/65/90/115/140","12/19.5/27/34.5/42","64/104/144/184/224","30","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"AhriFoxFire.png","sprite":"spell0.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AhriSeduce","name":"Charm","description":"Ahri blows a kiss that damages and charms an enemy it encounters, causing them to walk harmlessly towards her.","tooltip":"Blows a kiss dealing {{ e1 }} (+{{ a1 }}) magic damage and charms an enemy causing them to walk harmlessly towards Ahri for {{ e2 }} second(s).","leveltip":{"label":["Damage","Duration"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[85,85,85,85,85],"costBurn":"85","effect":[null,[60,95,130,165,200],[1,1.25,1.5,1.75,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","1/1.25/1.5/1.75/2","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[975,975,975,975,975],"rangeBurn":"975","image":{"full":"AhriSeduce.png","sprite":"spell0.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AhriTumble","name":"Spirit Rush","description":"Ahri dashes forward and fires essence bolts, damaging 3 nearby enemies (prioritizes Champions). Spirit Rush can be cast up to three times before going on cooldown.","tooltip":"Nimbly dashes forward firing 3 essence bolts at nearby enemies (prioritizes Champions) dealing {{ e1 }} (+{{ a1 }}) magic damage. Can be cast up to three times within 10 seconds before going on cooldown.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,95,80],"cooldownBurn":"110/95/80","cost":[100,100,100],"costBurn":"100","effect":[null,[70,110,150],[10,20,30],[28,23,18],[2,2,2],[1,1,1],[10,10,10],[10,10,10],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"70/110/150","10/20/30","28/23/18","2","1","10","10","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450],"rangeBurn":"450","image":{"full":"AhriTumble.png","sprite":"spell0.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Akali":{"id":84,"key":"Akali","name":"Akali","title":"the Fist of Shadow","spells":[{"id":"AkaliMota","name":"Mark of the Assassin","description":"Akali spins her kama at a target enemy to deal Magic Damage and mark the target for 6 seconds. Akali's melee attacks against a marked target will trigger and consume the mark to cause additional damage and restore Energy.","tooltip":"Akali throws her kama at a target enemy to deal {{ e1 }} (+{{ a1 }}) magic damage and mark the target for {{ e4 }} seconds.
Akali's melee attacks against a marked target will consume the mark to deal {{ e2 }} (+{{ a2 }}) magic damage and restore {{ e3 }} energy.","leveltip":{"label":["Damage (initial)","Damage (secondary)","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[6,5.5,5,4.5,4],"cooldownBurn":"6/5.5/5/4.5/4","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[35,55,75,95,115],[45,70,95,120,145],[40,40,40,40,40],[6,6,6,6,6],[0,0,0,0,0],[0.4,0.4,0.4,0.4,0.4],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/55/75/95/115","45/70/95/120/145","40","6","0","0.4","4","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.5,"key":"a2"}],"costType":" Energy","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"AkaliMota.png","sprite":"spell0.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"AkaliSmokeBomb","name":"Twilight Shroud","description":"Akali teleports to a nearby location, leaving a cover of smoke at her previous location. While inside the shroud, Akali becomes Invisible and gains Movement Speed. Attacking or using abilities will briefly reveal her. Enemies inside the smoke have their Movement Speed reduced.","tooltip":"Akali teleports to a nearby location, leaving a cover of smoke at her previous location that lasts for {{ e2 }} seconds and slows enemies within its area by {{ e3 }}%.
While inside the shroud Akali gains Invisibility and {{ e6 }}% movement speed. Attacking or using abilities briefly removes Invisibility.
16","leveltip":{"label":["Movement Speed","Slow","Cost"],"effect":["{{ e6 }}% -> {{ e6NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[20,20,20,20,20],"cooldownBurn":"20","cost":[60,55,50,45,40],"costBurn":"60/55/50/45/40","effect":[null,[425,425,425,425,425],[8,8,8,8,8],[14,18,22,26,30],[250,250,250,250,250],[0,0,0,0,0],[20,40,60,80,100],[1,1,1,1,1],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"425","8","14/18/22/26/30","250","0","20/40/60/80/100","1","0.5","0","0"],"vars":[],"costType":" Energy","maxammo":"-1","range":[270,270,270,270,270],"rangeBurn":"270","image":{"full":"AkaliSmokeBomb.png","sprite":"spell0.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"AkaliShadowSwipe","name":"Crescent Slash","description":"Akali flourishes her kamas, dealing damage based on her bonus Attack Damage and Ability Power. When Crescent Slash kills a unit, it has a shorter cooldown.","tooltip":"Akali flourishes her kamas, slicing enemies for {{ e1 }} (+{{ a2 }})(+{{ a1 }}) physical damage.
If Crescent Slash kills an enemy, its cooldown is refunded by {{ e3 }}%.","leveltip":{"label":["Damage","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[5,4.5,4,3.5,3],"cooldownBurn":"5/4.5/4/3.5/3","cost":[60,55,50,45,40],"costBurn":"60/55/50/45/40","effect":[null,[70,100,130,160,190],[1,1,1,1,1],[60,60,60,60,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","1","60","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a2"},{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Energy","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"AkaliShadowSwipe.png","sprite":"spell0.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"AkaliShadowDance","name":"Shadow Dance","description":"Akali moves through shadows to quickly strike through her target, dealing damage and consuming an Essence of Shadow charge. Akali recharges Essence of Shadow charges periodically, max 3 stacks.","tooltip":"Akali quickly strikes through her target, dealing {{ e1 }} (+{{ a1 }}) magic damage.
Akali stores an Essence of Shadow on kills and assists as well as every {{ f1 }} seconds up to {{ e4 }} total.","leveltip":{"label":["Damage","Essence Refresh Timer"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f1 }} -> {{ f2 }}"]},"maxrank":3,"cooldown":[2,2,2],"cooldownBurn":"2","cost":[0,0,0],"costBurn":"0","effect":[null,[50,100,150],[2000,2000,2000],[1,1,1],[3,3,3],[1,1,1],[100,100,100],[200,200,200],[600,600,600],[225,225,225],[1,1,1]],"effectBurn":[null,"50/100/150","2000","1","3","1","100","200","600","225","1"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"},{"link":"@cooldownchampion","coeff":[30,22.5,15],"key":"f1"},{"link":"@cooldownchampion","coeff":[30,22.5,15],"key":"f1"},{"link":"@cooldownchampion","coeff":[22.5,15],"key":"f2"}],"costType":" Essence of Shadow","maxammo":"3","range":[700,700,700],"rangeBurn":"700","image":{"full":"AkaliShadowDance.png","sprite":"spell0.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ e5 }} Essence of Shadow"}]},"Alistar":{"id":12,"key":"Alistar","name":"Alistar","title":"the Minotaur","spells":[{"id":"Pulverize","name":"Pulverize","description":"Alistar smashes the ground, dealing damage to nearby enemies and tossing them into the air.","tooltip":"Alistar smashes the ground, dealing {{ e2 }} (+{{ a1 }}) magic damage and tossing nearby enemy units into the air for {{ e3 }} second.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[17,16,15,14,13],"cooldownBurn":"17/16/15/14/13","cost":[65,70,75,80,85],"costBurn":"65/70/75/80/85","effect":[null,[375,375,375,375,375],[60,105,150,195,240],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"375","60/105/150/195/240","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[365,365,365,365,365],"rangeBurn":"365","image":{"full":"Pulverize.png","sprite":"spell0.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Headbutt","name":"Headbutt","description":"Alistar rams a target with his head, dealing damage and knocking the target back.","tooltip":"Alistar rams into an enemy, dealing {{ e2 }} (+{{ a1 }}) magic damage and knocking them back.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[65,70,75,80,85],"costBurn":"65/70/75/80/85","effect":[null,[0,0,0,0,0],[55,110,165,220,275],[700,700,700,700,700],[0.75,0.75,0.75,0.75,0.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","55/110/165/220/275","700","0.75","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"Headbutt.png","sprite":"spell0.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AlistarE","name":"Trample","description":"Alistar tramples nearby enemy units, ignoring unit colision and gaining stacks if he damages an enemy champion. At full stacks Alistar's next basic attack against an enemy champion deals additional magic damage and stuns them.","tooltip":"Alistar tramples the ground, ignoring unit collision and dealing {{ f1 }} (+{{ f2 }}) magic damage over {{ e3 }} seconds to nearby enemies. Each pulse that damages at least one enemy champion grants Alistar a Trample stack.
At {{ e5 }} Trample stacks Alistar empowers his next basic attack against an enemy champion to deal an additional {{ f3 }} magic damage and stun for {{ e6 }} second.","leveltip":{"label":["Cooldown","Mana Cost","Trample Damage"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[12,11.5,11,10.5,10],"cooldownBurn":"12/11.5/11/10.5/10","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[100,125,150,175,200],[50,50,50,50,50],[5,5,5,5,5],[350,350,350,350,350],[5,5,5,5,5],[1,1,1,1,1],[5,5,5,5,5],[40,40,40,40,40],[15,15,15,15,15],[0,0,0,0,0]],"effectBurn":[null,"100/125/150/175/200","50","5","350","5","1","5","40","15","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"AlistarE.png","sprite":"spell0.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FerociousHowl","name":"Unbreakable Will","description":"Alistar lets out a wild roar, removing all crowd control effects on himself, and reducing incoming physical and magical damage for the duration.","tooltip":"Removes all disables from Alistar. For {{ e1 }} seconds Alistar takes {{ e2 }}% reduced physical and magical damage.","leveltip":{"label":["Damage Reduction","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[7,7,7],[50,60,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"7","50/60/70","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1,1,1],"rangeBurn":"1","image":{"full":"FerociousHowl.png","sprite":"spell0.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Amumu":{"id":32,"key":"Amumu","name":"Amumu","title":"the Sad Mummy","spells":[{"id":"BandageToss","name":"Bandage Toss","description":"Amumu tosses a sticky bandage at a target, stunning and damaging the target while he pulls himself to them.","tooltip":"Launches a bandage in a direction. If it hits an enemy unit, Amumu pulls himself to them, dealing {{ e1 }} (+{{ a1 }}) magic damage and stunning for {{ e2 }} second. ","leveltip":{"label":["Damage","Cooldown","Mana"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,14,12,10,8],"cooldownBurn":"16/14/12/10/8","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[80,130,180,230,280],[1,1,1,1,1],[1350,1350,1350,1350,1350],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/130/180/230/280","1","1350","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"BandageToss.png","sprite":"spell0.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AuraofDespair","name":"Despair","description":"Overcome by anguish, nearby enemies lose a percentage of their maximum Health each second and have their Curses refreshed.","tooltip":"Toggle: Amumu cries, refreshing Curses on nearby enemies and dealing magic damage equal to {{ e2 }} plus {{ e1 }} (+{{ a1 }})% of their maximum health each second.","leveltip":{"label":["Percent Health Damaged","Base Damage"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[1,1,1,1,1],"cooldownBurn":"1","cost":[8,8,8,8,8],"costBurn":"8","effect":[null,[1,1.25,1.5,1.75,2],[10,15,20,25,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1/1.25/1.5/1.75/2","10/15/20/25/30","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.01,"key":"a1"}],"costType":" Mana per Second","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"AuraofDespair.png","sprite":"spell0.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana per Second"},{"id":"Tantrum","name":"Tantrum","description":"Permanently reduces the physical damage Amumu would take. Amumu can unleash his rage, dealing damage to surrounding enemies. Each time Amumu is hit, the cooldown on Tantrum is reduced by 0.5 seconds.","tooltip":"Passive: Amumu takes {{ e1 }} reduced damage from physical attacks.
16","leveltip":{"label":["Damage Reduced","Cooldown","Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[35,35,35,35,35],"costBurn":"35","effect":[null,[2,4,6,8,10],[75,100,125,150,175],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2/4/6/8/10","75/100/125/150/175","0.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"Tantrum.png","sprite":"spell0.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CurseoftheSadMummy","name":"Curse of the Sad Mummy","description":"Amumu entangles surrounding enemy units in bandages, applying his Curse, damaging them and rendering them unable to attack or move.","tooltip":"Amumu entangles nearby enemy units, dealing {{ e1 }} (+{{ a1 }}) magic damage and applying Curse. Entangled enemies are unable to attack or move for 2 seconds.","leveltip":{"label":["Damage Dealt","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,130,110],"cooldownBurn":"150/130/110","cost":[100,150,200],"costBurn":"100/150/200","effect":[null,[150,250,350],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","2","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"CurseoftheSadMummy.png","sprite":"spell0.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Anivia":{"id":34,"key":"Anivia","name":"Anivia","title":"the Cryophoenix","spells":[{"id":"FlashFrost","name":"Flash Frost","description":"Anivia brings her wings together and summons a sphere of ice that flies towards her opponents, chilling and damaging anyone in its path. When the sphere explodes it does moderate damage in a radius, stunning anyone in the area.","tooltip":"A massive chunk of ice flies toward target location, dealing {{ e1 }} (+{{ a1 }}) magic damage.
At the end of its range or if Anivia activates the spell again, the missile detonates, doing {{ e1 }} (+{{ a1 }}) magic damage in a small area and stunning units for {{ e4 }} seconds.
Enemies damaged by Flash Frost are also slowed by {{ f1 }}% for {{ e5 }} seconds.","leveltip":{"label":["Damage","Stun Duration","Cooldown","Mana Cost "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[60,85,110,135,160],[13,12,11,10,9],[0,0,0,0,0],[1.1,1.2,1.3,1.4,1.5],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/85/110/135/160","13/12/11/10/9","0","1.1/1.2/1.3/1.4/1.5","3","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"FlashFrost.png","sprite":"spell0.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Crystallize","name":"Crystallize","description":"Anivia condenses the moisture in the air into an impassable wall of ice to block all movement. The wall only lasts a short duration before it melts.","tooltip":"Anivia summons an impassable wall of ice {{ e2 }} units wide, blocking all movement. The wall lasts for {{ e1 }} seconds before it melts.","leveltip":{"label":["Width"],"effect":["{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[17,17,17,17,17],"cooldownBurn":"17","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[5,5,5,5,5],[400,500,600,700,800],[4,5,6,7,8],[120,120,120,120,120],[250,250,250,250,250],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5","400/500/600/700/800","4/5/6/7/8","120","250","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"Crystallize.png","sprite":"spell0.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Frostbite","name":"Frostbite","description":"With a flap of her wings, Anivia blasts a freezing gust of wind at her target, dealing a low amount of damage. If the target was recently stunned by Flash Frost or damaged by a fully formed Glacial Storm, the damage they take is doubled.","tooltip":"Anivia blasts her target with a freezing wind, dealing {{ e1 }} (+{{ a1 }}) magic damage.
If a target was recently stunned by Anivia or damaged by a fully formed Glacial Storm, they take double damage.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[50,75,100,125,150],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"Frostbite.png","sprite":"spell0.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GlacialStorm","name":"Glacial Storm","description":"Anivia summons a driving rain of ice and hail to damage her enemies and slow their advance.","tooltip":"Toggle: Drains {{ e2 }} Mana per second.
Anivia calls forth a driving rain of ice and hail that increases in size over {{ e7 }} seconds, dealing {{ e1 }} (+{{ a1 }}) magic damage per second to targets and slowing their Movement Speed by {{ e4 }}%.
When the Glacial Storm is fully formed, it slows targets' Movement Speed by {{ f1 }}% and does {{ e3 }}% damage instead.","leveltip":{"label":["Damage Per Second","Chilled Slow Amount","Mana Cost Per Second"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":3,"cooldown":[6,6,6],"cooldownBurn":"6","cost":[75,75,75],"costBurn":"75","effect":[null,[40,60,80],[40,50,60],[300,300,300],[20,30,40],[0,0,0],[1,1,1],[1.5,1.5,1.5],[50,50,50],[800,800,800],[1000,1000,1000]],"effectBurn":[null,"40/60/80","40/50/60","300","20/30/40","0","1","1.5","50","800","1000"],"vars":[{"link":"spelldamage","coeff":0.125,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[750,750,750],"rangeBurn":"750","image":{"full":"GlacialStorm.png","sprite":"spell1.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Annie":{"id":1,"key":"Annie","name":"Annie","title":"the Dark Child","spells":[{"id":"Disintegrate","name":"Disintegrate","description":"Annie hurls a Mana infused fireball, dealing damage and refunding the Mana cost if it destroys the target.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage. Mana cost and half the cooldown are refunded if Disintegrate kills the target.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[80,115,150,185,220],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/115/150/185/220","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"Disintegrate.png","sprite":"spell1.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Incinerate","name":"Incinerate","description":"Annie casts a blazing cone of fire, dealing damage to all enemies in the area.","tooltip":"Casts a cone of fire dealing {{ e1 }} (+{{ a1 }}) magic damage to all enemies in the area.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[70,115,160,205,250],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.85,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"Incinerate.png","sprite":"spell1.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MoltenShield","name":"Molten Shield","description":"Grants Annie and Tibbers increased percentage Damage Resist and damages enemies who attack with basic attacks.","tooltip":"Annie grants herself and Tibbers {{ e1 }}% damage reduction for {{ e3 }} seconds.
While the shield is active, enemies who basic attack it take {{ e2 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage Reduction","Damage Return"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[16,22,28,34,40],[20,30,40,50,60],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"16/22/28/34/40","20/30/40/50/60","3","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[0,0,0,0,0],"rangeBurn":"0","image":{"full":"MoltenShield.png","sprite":"spell1.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"InfernalGuardian","name":"Summon: Tibbers","description":"Annie wills her bear Tibbers to life, dealing damage to units in the area. Tibbers can attack and also burns enemies that stand near him.","tooltip":"Summons Tibbers, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies in the target area. For the next 45 seconds, Tibbers burns nearby enemies for {{ e2 }} (+{{ a2 }}) per second and attacks for {{ e3 }} (+{{ f1 }}) as magic damage. Annie can control Tibbers by reactivating this ability.
Tibbers Enrages when: summoned; Annie uses Pyromania on an enemy Champion; and when Annie dies.
Enrages: Tibbers gains 275% Attack Speed and 100% Movement Speed, decaying over 3 seconds.","leveltip":{"label":["Damage","Tibbers Health","Tibbers Armor and Magic Resist","Tibbers Attack Damage","Tibbers Burn Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e0 }} -> {{ e0NL }}","{{ e7 }} -> {{ e7NL }}","{{ e3 }} -> {{ e3NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[150,275,400],[10,15,20],[50,75,100],[-0.1,-0.1,-0.1],[1,1,1],[3,3,3],[30,50,70],[0,900,1800],[0.15,0.15,0.15],[1200,2100,3000]],"effectBurn":[null,"150/275/400","10/15/20","50/75/100","-0.1","1","3","30/50/70","0/900/1800","0.15","1200/2100/3000"],"vars":[{"link":"spelldamage","coeff":0.65,"key":"a1"},{"link":"spelldamage","coeff":0.1,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600],"rangeBurn":"600","image":{"full":"InfernalGuardian.png","sprite":"spell1.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Ashe":{"id":22,"key":"Ashe","name":"Ashe","title":"the Frost Archer","spells":[{"id":"AsheQ","name":"Ranger's Focus","description":"Ashe builds up Focus by attacking. At maximum Focus, Ashe can cast Ranger's Focus to consume all stacks of Focus, temporarily increasing her Attack Speed and transforming her basic attack into a powerful flurry attack for the duration.","tooltip":"Passive: Basic attacks grant Focus for {{ e1 }} seconds, stacking up to {{ e2 }} times. Stacks fall off one at a time, and at {{ e2 }} stacks, Ranger's Focus can be cast, consuming all Focus.
Active: For {{ e3 }} seconds, Ashe gains {{ e4 }}% Attack Speed, and her basic attacks fire a flurry of arrows dealing {{ f1 }} physical damage. During this time, she does not stack Focus. Ranger's Focus applies Frost Shot.","leveltip":{"label":["Attack Speed Bonus","Flurry Attack Damage ratio"],"effect":["{{ e4 }}% -> {{ e4NL }}%","{{ e6 }} -> {{ e6NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[4,4,4,4,4],[4,4,4,4,4],[4,4,4,4,4],[20,25,30,35,40],[0.21,0.22,0.23,0.24,0.25],[1.05,1.1,1.15,1.2,1.25],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[0,0,0,0,0]],"effectBurn":[null,"4","4","4","20/25/30/35/40","0.21/0.22/0.23/0.24/0.25","1.05/1.1/1.15/1.2/1.25","1","1","1","0"],"vars":[],"costType":" Mana, {{ e2 }} Focus","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"AsheQ.png","sprite":"spell1.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana, {{ e2 }} Focus"},{"id":"Volley","name":"Volley","description":"Ashe fires 9 arrows in a cone for increased damage. Also applies Frost Shot.","tooltip":"Fires arrows in a cone, each dealing {{ e2 }} (+{{ a1 }}) physical damage. Enemies can block multiple arrows, but only take damage from the first.
Champion hits count as Critical Strikes for the purposes of Frost Shot.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,12.5,10,7.5,5],"cooldownBurn":"15/12.5/10/7.5/5","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[5,7,9,11,13],[20,35,50,65,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/7/9/11/13","20/35/50/65/80","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200,1200,1200],"rangeBurn":"1200","image":{"full":"Volley.png","sprite":"spell1.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AsheSpiritOfTheHawk","name":"Hawkshot","description":"Ashe sends her Hawk Spirit on a scouting mission anywhere on the map.","tooltip":"Reveals terrain as it flies toward target location anywhere on the map. Grants vision for {{ e4 }} seconds. Ashe can store up to 2 charges of Hawkshot.","leveltip":{"label":["Recharge Time"],"effect":["{{ ammorechargetime }} -> {{ ammorechargetimeNL }}"]},"maxrank":5,"cooldown":[5,5,5,5,5],"cooldownBurn":"5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[3,3,3,3,3],[50,90,130,170,210],[25000,25000,25000,25000,25000],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"3","50/90/130/170/210","25000","5","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"2","range":[25000,25000,25000,25000,25000],"rangeBurn":"25000","image":{"full":"AsheSpiritOfTheHawk.png","sprite":"spell1.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"EnchantedCrystalArrow","name":"Enchanted Crystal Arrow","description":"Ashe fires a missile of ice in a straight line. If the arrow collides with an enemy Champion, it deals damage and stuns the Champion, stunning for longer the farther arrow has traveled. In addition, surrounding enemy units take damage and are slowed.","tooltip":"Launches a crystal arrow of ice that stuns the first enemy Champion hit, dealing {{ e1 }} (+{{ a1 }}) magic damage. The farther the arrow flies, the longer the stun, up to {{ e2 }} seconds. Surrounding enemies take half damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[200,400,600],[3.5,3.5,3.5],[50,50,50],[3,3,3],[5,5,5],[1100,1200,1300],[1,1,1],[400,400,400],[0.5,0.5,0.5],[0,0,0]],"effectBurn":[null,"200/400/600","3.5","50","3","5","1100/1200/1300","1","400","0.5","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"EnchantedCrystalArrow.png","sprite":"spell1.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"AurelionSol":{"id":136,"key":"AurelionSol","name":"Aurelion Sol","title":"The Star Forger","spells":[{"id":"AurelionSolQ","name":"Starsurge","description":"Aurelion Sol creates an expanding disk, which explodes to stun and damage enemies when it moves too far away from him.","tooltip":"First Press: Aurelion Sol creates a new stellar core, which grows over time and grants him {{ e2 }}% Movement Speed.
The core will detonate when it reaches his Outer Limit, applying {{ e1 }} (+{{ a1 }}) magic damage and a {{ e4 }} second stun.
Second Press: Detonate the core early. ","leveltip":{"label":["Damage","Stun Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[70,110,150,190,230],[10,10,10,10,10],[20,20,20,20,20],[1.1,1.2,1.3,1.4,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","10","20","1.1/1.2/1.3/1.4/1.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.65,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"AurelionSolQ.png","sprite":"spell1.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AurelionSolW","name":"Celestial Expansion","description":"Aurelion Sol pushes his stars farther out, magnifying their damage.","tooltip":"Passive: Increases Star base damage by {{ e2 }}.
Toggle: Aurelion Sol's Stars orbit at his Outer Limit and deal {{ e1 }}% damage, for a total of {{ f1 }} (+{{ f2 }}) magic damage. ","leveltip":{"label":["Passive Damage Bonus","Mana Cost Per Second","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[6,5.5,5,4.5,4],"cooldownBurn":"6/5.5/5/4.5/4","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[150,150,150,150,150],[5,10,15,20,25],[22,24,26,28,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"150","5/10/15/20/25","22/24/26/28/30","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana plus {{ e3 }} Mana Per Second","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"AurelionSolW.png","sprite":"spell1.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana plus {{ e3 }} Mana Per Second"},{"id":"AurelionSolE","name":"Comet of Legend","description":"Aurelion Sol gains speed while moving in one continuous direction, and can take off flying for a long distance.","tooltip":"Passive: Continuously moving in one direction grants increasing Movement Speed up to {{ e2 }}%.
Active: Fly for {{ e3 }} units in the chosen direction. Only castable outside of combat. Aurelion Sol can see and be seen over walls while flying.
Taking champion or turret damage will force a landing and reset the passive movement speed. ","leveltip":{"label":["Movement Speed Cap ","Flight Range","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[60,55,50,45,40],"cooldownBurn":"60/55/50/45/40","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[5,6,7,8,9],[25,30,35,40,45],[3000,4000,5000,6000,7000],[600,600,600,600,600],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/6/7/8/9","25/30/35/40/45","3000/4000/5000/6000/7000","600","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[3000,4000,5000,6000,7000],"rangeBurn":"3000/4000/5000/6000/7000","image":{"full":"AurelionSolE.png","sprite":"spell1.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AurelionSolR","name":"Voice of Light","description":"Aurelion Sol projects a blast of pure starfire, damaging and slowing all enemies caught in it and knocking nearby enemies back to a safer distance.","tooltip":"Breathes out a blast of pure starfire, dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing by {{ e2 }}% for {{ e3 }} seconds.
The blast will also knock nearby enemies back to Aurelion Sol's Outer Limit. ","leveltip":{"label":["Damage","Slow ","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[40,50,60],[2,2,2],[0,0,0],[650,650,650],[50,50,50],[1300,1300,1300],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","40/50/60","2","0","650","50","1300","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1500,1500,1500],"rangeBurn":"1500","image":{"full":"AurelionSolR.png","sprite":"spell1.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Azir":{"id":268,"key":"Azir","name":"Azir","title":"the Emperor of the Sands","spells":[{"id":"AzirQWrapper","name":"Conquering Sands","description":"Azir sends all Sand Soldiers towards a location. Sand Soldiers deal magic damage to enemies they pass through and apply a slow for 1 second.","tooltip":"Azir sends all Sand Soldiers towards a location. Sand Soldiers deal {{ e1 }} (+{{ a1 }}) magic damage to enemies they pass through and apply a {{ e2 }}% slow for 1 second.
Enemies hit by multiple Sand Soldiers will not take additional damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f1 }} -> {{ f2 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[65,85,105,125,145],[25,25,25,25,25],[10,9,8,7,6],[70,70,70,70,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/85/105/125/145","25","10/9/8/7/6","70","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[875,875,875,875,875],"rangeBurn":"875","image":{"full":"AzirQWrapper.png","sprite":"spell1.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AzirW","name":"Arise!","description":"Azir summons a Sand Soldier to attack nearby targets for him, replacing his basic attack against targets within the soldier's range. Their attacks deal magic damage to enemies in a line. Arise! also passively grants attack speed to Azir and his Sand Soldiers.","tooltip":"Passive: Gains {{ e3 }}% attack speed.
Active: Azir summons a Sand Soldier for {{ e1 }} seconds. When Azir attacks an enemy in a soldier's range, the soldier attacks instead of Azir, dealing {{ f2 }} (+{{ a1 }}) magic damage to enemies in a line. If multiple soldiers strike the same target, each soldier after the first deals 25% damage.
Azir can store up to {{ maxammo }} Sand Soldiers at a time. A new soldier becomes available every {{ f1 }} seconds.
Sand Soldiers can attack targets outside of Azir's basic attack range. Sand Soldiers deactivate if they are too far away from Azir. Sand Soldiers expire twice as fast when near an enemy turret.","leveltip":{"label":["Recharge","Attack Speed"],"effect":["{{ f1 }} -> {{ f3 }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[9,9,9,9,9],[12,11,10,9,8],[20,30,40,50,60],[40,40,40,40,40],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"9","12/11/10/9/8","20/30/40/50/60","40","1.5","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"2","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"AzirW.png","sprite":"spell1.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AzirEWrapper","name":"Shifting Sands","description":"Azir dashes to one of his Sand Soldiers, damaging enemies. If he hits an enemy champion, he gains a shield.","tooltip":"Azir dashes to one of his Sand Soldiers, damaging enemies hit for {{ e3 }} (+{{ a1 }}) magic damage.
If Azir hits an enemy champion, his dash stops and he gains a shield for {{ e6 }} seconds that absorbs up to {{ e4 }} damage.","leveltip":{"label":["Damage","Cooldown","Shield"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ f2 }} -> {{ f3 }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[0.5,0.5,0.5,0.5,0.5],[19,18,17,16,15],[60,90,120,150,180],[80,120,160,200,240],[-0.5,-0.6,-0.7,-0.8,-0.9],[4,4,4,4,4],[1100,1100,1100,1100,1100],[60,60,60,60,60],[0.15,0.15,0.15,0.15,0.15],[0,0,0,0,0]],"effectBurn":[null,"0.5","19/18/17/16/15","60/90/120/150/180","80/120/160/200/240","-0.5/-0.6/-0.7/-0.8/-0.9","4","1100","60","0.15","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"AzirEWrapper.png","sprite":"spell1.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AzirR","name":"Emperor's Divide","description":"Azir summons a wall of soldiers which charge forward, knocking back and damaging enemies.","tooltip":"Azir summons a wall of armored soldiers that charge forward, knocking back enemies and dealing {{ e1 }} (+{{ a1 }}) magic damage. The soldiers then remain as a wall for {{ e4 }} seconds.
Enemies will be stopped by Emperor's Divide, even if they attempt to dash over the wall, but Azir and his allies can pass freely through it.
Emperor's Divide does not interact with Azir's basic attacks or spells.","leveltip":{"label":["Damage","Number of Soldiers","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,225,300],[0,0,0],[4,5,6],[3,3,3],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/225/300","0","4/5/6","3","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[250,250,250],"rangeBurn":"250","image":{"full":"AzirR.png","sprite":"spell1.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Bard":{"id":432,"key":"Bard","name":"Bard","title":"the Wandering Caretaker","spells":[{"id":"BardQ","name":"Cosmic Binding","description":"Bard fires a missile which will slow the first enemy struck, and continue onward. If it strikes a wall, it will stun the initial target; if it strikes another enemy, it will stun them both.","tooltip":"Bard fires an energy bolt, dealing {{ e1 }} (+{{ a1 }}) magic damage to one or two enemies. The first target hit will be slowed by {{ e3 }}% for {{ e4 }} second(s).
If the bolt hits another enemy or a wall, any enemies hit are stunned for {{ e2 }} second(s). ","leveltip":{"label":["Damage","Slow Duration","Stun Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[80,125,170,215,260],[1,1.2,1.4,1.6,1.8],[60,60,60,60,60],[1,1.2,1.4,1.6,1.8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/125/170/215/260","1/1.2/1.4/1.6/1.8","60","1/1.2/1.4/1.6/1.8","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.65,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000,25000,25000],"rangeBurn":"25000","image":{"full":"BardQ.png","sprite":"spell1.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BardW","name":"Caretaker's Shrine","description":"Reveals a healing shrine which powers up over a short time, disappearing after healing the first ally that touches it.","tooltip":"Bard raises a health shrine that immediately offers {{ e5 }} (+{{ a1 }}) health, but restores up to {{ e6 }} (+{{ a2 }}) health as it gathers power for 10 seconds. The shrine's effect also grants {{ e1 }}% decaying movement speed for {{ e2 }} seconds.
Bard can have up to {{ e3 }} shrines active at once, which remain until visited by an ally champion or crushed by an enemy champion.
Active Shrines: {{ f1 }} / {{ f2 }} ","leveltip":{"label":["Base Heal","Max Heal"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ e6 }} -> {{ e6NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[90,90,90,90,90],"costBurn":"90","effect":[null,[50,50,50,50,50],[1.5,1.5,1.5,1.5,1.5],[3,3,3,3,3],[0,0,0,0,0],[30,60,90,120,150],[70,110,150,190,230],[0,0,0,0,0],[10,10,10,10,10],[90,90,90,90,90],[0,0,0,0,0]],"effectBurn":[null,"50","1.5","3","0","30/60/90/120/150","70/110/150/190/230","0","10","90","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"BardW.png","sprite":"spell1.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BardE","name":"Magical Journey","description":"Bard opens a portal in nearby terrain. Allies and enemies alike can take a one-way trip through that terrain by moving into the portal.","tooltip":"Bard opens a one-way corridor through nearby terrain. Both allies and enemies can use the corridor by right-clicking on any part of it while near its entrance, with allies travelling {{ e2 }}% faster than enemies.
The corridor disappears after {{ e1 }} seconds. ","leveltip":{"label":["Cooldown","Ally Travel Speed Bonus"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[10,10,10,10,10],[10,20,30,40,50],[800,800,800,800,800],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10","10/20/30/40/50","800","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"BardE.png","sprite":"spell1.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BardR","name":"Tempered Fate","description":"Bard sends spirit energy arcing to a location, putting all champions, minions, monsters, and turrets hit into stasis for a brief time.","tooltip":"Bard sends magical energy arcing to a target location. On impact, all champions, minions, monsters, and turrets in the target area are put in stasis, becoming invincible, untargetable, and unable to act for {{ e1 }} seconds.
Epic monsters are also put into stasis, despite normally being immune to disables.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,115,90],"cooldownBurn":"130/115/90","cost":[100,100,100],"costBurn":"100","effect":[null,[2.5,2.5,2.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"2.5","0","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[3400,3400,3400],"rangeBurn":"3400","image":{"full":"BardR.png","sprite":"spell1.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Blitzcrank":{"id":53,"key":"Blitzcrank","name":"Blitzcrank","title":"the Great Steam Golem","spells":[{"id":"RocketGrab","name":"Rocket Grab","description":"Blitzcrank fires his right hand to grab an opponent on its path, dealing damage and dragging it back to him.","tooltip":"Blitzcrank fires his right hand. If it encounters an enemy unit it will stun them and deal {{ e1 }} (+{{ a1 }}) magic damage while he pulls them to himself.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,19,18,17,16],"cooldownBurn":"20/19/18/17/16","cost":[100,100,100,100,100],"costBurn":"100","effect":[null,[80,135,190,245,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/135/190/245/300","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"RocketGrab.png","sprite":"spell1.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Overdrive","name":"Overdrive","description":"Blitzcrank super charges himself to get dramatically increased Movement and Attack Speed. He is temporarily slowed after the effect ends.","tooltip":"Blitzcrank supercharges himself, gaining {{ e1 }}% Movement Speed and {{ e2 }}% Attack Speed for {{ e4 }} seconds. The Movement Speed bonus decays over the duration.
When Overdrive ends, Blitzcrank's Movement Speed is slowed by {{ e3 }}% for {{ e5 }} seconds.","leveltip":{"label":["Movement Speed","Attack Speed"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[75,75,75,75,75],"costBurn":"75","effect":[null,[70,75,80,85,90],[30,38,46,54,62],[30,30,30,30,30],[5,5,5,5,5],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/75/80/85/90","30/38/46/54/62","30","5","1.5","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"Overdrive.png","sprite":"spell1.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PowerFist","name":"Power Fist","description":"Blitzcrank charges up his fist to make his next attack deal double damage and pop his target up in the air.","tooltip":"Blitzcrank charges up his fist to make his next attack deal double his total attack damage as physical damage and pop his target up in the air.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[25,25,25,25,25],"costBurn":"25","effect":[null,[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","0","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"PowerFist.png","sprite":"spell1.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"StaticField","name":"Static Field","description":"Passively causes lightning bolts to damage a nearby enemy. Additionally, Blitzcrank can activate this ability to damage nearby enemies and silence them for 0.5 seconds, but doing so removes the passive lightning until Static Field becomes available again.","tooltip":"Passive: Lightning arcs off of Blitzcrank to hit a random nearby enemy for {{ e1 }} (+{{ a1 }}) magic damage every 2.5 seconds.
Active: Deals {{ e2 }} (+{{ a2 }}) magic damage and silences surrounding enemy units for 0.5 seconds. The passive is not in effect during the cooldown.","leveltip":{"label":["Lightning Damage","Activation Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[60,40,20],"cooldownBurn":"60/40/20","cost":[100,100,100],"costBurn":"100","effect":[null,[100,200,300],[250,375,500],[2.5,2.5,2.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/200/300","250/375/500","2.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":1,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600],"rangeBurn":"600","image":{"full":"StaticField.png","sprite":"spell1.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Brand":{"id":63,"key":"Brand","name":"Brand","title":"the Burning Vengeance","spells":[{"id":"BrandQ","name":"Sear","description":"Brand launches a ball of fire forward that deals magic damage. If the target is ablaze, Sear will stun the target for 1.5 seconds.","tooltip":"Brand launches a ball of fire forward that deals {{ e1 }} (+{{ a1 }}) magic damage.
Blaze: If the target is ablaze, Sear will stun the target for 1.5 seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7.5,7,6.5,6],"cooldownBurn":"8/7.5/7/6.5/6","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[80,110,140,170,200],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/110/140/170/200","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.55,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"BrandQ.png","sprite":"spell1.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BrandW","name":"Pillar of Flame","description":"After a short delay, Brand creates a Pillar of Flame at a target area, dealing magic damage to enemy units within the area. Units that are ablaze take an additional 25% damage.","tooltip":"After a short delay, Brand creates a Pillar of Flame at a target area, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemy units within the area.
Blaze: Units that are ablaze take an additional 25% damage from Pillar of Flame.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9.5,9,8.5,8],"cooldownBurn":"10/9.5/9/8.5/8","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[75,120,165,210,255],[20,40,60,80,100],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/120/165/210/255","20/40/60/80/100","0.25","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"BrandW.png","sprite":"spell1.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BrandE","name":"Conflagration","description":"Brand conjures a powerful blast at his target, dealing magic damage to them. If the target is ablaze, Conflagration spreads to nearby enemies.","tooltip":"Brand conjures a powerful blast at his target, dealing {{ e1 }} (+{{ a1 }}) magic damage.
Blaze: If the target is ablaze, Conflagration spreads to nearby enemies. ","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[70,90,110,130,150],[375,375,375,375,375],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/90/110/130/150","375","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"BrandE.png","sprite":"spell1.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BrandR","name":"Pyroclasm","description":"Brand unleashes a devastating torrent of fire, dealing magic damage each time it bounces, up to 5 bounces. Bounces prioritize stacking Blaze to max on Champions. If a target is ablaze, Pyroclasm will briefly slow them.","tooltip":"Brand unleashes a devastating torrent of fire, dealing {{ e1 }} (+{{ a1 }}) magic damage each time it bounces up to 5 bounces. Bounces prioritize stacking Blaze to max on Champions.
Blaze: If the target is ablaze, Pyroclasm will briefly slow the target by {{ e4 }}%.","leveltip":{"label":["Damage per Bounce","Slow Amount","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[105,90,75],"cooldownBurn":"105/90/75","cost":[100,100,100],"costBurn":"100","effect":[null,[100,200,300],[5,7,9],[150,225,300],[30,45,60],[0.25,0.25,0.25],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/200/300","5/7/9","150/225/300","30/45/60","0.25","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[750,750,750],"rangeBurn":"750","image":{"full":"BrandR.png","sprite":"spell1.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Braum":{"id":201,"key":"Braum","name":"Braum","title":"the Heart of the Freljord","spells":[{"id":"BraumQ","name":"Winter's Bite","description":"Braum propels freezing ice from his shield, slowing and dealing magic damage.
Applies a stack of Concussive Blows.","tooltip":"Braum propels freezing ice from his shield dealing {{ e1 }} (+{{ f1 }}) [2.5% of Braum's Max Health] magic damage to the first enemy hit and slowing them by {{ e2 }}%, decaying over the next {{ e5 }} seconds.
Applies a stack of Concussive Blows. ","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[55,60,65,70,75],"costBurn":"55/60/65/70/75","effect":[null,[60,105,150,195,240],[70,70,70,70,70],[30,30,30,30,30],[0.02,0.02,0.02,0.02,0.02],[2,2,2,2,2],[1050,1050,1050,1050,1050],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","70","30","0.02","2","1050","4","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"BraumQ.png","sprite":"spell1.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BraumW","name":"Stand Behind Me","description":"Braum leaps to a target allied champion or minion. On arrival, Braum and the ally gain Armor and Magic Resist for a few seconds.","tooltip":"Braum leaps to target allied champion or minion.
On arrival, Braum and the ally gain {{ f3 }} Armor and {{ f4 }} Magic Resist ({{ e4 }} plus {{ e3 }}% of Braum's bonus Armor/Magic Resist) for {{ e1 }} seconds.","leveltip":{"label":["Base Armor and Magic Resist","Defensive Scaling","Cooldown","Mana Cost"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[3,3,3,3,3],[750,750,750,750,750],[10,11.5,13,14.5,16],[15,17.5,20,22.5,25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"3","750","10/11.5/13/14.5/16","15/17.5/20/22.5/25","0","0","0","0","0","0"],"vars":[{"link":"@special.BraumWArmor","coeff":0,"key":"f3"},{"link":"@special.BraumWMR","coeff":0,"key":"f4"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"BraumW.png","sprite":"spell1.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BraumE","name":"Unbreakable","description":"Braum raises his shield in a direction for several seconds, intercepting all projectiles causing them to hit him and be destroyed. He negates the damage of the first attack completely and reduces the damage of all subsequent attacks from this direction.","tooltip":"Braum reduces incoming damage and blocks for allies behind him. Braum raises his shield in a direction for {{ e2 }} seconds negating the damage of the next attack from that direction. Subsequent attacks deal {{ e3 }}% reduced damage.
Braum intercepts projectiles, causing them to hit him and be destroyed.
Braum gains {{ e4 }}% Movement Speed for the duration.","leveltip":{"label":["Duration","Damage Reduction","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[30,35,40,45,50],"costBurn":"30/35/40/45/50","effect":[null,[0,0,0,0,0],[3,3.25,3.5,3.75,4],[30,32.5,35,37.5,40],[10,10,10,10,10],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","3/3.25/3.5/3.75/4","30/32.5/35/37.5/40","10","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000,25000,25000],"rangeBurn":"25000","image":{"full":"BraumE.png","sprite":"spell1.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BraumRWrapper","name":"Glacial Fissure","description":"Braum slams the ground, knocking up enemies nearby and in a line in front of him. A fissure is left along the line that slows enemies.","tooltip":"Braum slams the ground, knocking up enemies nearby and in a line in front of him. A fissure is left along the line for {{ e3 }} seconds, slowing enemies above it by {{ e4 }}%.
Enemies hit take {{ e1 }} (+{{ a1 }}) magic damage. The first champion hit is knocked up for {{ e5 }} seconds, subsequent enemies are knocked up briefly.","leveltip":{"label":["Damage","Knockup Duration","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[0.3,0.3,0.3],[4,4,4],[40,50,60],[1,1.25,1.5],[0.25,0.25,0.25],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","0.3","4","40/50/60","1/1.25/1.5","0.25","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1250,1250,1250],"rangeBurn":"1250","image":{"full":"BraumRWrapper.png","sprite":"spell1.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Caitlyn":{"id":51,"key":"Caitlyn","name":"Caitlyn","title":"the Sheriff of Piltover","spells":[{"id":"CaitlynPiltoverPeacemaker","name":"Piltover Peacemaker","description":"Caitlyn revs up her rifle for 1 second to unleash a penetrating shot that deals physical damage (deals less damage to subsequent targets).","tooltip":"Revs the rifle for {{ e4 }} second to fire a narrow piercing shot dealing {{ e1 }} (+{{ f1 }}) physical damage. After hitting any target, it opens into a wider shot that deals {{ e2 }}% less damage.
Always deals full damage to trap revealed targets.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[30,70,110,150,190],[33,33,33,33,33],[50,50,50,50,50],[1,1,1,1,1],[1.3,1.4,1.5,1.6,1.7],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/70/110/150/190","33","50","1","1.3/1.4/1.5/1.6/1.7","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1250,1250,1250,1250,1250],"rangeBurn":"1250","image":{"full":"CaitlynPiltoverPeacemaker.png","sprite":"spell1.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CaitlynYordleTrap","name":"Yordle Snap Trap","description":"Caitlyn sets a trap to find sneaky yordles. When sprung, the trap reveals and immobilizes the enemy champion for 1.5 seconds.","tooltip":"Sets traps that an enemy Champion can spring, immobilizing them for {{ e1 }} seconds and granting True Sight for a short duration.
Traps last for {{ e3 }} seconds. {{ e5 }} traps may be active at once.
Trapped enemies take an additional {{ e2 }} (+{{ f1 }}) increased damage from Headshot.","leveltip":{"label":["Recharge Rate","Maximum Traps","Bonus Headshot Damage on Trapped Targets"],"effect":["{{ ammorechargetime }} -> {{ ammorechargetimeNL }}","{{ e4 }} -> {{ e4NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[2,2,2,2,2],[30,70,110,150,190],[90,90,90,90,90],[3,3,4,4,5],[3,3,4,4,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2","30/70/110/150/190","90","3/3/4/4/5","3/3/4/4/5","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"2","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"CaitlynYordleTrap.png","sprite":"spell1.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CaitlynEntrapment","name":"90 Caliber Net","description":"Caitlyn fires a heavy net to slow her target. The recoil knocks Caitlyn back.","tooltip":"Fires a net, knocking Caitlyn backwards. The net deals {{ e1 }} (+{{ a1 }}) magic damage and slows the first enemy hit by {{ e3 }}% for {{ e2 }} second.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,14.5,13,11.5,10],"cooldownBurn":"16/14.5/13/11.5/10","cost":[75,75,75,75,75],"costBurn":"75","effect":[null,[70,110,150,190,230],[1,1,1,1,1],[50,50,50,50,50],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","1","50","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"CaitlynEntrapment.png","sprite":"spell1.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CaitlynAceintheHole","name":"Ace in the Hole","description":"Caitlyn takes time to line up the perfect shot, dealing massive damage to a single target at a huge range. Enemy champions can intercept the bullet for their ally.","tooltip":"Takes a second to line up the perfect shot on an enemy Champion at up to {{ e2 }} range. The shot deals {{ e1 }} (+{{ f1 }}) physical damage, but other enemy Champions can intercept it.
Grants True Sight of the target during the channel.","leveltip":{"label":["Damage","Range","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[90,75,60],"cooldownBurn":"90/75/60","cost":[100,100,100],"costBurn":"100","effect":[null,[250,475,700],[2000,2500,3000],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250/475/700","2000/2500/3000","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":2,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[2000,2500,3000],"rangeBurn":"2000/2500/3000","image":{"full":"CaitlynAceintheHole.png","sprite":"spell1.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Camille":{"id":164,"key":"Camille","name":"Camille","title":"the Steel Shadow","spells":[{"id":"CamilleQ","name":"Precision Protocol","description":"Camille's next attack deals bonus damage and grants bonus movement speed. This spell can be recast for a short period of time, doing significantly increased bonus damage if Camille delays a period of time between the two attacks.","tooltip":"Camille's next basic attack deals {{ f1 }} bonus physical damage and increases her movement speed by {{ e4 }}% for {{ e5 }} second. This ability can be recast in the next {{ e1 }} seconds at no cost.
If the second Precision Protocol attack hits at least {{ e1 }} seconds after the first, the bonus damage is increased by {{ e8 }}% to {{ f2 }} and {{ f3 }}% of the attack is converted into true damage.
16","leveltip":{"label":["Total AD Ratio","Cooldown","Movement Speed"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":5,"cooldown":[9,8.25,7.5,6.75,6],"cooldownBurn":"9/8.25/7.5/6.75/6","cost":[25,25,25,25,25],"costBurn":"25","effect":[null,[3,3,3,3,3],[50,50,50,50,50],[20,25,30,35,40],[20,25,30,35,40],[1,1,1,1,1],[0.4,0.4,0.4,0.4,0.4],[0.04,0.04,0.04,0.04,0.04],[80,80,80,80,80],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"3","50","20/25/30/35/40","20/25/30/35/40","1","0.4","0.04","80","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"CamilleQ.png","sprite":"spell1.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CamilleW","name":"Tactical Sweep","description":"Camille blasts in a cone after a delay, dealing damage. Enemies in the outer half are slowed and take extra damage, while also healing Camille.","tooltip":"Camille winds up and then slices in a direction, dealing {{ e1 }} (+{{ f1 }}) physical damage to enemies hit.
Enemies hit by the outer half are slowed by {{ e4 }}%, decaying over {{ e2 }} seconds. They take extra physical damage equal to {{ e5 }}% (+{{ f2 }}%) of their maximum health, and Camille heals for {{ e9 }}% of the bonus damage dealt to champions.
16","leveltip":{"label":["Mana Cost","Damage","Maximum Health Damage","Cooldown"],"effect":["{{ cost }} -> {{ costNL }}","{{ e1 }} -> {{ e1NL }}","{{ e5 }}% -> {{ e5NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,13.5,12,10.5,9],"cooldownBurn":"15/13.5/12/10.5/9","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[65,95,125,155,185],[2,2,2,2,2],[0.75,0.75,0.75,0.75,0.75],[80,80,80,80,80],[6,6.5,7,7.5,8],[650,650,650,650,650],[30,30,30,30,30],[50,50,50,50,50],[100,100,100,100,100],[0.1,0.1,0.1,0.1,0.1]],"effectBurn":[null,"65/95/125/155/185","2","0.75","80","6/6.5/7/7.5/8","650","30","50","100","0.1"],"vars":[],"costType":" Mana","maxammo":"-1","range":[610,610,610,610,610],"rangeBurn":"610","image":{"full":"CamilleW.png","sprite":"spell1.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CamilleE","name":"Hookshot","description":"Camille pulls herself to a wall, leaping off and knocking up enemies upon landing.","tooltip":"First Cast: Fire a hookshot that attaches to terrain, pulling Camille to it and allowing Hookshot to be recast for 1 second.
Second Cast: Camille leaps from the wall, colliding with the first enemy champion hit. Upon landing, she deals {{ e3 }} (+{{ f1 }}) physical damage and a {{ e1 }} second stun to nearby enemies. Dashes towards enemy champions travel twice as far and grant {{ e2 }}% attack speed for {{ e5 }} seconds on impact.","leveltip":{"label":["Cooldown","Damage","Attack Speed"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e3 }} -> {{ e3NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[16,14.5,13,11.5,10],"cooldownBurn":"16/14.5/13/11.5/10","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[0.75,0.75,0.75,0.75,0.75],[40,50,60,70,80],[70,115,160,205,250],[1050,1050,1050,1050,1050],[5,5,5,5,5],[1,1,1,1,1],[800,800,800,800,800],[400,400,400,400,400],[130,130,130,130,130],[0,0,0,0,0]],"effectBurn":[null,"0.75","40/50/60/70/80","70/115/160/205/250","1050","5","1","800","400","130","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"CamilleE.png","sprite":"spell1.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CamilleR","name":"The Hextech Ultimatum","description":"Camille dashes to target champion, anchoring them to the area. She also deals bonus magic damage to the target with her basic attacks.","tooltip":"Camille briefly becomes untargetable and leaps onto an enemy champion, interrupting channels and locking them into an area they cannot escape by any means for {{ e3 }} seconds. Other nearby enemies are knocked away. Her basic attacks against the trapped enemy deal bonus magic damage equal to {{ e2 }} plus {{ e1 }}% of their current health.
16","leveltip":{"label":["Duration","Cooldown","Bonus Damage","Current Health Damage"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%>"]},"maxrank":3,"cooldown":[140,115,90],"cooldownBurn":"140/115/90","cost":[100,100,100],"costBurn":"100","effect":[null,[4,6,8],[5,10,15],[2.5,3.25,4],[-0.9,-0.9,-0.9],[425,425,425],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"4/6/8","5/10/15","2.5/3.25/4","-0.9","425","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[475,475,475],"rangeBurn":"475","image":{"full":"CamilleR.png","sprite":"spell2.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Cassiopeia":{"id":69,"key":"Cassiopeia","name":"Cassiopeia","title":"the Serpent's Embrace","spells":[{"id":"CassiopeiaQ","name":"Noxious Blast","description":"Cassiopeia blasts an area with Poison after a brief delay, granting her increased Movement Speed if she hits an enemy champion.","tooltip":"Blasts enemies in an area with Noxious Poison. If a champion is hit, Cassiopeia gains {{ e3 }}% Movement Speed decaying over {{ e4 }} seconds.
Noxious Poison deals {{ e1 }} (+{{ a1 }}) magic damage over {{ e2 }} seconds.","leveltip":{"label":["Base Damage","Movement Speed","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[3.5,3.5,3.5,3.5,3.5],"cooldownBurn":"3.5","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[75,120,165,210,255],[3,3,3,3,3],[30,35,40,45,50],[3,3,3,3,3],[7,7,7,7,7],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/120/165/210/255","3","30/35/40/45/50","3","7","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"CassiopeiaQ.png","sprite":"spell2.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CassiopeiaW","name":"Miasma","description":"Cassiopeia releases several clouds of poison, slowing, grounding, and lightly damaging enemies that pass through them. Grounded enemies cannot use Movement abilities.","tooltip":"Cassiopeia spews venom in an arc, leaving toxic clouds for {{ e4 }} seconds.
Enemies in the clouds are continually afflicted with Debilitating Poison, inflicting a decaying {{ e2 }}% slow and grounding them, prohibiting the use of Movement abilities. They also take {{ e1 }} (+{{ a1 }}) magic damage per second.
Miasma has a minimum cast range.","leveltip":{"label":["Base Damage","Slow Amount","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[20,35,50,65,80],[40,50,60,70,80],[1,1,1,1,1],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/35/50/65/80","40/50/60/70/80","1","5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.15,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"CassiopeiaW.png","sprite":"spell2.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CassiopeiaE","name":"Twin Fang","description":"Cassiopeia lets loose an attack that deals increased damage to Poisoned targets and heals her for a percentage of the damage dealt. If the target dies from this attack, Cassiopeia regains Mana.","tooltip":"Deal {{ f1 }}(+{{ a1 }}) magic damage to a target. If the target is killed by Twin Fang, or is killed during its flight, Cassiopeia gains {{ cost }} Mana.
If the victim is Poisoned when Twin Fang hits, it takes {{ e1 }} (+{{ a2 }}) additional magic damage and Cassiopeia heals for {{ f4 }}(+{{ f2 }}).","leveltip":{"label":["Bonus Poison Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[0.75,0.75,0.75,0.75,0.75],"cooldownBurn":"0.75","cost":[40,50,60,70,80],"costBurn":"40/50/60/70/80","effect":[null,[10,40,70,100,130],[0,0,0,0,0],[0.1,0.1,0.1,0.1,0.1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/40/70/100/130","0","0.1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.55,"key":"f1"},{"link":"spelldamage","coeff":0.1,"key":"a1"},{"link":"spelldamage","coeff":0.35,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"CassiopeiaE.png","sprite":"spell2.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CassiopeiaR","name":"Petrifying Gaze","description":"Cassiopeia releases a swirl of magical energy from her eyes, stunning any enemies in front of her that are facing her and slowing any others with their back turned.","tooltip":"Cassiopeia deals {{ e1 }} (+{{ a1 }}) magic damage to all enemies in front of her. Enemies facing her turn to stone and are stunned for {{ e3 }} seconds while enemies facing away are slowed by {{ e2 }}%.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[40,40,40],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","40","2","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[825,825,825],"rangeBurn":"825","image":{"full":"CassiopeiaR.png","sprite":"spell2.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Chogath":{"id":31,"key":"Chogath","name":"Cho'Gath","title":"the Terror of the Void","spells":[{"id":"Rupture","name":"Rupture","description":"Ruptures the ground at target location, popping enemy units into the air, dealing damage and slowing them.","tooltip":"Ruptures the ground at target location. Enemies caught in the rupture are launched into the air for {{ e5 }} second, take {{ e1 }} (+{{ a1 }}) magic damage, and are slowed by {{ e2 }}% for {{ e3 }} seconds.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[90,90,90,90,90],"costBurn":"90","effect":[null,[80,135,190,245,305],[60,60,60,60,60],[1.5,1.5,1.5,1.5,1.5],[0.625,0.625,0.625,0.625,0.625],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/135/190/245/305","60","1.5","0.63","1","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"Rupture.png","sprite":"spell2.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FeralScream","name":"Feral Scream","description":"Cho'Gath unleashes a terrible scream at enemies in a cone, dealing magic damage and Silencing enemies for a few seconds.","tooltip":"Silences enemies in a cone for {{ e2 }} seconds and deals {{ e1 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Cooldown","Silence Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[75,125,175,225,275],[1.5,1.625,1.75,1.875,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/125/175/225/275","1.5/1.625/1.75/1.875/2","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"FeralScream.png","sprite":"spell2.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VorpalSpikes","name":"Vorpal Spikes","description":"Cho'Gath's attacks passively release deadly spikes, dealing damage to all enemy units in front of him.","tooltip":"Toggle: Basic attacks launch spikes that deal {{ e1 }} (+{{ a1 }}) magic damage and apply spell effects. Spikes grow wider as Cho'Gath gains Feast stacks.","leveltip":{"label":["Damage"],"effect":[" {{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,35,50,65,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/35/50/65/80","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[40,40,40,40,40],"rangeBurn":"40","image":{"full":"VorpalSpikes.png","sprite":"spell2.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"Feast","name":"Feast","description":"Devours an enemy unit, dealing a high amount of true damage. If the target is killed, Cho'Gath grows, gaining maximum Health.","tooltip":"Ravenously feed on an enemy, dealing {{ e2 }} (+{{ f2 }})(+{{ a2 }}) true damage to champions or {{ e1 }} (+{{ f2 }}) (+{{ a2 }}) to minions and monsters. If the target is killed, Cho'Gath gains a stack of Feast, which causes him to grow in size and gain {{ e3 }} maximum health.
Only {{ e4 }} total stacks can be gained from minions and non-epic monsters. (Current: {{ f3 }}/{{ e4 }})","leveltip":{"label":["Champion Damage","Health per Stack"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}"]},"maxrank":3,"cooldown":[80,80,80],"cooldownBurn":"80","cost":[100,100,100],"costBurn":"100","effect":[null,[1000,1000,1000],[300,475,650],[80,120,160],[6,6,6],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1000","300/475/650","80/120/160","6","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a2"},{"link":"spelldamage","coeff":0.5,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[175,175,175],"rangeBurn":"175","image":{"full":"Feast.png","sprite":"spell2.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Corki":{"id":42,"key":"Corki","name":"Corki","title":"the Daring Bombardier","spells":[{"id":"PhosphorusBomb","name":"Phosphorus Bomb","description":"Corki fires a flash bomb at a target location, dealing magic damage to enemies in the area. This attack additionally reveals units in the area for a duration.","tooltip":"Corki lobs a bomb, dealing {{ e1 }} (+{{ f1 }})(+{{ a1 }}) magic damage to enemies in the target area. In addition, the blast reveals the area and champions hit by the blast for {{ e2 }} seconds (does not reveal stealth).","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[70,115,160,205,250],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","6","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[825,825,825,825,825],"rangeBurn":"825","image":{"full":"PhosphorusBomb.png","sprite":"spell2.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"CarpetBomb","name":"Valkyrie","description":"Corki flies a short distance, dropping bombs that create a trail of fire that damages opponents who remain in it.","tooltip":"Active: Corki flies a short distance, dealing {{ e1 }} (+{{ a1 }}) magic damage per second to enemies in the fire left along his path.
Special Delivery: Corki flies a great distance, dropping bombs that knock aside enemies and leave a burning trail for 5 seconds. The trail slows enemies by {{ e2 }}% and burns them for {{ f1 }} (+{{ f2 }})(+{{ a2 }}) magic damage per second.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,19,18,17,16],"cooldownBurn":"20/19/18/17/16","cost":[100,100,100,100,100],"costBurn":"100","effect":[null,[60,90,120,150,180],[90,90,90,90,90],[0,0,0,0,0],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/90/120/150/180","90","0","4","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.2,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"CarpetBomb.png","sprite":"spell2.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GGun","name":"Gatling Gun","description":"Corki's gatling gun rapidly fires in a cone in front of him, dealing damage and reducing enemy Armor and Magic Resist.","tooltip":"Corki's gatling gun fires continuously at targets in front of him for {{ e2 }} seconds, dealing up to {{ e1 }} (+{{ f1 }}) damage and reducing up to {{ e4 }} armor and magic resist.
Gatling Gun's damage is {{ e7 }}% physical, {{ e8 }}% magic. Defense reductions last for {{ e6 }} seconds after last being damaged by Gatling Gun.","leveltip":{"label":["Damage","Defense Reduction"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[80,140,200,260,320],[4,4,4,4,4],[4,4,4,4,4],[4,8,12,16,20],[8,8,8,8,8],[2,2,2,2,2],[50,50,50,50,50],[50,50,50,50,50],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/140/200/260/320","4","4","4/8/12/16/20","8","2","50","50","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"GGun.png","sprite":"spell2.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MissileBarrage","name":"Missile Barrage","description":"Corki fires a missile toward his target location that explodes on impact, dealing damage to enemies in an area. Corki stores missiles over time, up to a maximum. Every 3rd missile fired will be a Big One, dealing extra damage.","tooltip":"Active: Corki fires a missile that explodes at the first enemy it hits, dealing {{ e1 }} (+{{ f3 }})(+{{ a1 }}) magic damage to all nearby enemies.
Corki can store up to 7 missiles, and every 3rd missile will be a Big One, dealing {{ e8 }}% increased damage.","leveltip":{"label":["Base Damage","Attack Damage Scaling","Missile Reload Time"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ f1 }} -> {{ f2 }}"]},"maxrank":3,"cooldown":[2,2,2],"cooldownBurn":"2","cost":[20,20,20],"costBurn":"20","effect":[null,[75,100,125],[15,45,75],[300,300,300],[2,2,2],[0.15,0.45,0.75],[0,0,0],[50,50,50],[100,100,100],[200,200,200],[0,0,0]],"effectBurn":[null,"75/100/125","15/45/75","300","2","0.15/0.45/0.75","0","50","100","200","0"],"vars":[{"link":"@dynamic.attackdamage","coeff":0,"key":"f3"},{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"@cooldownchampion","coeff":10,"key":"f1"}],"costType":" Mana","maxammo":"7","range":[1225,1225,1225],"rangeBurn":"1225","image":{"full":"MissileBarrage.png","sprite":"spell2.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Darius":{"id":122,"key":"Darius","name":"Darius","title":"the Hand of Noxus","spells":[{"id":"DariusCleave","name":"Decimate","description":"Darius winds up and swings his axe in a wide circle. Enemies struck by the blade take more damage than those struck by the handle. Darius heals based on enemy champions hit by the blade.","tooltip":"After a short delay, Darius swings his axe around himself, striking enemies in its path. Enemies hit by the axe's blade take {{ e2 }} (+{{ f1 }}) physical damage. Enemies hit by the handle take {{ e6 }}% damage (does not apply Hemorrhage).
Darius heals for {{ e5 }}% of his missing Health per enemy champion hit by the blade (max: {{ e7 }}%).","leveltip":{"label":["Damage","Attack Damage Scaling","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[30,35,40,45,50],"costBurn":"30/35/40/45/50","effect":[null,[100,110,120,130,140],[40,70,100,130,160],[99,99,99,99,99],[0.1,0.1,0.1,0.1,0.1],[12,12,12,12,12],[35,35,35,35,35],[36,36,36,36,36],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100/110/120/130/140","40/70/100/130/160","99","0.1","12","35","36","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.05,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"DariusCleave.png","sprite":"spell2.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DariusNoxianTacticsONH","name":"Crippling Strike","description":"Darius's next attack strikes an enemy's crucial artery. As they bleed out, their Movement Speed is slowed.","tooltip":" Darius's next basic attack deals {{ f1 }} physical damage and slows the target by {{ e2 }}% for {{ e5 }} second.
Crippling Strike refunds its Mana cost and {{ e3 }}% of its cooldown if it kills the target.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[0,0,0,0,0],[90,90,90,90,90],[50,50,50,50,50],[1.4,1.4,1.4,1.4,1.4],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","90","50","1.4","1","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"DariusNoxianTacticsONH.png","sprite":"spell2.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DariusAxeGrabCone","name":"Apprehend","description":"Darius hones his axe, passively causing his physical damage to ignore a percentage of his target's Armor. When activated, Darius sweeps up his enemies with his axe's hook and pulls them to him.","tooltip":"Passive: Darius gains {{ e1 }}% Armor Penetration.
Active: Pulls in all enemies in front of Darius and slows them by {{ e2 }}% for {{ e3 }} second.","leveltip":{"label":["Armor Penetration","Cooldown "],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[24,21,18,15,12],"cooldownBurn":"24/21/18/15/12","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[5,10,15,20,25],[40,40,40,40,40],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/10/15/20/25","40","1","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[535,535,535,535,535],"rangeBurn":"535","image":{"full":"DariusAxeGrabCone.png","sprite":"spell2.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DariusExecute","name":"Noxian Guillotine","description":"Darius leaps to an enemy champion and strikes a lethal blow, dealing true damage. This damage is increased for each stack of Hemorrhage on the target. If Noxian Guillotine is a killing blow, its cooldown is refreshed for a brief duration.","tooltip":"Leaps to target enemy champion and strikes a lethal blow, dealing {{ e1 }} (+{{ f1 }}) true damage. For each stack of Hemorrhage on the target, Noxian Guillotine deals an additional {{ e3 }}% damage.8","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,0],"costBurn":"100/100/0","effect":[null,[100,200,300],[0.75,0.75,0.75],[20,20,20],[25,50,100],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/200/300","0.75","20","25/50/100","2","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.75,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[460,460,460],"rangeBurn":"460","image":{"full":"DariusExecute.png","sprite":"spell2.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Diana":{"id":131,"key":"Diana","name":"Diana","title":"Scorn of the Moon","spells":[{"id":"DianaArc","name":"Crescent Strike","description":"Diana swings her blade to unleash a bolt of lunar energy that deals damage in an arc before exploding. Afflicts enemies struck with the Moonlight debuff, revealing them if they are not stealthed. ","tooltip":"Unleashes a bolt of lunar energy in an arc dealing {{ e1 }} (+{{ a1 }}) magic damage.
Afflicts enemies struck with Moonlight, revealing them if they are not stealthed for {{ e4 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[55,55,55,55,55],"costBurn":"55","effect":[null,[60,95,130,165,200],[15,15,15,15,15],[55,55,55,55,55],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","15","55","3","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"DianaArc.png","sprite":"spell2.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DianaOrbs","name":"Pale Cascade","description":"Diana creates three orbiting spheres that detonate on contact with enemies to deal damage in an area. She also gains a temporary shield that absorbs damage. If her third sphere detonates, the shield gains additional strength.","tooltip":"Creates three orbiting spheres that explode on contact with enemies dealing {{ e2 }} (+{{ a1 }}) magic damage. Lasts {{ e1 }} seconds.
Grants a temporary shield that absorbs {{ e3 }} (+{{ a2 }}) damage. If the third sphere detonates, the shield increases by {{ e3 }} (+{{ a2 }}).","leveltip":{"label":["Damage","Shield","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[5,5,5,5,5],[22,34,46,58,70],[40,55,70,85,100],[1,1,1,1,1],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5","22/34/46/58/70","40/55/70/85/100","1","5","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a2"},{"link":"spelldamage","coeff":0.3,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"DianaOrbs.png","sprite":"spell2.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DianaVortex","name":"Moonfall","description":"Diana draws in and slows all nearby enemies.","tooltip":"Reveals and draws in all nearby enemies and then slows them by {{ e1 }}% for {{ e2 }} seconds.","leveltip":{"label":["Slow Amount","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[26,24,22,20,18],"cooldownBurn":"26/24/22/20/18","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[35,40,45,50,55],[2,2,2,2,2],[50,50,50,50,50],[4,4,4,4,4],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/40/45/50/55","2","50","4","6","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"DianaVortex.png","sprite":"spell2.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DianaTeleport","name":"Lunar Rush","description":"Diana dashes to an enemy and deals magic damage. Lunar Rush has no cooldown when used to teleport to a target afflicted with Moonlight.","tooltip":"Becomes the living embodiment of the vengeful moon, dashing to an enemy and dealing {{ e2 }} (+{{ a1 }}) magic damage.
Lunar Rush has no cooldown when used to dash to an enemy afflicted with Moonlight. All other enemies will have the Moonlight debuff removed regardless of whether they were the target of Lunar Rush.","leveltip":{"label":["Damage","Mana Cost","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[25,20,15],"cooldownBurn":"25/20/15","cost":[50,65,80],"costBurn":"50/65/80","effect":[null,[4,4,4],[100,160,220],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"4","100/160/220","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[825,825,825],"rangeBurn":"825","image":{"full":"DianaTeleport.png","sprite":"spell2.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Draven":{"id":119,"key":"Draven","name":"Draven","title":"the Glorious Executioner","spells":[{"id":"DravenSpinning","name":"Spinning Axe","description":"Draven's next attack will deal bonus physical damage. This axe will ricochet off the target high up into the air. If Draven catches it, he automatically readies another Spinning Axe. Draven can have two Spinning Axes at once.","tooltip":"Draven's next attack will deal {{ f1 }} bonus physical damage. The bonus is equal to {{ e5 }} plus {{ e2 }}% of his bonus Attack Damage.
This axe will ricochet off the target high up into the air. If Draven catches it, he automatically readies another Spinning Axe.
Draven can have two Spinning Axes at once.","leveltip":{"label":["Base Damage","Bonus AD Percentage","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[100,100,100,100,100],[65,75,85,95,105],[30,35,40,45,50],[5.75,5.75,5.75,5.75,5.75],[30,35,40,45,50],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100","65/75/85/95/105","30/35/40/45/50","5.75","30/35/40/45/50","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.45,0.55,0.65,0.75,0.85],"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"DravenSpinning.png","sprite":"spell2.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DravenFury","name":"Blood Rush","description":"Draven gains increased Movement Speed and Attack Speed. The Movement Speed bonus decreases rapidly over its duration. Catching a Spinning Axe will refresh the cooldown of Blood Rush.","tooltip":"","leveltip":{"label":["Attack Speed","Mana Cost","Movement Speed"],"effect":["{{ e4 }}% -> {{ e4NL }}%","{{ cost }} -> {{ costNL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[40,35,30,25,20],"costBurn":"40/35/30/25/20","effect":[null,[4,5,6,7,8],[40,45,50,55,60],[1.5,1.5,1.5,1.5,1.5],[20,25,30,35,40],[3,3,3,3,3],[-0.05,-0.056,-0.062,-0.069,-0.075],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/5/6/7/8","40/45/50/55/60","1.5","20/25/30/35/40","3","-0.05/-0.056/-0.062/-0.069/-0.075","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"DravenFury.png","sprite":"spell2.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DravenDoubleShot","name":"Stand Aside","description":"Draven throws his axes, dealing physical damage to targets hit and knocking them aside. Targets hit are slowed.","tooltip":"Draven throws his axes, dealing {{ e1 }} (+{{ f1 }}) physical damage to targets hit and knocking them aside. Targets hit are slowed by {{ e2 }}% for {{ e3 }} seconds.","leveltip":{"label":["Damage","Slow Amount","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[70,105,140,175,210],[20,25,30,35,40],[2,2,2,2,2],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/105/140/175/210","20/25/30/35/40","2","0.5","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"DravenDoubleShot.png","sprite":"spell2.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DravenRCast","name":"Whirling Death","description":"Draven hurls two massive axes to deal physical damage to each unit struck. Whirling Death slowly reverses direction and returns to Draven after striking an enemy champion. Draven may also activate this ability while the axes are in flight to cause it to return early. Deals less damage for each unit hit and resets when the axes reverse direction.","tooltip":"Draven hurls two massive axes to deal {{ e1 }} (+{{ f1 }}) physical damage to each unit struck.
Whirling Death slowly reverses direction and returns to Draven after striking an enemy champion. Draven may also activate this ability while the axes are in flight to cause it to return early. Deals {{ e4 }}% less damage for each unit hit (Minimum {{ e2 }}%) and resets when the axes reverse direction.","leveltip":{"label":["Damage","Cooldown"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[175,275,375],[40,40,40],[0,0,0],[8,8,8],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"175/275/375","40","0","8","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.1,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[20000,20000,20000],"rangeBurn":"20000","image":{"full":"DravenRCast.png","sprite":"spell2.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"DrMundo":{"id":36,"key":"DrMundo","name":"Dr. Mundo","title":"the Madman of Zaun","spells":[{"id":"InfectedCleaverMissileCast","name":"Infected Cleaver","description":"Dr. Mundo hurls his cleaver, dealing damage equal to a portion of his target's current Health and slowing them for a short time. Dr. Mundo delights in the suffering of others, so he is returned half of the Health cost when he successfully lands a cleaver (increased to the full Health cost on killing blows).","tooltip":"Dr. Mundo hurls his cleaver, dealing magic damage equal to {{ e2 }}% of the target's current Health and slowing them by {{ e4 }}% for {{ e5 }} seconds. {{ e1 }} damage minimum, max {{ e6 }} damage to Monsters.
Half of the Health cost is refunded if the cleaver hits an enemy. The full Health cost is refunded if the cleaver kills an enemy.","leveltip":{"label":["Minimum Damage","Damage Percent","Health Cost","Max Monster Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e3 }} -> {{ e3NL }}","{{ e6 }} -> {{ e6NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[80,130,180,230,280],[15,17.5,20,22.5,25],[50,60,70,80,90],[40,40,40,40,40],[2,2,2,2,2],[300,350,400,450,500],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/130/180/230/280","15/17.5/20/22.5/25","50/60/70/80/90","40","2","300/350/400/450/500","0.5","0","0","0"],"vars":[],"costType":" Health","maxammo":"-1","range":[975,975,975,975,975],"rangeBurn":"975","image":{"full":"InfectedCleaverMissileCast.png","sprite":"spell2.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ e3 }} Health"},{"id":"BurningAgony","name":"Burning Agony","description":"Dr. Mundo drains his Health to reduce the duration of disables and deal continual damage to nearby enemies.","tooltip":"Toggle: Dr. Mundo deals {{ e3 }} (+{{ charabilitypower*2 }}) magic damage to nearby enemies per second, and reduces the duration of disables on Dr. Mundo by {{ e2 }}%.","leveltip":{"label":["Damage Per Second","Disable Reduction","Health Cost"],"effect":[" {{ e3 }} -> {{ e3NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,15,20,25,30],[10,15,20,25,30],[40,55,70,85,100],[325,325,325,325,325],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/15/20/25/30","10/15/20/25/30","40/55/70/85/100","325","0","0","0","0","0","0"],"vars":[],"costType":" Health Per Sec","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"BurningAgony.png","sprite":"spell2.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ e1 }} Health Per Sec"},{"id":"Masochism","name":"Masochism","description":"Masochism deals bonus damage on Dr. Mundo's next basic attack and increases Attack Damage by a flat amount for 5 seconds. In addition, Dr. Mundo also gains an additional amount of Attack Damage for each percentage of Health he is missing.","tooltip":"Dr. Mundo deals an additional {{ f1 }} physical damage ({{ e6 }}% of max health) on his next basic attack and gains {{ e1 }} Attack Damage for {{ e4 }} seconds. Dr. Mundo gains an additional +{{ e3 }} Attack Damage ({{ f2 }}) for each percent of his Health he is missing.","leveltip":{"label":["Attack Damage Bonus","Bonus Factor","Max Health %","Health Cost"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e6 }}% -> {{ e6NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,50,70,90,110],[25,35,45,55,65],[0.3,0.5,0.7,0.9,1.1],[5,5,5,5,5],[5,20,35,50,65],[3,3.5,4,4.5,5],[25,25,25,25,25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","25/35/45/55/65","0.3/0.5/0.7/0.9/1.1","5","5/20/35/50/65","3/3.5/4/4.5/5","25","0","0","0"],"vars":[],"costType":" Health","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"Masochism.png","sprite":"spell2.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ e2 }} Health"},{"id":"Sadism","name":"Sadism","description":"Dr. Mundo sacrifices a portion of his Health for increased Movement Speed and drastically increased Health Regeneration.","tooltip":"Dr. Mundo regenerates {{ f1 }} Health ({{ e1 }}% of max health) over {{ e2 }} seconds. Additionally, he gains {{ e3 }}% movement speed during this time.","leveltip":{"label":["Regeneration","Movement Speed","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[0,0,0],"costBurn":"0","effect":[null,[40,50,60],[12,12,12],[15,25,35],[20,20,20],[0.015,0.015,0.015],[5,5,5],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"40/50/60","12","15/25/35","20","0.01","5","0","0","0","0"],"vars":[],"costType":"% of Current Health","maxammo":"-1","range":[20,20,20],"rangeBurn":"20","image":{"full":"Sadism.png","sprite":"spell2.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ e4 }}% of Current Health"}]},"Ekko":{"id":245,"key":"Ekko","name":"Ekko","title":"the Boy Who Shattered Time","spells":[{"id":"EkkoQ","name":"Timewinder","description":"Ekko throws a temporal grenade that expands into a time-distortion field upon hitting an enemy champion, slowing and damaging anyone caught inside. After a delay, the grenade rewinds back to Ekko, dealing damage on its return.","tooltip":"Ekko throws a device that deals {{ e1 }} (+{{ a1 }}) magic damage to enemies it passes through. It expands into a slowing field on the first champion hit, slowing everything inside by {{ e2 }}%. It then returns to him after a delay, dealing {{ e3 }} (+{{ a2 }}) magic damage to all targets hit upon return.","leveltip":{"label":["Outgoing Damage","Return Damage","Slow","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,8.5,8,7.5,7],"cooldownBurn":"9/8.5/8/7.5/7","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[60,75,90,105,120],[32,39,46,53,60],[40,65,90,115,140],[100,100,100,100,100],[0,0,0,0,0],[165,165,165,165,165],[1.75,1.75,1.75,1.75,1.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/75/90/105/120","32/39/46/53/60","40/65/90/115/140","100","0","165","1.75","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"EkkoQ.png","sprite":"spell2.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EkkoW","name":"Parallel Convergence","description":"Ekko splits the timeline, creating an anomaly after a few seconds that slows enemies caught inside. If Ekko enters the anomaly, he gains shielding and triggers a detonation, stunning enemies by suspending them in time.","tooltip":"Passive: Ekko's basic attacks deal bonus magic damage to enemies under 30% health equal to {{ e3 }}% (+{{ a2 }}%) of their missing health. Deals a minimum of {{ e6 }} damage, and a maximum of {{ e5 }} damage vs. minions and monsters.
Active: After a 3 second delay, Ekko creates a short-lived chronosphere at the target location that slows enemies who enter by {{ e0 }}%. If Ekko enters the sphere, he will detonate it, gaining a shield that absorbs up to {{ e4 }} (+{{ a1 }}) damage for 2 seconds. Enemies caught inside are stunned for {{ e2 }} seconds.","leveltip":{"label":["Shield Amount","Cooldown","Mana Cost"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}<"]},"maxrank":5,"cooldown":[22,20,18,16,14],"cooldownBurn":"22/20/18/16/14","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[375,375,375,375,375],[1.75,1.75,1.75,1.75,1.75],[3,3,3,3,3],[80,100,120,140,160],[150,150,150,150,150],[15,15,15,15,15],[1.5,1.5,1.5,1.5,1.5],[3,3,3,3,3],[2,2,2,2,2],[40,40,40,40,40]],"effectBurn":[null,"375","1.75","3","80/100/120/140/160","150","15","1.5","3","2","40"],"vars":[{"link":"spelldamage","coeff":0.03,"key":"a2"},{"link":"spelldamage","coeff":1.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1600,1600,1600,1600,1600],"rangeBurn":"1600","image":{"full":"EkkoW.png","sprite":"spell2.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EkkoE","name":"Phase Dive","description":"Ekko rolls evasively while charging up his Z-Drive. His next attack deals bonus damage and warps reality, teleporting him to his target.","tooltip":" Ekko dashes a short distance in the targeted direction. His next attack will deal {{ e1 }} (+{{ a1 }}) bonus magic damage and teleport him to his target.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[40,50,60,70,80],"costBurn":"40/50/60/70/80","effect":[null,[40,65,90,115,140],[350,350,350,350,350],[3,3,3,3,3],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/65/90/115/140","350","3","300","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"EkkoE.png","sprite":"spell2.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EkkoR","name":"Chronobreak","description":"Ekko shatters his timeline, becoming untargetable and rewinding to a more favorable point in time. He returns to whenever he was a few seconds ago, and heals for a percentage of the damage received in that duration. Enemies near his arrival zone take massive damage.","tooltip":"Ekko turns back time, going briefly untargetable and invulnerable. He teleports to where he was 4 seconds ago and deals {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies on arrival. Additionally, Ekko heals for {{ e3 }} (+{{ a2 }}), increased by {{ e5 }}% for each 1% of his health lost over the last 4 seconds.","leveltip":{"label":["Damage","Flat Heal","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,90,70],"cooldownBurn":"110/90/70","cost":[100,100,100],"costBurn":"100","effect":[null,[150,300,450],[20,20,20],[100,150,200],[375,375,375],[3,3,3],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/300/450","20","100/150/200","375","3","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1.5,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[850,850,850],"rangeBurn":"850","image":{"full":"EkkoR.png","sprite":"spell2.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Elise":{"id":60,"key":"Elise","name":"Elise","title":"the Spider Queen","spells":[{"id":"EliseHumanQ","name":"Neurotoxin / Venomous Bite","description":"Human Form: Deals damage based upon how high the target's Health is.
Spider Form: Lunges at an enemy and deals damage based upon how low their Health is.","tooltip":"Deals magic damage equal to {{ e1 }} plus {{ e6 }}% (+{{ a1 }}%) of the target's current health. Maximum bonus against monsters: {{ e2 }}.","leveltip":{"label":["Neurotoxin Damage","Venomous Bite Damage","Max Damage to Monsters","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[80,85,90,95,100],"costBurn":"80/85/90/95/100","effect":[null,[40,75,110,145,180],[75,100,125,150,175],[15,20,25,30,35],[36,42,48,54,60],[60,100,140,180,220],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/75/110/145/180","75/100/125/150/175","15/20/25/30/35","36/42/48/54/60","60/100/140/180/220","4","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.03,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"EliseHumanQ.png","sprite":"spell2.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EliseHumanW","name":"Volatile Spiderling / Skittering Frenzy","description":"Human Form: Releases a venom-gorged Spiderling that explodes when it nears a target.
Spider Form: Elise and her Spiderlings gain Attack Speed.","tooltip":"Summons a venom-gorged Spiderling that moves to target location and explodes, dealing {{ e3 }} (+{{ a1 }}) Magic Damage when it nears an enemy or after 3 seconds.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[4,4,4,4,4],[60,80,100,120,140],[60,110,160,210,260],[3,3,3,3,3],[65,75,85,95,105],[275,275,275,275,275],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4","60/80/100/120/140","60/110/160/210/260","3","65/75/85/95/105","275","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"EliseHumanW.png","sprite":"spell2.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EliseHumanE","name":"Cocoon / Rappel","description":"Human Form: Stuns the first enemy unit hit and reveals them if they are not stealthed.
Spider Form: Elise and her Spiderlings ascend into the air and then descend upon target enemy.","tooltip":"Stuns the first enemy hit for {{ e5 }} seconds and reveals them if they are not stealthed.","leveltip":{"label":["Stun Duration","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[14,13,12,11,10],[15,20,25,30,35],[26,23,20,17,14],[2,2,2,2,2],[1.6,1.7,1.8,1.9,2],[40,55,70,85,100],[250,250,250,250,250],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"14/13/12/11/10","15/20/25/30/35","26/23/20/17/14","2","1.6/1.7/1.8/1.9/2","40/55/70/85/100","250","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"EliseHumanE.png","sprite":"spell2.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EliseR","name":"Spider Form","description":"Transforms into a menacing spider, reducing her attack range in exchange for movement speed, new abilities, and a Spiderling swarm that will attack her foes.","tooltip":"Elise transforms into a menacing spider, sacrificing 425 attack range in exchange for {{ e3 }} movement speed and access to arachnid abilities. All dormant Spiderlings are awakened and will attack nearby foes.
Spiderlings: Spiderlings deal {{ e1 }} (+{{ a2 }}) damage and take {{ e4 }}% reduced damage from multi-target abilities.","leveltip":{"label":["Spider Form Bite Damage","Spiderling Bonus Damage","Maximum Number of Spiderlings","Spiderling Armor","Spiderling Magic Resist"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ e6 }} -> {{ e6NL }}","{{ e7 }} -> {{ e7NL }}"]},"maxrank":4,"cooldown":[4,4,4,4],"cooldownBurn":"4","cost":[0,0,0,0],"costBurn":"0","effect":[null,[10,15,20,25],[10,20,30,40],[25,25,25,25],[25,25,25,25],[2,3,4,5],[30,50,70,90],[50,70,90,110],[4,6,8,10],[0.1,0.1,0.1,0.1],[0,0,0,0]],"effectBurn":[null,"10/15/20/25","10/20/30/40","25","25","2/3/4/5","30/50/70/90","50/70/90/110","4/6/8/10","0.1","0"],"vars":[{"link":"spelldamage","coeff":0.15,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20],"rangeBurn":"20","image":{"full":"EliseR.png","sprite":"spell2.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Evelynn":{"id":28,"key":"Evelynn","name":"Evelynn","title":"the Widowmaker","spells":[{"id":"EvelynnQ","name":"Hate Spike","description":"Evelynn fires a line of spikes through an enemy, dealing damage to all enemies in its path.","tooltip":"Evelynn fires a line of spikes through a nearby enemy dealing {{ e1 }} (+{{ f2 }})(+{{ f1 }}) magic damage to all enemies in its path.
Hate Spike prioritizes the target Evelynn is attacking.","leveltip":{"label":["Damage","Ability Power Scaling","Attack Damage Scaling","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[1.5,1.5,1.5,1.5,1.5],"cooldownBurn":"1.5","cost":[12,18,24,30,36],"costBurn":"12/18/24/30/36","effect":[null,[40,50,60,70,80],[35,40,45,50,55],[50,55,60,65,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/50/60/70/80","35/40/45/50/55","50/55/60/65/70","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"EvelynnQ.png","sprite":"spell2.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EvelynnW","name":"Dark Frenzy","description":"Evelynn passively increases her Movement Speed when hitting enemy champions with her spells. Upon activation, Evelynn breaks free from slows affecting her and gains a massive Movement Speed boost for a short duration.","tooltip":"Active: Evelynn removes all slows affecting her and gains {{ e3 }}% Movement Speed for {{ e4 }} seconds.
Passive: Evelynn's spell hits on enemy champions reduce Dark Frenzy's cooldown by 1 second.
Champion kills and assists refresh Dark Frenzy's cooldown.","leveltip":{"label":["Active Movement Speed"],"effect":["{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[1,1,1,1,1],[3,3,3,3,3],[30,40,50,60,70],[3,3,3,3,3],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1","3","30/40/50/60/70","3","4","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[10000,10000,10000,10000,10000],"rangeBurn":"10000","image":{"full":"EvelynnW.png","sprite":"spell2.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EvelynnE","name":"Ravage","description":"Evelynn slashes her target twice, dealing damage with each hit. She then gains increased Attack Speed for a short duration.","tooltip":"Evelynn swiftly attacks a target {{ e3 }} times (applies on-hit effects), dealing a total of {{ e1 }} (+{{ a1 }})(+{{ f1 }}) physical damage.
Evelynn then gains {{ e4 }}% Attack Speed for {{ e2 }} seconds.","leveltip":{"label":["Damage","Attack Speed","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[70,110,150,190,230],[3,3,3,3,3],[2,2,2,2,2],[60,75,90,105,120],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","3","2","60/75/90/105/120","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"},{"link":"bonusattackdamage","coeff":0.4,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[225,225,225,225,225],"rangeBurn":"225","image":{"full":"EvelynnE.png","sprite":"spell2.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EvelynnR","name":"Agony's Embrace","description":"Evelynn summons spikes from the ground to deal damage and slow enemies in the area. She then gains a shield based on how many enemy champions were hit.","tooltip":"Evelynn impales all enemies in the targeted area, dealing {{ f1 }}% [{{ e1 }}% + {{ f2 }}% per 100 ability power] of each target's current health as magic damage and slowing their movement speed by {{ e2 }}% for {{ e3 }} seconds.
Evelynn siphons their pain, gaining a {{ e4 }} health shield for each enemy champion hit which lasts up to {{ e6 }} seconds.","leveltip":{"label":["Current Health %","Slow","Shield Amount","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[15,20,25],[40,60,80],[2,2,2],[150,225,300],[50,100,150],[6,6,6],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"15/20/25","40/60/80","2","150/225/300","50/100/150","6","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"EvelynnR.png","sprite":"spell3.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Ezreal":{"id":81,"key":"Ezreal","name":"Ezreal","title":"the Prodigal Explorer","spells":[{"id":"EzrealMysticShot","name":"Mystic Shot","description":"Ezreal fires a damaging bolt of energy which reduces all of his cooldowns by 1.5 seconds if it strikes an enemy unit.","tooltip":"Ezreal fires a bolt of energy, dealing {{ e1 }} (+{{ a1 }})(+{{ a2 }}) physical damage (applies on-hit effects).
Ezreal's cooldowns are reduced by {{ e2 }} seconds if Mystic Shot hits a target.","leveltip":{"label":["Bonus Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6.5,6,5.5,5,4.5],"cooldownBurn":"6.5/6/5.5/5/4.5","cost":[28,31,34,37,40],"costBurn":"28/31/34/37/40","effect":[null,[35,55,75,95,115],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/55/75/95/115","1.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.1,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1150,1150,1150,1150,1150],"rangeBurn":"1150","image":{"full":"EzrealMysticShot.png","sprite":"spell3.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EzrealEssenceFlux","name":"Essence Flux","description":"Ezreal fires a fluctuating wave of energy, dealing magic damage to enemy champions, while increasing the Attack Speed of allied champions.","tooltip":"Ezreal fires a wave of energy that damages all enemy champions it passes through for {{ e1 }} (+{{ a1 }}) magic damage. If Ezreal or his Allied champions are hit by the wave, their Attack Speed is increased by {{ e2 }}% for {{ e3 }} seconds.","leveltip":{"label":["Damage","Attack Speed","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }}% -> {{ e2NL }}%"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[70,115,160,205,250],[20,25,30,35,40],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","20/25/30/35/40","5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"EzrealEssenceFlux.png","sprite":"spell3.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EzrealArcaneShift","name":"Arcane Shift","description":"Ezreal teleports to a target nearby location and fires a homing bolt which strikes the nearest enemy unit.","tooltip":"Ezreal teleports to a nearby location and fires a bolt at the nearest enemy, dealing {{ e1 }} (+{{ a2 }})(+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[19,17.5,16,14.5,13],"cooldownBurn":"19/17.5/16/14.5/13","cost":[90,90,90,90,90],"costBurn":"90","effect":[null,[75,125,175,225,275],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/125/175/225/275","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"a2"},{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[475,475,475,475,475],"rangeBurn":"475","image":{"full":"EzrealArcaneShift.png","sprite":"spell3.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EzrealTrueshotBarrage","name":"Trueshot Barrage","description":"Ezreal winds up for 1 second to fire a powerful barrage of energy missiles which do massive damage to each unit they pass through (deals 10% less damage to each unit it passes through).","tooltip":"Ezreal winds up for 1 second to fire a long range missile that deals {{ e1 }} (+{{ a2 }})(+{{ a1 }}) magic damage to each enemy it passes through. Deals {{ e2 }}% less damage for each enemy hit (minimum {{ e3 }}%).","leveltip":{"label":["Damage"],"effect":[" {{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[120,120,120],"cooldownBurn":"120","cost":[100,100,100],"costBurn":"100","effect":[null,[350,500,650],[10,10,10],[30,30,30],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"350/500/650","10","30","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a2"},{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20000,20000,20000],"rangeBurn":"20000","image":{"full":"EzrealTrueshotBarrage.png","sprite":"spell3.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Fiddlesticks":{"id":9,"key":"Fiddlesticks","name":"Fiddlesticks","title":"the Harbinger of Doom","spells":[{"id":"Terrify","name":"Terrify","description":"Strikes a target unit with fear, causing it to flee in terror for a duration.","tooltip":"Terrifies a target, causing it to flee from Fiddlesticks for {{ e1 }} seconds.","leveltip":{"label":["Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[1.25,1.5,1.75,2,2.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.25/1.5/1.75/2/2.25","0","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[575,575,575,575,575],"rangeBurn":"575","image":{"full":"Terrify.png","sprite":"spell3.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Drain","name":"Drain","description":"Fiddlesticks saps the life force of an enemy, dealing damage to a target over time and healing himself.","tooltip":"Fiddlesticks creates a tether to the target unit and channels Drain on it, granting True Sight and dealing {{ e1 }} (+{{ a1 }}) magic damage per second to the target. Fiddlesticks heals for {{ e3 }}% of the damage dealt.
Drain lasts up to {{ e4 }} seconds, dealing a total of {{ f1 }} (+{{ f2 }}) damage.
16","leveltip":{"label":["Damage Per Second","Cooldown","Mana Cost","Drain Ratio"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[4,3.75,3.5,3.25,3],"cooldownBurn":"4/3.75/3.5/3.25/3","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[80,105,130,155,180],[4,4,4,4,4],[60,65,70,75,80],[5,5,5,5,5],[650,650,650,650,650],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/105/130/155/180","4","60/65/70/75/80","5","650","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[575,575,575,575,575],"rangeBurn":"575","image":{"full":"Drain.png","sprite":"spell3.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FiddlesticksDarkWind","name":"Dark Wind","description":"A wisp of wind strikes an enemy unit and then bounces to nearby enemy units, dealing damage and silencing the victims.","tooltip":"Unleashes a Crow at the targeted enemy, dealing {{ e1 }} (+{{ a1 }}) magic damage before bouncing to another target. Units struck are also silenced for {{ e2 }} seconds the first time per cast.
Dark Wind can strike up to {{ e3 }} times and will prioritize enemies being Drained or ones it has not yet hit. Deals {{ e4 }}% damage to minions and monsters.","leveltip":{"label":["Damage","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11.5,11,10.5,10],"cooldownBurn":"12/11.5/11/10.5/10","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[65,85,105,125,145],[1.25,1.25,1.25,1.25,1.25],[6,6,6,6,6],[150,150,150,150,150],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/85/105/125/145","1.25","6","150","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"FiddlesticksDarkWind.png","sprite":"spell3.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Crowstorm","name":"Crowstorm","description":"A murder of crows flock wildly around Fiddlesticks, dealing damage per second to all enemy units in the area.","tooltip":"Fiddlesticks channels for {{ e3 }} seconds, then blinks to the target point unleashing a murder of crows that flock wildly around him, dealing {{ e1 }} (+{{ a1 }}) magic damage per second to all enemy units in the area.
The effect lasts for {{ e2 }} seconds, dealing up to {{ f1 }} (+{{ f2 }}) total magic damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,140,130],"cooldownBurn":"150/140/130","cost":[100,100,100],"costBurn":"100","effect":[null,[125,225,325],[5,5,5],[1.5,1.5,1.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"125/225/325","5","1.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800],"rangeBurn":"800","image":{"full":"Crowstorm.png","sprite":"spell3.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Fiora":{"id":114,"key":"Fiora","name":"Fiora","title":"the Grand Duelist","spells":[{"id":"FioraQ","name":"Lunge","description":"Fiora lunges in a direction and stabs a nearby enemy, dealing physical damage and applying on-hit effects.","tooltip":"Fiora lunges in a direction and stabs a nearby enemy, dealing {{ e1 }} (+{{ f1 }}) physical damage and applying on-hit effects. This attack prioritizes Vitals and enemies it will kill.
If this ability hits an enemy, {{ e4 }}% of its cooldown is refunded. ","leveltip":{"label":["Damage","Attack Damage Ratio","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,14,12,10,8],"cooldownBurn":"16/14/12/10/8","cost":[20,25,30,35,40],"costBurn":"20/25/30/35/40","effect":[null,[65,75,85,95,105],[0.95,1,1.05,1.1,1.15],[50,50,50,50,50],[60,60,60,60,60],[2.5,2.5,2.5,2.5,2.5],[2,2,2,2,2],[90,120,150,180,210],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/75/85/95/105","0.95/1/1.05/1.1/1.15","50","60","2.5","2","90/120/150/180/210","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"FioraQ.png","sprite":"spell3.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FioraW","name":"Riposte","description":"Fiora parries all incoming damage and disables for a short time, then stabs in a direction. This stab slows the first enemy champion hit, or stuns them if Fiora blocked an immobilizing effect with this ability.","tooltip":"Fiora parries all incoming damage, debuffs, and disables for the next {{ e2 }} seconds and then stabs in the target direction.
The stab deals {{ e1 }} (+{{ f1 }}) magic damage to the first enemy champion hit and slows their movement and attack speed by {{ e4 }}% for {{ e3 }} seconds.
If Fiora parries an immobilizing effect, Riposte stuns instead of slowing.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f2 }} -> {{ f3 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[90,130,170,210,250],[0.75,0.75,0.75,0.75,0.75],[1.5,1.5,1.5,1.5,1.5],[50,50,50,50,50],[0.03,0.03,0.03,0.03,0.03],[0.15,0.15,0.15,0.15,0.25],[24,22,20,18,16],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"90/130/170/210/250","0.75","1.5","50","0.03","0.15/0.15/0.15/0.15/0.25","24/22/20/18/16","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"FioraW.png","sprite":"spell3.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FioraE","name":"Bladework","description":"Fiora has increased attack speed for the next two attacks. The first attack slows the target, and the second attack will critically strike.","tooltip":"Fiora gains {{ e4 }}% attack speed for her next two attacks. The first attack cannot critically strike, but will apply a {{ e3 }}% slow for {{ e2 }} second. The second attack is guaranteed to critically strike for {{ f4 }}% damage ({{ f3 }}).","leveltip":{"label":["Critical Strike Damage","Cooldown","Mana Cost"],"effect":["{{ f4 }}% -> {{ f5 }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,11,9,7,5],"cooldownBurn":"13/11/9/7/5","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[3,3,3,3,3],[1,1,1,1,1],[30,30,30,30,30],[50,50,50,50,50],[100,100,100,100,100],[140,155,170,185,200],[5,10,15,20,25],[40,50,60,70,80],[10,12.5,15,17.5,20],[20,20,20,20,20]],"effectBurn":[null,"3","1","30","50","100","140/155/170/185/200","5/10/15/20/25","40/50/60/70/80","10/12.5/15/17.5/20","20"],"vars":[],"costType":" Mana","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"FioraE.png","sprite":"spell3.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FioraR","name":"Grand Challenge","description":"Fiora reveals all four Vitals on an enemy champion and gains movement speed while near them. If Fiora hits all 4 Vitals or if the target dies after she has hit at least one, Fiora and her allies in the area are healed over the next few seconds.","tooltip":"Fiora reveals all four Vitals on target champion, for a potential {{ f8 }}% max health true damage. In addition, Fiora gains Duelist's Dance's movement speed bonus ({{ f6 }}%) while near the target.
If Fiora hits all 4 Vitals in {{ e1 }} seconds or if the target dies after she has hit at least one, Fiora and her allies in the area are healed for {{ e7 }} (+{{ f9 }}) each second for between {{ e9 }} to {{ e6 }} seconds, scaling with the amount of Vitals hit.","leveltip":{"label":["Cooldown","Duelist Movement Speed","Heal Per Second"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e7 }} -> {{ e7NL }}"]},"maxrank":3,"cooldown":[110,90,70],"cooldownBurn":"110/90/70","cost":[100,100,100],"costBurn":"100","effect":[null,[8,8,8],[30,40,50],[0,0,0],[30,45,60],[500,500,500],[5,5,5],[80,110,140],[550,550,550],[2,2,2],[1,1,1]],"effectBurn":[null,"8","30/40/50","0","30/45/60","500","5","80/110/140","550","2","1"],"vars":[],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"FioraR.png","sprite":"spell3.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Fizz":{"id":105,"key":"Fizz","name":"Fizz","title":"the Tidal Trickster","spells":[{"id":"FizzQ","name":"Urchin Strike","description":"Fizz dashes through his target, dealing magic damage and applying on hit effects.","tooltip":"Fizz dashes through his target, dealing {{ a2 }} physical damage plus {{ e1 }} (+{{ a1 }}) magic damage. This spell applies on-hit effects.
16","leveltip":{"label":["Magic Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7.5,7,6.5,6],"cooldownBurn":"8/7.5/7/6.5/6","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[10,25,40,55,70],[0,0,0,0,0],[650,750,850,950,1050],[1.5,1.5,1.5,1.5,1.5],[600,600,600,600,600],[1,1,1,1,1],[0.35,0.35,0.35,0.35,0.35],[40,40,40,40,40],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/25/40/55/70","0","650/750/850/950/1050","1.5","600","1","0.35","40","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a2"},{"link":"spelldamage","coeff":0.55,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"FizzQ.png","sprite":"spell3.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FizzW","name":"Seastone Trident","description":"Fizz's attacks bleed his enemies, dealing magic damage over several seconds. Fizz can empower his next attack to deal bonus damage, increased by how long the bleed was active on his target.","tooltip":"Passive: Fizz's basic attacks bleed his enemies, dealing {{ e1 }} (+{{ a2 }}) magic damage over {{ e8 }} seconds.
Active: Fizz's next basic attack deals {{ e3 }} (+{{ a2 }}) bonus magic damage. If the target has been bleeding for at least {{ e7 }} seconds, this bonus increases to {{ e3 }} (+{{ a1 }}).
16","leveltip":{"label":["Passive / Active Damage","Charged Active Damage","Cooldown","Mana Cost","Mana Refund"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[10,9.5,9,8.5,8],"cooldownBurn":"10/9.5/9/8.5/8","cost":[30,40,50,60,70],"costBurn":"30/40/50/60/70","effect":[null,[20,30,40,50,60],[20,28,36,42,50],[60,90,120,150,180],[6,6,6,6,6],[2,2,2,2,2],[4,4,4,4,4],[2,2,2,2,2],[3,3,3,3,3],[750,750,750,750,750],[1,1,1,1,1]],"effectBurn":[null,"20/30/40/50/60","20/28/36/42/50","60/90/120/150/180","6","2","4","2","3","750","1"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a2"},{"link":"spelldamage","coeff":0.4,"key":"a2"},{"link":"spelldamage","coeff":1.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"FizzW.png","sprite":"spell3.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FizzE","name":"Playful / Trickster","description":"Fizz hops into the air, landing gracefully upon his spear and becoming untargetable. From this position, Fizz can either slam the ground or choose to jump again before smashing back down.","tooltip":"Fizz hops on his trident towards the cursor, becoming briefly untargetable.
Reactivation: Fizz cancels the spell early, jumping towards the cursor a second time and dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies.
If Fizz does not reactivate, he deals damage in a larger area and slows all enemies hit by {{ e2 }}% for {{ e4 }} seconds.","leveltip":{"label":["Damage","Slow Percentage","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[90,95,100,105,110],"costBurn":"90/95/100/105/110","effect":[null,[70,120,170,220,270],[40,45,50,55,60],[225,225,225,225,225],[2,2,2,2,2],[375,375,375,375,375],[80,80,80,80,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/120/170/220/270","40/45/50/55/60","225","2","375","80","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"FizzE.png","sprite":"spell3.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"FizzR","name":"Chum the Waters","description":"Fizz tosses a fish in a direction that attaches to any champion that touches it, slowing the target. After a short delay, a shark erupts from the ground, knocking up the target and knocking any nearby enemies aside. All enemies hit are dealt magic damage and slowed.","tooltip":"Fizz launches a fish that attaches to the first enemy champion it hits, slowing them, granting True Sight, and attracting a shark. After {{ e8 }} seconds, the shark erupts out of the ground, knocking its target up and knocking other enemies aside.
The farther the fish travels before attaching, the bigger the shark it attracts, dealing {{ e1 }} (+{{ a1 }}) to {{ e3 }} (+{{ a2 }}) magic damage and slowing by 40% to 80%.
16","leveltip":{"label":["Small Shark Damage","Medium Shark Damage","Big Shark Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} ->{{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[225,325,425],[300,400,500],[200,200,200],[325,325,325],[450,450,450],[1300,1300,1300],[2,2,2],[2,2,2],[60,60,60]],"effectBurn":[null,"150/250/350","225/325/425","300/400/500","200","325","450","1300","2","2","60"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"},{"link":"spelldamage","coeff":1.2,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1300,1300,1300],"rangeBurn":"1300","image":{"full":"FizzR.png","sprite":"spell3.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Galio":{"id":3,"key":"Galio","name":"Galio","title":"the Colossus","spells":[{"id":"GalioQ","name":"Winds of War","description":"Galio fires two windblasts that converge into a large tornado.","tooltip":"Galio fires two windblasts that deal {{ e1 }} (+{{ a1 }}) magic damage.
When the windblasts meet, they combine into a giant tornado that deals {{ e5 }} (+{{ charabilitypower2*3 }}) plus {{ e2 }}% of enemies' maximum Health (max {{ e4 }} vs. monsters) as magic damage over {{ e3 }} seconds.","leveltip":{"label":["Windblast Damage","Tornado Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[60,95,130,165,200],[6,6,6,6,6],[1.5,1.5,1.5,1.5,1.5],[150,150,150,150,150],[45,60,75,90,105],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","6","1.5","150","45/60/75/90/105","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[825,825,825,825,825],"rangeBurn":"825","image":{"full":"GalioQ.png","sprite":"spell3.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GalioW","name":"Shield of Durand","description":"Galio charges a defensive stance, moving slowly. Upon releasing the charge, Galio will taunt nearby enemies.","tooltip":"Passive: After not taking damage for {{ e6 }} seconds Galio gains a shield that absorbs {{ f3 }} magic damage.
First Cast: Galio starts to charge, gaining {{ e1 }} (+{{ f2 }})% Damage Reduction but slowing himself by {{ e3 }}%.
Second Cast: Galio taunts nearby enemy champions for {{ e4 }} to {{ e7 }} seconds and refreshes the Damage Reduction for {{ e8 }} seconds. Taunt duration and radius increase with charge time.
Shield of Durand's charge cannot be interrupted by crowd control.","leveltip":{"label":["Shield Health Ratio","Damage Reduction","Cooldown"],"effect":["{{ e5 }}% -> {{ e5NL }}%","{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[20,25,30,35,40],[2,2,2,2,2],[30,30,30,30,30],[0.5,0.5,0.5,0.5,0.5],[8,11,14,17,20],[12,12,12,12,12],[1.5,1.5,1.5,1.5,1.5],[2,2,2,2,2],[1.25,1.25,1.25,1.25,1.25],[0,0,0,0,0]],"effectBurn":[null,"20/25/30/35/40","2","30","0.5","8/11/14/17/20","12","1.5","2","1.25","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[275,275,275,275,275],"rangeBurn":"275","image":{"full":"GalioW.png","sprite":"spell3.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GalioE","name":"Justice Punch","description":"Galio will briefly step back and charge, knocking up the first enemy champion he encounters.","tooltip":"Galio lunges forward with a mighty blow, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies and knocking them into the air for {{ e2 }} seconds. Galio will stop upon hitting a champion or terrain.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[100,140,180,220,260],[0.75,0.75,0.75,0.75,0.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100/140/180/220/260","0.75","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"GalioE.png","sprite":"spell3.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GalioR","name":"Hero's Entrance","description":"Galio grants damage reduction to an ally. After a delay Galio smashes down on the ally's original location, knocking up nearby enemies.","tooltip":"Galio designates an allied champion's current position as his landing spot and grants {{ e5 }} (+{{ f2 }})% damage reduction to that ally until he lands.
When Galio lands, enemies in the area take {{ e1 }} (+{{ a1 }}) magic damage and are knocked into the air for {{ e3 }} seconds ({{ e2 }} seconds in the center).","leveltip":{"label":["Damage","Damage Reduction to Ally","Range","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }}% -> {{ e5NL }}%","{{ e8 }} -> {{ e8NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,140,120],"cooldownBurn":"160/140/120","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[1.25,1.25,1.25],[0.75,0.75,0.75],[2.5,2.5,2.5],[20,30,40],[0,0,0],[0,0,0],[4000,4750,5500],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","1.25","0.75","2.5","20/30/40","0","0","4000/4750/5500","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[4000,4750,5500],"rangeBurn":"4000/4750/5500","image":{"full":"GalioR.png","sprite":"spell3.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Gangplank":{"id":41,"key":"Gangplank","name":"Gangplank","title":"the Saltwater Scourge","spells":[{"id":"GangplankQWrapper","name":"Parrrley","description":"Shoots target, plundering Gold for each enemy unit killed.","tooltip":"Fires a bullet that deals {{ e1 }} (+{{ a1 }}) physical damage (can crit and applies on-hit effects).
If Parrrley kills the target, Gangplank plunders {{ e2 }} bonus Gold and {{ e5 }}Silver Serpents. (Trade Silver Serpents at the shop to upgrade Cannon Barrage).
","leveltip":{"label":["Damage","Plunder Gold","Plunder Silver Serpents"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e5 }} -> {{ e5NL }}"]},"maxrank":5,"cooldown":[5,5,5,5,5],"cooldownBurn":"5","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[20,45,70,95,120],[2,3,4,5,6],[0,0,0,0,0],[500,500,500,500,500],[4,5,6,7,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/45/70/95/120","2/3/4/5/6","0","500","4/5/6/7/8","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"GangplankQWrapper.png","sprite":"spell3.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GangplankW","name":"Remove Scurvy","description":"Eats citrus to cure crowd control effects and restore Health.","tooltip":"Gangplank consumes a large quantity of citrus fruit, curing all disabling effects and healing him for {{ e1 }} (+{{ a1 }}) + {{ e2 }}% of his missing Health.","leveltip":{"label":["Healing","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[22,20,18,16,14],"cooldownBurn":"22/20/18/16/14","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[50,75,100,125,150],[15,15,15,15,15],[0.25,0.25,0.25,0.25,0.25],[200,200,200,200,200],[30,40,50,60,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","15","0.25","200","30/40/50/60/70","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"GangplankW.png","sprite":"spell3.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GangplankE","name":"Powder Keg","description":"Gangplank uncovers a powder keg at target location. If he attacks it, it explodes, spreading the attack's damage to enemies in the area, slowing them.","tooltip":"Places a powder keg that can be attacked by Gangplank or his enemies at a location for {{ e5 }} seconds.
If Gangplank destroys a keg, it explodes dealing the attack's damage as physical damage (ignores {{ e0 }}% Armor) to enemies and slowing them by {{ e4 }}% for {{ e2 }} seconds. Champions take {{ e3 }} bonus physical damage from the explosion.
When a keg explodes, other kegs with overlapping blast zones chain explode (damage does not stack).
Kegs health decays every {{ f5 }} seconds. (Decay rate increases at level 7 and 13)
Keg explosions apply Parrrley's plunder effect.","leveltip":{"label":["Barrel Ammo Charge","Slow","Bonus Damage Against Champions"],"effect":["{{ f2 }} -> {{ f3 }}","{{ e4 }}% -> {{ e4NL }}%","{{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[3,3,3,3,3],[2,2,2,2,2],[60,90,120,150,180],[40,50,60,70,80],[60,60,60,60,60],[2,2,2,2,2],[10,10,10,10,10],[100,100,100,100,100],[0.5,0.5,0.5,0.5,0.5],[40,40,40,40,40]],"effectBurn":[null,"3","2","60/90/120/150/180","40/50/60/70/80","60","2","10","100","0.5","40"],"vars":[],"costType":"No Cost","maxammo":"3","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"GangplankE.png","sprite":"spell3.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"GangplankR","name":"Cannon Barrage","description":"Gangplank signals his ship to bombard an area, slowing and damaging enemies.","tooltip":"Signals Gangplank's ship to fire {{ f3 }} waves of cannonballs at an area over {{ e3 }} seconds. Each wave deals {{ e1 }} (+{{ a1 }}) magic damage and slows enemies by {{ e2 }}% for {{ e6 }} seconds.
Collect Silver Serpents with Parrrley to upgrade in the shop.","leveltip":{"label":["Damage Per Wave","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[180,160,140],"cooldownBurn":"180/160/140","cost":[100,100,100],"costBurn":"100","effect":[null,[35,60,85],[30,30,30],[8,8,8],[2,2,2],[1.5,0.5,0.5],[0.5,0.5,0.5],[300,300,300],[60,60,60],[1,1,1],[30,30,30]],"effectBurn":[null,"35/60/85","30","8","2","1.5/0.5/0.5","0.5","300","60","1","30"],"vars":[{"link":"spelldamage","coeff":0.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[30000,30000,30000],"rangeBurn":"30000","image":{"full":"GangplankR.png","sprite":"spell3.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Garen":{"id":86,"key":"Garen","name":"Garen","title":"The Might of Demacia","spells":[{"id":"GarenQ","name":"Decisive Strike","description":"Garen gains a burst of movement speed, breaking free of all slows affecting him. His next attack strikes a vital area of his foe, dealing bonus damage and silencing them.","tooltip":"Garen breaks free from all slows affecting him, and gains {{ e2 }}% movement speed for {{ e4 }} seconds.
His next basic attack within {{ e5 }} seconds deals {{ e1 }} (+{{ a1 }}) physical damage and silences his target for {{ e3 }} seconds.","leveltip":{"label":["Bonus Damage","Movement Speed Duration"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,55,80,105,130],[30,30,30,30,30],[1.5,1.5,1.5,1.5,1.5],[1.5,2,2.5,3,3.5],[4.5,4.5,4.5,4.5,4.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/55/80/105/130","30","1.5","1.5/2/2.5/3/3.5","4.5","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.4,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"GarenQ.png","sprite":"spell3.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"GarenW","name":"Courage","description":"Garen passively increases his armor and magic resist by killing enemies. He may also activate this ability to grant himself a shield that reduces incoming damage for a short time.","tooltip":"Passive: Killing units permanently grants {{ f2 }} armor and magic resist, up to a maximum of {{ e3 }}. Current Bonus: {{ f1 }}
Active: Garen gains a defensive shield for {{ e4 }} seconds, reducing incoming damage by {{ e2 }}%.","leveltip":{"label":["Active Duration","Cooldown"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[24,23,22,21,20],"cooldownBurn":"24/23/22/21/20","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[0.25,0.25,0.25,0.25,0.25],[30,30,30,30,30],[30,30,30,30,30],[2,3,4,5,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0.25","30","30","2/3/4/5/6","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"GarenW.png","sprite":"spell3.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"GarenE","name":"Judgment","description":"Garen performs a dance of death with his sword, dealing damage around him for the duration and shredding the armor of enemy champions hit.","tooltip":"Garen rapidly spins his sword around his body for {{ e2 }} seconds, dealing {{ f3 }} physical damage to nearby enemies -- {{ e1 }} plus {{ e3 }}% of his attack damage (+{{ f1 }}), {{ f2 }} times (increased by 1 every 3 champion levels) -- over the duration.
Enemy champions hit by {{ e6 }} spins lose {{ e5 }}% of their armor for {{ e7 }} seconds.
Judgment deals {{ e4 }}% increased damage when striking only one enemy. Cancelling Judgment returns cooldown equal to the remaining duration. Judgment can critically strike for bonus damage.","leveltip":{"label":["Base Damage per hit","Total Attack Damage Ratio per hit"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[14,18,22,26,30],[3,3,3,3,3],[34,35,36,37,38],[33,33,33,33,33],[25,25,25,25,25],[4,4,4,4,4],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"14/18/22/26/30","3","34/35/36/37/38","33","25","4","6","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"GarenE.png","sprite":"spell3.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"GarenR","name":"Demacian Justice","description":"The enemy champion with the most recent kills is the Villain. Garen's attacks deal additional true damage to that champion.
Garen can call upon the might of Demacia to deal a finishing blow to an enemy champion that deals damage based upon how much health his target has missing. This damage is true damage against the Villain.","tooltip":"Passive: The enemy champion with the most recent kills is the Villain. Judgment and basic attacks against it deal an additional {{ e3 }}% of its maximum health as true damage.
Active: Garen calls upon the might of Demacia to attempt to execute an enemy champion, dealing magic damage equal to {{ e1 }} plus {{ e2 }}% of the target's missing health. Deals true damage to the Villain.","leveltip":{"label":["Damage","Missing Health Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[0,0,0],"costBurn":"0","effect":[null,[175,350,525],[28,33,40],[1,1,1],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"175/350/525","28/33/40","1","0","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[400,400,400],"rangeBurn":"400","image":{"full":"GarenR.png","sprite":"spell3.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Gnar":{"id":150,"key":"Gnar","name":"Gnar","title":"the Missing Link","spells":[{"id":"GnarQ","name":"Boomerang Throw / Boulder Toss","description":"Gnar throws a boomerang that damages and slows enemies it hits before returning to him. If he catches the boomerang its cooldown is reduced.
Mega Gnar instead throws a boulder that stops on the first unit hit, damaging and slowing everything nearby. It can then be picked up to reduce the cooldown.","tooltip":"Mini Gnar: Throws a boomerang that deals {{ e1 }} (+{{ a1 }}) physical damage and slows enemies by {{ e3 }}% for {{ e4 }} seconds. The boomerang returns towards Gnar after hitting an enemy, dealing {{ e7 }}% damage to subsequent targets. Each enemy can only be hit once. Catching the boomerang reduces its cooldown by {{ f1 }}%.
Mega Gnar: Throws a boulder that stops when it hits an enemy, slowing all nearby enemies and dealing {{ e2 }} (+{{ a2 }}) physical damage. Picking up the boulder reduces its cooldown by {{ e6 }}%.","leveltip":{"label":["Boomerang Damage","Boulder Damage","Slow Amount","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,17.5,15,12.5,10],"cooldownBurn":"20/17.5/15/12.5/10","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[5,35,65,95,125],[5,45,85,125,165],[15,20,25,30,35],[2,2,2,2,2],[3000,3000,3000,3000,3000],[60,60,60,60,60],[50,50,50,50,50],[200,200,200,200,200],[6,6,6,6,6],[280,280,280,280,280]],"effectBurn":[null,"5/35/65/95/125","5/45/85/125/165","15/20/25/30/35","2","3000","60","50","200","6","280"],"vars":[{"link":"attackdamage","coeff":1.15,"key":"a1"},{"link":"attackdamage","coeff":1.2,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"GnarQ.png","sprite":"spell3.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"GnarW","name":"Hyper / Wallop","description":"Gnar's attacks and spells hype him up, dealing bonus damage and granting him Movement Speed.
Mega Gnar is too enraged to be hyper and instead can rear up on his hind legs and smash down on the area in front of him, stunning enemies in an area.","tooltip":"Mini Gnar: Passive: Every 3rd attack or spell on the same target deals an additional {{ e1 }} (+{{ a1 }}) + {{ e2 }}% of the target's max Health as magic damage and grants Gnar {{ f1 }}% Movement Speed that decays over 3 seconds (max {{ e4 }} damage vs. monsters).
Mega Gnar: Stuns enemies in an area for {{ e5 }} seconds, dealing {{ e3 }} (+{{ a2 }}) physical damage.
Gnar gains Hyper's Movement Speed bonus when he leaves Mega form.","leveltip":{"label":["Hyper Damage","Hyper % Health Damage","Hyper Max Damage to monsters","Wallop Damage","Wallop Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e4 }} -> {{ e4NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,13,11,9,7],"cooldownBurn":"15/13/11/9/7","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,20,30,40,50],[6,8,10,12,14],[25,45,65,85,105],[100,150,200,250,300],[1.25,1.25,1.25,1.25,1.25],[3.5,3.5,3.5,3.5,3.5],[3,3,3,3,3],[550,550,550,550,550],[200,200,200,200,200],[0,0,0,0,0]],"effectBurn":[null,"10/20/30/40/50","6/8/10/12/14","25/45/65/85/105","100/150/200/250/300","1.25","3.5","3","550","200","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"},{"link":"attackdamage","coeff":1,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[0,0,0,0,0],"rangeBurn":"0","image":{"full":"GnarW.png","sprite":"spell3.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"GnarE","name":"Hop / Crunch","description":"Gnar leaps to a location and bounces off the head of any unit he lands on, traveling further.
Mega Gnar is too large to bounce and instead lands with earth-shattering force, dealing damage in an area around him.","tooltip":"Mini Gnar: Leaps to a location, gaining {{ e2 }}% Attack Speed for {{ e3 }} seconds. If Gnar lands on a unit he will bounce off it, traveling further. Deals {{ e1 }} (+{{ f1 }}) [6% of Gnar's Max Health] physical damage and slows briefly if the unit landed on was an enemy.
Mega Gnar: Leaps to a location and deals {{ e1 }} (+{{ f1 }}) [6% of Gnar's Max Health] physical damage to nearby enemies on landing. Enemies Gnar lands directly on top of are slowed briefly.
If Crunch is used to transform, Gnar will still be able to bounce.","leveltip":{"label":["Damage","Attack Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[22,19.5,17,14.5,12],"cooldownBurn":"22/19.5/17/14.5/12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,60,100,140,180],[20,30,40,50,60],[3,3,3,3,3],[-0.8,-0.8,-0.8,-0.8,-0.8],[0.5,0.5,0.5,0.5,0.5],[475,475,475,475,475],[525,525,525,525,525],[200,200,200,200,200],[0.6,0.6,0.6,0.6,0.6],[375,375,375,375,375]],"effectBurn":[null,"20/60/100/140/180","20/30/40/50/60","3","-0.8","0.5","475","525","200","0.6","375"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[475,475,475,475,475],"rangeBurn":"475","image":{"full":"GnarE.png","sprite":"spell3.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"GnarR","name":"GNAR!","description":"Mega Gnar throws everything around him in a chosen direction, dealing damage and slowing them. Any enemy that hits a wall is stunned and takes bonus damage.","tooltip":"Mini Gnar: Passive: Increases Boomerang Throw's cooldown reduction on catch to {{ e4 }}% and Hyper's Movement Speed bonus to {{ e2 }}%.
Mega Gnar: Knocks nearby enemies in the specified direction, dealing {{ e1 }} (+{{ a1 }})(+{{ a2 }}) physical damage and slowing them by {{ e8 }}% for {{ e3 }} seconds. Enemies that hit a wall take {{ e7 }}% damage and are stunned instead of slowed.","leveltip":{"label":["Damage","Slow/Stun Duration","Boomerang Cooldown Reduction","Hyper Movement Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[0,0,0],"costBurn":"0","effect":[null,[200,300,400],[45,60,75],[1.25,1.5,1.75],[50,55,60],[475,475,475],[500,500,500],[150,150,150],[45,45,45],[0,0,0],[0,0,0]],"effectBurn":[null,"200/300/400","45/60/75","1.25/1.5/1.75","50/55/60","475","500","150","45","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.5,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[590,590,590],"rangeBurn":"590","image":{"full":"GnarR.png","sprite":"spell3.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Gragas":{"id":79,"key":"Gragas","name":"Gragas","title":"the Rabble Rouser","spells":[{"id":"GragasQ","name":"Barrel Roll","description":"Gragas rolls his cask to a location, which can be activated to explode or will explode on its own after 4 seconds. Enemies struck by the blast have their Movement Speed slowed.","tooltip":"Gragas rolls his cask to a location. When reactivated, or after {{ e4 }} seconds, the cask will explode, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and slowing their movement speed by {{ e2 }}% for {{ e3 }} seconds.
The damage and slow amount increase as the cask ferments, up to {{ e6 }}% after {{ e5 }} seconds. Deals {{ e7 }}% damage to minions.","leveltip":{"label":["Damage","Slow %","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[80,120,160,200,240],[40,45,50,55,60],[2,2,2,2,2],[4,4,4,4,4],[2,2,2,2,2],[150,150,150,150,150],[70,70,70,70,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","40/45/50/55/60","2","4","2","150","70","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"GragasQ.png","sprite":"spell3.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GragasW","name":"Drunken Rage","description":"Gragas guzzles down brew from his cask for 1 second. After finishing, he becomes drunkenly empowered, dealing magic damage to all nearby enemies on his next basic attack and reducing damage received.","tooltip":"Gragas guzzles down his brew, taking {{ e1 }}% reduced damage for {{ e5 }} seconds.
After finishing his drink, his next basic attack deals magic damage to nearby enemies equal to {{ e3 }} (+{{ a1 }}) plus {{ e2 }}% of their max Health (max {{ e4 }} vs monsters).","leveltip":{"label":["Damage Reduction","Base Damage","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7,6,5,4],"cooldownBurn":"8/7/6/5/4","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[10,12,14,16,18],[8,8,8,8,8],[20,50,80,110,140],[300,300,300,300,300],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/12/14/16/18","8","20/50/80/110/140","300","2.5","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"GragasW.png","sprite":"spell3.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GragasE","name":"Body Slam","description":"Gragas charges to a location and collides with the first enemy unit he comes across, dealing damage to all nearby enemy units and stunning them.","tooltip":"Gragas charges forward, colliding with the first enemy unit. He deals {{ e1 }} (+{{ a1 }}) magic damage to enemies in the area and bumps them back, stunning them for {{ e2 }} second.
Body Slam's Cooldown is reduced by {{ f1 }} seconds if Gragas collides with a unit.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[80,130,180,230,280],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/130/180/230/280","1","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"GragasE.png","sprite":"spell3.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GragasR","name":"Explosive Cask","description":"Gragas hurls his cask to a location, dealing damage and knocking back enemies caught in the blast radius.","tooltip":"Gragas hurls his cask, causing it to explode when it lands. Enemies hit take {{ e1 }} (+{{ a1 }}) magic damage and are knocked away from the explosion.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[200,300,400],[900,900,900],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"200/300/400","900","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"GragasR.png","sprite":"spell3.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Graves":{"id":104,"key":"Graves","name":"Graves","title":"the Outlaw","spells":[{"id":"GravesQLineSpell","name":"End of the Line","description":"Graves fires an explosive shell that detonates after 2 seconds, or 0.2 seconds if it strikes terrain.","tooltip":"Fires a powder round that deals {{ e1 }} (+{{ f1 }}) physical damage to enemies in a line.
After 2 seconds or {{ e6 }} seconds on collision with terrain, the round detonates, dealing {{ e2 }} (+{{ f2 }}) physical damage to all nearby enemies.","leveltip":{"label":["Damage","Detonation AD Ratio","Mana Cost","Cooldown "],"effect":[" {{ e1 }} -> {{ e1NL }} / {{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[40,55,70,85,100],[80,110,140,170,200],[0.4,0.7,1,1.3,1.6],[0,0,0,0,0],[1,1,1,1,1],[0.2,0.2,0.2,0.2,0.2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/55/70/85/100","80/110/140/170/200","0.4/0.7/1/1.3/1.6","0","1","0.2","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"GravesQLineSpell.png","sprite":"spell3.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GravesSmokeGrenade","name":"Smoke Screen","description":"Graves fires a smoke canister at the target area creating a cloud of smoke. Enemies inside the smoke cloud have reduced sight range and Movement Speed. ","tooltip":"Creates a cloud of Black Smoke lasting 4 seconds. Enemies inside Black Smoke cannot see out.
Deals {{ e1 }} (+{{ a1 }}) magic damage and slows by {{ e2 }}% on impact.","leveltip":{"label":["Damage","Slow","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[26,24,22,20,18],"cooldownBurn":"26/24/22/20/18","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[60,110,160,210,260],[15,20,25,30,35],[200,200,200,200,200],[4,4,4,4,4],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/110/160/210/260","15/20/25/30/35","200","4","1.5","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"GravesSmokeGrenade.png","sprite":"spell3.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GravesMove","name":"Quickdraw","description":"Graves dashes forward gaining an Armor boost for several seconds. If Graves dashes towards an enemy champion, gain two stacks of True Grit instead. Hitting enemies with basic attacks lowers the cooldown of this skill and refreshes the resistance boost. ","tooltip":"Dashes in a direction, reloading one shell. Graves gains True Grit for 4 seconds. If Graves dashes towards an enemy champion, gain two stacks of True Grit instead.
Basic attack hits lower the cooldown of Quickdraw by {{ e4 }} seconds. Damage against non-minions also refreshes True Grit.
True Grit grants {{ e5 }} Armor (stacks up to {{ e0 }} times).","leveltip":{"label":["True Grit Armor","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[30,40,50,60,70],[4,4,4,4,4],[20,25,30,35,40],[0.5,0.5,0.5,0.5,0.5],[5,7.5,10,12.5,15],[750,750,750,750,750],[375,375,375,375,375],[275,275,275,275,275],[60,60,60,60,60],[8,8,8,8,8]],"effectBurn":[null,"30/40/50/60/70","4","20/25/30/35/40","0.5","5/7.5/10/12.5/15","750","375","275","60","8"],"vars":[],"costType":" Mana","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"GravesMove.png","sprite":"spell3.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"GravesChargeShot","name":"Collateral Damage","description":"Graves fires an explosive shell dealing heavy damage to the first champion it hits. After hitting a champion or reaching the end of its range, the shell explodes dealing damage in a cone. ","tooltip":"Fires an explosive shell with such force that it knocks Graves back. The shell deals {{ e1 }} (+{{ f1 }}) physical damage to the first enemy hit. After hitting an enemy Champion or reaching the end of its range, the shell explodes, dealing {{ e2 }} (+{{ f2 }}) physical damage in a cone.","leveltip":{"label":["Primary Damage","Cone Damage","Cooldown "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[250,400,550],[200,320,440],[400,400,400],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250/400/550","200/320/440","400","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"GravesChargeShot.png","sprite":"spell4.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Hecarim":{"id":120,"key":"Hecarim","name":"Hecarim","title":"the Shadow of War","spells":[{"id":"HecarimRapidSlash","name":"Rampage","description":"Hecarim cleaves nearby enemies dealing physical damage. ","tooltip":"Hecarim cleaves nearby enemies for {{ e1 }} (+{{ f1 }}) physical damage. ({{ e5 }}% damage to minions)
If Hecarim damages at least one enemy with this attack he gains a stack of Rampage, reducing the base cooldown of this skill by {{ e3 }} second for a short duration. This effect can stack up to {{ e2 }} times.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[32,34,36,38,40],"costBurn":"32/34/36/38/40","effect":[null,[50,85,120,155,190],[2,2,2,2,2],[1,1,1,1,1],[3,3,3,3,3],[66,66,66,66,66],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/85/120/155/190","2","1","3","66","6","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"HecarimRapidSlash.png","sprite":"spell4.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HecarimW","name":"Spirit of Dread","description":"Hecarim deals magic damage to nearby enemies for a short duration. Hecarim gains Health equal to a percentage of any damage those enemies suffer.","tooltip":"Hecarim deals {{ e2 }} (+{{ a1 }}) magic damage over {{ e3 }} seconds to all nearby enemies. Hecarim is healed for {{ e1 }}% of the damage these enemies take from any source.
Hecarim cannot heal more than {{ e4 }} Health from minions or monsters.","leveltip":{"label":["Damage","Healing Cap","Cooldown","Mana Cost "],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[22,21,20,19,18],"cooldownBurn":"22/21/20/19/18","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[20,20,20,20,20],[80,120,160,200,240],[4,4,4,4,4],[90,120,150,180,210],[8,8,8,8,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20","80/120/160/200/240","4","90/120/150/180/210","8","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[575,575,575,575,575],"rangeBurn":"575","image":{"full":"HecarimW.png","sprite":"spell4.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HecarimRamp","name":"Devastating Charge","description":"Hecarim gains increasing Movement Speed and can move through units for a short duration. His next attack knocks the target back and deals additional physical damage based on the distance he has traveled since activating the ability. ","tooltip":"Hecarim gains increasing Movement Speed and can move through units for {{ e5 }} seconds. His next attack knocks the target back dealing {{ e4 }} (+{{ a1 }}) to {{ e3 }} (+{{ a2 }}) physical damage based on how far Hecarim has traveled during Devastating Charge (knockback distance also scales).","leveltip":{"label":["Minimum Damage","Maximum Damage","Cooldown"],"effect":[" {{ e4 }} -> {{ e4NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[24,22,20,18,16],"cooldownBurn":"24/22/20/18/16","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[250,250,250,250,250],[450,450,450,450,450],[80,150,220,290,360],[40,75,110,145,180],[4,4,4,4,4],[0.75,0.75,0.75,0.75,0.75],[1200,1200,1200,1200,1200],[0.25,0.25,0.25,0.25,0.25],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0]],"effectBurn":[null,"250","450","80/150/220/290/360","40/75/110/145/180","4","0.75","1200","0.25","2.5","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"a1"},{"link":"bonusattackdamage","coeff":1,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"HecarimRamp.png","sprite":"spell4.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HecarimUlt","name":"Onslaught of Shadows","description":"Hecarim summons spectral riders and charges forward, dealing magic damage in a line. Hecarim creates a shockwave when he finishes his charge, causing nearby enemies to flee in terror.","tooltip":"Hecarim summons spectral riders and charges forward, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies hit.
Hecarim releases a shockwave when he finishes his charge, causing nearby enemies to flee from him for {{ e2 }} second.
Hecarim himself will only move to the targeted location. The riders will always move the full distance.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[1,1,1],[50,125,200],[1100,1100,1100],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","1","50/125/200","1100","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[50000,50000,50000],"rangeBurn":"50000","image":{"full":"HecarimUlt.png","sprite":"spell4.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Heimerdinger":{"id":74,"key":"Heimerdinger","name":"Heimerdinger","title":"the Revered Inventor","spells":[{"id":"HeimerdingerQ","name":"H-28G Evolution Turret","description":"Heimerdinger lays down a rapid-fire cannon turret equipped with a secondary pass-through beam attack (turrets deal half damage to towers).","tooltip":"Places a Turret. Turret attacks prioritize Heimerdinger's targets and enemies attacking Heimerdinger. Turrets shut down if Heimerdinger moves far away. Heimerdinger generates a Turret Kit every {{ f1 }} seconds and can hold {{ e3 }} Kits at once.
H-28G Evolution Turret Stats Health:{{ f4 }}(+{{ f2 }}) Attack - Cannon: {{ e1 }} (+{{ a1 }}) Magic Damage. Attack - Beam: {{ e2 }} (+{{ a2 }}) Magic Damage every {{ e6 }} seconds. Maximum Turrets Placed: 3","leveltip":{"label":["Cannon Damage","Beam Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[1,1,1,1,1],"cooldownBurn":"1","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[6,9,12,15,18],[40,60,80,100,120],[3,3,3,3,3],[26,22,18,14,10],[900,900,900,900,900],[90,90,90,90,90],[0,0,0,0,0],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[20,20,20,20,20]],"effectBurn":[null,"6/9/12/15/18","40/60/80/100/120","3","26/22/18/14/10","900","90","0","0.25","0","20"],"vars":[{"link":"@cooldownchampion","coeff":0,"key":"f1"},{"link":"@text","coeff":[150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,550,575],"key":"f4"},{"link":"@cooldownchampion","coeff":0,"key":"f2"},{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.55,"key":"a2"}],"costType":" Mana and Turret Kit","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"HeimerdingerQ.png","sprite":"spell4.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana and Turret Kit"},{"id":"HeimerdingerW","name":"Hextech Micro-Rockets","description":"Heimerdinger fires long-range rockets that converge on his cursor. ","tooltip":"Unleashes a barrage of 5 rockets that converge towards the cursor and fan out past it. Rockets deal {{ e1 }} (+{{ a1 }}) Magic Damage. Additional rocket hits deal reduced damage:
Champions and Monsters: {{ e2 }} (+{{ a2 }}) Magic Damage, max {{ e6 }} (+{{ f2 }}) total damage Minions: 60% of base damage
Rocket hits against champions charge nearby turret beam attacks.","leveltip":{"label":["Cooldown","Damage","Maximum Damage","Mana Cost"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}","{{ e6 }} -> {{ e6NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[60,90,120,150,180],[12,18,24,30,36],[25,25,25,25,25],[20,20,20,20,20],[30,30,30,30,30],[108,162,216,270,324],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/90/120/150/180","12/18/24/30/36","25","20","30","108/162/216/270/324","5","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"},{"link":"spelldamage","coeff":0.12,"key":"a2"},{"link":"@dynamic.abilitypower","coeff":0.93,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[1325,1325,1325,1325,1325],"rangeBurn":"1325","image":{"full":"HeimerdingerW.png","sprite":"spell4.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HeimerdingerE","name":"CH-2 Electron Storm Grenade","description":"Heimerdinger lobs a grenade at a location, dealing damage to enemy units, as well as stunning anyone directly hit and slowing surrounding units.","tooltip":"Hurls a grenade that deals {{ e1 }} (+{{ a1 }}) Magic Damage to enemies and slows their Movement Speed by {{ e3 }}% for {{ e2 }} seconds. Enemies in the center of the blast are also stunned for {{ e4 }} seconds.
Hitting a champion fully charges nearby turret beams.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[85,85,85,85,85],"costBurn":"85","effect":[null,[60,100,140,180,220],[2,2,2,2,2],[35,35,35,35,35],[1.25,1.25,1.25,1.25,1.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","2","35","1.25","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[970,970,970,970,970],"rangeBurn":"970","image":{"full":"HeimerdingerE.png","sprite":"spell4.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HeimerdingerR","name":"UPGRADE!!!","description":"Heimerdinger invents an upgrade, causing his next spell to have increased effects. ","tooltip":"Makes Heimerdinger's next ability free and gives it bonus effects. Reactivate to cancel.
H-28Q Apex Turret: Places a Turret for 8 seconds that deals {{ e7 }} (+{{ a2 }}) Magic Damage with its cannon and {{ e1 }} (+{{ a1 }}) Magic Damage with its beam. It has splash damage, immunity to disables, its attacks slow by 25% for 2 seconds and it doesn't count toward the Turret limit.
Hextech Rocket Swarm: Fires 4 waves of rockets that each deal {{ e8 }} (+{{ f1 }}) Magic Damage. Champions and Monsters hit by multiple rockets take reduced damage, max {{ e5 }} (+{{ f2 }}).
CH-3X Lightning Grenade: Throws a bouncing grenade that discharges three times, dealing {{ e0 }} (+{{ f4 }}) Magic Damage. Both the stun and slow areas are larger and the slow is improved to 80%. ","leveltip":{"label":["Cooldown","Apex Turret Cannon Damage","Turret Beam Damage","Rocket Swarm Damage","Rocket Swarm Max Damage","Lightning Grenade Damage"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e7 }} -> {{ e7NL }}","{{ e1 }} -> {{ e1NL }}","{{ e8 }} -> {{ e8NL }}","{{ e5 }} -> {{ e5NL }}","{{ e0 }} -> {{ e0NL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[100,100,100],"costBurn":"100","effect":[null,[200,270,340],[80,80,80],[1.5,1.5,1.5],[0.12,0.12,0.12],[500,690,865],[0.45,0.45,0.45],[80,100,120],[135,180,225],[28,39,49],[150,250,350]],"effectBurn":[null,"200/270/340","80","1.5","0.12","500/690/865","0.45","80/100/120","135/180/225","28/39/49","150/250/350"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a2"},{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"@dynamic.abilitypower","coeff":0,"key":"f1"},{"link":"@dynamic.abilitypower","coeff":1.83,"key":"f2"},{"link":"@dynamic.abilitypower","coeff":0.6,"key":"f4"}],"costType":" Mana","maxammo":"-1","range":[1,1,1],"rangeBurn":"1","image":{"full":"HeimerdingerR.png","sprite":"spell4.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Illaoi":{"id":420,"key":"Illaoi","name":"Illaoi","title":"the Kraken Priestess","spells":[{"id":"IllaoiQ","name":"Tentacle Smash","description":"Increases the damage dealt by Tentacles. When activated, Illaoi smashes down a Tentacle that deals physical damage.","tooltip":"Passive:Slam damage is increased by {{ e6 }}% ({{ f1 }}).
Active: Illaoi swings her idol, causing a Tentacle to Slam forward.","leveltip":{"label":["Slam Bonus","Cooldown","Mana Cost"],"effect":["{{ e6 }}% -> {{ e6NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[10,10,10,10,10],[200,200,200,200,200],[800,800,800,800,800],[10,8,6,4,2],[5,5,5,5,5],[10,15,20,25,30],[1.2,1.2,1.2,1.2,1.2],[-0.3,-0.35,-0.4,-0.45,-0.5],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0]],"effectBurn":[null,"10","200","800","10/8/6/4/2","5","10/15/20/25/30","1.2","-0.3/-0.35/-0.4/-0.45/-0.5","1.5","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"IllaoiQ.png","sprite":"spell4.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IllaoiW","name":"Harsh Lesson","description":"Illaoi leaps to her target, dealing physical damage and causing nearby Tentacles to also swing at the target.","tooltip":"Illaoi leaps at her target on her next basic attack, dealing bonus physical damage equal to {{ f1*100 }}% of their maximum health [{{ e1 }}% + {{ f2*100 }}% per 100 attack damage].
When she strikes, nearby Tentacles will Slam at the target.
Harsh Lesson's bonus damage against monsters is capped at {{ e3 }} damage per hit.","leveltip":{"label":["Base Damage"],"effect":["{{ e1 }}% -> {{ e1NL }}%"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[3,3.5,4,4.5,5],[2,2,2,2,2],[300,300,300,300,300],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"3/3.5/4/4.5/5","2","300","6","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"IllaoiW.png","sprite":"spell4.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IllaoiE","name":"Test of Spirit","description":"Illaoi rips the spirit from a foe's body, forcing it to stand before her. Spirits echo a percentage of the damage they take to the original target. If killed, or if the target gets too far from the spirit, the target will become a Vessel and begin spawning Tentacles.","tooltip":"Illaoi pulls the spirit from an enemy champion for {{ e3 }} seconds (reduced when Illaoi is attacked by the target). The spirit can be attacked, with {{ e1 }}% (+{{ f5 }}%) of the damage taken echoing to its owner.
If the spirit dies or the target leaves its range, the target becomes a Vessel for {{ e2 }} seconds and is slowed by {{ e8 }}% for {{ e5 }} seconds. Vessels spawn Tentacles every {{ f1 }} seconds if no other Tentacles are nearby.
Tentacles will automatically Slam at spirits and Vessels once every 10 seconds.","leveltip":{"label":["Damage Echo","Cooldown","Mana Cost"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ f4 }} -> {{ f6 }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[35,40,45,50,55],"costBurn":"35/40/45/50/55","effect":[null,[25,30,35,40,45],[12,12,12,12,12],[10,10,10,10,10],[1500,1500,1500,1500,1500],[1.5,1.5,1.5,1.5,1.5],[3,3,3,3,3],[20,18,16,14,12],[80,80,80,80,80],[8,8,8,8,8],[4,3,0,0,0]],"effectBurn":[null,"25/30/35/40/45","12","10","1500","1.5","3","20/18/16/14/12","80","8","4/3/0/0/0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"IllaoiE.png","sprite":"spell4.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IllaoiR","name":"Leap of Faith","description":"Illaoi smashes her idol into the ground, dealing physical damage to nearby enemies. A Tentacle spawns for each enemy champion hit.","tooltip":"Illaoi smashes her idol into the ground, dealing {{ e2 }} (+{{ a1 }}) physical damage to nearby enemies and spawning a Tentacle for each enemy champion hit.
For the next {{ e1 }} seconds Tentacles are untargetable and will Slam 50% faster, and Harsh Lesson has a 2 second cooldown.
'There are kind and gentle gods. Mine isn't one of those.'","leveltip":{"label":["Base Damage","Cooldown<"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[100,100,100],"costBurn":"100","effect":[null,[8,8,8],[150,250,350],[1500,1500,1500],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"8","150/250/350","1500","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450],"rangeBurn":"450","image":{"full":"IllaoiR.png","sprite":"spell4.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Irelia":{"id":39,"key":"Irelia","name":"Irelia","title":"the Will of the Blades","spells":[{"id":"IreliaGatotsu","name":"Bladesurge","description":"Irelia dashes forward to strike her target. If it kills the target, Bladesurge's cooldown refreshes and refunds a portion of the Mana Cost.","tooltip":"Irelia dashes forward to strike her target, dealing {{ e1 }} (+{{ f1 }}) physical damage and applying on-hit effects.
If it kills the target, Bladesurge's cooldown is refreshed and Irelia gains {{ e2 }} Mana.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[14,12,10,8,6],"cooldownBurn":"14/12/10/8/6","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[20,50,80,110,140],[35,35,35,35,35],[1400,1400,1400,1400,1400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/50/80/110/140","35","1400","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"IreliaGatotsu.png","sprite":"spell4.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IreliaHitenStyle","name":"Hiten Style","description":"Irelia is skilled in the art of Hiten, passively giving her physical attacks Health restoration. Activating Hiten Style doubles her Health restoration and gives her basic attacks true damage.","tooltip":"Passive: Basic attacks restore {{ e1 }} Health.
Active: Irelia's basic attacks deal {{ e2 }} true damage and Hiten Style restores twice as much health for {{ e3 }} seconds.","leveltip":{"label":["Health Restoration","True Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[5,7,9,11,13],[15,30,45,60,75],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/7/9/11/13","15/30/45/60/75","6","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"IreliaHitenStyle.png","sprite":"spell4.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IreliaEquilibriumStrike","name":"Equilibrium Strike","description":"Irelia's attack balances the scales, dealing damage and slowing the target. However, if the target has a higher Health % than Irelia, then the blow stuns the target instead of slowing.","tooltip":"Irelia pierces her target, dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing them by {{ e3 }}% for {{ e2 }} second(s).
If the target has a higher Health % than Irelia, she stuns them for the duration instead.","leveltip":{"label":["Damage","Disable Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[80,120,160,200,240],[1,1.25,1.5,1.75,2],[60,60,60,60,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","1/1.25/1.5/1.75/2","60","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"IreliaEquilibriumStrike.png","sprite":"spell4.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IreliaTranscendentBlades","name":"Transcendent Blades","description":"Irelia summons 4 spirit blades that she can fling to deal physical damage and siphon life from enemies they pass through.","tooltip":"Irelia summons 4 spirit blades that she can fling to deal {{ e1 }} (+{{ a2 }})(+{{ a1 }}) physical damage to enemies they pass through. She heals for {{ e3 }}% of the damage dealt against champions. ({{ e4 }}% vs. minions and monsters)","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,85,60],"cooldownBurn":"110/85/60","cost":[100,100,100],"costBurn":"100","effect":[null,[80,120,160],[10,10,10],[25,25,25],[10,10,10],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"80/120/160","10","25","10","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.7,"key":"a2"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"IreliaTranscendentBlades.png","sprite":"spell4.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Ivern":{"id":427,"key":"Ivern","name":"Ivern","title":"the Green Father","spells":[{"id":"IvernQ","name":"Rootcaller","description":"Ivern conjures a vine, dealing damage and rooting enemy targets hit. Ivern's allies can dash to the rooted target.","tooltip":"Ivern conjures a vine dealing {{ e5 }} (+{{ f1 }}) magic damage and rooting the first enemy hit for {{ e1 }} second(s). Allies can click on rooted enemies to dash into attack range.","leveltip":{"label":["Root Duration","Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[1.2,1.4,1.6,1.8,2],[15,20,25,30,35],[26,23,20,17,14],[2,2,2,2,2],[80,125,170,215,260],[40,55,70,85,100],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.2/1.4/1.6/1.8/2","15/20/25/30/35","26/23/20/17/14","2","80/125/170/215/260","40/55/70/85/100","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"IvernQ.png","sprite":"spell4.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IvernW","name":"Brushmaker","description":"In brush, Ivern's attacks are ranged and deal bonus magic damage. Ivern can activate this ability to create a patch of brush.","tooltip":"Passive: In brush, Ivern's attacks are ranged and deal {{ e5 }} (+{{ f2 }}) bonus magic damage.
Active: Ivern grows a patch of brush for {{ e1 }} seconds. For 3 seconds the area in and around the brush is revealed.","leveltip":{"label":["Bonus Magic Damage","Brush Recharge"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[30,30,30,30,30],[90,90,90,90,90],[190,190,190,190,190],[40,36,32,28,24],[20,30,40,50,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30","90","190","40/36/32/28/24","20/30/40/50/60","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"3","range":[1650,1650,1650,1650,1650],"rangeBurn":"1650","image":{"full":"IvernW.png","sprite":"spell4.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IvernE","name":"Triggerseed","description":"Ivern places a shield on an ally which explodes after a short duration slowing and damaging enemies.","tooltip":"Ivern shields an ally, absorbing up to {{ e1 }} (+{{ f3 }}) damage. After 2 seconds, the shield bursts dealing {{ e2 }} (+{{ f4 }}) magic damage and slowing enemies by {{ e3 }}% for {{ e4 }} seconds.","leveltip":{"label":["Shield","Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[70,100,130,160,190],[60,90,120,150,180],[40,45,50,55,60],[2,2,2,2,2],[1,1,1,1,1],[80,120,160,200,240],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","60/90/120/150/180","40/45/50/55/60","2","1","80/120/160/200/240","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"IvernE.png","sprite":"spell4.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IvernR","name":"Daisy!","description":"Ivern summons his Sentinel friend Daisy to fight with him. Daisy will send out a shockwave if she attacks the same champion three times in a row.","tooltip":"Ivern summons his sentinel friend Daisy. If Daisy attacks the same champion three times in a row, she will create a shockwave knocking enemies up for 1 second (3s cooldown). Daisy gains additional damage and defenses based on Ivern's Ability Power.
Recasting this ability will direct Daisy to a new target or position.","leveltip":{"label":["Cooldown","Daisy Health","Daisy Resistances","Daisy Bonus Attack Speed"],"effect":["{{ e6 }} -> {{ e6NL }}","{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":3,"cooldown":[160,140,120],"cooldownBurn":"160/140/120","cost":[100,100,100],"costBurn":"100","effect":[null,[1250,2500,3750],[15,40,90],[30,50,70],[20,25,30],[150,250,350],[160,140,120],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1250/2500/3750","15/40/90","30/50/70","20/25/30","150/250/350","160/140/120","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"IvernR.png","sprite":"spell4.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Janna":{"id":40,"key":"Janna","name":"Janna","title":"the Storm's Fury","spells":[{"id":"HowlingGale","name":"Howling Gale","description":"By creating a localized change in pressure and temperature, Janna is able to create a small storm that grows in size with time. She can activate the spell again to release the storm. On release this storm will fly towards the direction it was cast in, dealing damage and knocking away any enemies in its path.","tooltip":"Summons a whirlwind, which deals {{ e1 }} (+{{ a1 }}) magic damage to enemies in its path and knocks them into the air for {{ e4 }} seconds.
The whirlwind can be charged for up to {{ e6 }} seconds. For each second it charges, it deals {{ e2 }} (+{{ a2 }}) bonus damage, knocks up for an additional {{ e5 }} seconds, and travels {{ e3 }}% further.
Activate again to release the whirlwind early.","leveltip":{"label":["Base Damage","Damage Per Second Charged","Mana Cost","Cooldown "],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ e2 }} -> {{ e2NL }} ","{{ cost }} -> {{ costNL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[90,105,120,135,150],"costBurn":"90/105/120/135/150","effect":[null,[60,85,110,135,160],[15,20,25,30,35],[35,35,35,35,35],[0.5,0.5,0.5,0.5,0.5],[0.25,0.25,0.25,0.25,0.25],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/85/110/135/160","15/20/25/30/35","35","0.5","0.25","3","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"},{"link":"spelldamage","coeff":0.1,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1700,1700,1700,1700,1700],"rangeBurn":"1700","image":{"full":"HowlingGale.png","sprite":"spell4.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SowTheWind","name":"Zephyr","description":"Janna summons an air elemental that passively increases her Movement Speed and enables her to pass through units. She may also activate this ability to deal damage and slow an enemy's Movement Speed. The passive is lost while this ability is on cooldown.","tooltip":"Passive: Increases Movement Speed by {{ e1 }}% (+{{ f1 }}%) and allows movement through units.
Active: Deals {{ e2 }} (+{{ a1 }}) magic damage to an enemy and slows their Movement Speed by {{ e3 }}% (+{{ f2 }}%) for {{ e4 }} seconds. Passive benefit is lost while Zephyr is on cooldown.","leveltip":{"label":["Passive Movement Speed","Damage","Slow %","Mana Cost"],"effect":["{{ e1 }}% -> {{ e1NL }}% ","{{ e2 }} -> {{ e2NL }} ","{{ e3 }}% -> {{ e3NL }}% ","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[40,50,60,70,80],"costBurn":"40/50/60/70/80","effect":[null,[9,11,13,15,17],[60,115,170,225,280],[24,28,32,36,40],[3,3,3,3,3],[0.0002,0.0002,0.0002,0.0002,0.0002],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"9/11/13/15/17","60/115/170/225/280","24/28/32/36/40","3","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.02,"key":"f1"},{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.06,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"SowTheWind.png","sprite":"spell4.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"EyeOfTheStorm","name":"Eye Of The Storm","description":"Janna conjures a defensive gale that shields an ally champion or turret from incoming damage and increases their Attack Damage.","tooltip":"Shields an allied Champion or turret for {{ e3 }} seconds. The shield absorbs up to {{ e1 }} (+{{ a1 }}) damage and grants {{ e2 }} (+{{ a2 }}) Attack Damage until it breaks.","leveltip":{"label":["Shield Health","Attack Damage Bonus","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[80,120,160,200,240],[10,17.5,25,32.5,40],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","10/17.5/25/32.5/40","5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"spelldamage","coeff":0.1,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"EyeOfTheStorm.png","sprite":"spell4.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ReapTheWhirlwind","name":"Monsoon","description":"Janna surrounds herself in a magical storm, throwing enemies back. After the storm has settled, soothing winds heal nearby allies while the ability is active.","tooltip":"Summons forth the might of the wind to knock surrounding enemies back and restores {{ e1 }} (+{{ a1 }}) Health to nearby allies each second for {{ e3 }} seconds.","leveltip":{"label":["Heal Per Second","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,135,120],"cooldownBurn":"150/135/120","cost":[100,100,100],"costBurn":"100","effect":[null,[100,150,200],[300,450,600],[3,3,3],[700,700,700],[875,875,875],[875,875,875],[1200,1200,1200],[10,10,10],[0.5,0.5,0.5],[0,0,0]],"effectBurn":[null,"100/150/200","300/450/600","3","700","875","875","1200","10","0.5","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[725,725,725],"rangeBurn":"725","image":{"full":"ReapTheWhirlwind.png","sprite":"spell4.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"JarvanIV":{"id":59,"key":"JarvanIV","name":"Jarvan IV","title":"the Exemplar of Demacia","spells":[{"id":"JarvanIVDragonStrike","name":"Dragon Strike","description":"Jarvan IV extends his lance, dealing physical damage and lowering the Armor of enemies in its path. Additionally, this will pull Jarvan to his Demacian Standard, knocking up enemies in his path.","tooltip":"Extends Jarvan IV's lance dealing {{ e1 }} (+{{ a1 }}) physical damage and lowering the Armor of enemies hit by {{ e2 }}% for {{ e3 }} seconds.
If the lance contacts Demacian Standard it will pull Jarvan IV to its location, knocking up enemies in his path. This effect can be triggered even while immobilized.","leveltip":{"label":["Damage","Armor Reduction","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[70,115,160,205,250],[10,14,18,22,26],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","10/14/18/22/26","3","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[770,770,770,770,770],"rangeBurn":"770","image":{"full":"JarvanIVDragonStrike.png","sprite":"spell4.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JarvanIVGoldenAegis","name":"Golden Aegis","description":"Jarvan IV calls upon the ancient kings of Demacia to shield him from harm and slow surrounding enemies.","tooltip":"Grants a shield that absorbs {{ e1 }} (+{{ f1 }} [{{ e6 }}% max Health] for each nearby enemy champion) damage for {{ e4 }} seconds, and slows surrounding enemies by {{ e2 }}% for {{ e5 }} seconds.","leveltip":{"label":["Shield","Bonus Shield Percent Health","Slow Amount"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e6 }}% -> {{ e6NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[65,90,115,140,165],[15,20,25,30,35],[10,20,30,40,50],[5,5,5,5,5],[2,2,2,2,2],[2,2.5,3,3.5,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/90/115/140/165","15/20/25/30/35","10/20/30/40/50","5","2","2/2.5/3/3.5/4","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"JarvanIVGoldenAegis.png","sprite":"spell4.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JarvanIVDemacianStandard","name":"Demacian Standard","description":"Jarvan IV carries the pride of Demacia, passively granting him bonus Attack Speed. Activating Demacian Standard allows Jarvan IV to place a Demacian flag that deals magic damage on impact and grants Attack Speed to nearby allied champions.","tooltip":"Passive: Gains {{ e3 }}% Attack Speed.
Active: Throws a Demacian Standard to a nearby area dealing {{ e2 }} (+{{ a1 }}) magic damage to enemies. The Standard lasts for {{ e4 }} seconds and grants surrounding allied champions {{ e3 }}% Attack Speed.","leveltip":{"label":["Damage","Passive Attack Speed","Active Attack Speed","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}"," {{ e3 }}% -> {{ e3NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12.5,12,11.5,11],"cooldownBurn":"13/12.5/12/11.5/11","cost":[55,55,55,55,55],"costBurn":"55","effect":[null,[10,13,16,19,22],[60,105,150,195,240],[15,17.5,20,22.5,25],[8,8,8,8,8],[0.15,0.025,0.025,0.025,0.025],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/13/16/19/22","60/105/150/195/240","15/17.5/20/22.5/25","8","0.15/0.025/0.025/0.025/0.025","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[860,860,860,860,860],"rangeBurn":"860","image":{"full":"JarvanIVDemacianStandard.png","sprite":"spell4.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JarvanIVCataclysm","name":"Cataclysm","description":"Jarvan IV heroically leaps into battle at a target with such force that he terraforms the surrounding area to create an arena around them. Nearby enemies are damaged at the moment of impact.","tooltip":"Heroically leaps to an enemy Champion dealing {{ e1 }} (+{{ a1 }}) physical damage to nearby enemies and creating an arena of impassable terrain around them for {{ e2 }} seconds.
Activate again to collapse the terrain.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[100,100,100],"costBurn":"100","effect":[null,[200,325,450],[3.5,3.5,3.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"200/325/450","3.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"JarvanIVCataclysm.png","sprite":"spell4.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Jax":{"id":24,"key":"Jax","name":"Jax","title":"Grandmaster at Arms","spells":[{"id":"JaxLeapStrike","name":"Leap Strike","description":"Jax leaps toward a unit. If they are an enemy, he strikes them with his weapon.","tooltip":"Jax leaps to target unit, dealing {{ e1 }} (+{{ f1 }})(+{{ a1 }}) physical damage if it is an enemy.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[70,110,150,190,230],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"f1"},{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"JaxLeapStrike.png","sprite":"spell4.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JaxEmpowerTwo","name":"Empower","description":"Jax charges his weapon with energy, causing his next attack to deal additional damage.","tooltip":"Jax charges his weapon with energy, causing his next basic attack or Leap Strike to deal an additional {{ e1 }} (+{{ a1 }}) Magic Damage.","leveltip":{"label":["Damage","Cooldown"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[7,6,5,4,3],"cooldownBurn":"7/6/5/4/3","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[40,75,110,145,180],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/75/110/145/180","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"JaxEmpowerTwo.png","sprite":"spell4.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JaxCounterStrike","name":"Counter Strike","description":"Jax's combat prowess allows him to dodge all incoming attacks for a short duration and then quickly counterattack, stunning all surrounding enemies.","tooltip":"Jax enters a defensive stance for up to {{ e6 }} seconds, dodging all incoming basic attacks and taking {{ e3 }}% less damage from area of effect abilities.
After 2 seconds or if activated again, Jax stuns surrounding enemies for {{ e2 }} second and deals {{ e1 }} (+{{ f2 }}) physical damage to them.
Counter Strike deals {{ e5 }}% more damage for each attack Jax dodged (max: {{ e4 }}% increased damage).","leveltip":{"label":["Cooldown","Damage","Mana Cost"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }} "]},"maxrank":5,"cooldown":[16,14,12,10,8],"cooldownBurn":"16/14/12/10/8","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[50,75,100,125,150],[1,1,1,1,1],[25,25,25,25,25],[100,100,100,100,100],[20,20,20,20,20],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","1","25","100","20","2","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"JaxCounterStrike.png","sprite":"spell4.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JaxRelentlessAssault","name":"Grandmaster's Might","description":"Every third consecutive attack deals additional Magic Damage. Additionally, Jax can activate this ability to strengthen his resolve, increasing his Armor and Magic Resist for a short duration.","tooltip":"Passive: Every third consecutive strike Jax deals {{ e1 }} (+{{ a1 }}) additional Magic Damage.
Active: Jax strengthens his resolve, granting him {{ f2 }} Armor and {{ f1 }} Magic Resist for {{ e5 }} seconds.
Armor bonus is equal to {{ e3 }} + {{ e6 }}% bonus Attack Damage. Magic Resist bonus is equal to {{ e3 }} + {{ e7 }}% Ability Power.","leveltip":{"label":["Passive Damage","Armor Bonus","Magic Resist Bonus"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e3 }} -> {{ e3NL }}"]},"maxrank":3,"cooldown":[80,80,80],"cooldownBurn":"80","cost":[100,100,100],"costBurn":"100","effect":[null,[100,160,220],[3,3,3],[30,50,70],[6,8,10],[8,8,8],[50,50,50],[20,20,20],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/160/220","3","30/50/70","6/8/10","8","50","20","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"@special.jaxrarmor","coeff":0.3,"key":"f2"},{"link":"@special.jaxrmr","coeff":0.2,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[100,100,100],"rangeBurn":"100","image":{"full":"JaxRelentlessAssault.png","sprite":"spell4.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Jayce":{"id":126,"key":"Jayce","name":"Jayce","title":"the Defender of Tomorrow","spells":[{"id":"JayceToTheSkies","name":"To the Skies! / Shock Blast","description":"Hammer Stance: Leaps to an enemy dealing physical damage and slowing enemies.
Cannon Stance: Fires an orb of electricity that detonates upon hitting an enemy (or reaching the end of its path) dealing physical damage to all enemies hit.","tooltip":"Leaps to an enemy dealing {{ e1 }} (+{{ a1 }}) physical damage to nearby enemies and slowing them by {{ e3 }}% for {{ e5 }} seconds.","leveltip":{"label":["Damage","Cooldown","Slow"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":6,"cooldown":[16,14,12,10,8,6],"cooldownBurn":"16/14/12/10/8/6","cost":[40,40,40,40,40,40],"costBurn":"40","effect":[null,[35,70,105,140,175,210],[1.5,1.5,1.5,1.5,1.5,2],[30,35,40,45,50,55],[20,40,60,80,0,0],[2,2,2,2,2,2],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]],"effectBurn":[null,"35/70/105/140/175/210","1.5/1.5/1.5/1.5/1.5/2","30/35/40/45/50/55","20/40/60/80/0/0","2","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600,600],"rangeBurn":"600","image":{"full":"JayceToTheSkies.png","sprite":"spell4.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JayceStaticField","name":"Lightning Field / Hyper Charge","description":"Hammer Stance: Passive: Restores Mana per strike. Active: Creates a field of lightning damaging nearby enemies for several seconds.
Cannon Stance: Gains a burst of energy, increasing Attack Speed to maximum for several attacks.","tooltip":"Passive: Gains {{ e5 }} Mana per strike while in Hammer Stance.
Active: Creates an electric aura dealing {{ e4 }} (+{{ a1 }}) magic damage over {{ e2 }} seconds to nearby enemies.","leveltip":{"label":["Damage","Mana Return"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e5 }} -> {{ e5NL }}"]},"maxrank":6,"cooldown":[10,10,10,10,10,10],"cooldownBurn":"10","cost":[40,40,40,40,40,40],"costBurn":"40","effect":[null,[25,35,45,55,65,75],[4,4,4,4,4,4],[25,30,35,40,45,50],[100,160,220,280,340,400],[6,8,10,12,14,16],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]],"effectBurn":[null,"25/35/45/55/65/75","4","25/30/35/40/45/50","100/160/220/280/340/400","6/8/10/12/14/16","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[285,285,285,285,285,285],"rangeBurn":"285","image":{"full":"JayceStaticField.png","sprite":"spell4.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JayceThunderingBlow","name":"Thundering Blow / Acceleration Gate","description":"Hammer Stance: Deals magic damage to an enemy and knocks them back a short distance.
Cannon Stance: Deploys an Acceleration Gate increasing the Movement Speed of all allied champions who pass through it. If Shock Blast is fired through the gate the missile speed, range, and damage will increase.","tooltip":"Deals {{ e4 }}% of the target's maximum health (+{{ a1 }}) as magic damage and knocks them back a short distance. ({{ e1 }} Maximum Damage against monsters)","leveltip":{"label":["Maximum Health %","Cooldown","Maximum Damage against monsters"],"effect":["{{ e4 }}% -> {{ e4NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":6,"cooldown":[15,14,13,12,11,10],"cooldownBurn":"15/14/13/12/11/10","cost":[55,55,55,55,55,55],"costBurn":"55","effect":[null,[200,300,400,500,600,700],[0.25,0.25,0.25,0.25,0.25,0.25],[10,20,30,40,50,60],[8,10.4,12.8,15.2,17.6,20],[40,70,100,130,160,190],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]],"effectBurn":[null,"200/300/400/500/600/700","0.25","10/20/30/40/50/60","8/10.4/12.8/15.2/17.6/20","40/70/100/130/160/190","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[240,240,240,240,240,240],"rangeBurn":"240","image":{"full":"JayceThunderingBlow.png","sprite":"spell4.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JayceStanceHtG","name":"Mercury Cannon / Mercury Hammer","description":"Hammer Stance: Transforms the Mercury Hammer into the Mercury Cannon gaining new abilities and increased range. The first attack in this form reduces the target's Armor and Magic Resist.
Cannon Stance: Transforms the Mercury Cannon into the Mercury Hammer gaining new abilities and increasing Armor and Magic Resist. The first attack in this form deals additional magic damage.","tooltip":"Active: Transforms the Mercury Hammer into the Mercury Cannon gaining new abilities and ranged attacks.
The next attack in Cannon Stance reduces the target's Armor and Magic Resist by {{ f3 }}% for {{ e3 }} seconds.","maxrank":1,"cooldown":[6],"cooldownBurn":"6","cost":[0],"costBurn":"0","effect":[null,[5],[10],[5],[5],[20],[0],[0],[0],[0],[0]],"effectBurn":[null,"5","10","5","5","20","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[600],"rangeBurn":"600","image":{"full":"JayceStanceHtG.png","sprite":"spell4.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Jhin":{"id":202,"key":"Jhin","name":"Jhin","title":"the Virtuoso","spells":[{"id":"JhinQ","name":"Dancing Grenade","description":"Jhin launches a magical cartridge at an enemy. It can hit up to four targets and gains damage each time it kills.","tooltip":"Jhin launches a cartridge at the targeted enemy that deals {{ e1 }} (+{{ f1 }})(+{{ a1 }}) physical damage before bouncing to a nearby target that has not yet been hit.
The cartridge can hit a maximum of 4 times. Each kill by the cartridge increases the damage of subsequent hits by {{ e2 }}%.","leveltip":{"label":["Damage","Total AD Ratio","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[50,75,100,125,150],[35,35,35,35,35],[0.3,0.35,0.4,0.45,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","35","0.3/0.35/0.4/0.45/0.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"JhinQ.png","sprite":"spell4.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JhinW","name":"Deadly Flourish","description":"Jhin brandishes his cane, firing a single shot with incredible range. It pierces through minions and monsters, but stops on the first champion hit. If the target was recently struck by Jhin's allies, lotus traps, or basic attacks, they are rooted.","tooltip":"Jhin fires a long range shot that stops on the first champion hit, dealing {{ e1 }} (+{{ a1 }}) physical damage to it, and {{ e4 }}% of that damage to minions and monsters hit along the way.
If Deadly Flourish strikes a champion that has been hit by one of Jhin's basic attacks, Lotus Traps, or allies within the last 4 seconds it will root them for {{ e2 }} seconds and grants Jhin movement speed as though he had crit them.","leveltip":{"label":["Damage","Root Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[14,14,14,14,14],"cooldownBurn":"14","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[50,85,120,155,190],[0.75,1,1.25,1.5,1.75],[0,0,0,0,0],[75,75,75,75,75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/85/120/155/190","0.75/1/1.25/1.5/1.75","0","75","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[3000,3000,3000,3000,3000],"rangeBurn":"3000","image":{"full":"JhinW.png","sprite":"spell4.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JhinE","name":"Captive Audience","description":"Jhin places an invisible lotus trap that blooms when walked over. It slows nearby enemies before dealing damage with an explosion of serrated petals.
Beauty in Death - When Jhin kills an enemy champion, a lotus trap will bloom near their corpse.","tooltip":"Jhin places an invisible Lotus Trap that lasts {{ e5 }} minutes and activates when stepped on, revealing nearby enemies for 4 seconds.
The trap leaves behind a zone that slows enemies inside by {{ e7 }}% and detonates after 2 seconds, dealing {{ e2 }} (+{{ a1 }})(+{{ a2 }}) magic damage ({{ e1 }}% damage on subsequent hits and vs. minions and monsters).
Jhin prepares a new trap every {{ f1 }} seconds and can store 2 at once.
Beauty in Death - When Jhin kills an enemy champion a Lotus Trap will spawn and detonate where they were killed.","leveltip":{"label":["Damage","Recharge Time","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ f1 }} -> {{ f2 }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[2,2,2,2,2],"cooldownBurn":"2","cost":[30,35,40,45,50],"costBurn":"30/35/40/45/50","effect":[null,[65,65,65,65,65],[20,80,140,200,260],[0,0,0,0,0],[0.75,0.75,0.75,0.75,0.75],[2,2,2,2,2],[0,0,0,0,0],[35,35,35,35,35],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65","20/80/140/200/260","0","0.75","2","0","35","1","0","0"],"vars":[{"link":"attackdamage","coeff":1.2,"key":"a1"},{"link":"spelldamage","coeff":1,"key":"a2"}],"costType":" Mana","maxammo":"2","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"JhinE.png","sprite":"spell4.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JhinR","name":"Curtain Call","description":"Jhin channels, transforming Whisper into a shoulder-mounted mega-cannon. It is able to fire 4 super shots at extreme range that pierce through minions and monsters, but stop on the first champion impacted. Whisper cripples enemies hit, which slows them and deals execute damage. The 4th shot is perfectly crafted, epically powerful, and guaranteed to critically strike.","tooltip":"Jhin sets up and channels, enabling him to fire 4 super shots at extreme range in a cone in front of him. The shots stop on the first champion hit, slowing it by {{ e3 }}% for {{ e4 }} seconds and dealing {{ e1 }} (+{{ a1 }}) physical damage, increased by {{ e5 }}% for each 1% health the target is missing (up to {{ f2 }} (+{{ f3 }})). The 4th shot crits for {{ f1 }}% damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[100,100,100],"costBurn":"100","effect":[null,[40,100,160],[200,200,200],[80,80,80],[0.5,0.5,0.5],[2.5,2.5,2.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"40/100/160","200","80","0.5","2.5","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"JhinR.png","sprite":"spell5.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Jinx":{"id":222,"key":"Jinx","name":"Jinx","title":"the Loose Cannon","spells":[{"id":"JinxQ","name":"Switcheroo!","description":"Jinx modifies her basic attacks by swapping between Pow-Pow, her minigun and Fishbones, her rocket launcher. Attacks with Pow-Pow grant Attack Speed, while attacks with Fishbones deal area of effect damage, gain increased range, and drain Mana.","tooltip":"Jinx swaps weapons.
Fishbones, the Rocket Launcher: Basic attacks deal 110% Damage to the target and nearby enemies, gain {{ e3 }} range, drain Mana, and scale {{ e5 }}% less with bonus Attack Speed.
Pow-Pow, the Minigun: Basic attacks grant bonus Attack Speed for 2.5 seconds. This effect stacks up to 3 times for a total bonus of {{ f4 }}% (bonus scales with spell rank and Jinx's level). Stacks fall off one at a time and only benefit Jinx's first attack after switching to Rocket Launcher.","leveltip":{"label":["Rocket Bonus Range","Minigun Total Attack Speed"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ f4 }}% -> {{ f5 }}%"]},"maxrank":5,"cooldown":[1,1,1,1,1],"cooldownBurn":"1","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,40,50,60,70],[100,100,100,100,100],[75,100,125,150,175],[20,20,20,20,20],[25,25,25,25,25],[33.25,33.25,33.25,33.25,33.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/40/50/60/70","100","75/100/125/150/175","20","25","33.25","0","0","0","0"],"vars":[],"costType":" Mana per Rocket","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"JinxQ.png","sprite":"spell5.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ e4 }} Mana per Rocket"},{"id":"JinxW","name":"Zap!","description":"Jinx uses Zapper, her shock pistol, to fire a blast that deals damage to the first enemy hit, slowing and revealing it.","tooltip":"Jinx fires a shock blast that deals {{ e1 }} (+{{ a1 }}) Physical Damage to the first enemy hit, revealing it and slowing it by {{ e2 }}% for 2 seconds.","leveltip":{"label":["Damage","Slow","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[10,60,110,160,210],[30,40,50,60,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/60/110/160/210","30/40/50/60/70","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1450,1450,1450,1450,1450],"rangeBurn":"1450","image":{"full":"JinxW.png","sprite":"spell5.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JinxE","name":"Flame Chompers!","description":"Jinx throws out a line of snare grenades that explode after 5 seconds, lighting enemies on fire. Flame Chompers will bite enemy champions who walk over them, rooting them in place.","tooltip":"Jinx tosses out 3 chompers that, once armed, explode on contact with enemy champions, rooting the target for 1.5 seconds and dealing {{ e1 }} (+{{ a1 }}) Magic Damage over 1.5 seconds to nearby enemies. Chompers last for 5 seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[24,20.5,17,13.5,10],"cooldownBurn":"24/20.5/17/13.5/10","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[70,120,170,220,270],[100,140,180,220,260],[30,35,40,45,50],[35,50,65,80,95],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/120/170/220/270","100/140/180/220/260","30/35/40/45/50","35/50/65/80/95","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"JinxE.png","sprite":"spell5.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JinxR","name":"Super Mega Death Rocket!","description":"Jinx fires a super rocket across the map that gains damage as it travels. The rocket will explode upon colliding with an enemy champion, dealing damage to it and surrounding enemies based on their missing Health. ","tooltip":"Jinx fires a rocket that gains damage over the first second it travels. It explodes on the first enemy champion hit, dealing {{ e1 }} (+{{ a1 }}) to {{ e2 }} (+{{ a2 }}) Physical Damage plus {{ e3 }}% of the target's missing Health. Nearby enemies take 80% Damage.","leveltip":{"label":["Minimum Damage","Maximum Damage","Percent Missing Health Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[90,75,60],"cooldownBurn":"90/75/60","cost":[100,100,100],"costBurn":"100","effect":[null,[25,35,45],[250,350,450],[25,30,35],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"25/35/45","250/350/450","25/30/35","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.15,"key":"a1"},{"link":"bonusattackdamage","coeff":1.5,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"JinxR.png","sprite":"spell5.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Kalista":{"id":429,"key":"Kalista","name":"Kalista","title":"the Spear of Vengeance","spells":[{"id":"KalistaMysticShot","name":"Pierce","description":"Throw a fast moving spear that passes through enemies it kills.","tooltip":"Hurl a fast but narrow spear that deals {{ e1 }} (+{{ a1 }}) physical damage. Triggers Martial Poise (P), Sentinel (W), and Rend (E).
If it kills a target, Pierce continues onward, passing all stacks of Rend to the next target.","leveltip":{"label":["Mana Cost","Damage"],"effect":["{{ cost }} -> {{ costNL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[10,70,130,190,250],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/70/130/190/250","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1150,1150,1150,1150,1150],"rangeBurn":"1150","image":{"full":"KalistaMysticShot.png","sprite":"spell5.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KalistaW","name":"Sentinel","description":"Passively gain Attack Speed when near her Oathsworn ally, and deal bonus damage when striking the same target.
Activate to send a soul to scout out the path, revealing the area in front of it.","tooltip":"Passive: When Kalista is near her Oathsworn, she gains +{{ f1 }}% Attack Speed. If they both basic attack the same target, she deals {{ e2 }}% of their max health as magic damage. {{ e7 }} second cooldown per target.
Active: Send a soul Sentinel to patrol an unseen area. Champions spotted are revealed for 4 seconds. Sentinels last 3 laps.
Kalista gains a charge of Sentinel every {{ e4 }} seconds.","leveltip":{"label":["Damage","Ammo Recharge"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[30,30,30,30,30],"cooldownBurn":"30","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[80,80,80,80,80],[5,7.5,10,12.5,15],[125,150,175,200,225],[90,80,70,60,50],[0,0,0,0,0],[75,100,125,150,175],[10,10,10,10,10],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80","5/7.5/10/12.5/15","125/150/175/200/225","90/80/70/60/50","0","75/100/125/150/175","10","0","0","0"],"vars":[],"costType":" Mana","maxammo":"2","range":[5000,5000,5000,5000,5000],"rangeBurn":"5000","image":{"full":"KalistaW.png","sprite":"spell5.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KalistaExpungeWrapper","name":"Rend","description":"Attacks impale their targets with spears. Activate to rip the spears out, slowing and dealing escalating damage.","tooltip":"Passive: Kalista's spears pierce their target, lingering for 4 seconds.
Active: Rip the spears from nearby targets, dealing {{ e1 }} (+{{ a1 }}) physical damage and slowing their Movement Speed by {{ e2 }}% for {{ e6 }} seconds.
If Rend kills at least one target, its cooldown is reset and its mana cost is refunded.","leveltip":{"label":["Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ e5 }} -> {{ e5NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[20,30,40,50,60],[25,30,35,40,45],[30,30,30,30,30],[33,37.5,41.667,45.833,50],[14,12.5,11,9.5,8],[2,2,2,2,2],[254,254,254,254,254],[10,10,10,10,10],[10,14,19,25,32],[0,0,0,0,0]],"effectBurn":[null,"20/30/40/50/60","25/30/35/40/45","30","33/37.5/41.667/45.833/50","14/12.5/11/9.5/8","2","254","10","10/14/19/25/32","0"],"vars":[{"link":"attackdamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"KalistaExpungeWrapper.png","sprite":"spell5.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KalistaRx","name":"Fate's Call","description":"Kalista teleports the Oathsworn ally to herself. They gain the ability to dash toward a position, knocking enemy champions back.","tooltip":"Draw Kalista's Oathsworn to her. For up to 4 seconds, the Oathsworn is untargetable and pacified.
The Oathsworn may mouse click to fly toward target position, stopping at the first enemy champion hit and knocking all enemies in a small radius back.
Kalista's Oathsworn must be within 1100 units for her to cast this ability.","leveltip":{"label":["Cooldown","Knock Up Duration"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":3,"cooldown":[120,90,60],"cooldownBurn":"120/90/60","cost":[100,100,100],"costBurn":"100","effect":[null,[0,0,0],[1.5,1.75,2],[40,60,80],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"0","1.5/1.75/2","40/60/80","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"KalistaRx.png","sprite":"spell5.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Karma":{"id":43,"key":"Karma","name":"Karma","title":"the Enlightened One","spells":[{"id":"KarmaQ","name":"Inner Flame","description":"Karma sends forth a ball of spirit energy that explodes and deals damage upon hitting an enemy unit.
Mantra Bonus: In addition to the explosion, Mantra increases the destructive power of her Inner Flame, creating a cataclysm which deals damage after a short delay.","tooltip":"Fires a blast of energy that explodes upon enemy contact, dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing Movement Speed by {{ e2 }}% for {{ e3 }} seconds.
Mantra Bonus - Soulflare: Deals {{ f1 }} (+{{ a2 }}) additional magic damage and leaves a circle of flame that slows enemies by {{ f3 }}%. After 1.5 seconds the circle erupts, dealing {{ f2 }} (+{{ a1 }}) magic damage to enemies in the area.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[80,125,170,215,260],[25,25,25,25,25],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/125/170/215/260","25","1.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"},{"link":"@text","coeff":[25,75,125,175],"key":"f1"},{"link":"spelldamage","coeff":0.3,"key":"a2"},{"link":"@text","coeff":[50,150,250,350],"key":"f2"},{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"KarmaQ.png","sprite":"spell5.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KarmaSpiritBind","name":"Focused Resolve","description":"Karma creates a tether between herself and a targeted enemy, dealing damage and revealing them. If the tether is not broken, the enemy will be rooted and damaged again.
Mantra Bonus: Karma strengthens the link, healing herself and extending the root duration.","tooltip":"Links Karma to an enemy champion or monster, granting True Sight and dealing {{ effect1amount*0.5 }} (+{{ f4 }}) magic damage. If the link is unbroken for {{ e3 }} seconds, the target is rooted for {{ e2 }} second(s) and takes an additional {{ effect1amount*0.5 }} (+{{ f4 }}) magic damage.
Mantra Bonus - Renewal: Karma is healed for {{ f1 }}% (+{{ f3 }}%) of her missing health. If the link is not broken or the target dies, the root duration is increased by {{ f2 }} second(s) and Karma is healed for {{ f1 }}% (+{{ f3 }}%) of her missing health.","leveltip":{"label":["Damage","Root Duration","Mana Cost"],"effect":["{{ effect1amount*0.5 }} -> {{ effect1amountnl*0.5 }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[60,110,160,210,260],[1,1.25,1.5,1.75,2],[2,2,2,2,2],[2,2,2,2,2],[825,825,825,825,825],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/110/160/210/260","1/1.25/1.5/1.75/2","2","2","825","0","0","0","0","0"],"vars":[{"link":"@text","coeff":[75,150,225,300],"key":"f1"},{"link":"@text","coeff":[75,150,225,300],"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[675,675,675,675,675],"rangeBurn":"675","image":{"full":"KarmaSpiritBind.png","sprite":"spell5.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KarmaSolKimShield","name":"Inspire","description":"Karma summons a protective shield that absorbs incoming damage and increases the Movement Speed of the protected ally.
Mantra Bonus: Energy radiates out from her target, strengthening the initial shield and applying Inspire to nearby allied champions.","tooltip":"Target ally gains a shield, granting {{ e3 }}% Movement Speed for {{ e2 }} seconds and absorbing {{ e1 }} (+{{ a1 }}) damage for {{ e4 }} seconds.
Mantra Bonus - Defiance: The shield overflows with energy, absorbing an additional {{ f1 }} (+{{ a2 }}) damage. Nearby allied champions gain shields that absorb {{ f2 }}% as much as the initial target's shield. All champions shielded gain {{ f3 }}% movement speed for {{ e2 }} seconds.","leveltip":{"label":["Damage Absorption","Movement Speed","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9.5,9,8.5,8],"cooldownBurn":"10/9.5/9/8.5/8","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[70,100,130,160,190],[1.5,1.5,1.5,1.5,1.5],[40,45,50,55,60],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","1.5","40/45/50/55/60","4","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"@text","coeff":[60,140,220,300],"key":"f1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"KarmaSolKimShield.png","sprite":"spell5.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KarmaMantra","name":"Mantra","description":"Karma empowers her next ability to do an additional effect. Mantra is available at level 1 and does not require a skill point.","tooltip":"Karma empowers her next ability within 8 seconds for an additional effect.
Soulflare: Deals bonus damage and leaves behind a circle of flame, slowing enemies and dealing additional damage.
Renewal: Karma heals for a portion of her missing health. If the link is unbroken the root is longer and Karma is healed again.
Defiance: The shield is stronger and allied champions around the target also gain a shield and movement speed.","leveltip":{"label":["Soulflare Impact","Soulflare Circle Damage","Renewal Root Extension","Defiance Shield","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e5 }} -> {{ e5NL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":4,"cooldown":[45,42,39,36],"cooldownBurn":"45/42/39/36","cost":[0,0,0,0],"costBurn":"0","effect":[null,[25,75,125,175],[50,150,250,350],[0.5,0.5,0.5,0.5],[1.5,1.5,1.5,1.5],[0.5,0.75,1,1.25],[0.2,0.2,0.2,0.2],[30,90,150,210],[0.6,0.6,0.6,0.6],[0.5,0.5,0.5,0.5],[0.01,0.01,0.01,0.01]],"effectBurn":[null,"25/75/125/175","50/150/250/350","0.5","1.5","0.5/0.75/1/1.25","0.2","30/90/150/210","0.6","0.5","0.01"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"KarmaMantra.png","sprite":"spell5.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Karthus":{"id":30,"key":"Karthus","name":"Karthus","title":"the Deathsinger","spells":[{"id":"KarthusLayWasteA1","name":"Lay Waste","description":"Karthus unleashes a delayed blast at a location, dealing damage to nearby enemies.","tooltip":"Creates a delayed blast at Karthus' cursor position dealing {{ e1 }} (+{{ a1 }}) magic damage to each nearby enemy.
If the blast hits only a single unit it deals double damage.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[20,26,32,38,44],"costBurn":"20/26/32/38/44","effect":[null,[40,60,80,100,120],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/60/80/100/120","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"2","range":[875,875,875,875,875],"rangeBurn":"875","image":{"full":"KarthusLayWasteA1.png","sprite":"spell5.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KarthusWallOfPain","name":"Wall of Pain","description":"Karthus creates a passable screen of leeching energy. Any enemy units that walk through the screen have their Movement Speed and Magic Resist reduced for a period.","tooltip":"Creates a wall that lasts for {{ e4 }} seconds. Enemies that pass through the wall have their Magic Resist reduced by {{ e1 }}% and Movement Speed reduced by {{ e3 }}% for {{ e5 }} seconds (their Movement Speed gradually recovers over the duration).","leveltip":{"label":["Wall Width","Movement Speed Slow"],"effect":["{{ e2 }} -> {{ e2NL }}"," {{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[18,18,18,18,18],"cooldownBurn":"18","cost":[100,100,100,100,100],"costBurn":"100","effect":[null,[15,15,15,15,15],[800,900,1000,1100,1200],[40,50,60,70,80],[5,5,5,5,5],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15","800/900/1000/1100/1200","40/50/60/70/80","5","5","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"KarthusWallOfPain.png","sprite":"spell5.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KarthusDefile","name":"Defile","description":"Karthus passively steals energy from his victims, gaining Mana on each kill. Alternatively, Karthus can surround himself in the souls of his prey, dealing damage to nearby enemies, but quickly draining his own Mana. ","tooltip":"Toggle Off: When Karthus kills a unit, he restores {{ e2 }} Mana.
Toggle On: Drains {{ cost }} Mana to deal {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies each second. ","leveltip":{"label":["Damage per second","Mana Restore","Mana Cost per second"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[30,42,54,66,78],"costBurn":"30/42/54/66/78","effect":[null,[30,50,70,90,110],[20,27,34,41,48],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","20/27/34/41/48","0.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana Per Second","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"KarthusDefile.png","sprite":"spell5.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana Per Second"},{"id":"KarthusFallenOne","name":"Requiem","description":"After channeling for 3 seconds, Karthus deals damage to all enemy champions.","tooltip":"After channeling for 3 seconds, Karthus deals {{ e1 }} (+{{ a1 }}) magic damage to all enemy champions (regardless of distance). ","leveltip":{"label":["Damage","Mana cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[200,180,160],"cooldownBurn":"200/180/160","cost":[150,175,200],"costBurn":"150/175/200","effect":[null,[250,400,550],[200,300,400],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250/400/550","200/300/400","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[10000,10000,10000],"rangeBurn":"10000","image":{"full":"KarthusFallenOne.png","sprite":"spell5.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Kassadin":{"id":38,"key":"Kassadin","name":"Kassadin","title":"the Void Walker","spells":[{"id":"NullLance","name":"Null Sphere","description":"Kassadin fires an orb of void energy at a target, dealing damage and interrupting channels. The excess energy forms around himself, granting a temporary shield that absorbs magic damage.","tooltip":"Kassadin fires an orb of void energy that deals {{ e1 }} (+{{ a1 }}) magic damage and interrupts channels.
The excess energy forms around himself, granting a shield that absorbs {{ e3 }} (+{{ a2 }}) magic damage for {{ e4 }} seconds.","leveltip":{"label":["Damage","Shield","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[65,95,125,155,185],[0,0,0,0,0],[40,70,100,130,160],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/95/125/155/185","0","40/70/100/130/160","1.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"NullLance.png","sprite":"spell5.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NetherBlade","name":"Nether Blade","description":"Passive: Kassadin's basic attacks deal bonus magic damage. Active: Kassadin's next basic attack deals significant bonus magic damage and restores Mana.","tooltip":"Passive: Kassadin's basic attacks draw energy from the void, dealing {{ e2 }} (+{{ a1 }}) bonus magic damage.
Active: Kassadin charges his Nether Blade, causing his next basic attack to deal {{ e3 }} (+{{ a2 }}) bonus magic damage and restore {{ e1 }}% of his missing Mana (increases to {{ e4 }}% against champions).","leveltip":{"label":["Active Damage","Base Mana Restore","Champion Mana Restore"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[4,5,6,7,8],[20,20,20,20,20],[40,65,90,115,140],[20,25,30,35,40],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/5/6/7/8","20","40/65/90/115/140","20/25/30/35/40","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.1,"key":"a1"},{"link":"spelldamage","coeff":0.7,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"NetherBlade.png","sprite":"spell5.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"ForcePulse","name":"Force Pulse","description":"Kassadin draws energy from spells cast in his vicinity. Upon charging up, Kassadin can use Force Pulse to damage and slow enemies in a cone in front of him.","tooltip":"Kassadin draws energy from spells cast in his vicinity, gaining a charge whenever a spell is cast near him.
Upon reaching 6 charges, Kassadin can use Force Pulse to deal {{ e1 }} (+{{ a1 }}) magic damage and slow enemies by {{ e2 }}% for {{ e3 }} second in a cone in front of him.","leveltip":{"label":["Damage","Slow %","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[5,5,5,5,5],"cooldownBurn":"5","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[80,105,130,155,180],[50,60,70,80,90],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/105/130/155/180","50/60/70/80/90","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"ForcePulse.png","sprite":"spell5.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RiftWalk","name":"Riftwalk","description":"Kassadin teleports to a nearby location dealing damage to nearby enemy units. Multiple Riftwalks in a short period of time cost additional Mana but also deal additional damage.","tooltip":"Kassadin teleports to a nearby location dealing {{ e1 }} (+{{ f2 }})(+{{ a1 }}) magic damage to surrounding enemy units.
Each subsequent Riftwalk within the next {{ e2 }} seconds doubles the Mana cost and deals an additional {{ e3 }} (+{{ f1 }})(+{{ f3 }}) magic damage per stack, stacking up to {{ e6 }} times.","leveltip":{"label":["Base Damage","Damage Per Stack","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[6,4,2],"cooldownBurn":"6/4/2","cost":[50,50,50],"costBurn":"50","effect":[null,[80,100,120],[15,15,15],[40,50,60],[1,1,1],[0,0,0],[4,4,4],[2,2,2],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"80/100/120","15","40/50/60","1","0","4","2","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"RiftWalk.png","sprite":"spell5.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Katarina":{"id":55,"key":"Katarina","name":"Katarina","title":"the Sinister Blade","spells":[{"id":"KatarinaQ","name":"Bouncing Blade","description":"Katarina throws a Dagger at the target that then bounces to nearby enemies before ricocheting onto the ground.","tooltip":"Katarina throws a Dagger, dealing {{ e1 }} (+{{ a1 }}) magic damage to the target and {{ e4 }} nearby enemies. The dagger then ricochets onto the ground behind the primary target.
16","leveltip":{"label":["Initial Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[75,105,135,165,195],[350,350,350,350,350],[450,450,450,450,450],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/105/135/165/195","350","450","2","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"KatarinaQ.png","sprite":"spell5.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"KatarinaW","name":"Preparation","description":"Katarina gains a burst of movement speed, tossing a Dagger into the air directly above herself.","tooltip":"Katarina tosses a Dagger into the air and gains {{ e4 }}% decaying movement speed over {{ e2 }} seconds.","leveltip":{"label":["Movement Speed Buff","Cooldown"],"effect":["{{ e4 }}% -> {{ e4NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[0,0,0,0,0],[1.25,1.25,1.25,1.25,1.25],[0,0,0,0,0],[50,60,70,80,90],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","1.25","0","50/60/70/80/90","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[25000,25000,25000,25000,25000],"rangeBurn":"25000","image":{"full":"KatarinaW.png","sprite":"spell5.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"KatarinaEWrapper","name":"Shunpo","description":"Katarina blinks to the target, striking it if its an enemy, or striking the nearest enemy otherwise.","tooltip":"Katarina dashes in the blink of an eye to the target ally, enemy, or Dagger. If it is an enemy, Katarina strikes for {{ e1 }} (+{{ a1 }})(+{{ a2 }}) magic damage - otherwise she strikes the nearest enemy in range.
Picking up a Dagger will reduce Shunpo's cooldown by {{ f1 }} seconds ({{ f3*100 }}%).
16","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }} {{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,45,60,75,90],[0,0,0,0,0],[14,12.5,11,9.5,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/45/60/75/90","0","14/12.5/11/9.5/8","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.25,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"KatarinaEWrapper.png","sprite":"spell5.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"KatarinaR","name":"Death Lotus","description":"Katarina becomes a flurry of blades, dealing massive magic damage while she channels to the 3 nearest enemy champions.","tooltip":"Katarina becomes a flurry of blades, rapidly throwing knives at the three nearest enemy champions, dealing {{ e1 }} (+{{ a2 }})(+{{ a1 }}) magic damage per knife. Total over {{ e3 }} seconds to each enemy: {{ f1 }} (+{{ f2 }})(+{{ f3 }}) magic damage.
Applies Grievous Wounds to all enemies struck, reducing their healing and regeneration by 40%.","leveltip":{"label":["Damage Per Knife","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[90,60,45],"cooldownBurn":"90/60/45","cost":[0,0,0],"costBurn":"0","effect":[null,[25,37.5,50],[6,6,6],[2.5,2.5,2.5],[3,3,3],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"25/37.5/50","6","2.5","3","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.22,"key":"a2"},{"link":"spelldamage","coeff":0.19,"key":"a1"},{"link":"bonusattackdamage","coeff":3,"key":"f1"}],"costType":"No Cost","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"KatarinaR.png","sprite":"spell5.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Kayle":{"id":10,"key":"Kayle","name":"Kayle","title":"The Judicator","spells":[{"id":"JudicatorReckoning","name":"Reckoning","description":"Blasts an enemy unit with angelic force, dealing damage, slowing Movement Speed, and applying Holy Fervor.","tooltip":"Blasts an enemy, dealing {{ e1 }} (+{{ a2 }})(+{{ a1 }}) magic damage, slowing their Movement Speed by {{ e2 }}% for {{ e3 }} seconds, and applying a stack of Holy Fervor.","leveltip":{"label":["Damage","Slow","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[60,110,160,210,260],[35,40,45,50,55],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/110/160/210/260","35/40/45/50/55","3","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a2"},{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"JudicatorReckoning.png","sprite":"spell5.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JudicatorDivineBlessing","name":"Divine Blessing","description":"Blesses a target friendly champion, granting them increased Movement Speed and healing them.","tooltip":"Blesses an allied champion, increasing their Movement Speed by {{ e2 }}% (+{{ a2 }}%) for {{ e3 }} seconds and healing them for {{ e1 }} (+{{ a1 }}) Health.","leveltip":{"label":["Healing","Movement Speed","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[60,105,150,195,240],[18,21,24,27,30],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","18/21/24/27/30","3","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.07,"key":"a2"},{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"JudicatorDivineBlessing.png","sprite":"spell5.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JudicatorRighteousFury","name":"Righteous Fury","description":"Passive: Grants Kayle on Hit magic Damage. Activate: Ignite Kayle's sword with a holy flame, granting Kayle a ranged attack that damages multiple enemies and deals bonus magic damage.","tooltip":"Passive: Kayle's Basic Attacks deal an additional {{ e4 }} (+{{ a2 }}) magic damage on hit.
Active: Kayle increases her Attack Range by 400 for 10 seconds and the passive bonus is increased to {{ e1 }} (+{{ a1 }}) magic damage and apply spell effects on hit.
In addition, deals {{ e1 }} (+{{ f2 }})(+{{ a1 }}) magic damage and applies spell effects on attack to enemies near her target.","leveltip":{"label":["Passive Damage","Active Damage","Damage to Nearby Enemies Ratio "],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[20,30,40,50,60],[20,25,30,35,40],[0.2,0.25,0.3,0.35,0.4],[10,15,20,25,30],[10,10,10,10,10],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/30/40/50/60","20/25/30/35/40","0.2/0.25/0.3/0.35/0.4","10/15/20/25/30","10","400","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.15,"key":"a2"},{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"attackdamage","coeff":[0.2,0.25,0.3,0.35,0.4],"key":"f2"},{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"JudicatorRighteousFury.png","sprite":"spell5.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JudicatorIntervention","name":"Intervention","description":"Shields Kayle or an ally for a short time, causing them to be immune to damage.","tooltip":"Bathes Kayle's target in a holy light, rendering them immune to all damage for {{ e1 }} seconds.","leveltip":{"label":["Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[0,0,0],"costBurn":"0","effect":[null,[2,2.5,3],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"2/2.5/3","0","0","0","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[900,900,900],"rangeBurn":"900","image":{"full":"JudicatorIntervention.png","sprite":"spell5.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Kennen":{"id":85,"key":"Kennen","name":"Kennen","title":"the Heart of the Tempest","spells":[{"id":"KennenShurikenHurlMissile1","name":"Thundering Shuriken","description":"Kennen throws a fast moving shuriken towards a location, causing damage and adding a Mark of the Storm to any opponent that it hits.","tooltip":"Throws a shuriken that deals {{ e1 }} (+{{ a1 }}) magic damage to the first enemy it hits.","leveltip":{"label":["Damage","Energy Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7,6,5,4],"cooldownBurn":"8/7/6/5/4","cost":[60,55,50,45,40],"costBurn":"60/55/50/45/40","effect":[null,[75,115,155,195,235],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/115/155/195/235","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Energy","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"KennenShurikenHurlMissile1.png","sprite":"spell5.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"KennenBringTheLight","name":"Electrical Surge","description":"Kennen passively deals extra damage and adds a Mark of the Storm to his target every few attacks, and he can activate this ability to damage and add another Mark of the Storm to targets who are already marked.","tooltip":"Passive: Every 5 attacks, Kennen deals bonus magic damage equal to {{ e2 }}% of his attack damage and adds a Mark of the Storm to his target.
Active: Sends a surge of electricity through all nearby enemies affected by Mark of the Storm or Slicing Maelstrom, dealing {{ e1 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Passive %","Cooldown","Active Damage"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[14,12,10,8,6],"cooldownBurn":"14/12/10/8/6","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[65,95,125,155,185],[40,50,60,70,80],[0.4,0.5,0.6,0.7,0.8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/95/125/155/185","40/50/60/70/80","0.4/0.5/0.6/0.7/0.8","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.55,"key":"a1"}],"costType":" Energy","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"KennenBringTheLight.png","sprite":"spell5.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"KennenLightningRush","name":"Lightning Rush","description":"Kennen morphs into a lightning form, enabling him to pass through units. Each enemy unit he touches takes damage and receives a Mark of the Storm.","tooltip":"Kennen doubles his base movement speed and ignores unit collision for 2 seconds, dealing {{ e1 }} (+{{ a1 }}) magic damage to any enemy he passes through. Additionally, Kennen will gain {{ e2 }} Armor and Magic Resist for 4 seconds.
Kennen gains 40 Energy the first time he passes through an enemy. Lightning Rush deals half damage to minions.","leveltip":{"label":["Damage","Bonus Armor and Magic Resist","Cooldown","Energy Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[100,95,90,85,80],"costBurn":"100/95/90/85/80","effect":[null,[85,125,165,205,245],[10,20,30,40,50],[40,40,40,40,40],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"85/125/165/205/245","10/20/30/40/50","40","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Energy","maxammo":"-1","range":[200,200,200,200,200],"rangeBurn":"200","image":{"full":"KennenLightningRush.png","sprite":"spell5.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"KennenShurikenStorm","name":"Slicing Maelstrom","description":"Kennen summons a storm that strikes at nearby enemy champions for magical damage.","tooltip":"Summons a magical storm for {{ e3 }} seconds that deals {{ e1 }} (+{{ a1 }}) magic damage to all enemies near Kennen every {{ e2 }} seconds. Each maelstrom hit applies Mark of the Storm, up to a maximum of 3.
Successive maelstrom hits against the same enemy deal an additional {{ e4 }}% damage for each hit they've already suffered from this storm.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[120,120,120],"cooldownBurn":"120","cost":[0,0,0],"costBurn":"0","effect":[null,[40,75,110],[0.5,0.5,0.5],[3,3,3],[10,10,10],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"40/75/110","0.5","3","10","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"KennenShurikenStorm.png","sprite":"spell5.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Khazix":{"id":121,"key":"Khazix","name":"Kha'Zix","title":"the Voidreaver","spells":[{"id":"KhazixQ","name":"Taste Their Fear","description":"Deals physical damage to the target. Damage increased on Isolated targets. If he chooses to Evolve Reaper Claws, this refunds a percent of it's cooldown against Isolated targets. Kha'Zix also gains increased range on his basic attacks and Taste Their Fear.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) physical damage. If the target is Isolated, the damage is increased by {{ e2 }}% ({{ f1 }}).
Evolved Reaper Claws: Increases the range of Taste Their Fear and Kha'Zix's basic attacks by {{ e3 }}. If target is Isolated, refunds {{ e4 }}% of Taste Their Fear's cooldown.","leveltip":{"label":["Base Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[70,95,120,145,170],[50,50,50,50,50],[50,50,50,50,50],[45,45,45,45,45],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/95/120/145/170","50","50","45","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"KhazixQ.png","sprite":"spell5.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KhazixW","name":"Void Spike","description":"Kha'Zix fires exploding spikes that deal physical damage to enemies hit. Kha'Zix is healed if he is also within the explosion radius. If he chooses to Evolve Spike Racks, Void Spike now fires three spikes in a cone, slow enemies hit, and reveals enemy champions hit for 2 seconds. Isolated targets are slowed for extra.","tooltip":"Fires exploding spikes, dealing {{ e1 }} (+{{ a1 }}) physical damage to enemies hit ({{ e5 }}% bonus damage to monsters). Heals Kha'Zix for {{ e2 }} (+{{ a2 }}) if he is within the explosion radius.
Evolved Spike Racks: Void Spike fires three spikes in a cone and slows targets hit by {{ e3 }}% for {{ e4 }} seconds. Reveals enemy champions hit for 2 seconds. Isolated targets are slowed for {{ e7 }}% instead.","leveltip":{"label":["Damage","Healing","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[55,60,65,70,75],"costBurn":"55/60/65/70/75","effect":[null,[80,110,140,170,200],[60,85,110,135,160],[40,40,40,40,40],[2,2,2,2,2],[20,20,20,20,20],[2,2,2,2,2],[80,80,80,80,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/110/140/170/200","60/85/110/135/160","40","2","20","2","80","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"},{"link":"spelldamage","coeff":0.5,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"KhazixW.png","sprite":"spell5.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KhazixE","name":"Leap","description":"Kha'Zix leaps to an area, dealing physical damage upon landing. If he chooses to Evolve Wings, Leap's range increases by 200 and the cooldown resets on champion kill or assist.","tooltip":"Leaps to target area, dealing {{ e1 }} (+{{ a1 }}) physical damage.
Evolved Wings: Increases Leap's range by 200, and the cooldown resets on champion kill or assist.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[65,100,135,170,205],[30,35,40,45,50],[10,10,10,10,10],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/100/135/170/205","30/35/40/45/50","10","2.5","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"KhazixE.png","sprite":"spell5.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KhazixR","name":"Void Assault","description":"Each rank allows Kha'Zix to evolve one of his abilities, giving it a unique additional effect. When activated, Kha'Zix becomes Invisible, triggering Unseen Threat and increasing Movement Speed. If he chooses to Evolve Adaptive Cloaking, while out of combat Kha'Zix also passively gains Void Assault upon entering a new brush.","tooltip":"Passive: Ranking up Void Assault allows Kha'Zix to evolve one of his abilities.
Active: Kha'Zix becomes Invisible for {{ e1 }} seconds and activates Unseen Threat. While Invisible, he gains {{ e3 }}% movement speed and ignores unit collision. Void Assault can be cast a second time within {{ e2 }} seconds.
Evolved Adaptive Cloaking: While out of combat, Kha'Zix also passively gains Void Assault for {{ e5 }} seconds in brush. This persists for up to {{ e1 }} seconds after exiting the brush ({{ f1 }} second per brush cooldown).
16","leveltip":{"label":["Evolutions Available","Cooldown"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[1.25,1.25,1.25],[10,10,10],[40,40,40],[1,2,3],[2.5,2.5,2.5],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1.25","10","40","1/2/3","2.5","2","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"KhazixR.png","sprite":"spell5.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Kindred":{"id":203,"key":"Kindred","name":"Kindred","title":"The Eternal Hunters","spells":[{"id":"KindredQ","name":"Dance of Arrows","description":"Kindred tumbles and shoots up to three arrows at nearby targets.","tooltip":"Lamb vaults, firing up to 3 arrows at nearby enemies, dealing {{ e1 }} (+{{ a1 }}) physical damage and gains {{ f2 }}% bonus attack speed for {{ e8 }} seconds.
Casting Wolf's Frenzy or vaulting inside of its effect reduces the cooldown of this spell to {{ e4 }} seconds.","leveltip":{"label":["Base Damage","Cooldown in Wolf's Frenzy"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[35,35,35,35,35],"costBurn":"35","effect":[null,[55,75,95,115,135],[0,0,0,0,0],[500,500,500,500,500],[4,3.5,3,2.5,2],[100,100,100,100,100],[12,12,12,12,12],[0.1,0.1,0.1,0.1,0.1],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"55/75/95/115/135","0","500","4/3.5/3/2.5/2","100","12","0.1","4","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.65,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[340,340,340,340,340],"rangeBurn":"340","image":{"full":"KindredQ.png","sprite":"spell5.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KindredW","name":"Wolf's Frenzy","description":"Wolf enrages and attacks enemies around him.","tooltip":"Wolf claims a territory, attacking nearby enemies inside it for {{ e4 }} seconds. Lamb can redirect Wolf to new targets by attacking them. If Lamb leaves Wolf's territory he will cease attacking and join her.
Wolf's attacks deal magic damage equal to {{ e5 }} (+{{ a1 }}) plus {{ f3 }}% of the target's current health.
Wolf attacks faster based on Kindred's attack speed. His attacks maim monsters for {{ e7 }}% increased damage and reduce their attack and movement speed by {{ e8 }}% for 2 seconds.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[40,45,50,55,60],[1,1,1,1,1],[1.5,1.5,1.5,1.5,1.5],[8.5,8.5,8.5,8.5,8.5],[25,30,35,40,45],[800,800,800,800,800],[50,50,50,50,50],[50,50,50,50,50],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/45/50/55/60","1","1.5","8.5","25/30/35/40/45","800","50","50","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[560,560,560,560,560],"rangeBurn":"560","image":{"full":"KindredW.png","sprite":"spell5.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KindredEWrapper","name":"Mounting Dread","description":"Lamb fires a carefully placed shot, slowing the target. If Lamb attacks the target two more times, her third attack instead directs Wolf to pounce on the enemy, savaging them for massive damage.","tooltip":"Cripple an enemy, slowing their movement speed by {{ e2 }}% for {{ e8 }} second.
After Lamb attacks the target twice, her third attack instead directs Wolf to pounce on the enemy, dealing {{ e1 }} (+{{ a1 }}) plus {{ f2 }}% of the target's missing health as bonus physical damage.
Wolf's attack critically strikes targets for {{ e6 }}% increased damage if they are below {{ e5 }}% (+{{ f3 }}%) health (Increased by Critical Strike Chance).
[Maximum {{ e0 }} vs. monsters]","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[40,60,80,100,120],[50,50,50,50,50],[0.5,0.5,0.5,0.5,0.5],[8,8,8,8,8],[15,15,15,15,15],[50,50,50,50,50],[4,4,4,4,4],[1,1,1,1,1],[4,4,4,4,4],[300,300,300,300,300]],"effectBurn":[null,"40/60/80/100/120","50","0.5","8","15","50","4","1","4","300"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"KindredEWrapper.png","sprite":"spell5.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KindredR","name":"Lamb's Respite","description":"Lamb grants all living things inside a zone a respite from death. Until the effect ends, nothing can die. At the end, units are healed.","tooltip":"Lamb blesses the ground underneath her for {{ e2 }} seconds, creating an area in which no living things, ally or enemy, can die. Upon reaching 10% Health, units become immune to further damage or healing.
When the blessing ends all living things inside heal for {{ e1 }}.","leveltip":{"label":["Heal","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,130,100],"cooldownBurn":"160/130/100","cost":[0,0,0],"costBurn":"0","effect":[null,[200,250,300],[4,4,4],[530,530,530],[400,600,800],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"200/250/300","4","530","400/600/800","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"KindredR.png","sprite":"spell6.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Kled":{"id":240,"key":"Kled","name":"Kled","title":"the Cantankerous Cavalier","spells":[{"id":"KledQ","name":"Bear Trap on a Rope","description":"Kled throws a bear trap that damages and hooks an enemy champion. If shackled for a short duration, the target takes additional physical damage and is yanked toward Kled.
When dismounted, this ability is replaced by Pocket Pistol, a ranged gun blast that knocks back Kled and restores courage.","tooltip":"Kled throws a bear trap that deals {{ e1 }} (+{{ a1 }}) physical damage and hooks onto the first enemy champion or large monster hit, granting True Sight. Deals 150% damage to minions passed through.
If Kled stays near a hooked enemy for {{ e3 }} seconds, he deals {{ e1 }} (+{{ charbonusphysical*2 }}) physical damage, yanks the enemy toward him, and slows the enemy by {{ e5 }}% for 1.5 seconds.
Dismounted: Becomes Pocket Pistol, a ranged ability that restores courage.","leveltip":{"label":["Throw Damage","Rip Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e1 }} -> {{ e1NL }}","{{ e5 }}% -> {{ e5NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8.5,8,7.5,7],"cooldownBurn":"9/8.5/8/7.5/7","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,100,150,200,250],[0.6,0.6,0.6,0.6,0.6],[1.75,1.75,1.75,1.75,1.75],[2,2,2,2,2],[40,45,50,55,60],[9,8.5,8,7.5,7],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/100/150/200/250","0.6","1.75","2","40/45/50/55/60","9/8.5/8/7.5/7","1.5","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"KledQ.png","sprite":"spell6.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"KledW","name":"Violent Tendencies","description":"Kled gains massive attack speed for four attacks. The fourth attack deals more damage.","tooltip":"Passive: When Kled basic attacks, he frenzies, gaining {{ e2 }}% attack speed for four attacks or {{ e6 }} seconds. Violent Tendencies then goes on cooldown.
The fourth hit deals bonus physical damage equal to {{ e4 }} plus {{ e1 }}% (+{{ f1 }}%) of the target's maximum health (maximum {{ e9 }} vs monsters).","leveltip":{"label":["Flat Damage","Percentage Damage","Cooldown"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,12.5,11,9.5,8],"cooldownBurn":"14/12.5/11/9.5/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[4,4.5,5,5.5,6],[150,150,150,150,150],[20,20,20,20,20],[20,30,40,50,60],[15,30,45,60,75],[4,4,4,4,4],[200,200,200,200,200],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/4.5/5/5.5/6","150","20","20/30/40/50/60","15/30/45/60/75","4","200","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[0,0,0,0,0],"rangeBurn":"0","image":{"full":"KledW.png","sprite":"spell6.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"KledE","name":"Jousting","description":"Kled dashes, dealing physical damage and gaining a short burst of speed. Kled can then reactivate this ability to dash back through his initial target, dealing the same damage.","tooltip":"Kled dashes, dealing {{ e1 }} (+{{ a1 }}) physical damage to enemies in his path. Cannot cross walls.
If Jousting hits an enemy champion or large monster, Kled gains {{ e5 }}% movement speed for {{ e4 }} second and True Sight of the target. He can reactivate this ability within {{ e6 }} seconds to dash back through the same target, dealing the same damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,45,70,95,120],[0,0,0,0,0],[350,350,350,350,350],[1,1,1,1,1],[50,50,50,50,50],[3,3,3,3,3],[600,600,600,600,600],[700,700,700,700,700],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/45/70/95/120","0","350","1","50","3","600","700","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"KledE.png","sprite":"spell6.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"KledR","name":"Chaaaaaaaarge!!!","description":"Kled and Skaarl charge to a location, leaving a speed-granting trail behind them and gaining a shield. Skaarl locks onto and rams the first enemy champion encountered.","tooltip":"Kled charges toward a location, leaving a trail that grants allies increasing movement speed. While charging, Kled gains a shield that increases over time to a maximum of {{ e4 }} (+{{ a1 }}) and lasts for 2 seconds after the charge ends.
Skaarl rams the first enemy champion encountered, dealing up to {{ e1 }}% (+{{ f1*3 }}%) of the target's maximum health as physical damage based on distance traveled.","leveltip":{"label":["Maximum Damage","Maximum Shield","Range","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e4 }} -> {{ e4NL }}","{{ e0 }} -> {{ e0NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,140,120],"cooldownBurn":"160/140/120","cost":[0,0,0],"costBurn":"0","effect":[null,[12,15,18],[4,4,4],[0,0,0],[200,300,400],[3,3,3],[100,150,0],[0,0,0],[150,0,0],[3,3,3],[3500,4000,4500]],"effectBurn":[null,"12/15/18","4","0","200/300/400","3","100/150/0","0","150/0/0","3","3500/4000/4500"],"vars":[{"link":"bonusattackdamage","coeff":3,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[3500,4000,4500],"rangeBurn":"3500/4000/4500","image":{"full":"KledR.png","sprite":"spell6.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"No Cost"}]},"KogMaw":{"id":96,"key":"KogMaw","name":"Kog'Maw","title":"the Mouth of the Abyss","spells":[{"id":"KogMawQ","name":"Caustic Spittle","description":"Kog'Maw launches a corrosive projectile which deals magic damage and corrodes the target's armor and magic resist for a short time. Kog'Maw also gains additional attack speed.","tooltip":"Passive: Kog'Maw gains {{ e2 }}% bonus attack speed.
Active: Launches a corrosive projectile that deals {{ e1 }} (+{{ a1 }}) Magic Damage to the first enemy hit and shreds its Armor and Magic Resist by {{ e3 }}% for {{ e4 }} seconds.","leveltip":{"label":["Bonus Attack Speed","Damage","Armor and Magic Resist Shred"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[80,130,180,230,280],[15,20,25,30,35],[20,22,24,26,28],[4,4,4,4,4],[1,1,1,1,1],[1,1,1,1,1],[100,100,100,100,100],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/130/180/230/280","15/20/25/30/35","20/22/24/26/28","4","1","1","100","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1175,1175,1175,1175,1175],"rangeBurn":"1175","image":{"full":"KogMawQ.png","sprite":"spell6.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KogMawBioArcaneBarrage","name":"Bio-Arcane Barrage","description":"Kog'Maw's attacks gain range and deal a percent of the target's maximum health as magic damage.","tooltip":"For {{ e3 }} seconds, Kog'Maw's basic attacks gain {{ e1 }} range and deal {{ e2 }}% (+{{ f1 }})% of the target's maximum health as bonus magic damage.","leveltip":{"label":["Range","Bonus Max Health Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[17,17,17,17,17],"cooldownBurn":"17","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[130,150,170,190,210],[3,4,5,6,7],[8,8,8,8,8],[100,100,100,100,100],[100,100,100,100,100],[0,0,0,0,0],[100,100,100,100,100],[15,15,15,15,15],[0.15,0.2,0.25,0.3,0.35],[15,20,25,30,35]],"effectBurn":[null,"130/150/170/190/210","3/4/5/6/7","8","100","100","0","100","15","0.15/0.2/0.25/0.3/0.35","15/20/25/30/35"],"vars":[],"costType":" Mana","maxammo":"-1","range":[530,530,530,530,530],"rangeBurn":"530","image":{"full":"KogMawBioArcaneBarrage.png","sprite":"spell6.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KogMawVoidOoze","name":"Void Ooze","description":"Kog'Maw launches a peculiar ooze which damages all enemies it passes through and leaves a trail which slows enemies who stand on it.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) Magic Damage to enemies hit and leaves a trail on the ground for {{ e3 }} seconds, slowing enemies in it by {{ e2 }}%.","leveltip":{"label":["Damage","Slow","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[60,105,150,195,240],[20,28,36,44,52],[4,4,4,4,4],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","20/28/36/44/52","4","0.25","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200,1200,1200],"rangeBurn":"1200","image":{"full":"KogMawVoidOoze.png","sprite":"spell6.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"KogMawLivingArtillery","name":"Living Artillery","description":"Kog'Maw fires an artillery shell at a great distance dealing magic damage (increased significantly on low health enemies) and revealing non-stealthed targets. Additionally, multiple Living Artilleries in a short period of time cause them to cost additional Mana.","tooltip":"Fires an artillery shot, damaging enemies above 40% health for {{ e1 }} (+{{ a2 }})(+{{ a1 }}) to {{ effect1amount*1.5 }} (+{{ f3 }})(+{{ f2 }}) magic damage based on their missing health.
If enemies are below 40% health, they take {{ f4 }} (+{{ f6 }})(+{{ f5 }}) magic damage instead.
Each subsequent shot within {{ e4 }} seconds costs {{ e3 }} more Mana (max {{ e5 }}).","leveltip":{"label":["Damage","Range","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[2,1.5,1],"cooldownBurn":"2/1.5/1","cost":[40,40,40],"costBurn":"40","effect":[null,[100,140,180],[1200,1500,1800],[40,40,40],[8,8,8],[400,400,400],[2,2,2],[1.5,1.5,1.5],[2,2,2],[360,360,360],[400,400,400]],"effectBurn":[null,"100/140/180","1200/1500/1800","40","8","400","2","1.5","2","360","400"],"vars":[{"link":"bonusattackdamage","coeff":0.65,"key":"a2"},{"link":"spelldamage","coeff":0.25,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1500,1800],"rangeBurn":"1200/1500/1800","image":{"full":"KogMawLivingArtillery.png","sprite":"spell6.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Leblanc":{"id":7,"key":"Leblanc","name":"LeBlanc","title":"the Deceiver","spells":[{"id":"LeblancQ","name":"Shatter Orb","description":"LeBlanc projects an orb towards her target, dealing magic damage. When Shatter Orb is empowered by Sigil of Malice, the spell bounces to the nearest ready Sigil of Malice (bounces deal reduced damage to minions).","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage. When Shatter Orb is empowered by Sigil of Malice, the spell bounces to the nearest ready Sigil of Malice (bounces deal {{ e7 }}% damage to minions). ","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[55,90,125,160,195],[25,25,25,25,25],[3.5,3.5,3.5,3.5,3.5],[6,6,6,6,6],[60,90,120,150,180],[0,0,0,0,0],[80,80,80,80,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"55/90/125/160/195","25","3.5","6","60/90/120/150/180","0","80","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"LeblancQ.png","sprite":"spell6.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeblancW","name":"Distortion","description":"LeBlanc rapidly dashes to a target location, dealing magic damage to nearby units. In the following 4 seconds, she can activate Distortion again to return to her starting location.","tooltip":"Dashes to target location, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies in the target area.
For the next 4 seconds, she can activate Distortion again to return to her starting location.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[40,55,70,85,100],[2,2,2,2,2],[4,4,4,4,4],[600,600,600,600,600],[0.85,0.85,0.85,0.85,0.85],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/55/70/85/100","2","4","600","0.85","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"LeblancW.png","sprite":"spell6.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeblancE","name":"Ethereal Chains","description":"LeBlanc flings illusionary chains towards a target location. If it hits an enemy unit, it will deal initial magic damage and shackle them. If the target remains shackled for 1.5 seconds, the target takes additional magic damage and is unable to move.","tooltip":"Launches a chain that shackles the first unit hit to LeBlanc, granting True Sight of the unit and dealing {{ e1 }} (+{{ a1 }}) magic damage.
If the target remains shackled for {{ e2 }} seconds they are rooted for {{ e2 }} seconds and take an additional {{ e1 }} (+{{ a1 }}) magic damage. ","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f1 }} -> {{ f2 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[40,60,80,100,120],[1.5,1.5,1.5,1.5,1.5],[1.5,1.5,1.5,1.5,1.5],[25,25,25,25,25],[885,885,885,885,885],[14,13.25,12.5,11.75,11],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/60/80/100/120","1.5","1.5","25","885","14/13.25/12.5/11.75/11","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"LeblancE.png","sprite":"spell6.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeblancR","name":"Mimic","description":"LeBlanc creates a clone and casts a mimicked version of one of her basic spells. The clone casts a fake copy of that spell. LeBlanc can instead send the clone far away, where it casts a fake copy of her most recently cast spell.","tooltip":"LeBlanc copies one of her spells and creates a Mimic decoy to cast it with her. The Mimic lasts {{ e7 }} seconds.
Shatter Orb deals {{ e3 }} (+{{ a2 }}) magic damage. Distortion deals {{ e5 }} (+{{ f1 }}) magic damage. Ethereal Chains deals {{ e4 }} (+{{ a1 }}) magic damage each time. Using this spell on itself invokes Shadow of the Rose.
Shadow of the Rose The Mimic appears at target location and approaches the closest visible enemy Champion, then casts a fake version of LeBlanc's most recent basic ability.
Has a separate {{ f2 }} second cooldown. This Mimic lasts much longer but cannot be controlled.","leveltip":{"label":["Mimicked Shatter Orb Damage","Mimicked Distortion Damage","Mimicked Ethereal Chains Damage","Shadow of the Rose Cooldown","Mimic Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e5 }} -> {{ e5NL }}","{{ e4 }} -> {{ e4NL }}","{{ f2 }} -> {{ f3 }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[54,42,30],"cooldownBurn":"54/42/30","cost":[0,0,0],"costBurn":"0","effect":[null,[20,40,60],[30,37.5,45],[150,275,400],[100,160,220],[60,120,180],[160,140,120],[2.5,2.5,2.5],[150,150,150],[0.3,0.3,0.3],[0.075,0.075,0.075]],"effectBurn":[null,"20/40/60","30/37.5/45","150/275/400","100/160/220","60/120/180","160/140/120","2.5","150","0.3","0.08"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a2"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":"Toggle","maxammo":"2","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"LeblancR.png","sprite":"spell6.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"Toggle"}]},"LeeSin":{"id":64,"key":"LeeSin","name":"Lee Sin","title":"the Blind Monk","spells":[{"id":"BlindMonkQOne","name":"Sonic Wave / Resonating Strike","description":"Sonic Wave: Lee Sin projects a discordant wave of sound to locate his enemies, dealing physical damage to the first enemy it encounters. If Sonic Wave hits, Lee Sin can cast Resonating Strike for the next 3 seconds. Resonating Strike: Lee Sin dashes to the enemy hit by Sonic Wave, dealing physical damage plus 8% of their missing Health.","tooltip":"Sonic Wave: Lee Sin projects a discordant wave of sound to locate his enemies, dealing {{ e1 }} (+{{ a1 }}) physical damage to the first enemy it encounters, granting True Sight of the target. If Sonic Wave hits, Lee Sin can cast Resonating Strike for the next {{ e7 }} seconds.
Resonating Strike: Lee Sin dashes to the enemy hit by Sonic Wave, dealing {{ e2 }} (+{{ a1 }}) physical damage plus {{ e3 }}% of their missing Health (Max: {{ e6 }} Damage vs. Monsters).","leveltip":{"label":["Sonic Wave Damage","Resonating Strike Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[50,80,110,140,170],[50,80,110,140,170],[8,8,8,8,8],[30,30,30,30,30],[1350,1350,1350,1350,1350],[400,400,400,400,400],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/80/110/140/170","50/80/110/140/170","8","30","1350","400","3","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.9,"key":"a1"},{"link":"bonusattackdamage","coeff":0.9,"key":"a1"}],"costType":" Energy / {{ e4 }} Energy","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"BlindMonkQOne.png","sprite":"spell6.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Energy / {{ e4 }} Energy"},{"id":"BlindMonkWOne","name":"Safeguard / Iron Will","description":"Safeguard: Lee Sin rushes to target ally, shielding himself from damage. If the ally is a champion, they are also shielded. After using Safeguard, Lee Sin can cast Iron Will for the next 3 seconds. Iron Will: Lee Sin's intense training allows him to thrive in battle. For 4 seconds, Lee Sin gains Life Steal and Spell Vamp.","tooltip":"Safeguard: Lee Sin rushes to target ally. If the ally is a champion, Lee Sin shields the ally and himself for {{ e1 }} (+{{ a1 }}) damage for {{ e3 }} seconds and Safeguard's cooldown is reduced by {{ e6 }}%. After using Safeguard, Lee Sin can cast Iron Will for the next {{ e9 }} seconds.
Iron Will: Lee Sin gains {{ e2 }}% Life Steal and Spell Vamp for {{ e8 }} seconds.","leveltip":{"label":["Safeguard Shield Absorption","Iron Will Lifesteal / Spell Vamp %"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[14,14,14,14,14],"cooldownBurn":"14","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[40,100,160,220,280],[10,15,20,25,30],[2,2,2,2,2],[30,30,30,30,30],[5,5,5,5,5],[50,50,50,50,50],[0,0,0,0,0],[4,4,4,4,4],[3,3,3,3,3],[1350,1350,1350,1350,1350]],"effectBurn":[null,"40/100/160/220/280","10/15/20/25/30","2","30","5","50","0","4","3","1350"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Energy / {{ e4 }} Energy","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"BlindMonkWOne.png","sprite":"spell6.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Energy / {{ e4 }} Energy"},{"id":"BlindMonkEOne","name":"Tempest / Cripple","description":"Tempest: Lee Sin smashes the ground, sending out a shockwave that deals magic damage and reveals enemy units hit. If Tempest hits an enemy, Lee Sin can cast cripple for the next 3 seconds. Cripple: Lee Sin cripples nearby enemies damaged by Tempest, reducing their Movement Speed for 4 seconds. Movement Speed recovers gradually over the duration.","tooltip":"Tempest: Lee Sin smashes the ground, sending out a shockwave that deals {{ e1 }} (+{{ a1 }}) magic damage. If Tempest hits an enemy, Lee Sin can cast Cripple for the next {{ e6 }} seconds.
Cripple: Lee Sin cripples nearby enemies struck by Tempest for {{ e5 }} seconds, slowing their Movement Speed by {{ e2 }}%. Movement Speed recovers gradually over the duration.","leveltip":{"label":["Tempest Damage","Cripple Slow"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[60,95,130,165,200],[20,30,40,50,60],[60,95,130,165,200],[30,30,30,30,30],[4,4,4,4,4],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","20/30/40/50/60","60/95/130/165/200","30","4","3","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"}],"costType":" Energy / {{ e4 }} Energy","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"BlindMonkEOne.png","sprite":"spell6.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Energy / {{ e4 }} Energy"},{"id":"BlindMonkRKick","name":"Dragon's Rage","description":"Lee Sin performs a powerful roundhouse kick launching his target back, dealing physical damage to the target and any enemies they collide with. Enemies the target collides with are knocked into the air for a short duration. This technique was taught to him by Jesse Perring, although Lee Sin does not kick players off the map.","tooltip":"Lee Sin performs a powerful roundhouse kick knocking an enemy champion back and dealing {{ e1 }} (+{{ a1 }}) physical damage.
Enemies the target collides with are knocked into the air briefly and take physical damage equal to {{ e1 }} (+{{ a1 }}) plus {{ e3 }}% of the initial target's bonus health.","leveltip":{"label":["Damage","Bonus Health Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,85,60],"cooldownBurn":"110/85/60","cost":[0,0,0],"costBurn":"0","effect":[null,[150,300,450],[75,125,175],[12,15,18],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/300/450","75/125/175","12/15/18","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":2,"key":"a1"},{"link":"bonusattackdamage","coeff":2,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[375,375,375],"rangeBurn":"375","image":{"full":"BlindMonkRKick.png","sprite":"spell6.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Leona":{"id":89,"key":"Leona","name":"Leona","title":"the Radiant Dawn","spells":[{"id":"LeonaShieldOfDaybreak","name":"Shield of Daybreak","description":"Leona uses her shield to perform her next basic attack, dealing bonus magic damage and stunning the target.","tooltip":"Next basic attack deals {{ e2 }} (+{{ a1 }}) bonus magic damage and stuns for {{ e1 }} second.","leveltip":{"label":["Damage","Mana Cost","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[1,1,1,1,1],[30,55,80,105,130],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1","30/55/80/105/130","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[100,100,100,100,100],"rangeBurn":"100","image":{"full":"LeonaShieldOfDaybreak.png","sprite":"spell6.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeonaSolarBarrier","name":"Eclipse","description":"Leona raises her shield to gain Armor and Magic Resist. When the duration first ends, if there are nearby enemies, she will deal magic damage to them and prolong the duration of the effect.","tooltip":"Grants {{ e2 }} (+{{ f1 }}) bonus Armor and {{ e2 }} (+{{ f2 }}) Magic Resist for {{ e3 }} seconds. When the effect ends, nearby enemies struck take {{ e1 }} (+{{ a1 }}) magic damage and Leona retains her bonus Armor and Magic Resist for {{ e3 }} seconds.","leveltip":{"label":["Damage","Armor and Magic Resist"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[14,14,14,14,14],"cooldownBurn":"14","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[60,100,140,180,220],[20,30,40,50,60],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","20/30/40/50/60","3","0","0","0","0","0","0","0"],"vars":[{"link":"bonusarmor","coeff":0.2,"key":"f1"},{"link":"bonusspellblock","coeff":0.2,"key":"f2"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"LeonaSolarBarrier.png","sprite":"spell6.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeonaZenithBlade","name":"Zenith Blade","description":"Leona projects a solar image of her sword, dealing magic damage to all enemies in a line. When the image fades, the last enemy champion struck will be briefly immobilized and Leona will dash to them.","tooltip":"Strikes all enemies in a line dealing {{ e1 }} (+{{ a1 }}) magic damage. The last enemy Champion struck will be rooted for {{ e2 }} seconds and Leona will dash to them.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[60,100,140,180,220],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","0.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[875,875,875,875,875],"rangeBurn":"875","image":{"full":"LeonaZenithBlade.png","sprite":"spell6.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LeonaSolarFlare","name":"Solar Flare","description":"Leona calls down a beam of solar energy, dealing damage to enemies in an area. Enemies in the center of the area are stunned, while enemies on the outside are slowed. Afterward, Leona's sword is charged with the power of the sun and deals bonus magic damage for a few attacks.","tooltip":"Calls down a radiant beam of solar energy dealing {{ e4 }} (+{{ a1 }}) magic damage and slowing enemies by {{ e1 }}% for {{ e2 }} seconds. Enemies in the center of the flare are stunned instead of slowed.
Leona's sword remains charged with Incandescence, causing her next {{ e5 }} basic attacks to gain 100 range and deal {{ e3 }} (+{{ a2 }}) bonus magic damage on hit.","leveltip":{"label":["Damage","Incandescence Damage","Incandescent Attacks","Cooldown"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e3 }} -> {{ e3NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[90,75,60],"cooldownBurn":"90/75/60","cost":[100,100,100],"costBurn":"100","effect":[null,[80,80,80],[1.5,1.5,1.5],[30,40,50],[100,175,250],[3,4,5],[5,5,5],[100,100,100],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"80","1.5","30/40/50","100/175/250","3/4/5","5","100","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"},{"link":"spelldamage","coeff":0.15,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200],"rangeBurn":"1200","image":{"full":"LeonaSolarFlare.png","sprite":"spell6.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Lissandra":{"id":127,"key":"Lissandra","name":"Lissandra","title":"the Ice Witch","spells":[{"id":"LissandraQ","name":"Ice Shard","description":"Throws a spear of ice that shatters when it hits an enemy, dealing magic damage and slowing Movement Speed. Shards pass through the target, dealing the same damage to other enemies hit.","tooltip":"Throws a spear of ice that shatters when it hits an enemy, dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing Movement Speed by {{ e3 }}% for {{ e2 }} seconds. Shards then pass through the target, dealing the same damage to other enemies hit.","leveltip":{"label":["Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[6,5.25,4.5,3.75,3],"cooldownBurn":"6/5.25/4.5/3.75/3","cost":[85,85,85,85,85],"costBurn":"85","effect":[null,[70,100,130,160,190],[1.5,1.5,1.5,1.5,1.5],[16,19,22,25,28],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","1.5","16/19/22/25/28","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"LissandraQ.png","sprite":"spell6.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LissandraW","name":"Ring of Frost","description":"Freezes nearby enemies in ice, dealing magic damage and rooting them. ","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and roots them for {{ e2 }} seconds.","leveltip":{"label":["Damage","Root Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[70,110,150,190,230],[1.1,1.2,1.3,1.4,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","1.1/1.2/1.3/1.4/1.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"LissandraW.png","sprite":"spell6.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LissandraE","name":"Glacial Path","description":"Lissandra creates an ice claw that deals magic damage. Reactivating this ability transports Lissandra to the claw's current location.","tooltip":"Casts an ice claw that deals {{ e1 }} (+{{ a1 }}) magic damage to enemies hit.
Reactivating this ability transports Lissandra to the claw's current location.","leveltip":{"label":["Damage","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[24,21,18,15,12],"cooldownBurn":"24/21/18/15/12","cost":[80,85,90,95,100],"costBurn":"80/85/90/95/100","effect":[null,[70,115,160,205,250],[14,13,12,11,10],[20,20,20,20,20],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","14/13/12/11/10","20","1","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"LissandraE.png","sprite":"spell6.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LissandraR","name":"Frozen Tomb","description":"If cast on an enemy champion, the target is frozen solid, stunning it. If cast on Lissandra, she encases herself in dark ice, healing herself while becoming untargetable and invulnerable. Dark ice then emanates from the target dealing magic damage to enemies and slowing Movement Speed.","tooltip":"On Enemy Cast: Freezes target champion solid, stunning it for {{ e4 }} seconds.
On Self Cast: Lissandra encases herself in dark ice for {{ e5 }} seconds, healing for {{ e6 }} (+{{ a2 }}), increased by {{ e7 }}% for each {{ e8 }}% Health she is missing. During this time Lissandra is untargetable and invulnerable but is unable to take any actions.
Dark ice then emanates from the target dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies. The ice lasts for {{ e3 }} seconds and slows enemy Movement Speed by {{ e2 }}%.","leveltip":{"label":["Damage","Slow","Heal","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e6 }} -> {{ e6NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,105,80],"cooldownBurn":"130/105/80","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[30,45,75],[3,3,3],[1.5,1.5,1.5],[2.5,2.5,2.5],[100,150,200],[1,1,1],[1,1,1],[292,292,292],[0,0,0]],"effectBurn":[null,"150/250/350","30/45/75","3","1.5","2.5","100/150/200","1","1","292","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a2"},{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"LissandraR.png","sprite":"spell6.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Lucian":{"id":236,"key":"Lucian","name":"Lucian","title":"the Purifier","spells":[{"id":"LucianQ","name":"Piercing Light","description":"Lucian shoots a bolt of piercing light through a target.","tooltip":"Shoots a bolt of piercing light through an enemy unit, damaging enemies in a line for {{ e1 }} (+{{ f1 }}) ({{ e2 }}% of bonus Attack Damage) physical damage.
Piercing Light's cast time decreases slightly as Lucian gains levels.","leveltip":{"label":["Damage","Bonus Attack Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[80,115,150,185,220],[60,70,80,90,100],[900,900,900,900,900],[0.41,0.41,0.41,0.41,0.41],[100,100,100,100,100],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/115/150/185/220","60/70/80/90/100","900","0.41","100","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.6,0.75,0.9,1.05,1.2],"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"LucianQ.png","sprite":"spell6.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LucianW","name":"Ardent Blaze","description":"Lucian shoots a missile that explodes in a star shape, marking enemies. Lucian gains Movement Speed for attacking marked enemies.","tooltip":"Fires a shot that explodes upon enemy contact or reaching the end of its path. The explosion deals {{ e1 }} (+{{ a1 }}) magic damage and marks enemies for 6 seconds.
When Lucian or his allies damage a marked target, Lucian gains {{ e2 }} Movement Speed for 1 second.","leveltip":{"label":["Damage","Movement Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[60,100,140,180,220],[60,65,70,75,80],[900,900,900,900,900],[0,0,0,0,0],[1,1,1,1,1],[200,200,200,200,200],[1,1,1,1,1],[6,6,6,6,6],[1,1,1,1,1],[700,700,700,700,700]],"effectBurn":[null,"60/100/140/180/220","60/65/70/75/80","900","0","1","200","1","6","1","700"],"vars":[{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"LucianW.png","sprite":"spell6.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LucianE","name":"Relentless Pursuit","description":"Lucian quickly dashes a short distance. Lightslinger attacks reduce Relentless Pursuit's cooldown.","tooltip":"Quickly dashes a short distance.
Whenever Lightslinger hits an enemy, Relentless Pursuit's cooldown is reduced by {{ e1 }} second (doubles to {{ e2 }} seconds against champions).","leveltip":{"label":["Cooldown","Mana Cost"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[40,30,20,10,0],"costBurn":"40/30/20/10/0","effect":[null,[1,1,1,1,1],[2,2,2,2,2],[425,425,425,425,425],[200,200,200,200,200],[1350,1350,1350,1350,1350],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1","2","425","200","1350","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[445,445,445,445,445],"rangeBurn":"445","image":{"full":"LucianE.png","sprite":"spell6.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LucianR","name":"The Culling","description":"Lucian unleashes a torrent of shots from his weapons.","tooltip":"Lucian moves freely while firing rapidly in a single direction for {{ e1 }} seconds. His shots collide with the first enemy they hit and each do {{ e2 }} (+{{ a1 }})(+{{ a2 }}) physical damage. The Culling does {{ e8 }}% damage to minions.
Lucian may use Relentless Pursuit during The Culling.
Reactivate The Culling to cancel early.","leveltip":{"label":["Damage","Number of Shots","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,100,90],"cooldownBurn":"110/100/90","cost":[100,100,100],"costBurn":"100","effect":[null,[3,3,3],[20,35,50],[2.5,3,3.5],[2.5,2.5,2.5],[20,25,30],[0.75,0.75,0.75],[1050,1050,1050],[400,400,400],[125,125,125],[0.25,0.25,0.25]],"effectBurn":[null,"3","20/35/50","2.5/3/3.5","2.5","20/25/30","0.75","1050","400","125","0.25"],"vars":[{"link":"spelldamage","coeff":0.1,"key":"a1"},{"link":"attackdamage","coeff":0.2,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1400,1400,1400],"rangeBurn":"1400","image":{"full":"LucianR.png","sprite":"spell6.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Lulu":{"id":117,"key":"Lulu","name":"Lulu","title":"the Fae Sorceress","spells":[{"id":"LuluQ","name":"Glitterlance","description":"Pix and Lulu each fire a bolt of magical energy that heavily slows all enemies it hits. An enemy can only be damaged by one bolt.","tooltip":"Lulu and Pix each fire a piercing bolt dealing {{ e1 }} (+{{ a1 }}) magic damage to the first enemy hit and {{ f4 }} (+{{ f5 }}) to all additional enemies. Enemies hit are slowed by {{ e2 }}%, decaying over the next {{ e3 }} second(s).
An enemy can only be damaged for up to a total of {{ f6 }} damage per cast.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[80,125,170,215,260],[80,80,80,80,80],[2,2,2,2,2],[0,0,0,0,0],[0.7,0.7,0.7,0.7,0.7],[8,8,8,8,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/125/170/215/260","80","2","0","0.7","8","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"LuluQ.png","sprite":"spell6.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuluW","name":"Whimsy","description":"If cast on an ally, grants them Attack Speed and Movement Speed for a short time. If cast on an enemy, turns them into an adorable critter that can't attack or cast spells.","tooltip":"On Ally Cast: Target ally gains {{ e1 }} (+{{ a2 }})% Movement Speed and {{ e7 }}% Attack Speed for {{ e5 }} seconds.
On Enemy Cast: Polymorphs an enemy champion for {{ e3 }} seconds, disabling their ability to attack or cast spells and reducing their base Movement Speed by {{ e4 }}.","leveltip":{"label":["Movement and Attack Speed Duration","Attack Speed Bonus","Polymorph Duration","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ e7 }}% -> {{ e7NL }}%","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[30,30,30,30,30],[0,0,0,0,0],[1.25,1.5,1.75,2,2.25],[60,60,60,60,60],[3,3.25,3.5,3.75,4],[0.01,0.01,0.01,0.01,0.01],[25,30,35,40,45],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30","0","1.25/1.5/1.75/2/2.25","60","3/3.25/3.5/3.75/4","0.01","25/30/35/40/45","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.05,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"LuluW.png","sprite":"spell6.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuluE","name":"Help, Pix!","description":"If cast on an ally, commands Pix to jump to an ally and shield them. He then follows them and aids their attacks. If cast on an enemy, commands Pix to jump to an enemy and damage them. He then follows them and grants you vision of that enemy.","tooltip":"On Ally Cast: Commands Pix to jump to an ally and then follow and aid their attacks instead of Lulu's for {{ e1 }} seconds. If the ally is a champion, Pix shields them from {{ e2 }} (+{{ a1 }}) damage for {{ e1 }} seconds.
On Enemy Cast: Pix deals {{ e4 }} (+{{ a2 }}) magic damage to target enemy unit. Pix then follows and grants True Sight of them for {{ e6 }} seconds. ","leveltip":{"label":["Shield Amount","Damage","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[6,6,6,6,6],[70,105,140,175,210],[50,50,50,50,50],[80,110,140,170,200],[25,25,25,25,25],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"6","70/105/140/175/210","50","80/110/140/170/200","25","4","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"LuluE.png","sprite":"spell6.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuluR","name":"Wild Growth","description":"Lulu enlarges an ally, knocking nearby enemies into the air and granting the ally a large amount of bonus health. For the next few seconds, that ally gains an aura that slows nearby enemies.","tooltip":"Lulu enlarges her ally, knocking nearby enemies into the air. For {{ e4 }} seconds, her ally gains {{ e1 }} (+{{ a1 }}) bonus health and slows nearby enemies by {{ e2 }}%.","leveltip":{"label":["Bonus Health","Slow Percent","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,95,80],"cooldownBurn":"110/95/80","cost":[100,100,100],"costBurn":"100","effect":[null,[300,450,600],[30,45,60],[1,1,1],[7,7,7],[50,50,50],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"300/450/600","30/45/60","1","7","50","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900],"rangeBurn":"900","image":{"full":"LuluR.png","sprite":"spell6.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Lux":{"id":99,"key":"Lux","name":"Lux","title":"the Lady of Luminosity","spells":[{"id":"LuxLightBinding","name":"Light Binding","description":"Lux releases a sphere of light that binds and deals damage to up to two enemy units.","tooltip":"Fires a ball of light, rooting up to two enemies for {{ e3 }} seconds and dealing {{ e1 }} (+{{ a1 }}) magic damage to each.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[50,100,150,200,250],[50,50,50,50,50],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/100/150/200/250","50","2","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1175,1175,1175,1175,1175],"rangeBurn":"1175","image":{"full":"LuxLightBinding.png","sprite":"spell6.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuxPrismaticWave","name":"Prismatic Barrier","description":"Lux throws her wand and bends the light around any friendly target it touches, protecting them from enemy damage.","tooltip":"Throws Lux's wand in target direction protecting her and all allied Champions it touches from {{ e2 }} (+{{ a1 }}) damage for 3 seconds.
Upon reaching its destination it returns to Lux, protecting her and other allied Champions it touches from another {{ e2 }} (+{{ a1 }}) damage for 3 seconds.","leveltip":{"label":["Shield","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[2,4,6,8,10],[50,65,80,95,110],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2/4/6/8/10","50/65/80/95/110","3","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"LuxPrismaticWave.png","sprite":"spell6.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuxLightStrikeKugel","name":"Lucent Singularity","description":"Fires an anomaly of twisted light to an area, which slows nearby enemies. Lux can detonate it to damage enemies in the area of effect.","tooltip":"Creates a zone that slows enemies by {{ e1 }}%. After {{ e3 }} seconds the zone detonates dealing {{ e2 }} (+{{ a1 }}) magic damage.
Activate again to detonate early.","leveltip":{"label":["Damage","Slow Amount","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[70,85,100,115,130],"costBurn":"70/85/100/115/130","effect":[null,[25,30,35,40,45],[60,105,150,195,240],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/30/35/40/45","60/105/150/195/240","5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"LuxLightStrikeKugel.png","sprite":"spell6.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"LuxMaliceCannon","name":"Final Spark","description":"After gathering energy, Lux fires a beam of light that deals damage to all targets in the area. If Final Spark kills a champion, part of its cooldown is refunded. In addition, triggers Lux's passive ability and refreshes the Illumination debuff duration.","tooltip":"Fires a dazzling ray of light dealing {{ e1 }} (+{{ a1 }}) magic damage to all enemies in a line. If Final Spark kills an enemy champion, {{ e3 }}% of its cooldown is refunded.
Final Spark ignites and refreshes the Illumination debuff. ","leveltip":{"label":["Damage","Cooldown Refund","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[80,65,50],"cooldownBurn":"80/65/50","cost":[100,100,100],"costBurn":"100","effect":[null,[300,400,500],[1,1,1],[10,30,50],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"300/400/500","1","10/30/50","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[3340,3340,3340],"rangeBurn":"3340","image":{"full":"LuxMaliceCannon.png","sprite":"spell6.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Malphite":{"id":54,"key":"Malphite","name":"Malphite","title":"Shard of the Monolith","spells":[{"id":"SeismicShard","name":"Seismic Shard","description":"Using his primal elemental magic, Malphite sends a shard of the earth through the ground at his foe, dealing damage upon impact and stealing Movement Speed for 4 seconds.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage and steals {{ e2 }}% Movement Speed from the target for {{ e3 }} seconds.","leveltip":{"label":["Damage","Movement Speed","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[70,120,170,220,270],[14,17,20,23,26],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/120/170/220/270","14/17/20/23/26","4","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"SeismicShard.png","sprite":"spell6.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Obduracy","name":"Brutal Strikes","description":"Malphite starts to hit with such force that his attacks deal damage to all units in front of him. Passively increases his Armor.","tooltip":"Passive: Malphite's armor is increased by {{ e1 }}% ({{ f1 }}).
Active: Basic attacks deal an additional {{ e2 }} (+{{ f2 }})(+{{ a1 }}) physical damage to the target and nearby enemies. Lasts {{ e3 }} seconds.","leveltip":{"label":["Armor","Damage"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[25,25,25,25,25],"costBurn":"25","effect":[null,[15,20,25,30,35],[15,30,45,60,75],[6,6,6,6,6],[225,225,225,225,225],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","15/30/45/60/75","6","225","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"Obduracy.png","sprite":"spell6.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Landslide","name":"Ground Slam","description":"Malphite slams the ground, sending out a shockwave that deals magic damage based on his Armor as damage and reduces the Attack Speed of enemies for a short duration.","tooltip":"Malphite slams the ground dealing {{ e2 }} (+{{ f1 }})(+{{ a1 }}) magic damage to surrounding enemies, reducing their Attack Speed by {{ e1 }}% for {{ e4 }} seconds.
This ability gains damage equal to {{ e3 }}% of Malphite's Armor.","leveltip":{"label":["Damage","Attack Speed Reduction","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[30,35,40,45,50],[60,95,130,165,200],[40,40,40,40,40],[3,3,3,3,3],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/35/40/45/50","60/95/130/165/200","40","3","6","0","0","0","0","0"],"vars":[{"link":"armor","coeff":0.3,"key":"f1"},{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"Landslide.png","sprite":"spell6.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UFSlash","name":"Unstoppable Force","description":"Malphite ferociously charges to a location, damaging enemies and knocking them into the air.","tooltip":"Malphite charges to target area. Upon his arrival he deals {{ e2 }} (+{{ a1 }}) magic damage to nearby enemies and knocks them into the air for {{ e3 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,115,100],"cooldownBurn":"130/115/100","cost":[100,100,100],"costBurn":"100","effect":[null,[1.5,1.75,2],[200,300,400],[1.5,1.5,1.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1.5/1.75/2","200/300/400","1.5","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"UFSlash.png","sprite":"spell7.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Malzahar":{"id":90,"key":"Malzahar","name":"Malzahar","title":"the Prophet of the Void","spells":[{"id":"MalzaharQ","name":"Call of the Void","description":"Malzahar opens up two portals to the Void. After a short delay, they fire projectiles that deal Magic Damage and silence enemy champions.","tooltip":"Malzahar opens two portals to the Void that fire projectiles inward, dealing {{ e1 }} (+{{ a1 }}) magic damage and silencing enemies hit for {{ e2 }} second(s).","leveltip":{"label":["Damage","Silence Duration"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[70,110,150,190,230],[1,1.25,1.5,1.75,2],[0.4,0.4,0.4,0.4,0.4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","1/1.25/1.5/1.75/2","0.4","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"MalzaharQ.png","sprite":"spell7.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MalzaharW","name":"Void Swarm","description":"Malzahar summons Voidlings to attack nearby enemies.","tooltip":"Passive: Casting Malzahar's other spells gives him Gathering Swarm, increasing the number of Voidlings summoned by Void Swarm (max {{ e6 }}).
Active: Summons one or more Voidlings. Voidlings last {{ e1 }} seconds and deal an additional {{ e2 }} (+{{ a1 }})(+{{ a2 }}) magic damage each hit.
Voidlings deal {{ e3 }}% damage to lane minions affected by Malefic Visions. Voidlings deal {{ e4 }}% damage to epic monsters.","leveltip":{"label":["Voidling Bonus Damage","Voidling Duration","Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[8,8,9,9,10],[12,14,16,18,20],[300,300,300,300,300],[50,50,50,50,50],[25000,25000,25000,25000,25000],[2,2,2,2,2],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"8/8/9/9/10","12/14/16/18/20","300","50","25000","2","0.5","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"bonusattackdamage","coeff":0.4,"key":"a2"}],"costType":" Mana","maxammo":"0","range":[150,150,150,150,150],"rangeBurn":"150","image":{"full":"MalzaharW.png","sprite":"spell7.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MalzaharE","name":"Malefic Visions","description":"Malzahar infects his target's mind with cruel visions of their demise, dealing damage over time. Using Malzahar's other spells on the target will refresh the visions.
If the target dies while afflicted by the visions, they pass on to a nearby enemy unit and Malzahar gains Mana. Malzahar's Voidlings are attracted to affected units.","tooltip":"Deal {{ e1 }} (+{{ a1 }}) magic damage to an enemy target over {{ e3 }} seconds. Applying Call of the Void or Nether Grasp to the victim during this time refreshes the visions.
If the victim is killed, Malzahar gains {{ f1 }} Mana ({{ e5 }}% of max mana) and the visions spread to the nearest enemy.","leveltip":{"label":["Base Damage","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[15,13,11,9,7],"cooldownBurn":"15/13/11/9/7","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[80,115,150,185,220],[8,8,8,8,8],[4,4,4,4,4],[8,8,8,8,8],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/115/150/185/220","8","4","8","2","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"MalzaharE.png","sprite":"spell7.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MalzaharR","name":"Nether Grasp","description":"Malzahar channels the essence of the Void to suppress an enemy champion over a zone of damaging negative energy.","tooltip":"Malzahar suppresses a target champion for {{ e4 }} seconds, dealing {{ e7 }} (+{{ a2 }}) magic damage over the duration. A zone of negative energy is created around his target for {{ e3 }} seconds, dealing {{ e1 }}% (+{{ a1 }}%) of nearby enemies max health as magic damage per second.","leveltip":{"label":["Nether Grasp Damage","Null Zone Damage","Cooldown"],"effect":["{{ e7 }} -> {{ e7NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[2,3,4],[120,100,80],[5,5,5],[2.5,2.5,2.5],[120,120,120],[10,10,10],[125,250,375],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"2/3/4","120/100/80","5","2.5","120","10","125/250/375","0","0","0"],"vars":[{"link":"spelldamage","coeff":1.15,"key":"a2"},{"link":"spelldamage","coeff":0.005,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700],"rangeBurn":"700","image":{"full":"MalzaharR.png","sprite":"spell7.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Maokai":{"id":57,"key":"Maokai","name":"Maokai","title":"the Twisted Treant","spells":[{"id":"MaokaiQ","name":"Bramble Smash","description":"Maokai knocks back nearby enemies with a shockwave, dealing magic damage and slowing them.","tooltip":"Maokai smashes his fist into the ground, releasing a shockwave. Nearby enemies are knocked away from him and all affected enemies take {{ e1 }} (+{{ a1 }}) magic damage and are slowed briefly.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7.25,6.5,5.75,5],"cooldownBurn":"8/7.25/6.5/5.75/5","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[70,115,160,205,250],[325,325,325,325,325],[99,99,99,99,99],[0.25,0.25,0.25,0.25,0.25],[750,750,750,750,750],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","325","99","0.25","750","300","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"MaokaiQ.png","sprite":"spell7.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MaokaiW","name":"Twisted Advance","description":"Maokai contorts into a mass of moving roots, becoming untargetable and dashing to the target. Upon arrival, he roots the target.","tooltip":"Maokai transforms into a moving mass of roots, becoming untargetable and dashing to the target.
Upon arrival, he deals {{ e1 }} (+{{ a1 }}) magic damage and roots the target for {{ e2 }} second(s).","leveltip":{"label":["Damage","Root Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[50,75,100,125,150],[1,1.1,1.2,1.3,1.4],[0,0,0,0,0],[0,0,0,0,0],[1300,1300,1300,1300,1300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","1/1.1/1.2/1.3/1.4","0","0","1300","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[525,525,525,525,525],"rangeBurn":"525","image":{"full":"MaokaiW.png","sprite":"spell7.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MaokaiE","name":"Sapling Toss","description":"Maokai flings a sapling to the target area to stand guard. More effective in brush.","tooltip":"Maokai flings a sapling, which stands watch for {{ f1 }} seconds. Saplings will chase nearby enemies, detonating on proximity, dealing {{ e1 }} +{{ e8 }}% [+{{ a1 }}%] Target Max Health magic damage and slowing enemies struck by {{ e5 }}% for {{ e6 }} seconds.
Saplings placed in brush last for {{ f2 }} seconds and cause a larger explosion, dealing double damage over {{ e6 }} seconds to all enemies hit.
Maximum {{ e4 }} Damage to non-Champions, doubled for brush.","leveltip":{"label":["Base Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,11,11,11,11],"cooldownBurn":"11","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[25,50,75,100,125],[0.5,0.5,0.5,0.5,0.5],[2,2,2,2,2],[300,300,300,300,300],[35,35,35,35,35],[2,2,2,2,2],[2,2,2,2,2],[8,8,8,8,8],[0,0,0,0,0],[550,550,550,550,550]],"effectBurn":[null,"25/50/75/100/125","0.5","2","300","35","2","2","8","0","550"],"vars":[{"link":"spelldamage","coeff":0.01,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"MaokaiE.png","sprite":"spell7.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MaokaiR","name":"Nature's Grasp","description":"Maokai summons a colossal wall of brambles and thorns that slowly advances forwards, damaging and rooting any enemies in the path.","tooltip":"Maokai summons a colossal wall of brambles and thorns that slowly advances forwards, dealing {{ e1 }} (+{{ a1 }}) magic damage and rooting any enemies struck for ({{ e2 }} to {{ e2 }}) seconds, increasing with distance travelled.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,225,300],[2.4,2.4,2.4],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/225/300","2.4","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[2500,2500,2500],"rangeBurn":"2500","image":{"full":"MaokaiR.png","sprite":"spell7.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"MasterYi":{"id":11,"key":"MasterYi","name":"Master Yi","title":"the Wuju Bladesman","spells":[{"id":"AlphaStrike","name":"Alpha Strike","description":"Master Yi teleports across the battlefield with blinding speed, dealing physical damage to multiple units in his path, while simultaneously becoming untargetable. Alpha Strike can critically strike and deals bonus physical damage to minions and monsters. Basic attacks reduce Alpha Strike's cooldown.","tooltip":"Master Yi teleports to strike up to {{ e8 }} enemies, dealing {{ e1 }} (+{{ a1 }}) physical damage, with an additional {{ e3 }} damage to minions and monsters. During Alpha Strike Master Yi is untargetable.
Alpha Strike can critically strike, dealing an additional {{ f1 }} physical damage. Basic attacks lower the cooldown of Alpha Strike by {{ e7 }} second.","leveltip":{"label":["Damage","Bonus Minion/Monster Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[25,60,95,130,165],[50,50,50,50,50],[75,100,125,150,175],[1,1,1,1,1],[0.25,0.25,0.25,0.25,0.25],[0.6,0.6,0.6,0.6,0.6],[1,1,1,1,1],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/60/95/130/165","50","75/100/125/150/175","1","0.25","0.6","1","4","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"},{"link":"attackdamage","coeff":0.6,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"AlphaStrike.png","sprite":"spell7.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Meditate","name":"Meditate","description":"Master Yi rejuvenates his body by focus of mind, restoring Health and taking reduced damage for a short time. In addition, Master Yi will gain stacks of Double Strike and pause the remaining duration on Wuju Style and Highlander for each second he channels.","tooltip":"Master Yi channels, restoring {{ e1 }} (+{{ a1 }}) Health per second for 4 seconds. This healing is increased by {{ e4 }}% for every {{ e5 }}% of Master Yi's missing Health.
While channeling, Master Yi reduces incoming damage by {{ e3 }}%. This damage reduction is halved against turrets.
In addition, Master Yi will gain stacks of Double Strike and pause the remaining duration on Wuju Style and Highlander for each second he channels.","leveltip":{"label":["Damage Reduction","Health Restored"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[35,35,35,35,35],"cooldownBurn":"35","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[30,50,70,90,110],[100,150,200,250,300],[50,55,60,65,70],[1,1,1,1,1],[1,1,1,1,1],[50,50,50,50,50],[4,4,4,4,4],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","100/150/200/250/300","50/55/60/65/70","1","1","50","4","0.5","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"Meditate.png","sprite":"spell7.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"WujuStyle","name":"Wuju Style","description":"Master Yi becomes skilled in the art of Wuju, passively increasing his Attack Damage. Activating Wuju Style grants bonus true damage on basic attacks, but the passive bonus is then lost while on cooldown.","tooltip":"Passive: Grants {{ e1 }}% ({{ f1 }}) Attack Damage.
Active: Basic attacks deal {{ e3 }} (+{{ f2 }}) bonus true damage for {{ e5 }} seconds. Afterwards the passive bonus is lost while Wuju Style is on cooldown.","leveltip":{"label":["Active Damage","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,10,10,10,10],[25,25,25,25,25],[14,23,32,41,50],[20,30,40,50,60],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10","25","14/23/32/41/50","20/30/40/50/60","5","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.1,0.125,0.15,0.175,0.2],"key":"f2"}],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"WujuStyle.png","sprite":"spell7.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"Highlander","name":"Highlander","description":"Master Yi moves with unparalleled agility, temporarily increasing his Movement and Attack Speeds as well as making him immune to all slowing effects. While active, Champion kills or assists extend Highlander's duration. Passively reduces cooldown for his other abilities on a kill or assist.","tooltip":"Passive: Champion kills and assists reduce the remaining cooldown of Master Yi's basic abilities by {{ e5 }}%.
Active: Increases Movement Speed by {{ e3 }}%, Attack Speed by {{ e2 }}%, and grants immunity to slows for {{ e1 }} seconds. While active, champion kills and assists extend the duration of Highlander by {{ e4 }} seconds.","leveltip":{"label":["Attack Speed","Movement Speed"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":3,"cooldown":[85,85,85],"cooldownBurn":"85","cost":[100,100,100],"costBurn":"100","effect":[null,[7,7,7],[30,55,80],[25,35,45],[7,7,7],[70,70,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"7","30/55/80","25/35/45","7","70","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1,1,1],"rangeBurn":"1","image":{"full":"Highlander.png","sprite":"spell7.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"MissFortune":{"id":21,"key":"MissFortune","name":"Miss Fortune","title":"the Bounty Hunter","spells":[{"id":"MissFortuneRicochetShot","name":"Double Up","description":"Miss Fortune fires a bullet at an enemy, damaging them and a target behind them. Both strikes can also apply Love Tap.","tooltip":"Miss Fortune fires a bouncing shot through an enemy, dealing {{ e2 }} (+{{ a2 }})(+{{ a1 }}) physical damage to each target hit. Both apply on-hit effects.
The second shot can critically strike for {{ f1 }}% damage, and it always critically strikes if the first shot kills its target.","leveltip":{"label":["Mana Cost","Cooldown","Damage"],"effect":["{{ cost }} -> {{ costNL }} ","{{ cooldown }} -> {{ cooldownNL }} ","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[7,6,5,4,3],"cooldownBurn":"7/6/5/4/3","cost":[43,46,49,52,55],"costBurn":"43/46/49/52/55","effect":[null,[1,1,1,1,1],[20,40,60,80,100],[1,1,1,1,1],[40,70,100,130,160],[40,40,40,40,40],[20,20,20,20,20],[40,40,40,40,40],[110,110,110,110,110],[160,160,160,160,160],[0,0,0,0,0]],"effectBurn":[null,"1","20/40/60/80/100","1","40/70/100/130/160","40","20","40","110","160","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a2"},{"link":"spelldamage","coeff":0.35,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"MissFortuneRicochetShot.png","sprite":"spell7.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MissFortuneViciousStrikes","name":"Strut","description":"Miss Fortune passively gains Movement Speed when not attacked. This ability can be activated to grant bonus Attack Speed for a short duration. While it's on cooldown, Love Taps reduce the remaining cooldown of Strut.","tooltip":"Passive: After 5 seconds of not taking direct damage, Miss Fortune gains {{ e5 }} Movement Speed. After another 5 seconds, this bonus increases to {{ e2 }}.
Active: Fully activates Strut's Movement Speed and grants {{ e1 }}% Attack Speed for {{ e3 }} seconds.
Love Taps reduce the cooldown of Strut by {{ f2 }} seconds.","leveltip":{"label":["Max Movement Speed","Attack Speed"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[40,55,70,85,100],[60,70,80,90,100],[4,4,4,4,4],[2,2,2,2,2],[25,25,25,25,25],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/55/70/85/100","60/70/80/90/100","4","2","25","1","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"MissFortuneViciousStrikes.png","sprite":"spell7.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MissFortuneScattershot","name":"Make It Rain","description":"Miss Fortune reveals an area with a flurry of bullets, dealing waves of damage to opponents and slowing them.","tooltip":"Miss Fortune reveals an area, raining down bullets that deal {{ e1 }} (+{{ a1 }}) magic damage over 2 seconds and slow enemies hit by {{ e2 }}%.","leveltip":{"label":["Cooldown","Damage","Slow"],"effect":["{{ cooldown }} -> {{ cooldownNL }} ","{{ e1 }} -> {{ e1NL }} ","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[80,115,150,185,220],[28,36,44,52,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/115/150/185/220","28/36/44/52/60","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"MissFortuneScattershot.png","sprite":"spell7.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MissFortuneBulletTime","name":"Bullet Time","description":"Miss Fortune channels a flurry of bullets into a cone in front of her, dealing large amounts of damage to enemies. Each wave of Bullet Time can critically strike.","tooltip":"Miss Fortune channels a barrage of bullets for {{ e3 }} seconds, dealing (+{{ f1 }})(+{{ a1 }}) physical damage per wave ({{ e2 }} waves total).
Each wave of Bullet Time can critically strike for {{ f3 }}% damage.
Total Damage: {{ f2 }}","leveltip":{"label":["Cooldown","Waves Fired"],"effect":["{{ cooldown }} -> {{ cooldownNL }} ","{{ e2 }} -> {{ e2NL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[0,0,0],[12,14,16],[3,3,3],[75,75,75],[120,120,120],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"0","12/14/16","3","75","120","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.35,"key":"f1"},{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400],"rangeBurn":"400","image":{"full":"MissFortuneBulletTime.png","sprite":"spell7.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"MonkeyKing":{"id":62,"key":"MonkeyKing","name":"Wukong","title":"the Monkey King","spells":[{"id":"MonkeyKingDoubleAttack","name":"Crushing Blow","description":"Wukong's next attack deals additional physical damage, gains range, and reduces the enemy's Armor for a short duration.","tooltip":"Wukong's next attack gains {{ e4 }} range, deals {{ e1 }} (+{{ a1 }}) bonus physical damage and reduces the enemy's Armor by {{ e2 }}% for {{ e3 }} seconds.","leveltip":{"label":["Bonus Damage","Armor Reduction","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} ->{{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[30,60,90,120,150],[10,15,20,25,30],[3,3,3,3,3],[125,125,125,125,125],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/60/90/120/150","10/15/20/25/30","3","125","6","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"MonkeyKingDoubleAttack.png","sprite":"spell7.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MonkeyKingDecoy","name":"Decoy","description":"Wukong becomes Invisible for a short duration, leaving behind a decoy that will deal Magic Damage to enemies near it when Wukong's stealth expires.","tooltip":"Wukong becomes Invisible for {{ e2 }} seconds, leaving behind a decoy that will deal {{ e1 }} (+{{ a1 }}) Magic Damage to enemies near it after {{ e2 }} seconds.
16","leveltip":{"label":["Base Damage","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} ->{{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[70,115,160,205,250],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","1.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"MonkeyKingDecoy.png","sprite":"spell7.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MonkeyKingNimbus","name":"Nimbus Strike","description":"Wukong dashes to target enemy and sends out images to attack up to 2 additional enemies near his target, dealing physical damage to each enemy struck.","tooltip":"Wukong dashes to target enemy and sends out images to attack up to 2 additional enemies nearby. Each enemy struck takes {{ e1 }} (+{{ a1 }}) physical damage. Wukong then gains {{ e2 }}% Attack Speed for {{ e3 }} seconds.","leveltip":{"label":["Base Damage","Attack Speed","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} ->{{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[60,105,150,195,240],[30,35,40,45,50],[4,4,4,4,4],[1050,1050,1050,1050,1050],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","30/35/40/45/50","4","1050","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"MonkeyKingNimbus.png","sprite":"spell7.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MonkeyKingSpinToWin","name":"Cyclone","description":"Wukong's staff grows outward and he spins it around, dealing damage and knocking up enemies. Wukong gains Movement Speed over the duration of the spell.","tooltip":"Wukong's staff grows outward and he spins it around for 4 seconds, dealing {{ e1 }} (+{{ a1 }}) physical damage per second to nearby enemies, knocking them up for {{ e4 }} second the first time they get hit.
At the start, Wukong gains {{ e2 }}% Movement Speed, and he gains an additional {{ e3 }}% per second over the duration.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} ->{{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[100,100,100],"costBurn":"100","effect":[null,[20,110,200],[15,15,15],[10,10,10],[1,1,1],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"20/110/200","15","10","1","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[315,315,315],"rangeBurn":"315","image":{"full":"MonkeyKingSpinToWin.png","sprite":"spell7.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Mordekaiser":{"id":82,"key":"Mordekaiser","name":"Mordekaiser","title":"the Iron Revenant","spells":[{"id":"MordekaiserMaceOfSpades","name":"Mace of Spades","description":"Mordekaiser's next three attacks deal escalating bonus damage.","tooltip":"Mordekaiser's next three hits are empowered. The first two strikes deal {{ e3 }} (+{{ f1 }})(+{{ f2 }}) bonus magic damage. The final strike deals {{ e9 }} times the bonus damage of the previous strikes, up to {{ f5 }} (+{{ f3 }})(+{{ f4 }}).","leveltip":{"label":["Bonus Damage","Attack Damage Ratio","Cooldown","Health Cost"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e0 }} -> {{ e0NL }}"]},"maxrank":5,"cooldown":[10,8.5,7,5.5,4],"cooldownBurn":"10/8.5/7/5.5/4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[132,181.5,231,280.5,330],[10,15,20,25,30],[10,20,30,40,50],[4,4,4,4,4],[30,60,90,120,150],[20,225,250,275,300],[0.5,0.6,0.7,0.8,0.9],[0.6,0.6,0.6,0.6,0.6],[2,2,2,2,2],[20,23,26,29,32]],"effectBurn":[null,"132/181.5/231/280.5/330","10/15/20/25/30","10/20/30/40/50","4","30/60/90/120/150","20/225/250/275/300","0.5/0.6/0.7/0.8/0.9","0.6","2","20/23/26/29/32"],"vars":[{"link":"bonusattackdamage","coeff":1.65,"key":"f1"},{"link":"bonusattackdamage","coeff":1,"key":"f2"}],"costType":" Health","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"MordekaiserMaceOfSpades.png","sprite":"spell7.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ e0 }} Health"},{"id":"MordekaiserCreepingDeathCast","name":"Harvesters of Sorrow","description":"Coats an ally in magnetic metal, increasing each unit's movement speed toward one another. While near one another, the metal swirls violently dealing damage per second to enemies.","tooltip":"18","leveltip":{"label":["Damage","Reactivation Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e6 }} -> {{ e6NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,30,40,50,60],[140,180,220,260,300],[25,35,45,55,65],[1,1,1,1,1],[75,75,75,75,75],[50,85,120,155,190],[25,25,25,25,25],[2,2,2,2,2],[50,50,50,50,50],[0,0,0,0,0]],"effectBurn":[null,"20/30/40/50/60","140/180/220/260/300","25/35/45/55/65","1","75","50/85/120/155/190","25","2","50","0"],"vars":[],"costType":" Health","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"MordekaiserCreepingDeathCast.png","sprite":"spell7.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ e3 }} Health"},{"id":"MordekaiserSyphonOfDestruction","name":"Siphon of Destruction","description":"Mordekaiser deals damage to enemies in a cone in front of him. For each unit hit, Mordekaiser's shield absorbs energy.","tooltip":"Mordekaiser deals {{ e3 }} (+{{ a1 }}) (+{{ a1 }}) magic damage in a cone.
For each Champion hit, he gains {{ e5 }}% maximum shield.","leveltip":{"label":["Damage","Cooldown","% Max Shield From Champions","Health Cost"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e5 }}% -> {{ e5NL }}%","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[6,5.75,5.5,5.25,5],"cooldownBurn":"6/5.75/5.5/5.25/5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[24,36,48,60,72],[1,2,3,4,5],[35,65,95,125,155],[4,4,4,4,4],[15,17.5,20,22.5,25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"24/36/48/60/72","1/2/3/4/5","35/65/95/125/155","4","15/17.5/20/22.5/25","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.6,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Health","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"MordekaiserSyphonOfDestruction.png","sprite":"spell7.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ e1 }} Health"},{"id":"MordekaiserChildrenOfTheGrave","name":"Children of the Grave","description":"Mordekaiser curses an enemy champion or the Dragon, stealing a percent of their life initially and each second. If the target dies while the spell is active, their soul is enslaved and will follow Mordekaiser as a ghost.","tooltip":"18","leveltip":{"label":["Total Health Stolen","Cooldown","Ghost Lifetime"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ e9 }} -> {{ e9NL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[0,0,0],"costBurn":"0","effect":[null,[25,30,35],[55,65,75],[75,150,225],[2,2,2],[3,3,3],[10,25,50],[30,30,30],[25,25,25],[45,60,75],[2000,2000,2000]],"effectBurn":[null,"25/30/35","55/65/75","75/150/225","2","3","10/25/50","30","25","45/60/75","2000"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"MordekaiserChildrenOfTheGrave.png","sprite":"spell7.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Morgana":{"id":25,"key":"Morgana","name":"Morgana","title":"Fallen Angel","spells":[{"id":"DarkBindingMissile","name":"Dark Binding","description":"Morgana releases a sphere of dark magic. Upon contact with an enemy unit, the sphere will deal magic damage and force the unit to the ground for a period of time.","tooltip":"Fires a bolt of dark energy, rooting the first enemy hit for {{ e2 }} seconds and dealing {{ e1 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Root Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,11,11,11,11],"cooldownBurn":"11","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[80,135,190,245,300],[2,2.25,2.5,2.75,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/135/190/245/300","2/2.25/2.5/2.75/3","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1175,1175,1175,1175,1175],"rangeBurn":"1175","image":{"full":"DarkBindingMissile.png","sprite":"spell7.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TormentedSoil","name":"Tormented Soil","description":"Infects an area with desecrated soil, causing enemy units who stand on the location to take continual damage.","tooltip":"Curses an area for {{ e7 }} seconds. Enemies on the cursed ground are dealt from {{ e5 }} (+{{ a1 }}) to {{ e6 }} (+{{ a2 }}) magic damage every second based on the enemy's missing Health.","leveltip":{"label":["Damage ","Mana Cost"],"effect":["{{ e5 }} -> {{ e5NL }} ","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[70,85,100,115,130],"costBurn":"70/85/100/115/130","effect":[null,[8,16,24,32,40],[0.5,0.5,0.5,0.5,0.5],[280,280,280,280,280],[0,0,0,0,0],[16,32,48,64,80],[24,48,72,96,120],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"8/16/24/32/40","0.5","280","0","16/32/48/64/80","24/48/72/96/120","5","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.22,"key":"a1"},{"link":"spelldamage","coeff":0.33,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"TormentedSoil.png","sprite":"spell7.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BlackShield","name":"Black Shield","description":"Places a protective barrier around an allied champion, absorbing magical damage and disables until penetrated or the shield dissipates.","tooltip":"Shields an allied Champion for {{ e2 }} seconds. The shield absorbs {{ e1 }} (+{{ a1 }}) magic damage and prevents disables until it breaks.","leveltip":{"label":["Shield Health","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[23,21,19,17,15],"cooldownBurn":"23/21/19/17/15","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[70,140,210,280,350],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/140/210/280/350","5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"BlackShield.png","sprite":"spell7.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SoulShackles","name":"Soul Shackles","description":"Latches chains of energy onto nearby enemy champions, dealing initial damage to them and slowing their Movement Speed, and then echoing the pain a few seconds later and stunning them if they remain close to Morgana.","tooltip":"Dark chains latch onto nearby enemy Champions dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing them by {{ e4 }}% for {{ e3 }} seconds, granting True Sight. After {{ e3 }} seconds, they are dealt an additional {{ e1 }} (+{{ a1 }}) magic damage and are stunned for {{ e2 }} seconds.
Enemy Champions can break the chains by moving away from Morgana.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,225,300],[1.5,1.5,1.5],[3,3,3],[20,20,20],[575,575,575],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/225/300","1.5","3","20","575","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625],"rangeBurn":"625","image":{"full":"SoulShackles.png","sprite":"spell7.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Nami":{"id":267,"key":"Nami","name":"Nami","title":"the Tidecaller","spells":[{"id":"NamiQ","name":"Aqua Prison","description":"Sends a bubble to a target area, dealing damage and stunning all enemies on impact.","tooltip":"Sends a bubble to target area, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies, and stunning them for {{ e2 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[75,130,185,240,295],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/130/185/240/295","1.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[875,875,875,875,875],"rangeBurn":"875","image":{"full":"NamiQ.png","sprite":"spell7.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NamiW","name":"Ebb and Flow","description":"Unleashes a stream of water that bounces back and forth between allied and enemy champions, healing allies and damaging enemies.","tooltip":"Unleashes a stream of water that bounces back and forth between allied and enemy champions.
On Ally Hit: Heals {{ e3 }} (+{{ a2 }}) Health and will bounce to a nearby enemy champion.
On Enemy Hit: Deals {{ e1 }} (+{{ a1 }}) magic damage and bounces to a nearby allied champion.
Bounces to each target only once, and hits up to {{ e2 }} targets. The damage and healing value is modified by ({{ f1 }}%) each bounce. ","leveltip":{"label":["Heal","Damage","Mana Cost"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[70,85,100,115,130],"costBurn":"70/85/100/115/130","effect":[null,[70,110,150,190,230],[3,3,3,3,3],[65,95,125,155,185],[15,15,15,15,15],[0.075,0.075,0.075,0.075,0.075],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","3","65/95/125/155/185","15","0.08","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a2"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"NamiW.png","sprite":"spell7.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NamiE","name":"Tidecaller's Blessing","description":"Empowers an allied champion for a short duration. The ally's basic attacks deal bonus magic damage and slow the target.","tooltip":"Empowers an allied champion's next {{ e4 }} basic attacks, causing them to slow the target by {{ e2 }}% (+{{ a2 }}%) for {{ e3 }} second and deal {{ e1 }} (+{{ a1 }}) bonus magic damage. Lasts for {{ e5 }} seconds.","leveltip":{"label":["Damage","Slow","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,11,11,11,11],"cooldownBurn":"11","cost":[55,60,65,70,75],"costBurn":"55/60/65/70/75","effect":[null,[25,40,55,70,85],[15,20,25,30,35],[1,1,1,1,1],[3,3,3,3,3],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/40/55/70/85","15/20/25/30/35","1","3","6","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.05,"key":"a2"},{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"NamiE.png","sprite":"spell7.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NamiR","name":"Tidal Wave","description":"Summons a massive Tidal Wave that knocks up, slows, and damages enemies. Allies hit gain double the effect of Surging Tides.","tooltip":"Summons a Tidal Wave from Nami's position. The wave knocks up enemies and slows them by {{ e4 }}%, dealing {{ e1 }} (+{{ a1 }}) magic damage. The duration of the slow increases based on how far the Tidal Wave has traveled, with a minimum duration of {{ e3 }} seconds and a maximum of {{ e5 }} seconds.
Allies hit by the wave gain double the effect of Surging Tides.","leveltip":{"label":["Damage","Cooldown","Slow"],"effect":[" "," {{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[0.5,0.5,0.5],[2,2,2],[50,60,70],[4,4,4],[0.002,0.002,0.002],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","0.5","2","50/60/70","4","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[2550,2550,2550],"rangeBurn":"2550","image":{"full":"NamiR.png","sprite":"spell7.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Nasus":{"id":75,"key":"Nasus","name":"Nasus","title":"the Curator of the Sands","spells":[{"id":"NasusQ","name":"Siphoning Strike","description":"Nasus strikes his foe, dealing damage and increasing the power of his future Siphoning Strikes if he slays his target.","tooltip":"Nasus's next basic attack will deal {{ e1 }} (+{{ a2 }})(+{{ f1 }}) physical damage.
Siphoning Strike permanently gains {{ e2 }} damage if it kills an enemy. This bonus is doubled against Champions, large minions and large monsters.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7,6,5,4],"cooldownBurn":"8/7/6/5/4","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[30,50,70,90,110],[3,3,3,3,3],[25,25,25,25,25],[6,6,6,6,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","3","25","6","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a2"},{"link":"@stacks","coeff":3,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"NasusQ.png","sprite":"spell7.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NasusW","name":"Wither","description":"Nasus ages an enemy champion, decelerating their Movement and Attack Speeds over time.","tooltip":"Nasus ages target champion over {{ e3 }} seconds, slowing their Movement Speed by {{ e2 }}%, increasing to {{ e1 }}% over the duration. The target's Attack Speed is reduced by half the amount.","leveltip":{"label":["Max Slow","Cooldown"],"effect":[" {{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[47,59,71,83,95],[35,35,35,35,35],[5,5,5,5,5],[17.5,17.5,17.5,17.5,17.5],[1.5,3,4.5,6,7.5],[3,6,9,12,15],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"47/59/71/83/95","35","5","17.5","1.5/3/4.5/6/7.5","3/6/9/12/15","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"NasusW.png","sprite":"spell7.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NasusE","name":"Spirit Fire","description":"Nasus unleashes a spirit flame at a location, dealing damage and reducing the Armor of enemies who stand on it.","tooltip":"Nasus unleashes a spirit flame at target location, dealing {{ e4 }} (+{{ a2 }}) magic damage.
For the next {{ e3 }} seconds, enemies in the area have their Armor reduced by {{ e2 }} and are dealt an additional {{ e1 }} (+{{ a1 }}) magic damage each second.","leveltip":{"label":["Initial Damage","Damage Per Second","Armor Reduction","Mana Cost"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[70,85,100,115,130],"costBurn":"70/85/100/115/130","effect":[null,[11,19,27,35,43],[20,25,30,35,40],[5,5,5,5,5],[55,95,135,175,215],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"11/19/27/35/43","20/25/30/35/40","5","55/95/135/175/215","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a2"},{"link":"spelldamage","coeff":0.12,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"NasusE.png","sprite":"spell7.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NasusR","name":"Fury of the Sands","description":"Nasus unleashes a mighty sandstorm that batters nearby enemies. While the storm rages, he gains increased Health, Attack Range, damages nearby enemies and gains bonus Armor and Magic Resistance for the duration.","tooltip":"Nasus becomes empowered in the sandstorm for 15 seconds, increasing his maximum Health by {{ e1 }} and Armor and Magic Resistance by {{ e4 }}.
While the storm rages, he deals {{ e3 }} (+{{ a1 }})% of nearby enemies' maximum Health each second as magic damage ({{ e5 }} damage max per second) and gains an additional {{ e8 }} Armor and Magic Resistance.","leveltip":{"label":["Bonus Health","Max Health %","Initial Armor and Magic Resistance","Incremental Armor and Magic Resistance"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ e4 }} -> {{ e4NL }}","{{ e8 }} -> {{ e8NL }}"]},"maxrank":3,"cooldown":[120,120,120],"cooldownBurn":"120","cost":[100,100,100],"costBurn":"100","effect":[null,[300,450,600],[50,50,50],[3,4,5],[15,35,55],[240,240,240],[15,15,15],[0,0,0],[1,2,3],[0,0,0],[0,0,0]],"effectBurn":[null,"300/450/600","50","3/4/5","15/35/55","240","15","0","1/2/3","0","0"],"vars":[{"link":"spelldamage","coeff":0.01,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20,20,20],"rangeBurn":"20","image":{"full":"NasusR.png","sprite":"spell7.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Nautilus":{"id":111,"key":"Nautilus","name":"Nautilus","title":"the Titan of the Depths","spells":[{"id":"NautilusAnchorDrag","name":"Dredge Line","description":"Nautilus hurls his anchor forward. If it hits a champion, he drags both himself and the opponent close together. If it hits terrain, Nautilus instead pulls himself to the anchor and the cooldown of Dredge Line is reduced by half.","tooltip":"Nautilus hurls his anchor forward. If it hits an enemy unit, Nautilus drags himself and the target together dealing {{ e1 }} (+{{ a1 }}) magic damage and stunning them briefly.
If the anchor hits terrain, Nautilus will drag himself forward and the cooldown is reduced by {{ e3 }}% ({{ f1 }}).","leveltip":{"label":["Damage","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[60,105,150,195,240],[0,0,0,0,0],[50,50,50,50,50],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","0","50","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"},{"link":"@special.nautilusq","coeff":0.5,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"NautilusAnchorDrag.png","sprite":"spell7.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NautilusPiercingGaze","name":"Titan's Wrath","description":"Nautilus surrounds himself with dark energies, gaining a shield that blocks incoming damage. While the shield persists, his attacks apply a damage over time effect to enemies around his target.","tooltip":"Nautilus surrounds himself with dark energies for {{ e3 }} seconds, shielding him from the next {{ e1 }} (+{{ f1 }}) ({{ e2 }}% of his max Health) damage.
While the shield persists, Nautilus' basic attacks deal {{ e4 }} (+{{ a1 }}) bonus magic damage over 2 seconds to all enemies around his target.","leveltip":{"label":["Shield Amount","Bonus Magic Damage","Percent Max Health"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[18,18,18,18,18],"cooldownBurn":"18","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[65,70,75,80,85],[9,11,13,15,17],[10,10,10,10,10],[30,40,50,60,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/70/75/80/85","9/11/13/15/17","10","30/40/50/60/70","0","0","0","0","0","0"],"vars":[{"link":"bonushealth","coeff":0.1,"key":"f1"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"NautilusPiercingGaze.png","sprite":"spell7.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NautilusSplashZone","name":"Riptide","description":"Nautilus slams the ground, causing the earth to explode around him in a set of three explosions. Each explosion damages and slows enemies.","tooltip":"Nautilus slams the ground, causing the earth to explode around him. Each explosion deals {{ e1 }} (+{{ a1 }}) magic damage to enemies in the area and slows them by {{ e2 }}% for {{ e4 }} seconds. This slow diminishes over time.
A unit can be hit by more than one explosion, but they take {{ e3 }}% less damage from additional explosions.","leveltip":{"label":["Damage","Slow","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[55,85,115,145,175],[30,35,40,45,50],[50,50,50,50,50],[1.25,1.25,1.25,1.25,1.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"55/85/115/145/175","30/35/40/45/50","50","1.25","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"NautilusSplashZone.png","sprite":"spell7.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NautilusGrandLine","name":"Depth Charge","description":"Nautilus fires a shockwave into the earth that chases an opponent. This shockwave rips up the earth above it, knocking enemies into the air. When it reaches the opponent, the shockwave erupts, knocking his target into the air and stunning them.","tooltip":"Nautilus fires a shockwave that chases an enemy champion, dealing {{ e1 }} (+{{ a1 }}) magic damage to other enemies it passes through, knocking them into the air, and stunning them for {{ e5 }} seconds.
The shockwave explodes upon hitting its target dealing {{ e2 }} (+{{ a2 }}) magic damage, launching them into the air and stunning them for {{ e5 }} seconds. ","leveltip":{"label":["Pass Through Damage","Explosion Damage","Stun Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,110,80],"cooldownBurn":"140/110/80","cost":[100,100,100],"costBurn":"100","effect":[null,[125,175,225],[200,325,450],[0,0,0],[0,0,0],[1,1.5,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"125/175/225","200/325/450","0","0","1/1.5/2","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.8,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[825,825,825],"rangeBurn":"825","image":{"full":"NautilusGrandLine.png","sprite":"spell8.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Nidalee":{"id":76,"key":"Nidalee","name":"Nidalee","title":"the Bestial Huntress","spells":[{"id":"JavelinToss","name":"Javelin Toss / Takedown","description":"In human form, Nidalee throws a spiked javelin at her target that gains damage as it flies. As a cougar, her next attack will attempt to fatally wound her target, dealing more damage the less life they have.","tooltip":"18","leveltip":{"label":["Javelin Minimum Damage","Javelin Maximum Damage","Javelin Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[70,85,100,115,130],[210,255,300,345,390],[0,0,0,0,0],[0,0,0,0,0],[0.4,0.4,0.4,0.4,0.4],[1.2,1.2,1.2,1.2,1.2],[525,525,525,525,525],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/85/100/115/130","210/255/300/345/390","0","0","0.4","1.2","525","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1500,1500,1500,1500,1500],"rangeBurn":"1500","image":{"full":"JavelinToss.png","sprite":"spell8.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Bushwhack","name":"Bushwhack / Pounce","description":"In human form, Nidalee lays a trap for unwary opponents that, when sprung, damages and reveals its target. As a cougar, she jumps in a direction, dealing damage in an area where she lands.","tooltip":"18","leveltip":{"label":["Trap Damage","Trap Cooldown","Trap Mana Cost"],"effect":["{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[0,0,0,0,0],[0,0,0,0,0],[4,4,4,4,4],[13,12,11,10,9],[10,20,30,40,50],[120,120,120,120,120],[40,80,120,160,200],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","0","4","13/12/11/10/9","10/20/30/40/50","120","40/80/120/160/200","0","0","0"],"vars":[],"costType":" Mana","maxammo":"0","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"Bushwhack.png","sprite":"spell8.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PrimalSurge","name":"Primal Surge / Swipe","description":"In human form, Nidalee channels the spirit of the cougar to heal her allies and imbue them with Attack Speed for a short duration. As a cougar, she claws in a direction, dealing damage to enemies in front of her.","tooltip":"18","leveltip":{"label":["Primal Surge Heal","Primal Surge Attack Speed","Primal Surge Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[60,75,90,105,120],"costBurn":"60/75/90/105/120","effect":[null,[35,55,75,95,115],[70,110,150,190,230],[0,0,0,0,0],[20,30,40,50,60],[0,0,0,0,0],[0.05,0.05,0.05,0.05,0.05],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/55/75/95/115","70/110/150/190/230","0","20/30/40/50/60","0","0.05","2","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"PrimalSurge.png","sprite":"spell8.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AspectOfTheCougar","name":"Aspect Of The Cougar","description":"Nidalee transforms into a cougar, gaining new abilities.","tooltip":"18","leveltip":{"label":["Takedown Damage","Takedown Damage Amp","Pounce Damage","Swipe Damage","Enhanced Pounce Cooldown"],"effect":["{{ f1 }} -> {{ f6 }}","{{ f4 }}% -> {{ f5 }}%","{{ f7 }} -> {{ f8 }}","{{ f9 }} -> {{ f10 }}","{{ f2 }} -> {{ f3 }}"]},"maxrank":4,"cooldown":[3,3,3,3],"cooldownBurn":"3","cost":[0,0,0,0],"costBurn":"0","effect":[null,[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[6,6,6,6],[0,0,0,0],[10,10,10,10],[0,0,0,0],[0,0,0,0]],"effectBurn":[null,"0","0","0","0","0","6","0","10","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20],"rangeBurn":"20","image":{"full":"AspectOfTheCougar.png","sprite":"spell8.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"No Cost"}]},"Nocturne":{"id":56,"key":"Nocturne","name":"Nocturne","title":"the Eternal Nightmare","spells":[{"id":"NocturneDuskbringer","name":"Duskbringer","description":"Nocturne throws a shadow blade that deals damage, leaves a Dusk Trail, and causes champions to leave a Dusk Trail. While on the trail, Nocturne can move through units and has increased Movement Speed and Attack Damage.","tooltip":"Nocturne throws a shadow blade that deals {{ e2 }} (+{{ f1 }}) physical damage and leaves a Dusk Trail for {{ e3 }} seconds. Enemy champions hit also leave a Dusk Trail.
While on the trail, Nocturne can move through units and gains {{ e1 }}% Movement Speed and {{ e4 }} Attack Damage.","leveltip":{"label":["Damage","Movement Speed Bonus","Bonus Attack Damage","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}"," {{ e1 }}% -> {{ e1NL }}%","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[15,20,25,30,35],[60,105,150,195,240],[5,5,5,5,5],[15,25,35,45,55],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","60/105/150/195/240","5","15/25/35/45/55","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.75,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[1125,1125,1125,1125,1125],"rangeBurn":"1125","image":{"full":"NocturneDuskbringer.png","sprite":"spell8.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NocturneShroudofDarkness","name":"Shroud of Darkness","description":"Nocturne empowers his blades, passively gaining Attack Speed. Activating Shroud of Darkness allows Nocturne to fade into the shadows, creating a magical barrier which blocks a single enemy ability and doubles his passive Attack Speed if successful.","tooltip":"Passive: Nocturne gains {{ e1 }}% Attack Speed.
Active: Nocturne creates a magical barrier for 1.5 seconds, which blocks the next enemy ability.
If an ability is blocked by the shield, Nocturne's passive Attack Speed bonus doubles for 5 seconds.","leveltip":{"label":["Attack Speed Bonus","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[20,25,30,35,40],[0.2,0.05,0.05,0.05,0.05],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/25/30/35/40","0.2/0.05/0.05/0.05/0.05","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"NocturneShroudofDarkness.png","sprite":"spell8.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NocturneUnspeakableHorror","name":"Unspeakable Horror","description":"Nocturne plants a nightmare into his target's mind, dealing damage each second and terrifying the target if they do not get out of range by the end of the duration.","tooltip":"Passive: Nocturne gains massively increased Movement Speed toward terrified enemies.
Active: Nocturne plants a nightmare into his target's mind, dealing {{ e1 }} (+{{ a1 }}) magic damage over {{ e3 }} seconds. If Nocturne stays within range of the target for the full duration, the target becomes terrified for {{ e2 }} second(s).","leveltip":{"label":["Damage","Terrify Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[80,125,170,215,260],[1.25,1.5,1.75,2,2.25],[2,2,2,2,2],[465,465,465,465,465],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/125/170/215/260","1.25/1.5/1.75/2/2.25","2","465","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"NocturneUnspeakableHorror.png","sprite":"spell8.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"NocturneParanoia","name":"Paranoia","description":"Nocturne reduces the sight radius of all enemy champions and removes their ally vision in the process. He can then launch himself at a nearby enemy champion.","tooltip":"Nocturne reduces the sight radius of all enemy champions and removes their ally vision for 4 seconds.
While Paranoia is active, Nocturne can launch himself at an enemy champion, dealing {{ e3 }} (+{{ f1 }}) physical damage.","leveltip":{"label":["Damage","Range","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,125,100],"cooldownBurn":"150/125/100","cost":[100,100,100],"costBurn":"100","effect":[null,[250,250,250],[2500,3250,4000],[150,250,350],[3500,4250,5000],[1800,1800,1800],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250","2500/3250/4000","150/250/350","3500/4250/5000","1800","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.2,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[2500,3250,4000],"rangeBurn":"2500/3250/4000","image":{"full":"NocturneParanoia.png","sprite":"spell8.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Nunu":{"id":20,"key":"Nunu","name":"Nunu","title":"the Yeti Rider","spells":[{"id":"Consume","name":"Consume","description":"Nunu commands the yeti to take a bite out of a target minion or monster, dealing heavy damage to it and healing himself.","tooltip":"Nunu commands the yeti to take a bite out of a minion or monster, dealing {{ e1 }} true damage and healing himself for {{ e2 }} (+{{ a1 }}).
Passive - Feed The Yeti: For every Large or Epic Monster Consumed, Nunu gains increased Size, {{ e0 }}% Maximum Health, and {{ e9 }} out of combat Movement Speed for the next {{ f5 }} seconds (max {{ e6 }} stacks).
Recently Consumed monsters will not grant additional bonuses ({{ e5 }} second cooldown).","leveltip":{"label":["Damage","Health Restore","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[340,500,660,820,980],[50,100,150,200,250],[120,150,180,210,240],[0,0,0,0,0],[60,60,60,60,60],[5,5,5,5,5],[5,5,5,5,5],[50,50,50,50,50],[10,10,10,10,10],[0.02,0.02,0.02,0.02,0.02]],"effectBurn":[null,"340/500/660/820/980","50/100/150/200/250","120/150/180/210/240","0","60","5","5","50","10","0.02"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[125,125,125,125,125],"rangeBurn":"125","image":{"full":"Consume.png","sprite":"spell8.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"BloodBoil","name":"Blood Boil","description":"Nunu invigorates himself and an allied unit by heating their blood, increasing their Movement and Attack Speeds.","tooltip":"The heat of Nunu and a target ally's blood rises, increasing Movement Speed by {{ e2 }}% and Attack Speed by {{ e1 }}% for {{ e3 }} seconds.
If Nunu targets himself, Blood Boil will try to target the nearest Ally champion.","leveltip":{"label":["Attack Speed","Movement Speed"],"effect":["{{ e1 }}% -> {{ e1NL }}%"," {{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[25,30,35,40,45],[8,9,10,11,12],[12,12,12,12,12],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/30/35/40/45","8/9/10/11/12","12","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"BloodBoil.png","sprite":"spell8.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"IceBlast","name":"Ice Blast","description":"Nunu launches a ball of ice at an enemy unit, dealing damage and temporarily slowing their Movement and Attack Speeds.","tooltip":"Nunu launches a ball of ice at an enemy unit, dealing {{ e1 }} (+{{ a1 }}) magic damage and slowing their Movement Speed by {{ e2 }}% and Attack Speed by {{ e3 }}% for {{ e4 }} seconds.","leveltip":{"label":["Damage","Movement Speed Slow","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,5.5,5,4.5,4],"cooldownBurn":"6/5.5/5/4.5/4","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[80,120,160,200,240],[40,45,50,55,60],[25,25,25,25,25],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","40/45/50/55/60","25","2","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"IceBlast.png","sprite":"spell8.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"AbsoluteZero","name":"Absolute Zero","description":"Nunu begins to sap the area of heat, slowing all nearby enemies. When Absolute Zero ends, he deals massive damage to all enemies caught in the area.","tooltip":"Nunu channels for {{ e4 }} seconds, sapping the area of heat. Nearby enemies have their Movement Speed slowed by {{ e2 }}% and their Attack Speed slowed by {{ e3 }}%. The Movement Speed slow increases to {{ e6 }}% over the duration of the channel.
Enemies caught in the area when the channel ends take up to {{ e1 }} (+{{ a1 }}) magic damage, depending on how long Absolute Zero was channeled. (Minimum Damage: {{ f2 }})","leveltip":{"label":["Maximum Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,100,90],"cooldownBurn":"110/100/90","cost":[100,100,100],"costBurn":"100","effect":[null,[625,875,1125],[50,50,50],[25,25,25],[3,3,3],[3,3,3],[95,95,95],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"625/875/1125","50","25","3","3","95","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":2.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"AbsoluteZero.png","sprite":"spell8.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Olaf":{"id":2,"key":"Olaf","name":"Olaf","title":"the Berserker","spells":[{"id":"OlafAxeThrowCast","name":"Undertow","description":"Olaf throws an axe into the ground at a target location, dealing damage to enemies it passes through and slowing their Movement Speed. If Olaf picks up the axe, the ability's cooldown is reduced by 4.5 seconds.","tooltip":"Olaf throws an axe to target location, dealing {{ e1 }} (+{{ a1 }}) physical damage to units it passes through and slowing them by {{ e2 }}% for up to {{ e3 }} seconds. The further the Axe flies, the longer the slow lasts, but it is never less than {{ e4 }} seconds.
If Olaf picks up the axe, the ability's cooldown is reduced by 4.5 seconds.","leveltip":{"label":["Base Damage","Slow %"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[70,115,160,205,250],[29,33,37,41,45],[2.5,2.5,2.5,2.5,2.5],[1.5,1.5,1.5,1.5,1.5],[800,800,800,800,800],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","29/33/37/41/45","2.5","1.5","800","400","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"OlafAxeThrowCast.png","sprite":"spell8.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"OlafFrenziedStrikes","name":"Vicious Strikes","description":"Olaf's Attack Speed is increased, he gains Life Steal and has increased healing from all sources based on how much Health he is missing.","tooltip":"For 6 seconds, Olaf gains {{ e2 }}% Life Steal and his Attack Speed is increased by {{ e1 }}%.
During this time, Olaf also receives 1% increased healing from all sources for every {{ e3 }}% of Health he is missing.","leveltip":{"label":["Attack Speed","Life Steal"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[40,50,60,70,80],[14,16,18,20,22],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/50/60/70/80","14/16/18/20/22","2","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"OlafFrenziedStrikes.png","sprite":"spell8.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"OlafRecklessStrike","name":"Reckless Swing","description":"Olaf attacks with such force that it deals true damage to his target and himself, refunding the Health cost if he destroys the target.","tooltip":"Olaf ferociously swings his axes, dealing {{ e1 }} (+{{ a1 }}) true damage to his target. This ability's cost is equal to {{ e2 }}% of the total damage dealt, but the cost is refunded if it kills the target.
Basic attacks lower the cooldown of Reckless Swing by 1 second.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[70,115,160,205,250],[30,30,30,30,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","30","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.4,"key":"a1"}],"costType":"Health","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"OlafRecklessStrike.png","sprite":"spell8.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"Health"},{"id":"OlafRagnarok","name":"Ragnarok","description":"Olaf temporarily becomes immune to disables.","tooltip":"Passive: Olaf gains {{ e1 }} Armor and {{ e1 }} Magic Resist.
Active: Olaf removes all disables from himself and becomes immune to them for the next {{ e2 }} seconds. Olaf also receives a {{ e5 }}% Movement Speed bonus towards enemy champions for {{ e4 }} second. During this time, Olaf loses the passive portion of Ragnarok and gains {{ e3 }} Attack Damage.","leveltip":{"label":["Armor and Magic Resist","Attack Damage","Movement Speed Bonus","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[0,0,0],"costBurn":"0","effect":[null,[20,30,40],[6,6,6],[40,60,80],[1,1,1],[50,60,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"20/30/40","6","40/60/80","1","50/60/70","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[400,400,400],"rangeBurn":"400","image":{"full":"OlafRagnarok.png","sprite":"spell8.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Orianna":{"id":61,"key":"Orianna","name":"Orianna","title":"the Lady of Clockwork","spells":[{"id":"OrianaIzunaCommand","name":"Command: Attack","description":"Orianna commands her Ball to fire toward a target location, dealing magic damage to targets along the way (deals less damage to subsequent targets). Her Ball remains at the target location after.","tooltip":"Orianna commands her Ball to shoot toward a target location, dealing {{ e1 }} (+{{ a1 }}) magic damage to targets along the way. However, it deals {{ e2 }}% less damage for each unit it hits (Minimum {{ e3 }}%).
Her Ball remains behind at the target location afterwards.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,5.25,4.5,3.75,3],"cooldownBurn":"6/5.25/4.5/3.75/3","cost":[30,35,40,45,50],"costBurn":"30/35/40/45/50","effect":[null,[60,90,120,150,180],[10,10,10,10,10],[40,40,40,40,40],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/90/120/150/180","10","40","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[815,815,815,815,815],"rangeBurn":"815","image":{"full":"OrianaIzunaCommand.png","sprite":"spell8.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"OrianaDissonanceCommand","name":"Command: Dissonance","description":"Orianna commands the Ball to release a pulse of energy, dealing magic damage around it. This leaves a field behind that speeds up allies and slows enemies.","tooltip":"Orianna commands her Ball to release an electric pulse, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies.
The pulse leaves behind an energy field for {{ e4 }} seconds, lowering enemy Movement Speed by {{ e2 }}% and increasing ally Movement Speed by {{ e3 }}% for {{ e5 }} seconds. This effect diminishes over time.","leveltip":{"label":["Damage","Movement Speed Bonus","Slow Amount","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[70,115,160,205,250],[20,25,30,35,40],[20,25,30,35,40],[3,3,3,3,3],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","20/25/30/35/40","20/25/30/35/40","3","2","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[255,255,255,255,255],"rangeBurn":"255","image":{"full":"OrianaDissonanceCommand.png","sprite":"spell8.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"OrianaRedactCommand","name":"Command: Protect","description":"Orianna commands her Ball to attach to an allied champion, shielding them and dealing magic damage to any enemies it passes through on the way. Additionally, the Ball grants additional Armor and Magic Resist to the champion it is attached to.","tooltip":"Passive: The Ball adds {{ e2 }} Armor and Magic Resist to the allied champion it is attached to.
Active: Orianna commands her Ball to travel to and attach onto an allied champion, shielding them for {{ e5 }} seconds from the next {{ e1 }} (+{{ a1 }}) damage. Enemies the Ball passes through along the way are damaged for {{ e4 }}% of the shield value: {{ e3 }} (+{{ a2 }}).","leveltip":{"label":["Armor Bonus","Magic Resist Bonus","Damage Absorption"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e2 }} -> {{ e2NL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[80,120,160,200,240],[10,15,20,25,30],[60,90,120,150,180],[75,75,75,75,75],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","10/15/20/25/30","60/90/120/150/180","75","4","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1095,1095,1095,1095,1095],"rangeBurn":"1095","image":{"full":"OrianaRedactCommand.png","sprite":"spell8.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"OrianaDetonateCommand","name":"Command: Shockwave","description":"Orianna commands her Ball to unleash a shockwave, dealing magic damage and launching nearby enemies towards the Ball after a short delay.","tooltip":"Orianna commands her Ball to unleash a shockwave after a brief delay, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and flinging them into the air a set distance in the direction of the Ball.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,95,80],"cooldownBurn":"110/95/80","cost":[100,100,100],"costBurn":"100","effect":[null,[150,225,300],[40,50,60],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/225/300","40/50/60","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[410,410,410],"rangeBurn":"410","image":{"full":"OrianaDetonateCommand.png","sprite":"spell8.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Pantheon":{"id":80,"key":"Pantheon","name":"Pantheon","title":"the Artisan of War","spells":[{"id":"PantheonQ","name":"Spear Shot","description":"Pantheon hurls his spear at an opponent, dealing damage.","tooltip":"Pantheon hurls his spear at an opponent, dealing {{ e2 }} (+{{ f1 }}) physical damage. ","leveltip":{"label":["Base Damage"],"effect":["{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[100,115,130,145,160],[65,105,145,185,225],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100/115/130/145/160","65/105/145/185/225","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.4,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"PantheonQ.png","sprite":"spell8.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PantheonW","name":"Aegis of Zeonia","description":"Pantheon leaps at an enemy and bashes them with his shield, stunning them. After finishing the attack, Pantheon readies himself to block the next attack.","tooltip":"Pantheon leaps at target enemy, dealing {{ e1 }} (+{{ a1 }}) magic damage and stunning them for {{ e2 }} second. Pantheon also instantly refreshes his Aegis Protection.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[55,55,55,55,55],"costBurn":"55","effect":[null,[50,75,100,125,150],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","1","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"PantheonW.png","sprite":"spell8.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PantheonE","name":"Heartseeker Strike","description":"Pantheon focuses and unleashes 3 swift strikes to the area in front of him dealing damage to all enemies. Pantheon also becomes more aware of his enemy's vital spots, allowing him to always crit enemies below 15% Health.","tooltip":"Passive: Pantheon's basic attacks and Spear Shot gain 100% critical strike chance against targets below {{ e3 }}% Health.
Active: Pantheon focuses and delivers {{ e4 }} swift strikes in front of him for a total of {{ e1 }} (+{{ a1 }}) physical damage (deals {{ e2 }}% damage to minions and monsters).
Damage per Strike: {{ f1 }}","leveltip":{"label":["Base Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[80,130,180,230,280],[60,60,60,60,60],[15,15,15,15,15],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/130/180/230/280","60","15","3","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":3,"key":"a1"},{"link":"bonusattackdamage","coeff":0.6,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"PantheonE.png","sprite":"spell8.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PantheonRJump","name":"Grand Skyfall","description":"Pantheon composes himself then leaps into the air to a target, striking all enemy units in an area. Enemies closer to the impact point take more damage.","tooltip":"Pantheon gathers his strength and then leaps high into the air, crashing down at target area a few seconds later. Deals up to {{ e1 }} (+{{ a1 }}) magic damage to enemies at the center (down to {{ e6 }}% at the edge) and slows their Movement Speed by {{ e4 }}% for 1 second.
If Pantheon cancels this channel, Grand Skyfall is put on a {{ e5 }} second cooldown.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,135,120],"cooldownBurn":"150/135/120","cost":[100,100,100],"costBurn":"100","effect":[null,[400,700,1000],[0,0,0],[0,0,0],[35,35,35],[30,30,30],[50,50,50],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"400/700/1000","0","0","35","30","50","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[5500,5500,5500],"rangeBurn":"5500","image":{"full":"PantheonRJump.png","sprite":"spell8.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Poppy":{"id":78,"key":"Poppy","name":"Poppy","title":"Keeper of the Hammer","spells":[{"id":"PoppyQ","name":"Hammer Shock","description":"Poppy swings her hammer, dealing damage and creating a zone that will slow enemies and explode after a delay.","tooltip":"Poppy smashes the ground, dealing {{ e1 }} (+{{ a1 }}) plus {{ e5 }}% of the enemies' maximum Health as physical damage, and leaving an unstable area.
The area slows enemies inside it by {{ e3 }}% and erupts after {{ e4 }} second, dealing the initial damage again.","leveltip":{"label":["Damage","Slow","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[35,40,45,50,55],"costBurn":"35/40/45/50/55","effect":[null,[35,55,75,95,115],[0.5,0.5,0.5,0.5,0.5],[20,25,30,35,40],[1,1,1,1,1],[7,7,7,7,7],[40,60,80,100,120],[100,100,100,100,100],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/55/75/95/115","0.5","20/25/30/35/40","1","7","40/60/80/100/120","100","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[430,430,430,430,430],"rangeBurn":"430","image":{"full":"PoppyQ.png","sprite":"spell8.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PoppyW","name":"Steadfast Presence","description":"Poppy passively gains Armor and Magic Resist. This bonus increases when she is low on Health. Poppy can activate Steadfast Presence to stop enemy dashes around her and gain movement speed.","tooltip":"Passive: Poppy gains {{ f1 }} Armor and {{ f2 }} Magic Resist ({{ e3 }}% of Armor and Magic Resist). This bonus is doubled if Poppy is below 40% Health.
Active: For the next {{ e1 }} seconds, Poppy gains {{ e2 }}% Movement Speed. While Steadfast Presence is active, she stops enemy dashes in an area around her, dealing {{ e5 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Movement Speed","Cooldown","Damage"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ e5 }} -> {{ e5NL }}"]},"maxrank":5,"cooldown":[24,22,20,18,16],"cooldownBurn":"24/22/20/18/16","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[2.5,2.5,2.5,2.5,2.5],[32,34,36,38,40],[15,15,15,15,15],[0.5,0.5,0.5,0.5,0.5],[70,110,150,190,230],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2.5","32/34/36/38/40","15","0.5","70/110/150/190/230","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"PoppyW.png","sprite":"spell8.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PoppyE","name":"Heroic Charge","description":"Poppy dashes to the target and pushes it back. If the target is pushed into a wall, it is stunned.","tooltip":"Poppy tackles an enemy, dealing {{ e1 }} (+{{ a1 }}) physical damage and carrying them forward. If Poppy carries the target into terrain, the enemy takes {{ e2 }} (+{{ a1 }}) additional physical damage and is stunned for {{ e3 }} seconds.","leveltip":{"label":["Initial Damage","Wall Damage","Stun Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[50,70,90,110,130],[50,70,90,110,130],[1.6,1.7,1.8,1.9,2],[1800,1800,1800,1800,1800],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/70/90/110/130","50/70/90/110/130","1.6/1.7/1.8/1.9/2","1800","400","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"a1"},{"link":"bonusattackdamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"PoppyE.png","sprite":"spell8.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PoppyR","name":"Keeper's Verdict","description":"Poppy channels a hammer strike that knocks enemies very far away.","tooltip":"First Cast: Poppy channels for up to {{ e3 }} seconds, slowing herself by {{ e7 }}%.
Second Cast: Poppy smashes the ground, emanating a shockwave that deals {{ e1 }} (+{{ a1 }}) physical damage to enemies around the first champion hit and knocking them a large distance toward their Summoning Platform. The shockwave length and knockback distance increases with channel duration.
Enemies hit with an uncharged Keeper's Verdict will take half the damage and be knocked straight into the air for half the duration. Enemies are untargetable while they are being knocked away.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[200,300,400],[0.25,0.25,0.25],[4,4,4],[2400,2400,2400],[2,2,2],[1,1,1],[15,15,15],[30,30,30],[1,1,1],[0.5,0.5,0.5]],"effectBurn":[null,"200/300/400","0.25","4","2400","2","1","15","30","1","0.5"],"vars":[{"link":"bonusattackdamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"PoppyR.png","sprite":"spell8.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Quinn":{"id":133,"key":"Quinn","name":"Quinn","title":"Demacia's Wings","spells":[{"id":"QuinnQ","name":"Blinding Assault","description":"Quinn calls Valor to mark an enemy and hinder its vision before damaging all enemies in the immediate area.","tooltip":"Valor flies in a line, marking the first enemy he hits as Vulnerable and reducing its vision radius dramatically for {{ e3 }} seconds. He then deals {{ e1 }} (+{{ f2 }})(+{{ a1 }}) physical damage to all nearby enemies.
If the primary target is not a champion, it cannot attack for {{ e3 }} seconds.","leveltip":{"label":["Base Damage","Total Attack Damage Ratio","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,10.5,10,9.5,9],"cooldownBurn":"11/10.5/10/9.5/9","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[20,45,70,95,120],[-1000,-1000,-1000,-1000,-1000],[1.5,1.5,1.5,1.5,1.5],[0.8,0.9,1,1.1,1.2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/45/70/95/120","-1000","1.5","0.8/0.9/1/1.1/1.2","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1025,1025,1025,1025,1025],"rangeBurn":"1025","image":{"full":"QuinnQ.png","sprite":"spell8.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"QuinnW","name":"Heightened Senses","description":"Passively grants Quinn Attack Speed and Movement Speed after she attacks a Vulnerable target. Activate to have Valor reveal a large area nearby.","tooltip":"Passive: Attacking a Vulnerable target increases Quinn's Attack Speed {{ e2 }}% and Movement Speed by {{ e3 }}% for {{ e1 }} seconds.
Active: Valor reveals a large area nearby for {{ e5 }} seconds.","leveltip":{"label":["Attack Speed Bonus","Movement Speed Bonus","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[50,45,40,35,30],"cooldownBurn":"50/45/40/35/30","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[2,2,2,2,2],[20,35,50,65,80],[20,25,30,35,40],[25,45,65,85,105],[2,2,2,2,2],[20,30,40,50,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2","20/35/50/65/80","20/25/30/35/40","25/45/65/85/105","2","20/30/40/50/60","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[2100,2100,2100,2100,2100],"rangeBurn":"2100","image":{"full":"QuinnW.png","sprite":"spell8.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"QuinnE","name":"Vault","description":"Quinn dashes to an enemy, dealing physical damage and slowing the target's Movement Speed. Upon reaching the target, she leaps off the target, briefly interrupting it, and lands near her maximum Attack Range away from the target.","tooltip":"Quinn dashes to an enemy, dealing {{ e2 }} (+{{ a1 }}) physical damage while Valor marks it as Vulnerable.
Upon reaching the target, Quinn leaps off, briefly displacing and slowing it by {{ e1 }}% (diminishing over {{ e3 }} seconds).","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[50,50,50,50,50],[40,70,100,130,160],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50","40/70/100/130/160","1.5","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[675,675,675,675,675],"rangeBurn":"675","image":{"full":"QuinnE.png","sprite":"spell8.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"QuinnR","name":"Behind Enemy Lines","description":"Quinn and Valor team up to fly around at great speed.","tooltip":"Quinn calls down Valor to assist her. After a 2 second channel, they unite, gaining {{ e3 }}% Total Movement Speed and the ability to cast Skystrike by recasting this ability or taking offensive action. Skystrike damages nearby enemies.
Taking champion or turret damage puts Behind Enemy Lines on a 3 second cooldown.","leveltip":{"label":["Movement Speed Bonus","Mana Cost"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ e7 }} -> {{ e7NL }}"]},"maxrank":3,"cooldown":[0,0,0],"cooldownBurn":"0","cost":[100,50,0],"costBurn":"100/50/0","effect":[null,[15,20,25],[0,0,0],[70,100,130],[25000,25000,25000],[7,7,7],[8,8,8],[100,50,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"15/20/25","0","70/100/130","25000","7","8","100/50/0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[700,700,700],"rangeBurn":"700","image":{"full":"QuinnR.png","sprite":"spell8.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Rakan":{"id":497,"key":"Rakan","name":"Rakan","title":"The Charmer","spells":[{"id":"RakanQ","name":"Gleaming Quill","description":"Flings a magical feather that deals magic damage. Striking a champion or epic monster enables Rakan to heal his allies.","tooltip":"Flings a magical feather that deals {{ e1 }} (+{{ a1 }}) magic damage to the first enemy hit.
If the feather hits a champion or epic monster, Rakan restores {{ f1 }}(+{{ a2 }}) health to himself and nearby allies after {{ e4 }} seconds or when he touches an ally.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f3 }} -> {{ f2 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[70,115,160,205,250],[15,15,15,15,15],[7.5,7.5,7.5,7.5,7.5],[3,3,3,3,3],[12,10.5,9,7.5,6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","15","7.5","3","12/10.5/9/7.5/6","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.7,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"RakanQ.png","sprite":"spell8.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RakanW","name":"Grand Entrance","description":"Dashes to a location, knocking up nearby enemies on arrival.","tooltip":"Dashes to a location. Upon arrival Rakan spirals into the air, dealing {{ e1 }} (+{{ a1 }}) magic damage and knocking up enemies for {{ e3 }} second.","leveltip":{"label":["Damage","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,16.5,15,13.5,12],"cooldownBurn":"18/16.5/15/13.5/12","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[70,115,160,205,250],[1800,1800,1800,1800,1800],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","1800","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"RakanW.png","sprite":"spell8.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RakanE","name":"Battle Dance","description":"Flies to an allied champion granting them a shield. Can be re-cast for free for a short duration.","tooltip":"Flies to an allied champion, granting them a {{ e1 }} (+{{ a1 }}) health shield for {{ e3 }} seconds.
Can be re-cast at no cost once within {{ e2 }} seconds.
Battle Dance's cast range is increased when cast on Xayah.","leveltip":{"label":["Shield Health","Cooldown","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f2 }} -> {{ f6 }}","{{ e5 }} -> {{ e5NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[50,75,100,125,150],[5,5,5,5,5],[3,3,3,3,3],[20,18,16,14,12],[60,70,80,90,100],[600,600,600,600,600],[1000,1000,1000,1000,1000],[1150,1150,1150,1150,1150],[1250,1250,1250,1250,1250],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","5","3","20/18/16/14/12","60/70/80/90/100","600","1000","1150","1250","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"RakanE.png","sprite":"spell8.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RakanR","name":"The Quickness","description":"Gains movement speed, charming and dealing magic damage to enemies touched.","tooltip":"Gain {{ e5 }}% movement speed for {{ e2 }} seconds.
Touching enemies deals {{ e1 }} (+{{ a1 }}) magic damage and charms them for {{ e3 }} second(s) the first time they're hit. The first champion charmed grants Rakan {{ e6 }}% decaying movement speed.","leveltip":{"label":["Charm Duration","Damage","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[100,200,300],[4,4,4],[1,1.25,1.5],[0.25,0.25,0.25],[50,50,50],[150,150,150],[200,200,200],[120,110,100],[0,0,0],[0,0,0]],"effectBurn":[null,"100/200/300","4","1/1.25/1.5","0.25","50","150","200","120/110/100","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[200,200,200],"rangeBurn":"200","image":{"full":"RakanR.png","sprite":"spell8.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Rammus":{"id":33,"key":"Rammus","name":"Rammus","title":"the Armordillo","spells":[{"id":"PowerBall","name":"Powerball","description":"Rammus accelerates in a ball towards his enemies, dealing damage and slowing targets affected by the impact.","tooltip":"Rammus accelerates in a ball, gaining up to {{ f2 }}% Movement Speed over {{ e4 }} seconds. On enemy collision, he stops, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies, knocking them back, and slowing them by {{ e2 }}% for {{ e3 }} second.
Can be reactivated to end the effect early and put Powerball on cooldown. Powerball is a channeled spell and is subject to interruption by spells that prevent casting.","leveltip":{"label":["Damage ","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,13.5,11,8.5,6],"cooldownBurn":"16/13.5/11/8.5/6","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[100,135,170,205,240],[40,50,60,70,80],[1,1,1,1,1],[6,6,6,6,6],[125,125,125,125,125],[0.35,0.35,0.35,0.35,0.35],[25,25,25,25,25],[0.25,0.25,0.25,0.25,0.25],[50,50,50,50,50],[1000,1000,1000,1000,1000]],"effectBurn":[null,"100/135/170/205/240","40/50/60/70/80","1","6","125","0.35","25","0.25","50","1000"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"PowerBall.png","sprite":"spell8.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"DefensiveBallCurl","name":"Defensive Ball Curl","description":"Rammus goes into a defensive formation, vastly increasing his Armor and Magic Resistance, amplifying Spiked Shells' damage, and returning damage to enemies that basic attack him, but he is also slowed during this time.","tooltip":"Rammus enters a defensive formation for up to {{ e3 }} seconds, increasing Armor and Magic Resist by {{ e1 }} plus {{ e6 }}% ({{ f1 }}/{{ f2 }}) but becoming slowed by {{ e5 }}%.
During this time, Spiked Shell deals {{ e4 }}% damage and also deals its damage to enemies that basic attack Rammus.
Can be reactivated to end the effect early and put Defensive Ball Curl on cooldown.","leveltip":{"label":["Percent Armor Bonus","Percent Magic Resist Bonus"],"effect":["{{ e6 }}% -> {{ e6NL }}%","{{ e6 }}% -> {{ e6NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[20,20,20,20,20],[25,35,45,55,65],[6,6,6,6,6],[150,150,150,150,150],[60,60,60,60,60],[50,55,60,65,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20","25/35/45/55/65","6","150","60","50/55/60/65/70","0","0","0","0"],"vars":[{"link":"armor","coeff":0.1,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"DefensiveBallCurl.png","sprite":"spell8.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PuncturingTaunt","name":"Frenzying Taunt","description":"Rammus taunts an enemy champion or monster into a reckless assault against him. Additionally, he gains increased Attack Speed for a short time, but this bonus is extended by having any of his other spells active.","tooltip":"Taunt an enemy champion or monster for {{ e1 }} seconds and gain {{ e2 }}% Attack Speed for the same duration.
While any of Rammus' other spells are active, Frenzying Taunt's Attack Speed bonus is refreshed.","leveltip":{"label":["Duration","Attack Speed Bonus"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[1.25,1.5,1.75,2,2.25],[20,25,30,35,40],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.25/1.5/1.75/2/2.25","20/25/30/35/40","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"PuncturingTaunt.png","sprite":"spell8.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Tremors2","name":"Tremors","description":"Rammus creates waves of destruction pulsing through the ground, causing damage to nearby enemies and slowing them. Turrets take double damage from Tremors.","tooltip":"Shake the earth for {{ e2 }} seconds, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and slowing them by {{ e4 }}% for {{ e3 }} seconds, stacking up to {{ e6 }} times.
While Burrowed, Rek'Sai launches a burst of void-charged earth that deals Physical Damage and reveals enemies hit.","tooltip":"Un-Burrowed: Rek'Sai's next 3 basic attacks within 5 seconds deal {{ e1 }} (+{{ a1 }}) bonus Physical Damage to nearby enemies.
Burrowed: Rek'Sai launches a burst of void-charged earth that explodes on first enemy hit, dealing {{ e4 }} (+{{ a2 }})(+{{ a1 }}) Physical Damage and revealing non-stealthed enemies for {{ e6 }} seconds.","leveltip":{"label":["Queen's Wrath Damage","Prey Seeker Damage","Prey Seeker Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ e5 }} -> {{ e5NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[15,20,25,30,35],[0,0,0,0,0],[0,0,0,0,0],[60,90,120,150,180],[11,10,9,8,7],[2.5,2.5,2.5,2.5,2.5],[5,5,5,5,5],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","0","0","60/90/120/150/180","11/10/9/8/7","2.5","5","300","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.7,"key":"a2"},{"link":"bonusattackdamage","coeff":0.4,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"RekSaiQ.png","sprite":"spell9.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"RekSaiW","name":"Burrow / Un-burrow","description":"Rek'Sai burrows into the ground, gaining new abilities and increased Movement Speed. Her vision range is reduced and she cannot use basic attacks.
While Burrowed, Rek'Sai may cast Un-burrow to knock up and damage nearby enemies.","tooltip":"Un-Burrowed: Burrow into the ground.
Burrowed: Un-burrow, dealing {{ e2 }} (+{{ a1 }}) Physical Damage and knocking up the closest enemy for {{ e5 }} second. All other nearby enemies will be knocked back. An enemy who has been knocked up will be immune from further Un-burrow effects for {{ e6 }} seconds.
Burrowed Effects: New abilities, +{{ f1 }} Movement Speed, reduced vision range, disabled basic attacks, and gains Tremor Sense: Nearby enemies that move in Fog of War have their position revealed to Rek'Sai and her allies.","leveltip":{"label":["Un-burrow Damage"],"effect":["{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[1500,1500,1500,1500,1500],[50,65,80,95,110],[0,0,0,0,0],[0,0,0,0,0],[1,1,1,1,1],[10,10,10,10,10],[250,250,250,250,250],[175,175,175,175,175],[3,3,3,3,3],[0,0,0,0,0]],"effectBurn":[null,"1500","50/65/80/95/110","0","0","1","10","250","175","3","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[1650,1650,1650,1650,1650],"rangeBurn":"1650","image":{"full":"RekSaiW.png","sprite":"spell9.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"RekSaiE","name":"Furious Bite / Tunnel","description":"Rek'Sai bites her target, dealing double and True Damage if she has max Fury.
While Burrowed, Rek'Sai creates a re-usable, long lasting tunnel. Enemies can destroy it by standing on top of either entrance.","tooltip":"Un-Burrowed: Rek'Sai bites a target dealing {{ e1 }} (+{{ a1 }}) Physical Damage. At max Fury, the bite does 100% more and deals True Damage.
Maximum Damage: {{ f2 }}
Burrowed: Rek'Sai tunnels forward leaving two connected Tunnel Entrances. Clicking a Tunnel Entrance will make Rek'Sai dive to the other entrance.
Tunnel Entrances last for {{ e5 }} minutes and can be destroyed by enemies. Rek'Sai may have {{ e6 }} tunnels at one time. Tunnels have a {{ e8 }} second cooldown on use.","leveltip":{"label":["Furious Bite Damage","Tunnel Cast Cooldown","Tunnel Use Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f4 }} -> {{ f5 }}","{{ e8 }} -> {{ e8NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,60,70,80,90],[0,0,0,0,0],[12,12,12,12,12],[0,0,0,0,0],[10,10,10,10,10],[8,8,8,8,8],[0,0,0,0,0],[10,8,6,4,2],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/60/70/80/90","0","12","0","10","8","0","10/8/6/4/2","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.85,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[250,250,250,250,250],"rangeBurn":"250","image":{"full":"RekSaiE.png","sprite":"spell9.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"No Cost"},{"id":"RekSaiRWrapper","name":"Void Rush","description":"Rek'Sai dives underground and leaps towards her target, dealing massive damage.","tooltip":"Passive: Dealing damage to enemy Champions marks them for the next {{ e6 }} seconds.
Active: Rek'Sai lets out a harrowing scream before burrowing underground seeking out a marked target. Moments later she leaps from underground, dealing {{ e8 }} (+{{ a2 }}) physical damage plus {{ e9 }}% of their missing Health.","leveltip":{"label":["Damage","Cooldown","Missing Health Damage"],"effect":["{{ e8 }} -> {{ e8NL }}","{{ f7 }} -> {{ f8 }}","{{ e9 }}% -> {{ e9NL }}%"]},"maxrank":3,"cooldown":[0,0,0],"cooldownBurn":"0","cost":[0,0,0],"costBurn":"0","effect":[null,[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[5,5,5],[0,0,0],[100,250,400],[20,25,30],[0,0,0]],"effectBurn":[null,"0","0","0","0","0","5","0","100/250/400","20/25/30","0"],"vars":[{"link":"bonusattackdamage","coeff":1.6,"key":"a2"}],"costType":"No cost","maxammo":"-1","range":[1500,1500,1500],"rangeBurn":"1500","image":{"full":"RekSaiRWrapper.png","sprite":"spell9.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"No cost"}]},"Renekton":{"id":58,"key":"Renekton","name":"Renekton","title":"the Butcher of the Sands","spells":[{"id":"RenektonCleave","name":"Cull the Meek","description":"Renekton swings his blade, dealing moderate physical damage to all targets around him, and heals for a small portion of the damage dealt. If he has more than 50 Fury, his damage and heal are increased.","tooltip":"Renekton swings his blade, dealing {{ e1 }} (+{{ a1 }}) physical damage to nearby enemies and healing himself for {{ e2 }} (+{{ f1 }}) Health for each non-champion hit and {{ f2 }} (+{{ f3 }}) Health for each champion hit, up to {{ e4 }} Health.
He generates 2.5 Fury for each non-champion hit and 10 Fury for each champion hit, up to a maximum of 30 Fury.
50 Fury Bonus: Damage increased to {{ e6 }} (+{{ a2 }}). Heal increased to {{ e7 }} (+{{ f4 }}) per non-champion and {{ f5 }} (+{{ f6 }}) per champion, up to {{ e9 }}. No longer generates Fury.","leveltip":{"label":["Damage","Max Health Gain","Fury Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} / {{ e9 }} -> {{ e4NL }} / {{ e9NL }}","{{ e6 }} -> {{ e6NL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[60,90,120,150,180],[3,4.5,6,7.5,9],[0.04,0.04,0.04,0.04,0.04],[50,75,100,125,150],[300,300,300,300,300],[90,135,180,225,270],[9,13.5,18,22.5,27],[0.12,0.12,0.12,0.12,0.12],[150,225,300,375,450],[0,0,0,0,0]],"effectBurn":[null,"60/90/120/150/180","3/4.5/6/7.5/9","0.04","50/75/100/125/150","300","90/135/180/225/270","9/13.5/18/22.5/27","0.12","150/225/300/375/450","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"},{"link":"bonusattackdamage","coeff":0.8,"key":"f1"},{"link":"bonusattackdamage","coeff":1.2,"key":"f2"},{"link":"bonusattackdamage","coeff":1.2,"key":"a2"}],"costType":"No Cost or 50 Fury","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"RenektonCleave.png","sprite":"spell9.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"No Cost or 50 Fury"},{"id":"RenektonPreExecute","name":"Ruthless Predator","description":"Renekton slashes his target twice, dealing moderate physical damage and stuns them for 0.75 seconds. If Renekton has more than 50 Fury, he slashes his target three times, dealing high physical damage and stuns them for 1.5 seconds.","tooltip":"Renekton's next attack strikes twice, stunning his target for {{ e3 }} seconds and dealing {{ e1 }} (+{{ f1 }}) physical damage per hit ({{ e5 }} (+{{ f2 }}) total).
Each strike applies on-hit effects and generates Fury. Hitting a champion generates an additional {{ e7 }} Fury.
50 Fury Bonus: Renekton attacks three times, stunning his target for {{ e4 }} seconds and dealing a total of {{ e6 }} (+{{ f3 }}) damage. No longer generates Fury.","leveltip":{"label":["Bonus Damage","Cooldown"],"effect":["{{ e5 }} / {{ e6 }} -> {{ e5NL }} / {{ e6NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[5,15,25,35,45],[0.75,0.75,0.75,0.75,0.75],[0.75,0.75,0.75,0.75,0.75],[1.5,1.5,1.5,1.5,1.5],[10,30,50,70,90],[15,45,75,105,135],[10,10,10,10,10],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/15/25/35/45","0.75","0.75","1.5","10/30/50/70/90","15/45/75/105/135","10","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.5,"key":"f1"},{"link":"attackdamage","coeff":2.25,"key":"f2"}],"costType":"No Cost or 50 Fury","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"RenektonPreExecute.png","sprite":"spell9.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"No Cost or 50 Fury"},{"id":"RenektonSliceAndDice","name":"Slice and Dice","description":"Renekton dashes, dealing damage to units along the way. Empowered, Renekton deals bonus damage and reduces the Armor of units hit.","tooltip":"Slice: Renekton dashes, dealing {{ e1 }} (+{{ f1 }}) physical damage to enemies he passes through. Hitting an enemy grants the ability to use Dice for {{ e8 }} seconds.
Dice: Renekton dashes, dealing {{ e1 }} (+{{ f1 }}) physical damage to enemies he passes through.
He generates {{ e4 }} Fury for each non-champion hit and {{ e5 }} Fury for each champion hit, up to a maximum of {{ e0 }} Fury.
Dice - 50 Fury Bonus: Damage increased to {{ e3 }} (+{{ f2 }}). Enemies hit have {{ e2 }}% reduced Armor for {{ e9 }} seconds. No longer generates Fury.","leveltip":{"label":["Bonus Damage","Armor Reduction %","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,60,90,120,150],[15,20,25,30,35],[45,90,135,180,225],[2,2,2,2,2],[10,10,10,10,10],[0.9,0.9,0.9,0.9,0.9],[1.35,1.35,1.35,1.35,1.35],[4,4,4,4,4],[4,4,4,4,4],[30,30,30,30,30]],"effectBurn":[null,"30/60/90/120/150","15/20/25/30/35","45/90/135/180/225","2","10","0.9","1.35","4","4","30"],"vars":[{"link":"bonusattackdamage","coeff":0.9,"key":"f1"},{"link":"bonusattackdamage","coeff":0.9,"key":"f1"},{"link":"bonusattackdamage","coeff":1.35,"key":"f2"}],"costType":"No Cost or 50 Fury","maxammo":"-1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"RenektonSliceAndDice.png","sprite":"spell9.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"No Cost or 50 Fury"},{"id":"RenektonReignOfTheTyrant","name":"Dominus","description":"Renekton transforms into the Tyrant form, gaining bonus Health and dealing damage to enemies around him. While in this form, Renekton gains Fury periodically.","tooltip":"Renekton surrounds himself with dark energies for {{ e5 }} seconds, gaining {{ e1 }} Health and {{ e6 }} Fury. While active, he deals {{ e2 }} (+{{ a1 }}) magic damage to nearby enemies and gains {{ e4 }} Fury per second.","leveltip":{"label":["Bonus Health","Periodic Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":3,"cooldown":[120,120,120],"cooldownBurn":"120","cost":[0,0,0],"costBurn":"0","effect":[null,[250,500,750],[40,80,120],[7.5,7.5,7.5],[5,5,5],[15,15,15],[20,20,20],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250/500/750","40/80/120","7.5","5","15","20","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[20,20,20],"rangeBurn":"20","image":{"full":"RenektonReignOfTheTyrant.png","sprite":"spell9.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"No Cost"}]},"Rengar":{"id":107,"key":"Rengar","name":"Rengar","title":"the Pridestalker","spells":[{"id":"RengarQ","name":"Savagery","description":"Rengar slashes all enemies in an arc before piercing all enemies in a line. Casting this outside the max range moves Rengar a short distance in that direction.
Ferocity effect: deals increased damage.","tooltip":"Slash all enemies in an arc before piercing all enemies in a line for {{ e1 }} (+{{ f2 }}) physical damage per strike.
Ferocity effect: Each hit deals {{ f1 }}(+{{ a2 }}) damage.
If cast outside max range, Rengar lunges forward to extend the range of the piercing attack. If used during leap, Savagery is cast immediately following the leap.","leveltip":{"label":["Base Damage","Bonus Attack Damage Ratio"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e7 }} -> {{ e7NL }}"]},"maxrank":5,"cooldown":[0.25,0.25,0.25,0.25,0.25],"cooldownBurn":"0.25","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[25,45,65,85,105],[0.3,0.3,0.3,0.3,0.3],[350,350,350,350,350],[90,90,90,90,90],[150,150,150,150,150],[0.15,0.15,0.15,0.15,0.15],[0.2,0.3,0.4,0.5,0.6],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/45/65/85/105","0.3","350","90","150","0.15","0.2/0.3/0.4/0.5/0.6","0","0","0"],"vars":[{"link":"@dynamic.attackdamage","coeff":1,"key":"f1"},{"link":"bonusattackdamage","coeff":1.1,"key":"a2"}],"costType":"Generates 1 Ferocity","maxammo":"1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"RengarQ.png","sprite":"spell9.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"Generates 1 Ferocity"},{"id":"RengarW","name":"Battle Roar","description":"Rengar lets out a battle roar, damaging enemies and healing for some of the recent damage he has taken.
Ferocity effect: additionally breaks crowd control effects.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and heals Rengar for {{ e2 }}% of the damage he took in the last {{ e3 }} seconds.
Ferocity effect: Deals {{ f1 }}(+{{ a1 }}) magic damage and removes existing crowd control effects, in addition to its normal effect.
Damage healed from monster attacks is increased by {{ e5 }}%.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}"]},"maxrank":5,"cooldown":[0.25,0.25,0.25,0.25,0.25],"cooldownBurn":"0.25","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,80,110,140,170],[50,50,50,50,50],[1.5,1.5,1.5,1.5,1.5],[1.5,1.5,1.5,1.5,1.5],[50,50,50,50,50],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/80/110/140/170","50","1.5","1.5","50","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"},{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":"Generates 1 Ferocity","maxammo":"1","range":[450,450,450,450,450],"rangeBurn":"450","image":{"full":"RengarW.png","sprite":"spell9.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"Generates 1 Ferocity"},{"id":"RengarE","name":"Bola Strike","description":"Rengar throws a bola, slowing the first target hit for a short duration.
Ferocity effect: roots the target.","tooltip":"Throw a bola, dealing {{ e1 }} (+{{ a1 }}) physical damage and slowing the first enemy hit by {{ e2 }}% for {{ e3 }} seconds.
Ferocity effect: Deals {{ f1 }}(+{{ a1 }}) physical damage and roots the target for {{ e4 }} seconds.","leveltip":{"label":["Damage","Slow Amount"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[0.25,0.25,0.25,0.25,0.25],"cooldownBurn":"0.25","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,95,140,185,230],[30,45,60,75,90],[1.75,1.75,1.75,1.75,1.75],[1.75,1.75,1.75,1.75,1.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/95/140/185/230","30/45/60/75/90","1.75","1.75","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.7,"key":"a1"},{"link":"bonusattackdamage","coeff":0.7,"key":"a1"}],"costType":"Generates 1 Ferocity","maxammo":"1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"RengarE.png","sprite":"spell9.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"Generates 1 Ferocity"},{"id":"RengarR","name":"Thrill of the Hunt","description":"Rengar's predatory instincts take over, Camouflaging him and revealing the nearest enemy champion in a large radius around him. During Thrill of the Hunt, Rengar gains Movement Speed and he can leap to the tracked enemy for a guaranteed critical strike, even without being in brush.","tooltip":"Rengar gains {{ e1 }}% Movement Speed and True Sight of the nearest enemy champion (within {{ e3 }} range) for {{ e2 }} seconds.
After the first {{ e6 }} seconds, Rengar becomes Camouflaged and can leap to an enemy without being in brush. Leaping to the nearest champion results in a critical strike.
Attacking or casting most spells ends Thrill of the Hunt. Stealth - Camouflaged: This character is hidden from view. It is revealed by nearby enemy champions and turrets.","leveltip":{"label":["Duration","Detection Range","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,100,70],"cooldownBurn":"130/100/70","cost":[0,0,0],"costBurn":"0","effect":[null,[40,40,40],[12,16,20],[2000,3000,4000],[750,750,750],[725,725,725],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"40","12/16/20","2000/3000/4000","750","725","2","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[2000,3000,4000],"rangeBurn":"2000/3000/4000","image":{"full":"RengarR.png","sprite":"spell9.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Riven":{"id":92,"key":"Riven","name":"Riven","title":"the Exile","spells":[{"id":"RivenTriCleave","name":"Broken Wings","description":"Riven lashes out in a series of strikes. This ability can be reactivated three times in a short time frame with the third hit knocking back nearby enemies.","tooltip":"Riven strikes out in front of her in a short line. This ability may be re-cast {{ e4 }} additional times.
1st and 2nd Use: Slashes forward, dealing {{ e1 }} (+{{ f1 }}) physical damage to all units she comes in contact with. 3rd Use: Leaps forward and slams the ground dealing {{ e1 }} (+{{ f1 }}) physical damage and knocking nearby enemies up. This leap can cross unpathable terrain.
Riven will target the unit your cursor is hovering over, or if no targets are present, Riven will simply strike the direction she is currently facing.","leveltip":{"label":["Base Damage","Attack Damage Scaling"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }}% -> {{ e5NL }}%"]},"maxrank":5,"cooldown":[13,13,13,13,13],"cooldownBurn":"13","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,30,50,70,90],[30,55,80,105,130],[150,225,300,375,450],[2,2,2,2,2],[40,45,50,55,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/30/50/70/90","30/55/80/105/130","150/225/300/375/450","2","40/45/50/55/60","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.4,0.45,0.5,0.55,0.6],"key":"f1"},{"link":"attackdamage","coeff":[0.4,0.45,0.5,0.55,0.6],"key":"f1"}],"costType":"No Cost","maxammo":"-1","range":[275,275,275,275,275],"rangeBurn":"275","image":{"full":"RivenTriCleave.png","sprite":"spell9.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"RivenMartyr","name":"Ki Burst","description":"Riven emits a Ki Burst, damaging and stunning nearby enemies.","tooltip":"Riven's sword emits a burst of runic energy that shocks nearby enemies, dealing {{ e1 }} (+{{ f1 }}) physical damage and stunning them for {{ e5 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[11,10,9,8,7],"cooldownBurn":"11/10/9/8/7","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,80,110,140,170],[40,70,100,130,160],[3,3,3,3,3],[0.75,0.75,0.75,0.75,0.75],[0.75,0.75,0.75,0.75,0.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/80/110/140/170","40/70/100/130/160","3","0.75","0.75","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"f1"}],"costType":"No Cost","maxammo":"-1","range":[260,260,260,260,260],"rangeBurn":"260","image":{"full":"RivenMartyr.png","sprite":"spell9.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"RivenFeint","name":"Valor","description":"Riven steps forward a short distance and blocks incoming damage.","tooltip":"Riven does a quick dash in the direction of your cursor and becomes shielded, blocking up to {{ e2 }} (+{{ f1 }}) incoming damage for 1.5 seconds.","leveltip":{"label":["Damage Blocked","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[90,120,150,180,210],[90,120,150,180,210],[4,4,4,4,4],[800,800,800,800,800],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"90/120/150/180/210","90/120/150/180/210","4","800","1.5","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"f1"}],"costType":"No Cost","maxammo":"-1","range":[250,250,250,250,250],"rangeBurn":"250","image":{"full":"RivenFeint.png","sprite":"spell9.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"RivenFengShuiEngine","name":"Blade of the Exile","description":"Riven empowers her keepsake weapon with energy, and gains Attack Damage and Range. During this time, she also gains the ability to use Wind Slash, a powerful ranged attack, once. ","tooltip":"Riven's weapon surges with spiritual energy for {{ e4 }} seconds, granting her {{ e5 }}% extra Attack Damage (+{{ f3 }}), increased Range on her damaging spells and attacks, and the ability to use Wind Slash once.
Wind Slash: Riven fires a shockwave that deals from {{ e1 }} (+{{ f1 }}) to {{ e2 }} (+{{ f2 }}) physical damage to all enemies hit, increasing based on how much Health they are missing.","leveltip":{"label":["Shockwave Damage","Cooldown"],"effect":["{{ e1 }} / {{ e2 }} -> {{ e1NL }} / {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,95,60],"cooldownBurn":"130/95/60","cost":[0,0,0],"costBurn":"0","effect":[null,[100,150,200],[300,450,600],[20,20,20],[15,15,15],[20,20,20],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/150/200","300/450/600","20","15","20","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"f3"},{"link":"bonusattackdamage","coeff":0.6,"key":"f1"},{"link":"bonusattackdamage","coeff":1.8,"key":"f2"}],"costType":"No Cost","maxammo":"-1","range":[200,200,200],"rangeBurn":"200","image":{"full":"RivenFengShuiEngine.png","sprite":"spell9.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Rumble":{"id":68,"key":"Rumble","name":"Rumble","title":"the Mechanized Menace","spells":[{"id":"RumbleFlameThrower","name":"Flamespitter","description":"Rumble torches opponents in front of him, dealing magic damage in a cone for 3 seconds. While in Danger Zone this damage is increased. ","tooltip":"Rumble torches his opponents, dealing {{ e1 }} (+{{ a1 }}) magic damage in a cone over {{ e9 }} seconds.
Danger Zone Bonus: Deals {{ e5 }}% damage.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[75,135,195,255,315],[20,20,20,20,20],[0,0,0,0,0],[1,1,1,1,1],[150,150,150,150,150],[12,12,12,12,12],[0.25,0.25,0.25,0.25,0.25],[3,3,3,3,3],[3,3,3,3,3],[0,0,0,0,0]],"effectBurn":[null,"75/135/195/255/315","20","0","1","150","12","0.25","3","3","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Heat","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"RumbleFlameThrower.png","sprite":"spell9.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ e2 }} Heat"},{"id":"RumbleShield","name":"Scrap Shield","description":"Rumble pulls up a shield, protecting him from damage and granting him a quick burst of speed. While in Danger Zone, the shield strength and speed bonus is increased. ","tooltip":"Rumble tosses up a shield for {{ e5 }} seconds that absorbs {{ e1 }} (+{{ a1 }}) damage. Rumble also gains an additional {{ e2 }}% Movement Speed for {{ e6 }} second.
Danger Zone Bonus: 50% increase in shield health and Movement Speed.","leveltip":{"label":["Damage Absorption","Movement Speed Bonus"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[50,80,110,140,170],[10,15,20,25,30],[20,20,20,20,20],[0,0,0,0,0],[2,2,2,2,2],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/80/110/140/170","10/15/20/25/30","20","0","2","1","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Heat","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"RumbleShield.png","sprite":"spell9.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ e3 }} Heat"},{"id":"RumbleGrenade","name":"Electro Harpoon","description":"Rumble launches a taser, electrocuting his target with magic damage and slowing their Movement Speed. Rumble can carry 2 harpoons at a time. While in Danger Zone the damage and slow percentage is increased. ","tooltip":"Rumble shoots his opponent with up to 2 tasers, dealing {{ e1 }} (+{{ a1 }}) magic damage and applying a stacking slow of {{ e2 }}% for {{ e7 }} seconds.
Danger Zone Bonus: Damage and slow percentage increased by 50%.","leveltip":{"label":["Damage","Slow Amount"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[0.5,0.5,0.5,0.5,0.5],"cooldownBurn":"0.5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[45,70,95,120,145],[15,20,25,30,35],[10,10,10,10,10],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[2,2,2,2,2],[30,40,50,60,66],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"45/70/95/120/145","15/20/25/30/35","10","0","0","0","2","30/40/50/60/66","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Heat","maxammo":"2","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"RumbleGrenade.png","sprite":"spell9.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ e3 }} Heat"},{"id":"RumbleCarpetBomb","name":"The Equalizer","description":"Rumble fires off a group of rockets, creating a wall of flames that damages and slows enemies. ","tooltip":"Rumble launches a line of rockets that creates a burning trail for {{ e5 }} seconds. Enemies in the area have their Movement Speed slowed by {{ e3 }}% and take {{ e1 }} (+{{ a2 }}) magic damage each second.
You can control the placement of this attack by clicking and dragging your mouse in a line.","leveltip":{"label":["Damage Per Second","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,100,90],"cooldownBurn":"110/100/90","cost":[0,0,0],"costBurn":"0","effect":[null,[130,185,240],[0,0,0],[35,35,35],[0.5,0.5,0.5],[5,5,5],[6,6,6],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"130/185/240","0","35","0.5","5","6","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[1750,1750,1750],"rangeBurn":"1750","image":{"full":"RumbleCarpetBomb.png","sprite":"spell9.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Ryze":{"id":13,"key":"Ryze","name":"Ryze","title":"the Rune Mage","spells":[{"id":"RyzeQWrapper","name":"Overload","description":"Passively, Ryze's other damaging spells reset Overload and begin to charge a Rune that can be used to empower Overload.
On cast, Ryze throws a charge of pure energy in a line, dealing damage to the first enemy struck. If a Rune is fully charged, Ryze also gains a shield and Movement Speed.","tooltip":"Passive: Rune Prison and Spell Flux reset Overload's cooldown and charge a Rune for {{ e2 }} seconds, up to {{ e9 }} Runes.
Active: Unleash a runic blast, dealing {{ e1 }} (+{{ a1 }})(+{{ f1 }}) magic damage to the first enemy struck. Any active Runes are discharged.
If {{ e9 }} Runes are discharged, they Overload, shielding Ryze from {{ f3 }}(+{{ a2 }})(+{{ f2 }}) damage and increasing his Movement Speed by {{ e4 }}% for {{ e5 }} seconds. ","leveltip":{"label":["Base Damage","Movement Speed"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":6,"cooldown":[6,6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0,0],"costBurn":"0","effect":[null,[60,85,110,135,160,185],[4,4,4,4,4,4],[55,55,55,55,55,55],[25,28,31,34,37,40],[2,2,2,2,2,2],[2,2,2,2,2,2],[3,3,3,3,3,3],[3,3,3,3,3,3],[2,2,2,2,2,2],[40,40,40,40,40,40]],"effectBurn":[null,"60/85/110/135/160/185","4","55","25/28/31/34/37/40","2","2","3","3","2","40"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"RyzeQWrapper.png","sprite":"spell9.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ e0 }} Mana"},{"id":"RyzeW","name":"Rune Prison","description":"Ryze traps a target enemy unit in a cage of runes, damaging them and preventing them from moving.","tooltip":"Instantly root an enemy for {{ e1 }} second and deal {{ e2 }} (+{{ a1 }})(+{{ f1 }}) magic damage.","leveltip":{"label":["Base Damage","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":6,"cooldown":[13,12,11,10,9,9],"cooldownBurn":"13/12/11/10/9/9","cost":[50,60,70,80,90,100],"costBurn":"50/60/70/80/90/100","effect":[null,[0.75,0.75,0.75,0.75,0.75,0.75],[80,100,120,140,160,180],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]],"effectBurn":[null,"0.75","80/100/120/140/160/180","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[615,615,615,615,615,615],"rangeBurn":"615","image":{"full":"RyzeW.png","sprite":"spell9.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RyzeE","name":"Spell Flux","description":"Ryze releases an orb of pure magical power that damages an enemy and debuffs them. Ryze's spells have additional effects against the debuffed enemy.","tooltip":"Apply Flux to an enemy, dealing {{ e1 }} (+{{ a1 }})(+{{ f1 }}) magic damage. Spells consume Flux for bonus effects:
Overload: Deals {{ e2 }}% more damage and spreads to nearby enemies with Flux. Rune Prison: Root duration is increased to {{ e6 }} seconds. Spell Flux: Spreads Spell Flux to nearby enemies.
Spells that kill enemies affected by Flux spread Spell Flux to nearby enemies.","leveltip":{"label":["Base Damage","Overload Damage Increase","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":6,"cooldown":[3.25,3,2.75,2.5,2.25,2.25],"cooldownBurn":"3.25/3/2.75/2.5/2.25/2.25","cost":[40,55,70,85,100,115],"costBurn":"40/55/70/85/100/115","effect":[null,[50,75,100,125,150,175],[40,50,60,70,80,90],[167,167,167,167,167,167],[0.1,0.1,0.1,0.1,0.1,0.1],[1.5,1.5,1.5,1.5,1.5,1.5],[2,2,2,2,2,2],[4,4,4,4,4,4],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150/175","40/50/60/70/80/90","167","0.1","1.5","2","4","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[615,615,615,615,615,615],"rangeBurn":"615","image":{"full":"RyzeE.png","sprite":"spell9.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"RyzeR","name":"Realm Warp","description":"Ryze creates a portal to a nearby location. After a few seconds, allies standing near the portal are teleported to the target location.","tooltip":"Ryze opens a portal to a location up to {{ e7 }} range away. After {{ e4 }} seconds, all allies near the portal are teleported to that location.
If Ryze becomes unable to cast or move, Realm Warp is cancelled.","leveltip":{"label":["Range"],"effect":["{{ e7 }} -> {{ e7NL }}"]},"maxrank":2,"cooldown":[120,120],"cooldownBurn":"120","cost":[100,100],"costBurn":"100","effect":[null,[2.1,2.1],[0.65,0.65],[0.75,0.75],[2,2],[150,250],[6,6],[1750,3000],[0,0],[0,0],[0,0]],"effectBurn":[null,"2.1","0.65","0.75","2","150/250","6","1750/3000","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1750,3000],"rangeBurn":"1750/3000","image":{"full":"RyzeR.png","sprite":"spell9.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Sejuani":{"id":113,"key":"Sejuani","name":"Sejuani","title":"Fury of the North","spells":[{"id":"SejuaniQ","name":"Arctic Assault","description":"Sejuani charges forward, knocking enemies into the air. The charge stops after hitting an enemy champion.","tooltip":"Sejuani charges, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies and knocking them up. The charge ends after hitting an enemy champion.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12.5,12,11.5,11],"cooldownBurn":"13/12.5/12/11.5/11","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[60,90,120,150,180],[625,625,625,625,625],[1000,1000,1000,1000,1000],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/90/120/150/180","625","1000","0.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"SejuaniQ.png","sprite":"spell9.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SejuaniW","name":"Winter's Wrath","description":"Sejuani swings her mace twice, dealing damage and applying Frost stacks.","tooltip":"Sejuani swings her flail, dealing {{ e1 }} (+{{ f1 }}) physical damage and applying Frost to enemies hit and knocking minions and monsters back.
She then lashes out with her flail, dealing {{ e3 }} (+{{ f2 }}) physical damage, applying Frost and slowing enemies hit briefly.","leveltip":{"label":["First Hit Damage","Second Hit Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[20,25,30,35,40],[0.75,0.75,0.75,0.75,0.75],[30,65,100,135,170],[0,0,0,0,0],[75,75,75,75,75],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/25/30/35/40","0.75","30/65/100/135/170","0","75","0.25","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"SejuaniW.png","sprite":"spell9.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SejuaniE","name":"Permafrost","description":"Sejuani freezes and stuns an enemy champion that has maximum Frost stacks.","tooltip":"Passive: Nearby melee allied champions' basic attacks apply Frost to enemy champions and large monsters.
Active: Target enemy with 4 stacks of Frost takes {{ e3 }} (+{{ a1 }}) magic damage and is stunned for {{ e1 }} second(s).
16","leveltip":{"label":["Damage","Stun Duration"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[1.5,1.5,1.5,1.5,1.5],"cooldownBurn":"1.5","cost":[20,20,20,20,20],"costBurn":"20","effect":[null,[1,1.25,1.5,1.75,2],[0,0,0,0,0],[40,60,80,100,120],[4,4,4,4,4],[5,5,5,5,5],[1100,1100,1100,1100,1100],[0,0,0,0,0],[0,0,0,0,0],[250,250,250,250,250],[0,0,0,0,0]],"effectBurn":[null,"1/1.25/1.5/1.75/2","0","40/60/80/100/120","4","5","1100","0","0","250","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"SejuaniE.png","sprite":"spell9.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SejuaniR","name":"Glacial Prison","description":"Sejuani throws her bola that freezes and stuns the first champion hit and creates an ice storm that slows other enemies.","tooltip":"Sejuani throws her True Ice bola that deals {{ e1 }} (+{{ a1 }}) magic damage to the first enemy champion hit and stuns them for {{ e2 }} second.
The bola becomes more powerful as it travels, dealing {{ e7 }} (+{{ a2 }}) magic damage, stunning for {{ e6 }} seconds and creating a storm that slows other enemies by {{ e8 }}%. After {{ e3 }} seconds, the storm deals {{ e7 }} (+{{ a2 }}) magic damage and slows by {{ e4 }}% for {{ e5 }} seconds.","leveltip":{"label":["Minimum Damage","Maximum Damage","Cooldown"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[100,125,150],[1,1,1],[2,2,2],[80,80,80],[3,3,3],[2,2,2],[150,250,350],[30,30,30],[0,0,0],[0,0,0]],"effectBurn":[null,"100/125/150","1","2","80","3","2","150/250/350","30","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.8,"key":"a2"},{"link":"spelldamage","coeff":0.8,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1300,1300,1300],"rangeBurn":"1300","image":{"full":"SejuaniR.png","sprite":"spell9.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Shaco":{"id":35,"key":"Shaco","name":"Shaco","title":"the Demon Jester","spells":[{"id":"Deceive","name":"Deceive","description":"Shaco becomes Invisible and teleports to target location.","tooltip":"Shaco teleports nearby and becomes Invisible for {{ e3 }} seconds. Shaco remains Invisible even if he uses Jack in the Box or Hallucinate.
His next basic attack during or shortly after Invisibility will reduce Deceive's cooldown by {{ f3 }} seconds.
16","leveltip":{"label":["Stealth Duration","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15.5,15,14.5,14],"cooldownBurn":"16/15.5/15/14.5/14","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[0,0,0,0,0],[200,200,200,200,200],[1.5,2.25,3,3.75,4.5],[6,6,6,6,6],[400,400,400,400,400],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","200","1.5/2.25/3/3.75/4.5","6","400","2.5","0","2.5","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"Deceive.png","sprite":"spell9.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"JackInTheBox","name":"Jack In The Box","description":"Shaco creates a hidden animated Jack-in-the-Box. When triggered, it will fear and attack nearby enemies.","tooltip":"Shaco creates a Jack in the Box that hides from view after {{ e5 }} seconds. It pops out when an enemy comes near or when uncovered by a ward or trinket, making nearby enemies flee very slowly for {{ e3 }} seconds.
Its attacks deal {{ e1 }} (+{{ a1 }}) magic damage. It lasts for {{ e4 }} (+{{ a2 }}) seconds while hidden or 5 seconds while firing. ","leveltip":{"label":["Damage","Fear Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[35,50,65,80,95],[200,300,400,500,600],[0.5,0.75,1,1.25,1.5],[60,60,60,60,60],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/50/65/80/95","200/300/400/500/600","0.5/0.75/1/1.25/1.5","60","2","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.05,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"JackInTheBox.png","sprite":"spell9.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TwoShivPoison","name":"Two-Shiv Poison","description":"Shaco's Shivs passively poison targets on hit, slowing their movement speed. He can throw his Shivs to deal damage and poison the target. The thrown Shiv deals bonus damage based on the target's missing Health.","tooltip":"Passive: While Two-Shiv Poison is ready to cast, Shaco's basic attacks apply Two-Shiv Poison for {{ e4 }} seconds. It reduces Movement Speed by {{ e2 }}%.
Active: Shaco throws a shiv that applies Two-Shiv Poison for {{ e5 }} seconds and deals magic damage equal to {{ e1 }} (+{{ f1 }})(+{{ a1 }}) + {{ f2 }}% of the target's missing Health.","leveltip":{"label":["Base Damage","Movement Speed Slow","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[5,35,65,95,125],[20,22.5,25,27.5,30],[20,22.5,25,27.5,30],[2,2,2,2,2],[3,3,3,3,3],[30,35,40,45,50],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/35/65/95/125","20/22.5/25/27.5/30","20/22.5/25/27.5/30","2","3","30/35/40/45/50","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"f1"},{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"TwoShivPoison.png","sprite":"spell9.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"HallucinateFull","name":"Hallucinate","description":"Shaco creates an illusion of himself near him, which can attack nearby enemies (Deals reduced damage to turrets). Upon death, it explodes, spawning three mini Jack in the Boxes and dealing damage to nearby enemies. ","tooltip":"Shaco vanishes briefly and reappears with a clone. The clone lasts up to 18 seconds and detonates when it dies, dealing {{ e1 }} (+{{ a1 }}) magic damage to nearby enemies and spawning three mini Jack in the Boxes.
Mini boxes deal {{ e6 }} (+{{ a2 }}) damage, make enemies flee for {{ e7 }} second(s), and trigger together.
Clone deals {{ e8 }}% of Shaco's damage and receives {{ e2 }}% increased damage.
The clone can be controlled by holding the alt key and using the right mouse button or by reactivating this ability.","leveltip":{"label":["On Death Damage","Mini Box Damage","Mini Box Flee Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e6 }} -> {{ e6NL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[200,300,400],[50,50,50],[15,15,15],[2,2,2],[6,6,6],[25,50,75],[0.75,1,1.25],[75,75,75],[0,0,0],[0,0,0]],"effectBurn":[null,"200/300/400","50","15","2","6","25/50/75","0.75/1/1.25","75","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"},{"link":"spelldamage","coeff":0.15,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"HallucinateFull.png","sprite":"spell9.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Shen":{"id":98,"key":"Shen","name":"Shen","title":"the Eye of Twilight","spells":[{"id":"ShenQ","name":"Twilight Assault","description":"Shen recalls his spirit blade to attack with it, dealing damage based on the target's max health. The attacks are greatly empowered if it collides with an enemy champion, and all collided enemies are slowed while running away from Shen.","tooltip":"Shen recalls his spirit blade and draws it. Enemies it collides with are slowed by {{ e4 }}% when moving away from Shen for the next {{ e5 }} seconds.
Shen's next {{ e3 }} attacks deal {{ f1 }} plus {{ e2 }} (+{{ charabilitypower*.01 }})% of their target's max health as bonus magic damage. If the spirit blade collided with an enemy champion, those attacks deal {{ f2 }} plus {{ e6 }} (+{{ charabilitypower2*.01 }})% instead and have +{{ e9 }}% Attack Speed.
Each attack deals {{ e1 }}% increased damage to monsters (capped at {{ e7 }}).","leveltip":{"label":["Base Percent Damage","Enhanced Percent Damage","Energy Cost","Monster Damage Cap","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e6 }}% -> {{ e6NL }}%","{{ cost }} -> {{ costNL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[8,7.25,6.5,5.75,5],"cooldownBurn":"8/7.25/6.5/5.75/5","cost":[140,130,120,110,100],"costBurn":"140/130/120/110/100","effect":[null,[100,100,100,100,100],[2,2.5,3,3.5,4],[3,3,3,3,3],[35,35,35,35,35],[2,2,2,2,2],[4,4.5,5,5.5,6],[75,100,125,150,175],[8,8,8,8,8],[50,50,50,50,50],[75,75,75,75,75]],"effectBurn":[null,"100","2/2.5/3/3.5/4","3","35","2","4/4.5/5/5.5/6","75/100/125/150/175","8","50","75"],"vars":[],"costType":" Energy","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"ShenQ.png","sprite":"spell9.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ShenW","name":"Spirit's Refuge","description":"Attacks that would hit Shen or his allies near his spirit blade are blocked.","tooltip":"Shen's spirit blade creates a defensive zone for {{ e1 }} seconds. Basic attacks that would hit Shen or an allied champion in the zone are blocked.
If there are no champions to protect in the zone when it starts, the spirit blade will not activate until one enters or {{ e2 }} seconds pass.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,16.5,15,13.5,11],"cooldownBurn":"18/16.5/15/13.5/11","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[1.75,1.75,1.75,1.75,1.75],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.75","2","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Energy","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"ShenW.png","sprite":"spell9.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ShenE","name":"Shadow Dash","description":"Shen dashes in a direction, taunting enemies in his path.","tooltip":"Passive: Dealing damage with Shadow Dash or Twilight Assault recovers {{ f1 }} Energy.
Active: Shen dashes in a direction, dealing {{ e2 }} [+{{ f2 }}] physical damage to enemy champions and neutral monsters in his path and taunting them for {{ e1 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[150,150,150,150,150],"costBurn":"150","effect":[null,[1.5,1.5,1.5,1.5,1.5],[50,75,100,125,150],[25,25,25,25,25],[300,300,300,300,300],[125,125,125,125,125],[150,150,150,150,150],[800,800,800,800,800],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.5","50/75/100/125/150","25","300","125","150","800","0","0","0"],"vars":[],"costType":" Energy","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"ShenE.png","sprite":"spell9.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ShenR","name":"Stand United","description":"Shen shields target allied champion from incoming damage, and soon after teleports to their location.","tooltip":"Shen grants a shield to a target allied champion that lasts {{ e2 }} seconds and absorbs up to {{ e1 }} (+{{ a1 }}) to {{ e8 }} (+{{ f2 }}) damage based on their missing health. After channeling for {{ f1 }} seconds, Shen and his spirit blade teleport to the ally's location.","leveltip":{"label":["Minimum Shield Health","Maximum Shield Health","Cooldown "],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e8 }} -> {{ e8NL }} "," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[200,180,160],"cooldownBurn":"200/180/160","cost":[0,0,0],"costBurn":"0","effect":[null,[175,350,525],[5,5,5],[175,175,175],[2000,2000,2000],[600,600,600],[0.4,0.4,0.4],[1.6,1.6,1.6],[280,560,840],[0,0,0],[0,0,0]],"effectBurn":[null,"175/350/525","5","175","2000","600","0.4","1.6","280/560/840","0","0"],"vars":[{"link":"spelldamage","coeff":1.35,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[35000,35000,35000],"rangeBurn":"35000","image":{"full":"ShenR.png","sprite":"spell9.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Shyvana":{"id":102,"key":"Shyvana","name":"Shyvana","title":"the Half-Dragon","spells":[{"id":"ShyvanaDoubleAttack","name":"Twin Bite","description":"Shyvana strikes twice on her next attack. Basic attacks reduce the cooldown of Twin Bite by 0.5 seconds.
Dragon Form: Twin Bite cleaves all units in front Shyvana. ","tooltip":"Shyvana strikes twice on her next attack, dealing {{ f2 }} and {{ f1 }} physical damage on the first and second hits respectively.
While Twin Bite is on cooldown, basic attacks reduce the remaining cooldown duration by {{ e3 }} seconds.
Dragon Form: Twin Bite cleaves all units in front Shyvana.
Twin Bite's second hit damage is equal to {{ e1 }}% of Shyvana's attack damage.","leveltip":{"label":["Bonus Damage","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} ->{{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[40,55,70,85,100],[250,250,250,250,250],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/55/70/85/100","250","0.5","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.8,0.85,0.9,0.95,1],"key":"f1"}],"costType":"No Cost","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"ShyvanaDoubleAttack.png","sprite":"spell9.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"ShyvanaImmolationAura","name":"Burnout","description":"Shyvana surrounds herself in fire, dealing magic damage per second to nearby enemies and moving faster for 3 seconds, part of this damage is applied again when Shyvana basic attacks an enemy with Burnout active. The Movement Speed reduces over the duration of the spell. Basic attacks extend the duration of Burnout.
Dragon Form: Burnout grows in size.","tooltip":"Shyvana deals {{ e1 }} (+{{ a1 }})(+{{ a2 }}) magic damage per second to nearby enemies and gains a bonus {{ e2 }}% movement speed that decays over {{ e7 }} seconds.
While Burnout is active, basic attacks deal {{ effect1amount*0.25 }} (+{{ charbonusphysical*0.25 }})(+{{ charabilitypower2*.25 }}) magic damage to nearby enemies and extend its duration by {{ e8 }} second.
Dragon Form: Burnout grows in size.
Burnout has a maximum duration of {{ e9 }} seconds.","leveltip":{"label":["Damage (aura)","Damage (on hit)","Movement Speed Bonus"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ effect1amount*0.25 }} -> {{ effect1amountnl*0.25 }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,32,45,57,70],[30,35,40,45,50],[0.85,0.85,0.85,0.85,0.85],[0,0,0,0,0],[25,25,25,25,25],[325,325,325,325,325],[3,3,3,3,3],[1,1,1,1,1],[7,7,7,7,7],[350,365,380,380,380]],"effectBurn":[null,"20/32/45/57/70","30/35/40/45/50","0.85","0","25","325","3","1","7","350/365/380/380/380"],"vars":[{"link":"bonusattackdamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.1,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"ShyvanaImmolationAura.png","sprite":"spell9.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"ShyvanaFireball","name":"Flame Breath","description":"Shyvana unleashes a fireball that deals damage to all enemies it encounters and leaves cinders on the target, marking them for 5 seconds. Shyvana's basic attacks on marked targets deal a percentage of their maximum Health as damage on-hit.
Dragon Form: Flame Breath explodes on impact or at target location, dealing bonus damage and scorching the earth for a short duration.","tooltip":"Shyvana unleashes a fireball that stops after hitting a champion. All enemies hit take {{ e1 }} (+{{ a1 }}) magic damage and are marked for {{ e2 }} seconds.
Shyvana's basic attacks against marked targets deal {{ e4 }}% of their maximum health as magic damage on hit.
Dragon Form: Flame Breath explodes on impact or at target location, dealing {{ f1 }}(+{{ a1 }}) bonus magic damage and scorching the earth for 4 seconds. Enemies on scorched earth take {{ f3 }}(+{{ f2 }}) magic damage per second.
Flame Breath's on-hit damage against monsters is capped at {{ e3 }} damage per hit.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[60,100,140,180,220],[5,5,5,5,5],[100,100,100,100,100],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[60,100,140,180,220],[4.5,4.5,4.5,4.5,4.5],[220,240,260,260,260],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","5","100","2.5","0","60/100/140/180/220","4.5","220/240/260/260/260","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"ShyvanaFireball.png","sprite":"spell9.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"No Cost"},{"id":"ShyvanaTransformCast","name":"Dragon's Descent","description":"Shyvana transforms into a dragon and takes flight to a target location. Enemies along her path take damage and are knocked toward her target location.
Shyvana passively gains Fury per second and gains 2 Fury on basic attack.","tooltip":"Active: Shyvana transforms into a dragon, gaining {{ e0 }} Health and flying to target location. Enemies along her path take {{ e1 }} (+{{ a1 }}) magic damage and are knocked toward her target location.
Passive: Shyvana generates {{ e3 }} Fury every second. Basic Attacks generate {{ e2 }} Fury.","leveltip":{"label":["Passive Fury Gain","Dragon Size","Bonus Health","Flight Damage"],"effect":["{{ e3 }} -> {{ e3NL }}","Big -> Bigger","{{ e0 }} -> {{ e0NL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[0,0,0],"cooldownBurn":"0","cost":[0,0,0],"costBurn":"0","effect":[null,[150,250,350],[2,2,2],[1,1.5,2],[5,5,5],[1100,1100,1100],[275,275,275],[100,100,100],[200,230,260],[0,0.085,0.16],[150,250,350]],"effectBurn":[null,"150/250/350","2","1/1.5/2","5","1100","275","100","200/230/260","0/0.085/0.16","150/250/350"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Fury a Second","maxammo":"-1","range":[850,850,850],"rangeBurn":"850","image":{"full":"ShyvanaTransformCast.png","sprite":"spell10.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ e4 }} Fury a Second"}]},"Singed":{"id":27,"key":"Singed","name":"Singed","title":"the Mad Chemist","spells":[{"id":"PoisonTrail","name":"Poison Trail","description":"Leaves a trail of poison behind Singed, dealing damage to enemies caught in the path.","tooltip":"Toggle: Singed lays a poisonous trail that deals {{ e1 }} (+{{ charabilitypower*4 }}) magic damage per second.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[13,13,13,13,13],"costBurn":"13","effect":[null,[22,34,46,58,70],[1,1,1,1,1],[3.25,3.25,3.25,3.25,3.25],[2.1,2.1,2.1,2.1,2.1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"22/34/46/58/70","1","3.25","2.1","0","0","0","0","0","0"],"vars":[],"costType":" Mana per Second","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"PoisonTrail.png","sprite":"spell10.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana per Second"},{"id":"MegaAdhesive","name":"Mega Adhesive","description":"Throws a vial of mega adhesive on the ground, slowing enemies who walk on it.","tooltip":"Singed leaves a sticky area on the ground for {{ e2 }} seconds, slowing enemies in the area by {{ e1 }}%.
If Singed flings a target into the zone, it will root them.","leveltip":{"label":["Slow Amount","Mana Cost "],"effect":["{{ e1 }}% -> {{ e1NL }}%"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[14,14,14,14,14],"cooldownBurn":"14","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[35,45,55,65,75],[5,5,5,5,5],[0.25,0.25,0.25,0.25,0.25],[265,265,265,265,265],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/45/55/65/75","5","0.25","265","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"MegaAdhesive.png","sprite":"spell10.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"Fling","name":"Fling","description":"Damages target enemy unit and flings them into the air behind Singed. If the target Singed flings lands in his Mega Adhesive, they are also rooted.","tooltip":"Singed flings an enemy over his shoulder, dealing {{ e1 }} (+{{ a1 }}) plus {{ e3 }}% of the target's maximum Health as magic damage. Max 300 bonus damage against minions and monsters.
If the target Singed flings lands in his Mega Adhesive, they are also rooted for {{ e2 }} seconds.","leveltip":{"label":["Damage","Max Health Damage","Root Duration","Mana Cost "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e2 }} -> {{ e2NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[100,110,120,130,140],"costBurn":"100/110/120/130/140","effect":[null,[50,65,80,95,110],[1,1.25,1.5,1.75,2],[6,6.5,7,7.5,8],[420,420,420,420,420],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/65/80/95/110","1/1.25/1.5/1.75/2","6/6.5/7/7.5/8","420","300","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[125,125,125,125,125],"rangeBurn":"125","image":{"full":"Fling.png","sprite":"spell10.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"InsanityPotion","name":"Insanity Potion","description":"Singed drinks a potent brew of chemicals, granting him increased combat stats.","tooltip":"Singed drinks a potent brew of chemicals, granting him {{ e1 }} Ability Power, Armor, Magic Resist, Movement Speed, Health Regen, and Mana Regen for {{ e2 }} seconds.","leveltip":{"label":["Bonus Stats"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[100,100,100],"cooldownBurn":"100","cost":[150,150,150],"costBurn":"150","effect":[null,[35,50,80],[25,25,25],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"35/50/80","25","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[20,20,20],"rangeBurn":"20","image":{"full":"InsanityPotion.png","sprite":"spell10.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Sion":{"id":14,"key":"Sion","name":"Sion","title":"The Undead Juggernaut","spells":[{"id":"SionQ","name":"Decimating Smash","description":"Sion charges a powerful swing in an area in front of himself that will deal damage to enemies when released. If he charges for enough time, enemies hit by the swing will also be knocked up and stunned.","tooltip":"Sion charges up a heavy blow for up to 2 seconds. When released, he deals {{ e1 }} (+{{ f1 }}) to {{ e4 }} (+{{ f2 }}) physical damage to enemies hit ({{ e8 }}% damage to minions) and briefly slows them.
If Sion charges for at least 1 second, enemies are knocked up and stunned for 1.25 to 2.25 seconds.","leveltip":{"label":["Minimum Damage","Maximum Damage","Cooldown "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[20,40,60,80,100],[1.25,1.25,1.25,1.25,1.25],[0.65,0.65,0.65,0.65,0.65],[60,120,180,240,300],[2.5,2.5,2.5,2.5,2.5],[1.95,1.95,1.95,1.95,1.95],[7.5,7.5,7.5,7.5,7.5],[60,60,60,60,60],[80,80,80,80,80],[-0.8,-0.8,-0.8,-0.8,-0.8]],"effectBurn":[null,"20/40/60/80/100","1.25","0.65","60/120/180/240/300","2.5","1.95","7.5","60","80","-0.8"],"vars":[{"link":"attackdamage","coeff":0.6,"key":"f1"},{"link":"attackdamage","coeff":1.8,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[10000,10000,10000,10000,10000],"rangeBurn":"10000","image":{"full":"SionQ.png","sprite":"spell10.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SionW","name":"Soul Furnace","description":"Sion shields himself and can reactivate after 3 seconds to deal Magic Damage to enemies nearby. When Sion kills enemies, he passively gains maximum Health.","tooltip":"Passive: Sion gains {{ e5 }} maximum Health when he kills a unit ({{ e6 }} for large monsters and champion kills or assists). Current Bonus: {{ f1 }}
Active: Sion shields himself for {{ e1 }} (+{{ a1 }})(+{{ f2 }}) ({{ e3 }}% of maximum Health) for 6 seconds. After {{ e7 }} seconds, while the shield holds, Sion can reactivate to deal {{ e2 }} (+{{ a1 }}) plus {{ e4 }}% of the target's maximum Health as magic damage to nearby enemies. Max 400 bonus damage to minions and monsters.","leveltip":{"label":["Shield","Damage","Max Health Damage","Max Health Shield Ratio","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ e3 }}% -> {{ e3NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,11,11,11,11],"cooldownBurn":"11","cost":[65,70,75,80,85],"costBurn":"65/70/75/80/85","effect":[null,[30,55,80,105,130],[40,65,90,115,140],[8,9,10,11,12],[10,11,12,13,14],[2,2,2,2,2],[10,10,10,10,10],[3,3,3,3,3],[10,10,10,10,10],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/55/80/105/130","40/65/90/115/140","8/9/10/11/12","10/11/12/13/14","2","10","3","10","0","0"],"vars":[{"link":"health","coeff":0.1,"key":"f1"},{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"SionW.png","sprite":"spell10.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SionE","name":"Roar of the Slayer","description":"Sion fires a short range shockwave that damages and slows and reduces the Armor of the first enemy hit. If the shockwave hits a minion or monster, it will be knocked back, damaging and slowing all enemies that it passes through.","tooltip":"Sion fires a shockwave, dealing {{ e1 }} (+{{ a1 }}) magic damage to the first enemy hit, slowing it by {{ e2 }}%, and reducing its Armor by {{ e5 }}% for 2.5 seconds.
If the target is not a champion, it will be knocked back. Enemies that the knocked back unit collides with take {{ e6 }}% bonus damage and are slowed by {{ e2 }}%.","leveltip":{"label":["Damage","Slow","Cooldown","Mana Cost "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[35,40,45,50,55],"costBurn":"35/40/45/50/55","effect":[null,[70,105,140,175,210],[40,45,50,55,60],[5,5,5,5,5],[40,45,50,55,60],[20,20,20,20,20],[30,30,30,30,30],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/105/140/175/210","40/45/50/55/60","5","40/45/50/55/60","20","30","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"SionE.png","sprite":"spell10.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SionR","name":"Unstoppable Onslaught","description":"Sion charges in a direction, ramping up speed over time. He can steer his charge slightly with the mouse cursor location. When he collides with an enemy he deals damage and knocks them up based on the distance he has charged.","tooltip":"Sion charges in a direction for 8 seconds and can steer slowly towards the mouse cursor. While charging, Sion is immune to all Crowd Control. Reactivating will cancel Sion's charge early.
When Sion collides with an enemy champion or wall, he deals {{ e1 }} (+{{ f1 }}) physical damage and knocks up enemies in a small area for {{ e5 }} seconds. Enemies in a larger area take the same damage and are slowed by {{ e3 }}% for 3 seconds.
The damage increases to {{ e2 }} (+{{ f2 }}) and the stun increases to {{ e6 }} seconds as Sion charges farther.","leveltip":{"label":["Minimum Damage","Maximum Damage","Slow","Cooldown "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,100,60],"cooldownBurn":"140/100/60","cost":[100,100,100],"costBurn":"100","effect":[null,[150,300,450],[300,600,900],[40,45,50],[500,500,500],[0.75,0.75,0.75],[1.75,1.75,1.75],[950,950,950],[0,0,0],[2,2,2],[0,0,0]],"effectBurn":[null,"150/300/450","300/600/900","40/45/50","500","0.75","1.75","950","0","2","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"f1"},{"link":"bonusattackdamage","coeff":0.8,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[7500,7500,7500],"rangeBurn":"7500","image":{"full":"SionR.png","sprite":"spell10.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Sivir":{"id":15,"key":"Sivir","name":"Sivir","title":"the Battle Mistress","spells":[{"id":"SivirQ","name":"Boomerang Blade","description":"Sivir hurls her crossblade like a boomerang, dealing damage each way.","tooltip":"Sivir hurls her crossblade like a boomerang, which deals {{ e1 }} (+{{ f1 }})(+{{ a1 }}) physical damage to the first target hit and {{ e2 }}% reduced damage to each subsequent target down to a minimum of {{ e3 }}%.","leveltip":{"label":["Base Damage","Attack Damage Scaling","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }}% -> {{ e5NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[25,45,65,85,105],[15,15,15,15,15],[40,40,40,40,40],[0.7,0.8,0.9,1,1.1],[70,80,90,100,110],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/45/65/85/105","15","40","0.7/0.8/0.9/1/1.1","70/80/90/100/110","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0,"key":"f1"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200,1200,1200],"rangeBurn":"1200","image":{"full":"SivirQ.png","sprite":"spell10.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SivirW","name":"Ricochet","description":"Sivir's next few basic attacks will bounce to nearby targets, dealing reduced damage to secondary targets.","tooltip":"Sivir's next {{ e4 }} basic attacks bounce to nearby targets, dealing {{ f1 }} physical damage to the first target and {{ f2 }} physical damage to each subsequent target.
If a given Ricochet attack critically strikes its first target, all subsequent bounces from that attack will also critically strike.
Targets cannot be hit more than once by a given Ricochet attack and on-hit effects are applied only to the first target of each attack.","leveltip":{"label":["Cooldown","Bounce Damage (total attack damage)"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[12,10.5,9,7.5,6],"cooldownBurn":"12/10.5/9/7.5/6","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[5,6,7,8,9],[10,20,30,40,50],[50,55,60,65,70],[3,3,3,3,3],[60,70,80,90,100],[1,1,1,1,1],[0,0,0,0,0],[4.5,4.25,4,3.75,3.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/6/7/8/9","10/20/30/40/50","50/55/60/65/70","3","60/70/80/90/100","1","0","4.5/4.25/4/3.75/3.5","0","0"],"vars":[{"link":"attackdamage","coeff":0,"key":"f1"},{"link":"attackdamage","coeff":0,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"SivirW.png","sprite":"spell10.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SivirE","name":"Spell Shield","description":"Creates a magical barrier that blocks a single enemy ability cast on Sivir. She receives Mana back if a spell is blocked.","tooltip":"Sivir creates a magical barrier for {{ e1 }} seconds that blocks the next incoming enemy ability.
If an ability is blocked by the shield, Sivir regains {{ e2 }} Mana.","leveltip":{"label":["Cooldown","Mana Gain"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[22,19,16,13,10],"cooldownBurn":"22/19/16/13/10","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[1.5,1.5,1.5,1.5,1.5],[80,95,110,125,140],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.5","80/95/110/125/140","0","0","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"SivirE.png","sprite":"spell10.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"SivirR","name":"On The Hunt","description":"Sivir leads her allies in battle, granting them a surge Movement Speed for a period of time. Additionally passively grants Sivir bonus Attack Speed while Ricochet is active.","tooltip":"Passive: Sivir gains {{ e1 }}% Attack Speed while Ricochet is active.
Active: Sivir rallies her allies for {{ e3 }} seconds, granting all nearby allies an initial {{ e4 }}% Movement Speed bonus that reduces to {{ e2 }}% after the first {{ e5 }} seconds of On The Hunt elapse.","leveltip":{"label":["Attack Speed","Enhanced Movement Speed Bonus","Enhanced Movement Speed Duration","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e4 }}% -> {{ e4NL }}%","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[30,45,60],[20,20,20],[8,8,8],[40,50,60],[2,3,4],[1000,1000,1000],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"30/45/60","20","8","40/50/60","2/3/4","1000","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000],"rangeBurn":"1000","image":{"full":"SivirR.png","sprite":"spell10.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Skarner":{"id":72,"key":"Skarner","name":"Skarner","title":"the Crystal Vanguard","spells":[{"id":"SkarnerVirulentSlash","name":"Crystal Slash","description":"Skarner lashes out with his claws, dealing physical damage to all nearby enemies and charging himself with Crystal Energy for several seconds if a unit is struck. If he casts Crystal Slash again while powered by Crystal Energy, he deals bonus magic damage.","tooltip":"Skarner deals {{ f1 }} physical damage to all nearby enemies. If a unit is struck, he charges himself with Crystal Energy for {{ e2 }} seconds.
While Skarner is charged, Crystal Slash deals {{ f1 }}(+{{ a1 }}) bonus magic damage.
Basic attacks against non-structures lower Crystal Slash's cooldown by 0.25 seconds (quadrupled against champions).","leveltip":{"label":["Total Attack Damage Ratio","Cooldown","Mana Cost"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[3.5,3.25,3,2.75,2.5],"cooldownBurn":"3.5/3.25/3/2.75/2.5","cost":[10,11,12,13,14],"costBurn":"10/11/12/13/14","effect":[null,[33,36,39,42,45],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"33/36/39/42/45","4","0","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"f1"},{"link":"bonusattackdamage","coeff":0.8,"key":"f1"},{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"SkarnerVirulentSlash.png","sprite":"spell10.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SkarnerExoskeleton","name":"Crystalline Exoskeleton","description":"Skarner gains a shield and has increased Movement Speed while the shield persists.","tooltip":"Skarner is shielded for {{ f1 }} ({{ e1 }}% of his maximum health) (+{{ a1 }}) damage for {{ e4 }} seconds. While the shield persists, Skarner gains movement speed that ramps up to {{ e5 }}% over 3 seconds.","leveltip":{"label":["Max Health Damage Absorption","Movement Speed Bonus","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e5 }}% -> {{ e5NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12.5,12,11.5,11],"cooldownBurn":"13/12.5/12/11.5/11","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[10,11,12,13,14],[30,35,40,45,50],[8,10,12,14,16],[6,6,6,6,6],[16,20,24,28,32],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/11/12/13/14","30/35/40/45/50","8/10/12/14/16","6","16/20/24/28/32","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"SkarnerExoskeleton.png","sprite":"spell10.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SkarnerFracture","name":"Fracture","description":"Skarner summons a blast of crystalline energy which deals damage to enemies struck and slows them. Basic attacking these enemies within a short window will stun them.","tooltip":"Passive: Crystallizing enemies with Fracture and Impale grants Crystal Charge for the disable duration and reduces the cooldown of Fracture by the same amount.
Active: Skarner summons a blast of crystalline energy, dealing {{ e1 }} (+{{ a1 }}) magic damage, slowing targets hit by {{ e8 }}% for {{ e7 }} seconds and reducing the blast's speed.
Enemies hit by Fracture are afflicted with Crystal Venom for {{ e6 }} seconds, causing Skarner's next basic attack against them to deal {{ e2 }} additional physical damage and stun the target for {{ e3 }} second.","leveltip":{"label":["Blast Damage / Attack Damage","Slow","Cooldown"],"effect":["{{ e1 }} / {{ e2 }} -> {{ e1NL }} / {{ e2NL }}","{{ e8 }}% -> {{ e8NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13.5,13,12.5,12],"cooldownBurn":"14/13.5/13/12.5/12","cost":[55,55,55,55,55],"costBurn":"55","effect":[null,[40,65,90,115,140],[25,35,45,55,65],[1,1,1,1,1],[50,50,50,50,50],[6,6,6,6,6],[5,5,5,5,5],[2.5,2.5,2.5,2.5,2.5],[30,35,40,45,50],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/65/90/115/140","25/35/45/55/65","1","50","6","5","2.5","30/35/40/45/50","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[980,980,980,980,980],"rangeBurn":"980","image":{"full":"SkarnerFracture.png","sprite":"spell10.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SkarnerImpale","name":"Impale","description":"Skarner suppresses an enemy champion and deals damage to it. During this time, Skarner can move freely and will drag his helpless victim around with him. When the effect ends, the target will be dealt additional damage.","tooltip":"Skarner suppresses an enemy champion for {{ e1 }} seconds, dealing {{ a2 }} physical damage plus {{ e2 }} (+{{ a1 }}) magic damage. Skarner can move freely during this time, and will drag his helpless victim around with him. When the effect ends, Skarner's target will be dealt the same damage again.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[1.75,1.75,1.75],[20,60,100],[50,75,100],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1.75","20/60/100","50/75/100","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.6,"key":"a2"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350],"rangeBurn":"350","image":{"full":"SkarnerImpale.png","sprite":"spell10.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Sona":{"id":37,"key":"Sona","name":"Sona","title":"Maven of the Strings","spells":[{"id":"SonaQ","name":"Hymn of Valor","description":"Sona plays the Hymn of Valor, sends out bolts of sound, dealing magic damage to two nearby enemies, prioritizing champions and monsters. Sona gains a temporary aura that grants allies tagged by the zone bonus damage on their next attack against enemies.","tooltip":"Active: Deals {{ e1 }} (+{{ a1 }}) magic damage to the nearest two enemies (prioritizes champions) and changes her Power Chord bonus to Staccato.
Melody: Sona gains an aura for {{ e3 }} seconds. Allied champions that enter the aura will gain an additional {{ e4 }} (+{{ a2 }}) magic damage on their next attack.","leveltip":{"label":["Damage (active)","Damage (melody)","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[40,70,100,130,160],[400,400,400,400,400],[3,3,3,3,3],[20,30,40,50,60],[5,5,5,5,5],[0.4,0.4,0.4,0.4,0.4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/70/100/130/160","400","3","20/30/40/50/60","5","0.4","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.2,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[825,825,825,825,825],"rangeBurn":"825","image":{"full":"SonaQ.png","sprite":"spell10.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SonaW","name":"Aria of Perseverance","description":"Sona plays the Aria of Perseverance, sending out protective melodies, healing Sona and a nearby wounded ally. Sona gains a temporary aura that grants allies tagged by the zone a temporary shield.","tooltip":"Active: Restores {{ e1 }} (+{{ a1 }}) health to Sona and a nearby allied champion (prioritizes most wounded) and changes her Power Chord bonus to Diminuendo.
Melody: Sona gains an aura for {{ e3 }} seconds. Allied champions that enter the aura will gain a shield that prevents up to {{ e4 }} (+{{ a2 }}) damage within the next {{ e5 }} seconds.","leveltip":{"label":["Heal (active)","Shield (melody)","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[80,85,90,95,100],"costBurn":"80/85/90/95/100","effect":[null,[35,55,75,95,115],[400,400,400,400,400],[3,3,3,3,3],[30,55,80,105,130],[1.5,1.5,1.5,1.5,1.5],[0.25,0.25,0.25,0.25,0.25],[0.04,0.04,0.04,0.04,0.04],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/55/75/95/115","400","3","30/55/80/105/130","1.5","0.25","0.04","3","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"SonaW.png","sprite":"spell10.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SonaE","name":"Song of Celerity","description":"Sona plays the Song of Celerity, granting nearby allies bonus Movement Speed. Sona gains a temporary aura that grants allied champions tagged by the zone bonus Movement Speed on their next attack.","tooltip":"Active: Grants Sona {{ f1*100 }}% movement speed [{{ e1 }}% + {{ f2*100 }}% per 100 ability power] for {{ e9 }} seconds (or until damaged) and changes her Power Chord bonus to Tempo.
Melody: Sona gains an aura for {{ e3 }} seconds. Allied champions that enter the aura will gain {{ f3*100 }}% movement speed for {{ e5 }} seconds.
Sona's personal movement speed increase will always last at least {{ e5 }} seconds.","leveltip":{"label":["Movement Speed"],"effect":["{{ e1 }}% -> {{ e1NL }}%"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[10,11,12,13,14],[400,400,400,400,400],[3,3,3,3,3],[0.1,0.11,0.12,0.13,0.14],[3,3,3,3,3],[0.4,0.4,0.4,0.4,0.4],[0.04,0.04,0.04,0.04,0.04],[2,2,2,2,2],[7,7,7,7,7],[0,0,0,0,0]],"effectBurn":[null,"10/11/12/13/14","400","3","0.1/0.11/0.12/0.13/0.14","3","0.4","0.04","2","7","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[430,430,430,430,430],"rangeBurn":"430","image":{"full":"SonaE.png","sprite":"spell10.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SonaR","name":"Crescendo","description":"Sona plays her ultimate chord, stunning enemy champions and forcing them to dance and dealing magic damage to them. Each rank reduces the base cooldown of Sona's basic abilities.","tooltip":"Active: Strikes an irresistible chord, stunning enemy Champions and forcing them to dance for {{ e2 }} seconds and take {{ e1 }} (+{{ a1 }}) magic damage.
Passive: Reduces the base cooldown of Sona's basic abilities by {{ e3 }}%.","leveltip":{"label":["Damage","Cooldown","Hymn of Valor Cooldown","Aria of Perseverance Cooldown","Song of Celerity Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ f1 }} -> {{ f2 }}","{{ f3 }} -> {{ f4 }}","{{ f5 }} -> {{ f6 }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[1.5,1.5,1.5],[10,25,40],[-0.1,-0.25,-0.4],[-0.1,-0.25,-0.4],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","1.5","10/25/40","-0.1/-0.25/-0.4","-0.1/-0.25/-0.4","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900],"rangeBurn":"900","image":{"full":"SonaR.png","sprite":"spell10.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Soraka":{"id":16,"key":"Soraka","name":"Soraka","title":"the Starchild","spells":[{"id":"SorakaQ","name":"Starcall","description":"A star falls from the sky at the target location dealing magic damage and slowing enemies. If an enemy champion is hit by Starcall, Soraka recovers health and gains movement speed when moving away from enemy champions.","tooltip":"Calls down a star from Soraka to a target location. Enemies standing in the explosion radius take {{ e1 }} (+{{ a1 }}) magic damage and are slowed by {{ e2 }}% for 2 seconds.
If Starcall hits a champion Soraka gains Rejuvenation for {{ e5 }} seconds, which restores {{ e3 }} (+{{ f1 }}) health per second and grants {{ e9 }}% movement speed when not moving toward enemy champions.","leveltip":{"label":["Damage","Health Restore (Rejuvenation)","Rejuvenation Duration (for allies)","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e6 }} -> {{ e6NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[5,5,5,5,5],"cooldownBurn":"5","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[70,110,150,190,230],[30,30,30,30,30],[14,16,18,20,22],[7,9,11,13,15],[4,4,4,4,4],[3,3.5,4,4.5,5],[0.1,0.1,0.1,0.1,0.1],[0.05,0.05,0.05,0.05,0.05],[10,10,10,10,10],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","30","14/16/18/20/22","7/9/11/13/15","4","3/3.5/4/4.5/5","0.1","0.05","10","0"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[810,810,810,810,810],"rangeBurn":"810","image":{"full":"SorakaQ.png","sprite":"spell10.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SorakaW","name":"Astral Infusion","description":"Soraka sacrifices a portion of her own health to heal another friendly champion.","tooltip":"Restores {{ e1 }} (+{{ a1 }}) health to another champion ally.
If cast while affected by Rejuvenation, Soraka will grant her target its benefits for {{ f1 }} seconds.
Cannot be cast if Soraka is below 5% Health.","leveltip":{"label":["Heal Amount","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,6.5,5,3.5,2],"cooldownBurn":"8/6.5/5/3.5/2","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[80,110,140,170,200],[0.1,0.1,0.1,0.1,0.1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/110/140/170/200","0.1","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"SorakaW.png","sprite":"spell10.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"10% Max Health, {{ cost }} Mana"},{"id":"SorakaE","name":"Equinox","description":"Creates a zone at a location that silences all enemies inside. When the zone expires, all enemies still inside are rooted.","tooltip":"Creates a zone at target location for 1.5 seconds, dealing {{ e2 }} (+{{ a1 }}) magic damage to enemy Champions in the cast radius. Enemy Champions standing in the zone are silenced until they leave.
When the zone disappears, all enemy Champions still standing in the zone are rooted for {{ e1 }} second(s) and are dealt {{ e2 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Cooldown","Root Duration"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[24,22,20,18,16],"cooldownBurn":"24/22/20/18/16","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[1,1.25,1.5,1.75,2],[70,110,150,190,230],[40,70,100,130,160],[5,5,5,5,5],[20,40,60,80,100],[60,90,120,150,180],[1.5,1.5,1.5,1.5,1.5],[260,260,260,260,260],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1/1.25/1.5/1.75/2","70/110/150/190/230","40/70/100/130/160","5","20/40/60/80/100","60/90/120/150/180","1.5","260","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"SorakaE.png","sprite":"spell10.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SorakaR","name":"Wish","description":"Soraka fills her allies with hope, instantly restoring health to herself and all friendly champions.","tooltip":"Calls upon divine powers to restore {{ e1 }} (+{{ a1 }}) Health to all allied Champions. Wish's power is increased by 50% on each Champion below 40% Health.","leveltip":{"label":["Health Restored","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,145,130],"cooldownBurn":"160/145/130","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[120,90,60],[250,350,450],[1.5,1.5,1.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","120/90/60","250/350/450","1.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.55,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"SorakaR.png","sprite":"spell10.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Swain":{"id":50,"key":"Swain","name":"Swain","title":"the Master Tactician","spells":[{"id":"SwainDecrepify","name":"Decrepify","description":"Swain sends Beatrice to cripple enemies within the target area. Crippled targets are slowed and damaged over time.","tooltip":"Beatrice lands on the target area for {{ e3 }} seconds and attacks the closest enemy unit prioritizing champions, dealing {{ e1 }} (+{{ a1 }}) magic damage per second and slowing it down by {{ e2 }}%. Damage is doubled to {{ f1 }} (+{{ a2 }}) magic damage against minions.
Beatrice will look for a new target if the current one moves away or dies. If any nearby enemy unit is afflicted by Torment then it will become Beatrice's target.
Max damage: {{ f2 }} (+{{ f3 }}) to non-minions and {{ f4 }} (+{{ f5 }}) to enemy minions.","leveltip":{"label":["Damage Per Second","Slow","Mana Cost","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[30,48,65,83,100],[20,25,30,35,40],[4,4,4,4,4],[350,350,350,350,350],[0.5,0.5,0.5,0.5,0.5],[0.25,0.25,0.25,0.25,0.25],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/48/65/83/100","20/25/30/35/40","4","350","0.5","0.25","2","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"SwainDecrepify.png","sprite":"spell10.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SwainShadowGrasp","name":"Nevermove","description":"Swain marks a target area. After a short delay, mighty talons grab hold of enemy units, dealing damage and rooting them.","tooltip":"Swain marks the target area that triggers after a brief delay dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies within range and rooting them for {{ e2 }} second(s).","leveltip":{"label":["Damage","Root Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[80,85,90,95,100],"costBurn":"80/85/90/95/100","effect":[null,[80,120,160,200,240],[1,1.25,1.5,1.75,2],[0.875,0.875,0.875,0.875,0.875],[0,0,0,0,0],[0.875,0.875,0.875,0.875,0.875],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","1/1.25/1.5/1.75/2","0.88","0","0.88","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"SwainShadowGrasp.png","sprite":"spell10.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SwainTorment","name":"Torment","description":"Swain afflicts his target, dealing damage to them over time and causing them to take increased damage from Swain. Enemies afflicted by Torment are focused by Beatrice while Decrepify is active.","tooltip":"Swain afflicts his target with a curse that deals {{ e1 }} (+{{ a1 }}) magic damage over 4 seconds and amplifies Swain's damage against it by {{ e2 }}%.","leveltip":{"label":["Base Damage Over Time","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,10,10,10,10],"cooldownBurn":"10","cost":[65,70,75,80,85],"costBurn":"65/70/75/80/85","effect":[null,[50,80,110,140,170],[20,20,20,20,20],[6,7,8,9,10],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/80/110/140/170","20","6/7/8/9/10","4","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[625,625,625,625,625],"rangeBurn":"625","image":{"full":"SwainTorment.png","sprite":"spell10.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SwainMetamorphism","name":"Ravenous Flock","description":"Swain inspires dread in his enemies by temporarily taking the form of a raven. During this time ravens strike out at up to 5 nearby enemies. Each raven deals damage and heals Swain by a flat amount.","tooltip":"Toggle: Swain transforms into a monstrous raven, spawning up to {{ e7 }} lesser ravens per second that strike out at nearby enemies, prioritizing champions. Each raven deals {{ e1 }} (+{{ a1 }}) magic damage and heals Swain for {{ e2 }} (+{{ f9 }}) against champions and {{ e9 }} (+{{ f10 }}) against minions and monsters.
Ravens can't attack the same target for 1 second and the mana cost to sustain Ravenous Flock increases by {{ e8 }} Mana each second.","leveltip":{"label":["Damage Amount","Heal From Champions","Heal From Minions and Monsters"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e9 }} -> {{ e9NL }}"]},"maxrank":3,"cooldown":[20,20,20],"cooldownBurn":"20","cost":[25,25,25],"costBurn":"25","effect":[null,[50,70,90],[20,30,40],[0.12,0.12,0.12],[25,25,25],[2,2,2],[25000,25000,25000],[5,5,5],[5,5,5],[8,11,14],[0.03,0.03,0.03]],"effectBurn":[null,"50/70/90","20/30/40","0.12","25","2","25000","5","5","8/11/14","0.03"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Initial Mana Cost per Second","maxammo":"-1","range":[625,625,625],"rangeBurn":"625","image":{"full":"SwainMetamorphism.png","sprite":"spell10.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Initial Mana Cost per Second"}]},"Syndra":{"id":134,"key":"Syndra","name":"Syndra","title":"the Dark Sovereign","spells":[{"id":"SyndraQ","name":"Dark Sphere","description":"Syndra conjures a Dark Sphere dealing magic damage. The sphere remains and can be manipulated by her other powers.","tooltip":"Conjures a Dark Sphere dealing {{ e1 }} (+{{ a1 }}) magic damage. The sphere remains for {{ f1 }} seconds and can be manipulated by Syndra's other abilities.
This spell can be cast while moving.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[40,50,60,70,80],"costBurn":"40/50/60/70/80","effect":[null,[50,95,140,185,230],[6,6,6,6,6],[2,2.2,2.4,2.6,2.8],[8,8,8,8,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/95/140/185/230","6","2/2.2/2.4/2.6/2.8","8","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"SyndraQ.png","sprite":"spell10.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SyndraW","name":"Force of Will","description":"Syndra picks up and throws a Dark Sphere or enemy minion dealing magic damage and slowing the Movement Speed of enemies. ","tooltip":"First Cast: Grabs target Dark Sphere or enemy minion. If no target is selected, grabs nearest Dark Sphere.
Second Cast: Throws the grabbed unit. Enemies hit take {{ e2 }} (+{{ a1 }}) magic damage and are slowed by {{ e1 }}% for {{ f2 }} seconds.
This spell can be cast while moving.","leveltip":{"label":["Damage","Mana Cost","Slow","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }} ","{{ cost }} -> {{ costNL }} ","{{ e1 }}% -> {{ e1NL }}%","{{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[25,30,35,40,45],[70,110,150,190,230],[12,11,10,9,8],[1.5,1.5,1.5,1.5,1.5],[400,400,400,400,400],[0.2,0.2,0.2,0.2,0.2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"25/30/35/40/45","70/110/150/190/230","12/11/10/9/8","1.5","400","0.2","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"@text","coeff":1.5,"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"SyndraW.png","sprite":"spell10.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SyndraE","name":"Scatter the Weak","description":"Syndra knocks enemies and Dark Spheres back dealing magic damage. Enemies hit by Dark Spheres become stunned.","tooltip":"Knocks enemies and Dark Spheres back dealing {{ e1 }} (+{{ a1 }}) magic damage to them and any enemies they collide with.
Dark Spheres that are knocked back stun all enemies in their path for {{ e2 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ cooldown }} -> {{ cooldownNL }} "]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[70,115,160,205,250],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/115/160/205/250","1.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"SyndraE.png","sprite":"spell10.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"SyndraR","name":"Unleashed Power","description":"Syndra bombards an enemy Champion with all of her Dark Spheres.","tooltip":"Draws upon Syndra's full cataclysmic power, harnessing Dark Spheres to deal magic damage to target enemy Champion. Unleashed Power manipulates the three Dark Spheres orbiting Syndra, in addition to up to 4 Dark Spheres previously created.
Damage per sphere: {{ e1 }} (+{{ a1 }}). Minimum total damage: {{ e2 }} (+{{ a2 }}).","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }} ","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[90,135,180],[270,405,540],[7,7,7],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"90/135/180","270/405/540","7","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[675,675,675],"rangeBurn":"675","image":{"full":"SyndraR.png","sprite":"spell10.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"TahmKench":{"id":223,"key":"TahmKench","name":"Tahm Kench","title":"the River King","spells":[{"id":"TahmKenchQ","name":"Tongue Lash","description":"Tahm Kench lashes out with his tongue, damaging and slowing the first unit hit. This ability gains a stun after three stacks of An Acquired Taste.","tooltip":"Damage the first enemy hit for {{ e3 }} (+{{ a1 }}) magic damage and slow them by {{ e4 }}% for {{ e5 }}s. Champions with 3 stacks of An Acquired Taste will additionally be stunned for {{ e6 }}s.
Activate Devour while your tongue is in midair to devour monsters/minions from a distance.","leveltip":{"label":["Base Damage","Slow Amount"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[875,875,875,875,875],[1000,1000,1000,1000,1000],[80,130,180,230,280],[30,40,50,60,70],[2,2,2,2,2],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"875","1000","80/130/180/230/280","30/40/50/60/70","2","1.5","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"TahmKenchQ.png","sprite":"spell10.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TahmKenchW","name":"Devour","description":"Tahm Kench devours a target, dealing a percentage of their maximum health as magic damage. He can spit devoured minions and monsters out as a skillshot that deals magic damage in an area upon impact.","tooltip":"Devour a target for {{ e1 }}s (half that for enemy champions.) Enemies are dealt {{ e3 }}% (+{{ a1 }}%) of their maximum health as magic damage (maximum of {{ e2 }} against neutral monsters).
Enemy Champions: Requires 3 stacks of An Acquired Taste to be devoured. While holding an enemy champion, Tahm Kench is slowed by 95%.
Allied Champions: While holding an allied champion, Tahm Kench gains {{ e4 }}% movement speed toward enemy champions.
Minions and Monsters: Reactivate to spit them, dealing {{ e7 }} (+{{ a2 }}) magic damage to targets hit.","leveltip":{"label":["Devour Duration","Max Health Damage","Max Damage to Monsters","Minion Spit Damage","Cooldown"],"effect":["{{ e1 }}s -> {{ e1NL }}s","{{ e3 }}% -> {{ e3NL }}%","{{ e2 }} -> {{ e2NL }}","{{ e7 }} -> {{ e7NL }}","{{ cooldown }}s -> {{ cooldownNL }}s"]},"maxrank":5,"cooldown":[14,13,12,11,10],"cooldownBurn":"14/13/12/11/10","cost":[90,90,90,90,90],"costBurn":"90","effect":[null,[4,4.5,5,5.5,6],[400,450,500,550,600],[20,23,26,29,32],[30,35,40,45,50],[0,0,0,0,0],[0,0,0,0,0],[100,150,200,250,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/4.5/5/5.5/6","400/450/500/550/600","20/23/26/29/32","30/35/40/45/50","0","0","100/150/200/250/300","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.02,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[250,250,250,250,250],"rangeBurn":"250","image":{"full":"TahmKenchW.png","sprite":"spell10.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TahmKenchE","name":"Thick Skin","description":"Tahm Kench turns incoming damage into gray health. As gray health decays, Tahm Kench is healed for a percentage of the gray health amount. When activated, this ability turns all gray health into a shield.","tooltip":"Passive: {{ e3 }}% of the Damage taken while this ability is not cooling down is converted to gray health. If allowed to decay, {{ e2 }}% of gray health will turn back into health.
Active: Convert all of your gray health into a shield that lasts {{ e1 }} seconds.","leveltip":{"label":["Damage to Gray Health Conversion","Gray Health to Healing Conversion"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[3,3,3,3,3],[25,30,35,40,45],[70,75,80,85,90],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"3","25/30/35/40/45","70/75/80/85/90","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1,1,1,1,1],"rangeBurn":"1","image":{"full":"TahmKenchE.png","sprite":"spell10.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TahmKenchNewR","name":"Abyssal Voyage","description":"Tahm Kench teleports across the map, and he may bring one ally champion with him.","tooltip":"Begin to channel for up to 6 seconds. During this time, one ally champion can right click Tahm Kench to join in. Alternatively, reactivate this ability to travel alone. On reactivation or once an ally has opted in, Tahm travels to the target location. Incoming champion damage breaks the channel.
'Boy, the world's one river, and I'm its king. Ain't no place I ain't been; ain't no place I can't go again.'","leveltip":{"label":["Cooldown","Range"],"effect":["{{ cooldown }}s -> {{ cooldownNL }}s","{{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[4500,5500,6500],[0.02,0.04,0.06],[20,20,20],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"4500/5500/6500","0.02/0.04/0.06","20","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[4500,5500,6500],"rangeBurn":"4500/5500/6500","image":{"full":"TahmKenchNewR.png","sprite":"spell10.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Taliyah":{"id":163,"key":"Taliyah","name":"Taliyah","title":"the Stoneweaver","spells":[{"id":"TaliyahQ","name":"Threaded Volley","description":"Taliyah throws a volley of missiles in a target direction, moving freely as she does. This works the ground below her. If Taliyah casts Threaded Volley on worked ground, she only throws one missile.","tooltip":"Hurls 5 rocks in a direction, dealing {{ e1 }} (+{{ a1 }}) magic damage in a small area around the first enemy hit. Subsequent hits on the same unit deal {{ e2 }}% reduced damage. Creates Worked Ground for {{ f1 }} seconds.
Taliyah gains {{ f2 }}% movement speed on Worked Ground. Casting Threaded Volley on Worked Ground only hurls one rock but refunds {{ e7 }}% of its mana cost.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }}s -> {{ cooldownNL }}s","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,7.5,6,4.5,3],"cooldownBurn":"9/7.5/6/4.5/3","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[70,95,120,145,170],[60,60,60,60,60],[0,0,0,0,0],[0,0,0,0,0],[160,160,160,160,160],[120,120,120,120,120],[50,50,50,50,50],[450,450,450,450,450],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/95/120/145/170","60","0","0","160","120","50","450","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"TaliyahQ.png","sprite":"spell10.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TaliyahWVC","name":"Seismic Shove","description":"Taliyah causes an area of ground to erupt and throws enemies within in a direction of her choosing.","tooltip":"Taliyah targets an area. After a short delay, enemies caught within the area will be pushed and dealt {{ e1 }} (+{{ a1 }}) magic damage.
You can control the direction enemies will be pushed by clicking and dragging your mouse in a line.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }}s -> {{ cooldownNL }}s","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[60,80,100,120,140],[0.55,0.55,0.55,0.55,0.55],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/80/100/120/140","0.55","400","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"TaliyahWVC.png","sprite":"spell10.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TaliyahE","name":"Unraveled Earth","description":"Taliyah creates a slowing minefield that explodes if enemies dash through it or are pushed/pulled through it.","tooltip":"Places a field of dash-sensitive traps that deal {{ e1 }} (+{{ a1 }}) magic damage and slow enemies in the area by {{ f2 }}%. After {{ e3 }} seconds, the traps explode, dealing damage again.
Enemies dashing, being pushed, or being pulled through Unraveled Earth will trigger traps, taking {{ f3 }} (+{{ f1 }}) magic damage from each trap (maximum 4, each hit after the first deals {{ f4 }}% less damage).","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }}s -> {{ cooldownNL }}s","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,14,12,10,8],"cooldownBurn":"16/14/12/10/8","cost":[90,95,100,105,110],"costBurn":"90/95/100/105/110","effect":[null,[70,90,110,130,150],[-0.2,-0.2,-0.2,-0.2,-0.2],[4,4,4,4,4],[85,85,85,85,85],[0.5,0.5,0.5,0.5,0.5],[4,4,4,4,4],[0.15,0.15,0.15,0.15,0.15],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/90/110/130/150","-0.2","4","85","0.5","4","0.15","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"TaliyahE.png","sprite":"spell10.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TaliyahR","name":"Weaver's Wall","description":"Stone Weaver creates a very long wall and then surfs it.","tooltip":"Cast once to create a wall. Recast immediately to ride ahead of the wall. Moving or receiving damage will cause Taliyah to stop.
Weaver's Wall lasts for {{ e1 }} seconds. Deactivate this spell to break the wall early.","leveltip":{"label":["Duration","Wall length","Cooldown"],"effect":["{{ e1 }}s -> {{ e1NL }}s","{{ e2 }} -> {{ e2NL }}","{{ cooldown }}s -> {{ cooldownNL }}s"]},"maxrank":3,"cooldown":[180,150,120],"cooldownBurn":"180/150/120","cost":[100,100,100],"costBurn":"100","effect":[null,[6,7,8],[3000,4500,6000],[0.1,0.1,0.1],[2500,2500,2500],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"6/7/8","3000/4500/6000","0.1","2500","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[3000,4500,6000],"rangeBurn":"3000/4500/6000","image":{"full":"TaliyahR.png","sprite":"spell11.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Talon":{"id":91,"key":"Talon","name":"Talon","title":"the Blade's Shadow","spells":[{"id":"TalonQ","name":"Noxian Diplomacy","description":"Talon stabs the target unit. If they are within melee range, this attack deals critical damage. If they are outside melee range, Talon will leap at his target before stabbing them. Talon refunds some health and cooldown if this ability kills the target.","tooltip":"Talon leaps to target and deals {{ e1 }} (+{{ a1 }}) physical damage. If cast from melee range, Talon does not leap but instead critically strikes, dealing {{ f2 }}% damage ({{ f3 }}).
When Noxian Diplomacy kills a unit, Talon regains {{ f4 }} health and refunds {{ e5 }}% of its cooldown.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f5 }} -> {{ f6 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[60,85,110,135,160],[50,50,50,50,50],[17,17,17,17,17],[3,3,3,3,3],[50,50,50,50,50],[8,7.5,7,6.5,6],[0.8,0.8,0.8,0.8,0.8],[1.5,1.5,1.5,1.5,1.5],[30,30,30,30,30],[0,0,0,0,0]],"effectBurn":[null,"60/85/110/135/160","50","17","3","50","8/7.5/7/6.5/6","0.8","1.5","30","0"],"vars":[{"link":"bonusattackdamage","coeff":1.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[10000,10000,10000,10000,10000],"rangeBurn":"10000","image":{"full":"TalonQ.png","sprite":"spell11.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ e9 }} Mana"},{"id":"TalonW","name":"Rake","description":"Talon sends out a volley of daggers that then return back to him, dealing physical damage every time it passes through an enemy. The returning blades deal bonus damage and slow units hit.","tooltip":"Talon tosses a volley of blades, dealing {{ e1 }} (+{{ f1 }}) physical damage to units hit and returning to him after a delay.
On their way back to Talon, the blades deal {{ e5 }} (+{{ a2 }}) additional damage and slow the enemy by {{ e2 }}% for 1 second.","leveltip":{"label":["Initial Damage","Return Damage","Slow Amount","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[55,60,65,70,75],"costBurn":"55/60/65/70/75","effect":[null,[50,65,80,95,110],[40,45,50,55,60],[14,13,12,11,10],[2,2,2,2,2],[60,85,110,135,160],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/65/80/95/110","40/45/50/55/60","14/13/12/11/10","2","60/85/110/135/160","1","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"TalonW.png","sprite":"spell11.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TalonE","name":"Assassin's Path","description":"Talon vaults over any terrain or structure, up to a max distance. This ability has a low cooldown, but puts the used terrain on a long cooldown.","tooltip":"Talon vaults up to {{ f2 }} units over the nearest structure or terrain in the target direction. The vault's speed is affected by Talon's movement speed.
Talon cannot dash over the same section of terrain more than once every {{ f3 }} seconds.","leveltip":{"label":["Terrain Cooldown"],"effect":["{{ f3 }} -> {{ f4 }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[0,0,0,0,0],[0,0,0,0,0],[625,625,625,625,625],[1250,1250,1250,1250,1250],[2,2,2,2,2],[160,135,110,85,60],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"0","0","625","1250","2","160/135/110/85/60","0","0","0","0"],"vars":[],"costType":"No cost","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"TalonE.png","sprite":"spell11.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"No cost"},{"id":"TalonR","name":"Shadow Assault","description":"Talon disperses a ring of blades and becomes Invisible while gaining additional Movement Speed. When Talon emerges from Invisibility, the blades converge on his location. Each time the blades move, Shadow Assault deals physical damage to enemies hit by at least one blade. ","tooltip":"Talon disperses a ring of blades that deal {{ e1 }} (+{{ a1 }}) physical damage to all units they hit, gains {{ e3 }}% increased movement speed, and becomes Invisible for up to {{ e5 }} seconds. When the Invisibility ends, the blades converge, dealing the same damage again to enemies they pass through.
If Talon cancels Invisibility with an attack or Noxian Diplomacy, the blades converge on his target's location instead.
16","leveltip":{"label":["Damage","Movement Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,80,60],"cooldownBurn":"100/80/60","cost":[100,100,100],"costBurn":"100","effect":[null,[90,135,180],[200,300,400],[40,55,70],[70,85,100],[2.5,2.5,2.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"90/135/180","200/300/400","40/55/70","70/85/100","2.5","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"TalonR.png","sprite":"spell11.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Taric":{"id":44,"key":"Taric","name":"Taric","title":"the Shield of Valoran","spells":[{"id":"TaricQ","name":"Starlight's Touch","description":"Heals nearby allied champions based on charges stored.
Bravado-empowered attacks reduce this recharge time more than usual.","tooltip":"Spends all charges to heal nearby allied champions for {{ e1 }} (+{{ a1 }})(+{{ f1 }}) per charge, up to {{ e5 }} (+{{ a2 }})(+{{ f2 }}) at 3 charges.
Bravado-empowered attacks reduce this recharge time by {{ f3 }}additional seconds.","leveltip":{"label":["Base Healing","Max Healing","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[60,80,100,120,140],"costBurn":"60/80/100/120/140","effect":[null,[20,30,40,50,60],[1.5,1.5,1.5,1.5,1.5],[5,5,5,5,5],[6,6,6,6,6],[60,90,120,150,180],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/30/40/50/60","1.5","5","6","60/90/120/150/180","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana, 1-3 Charges","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"TaricQ.png","sprite":"spell11.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana, 1-3 Charges"},{"id":"TaricW","name":"Bastion","description":"Passively increase the Armor of Taric and any allied champion with Bastion.
Actively shields an ally and grants them Bastion for as long as they remain near Taric. Taric's spells also cast off the ally with Bastion.","tooltip":"Taric's spells will also cast from a nearby ally protected by Bastion.
Passive: Bastion increases Armor by {{ f1 }} ({{ e1 }}% of Taric's Armor).
Active: Blesses an ally with Bastion and shields them for {{ e2 }}% of their maximum Health for {{ e3 }} seconds. Bastion lasts on the target until a new one is chosen.","leveltip":{"label":["Passive Armor","Shield Ratio"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[10,12.5,15,17.5,20],[8,9,10,11,12],[2.5,2.5,2.5,2.5,2.5],[1000,1000,1000,1000,1000],[1300,1300,1300,1300,1300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/12.5/15/17.5/20","8/9/10/11/12","2.5","1000","1300","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"TaricW.png","sprite":"spell11.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TaricE","name":"Dazzle","description":"Taric readies a beam of starlight that, after a brief delay, deals magic damage and stuns enemies.","tooltip":"Readies a beam of starlight that, after {{ e3 }} second, deals {{ e1 }} (+{{ a1 }})(+{{ f1 }}) magic damage and stuns enemies for {{ e2 }} second(s).","leveltip":{"label":["Damage","Stun Duration"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[60,105,150,195,240],[1,1.125,1.25,1.375,1.5],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","1/1.125/1.25/1.375/1.5","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[610,610,610,610,610],"rangeBurn":"610","image":{"full":"TaricE.png","sprite":"spell11.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TaricR","name":"Cosmic Radiance","description":"Pulses cosmic energy onto nearby allied champions after a delay, making them invulnerable for a short duration.","tooltip":"After a {{ e4 }} second delay, pulses cosmic energy onto nearby allied champions, making them invulnerable for {{ e5 }} seconds.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,130,100],"cooldownBurn":"160/130/100","cost":[100,100,100],"costBurn":"100","effect":[null,[150,275,400],[25,35,45],[2.5,2.5,2.5],[2.5,2.5,2.5],[2.5,2.5,2.5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/275/400","25/35/45","2.5","2.5","2.5","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[400,400,400],"rangeBurn":"400","image":{"full":"TaricR.png","sprite":"spell11.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Teemo":{"id":17,"key":"Teemo","name":"Teemo","title":"the Swift Scout","spells":[{"id":"BlindingDart","name":"Blinding Dart","description":"Obscures an enemy's vision with a powerful venom, dealing damage to the target unit and blinding it for the duration.","tooltip":"Deals {{ e1 }} (+{{ a1 }}) magic damage and blinds the target for {{ e2 }} seconds. ","leveltip":{"label":["Damage","Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[80,125,170,215,260],[1.5,1.75,2,2.25,2.5],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/125/170/215/260","1.5/1.75/2/2.25/2.5","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[680,680,680,680,680],"rangeBurn":"680","image":{"full":"BlindingDart.png","sprite":"spell11.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"MoveQuick","name":"Move Quick","description":"Teemo scampers around, passively increasing his Movement Speed until he is struck by an enemy champion or turret. Teemo can sprint to gain bonus Movement Speed that isn't stopped by being struck for a short time.","tooltip":"Passive: Teemo's Movement Speed is increased by {{ e1 }}% unless he has been damaged by an enemy champion or turret in the last 5 seconds.
Active: Teemo sprints, gaining twice his normal bonus for {{ e2 }} seconds. This bonus is not lost when struck.","leveltip":{"label":["Base Movement Speed Bonus"],"effect":["{{ e1 }}% -> {{ e1NL }}%"]},"maxrank":5,"cooldown":[17,17,17,17,17],"cooldownBurn":"17","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[10,14,18,22,26],[3,3,3,3,3],[0.2,0.28,0.36,0.44,0.52],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/14/18/22/26","3","0.2/0.28/0.36/0.44/0.52","5","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"MoveQuick.png","sprite":"spell11.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ToxicShot","name":"Toxic Shot","description":"Each of Teemo's attacks will poison the target, dealing damage on impact and each second after for 4 seconds.","tooltip":"Teemo's basic attacks poison their target, dealing {{ e2 }} (+{{ a1 }}) magical damage upon impact and {{ e1 }} (+{{ a2 }}) magical damage each second for {{ e3 }} seconds.","leveltip":{"label":["Impact Damage","Damage per Second "],"effect":[" {{ e2 }} -> {{ e2NL }}"," {{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[8,8,8,8,8],"cooldownBurn":"8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[6,12,18,24,30],[10,20,30,40,50],[4,4,4,4,4],[4.5,4.5,4.5,4.5,4.5],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"6/12/18/24/30","10/20/30/40/50","4","4.5","1","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.1,"key":"a2"}],"costType":"Passive","maxammo":"-1","range":[680,680,680,680,680],"rangeBurn":"680","image":{"full":"ToxicShot.png","sprite":"spell11.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"Passive"},{"id":"TeemoRCast","name":"Noxious Trap","description":"Teemo throws an explosive poisonous trap using one of the mushrooms stored in his pack. If an enemy steps on the trap, it will release a poisonous cloud, slowing enemies and damaging them over time. If Teemo throws a mushroom onto another mushroom it will bounce, gaining additional range.","tooltip":"Tosses a stored mushroom as a trap that detonates if an enemy steps on it, spreading poison to nearby enemies that slows Movement Speed by {{ e2 }}%, reveals them and deals {{ e1 }} (+{{ a1 }}) magic damage over {{ e9 }} seconds.
Traps last {{ e5 }} minutes and take {{ e4 }} second to arm and stealth. If a thrown trap lands on another trap, it will bounce up to {{ e6 }} Teemos further before planting.
Teemo forages for a mushroom every {{ f1 }} seconds, but he is only big enough to carry 3 at once.","leveltip":{"label":["Damage ","Slow Percent","Max Bounce Range","Forage Timer","Cast Range"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }}% -> {{ e2NL }}%","{{ e6 }} Teemos -> {{ e6NL }} Teemos"," {{ f1 }} -> {{ f2 }}"," {{ e8 }} -> {{ e8NL }}"]},"maxrank":3,"cooldown":[0.25,0.25,0.25],"cooldownBurn":"0.25","cost":[75,75,75],"costBurn":"75","effect":[null,[200,325,450],[30,40,50],[75,75,75],[1,1,1],[5,5,5],[3,4,5],[30,25,20],[400,650,900],[4,4,4],[450,450,450]],"effectBurn":[null,"200/325/450","30/40/50","75","1","5","3/4/5","30/25/20","400/650/900","4","450"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"3","range":[400,650,900],"rangeBurn":"400/650/900","image":{"full":"TeemoRCast.png","sprite":"spell11.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Thresh":{"id":412,"key":"Thresh","name":"Thresh","title":"the Chain Warden","spells":[{"id":"ThreshQ","name":"Death Sentence","description":"Thresh binds an enemy in chains and pulls them toward him. Activating this ability a second time pulls Thresh to the enemy.","tooltip":"Thresh throws out his scythe, dealing {{ e1 }} (+{{ a1 }}) magic damage, granting True Sight and stunning the first unit hit, pulling them in for {{ e2 }} seconds.
Reactivating this ability will pull Thresh to the bound enemy.
Death Sentence's cooldown is reduced by {{ e4 }} seconds if it hits an enemy.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[80,120,160,200,240],[1.5,1.5,1.5,1.5,1.5],[75,75,75,75,75],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","1.5","75","3","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1075,1075,1075,1075,1075],"rangeBurn":"1075","image":{"full":"ThreshQ.png","sprite":"spell11.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ThreshW","name":"Dark Passage","description":"Thresh throws out a lantern that shields nearby allied Champions from damage. Allies can click the lantern to dash to Thresh.","tooltip":"Thresh throws the Lantern to a target location. If an ally clicks on it Thresh will pull both the Lantern and his ally to him.
The Lantern grants a shield lasting {{ e5 }} seconds that absorbs up to {{ e1 }} (+{{ f6 }}) damage to Thresh and up to one ally if they come near it. The shield amount scales with the number of souls Thresh has collected.","leveltip":{"label":["Shield Absorption","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[22,20.5,19,17.5,16],"cooldownBurn":"22/20.5/19/17.5/16","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[60,100,140,180,220],[1,1,1,1,1],[0,0,0,0,0],[6,6,6,6,6],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","1","0","6","4","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"ThreshW.png","sprite":"spell11.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ThreshE","name":"Flay","description":"Thresh's attacks wind up, dealing more damage the longer he waits between attacks. When activated, Thresh sweeps his chain, knocking all enemies hit in the direction of the blow.","tooltip":"Passive: Thresh's basic attacks deal from {{ f3 }} to {{ f3 }}(+{{ f2 }}) additional magic damage, which builds up while not attacking (total souls collected plus up to {{ e3 }}% total Attack Damage).
Active: Deals {{ e1 }} (+{{ a1 }}) magic damage in a line beginning behind Thresh. Enemies hit are pushed in the direction of the swing, then slowed by {{ e2 }}% for {{ e4 }} second.
Cast forward to push; cast backward to pull.","leveltip":{"label":["Passive Damage","Active Damage","Slow","Mana Cost"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,9,9,9,9],"cooldownBurn":"9","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[65,95,125,155,185],[20,25,30,35,40],[80,110,140,170,200],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/95/125/155/185","20/25/30/35/40","80/110/140/170/200","1","1","1","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500,500,500],"rangeBurn":"500","image":{"full":"ThreshE.png","sprite":"spell11.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ThreshRPenta","name":"The Box","description":"A prison of walls that slow and deal damage if broken.","tooltip":"Thresh creates a prison of spectral walls around himself. Enemy champions who walk through a wall suffer {{ e1 }} (+{{ a1 }}) magic damage and are slowed by {{ e3 }}% for {{ e2 }} seconds, but break that wall.
Once one wall is broken, the remaining walls deal no damage and apply half slow duration. An enemy cannot be affected by multiple walls simultaneously.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,120,100],"cooldownBurn":"140/120/100","cost":[100,100,100],"costBurn":"100","effect":[null,[250,400,550],[2,2,2],[99,99,99],[4,4,4],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"250/400/550","2","99","4","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450],"rangeBurn":"450","image":{"full":"ThreshRPenta.png","sprite":"spell11.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Tristana":{"id":18,"key":"Tristana","name":"Tristana","title":"the Yordle Gunner","spells":[{"id":"TristanaQ","name":"Rapid Fire","description":"Tristana fires her weapon rapidly, increasing her Attack Speed for a short time.","tooltip":"Active: Increases Tristana's Attack Speed by {{ e1 }}% for {{ e2 }} seconds.","leveltip":{"label":["Attack Speed %","Cooldown"],"effect":[" {{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,19,18,17,16],"cooldownBurn":"20/19/18/17/16","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,50,70,90,110],[7,7,7,7,7],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","7","0","0","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"TristanaQ.png","sprite":"spell11.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"TristanaW","name":"Rocket Jump","description":"Tristana fires at the ground to propel her to a distant location, dealing damage and slowing surrounding units for a brief period where she lands.","tooltip":"Tristana launches herself to target location, dealing {{ e1 }} (+{{ a1 }}) Magic Damage and slowing surrounding enemies by {{ e3 }}% for {{ e2 }} seconds.
Kills, Assists, and max stack Explosive Charge detonations on Champions reset Rocket Jump's cooldown.","leveltip":{"label":["Damage","Slow Duration","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[22,20,18,16,14],"cooldownBurn":"22/20/18/16/14","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[60,110,160,210,260],[1,1.5,2,2.5,3],[60,60,60,60,60],[350,350,350,350,350],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/110/160/210/260","1/1.5/2/2.5/3","60","350","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"TristanaW.png","sprite":"spell11.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TristanaE","name":"Explosive Charge","description":"When Tristana kills a unit, her cannonballs burst into shrapnel, dealing damage to surrounding enemies. Can be activated to place a bomb on a target enemy that explodes after a short duration dealing damage to surrounding units.","tooltip":"Passive: Enemies explode when slain by Tristana's basic attacks, dealing {{ e1 }} (+{{ a2 }}) Magic Damage to nearby enemies.
Active: Places a bomb on an enemy or turret that explodes after 4 seconds, dealing {{ e4 }} (+{{ f1 }})(+{{ a1 }}) Physical Damage. Each attack and ability charges the bomb's damage by +{{ e6 }}%.
At 4 charges, the bomb explodes immediately. The detonation radius is twice as large if used on a turret.","leveltip":{"label":["Passive Explosion Damage","Base Charge Damage","Mana Cost","Bonus Attack Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}","{{ e5 }}% -> {{ e5NL }}%"]},"maxrank":5,"cooldown":[16,15.5,15,14.5,14],"cooldownBurn":"16/15.5/15/14.5/14","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[50,75,100,125,150],[4,4,4,4,4],[300,300,300,300,300],[60,70,80,90,100],[50,65,80,95,110],[30,30,30,30,30],[500,500,500,500,500],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/75/100/125/150","4","300","60/70/80/90/100","50/65/80/95/110","30","500","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a2"},{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550,550,550],"rangeBurn":"550","image":{"full":"TristanaE.png","sprite":"spell11.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TristanaR","name":"Buster Shot","description":"Tristana loads a massive cannonball into her weapon and fires it at an enemy unit. This deals Magic Damage and knocks the target back. If the target is carrying the Explosive Charge bomb, the bomb detonation radius is doubled.","tooltip":"Tristana fires a massive cannonball at an enemy unit. This deals {{ e1 }} (+{{ a1 }}) Magic Damage and knocks surrounding units back {{ e2 }} distance.","leveltip":{"label":["Damage","Knockback Distance","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}"," {{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[100,100,100],"costBurn":"100","effect":[null,[300,400,500],[600,800,1000],[200,200,200],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"300/400/500","600/800/1000","200","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[550,550,550],"rangeBurn":"550","image":{"full":"TristanaR.png","sprite":"spell11.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Trundle":{"id":48,"key":"Trundle","name":"Trundle","title":"the Troll King","spells":[{"id":"TrundleTrollSmash","name":"Chomp","description":"Trundle bites his opponent, dealing damage, briefly slowing and sapping some of their Attack Damage.","tooltip":"Trundle lunges at his opponent with his next basic attack, dealing {{ e1 }} (+{{ f1 }}) physical damage and briefly slowing his target.
This attack increases Trundle's Attack Damage by {{ e3 }} for {{ e6 }} seconds, with his opponent losing half of this amount.","leveltip":{"label":["Damage","Attack Damage","Attack Damage Scaling"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[4,4,4,4,4],"cooldownBurn":"4","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[20,40,60,80,100],[100,105,110,115,120],[20,25,30,35,40],[-10,-12.5,-15,-17.5,-20],[7,7,7,7,7],[8,8,8,8,8],[0.75,0.75,0.75,0.75,0.75],[0.1,0.1,0.1,0.1,0.1],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/40/60/80/100","100/105/110/115/120","20/25/30/35/40","-10/-12.5/-15/-17.5/-20","7","8","0.75","0.1","0","0"],"vars":[{"link":"attackdamage","coeff":[0.8,0.9,1,1.1,1.2],"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"TrundleTrollSmash.png","sprite":"spell11.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"trundledesecrate","name":"Frozen Domain","description":"Trundle turns target location into his domain, gaining Attack Speed, Movement Speed, and increased healing from all sources while on it.","tooltip":"Trundle coats target location with ice for {{ e4 }} seconds, gaining {{ e1 }}% Movement Speed, {{ e2 }}% Attack Speed and {{ e3 }}% increased healing and regeneration from all sources.","leveltip":{"label":["Movement Speed","Attack Speed"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[20,25,30,35,40],[20,35,50,65,80],[20,20,20,20,20],[8,8,8,8,8],[775,775,775,775,775],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/25/30/35/40","20/35/50/65/80","20","8","775","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"trundledesecrate.png","sprite":"spell11.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TrundleCircle","name":"Pillar of Ice","description":"Trundle creates an ice pillar at target location, becoming impassable terrain and slowing all nearby enemy units.","tooltip":"Trundle creates an icy pillar at target location for {{ e1 }} seconds, becoming impassable terrain and slowing all nearby enemy units by {{ e2 }}%.","leveltip":{"label":["Cooldown","Slow"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[22,20,18,16,14],"cooldownBurn":"22/20/18/16/14","cost":[75,75,75,75,75],"costBurn":"75","effect":[null,[6,6,6,6,6],[30,35,40,45,50],[360,360,360,360,360],[225,225,225,225,225],[150,150,150,150,150],[225,225,225,225,225],[400,400,400,400,400],[60,60,60,60,60],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"6","30/35/40/45/50","360","225","150","225","400","60","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"TrundleCircle.png","sprite":"spell11.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TrundlePain","name":"Subjugate","description":"Trundle immediately steals a percent of his target's Health, Armor and Magic Resistance. Over the next 4 seconds the amount of Health, Armor, and Magic Resistance stolen is doubled.","tooltip":"Trundle drains {{ e1 }} (+{{ a1 }})% of an enemy champion's maximum Health as Magic Damage and {{ e2 }}% of their Armor and Magic Resist, half immediately and half over {{ e3 }} seconds. The Armor and Magic Resist is returned {{ e3 }} seconds after the drain ends.","leveltip":{"label":["Health Drain","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,90,70],"cooldownBurn":"110/90/70","cost":[100,100,100],"costBurn":"100","effect":[null,[20,27.5,35],[40,40,40],[4,4,4],[4,4,4],[8,8,8],[0.5,0.5,0.5],[5,5,5],[0.02,0.02,0.02],[0,0,0],[0,0,0]],"effectBurn":[null,"20/27.5/35","40","4","4","8","0.5","5","0.02","0","0"],"vars":[{"link":"spelldamage","coeff":0.02,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"TrundlePain.png","sprite":"spell11.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Tryndamere":{"id":23,"key":"Tryndamere","name":"Tryndamere","title":"the Barbarian King","spells":[{"id":"TryndamereQ","name":"Bloodlust","description":"Tryndamere thrives on the thrills of combat, increasing his Attack Damage as he is more and more wounded. He can cast Bloodlust to consume his Fury and heal himself.","tooltip":"Passive: Tryndamere thirsts for blood, gaining {{ e1 }} Attack Damage plus {{ e2 }} per 1% Health missing.
Active: Tryndamere consumes his Fury, restoring {{ e3 }} (+{{ a1 }}) Health, plus {{ e4 }} (+{{ f2 }}) Health per Fury consumed.","leveltip":{"label":["Attack Damage","Attack Damage per Health % Missing","Heal","Heal Per Fury"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}","{{ e4 }} -> {{ e4NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[5,10,15,20,25],[0.15,0.2,0.25,0.3,0.35],[30,40,50,60,70],[0.5,0.95,1.4,1.85,2.3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"5/10/15/20/25","0.15/0.2/0.25/0.3/0.35","30/40/50/60/70","0.5/0.95/1.4/1.85/2.3","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"TryndamereQ.png","sprite":"spell11.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"TryndamereW","name":"Mocking Shout","description":"Tryndamere lets out an insulting cry, decreasing surrounding champions' Attack Damage. Enemies with their backs turned to Tryndamere also have their Movement Speed reduced.","tooltip":"Decreases surrounding champions' Attack Damage by {{ e1 }} for {{ e3 }} seconds, and enemies with their backs turned also have their Movement Speed reduced by {{ e2 }}% for {{ e4 }} seconds.","leveltip":{"label":["Attack Damage Reduction","Movement Speed Reduction"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[14,14,14,14,14],"cooldownBurn":"14","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,35,50,65,80],[30,37.5,45,52.5,60],[4,4,4,4,4],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/35/50/65/80","30/37.5/45/52.5/60","4","4","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"TryndamereW.png","sprite":"spell11.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"TryndamereE","name":"Spinning Slash","description":"Tryndamere slices toward a target unit, dealing damage to enemies in his path.","tooltip":"Tryndamere spins through his enemies, dealing {{ e1 }} (+{{ f1 }})(+{{ a1 }}) physical damage to enemies in his path and generating Fury.
Spinning Slash's cooldown is reduced by {{ e2 }} second whenever Tryndamere critically strikes. This reduction is increased to {{ e3 }} seconds against champions.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[70,100,130,160,190],[1,1,1,1,1],[2,2,2,2,2],[2,2,2,2,2],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","1","2","2","5","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"TryndamereE.png","sprite":"spell11.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"UndyingRage","name":"Undying Rage","description":"Tryndamere's lust for battle becomes so strong that he is unable to die, no matter how wounded he becomes.","tooltip":"Tryndamere becomes completely immune to death for {{ e3 }} seconds, refusing to be reduced below {{ e2 }} Health and instantly gaining {{ e1 }} Fury.","leveltip":{"label":["Fury Gained","Minimum Health","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,100,90],"cooldownBurn":"110/100/90","cost":[0,0,0],"costBurn":"0","effect":[null,[50,75,100],[30,50,70],[5,5,5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"50/75/100","30/50/70","5","0","0","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[400,400,400],"rangeBurn":"400","image":{"full":"UndyingRage.png","sprite":"spell11.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"TwistedFate":{"id":4,"key":"TwistedFate","name":"Twisted Fate","title":"the Card Master","spells":[{"id":"WildCards","name":"Wild Cards","description":"Twisted Fate throws three cards, dealing damage to each enemy unit they pass through.","tooltip":"Throws three cards that deal {{ e1 }} (+{{ a1 }}) Magic Damage to each enemy unit they pass through.","leveltip":{"label":["Damage","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[60,70,80,90,100],"costBurn":"60/70/80/90/100","effect":[null,[60,105,150,195,240],[40,55,70,85,100],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/105/150/195/240","40/55/70/85/100","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.65,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[10000,10000,10000,10000,10000],"rangeBurn":"10000","image":{"full":"WildCards.png","sprite":"spell11.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"PickACard","name":"Pick A Card","description":"Twisted Fate chooses a magic card from his deck, and uses that for his next attack, causing bonus effects.","tooltip":"Cast once to shuffle the deck and again to choose your card, enhancing your next attack.
Blue Card deals {{ e1 }} (+{{ a2 }})(+{{ a1 }}) Magic Damage and restores {{ e6 }} Mana.
Red Card deals {{ e4 }} (+{{ a2 }})(+{{ a1 }}) Magic Damage to units around the target and slows their Movement Speed by {{ e2 }}% for 2.5 seconds.
In addition, his Attack Speed is increased by {{ e3 }}%.","leveltip":{"label":["Bonus Damage","Attack Speed Increase"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[55,80,105,130,155],[0,0,0,0,0],[10,15,20,25,30],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"55/80/105/130/155","0","10/15/20/25/30","4","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":"","maxammo":"-1","range":[0,0,0,0,0],"rangeBurn":"0","image":{"full":"CardmasterStack.png","sprite":"spell11.png","group":"spell","x":48,"y":144,"w":48,"h":48}},{"id":"Destiny","name":"Destiny","description":"Twisted Fate predicts the fortunes of his foes, revealing all enemy champions and enabling the use of Gate, which teleports Twisted Fate to any target location in 1.5 seconds.","tooltip":"Grants True Sight all enemy champions on the map for {{ e1 }} seconds.
While Destiny is active, Twisted Fate can teleport up to {{ e4 }} units away in 1.5 seconds.","leveltip":{"label":["Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":3,"cooldown":[180,150,120],"cooldownBurn":"180/150/120","cost":[150,125,100],"costBurn":"150/125/100","effect":[null,[6,8,10],[180,150,120],[150,125,100],[5500,5500,5500],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"6/8/10","180/150/120","150/125/100","5500","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[5500,5500,5500],"rangeBurn":"5500","image":{"full":"Destiny.png","sprite":"spell11.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Twitch":{"id":29,"key":"Twitch","name":"Twitch","title":"the Plague Rat","spells":[{"id":"TwitchHideInShadows","name":"Ambush","description":"Twitch becomes Camouflaged for a short duration and gains Movement Speed. When leaving Camouflage, Twitch gains Attack Speed for a short duration.
When an enemy champion with Deadly Venom dies, Ambush's cooldown is reset.","tooltip":"Twitch becomes Camouflaged and gains {{ e3 }}% Movement Speed for {{ e2 }} seconds. This bonus triples when he is nearby an enemy champion that cannot see him.
Twitch gains {{ e1 }}% Attack Speed for {{ e6 }} seconds after exiting Ambush. Ambush resets when a champion dies while affected by Deadly Venom.
Stealth - Camouflage: Twitch is hidden from view while enemy champions remain outside his detection radius. Attacking or casting spells ends Camouflage.","leveltip":{"label":["Camouflage Duration","Attack Speed"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[30,35,40,45,50],[10,11,12,13,14],[10,10,10,10,10],[1,1,1,1,1],[1,1,1,1,1],[5,5,5,5,5],[3,3,3,3,3],[500,500,500,500,500],[1000,1000,1000,1000,1000],[30,30,30,30,30]],"effectBurn":[null,"30/35/40/45/50","10/11/12/13/14","10","1","1","5","3","500","1000","30"],"vars":[],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"TwitchHideInShadows.png","sprite":"spell11.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TwitchVenomCask","name":"Venom Cask","description":"Twitch hurls a cask of venom that explodes in an area, slowing targets and applying deadly venom to the target.","tooltip":"Twitch hurls a cask that adds a stack of Deadly Venom to all enemies struck and leaves behind a toxic cloud that persists for {{ e3 }} seconds.
Enemies that remain within the cloud have {{ e2 }}% reduced Movement Speed and receive an additional stack of Deadly Venom each second.","leveltip":{"label":["Slow Amount","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[2,2,2,2,2],[25,30,35,40,45],[3,3,3,3,3],[300,300,300,300,300],[3.5,3.5,3.5,3.5,3.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2","25/30/35/40/45","3","300","3.5","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[950,950,950,950,950],"rangeBurn":"950","image":{"full":"TwitchVenomCask.png","sprite":"spell11.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TwitchExpunge","name":"Contaminate","description":"Twitch wreaks further havoc on poisoned enemies with a blast of his vile diseases.","tooltip":"Deals {{ e2 }} physical damage plus {{ e1 }} (+{{ a1 }})(+{{ f1 }}) per stack of Deadly Venom to all nearby enemies affected by Deadly Venom.(Max Stack Damage: {{ f2 }})","leveltip":{"label":["Base Damage","Damage per Stack","Mana Cost","Cooldown"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[15,20,25,30,35],[20,35,50,65,80],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","20/35/50/65/80","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200,1200,1200],"rangeBurn":"1200","image":{"full":"TwitchExpunge.png","sprite":"spell11.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"TwitchFullAutomatic","name":"Spray and Pray","description":"Twitch unleashes the full power of his crossbow, shooting bolts over a great distance that pierce all enemies caught in their path.","tooltip":"For {{ e2 }} seconds Twitch gains {{ e5 }} Attack Range and {{ e1 }} Bonus Attack Damage.
For the duration, his basic attacks become piercing bolts that deal {{ e3 }}% less damage to subsequent targets, down to a minimum of {{ e4 }}% damage.
Stealth - Camouflage: Activating Spray and Pray does not end Camouflage.","leveltip":{"label":["Attack Damage Bonus"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":3,"cooldown":[90,90,90],"cooldownBurn":"90","cost":[100,100,100],"costBurn":"100","effect":[null,[20,30,40],[5,5,5],[20,20,20],[40,40,40],[300,300,300],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"20/30/40","5","20","40","300","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200],"rangeBurn":"1200","image":{"full":"TwitchFullAutomatic.png","sprite":"spell11.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Udyr":{"id":77,"key":"Udyr","name":"Udyr","title":"the Spirit Walker","spells":[{"id":"UdyrTigerStance","name":"Tiger Stance","description":"Tiger Stance: Activation - Udyr's Attack Speed is increased for a few seconds. Persistent Effect - Udyr's first attack and every third attack after will deal a high amount of damage over 2 seconds.","tooltip":"Persistent Effect: Udyr's first attack and every third attack after will perform a Tiger Strike, dealing bonus {{ e1 }} (+{{ f2 }}) physical damage over {{ e5 }} seconds.
If a target is affected by Tiger Strike, a new application of Tiger Strike will deal the remaining damage instantly.
Activation: Increases Attack Speed by {{ e2 }}% for {{ e6 }} seconds.
Udyr's stance mana costs decrease by 1 each time he levels up.","leveltip":{"label":["Tiger Strike Damage","Attack Speed","Tiger Strike Scaling"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ e4 }}% -> {{ e4NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[30,60,90,120,150],[30,40,50,60,70],[0.15,0.15,0.15,0.15,0.15],[120,130,140,150,160],[2,2,2,2,2],[5,5,5,5,5],[0.5,0.5,0.5,0.5,0.5],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/60/90/120/150","30/40/50/60/70","0.15","120/130/140/150/160","2","5","0.5","0.25","0","0"],"vars":[{"link":"attackdamage","coeff":[1.2,1.3,1.4,1.5,1.6],"key":"f2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"UdyrTigerStance.png","sprite":"spell11.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UdyrTurtleStance","name":"Turtle Stance","description":"Turtle Stance: Activation - Udyr gains a temporary shield that absorbs damage. Persistent Effect - Udyr's first attack and every third attack after heals him for 2.5% of his maximum health.","tooltip":"Persistent Effect: Udyr's first attack and every third attack after heals him for (+{{ f1 }}) ({{ e4 }}% of his maximum health), increasing by 1% for every percent of Udyr's missing health.
Activation: Gains a shield that absorbs {{ e1 }} (+{{ a1 }}) damage for {{ e3 }} seconds.
Udyr's stance mana costs decrease by 1 each time he levels up.","leveltip":{"label":["Shield Amount"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[60,95,130,165,200],[0,0,0,0,0],[5,5,5,5,5],[2.5,2.5,2.5,2.5,2.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","0","5","2.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"UdyrTurtleStance.png","sprite":"spell11.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UdyrBearStance","name":"Bear Stance","description":"Bear Stance: Activation - Udyr increases Movement Speed for a short duration. Persistent Effect - Udyr's basic attacks stun his target for 1 second. This effect cannot occur on the same target for several seconds.","tooltip":"Persistent Effect: Basic attacks stun the target for {{ e3 }} second. This effect cannot occur on the same target again for {{ e4 }} seconds.
Activation: Increases Movement Speed by {{ e1 }}% and ignores unit collision for {{ e2 }} seconds.
Udyr's stance mana costs decrease by 1 each time he levels up.","leveltip":{"label":["Movement Speed Increase","Movement Speed Duration"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[15,20,25,30,35],[2,2.25,2.5,2.75,3],[1,1,1,1,1],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","2/2.25/2.5/2.75/3","1","5","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"UdyrBearStance.png","sprite":"spell11.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UdyrPhoenixStance","name":"Phoenix Stance","description":"Phoenix Stance: Activation - Udyr unleashes pulsing waves of fire, dealing damage to nearby enemies. Persistent Effect - Udyr's first attack and every third attack after engulfs enemies in front of him with flames.","tooltip":"Persistent Effect: Udyr's first attack and every third attack after burns enemies in front of him, dealing {{ e2 }} (+{{ a1 }}) magic damage.
Activation: Unleashes pulsing waves of fire, dealing {{ e1 }} (+{{ a2 }}) magic damage each second to nearby enemies for {{ e5 }} seconds.
Udyr's stance mana costs decrease by 1 each time he levels up.","leveltip":{"label":["Pulse Damage","Flame Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[45,45,45,45,45],"costBurn":"45","effect":[null,[10,20,30,40,50],[40,80,120,160,200],[16,24,32,40,48],[1,1,1,1,1],[4,4,4,4,4],[325,325,325,325,325],[400,400,400,400,400],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/20/30/40/50","40/80/120/160/200","16/24/32/40/48","1","4","325","400","3","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"},{"link":"spelldamage","coeff":0.25,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[325,325,325,325,325],"rangeBurn":"325","image":{"full":"UdyrPhoenixStance.png","sprite":"spell12.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Urgot":{"id":6,"key":"Urgot","name":"Urgot","title":"the Headsman's Pride","spells":[{"id":"UrgotHeatseekingMissile","name":"Acid Hunter","description":"Urgot fires an Acid Hunter missile that collides with the first enemy it hits, slowing the target if he has his Terror Capacitor up. Acid Hunter missile-locks on enemies affected by Noxian Corrosive Charge.","tooltip":"Urgot fires a missile toward the cursor that deals {{ e1 }} (+{{ a1 }}) physical damage. If Acid Hunter kills a unit half its mana cost is refunded.
Missile-lock can be achieved by holding the cursor over a target afflicted by Noxian Corrosive Charge.","leveltip":{"label":["Damage"],"effect":[" {{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[2,2,2,2,2],"cooldownBurn":"2","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[10,40,70,100,130],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/40/70/100/130","0.5","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":0.85,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"UrgotHeatseekingMissile.png","sprite":"spell12.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UrgotTerrorCapacitorActive2","name":"Terror Capacitor","description":"Urgot charges up his capacitor to gain a shield. While the shield is active, Urgot gains slowing attacks.","tooltip":"Urgot charges up his terror capacitor to gain a shield that absorbs {{ e1 }} (+{{ a1 }}) plus {{ e4 }}% of his maximum mana (+{{ f1 }}) damage for 5 seconds. While the shield is active, Urgot's attacks and missiles slow targets by {{ e2 }}%. ","leveltip":{"label":["Damage Absorption ","Slow % ","Cooldown","Mana Cost"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}% ","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[55,60,65,70,75],"costBurn":"55/60/65/70/75","effect":[null,[60,100,140,180,220],[20,25,30,35,40],[4,6,8,10,12],[8,8,8,8,8],[1.5,1.5,1.5,1.5,1.5],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/100/140/180/220","20/25/30/35/40","4/6/8/10/12","8","1.5","5","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.8,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"UrgotTerrorCapacitorActive2.png","sprite":"spell12.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UrgotPlasmaGrenade","name":"Noxian Corrosive Charge","description":"Urgot launches a corrosive charge that damages enemies in an area and reduces their Armor.","tooltip":"Urgot launches a Corrosive Charge at a target location. Enemies afflicted by the charge have their Armor reduced by {{ e2 }}% and take {{ e1 }} (+{{ f1 }}) physical damage over {{ e3 }} seconds.
Acid Hunter is able to missile-lock onto targets affected by Noxian Corrosive Charge.","leveltip":{"label":["Damage","Armor Reduction","Cooldown","Mana Cost"],"effect":[" {{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[75,130,185,240,295],[12,14,16,18,20],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/130/185/240/295","12/14/16/18/20","5","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"UrgotPlasmaGrenade.png","sprite":"spell12.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"UrgotSwap2","name":"Hyper-Kinetic Position Reverser","description":"Urgot charges up his Hyper-Kinetic Position Reverser, swapping positions with the target and terrifying nearby enemies for 1.5 seconds. His target is suppressed for the duration of the channel. He gains Damage Reduction during and after the swap.","tooltip":"Urgot targets an enemy champion and channels his Hyper-Kinetic Position Reverser for 1 second, swapping locations with his target afterward and terrifying nearby enemies for 1.5 seconds. His target is suppressed for the duration of the channel.
Urgot takes {{ e2 }}% reduced damage for {{ e4 }} seconds beginning at the start of the channel, and his target is slowed by 40% for 3 seconds after being swapped.","leveltip":{"label":["Swap Range","Damage Reduction","Cooldown "],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[550,700,850],[30,40,50],[200,250,300],[5,5,5],[1.5,1.5,1.5],[40,40,40],[3,3,3],[1,1,1],[0,0,0],[0,0,0]],"effectBurn":[null,"550/700/850","30/40/50","200/250/300","5","1.5","40","3","1","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[550,700,850],"rangeBurn":"550/700/850","image":{"full":"UrgotSwap2.png","sprite":"spell12.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Varus":{"id":110,"key":"Varus","name":"Varus","title":"the Arrow of Retribution","spells":[{"id":"VarusQ","name":"Piercing Arrow","description":"Varus readies and then fires a powerful shot that gains extra range and damage the longer he spends preparing to fire.","tooltip":"First Cast: Varus starts drawing back his next shot, gradually increasing its range and damage. While preparing to shoot Varus' Movement Speed is slowed by {{ e7 }}%. After {{ e5 }} seconds, Piercing Arrow fails but refunds {{ e4 }}% of its Mana cost.
Second Cast: Varus fires, dealing {{ e1 }} (+{{ a1 }}) to {{ e2 }} (+{{ a2 }}) physical damage, reduced by {{ e3 }}% per enemy hit (minimum {{ e9 }}%).
Piercing Arrow's cooldown is reduced by {{ f1 }} seconds if the arrow detonates Blight stacks from at least one enemy champion.","leveltip":{"label":["Max Damage","Cooldown","Mana Cost"],"effect":["{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[10,47,84,120,157],[15,70,125,180,235],[15,15,15,15,15],[50,50,50,50,50],[4,4,4,4,4],[4,4,4,4,4],[20,20,20,20,20],[0,0,0,0,0],[33,33,33,33,33],[0,0,0,0,0]],"effectBurn":[null,"10/47/84/120/157","15/70/125/180/235","15","50","4","4","20","0","33","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"},{"link":"attackdamage","coeff":1.5,"key":"a2"},{"link":"attackdamage","coeff":1,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"VarusQ.png","sprite":"spell12.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VarusW","name":"Blighted Quiver","description":"Varus' basic attacks deal bonus magic damage and apply Blight. Varus' other abilities detonate Blight, dealing magic damage based on the target's maximum Health.","tooltip":"Varus' basic attacks deal {{ e1 }} (+{{ a1 }}) bonus magic damage and apply Blight for {{ e3 }} seconds (stacks {{ e4 }} times).
Varus' other abilities detonate Blight, dealing magic damage equal to {{ e2 }}% (+{{ a2 }}%) of the target's maximum Health per stack. Max damage vs. monsters: {{ e5 }} per stack.","leveltip":{"label":["Initial Damage","Max Health Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[10,14,18,22,26],[2,2.75,3.5,4.25,5],[6,6,6,6,6],[3,3,3,3,3],[120,120,120,120,120],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/14/18/22/26","2/2.75/3.5/4.25/5","6","3","120","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.25,"key":"a1"},{"link":"spelldamage","coeff":0.02,"key":"a2"}],"costType":"Passive","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"VarusW.png","sprite":"spell12.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"Passive"},{"id":"VarusE","name":"Hail of Arrows","description":"Varus fires a hail of arrows that deal physical damage and desecrate the ground. Desecrated ground slows enemies' Movement Speed and reduces their self healing and regeneration. ","tooltip":"Varus fires a hail of arrows that deals {{ e1 }} (+{{ a1 }}) physical damage and desecrates the ground for {{ e3 }} seconds.
Desecrated Ground slows enemy Movement Speed by {{ e2 }}% and reduces healing effects by {{ e4 }}%.","leveltip":{"label":["Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[18,16,14,12,10],"cooldownBurn":"18/16/14/12/10","cost":[80,80,80,80,80],"costBurn":"80","effect":[null,[65,100,135,170,205],[25,30,35,40,45],[4,4,4,4,4],[40,40,40,40,40],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/100/135/170/205","25/30/35/40/45","4","40","300","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[925,925,925,925,925],"rangeBurn":"925","image":{"full":"VarusE.png","sprite":"spell12.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VarusR","name":"Chain of Corruption","description":"Varus flings out a damaging tendril of corruption that immobilizes the first enemy champion hit and then spreads towards nearby uninfected champions, immobilizing them too on contact. ","tooltip":"Varus flings out a tendril of corruption that deals {{ e1 }} (+{{ a1 }}) magic damage and immobilizes the first enemy champion hit for {{ e2 }} seconds.
The corruption then spreads towards nearby uninfected enemy champions. If it reaches them, they take the same damage and are also immobilized. Immobilized units gain {{ e4 }} Blight stacks over the duration.","leveltip":{"label":["Damage ","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,90,70],"cooldownBurn":"110/90/70","cost":[100,100,100],"costBurn":"100","effect":[null,[100,175,250],[2,2,2],[650,650,650],[3,3,3],[0.5,0.5,0.5],[600,600,600],[1.75,1.75,1.75],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/175/250","2","650","3","0.5","600","1.75","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1200,1200,1200],"rangeBurn":"1200","image":{"full":"VarusR.png","sprite":"spell12.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Vayne":{"id":67,"key":"Vayne","name":"Vayne","title":"the Night Hunter","spells":[{"id":"VayneTumble","name":"Tumble","description":"Vayne tumbles, maneuvering to carefully place her next shot. Her next attack deals bonus damage.","tooltip":"Rolls a short distance. The next basic attack within {{ e1 }} seconds deals {{ f1 }} bonus physical damage, equal to {{ e2 }}% of total Attack Damage.","leveltip":{"label":["Bonus Damage","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[6,5,4,3,2],"cooldownBurn":"6/5/4/3/2","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[7,7,7,7,7],[30,35,40,45,50],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"7","30/35/40/45/50","4","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":[0.3,0.35,0.4,0.45,0.5],"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"VayneTumble.png","sprite":"spell12.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VayneSilveredBolts","name":"Silver Bolts","description":"Vayne tips her bolts with a rare metal, toxic to evil things. The third consecutive attack or ability against the same target deals a percentage of the target's maximum Health as bonus true damage. (Max: 200 damage vs. Monsters)","tooltip":"Every third consecutive attack or ability against an enemy deals an additional {{ e1 }}% of the enemy's maximum Health as true damage.
Deals a maximum of 200 damage vs. Monsters and a minimum of {{ e2 }} damage vs. all targets.","leveltip":{"label":["Max Health Damage","Minimum Damage"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[6,7.5,9,10.5,12],[40,60,80,100,120],[200,200,200,200,200],[3.5,3.5,3.5,3.5,3.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"6/7.5/9/10.5/12","40/60/80/100/120","200","3.5","0","0","0","0","0","0"],"vars":[],"costType":"Passive","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"VayneSilveredBolts.png","sprite":"spell12.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"Passive"},{"id":"VayneCondemn","name":"Condemn","description":"Vayne draws a heavy crossbow from her back, and fires a huge bolt at her target, knocking them back and dealing damage. If they collide with terrain, they are impaled, dealing bonus damage and stunning them.","tooltip":"Fires a bolt that knocks back target enemy and deals {{ e1 }} (+{{ f1 }}) physical damage. Enemies that collide with terrain take {{ e2 }} (+{{ f1 }}) additional physical damage and are stunned for {{ e3 }} seconds.","leveltip":{"label":["Initial Damage","Collision Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[90,90,90,90,90],"costBurn":"90","effect":[null,[45,80,115,150,185],[45,80,115,150,185],[1.5,1.5,1.5,1.5,1.5],[475,475,475,475,475],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"45/80/115/150/185","45/80/115/150/185","1.5","475","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.5,"key":"f1"},{"link":"bonusattackdamage","coeff":0.5,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[710,710,710,710,710],"rangeBurn":"710","image":{"full":"VayneCondemn.png","sprite":"spell12.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VayneInquisition","name":"Final Hour","description":"Readying herself for an epic confrontation, Vayne gains increased Attack Damage, Invisibility during Tumble, and triple the bonus Movement Speed from Night Hunter.","tooltip":"Gains {{ e1 }} Bonus Attack Damage for {{ e2 }} seconds. While active, Tumble grants Invisibility for {{ e3 }} second, and Night Hunter's bonus Movement Speed is increased to {{ e4 }}.
16","leveltip":{"label":["Bonus Attack Damage","Duration"],"effect":["{{ cooldown }} -> {{ cooldownNL }}","{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":3,"cooldown":[100,85,70],"cooldownBurn":"100/85/70","cost":[80,80,80],"costBurn":"80","effect":[null,[30,50,70],[8,10,12],[1,1,1],[90,90,90],[100,85,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"30/50/70","8/10/12","1","90","100/85/70","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1,1,1],"rangeBurn":"1","image":{"full":"VayneInquisition.png","sprite":"spell12.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Veigar":{"id":45,"key":"Veigar","name":"Veigar","title":"the Tiny Master of Evil","spells":[{"id":"VeigarBalefulStrike","name":"Baleful Strike","description":"Veigar unleashes a bolt of dark energy that deals magic damage to the first two enemies hit. Units killed by this bolt grant Veigar some ability power permanently.","tooltip":"Unleashes a bolt of dark energy, dealing {{ e1 }} (+{{ a1 }}) magic damage to the first two enemies hit.
Killing a unit with this also grants Veigar a stack of Phenomenal Evil. Large minions and large monsters grant two.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[70,110,150,190,230],[1,1,1,1,1],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","1","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"VeigarBalefulStrike.png","sprite":"spell12.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VeigarDarkMatter","name":"Dark Matter","description":"Veigar calls a great mass of dark matter to fall from the sky to the target location, dealing magic damage when it lands.","tooltip":"After 1.2 seconds, dark matter falls from the sky to the target location, dealing {{ e1 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9.5,9,8.5,8],"cooldownBurn":"10/9.5/9/8.5/8","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[100,150,200,250,300],[1.2,1.2,1.2,1.2,1.2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100/150/200/250/300","1.2","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"VeigarDarkMatter.png","sprite":"spell12.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VeigarEventHorizon","name":"Event Horizon","description":"After a brief delay Veigar twists the edges of space around the target location for 3 seconds, stunning enemies who pass through the perimeter.","tooltip":"After a {{ e2 }} second delay, Veigar twists the edges of space around the target location for 3 seconds, forming a pentagon of walls. Enemies who attempt to pass through the perimeter are stopped and stunned for {{ e1 }} seconds.","leveltip":{"label":["Stun Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[18,17,16,15,14],"cooldownBurn":"18/17/16/15/14","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[1.5,1.75,2,2.25,2.5],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"1.5/1.75/2/2.25/2.5","0.5","0","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[725,725,725,725,725],"rangeBurn":"725","image":{"full":"VeigarEventHorizon.png","sprite":"spell12.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VeigarR","name":"Primordial Burst","description":"Blasts target enemy champion, dealing a large amount of magic damage, increasing based on the target's missing health.","tooltip":"Blasts the target with primal magic to deal {{ e1 }} (+{{ a1 }}) to {{ e2 }} (+{{ a2 }}) magic damage, increasing based on the target's missing health.
Damage is maximized against enemies below 33% health.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[175,250,325],[350,500,650],[1,1,1],[2,2,2],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"175/250/325","350/500/650","1","2","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"},{"link":"spelldamage","coeff":1.5,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[650,650,650],"rangeBurn":"650","image":{"full":"VeigarR.png","sprite":"spell12.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Velkoz":{"id":161,"key":"Velkoz","name":"Vel'Koz","title":"the Eye of the Void","spells":[{"id":"VelkozQ","name":"Plasma Fission","description":"Vel'Koz shoots a bolt of plasma that splits in two on reactivation or upon hitting an enemy. The bolt slows and damages on hit.","tooltip":"Vel'Koz shoots a plasma bolt that deals {{ e1 }} (+{{ a1 }}) Magic Damage and applies a slow of {{ e5 }}% that decays over {{ e4 }} second(s).
Upon reactivation or upon hitting an enemy, the bolt splits at a 90 degree angle.
Killing a unit with this refunds {{ e2 }}% of the Mana Cost.","leveltip":{"label":["Damage","Slow Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[7,7,7,7,7],"cooldownBurn":"7","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[80,120,160,200,240],[50,50,50,50,50],[0.25,0.25,0.25,0.25,0.25],[1,1.4,1.8,2.2,2.6],[70,70,70,70,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","50","0.25","1/1.4/1.8/2.2/2.6","70","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"VelkozQ.png","sprite":"spell12.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VelkozW","name":"Void Rift","description":"Vel'Koz opens a rift to the void that deals an initial burst of damage, then explodes for a second burst of damage after a delay.","tooltip":"Vel'Koz opens a rift to the void that deals {{ e1 }} (+{{ a1 }}) Magic Damage. After a delay, it deals an additional {{ e2 }} (+{{ a2 }}) Magic Damage.
Void Rift has a 2 second cooldown between casts.","leveltip":{"label":["Initial Damage","Secondary Damage","Ammo Recharge Time","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[1.5,1.5,1.5,1.5,1.5],"cooldownBurn":"1.5","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[30,50,70,90,110],[45,75,105,135,165],[100,100,100,100,100],[0,0,0,0,0],[0.25,0.25,0.25,0.25,0.25],[0.5,0.5,0.5,0.5,0.5],[88,88,88,88,88],[500,500,500,500,500],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/50/70/90/110","45/75/105/135/165","100","0","0.25","0.5","88","500","0","0"],"vars":[{"link":"spelldamage","coeff":0.15,"key":"a1"},{"link":"spelldamage","coeff":0.25,"key":"a2"}],"costType":" Mana","maxammo":"2","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"VelkozW.png","sprite":"spell12.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VelkozE","name":"Tectonic Disruption","description":"Vel'Koz causes an area to explode, knocking up enemies, and knocking close enemies slightly away.","tooltip":"Vel'Koz disrupts a nearby area which, after a delay, deals {{ e1 }} (+{{ a1 }}) Magic Damage and knocks up enemies hit for {{ e2 }} seconds.
Any enemies hit that are close to Vel'Koz will be pushed slightly in the direction the ability was cast.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[70,100,130,160,190],[0.75,0.75,0.75,0.75,0.75],[0,0,0,0,0],[225,225,225,225,225],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/100/130/160/190","0.75","0","225","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[810,810,810,810,810],"rangeBurn":"810","image":{"full":"VelkozE.png","sprite":"spell12.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VelkozR","name":"Life Form Disintegration Ray","description":"Vel'Koz unleashes a channelled beam that follows the cursor for 2.5 seconds that deals magic damage. Organic Deconstruction Researches enemy champions causing them to take true damage instead.","tooltip":"Passive: Deconstructing enemy Champions Researches them for {{ e2 }} seconds. Basic attacks and all abilities refresh Research.
Active: Vel'Koz channels a ray of energy that follows the cursor for 2.5 seconds, dealing Magic Damage up to a total of {{ e1 }} (+{{ a1 }}) and slowing units hit by {{ e3 }}%.
Enemies that stay in the beam will periodically gain Organic Deconstruction stacks. Deals True Damage instead of Magic against Researched units.","leveltip":{"label":["Total Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[100,100,100],"costBurn":"100","effect":[null,[450,625,800],[7,7,7],[20,20,20],[40,40,40],[175,175,175],[7,7,7],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"450/625/800","7","20","40","175","7","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1.25,"key":"a1"}],"costType":"Mana","maxammo":"-1","range":[1575,1575,1575],"rangeBurn":"1575","image":{"full":"VelkozR.png","sprite":"spell12.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"Mana"}]},"Vi":{"id":254,"key":"Vi","name":"Vi","title":"the Piltover Enforcer","spells":[{"id":"ViQ","name":"Vault Breaker","description":"Vi charges her gauntlets and unleashes a vault shattering punch, carrying her forward. Enemies she hits are knocked back and receive a stack of Denting Blows.","tooltip":"Charges a powerful punch that carries Vi forward.
First Cast: Slows Movement Speed by {{ e4 }}% while increasing damage and dash range over 1.25 seconds.
Second Cast: Dashes forward dealing {{ e1 }} (+{{ a1 }}) to {{ f2 }} (+{{ f1 }}) physical damage and applying Denting Blows to all enemies hit (deals {{ e3 }}% damage to minions and monsters). Stops upon colliding with an enemy champion, knocking it back.","leveltip":{"label":["Min Damage","Max Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,14,12,10,8],"cooldownBurn":"16/14/12/10/8","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[100,150,200,250,300],[2,2,2,2,2],[75,75,75,75,75],[15,15,15,15,15],[6,6,6,6,6],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"100/150/200/250/300","2","75","15","6","5","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"},{"link":"bonusattackdamage","coeff":1.4,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[250,250,250,250,250],"rangeBurn":"250","image":{"full":"ViQ.png","sprite":"spell12.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ViW","name":"Denting Blows","description":"Vi's punches break her opponent's Armor, dealing bonus damage and granting her Attack Speed.","tooltip":"Every 3rd attack on the same target deals an additional {{ e1 }}% (+{{ f1 }}%) of the target's maximum Health as physical damage, reduces its Armor by {{ e3 }}% and grants Vi {{ e2 }}% Attack Speed for {{ e4 }} seconds (max {{ e5 }} damage vs. monsters).","leveltip":{"label":["Max Health Damage","Attack Speed"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[4,5.5,7,8.5,10],[30,35,40,45,50],[20,20,20,20,20],[4,4,4,4,4],[300,300,300,300,300],[4,4,4,4,4],[0.0286,0.0286,0.0286,0.0286,0.0286],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/5.5/7/8.5/10","30/35/40/45/50","20","4","300","4","0.03","0","0","0"],"vars":[{"link":"@special.viw","coeff":35,"key":"f1"}],"costType":"Passive","maxammo":"-1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"ViW.png","sprite":"spell12.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"Passive"},{"id":"ViE","name":"Excessive Force","description":"Vi's next attack blasts through her target, dealing damage to enemies behind it.","tooltip":"Causes next basic attack to deal {{ e1 }} (+{{ f3 }})(+{{ a1 }}) physical damage to the target and enemies behind it.
Vi charges a new punch every {{ f1 }} seconds and can hold 2 charges at once.","leveltip":{"label":["Damage","Charge Time","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f1 }} -> {{ f2 }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[1,1,1,1,1],"cooldownBurn":"1","cost":[40,45,50,55,60],"costBurn":"40/45/50/55/60","effect":[null,[10,30,50,70,90],[1.15,1.15,1.15,1.15,1.15],[50,50,50,50,50],[1.5,1.5,1.5,1.5,1.5],[6,6,6,6,6],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"10/30/50/70/90","1.15","50","1.5","6","1","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.15,"key":"f3"},{"link":"spelldamage","coeff":0.7,"key":"a1"},{"link":"@text","coeff":[14,12.5,11,9.5,8],"key":"f1"},{"link":"@text","coeff":[14,12.5,11,9.5,8],"key":"f1"}],"costType":" Mana","maxammo":"2","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"ViE.png","sprite":"spell12.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ViR","name":"Assault and Battery","description":"Vi runs down an enemy, knocking aside anyone in the way. When she reaches her target she knocks it into the air, jumps after it, and slams it back into the ground.","tooltip":"Targets an enemy champion and chases it down, knocking it up for 1.25 seconds, dealing {{ e1 }} (+{{ a1 }}) physical damage.
While charging, Vi cannot be stopped and has True Sight of the target. Any enemies in the way are knocked aside and dealt 75% of the damage.","leveltip":{"label":["Total Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"," {{ cost }} -> {{ costNL }}"]},"maxrank":3,"cooldown":[150,115,80],"cooldownBurn":"150/115/80","cost":[100,125,150],"costBurn":"100/125/150","effect":[null,[150,300,450],[0.75,0.75,0.75],[1.25,1.25,1.25],[4,4,4],[1,1.5,2],[800,800,800],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/300/450","0.75","1.25","4","1/1.5/2","800","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[800,800,800],"rangeBurn":"800","image":{"full":"ViR.png","sprite":"spell12.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Viktor":{"id":112,"key":"Viktor","name":"Viktor","title":"the Machine Herald","spells":[{"id":"ViktorPowerTransfer","name":"Siphon Power","description":"Viktor blasts an enemy unit dealing magic damage, gaining a shield and empowering his next basic attack.
Augment: Viktor gains bonus Movement Speed after casting.","tooltip":"Viktor blasts an enemy unit, dealing {{ e1 }} (+{{ a1 }}) magic damage while granting Viktor a shield that absorbs up to {{ f1 }}(+{{ f2 }}) damage over the next {{ e2 }} seconds.
Augment - Turbocharge: Viktor gains {{ e3 }}% Movement Speed for {{ e2 }} seconds.","leveltip":{"label":["Damage (missile)","Damage (attack)","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[8,7,6,5,4],"cooldownBurn":"8/7/6/5/4","cost":[45,50,55,60,65],"costBurn":"45/50/55/60/65","effect":[null,[60,80,100,120,140],[2.5,2.5,2.5,2.5,2.5],[30,30,30,30,30],[0,0,0,0,0],[20,40,60,80,100],[0.08,0.08,0.08,0.08,0.08],[0.15,0.15,0.15,0.15,0.15],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/80/100/120/140","2.5","30","0","20/40/60/80/100","0.08","0.15","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.5,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"ViktorPowerTransfer.png","sprite":"spell12.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ViktorGravitonField","name":"Gravity Field","description":"Viktor conjures a heavy gravitational field that slows enemies in its radius. Enemies who stay within the device for too long are stunned.
Augment: Enemies stunned by Gravity Field are dragged to the center.","tooltip":"Viktor deploys a gravitational imprisonment device for {{ e3 }} seconds, slowing enemy units by {{ e1 }}% and adding a stack every {{ e4 }} seconds. At {{ e5 }} stacks the target is stunned for {{ e2 }} seconds.
Augment - Implosion: Enemies stunned by Gravity Field are dragged to the center.","leveltip":{"label":["Slow","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[17,16,15,14,13],"cooldownBurn":"17/16/15/14/13","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[28,32,36,40,44],[1.5,1.5,1.5,1.5,1.5],[4,4,4,4,4],[0.5,0.5,0.5,0.5,0.5],[3,3,3,3,3],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"28/32/36/40/44","1.5","4","0.5","3","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"ViktorGravitonField.png","sprite":"spell12.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ViktorDeathRay","name":"Death Ray","description":"Viktor uses his robotic arm to fire a chaos beam that cuts across the field in a line, dealing damage to all enemies in its path.
Augment: An explosion follows the Death Ray's wake, dealing magic damage.","tooltip":"Viktor uses his robotic arm to fire a chaos beam that cuts across the field in a line, dealing {{ e1 }} (+{{ a1 }}) magic damage to every enemy in its path.
Augment - Aftershock: An explosion follows the Death Ray's wake, dealing {{ e2 }} (+{{ a2 }}) magic damage.","leveltip":{"label":["Damage (Death Ray)","Damage (Aftershock)","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12,11,10,9],"cooldownBurn":"13/12/11/10/9","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[70,110,150,190,230],[20,60,100,140,180],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","20/60/100/140/180","1","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.7,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[525,525,525,525,525],"rangeBurn":"525","image":{"full":"ViktorDeathRay.png","sprite":"spell12.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ViktorChaosStorm","name":"Chaos Storm","description":"Viktor conjures a singularity on the field which deals magic damage and interrupts enemy channels. The singularity then periodically does magic damage to all nearby enemies. Viktor can redirect the singularity.
Augment: The Chaos Storm moves faster.","tooltip":"Viktor conjures a singularity at target location, dealing {{ e1 }} (+{{ a1 }}) magic damage and interrupting enemy channels.
Viktor can redirect the singularity for {{ e3 }} seconds, which will discharge {{ e2 }} (+{{ a2 }}) magic damage every {{ e4 }} seconds to nearby enemies. The singularity will move slower as it attempts to move farther away from Viktor.
Augment - Velocity: Chaos Storm moves {{ e0 }}% faster.","leveltip":{"label":["Damage (impact)","Damage (discharge)","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[100,175,250],[150,250,350],[6.5,6.5,6.5],[2,2,2],[3,3,3],[400,400,400],[200,200,200],[300,300,300],[900,900,900],[0.2,0.2,0.2]],"effectBurn":[null,"100/175/250","150/250/350","6.5","2","3","400","200","300","900","0.2"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.6,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[700,700,700],"rangeBurn":"700","image":{"full":"ViktorChaosStorm.png","sprite":"spell12.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Vladimir":{"id":8,"key":"Vladimir","name":"Vladimir","title":"the Crimson Reaper","spells":[{"id":"VladimirQ","name":"Transfusion","description":"Vladimir steals life from the target enemy. When Vladimir's resource is full, Transfusion will benefit from massively increased damage and healing for a brief time.","tooltip":"Vladimir drains the lifeforce of his target, dealing {{ e1 }} (+{{ a1 }}) magic damage and healing himself for {{ e2 }} (+{{ a2 }}) health. After casting Transfusion twice, Vladimir gains Crimson Rush the next time it becomes available to cast.
Crimson Rush: Vladimir is briefly hasted and for the next {{ e8 }} seconds Transfusion deals {{ e7 }}% increased damage and heals for an additional {{ f7 }} plus {{ e5 }}% (+{{ f6 }}%) of his missing health (empowered heal has {{ e9 }}% effectiveness against minions). ","leveltip":{"label":["Damage","Heal","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[80,100,120,140,160],[20,25,30,35,40],[0,0,0,0,0],[0,0,0,0,0],[5,5,5,5,5],[0.04,0.04,0.04,0.04,0.04],[85,85,85,85,85],[2.5,2.5,2.5,2.5,2.5],[35,35,35,35,35],[0,0,0,0,0]],"effectBurn":[null,"80/100/120/140/160","20/25/30/35/40","0","0","5","0.04","85","2.5","35","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"},{"link":"spelldamage","coeff":0.35,"key":"a2"}],"costType":"No Cost","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"VladimirQ.png","sprite":"spell12.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"No Cost"},{"id":"VladimirSanguinePool","name":"Sanguine Pool","description":"Vladimir sinks into a pool of blood, becoming untargetable for 2 seconds. Additionally, enemies on the pool are slowed and Vladimir siphons life from them.","tooltip":"Vladimir sinks into a pool of blood for 2 seconds, gaining a brief haste and becoming untargetable while slowing enemies above him by {{ e3 }}%.
Vladimir deals {{ e1 }} (+{{ f1 }}) [{{ e4 }}% of bonus Health] magic damage over the duration and heals himself for {{ e5 }}% of that amount.
Sanguine Pool can be cast while charging Tides of Blood.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[28,25,22,19,16],"cooldownBurn":"28/25/22/19/16","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[80,135,190,245,300],[20,20,20,20,20],[40,40,40,40,40],[10,10,10,10,10],[15,15,15,15,15],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/135/190/245/300","20","40","10","15","0","0","0","0","0"],"vars":[{"link":"bonushealth","coeff":0.15,"key":"f1"}],"costType":"% of current Health","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"VladimirSanguinePool.png","sprite":"spell12.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ e2 }}% of current Health"},{"id":"VladimirE","name":"Tides of Blood","description":"Vladimir pays his own health to charge up a reservoir of blood which, when released, deals damage in the area around him but can be blocked by enemy units.","tooltip":"First Cast: Vladimir charges up a reservoir of blood, spending up to {{ e2 }}% of his max Health ({{ f3 }}) to increase this spell's damage. While at full charge, Vladimir is slowed.
Second Cast: Vladimir unleashes a nova of blood at surrounding enemies which deals between {{ e3 }} (+{{ f2 }}) (+{{ a1 }}) and {{ e0 }} (+{{ f4 }}) (+{{ a2 }}) magic damage and, at full charge, briefly slows by {{ e9 }}%. Targets hit block a portion of the nova.
Tides of Blood will release automatically if held for more than {{ e7 }} seconds.","leveltip":{"label":["Min Damage","Max Damage","Slow Amount","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e0 }} -> {{ e0NL }}","{{ e9 }}% -> {{ e9NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[13,11,9,7,5],"cooldownBurn":"13/11/9/7/5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[0,0,0,0,0],[8,8,8,8,8],[30,45,60,75,90],[6,6,6,6,6],[150,150,150,150,150],[0,0,0,0,0],[1.5,1.5,1.5,1.5,1.5],[1,1,1,1,1],[40,45,50,55,60],[60,90,120,150,180]],"effectBurn":[null,"0","8","30/45/60/75/90","6","150","0","1.5","1","40/45/50/55/60","60/90/120/150/180"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"},{"link":"spelldamage","coeff":1,"key":"a2"}],"costType":"% of max Health","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"VladimirE.png","sprite":"spell12.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"Channeling Cost {{ e2 }}% of max Health"},{"id":"VladimirHemoplague","name":"Hemoplague","description":"Vladimir infects an area with a virulent plague. Affected enemies take increased damage for the duration. After a few seconds, Hemoplague deals magic damage to infected enemies and heals Vladimir for each enemy Champion hit.","tooltip":"Vladimir infects enemies in a target area with a virulent plague, causing them to take {{ e2 }}% increased damage from all sources for {{ e4 }} seconds.
After {{ e4 }} seconds, Vladimir deals {{ e1 }} (+{{ a1 }}) magic damage to all infected targets. If Hemoplague damages an enemy Champion, Vladimir heals himself for {{ f4 }} (+{{ f3 }}), plus {{ e5 }}% for each Champion beyond the first.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[150,135,120],"cooldownBurn":"150/135/120","cost":[0,0,0],"costBurn":"0","effect":[null,[150,250,350],[10,10,10],[100,100,100],[4,4,4],[50,50,50],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","10","100","4","50","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[625,625,625],"rangeBurn":"625","image":{"full":"VladimirHemoplague.png","sprite":"spell12.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"No Cost"}]},"Volibear":{"id":106,"key":"Volibear","name":"Volibear","title":"the Thunder's Roar","spells":[{"id":"VolibearQ","name":"Rolling Thunder","description":"Volibear drops to all fours and runs faster. This bonus speed increases when chasing enemy champions. The first enemy he attacks is thrown backwards over Volibear.","tooltip":"Volibear drops to all fours to hunt his enemies, gaining {{ e4 }}% Movement Speed for {{ e3 }} seconds. This bonus is enhanced to {{ e2 }}% Movement Speed while moving toward enemy champions.
Volibear's next attack during this time deals an additional {{ e1 }} physical damage and flings the target behind him.","leveltip":{"label":["Bonus Damage","Enhanced Movement Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[30,60,90,120,150],[30,35,40,45,50],[4,4,4,4,4],[15,15,15,15,15],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/60/90/120/150","30/35/40/45/50","4","15","400","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"VolibearQ.png","sprite":"spell12.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VolibearW","name":"Frenzy","description":"Volibear's repeated attacks grant him additional Attack Speed. Once Volibear has repeatedly attacked three times, he can perform a vicious bite on his target which deals increased damage based on the target's missing Health.","tooltip":"Passive: Volibear gains {{ e1 }}% Attack Speed with each attack. Stacks up to {{ e2 }} times.
Active: When Volibear has {{ e2 }} stacks of Frenzy, he can bite an enemy to deal {{ e3 }} (+{{ f1 }} [{{ e4 }}% of bonus Health]) physical damage, increased by {{ e5 }}% for each {{ e7 }}% Health the target is missing. If Volibear bites a monster, Frenzy's cooldown is reduced by {{ e6 }}%.","leveltip":{"label":["Attack Speed Bonus","Bite Damage"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[18,18,18,18,18],"cooldownBurn":"18","cost":[35,35,35,35,35],"costBurn":"35","effect":[null,[4,8,12,16,20],[3,3,3,3,3],[60,110,160,210,260],[15,15,15,15,15],[1,1,1,1,1],[50,50,50,50,50],[1,1,1,1,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4/8/12/16/20","3","60/110/160/210/260","15","1","50","1","0","0","0"],"vars":[{"link":"bonushealth","coeff":0.15,"key":"f1"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"VolibearW.png","sprite":"spell12.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VolibearE","name":"Majestic Roar","description":"Volibear lets out a powerful roar that damages and slows enemies. Minions and monsters are feared as well.","tooltip":"Volibear deals {{ e2 }} (+{{ a1 }}) magic damage to nearby enemies and slows them by {{ e1 }}% for {{ e3 }} seconds.
Minions and monsters are feared as well.","leveltip":{"label":["Damage","Slow Amount ","Mana Cost "],"effect":["{{ e2 }} -> {{ e2NL }}","{{ e1 }}% -> {{ e1NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[11,11,11,11,11],"cooldownBurn":"11","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[30,35,40,45,50],[60,105,150,195,240],[3,3,3,3,3],[49,49,49,49,49],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/35/40/45/50","60/105/150/195/240","3","49","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[425,425,425,425,425],"rangeBurn":"425","image":{"full":"VolibearE.png","sprite":"spell12.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"VolibearR","name":"Thunder Claws","description":"Volibear erupts with chain lightning, damaging a number nearby enemies. The power of the storm causes Volibear's attacks to blast his targets with lightning that bounces to other nearby enemies.","tooltip":"Volibear erupts with chain lightning, striking up to {{ e4 }} nearby enemies with {{ e1 }} (+{{ a1 }}) magic damage.
For the next {{ e3 }} seconds, the storm empowers Volibear, causing his basic attacks to deal {{ e1 }} (+{{ a1 }}) bonus magic damage that chains to {{ e4 }} nearby enemies.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[100,90,80],"cooldownBurn":"100/90/80","cost":[100,100,100],"costBurn":"100","effect":[null,[75,115,155],[9,9,9],[12,12,12],[8,8,8],[0.08,0.08,0.08],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"75/115/155","9","12","8","0.08","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"VolibearR.png","sprite":"spell12.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Warwick":{"id":19,"key":"Warwick","name":"Warwick","title":"the Uncaged Wrath of Zaun","spells":[{"id":"WarwickQ","name":"Jaws of the Beast","description":"Warwick lunges forward and bites his target, dealing damage based on their maximum health and healing for damage dealt.","tooltip":"Warwick lunges forward and bites his target. While the key is held down, he will attach to the target then leap behind them.
On release, deals {{ a1 }}+{{ a2 }} plus {{ e1 }}% of your target's maximum health as magic damage (applies On Hit effects). Heal {{ e3 }}% of damage dealt.
16","leveltip":{"label":["Heal","Percent Health Damage","Cost"],"effect":["{{ e3 }}% -> {{ e3NL }}%","{{ e1 }}% -> {{ e1NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[50,60,70,80,90],"costBurn":"50/60/70/80/90","effect":[null,[6,7,8,9,10],[100,150,200,250,300],[30,40,50,60,70],[100,125,150,175,200],[450,450,450,450,450],[200,200,200,200,200],[300,300,300,300,300],[425,425,425,425,425],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"6/7/8/9/10","100/150/200/250/300","30/40/50/60/70","100/125/150/175/200","450","200","300","425","0","0"],"vars":[{"link":"attackdamage","coeff":1.2,"key":"a1"},{"link":"spelldamage","coeff":0.9,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"WarwickQ.png","sprite":"spell12.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"WarwickW","name":"Blood Hunt","description":"Warwick senses enemies below 50% health, gaining movement speed toward and attack speed against them. When they fall below 20% health, he frenzies and these bonuses triple.","tooltip":"Passive: Warwick gains {{ e2 }}% attack speed against enemies below 50% health. He also senses low health champions globally, moving {{ e1 }}% faster toward them when out of combat. These bonuses are tripled against enemies below 20% health.
Active: Warwick briefly senses all enemies. The nearest sensed champion is Blood Hunted for 8 seconds. Cast only while not in combat with a champion.
While no enemies are being hunted, Blood Hunt cools down twice as fast.","leveltip":{"label":["Movement Speed","Attack Speed","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[120,105,90,75,60],"cooldownBurn":"120/105/90/75/60","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[35,40,45,50,55],[50,65,80,95,110],[10,15,20,25,30],[80,90,100,110,120],[30,30,30,30,30],[8,8,8,8,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/40/45/50/55","50/65/80/95/110","10/15/20/25/30","80/90/100/110/120","30","8","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"2","range":[4000,4000,4000,4000,4000],"rangeBurn":"4000","image":{"full":"WarwickW.png","sprite":"spell12.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"WarwickE","name":"Primal Howl","description":"Warwick gains damage reduction for 2.5 seconds. At the end, or if re-activated, he howls, causing nearby enemies to flee for 1 second.","tooltip":"Warwick gains {{ e1 }}% damage reduction for 2.5 seconds. At the end of the duration, or if activated again, Warwick howls, causing all nearby enemies to flee for {{ e3 }} second.","leveltip":{"label":["Damage Reduction","Cooldown"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[15,14,13,12,11],"cooldownBurn":"15/14/13/12/11","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[35,40,45,50,55],[2.75,2.75,2.75,2.75,2.75],[1,1,1,1,1],[1,1,1,1,1],[800,800,800,800,800],[400,400,400,400,400],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"35/40/45/50/55","2.75","1","1","800","400","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[375,375,375,375,375],"rangeBurn":"375","image":{"full":"WarwickE.png","sprite":"spell12.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"WarwickR","name":"Infinite Duress","description":"Warwick leaps in a direction (scaling with his bonus movement speed), suppressing the first champion he collides with for 1.5 seconds.","tooltip":"Warwick leaps 2.5 seconds worth of movement speed in a direction, suppressing the first champion he collides with for {{ e2 }} seconds. Deals {{ e7 }} (+{{ a1 }}) magic damage and applies on-hit effects 3 times. Warwick heals for 100% of all damage he deals during Infinite Duress.","leveltip":{"label":["Base Damage","Cooldown"],"effect":["{{ e7 }} -> {{ e7NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[110,90,70],"cooldownBurn":"110/90/70","cost":[100,100,100],"costBurn":"100","effect":[null,[150,250,350],[1.5,1.5,1.5],[30,30,30],[5,5,5],[20,20,20],[0,0,0],[175,350,525],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"150/250/350","1.5","30","5","20","0","175/350/525","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.67,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[25000,25000,25000],"rangeBurn":"25000","image":{"full":"WarwickR.png","sprite":"spell13.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Xayah":{"id":498,"key":"Xayah","name":"Xayah","title":"the Rebel","spells":[{"id":"XayahQ","name":"Double Daggers","description":"Xayah throws two damaging daggers that also drop Feathers she can recall.","tooltip":"Xayah throws two knives dealing {{ f1 }} (+{{ f2 }}) physical damage and leaving two Feathers. Targets hit after the first take {{ e2 }}% damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[10,9,8,7,6],"cooldownBurn":"10/9/8/7/6","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[80,120,160,200,240],[50,50,50,50,50],[0.334,0.334,0.334,0.334,0.334],[0.584,0.584,0.584,0.584,0.584],[3500,3500,3500,3500,3500],[3500,3500,3500,3500,3500],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","50","0.33","0.58","3500","3500","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"XayahQ.png","sprite":"spell13.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XayahW","name":"Deadly Plumage","description":"Xayah creates a storm of blades that increase her basic attack speed and damage while granting her movement speed if she attacks a champion.","tooltip":"Xayah creates a storm of blades for {{ e2 }} seconds that grant her {{ e1 }}% attack speed and cause her basic attacks to strike an additional time for {{ e5 }}% damage.
If Deadly Plumage strikes an enemy champion, Xayah gains {{ e3 }}% movement speed for {{ e4 }} seconds.
If Rakan is nearby he will also gain the effects of Deadly Plumage.","leveltip":{"label":["Attack Speed","Cooldown","Cost"],"effect":["{{ e1 }}% -> {{ e1NL }}%","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[60,55,50,45,40],"costBurn":"60/55/50/45/40","effect":[null,[30,35,40,45,50],[4,4,4,4,4],[30,30,30,30,30],[1.5,1.5,1.5,1.5,1.5],[20,20,20,20,20],[1000,1000,1000,1000,1000],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/35/40/45/50","4","30","1.5","20","1000","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"XayahW.png","sprite":"spell13.png","group":"spell","x":96,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XayahE","name":"Bladecaller","description":"Xayah calls back all her dropped Feathers dealing damage and rooting enemies.","tooltip":"Xayah calls all Feathers back to her, dealing {{ e1 }} (+{{ f3 }})(+{{ f4 }}) physical damage to enemies they pass through (Increased by Critical Strike Chance).
Hitting an enemy with {{ e5 }} Feathers roots them for {{ e4 }} second.
Minions take {{ e2 }}% damage from Bladecaller.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[50,60,70,80,90],[50,50,50,50,50],[0.1,0.1,0.1,0.1,0.1],[1,1,1,1,1],[3,3,3,3,3],[0.25,0.25,0.25,0.25,0.25],[0,0,0,0,0],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"50/60/70/80/90","50","0.1","1","3","0.25","0","0.5","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[2000,2000,2000,2000,2000],"rangeBurn":"2000","image":{"full":"XayahE.png","sprite":"spell13.png","group":"spell","x":144,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XayahR","name":"Featherstorm","description":"Xayah leaps into the air becoming untargetable and throwing out a fan of daggers, dropping Feathers she can recall.","tooltip":"Xayah leaps into the air becoming untargetable. She then rains down daggers which deal {{ e1 }} (+{{ a1 }}) physical damage and leave behind a line of Feathers.
Xayah can move while in the air.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[140,125,110],"cooldownBurn":"140/125/110","cost":[100,100,100],"costBurn":"100","effect":[null,[100,150,200],[1,1,1],[1.25,1.25,1.25],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"100/150/200","1","1.25","0","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[450,450,450],"rangeBurn":"450","image":{"full":"XayahR.png","sprite":"spell13.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Xerath":{"id":101,"key":"Xerath","name":"Xerath","title":"the Magus Ascendant","spells":[{"id":"XerathArcanopulseChargeUp","name":"Arcanopulse","description":"Fires a long-range beam of energy, dealing magic damage to all targets hit.","tooltip":"First cast: Xerath charges Arcanopulse, gradually decreasing his Movement Speed while increasing the spell's range.
Second cast: Xerath fires Arcanopulse, dealing {{ e1 }} (+{{ a1 }}) magic damage to all enemies in a line.
While charging Arcanopulse, Xerath cannot attack or cast other spells. If Xerath does not fire the spell, half the Mana cost is refunded.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[80,90,100,110,120],"costBurn":"80/90/100/110/120","effect":[null,[80,120,160,200,240],[4,4,4,4,4],[0.5,0.5,0.5,0.5,0.5],[145,145,145,145,145],[0.5,0.5,0.5,0.5,0.5],[-0.2,-0.2,-0.2,-0.2,-0.2],[0.1,0.1,0.1,0.1,0.1],[0.5,0.5,0.5,0.5,0.5],[1.5,1.5,1.5,1.5,1.5],[0,0,0,0,0]],"effectBurn":[null,"80/120/160/200/240","4","0.5","145","0.5","-0.2","0.1","0.5","1.5","0"],"vars":[{"link":"spelldamage","coeff":0.75,"key":"a1"}],"costType":" Mana","maxammo":"1","range":[750,750,750,750,750],"rangeBurn":"750","image":{"full":"XerathArcanopulseChargeUp.png","sprite":"spell13.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XerathArcaneBarrage2","name":"Eye of Destruction","description":"Calls down a barrage of arcane energy, slowing and dealing magic damage to all enemies in an area. Targets in the middle receive additional damage and a stronger slow.","tooltip":"Xerath calls down a blast of arcane energy, dealing {{ e1 }} (+{{ a1 }}) magic damage to all enemies within the target area, slowing them by {{ e8 }}% for {{ e4 }} seconds. Enemies in the center of the blast take {{ f1 }} (+{{ f2 }}) magic damage and are slowed by {{ e3 }}%. This slow decays rapidly.","leveltip":{"label":["Damage","Cooldown","Slow Amount","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}","{{ e3 }}% -> {{ e3NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[1,1,1,1,1],"cooldownBurn":"1","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[60,90,120,150,180],[2,2,2,2,2],[60,65,70,75,80],[2.5,2.5,2.5,2.5,2.5],[0.5,0.5,0.5,0.5,0.5],[50,50,50,50,50],[50,50,50,50,50],[10,10,10,10,10],[0.8,0.8,0.8,0.8,0.8],[-0.15,-0.15,-0.15,-0.15,-0.15]],"effectBurn":[null,"60/90/120/150/180","2","60/65/70/75/80","2.5","0.5","50","50","10","0.8","-0.15"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"XerathArcaneBarrage2.png","sprite":"spell13.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XerathMageSpear","name":"Shocking Orb","description":"Deals magic damage to an enemy and stuns them.","tooltip":"Xerath fires an orb of raw magic. The first enemy hit takes {{ e1 }} (+{{ a1 }}) magic damage and is stunned for between {{ e8 }} and {{ e2 }} seconds. The stun duration lengthens based on how far the orb travels.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[13,12.5,12,11.5,11],"cooldownBurn":"13/12.5/12/11.5/11","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[80,110,140,170,200],[2,2,2,2,2],[0.17,0.17,0.17,0.17,0.17],[1125,1125,1125,1125,1125],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0],[0.5,0.5,0.5,0.5,0.5],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"80/110/140/170/200","2","0.17","1125","0.5","0","0","0.5","0","0"],"vars":[{"link":"spelldamage","coeff":0.45,"key":"a1"}],"costType":" Mana","maxammo":"1","range":[1050,1050,1050,1050,1050],"rangeBurn":"1050","image":{"full":"XerathMageSpear.png","sprite":"spell13.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XerathLocusOfPower2","name":"Rite of the Arcane","description":"Xerath immobilizes himself and gains numerous long-range barrages.","tooltip":"Xerath ascends to his true form, becoming rooted in place and gaining {{ e2 }} Arcane Barrages. This magic artillery deals {{ e3 }} (+{{ a1 }}) magic damage to all enemies hit.
The root ends after {{ e1 }} seconds, when all shots have been fired or when manually deactivated by issuing a move command. If no barrages are fired, {{ e7 }}% of the cooldown is refunded.","leveltip":{"label":["Damage","Number of Shots","Range","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e2 }} -> {{ e2NL }}","{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,115,100],"cooldownBurn":"130/115/100","cost":[100,100,100],"costBurn":"100","effect":[null,[10,10,10],[3,4,5],[200,230,260],[200,200,200],[3200,4400,5600],[0.8,0.8,0.8],[50,50,50],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"10","3/4/5","200/230/260","200","3200/4400/5600","0.8","50","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.43,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[3200,4400,5600],"rangeBurn":"3200/4400/5600","image":{"full":"XerathLocusOfPower2.png","sprite":"spell13.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"XinZhao":{"id":5,"key":"XinZhao","name":"Xin Zhao","title":"the Seneschal of Demacia","spells":[{"id":"XenZhaoComboTarget","name":"Three Talon Strike","description":"Xin Zhao's next 3 standard attacks deal increased damage that reduce his other ability cooldowns, with the third attack knocking an opponent into the air.","tooltip":"Xin Zhao's next 3 basic attacks deal {{ e1 }} (+{{ a2 }}) physical damage and reduce his other abilities' cooldowns by 1 second. The final strike also knocks the target into the air for {{ e2 }} seconds.","leveltip":{"label":["Bonus Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[9,8,7,6,5],"cooldownBurn":"9/8/7/6/5","cost":[30,30,30,30,30],"costBurn":"30","effect":[null,[15,30,45,60,75],[0.75,0.75,0.75,0.75,0.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/30/45/60/75","0.75","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.2,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[375,375,375,375,375],"rangeBurn":"375","image":{"full":"XenZhaoComboTarget.png","sprite":"spell13.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XenZhaoBattleCry","name":"Battle Cry","description":"Xin Zhao passively will critically strike every third attack, healing on every third hit. This ability can be activated to attack faster.","tooltip":"Passive: Every third basic attack Xin Zhao critically strikes his target for {{ e7 }}% additional damage. On every third hit, he heals himself for {{ e1 }} (+{{ a1 }})(+{{ a1 }}).
Active: Xin Zhao unleashes a battle cry, increasing his Attack Speed by {{ e2 }}% for {{ e3 }} seconds.","leveltip":{"label":["Heal Amount","Bonus Damage","Attack Speed","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e7 }}% -> {{ e7NL }}%","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[16,15,14,13,12],"cooldownBurn":"16/15/14/13/12","cost":[40,40,40,40,40],"costBurn":"40","effect":[null,[30,35,40,45,50],[40,45,50,55,60],[5,5,5,5,5],[1,1,1,1,1],[-0.75,-0.625,-0.5,-0.375,-0.25],[0.3,0.3,0.3,0.3,0.3],[25,37.5,50,62.5,75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/35/40/45/50","40/45/50/55/60","5","1","-0.75/-0.625/-0.5/-0.375/-0.25","0.3","25/37.5/50/62.5/75","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.4,"key":"a1"},{"link":"spelldamage","coeff":0.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[20,20,20,20,20],"rangeBurn":"20","image":{"full":"XenZhaoBattleCry.png","sprite":"spell13.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XenZhaoSweep","name":"Audacious Charge","description":"Xin Zhao charges an enemy, dealing damage and slowing all enemies in the area.","tooltip":"Xin Zhao charges and challenges an enemy. The charge deals {{ e1 }} (+{{ a1 }}) magic damage to all nearby enemies and slows them by {{ e2 }}% for {{ e4 }} seconds. ","leveltip":{"label":["Damage","Slow %"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[60,60,60,60,60],"costBurn":"60","effect":[null,[70,110,150,190,230],[25,30,35,40,45],[0,0,0,0,0],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/110/150/190/230","25/30/35/40/45","0","2","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"XenZhaoSweep.png","sprite":"spell13.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"XenZhaoParry","name":"Crescent Sweep","description":"Xin Zhao deals damage to nearby enemies based on their current Health and knocks non-challenged targets back. Xin Zhao gains bonus Armor and Magic Resist based on number of champions hit.","tooltip":"Xin Zhao unleashes a sweep around him that deals {{ e1 }} (+{{ a1 }}) plus {{ e2 }}% of target's current Health in physical damage and stuns enemies while knocking them back (max 600 vs minions and monsters). Xin Zhao gains {{ e3 }} Armor and Magic Resist for 6 seconds for each champion hit.
Challenge: If a challenged target is hit by the sweep, it is unaffected by the knockback.","leveltip":{"label":["Bonus Damage","Resistance Per Target","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,110,100],"cooldownBurn":"120/110/100","cost":[100,100,100],"costBurn":"100","effect":[null,[75,175,275],[15,15,15],[15,20,25],[7,10,13],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"75/175/275","15","15/20/25","7/10/13","0","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[500,500,500],"rangeBurn":"500","image":{"full":"XenZhaoParry.png","sprite":"spell13.png","group":"spell","x":96,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Yasuo":{"id":157,"key":"Yasuo","name":"Yasuo","title":"the Unforgiven","spells":[{"id":"YasuoQW","name":"Steel Tempest","description":"A skillshot basic attack. After two successful Steel Tempests, the next fires a tornado that knocks enemies Airborne.","tooltip":"Thrusts forward, dealing {{ e1 }} (+{{ a1 }}) physical damage.
On hit, Steel Tempest grants a stack of Gathering Storm for 6 seconds. At 2 stacks, Steel Tempest fires a whirlwind that knocks Airborne.
Steel Tempest is treated as a basic attack: It can critically strike, applies on-hit effects, is interruptible by crowd control and its cooldown and cast time are reduced by Attack Speed.
If cast while dashing, Steel Tempest will strike as a circle.","leveltip":{"label":["Damage"],"effect":["{{ e1 }} -> {{ e1NL }}"]},"maxrank":5,"cooldown":[6,5.5,5,4.5,4],"cooldownBurn":"6/5.5/5/4.5/4","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,40,60,80,100],[100,100,100,100,100],[85,95,105,115,125],[4,4,4,4,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/40/60/80/100","100","85/95/105/115/125","4","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[475,475,475,475,475],"rangeBurn":"475","image":{"full":"YasuoQW.png","sprite":"spell13.png","group":"spell","x":144,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"YasuoWMovingWall","name":"Wind Wall","description":"Creates a moving wall that blocks enemy projectiles.","tooltip":"Creates a moving wall that blocks all enemy projectiles for 4 seconds.","leveltip":{"label":["Wall Width","Cooldown"],"effect":["{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[26,24,22,20,18],"cooldownBurn":"26/24/22/20/18","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[15,20,25,30,35],[60,90,120,150,180],[3,6,9,12,15],[300,350,400,450,500],[320,390,460,530,600],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"15/20/25/30/35","60/90/120/150/180","3/6/9/12/15","300/350/400/450/500","320/390/460/530/600","0","0","0","0","0"],"vars":[],"costType":"No Cost","maxammo":"-1","range":[400,400,400,400,400],"rangeBurn":"400","image":{"full":"YasuoWMovingWall.png","sprite":"spell13.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"No Cost"},{"id":"YasuoDashWrapper","name":"Sweeping Blade","description":"Dashes through a unit, dealing escalating Magic Damage with each cast.","tooltip":"Dashes through target enemy, dealing {{ e1 }} (+{{ a1 }})(+{{ f3 }}) Magic Damage. Each cast increases your next dash's base Damage by 25%, up to {{ e6 }}%.
Cannot be re-cast on the same enemy for {{ e2 }} seconds.
If cast while dashing, Steel Tempest will strike as a circle.","leveltip":{"label":["Damage","Recast Block","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }} -> {{ e2NL }}","{{ e3 }} -> {{ e3NL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[60,70,80,90,100],[10,9,8,7,6],[0.5,0.4,0.3,0.2,0.1],[1.5,1.5,1.5,1.5,1.5],[15,17.5,20,22.5,25],[50,50,50,50,50],[20,20,20,20,20],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/70/80/90/100","10/9/8/7/6","0.5/0.4/0.3/0.2/0.1","1.5","15/17.5/20/22.5/25","50","20","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"}],"costType":"","maxammo":"-1","range":[475,475,475,475,475],"rangeBurn":"475","image":{"full":"YasuoDashWrapper.png","sprite":"spell13.png","group":"spell","x":240,"y":48,"w":48,"h":48}},{"id":"YasuoRKnockUpComboW","name":"Last Breath","description":"Moves to a unit and strikes them repeatedly for heavy damage. Can only be cast on Airborne targets.","tooltip":"Blinks to an Airborne enemy champion, dealing {{ e1 }} (+{{ a1 }}) physical damage and holding all Airborne enemies in the area in the air for an additional 1 second. Grants maximum Flow but resets all stacks of Gathering Storm.
For 15 seconds, Yasuo's critical strikes gain {{ e5 }}% Bonus Armor Penetration - this affects Armor from items, buffs, runes and masteries.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ f1 }} -> {{ f2 }}"]},"maxrank":3,"cooldown":[0,0,0],"cooldownBurn":"0","cost":[0,0,0],"costBurn":"0","effect":[null,[200,300,400],[33,66,100],[650,750,850],[1.5,1.5,1.5],[50,50,50],[33,66,100],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"200/300/400","33/66/100","650/750/850","1.5","50","33/66/100","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":1.5,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[1200,1200,1200],"rangeBurn":"1200","image":{"full":"YasuoRKnockUpComboW.png","sprite":"spell13.png","group":"spell","x":288,"y":48,"w":48,"h":48},"resource":"No Cost"}]},"Yorick":{"id":83,"key":"Yorick","name":"Yorick","title":"Shepherd of Souls","spells":[{"id":"YorickQ","name":"Last Rites","description":"Yorick deals bonus damage on his next attack and heals himself. If the target dies a grave will be dug.","tooltip":"Yorick's next basic attack deals {{ e1 }} (+{{ a1 }}) physical damage and restores {{ f1 }} Health (doubled when below half Health). Last Rites will leave a grave if it kills the target.
When there are three or more graves nearby and Last Rites has been used, Yorick can cast Awakening to raise Mist Walkers from graves.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[25,25,25,25,25],"costBurn":"25","effect":[null,[30,55,80,105,130],[5,5,5,5,5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"30/55/80/105/130","5","0","0","0","0","0","0","0","0"],"vars":[{"link":"attackdamage","coeff":1.4,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[0,0,0,0,0],"rangeBurn":"0","image":{"full":"YorickQ.png","sprite":"spell13.png","group":"spell","x":336,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"YorickW","name":"Dark Procession","description":"Yorick summons a destructible wall at target location that will block enemy movement.","tooltip":"Yorick summons a destructible wall of spirits with {{ e5 }} Health around target area for {{ e1 }} seconds. Allies can walk through the wall freely.","leveltip":{"label":["Health","Cooldown"],"effect":["{{ e5 }} -> {{ e5NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[20,18,16,14,12],"cooldownBurn":"20/18/16/14/12","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[4,4,4,4,4],[18,18,18,18,18],[0.75,0.75,0.75,0.75,0.75],[0,0,1,1,2],[2,2,3,3,4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4","18","0.75","0/0/1/1/2","2/2/3/3/4","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"YorickW.png","sprite":"spell13.png","group":"spell","x":384,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"YorickE","name":"Mourning Mist","description":"Yorick throws a globule of Black Mist that damages, slows and marks enemies.","tooltip":"Yorick throws a globule of Black Mist that deals {{ e7 }}% of enemy's current Health as magic damage (minimum {{ e1 }} (+{{ a1 }})), slows by {{ e3 }}% for {{ e6 }} seconds, and marks champions and monsters for {{ e2 }} seconds.
Yorick and his minions are hasted by {{ e5 }}% while moving toward the mark.","leveltip":{"label":["Minimum Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[70,105,140,175,210],[4,4,4,4,4],[30,30,30,30,30],[1000,1000,1000,1000,1000],[20,20,20,20,20],[2,2,2,2,2],[15,15,15,15,15],[300,300,300,300,300],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/105/140/175/210","4","30","1000","20","2","15","300","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"YorickE.png","sprite":"spell13.png","group":"spell","x":432,"y":48,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"YorickR","name":"Eulogy of the Isles","description":"Yorick summons the Maiden of the Mist that causes Yorick's attacks against the Maiden's target to deal bonus damage. The Maiden will also automatically raise Walkers from dead enemies.","tooltip":"Yorick summons The Maiden of the Mist and {{ e1 }} Mist Walkers. The Maiden has {{ e3 }} (+{{ f1 }}) Health, deals {{ e4 }} (+{{ f2 }}) magic damage, and raises Mist Walkers from nearby enemy deaths.
When Yorick damages the Maiden's target he will deal {{ e5 }}% of their max Health as bonus magic damage ({{ e7 }} second cooldown).
If the Maiden is summoned inside a lane, she will start pushing the lane.","leveltip":{"label":["Health","Damage","Mist Walkers","Mark Damage","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ e4 }} -> {{ e4NL }}","{{ e1 }} -> {{ e1NL }}","{{ e5 }}% ->{{ e5NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[160,150,140],"cooldownBurn":"160/150/140","cost":[100,100,100],"costBurn":"100","effect":[null,[2,3,4],[700,700,700],[700,1500,3000],[10,20,40],[5,7.5,10],[1,1,1],[2,2,2],[200,300,400],[0,0,0],[0,0,0]],"effectBurn":[null,"2/3/4","700","700/1500/3000","10/20/40","5/7.5/10","1","2","200/300/400","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600],"rangeBurn":"600","image":{"full":"YorickR.png","sprite":"spell13.png","group":"spell","x":0,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Zac":{"id":154,"key":"Zac","name":"Zac","title":"the Secret Weapon","spells":[{"id":"ZacQ","name":"Stretching Strikes","description":"Zac stretches an arm, grabbing an enemy. Attacking a different enemy will cause him to throw both targets towards each other.","tooltip":"Zac's arm stretches and grabs the first enemy it hits, dealing {{ e1 }} (+{{ a1 }})(+{{ f2 }}) magic damage and briefly slowing them. Zac's next basic attack is replaced with a long range smack that repeats the initial magic damage and slow effect.
If Zac grabs a different enemy with each attack he'll throw them towards each other, dealing {{ e1 }} (+{{ a1 }})(+{{ f2 }}) magic damage in an area if they collide.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }}-> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[12,11,10,9,8],"cooldownBurn":"12/11/10/9/8","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[30,40,50,60,70],[4,4,4,4,4],[800,800,800,800,800],[-0.6,-0.6,-0.6,-0.6,-0.6],[0.5,0.5,0.5,0.5,0.5],[2.5,2.5,2.5,2.5,2.5],[1000,1000,1000,1000,1000],[700,700,700,700,700],[300,300,300,300,300],[300,300,300,300,300]],"effectBurn":[null,"30/40/50/60/70","4","800","-0.6","0.5","2.5","1000","700","300","300"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"},{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":"% of current Health","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"ZacQ.png","sprite":"spell13.png","group":"spell","x":48,"y":96,"w":48,"h":48},"resource":"{{ e2 }}% of current Health"},{"id":"ZacW","name":"Unstable Matter","description":"Zac's body erupts, damaging nearby enemies.","tooltip":"Zac's body erupts, dealing {{ e1 }} magic damage +{{ e3 }} (+{{ a1 }})% of the enemy's max health as magic damage to nearby enemies.
16","leveltip":{"label":["Flat Damage","Percent Max Health Damage"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }}% -> {{ e3NL }}%"]},"maxrank":5,"cooldown":[5,5,5,5,5],"cooldownBurn":"5","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[40,55,70,85,100],[4,4,4,4,4],[4,5,6,7,8],[1,1,1,1,1],[200,200,200,200,200],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/55/70/85/100","4","4/5/6/7/8","1","200","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.02,"key":"a1"}],"costType":"% of current Health","maxammo":"-1","range":[350,350,350,350,350],"rangeBurn":"350","image":{"full":"ZacW.png","sprite":"spell13.png","group":"spell","x":96,"y":96,"w":48,"h":48},"resource":"{{ e2 }}% of current Health"},{"id":"ZacE","name":"Elastic Slingshot","description":"Zac attaches his arms to the ground and stretches back, launching himself forward.","tooltip":"First cast: Zac faces the cursor and charges up over {{ e4 }} seconds.
Second cast: Launches Zac towards a location, knocking up nearby enemies for {{ f2 }} to {{ f3 }} seconds (based on charge time) and dealing {{ e1 }} (+{{ a1 }}) magic damage. Zac spawns extra chunks of Goo for each enemy champion hit.
16","leveltip":{"label":["Damage","Range","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[24,21,18,15,12],"cooldownBurn":"24/21/18/15/12","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[80,130,180,230,280],[4,4,4,4,4],[1200,1350,1500,1650,1800],[0.9,1,1.1,1.2,1.3],[0.5,0.5,0.5,0.5,0.5],[500,500,500,500,500],[1350,1350,1350,1350,1350],[0.6,0.6,0.6,0.6,0.6],[265,265,265,265,265],[1,1,1,1,1]],"effectBurn":[null,"80/130/180/230/280","4","1200/1350/1500/1650/1800","0.9/1/1.1/1.2/1.3","0.5","500","1350","0.6","265","1"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":"% of current Health","maxammo":"-1","range":[300,300,300,300,300],"rangeBurn":"300","image":{"full":"ZacE.png","sprite":"spell13.png","group":"spell","x":144,"y":96,"w":48,"h":48},"resource":"{{ e2 }}% of current Health"},{"id":"ZacR","name":"Let's Bounce!","description":"Zac flattens himself, making him immune to crowd control while slowing enemies standing on top of him. When he decides to bounce away, he will suck up any enemies standing on top of him, taking them for a ride.","tooltip":"First cast: Zac squishes himself down, making him immune to Crowd Control for up to {{ e5 }} seconds. Enemies standing on top of him are slowed by {{ e4 }}%.
Second cast: Charging for at least {{ f1 }} seconds before recasting causes Zac to scoop up enemies on top of him, carrying them towards a location. Upon landing nearby enemies take {{ e1 }} (+{{ a1 }}) magic damage and are briefly slowed.
Reactivating before Zac charges up knocks back nearby enemies instead.","leveltip":{"label":["Damage","Range","Slow Percent","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e3 }} -> {{ e3NL }}","{{ e4 }}% -> {{ e4NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[130,115,100],"cooldownBurn":"130/115/100","cost":[0,0,0],"costBurn":"0","effect":[null,[150,250,350],[1.1,1.1,1.1],[700,850,1000],[30,40,50],[2.5,2.5,2.5],[275,275,275],[300,300,300],[1,1,1],[0.25,0.25,0.25],[0.1,0.1,0.1]],"effectBurn":[null,"150/250/350","1.1","700/850/1000","30/40/50","2.5","275","300","1","0.25","0.1"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[300,300,300],"rangeBurn":"300","image":{"full":"ZacR.png","sprite":"spell13.png","group":"spell","x":192,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Zed":{"id":238,"key":"Zed","name":"Zed","title":"the Master of Shadows","spells":[{"id":"ZedQ","name":"Razor Shuriken","description":"Zed and his shadow both throw their spinning blades forward, dealing damage to any targets they pass through.","tooltip":"Zed and his shadows throw their shurikens, each dealing {{ e1 }} (+{{ a1 }}) physical damage to the first enemy they pass through, and {{ e3 }} (+{{ a2 }}) physical damage to each additional enemy.
Additional shurikens that hit the same enemy deal 25% less damage than previous shurikens.","leveltip":{"label":["Damage","Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,6,6,6,6],"cooldownBurn":"6","cost":[75,70,65,60,55],"costBurn":"75/70/65/60/55","effect":[null,[70,105,140,175,210],[0.6,0.6,0.6,0.6,0.6],[42,63,84,105,126],[0.75,0.75,0.75,0.75,0.75],[925,925,925,925,925],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"70/105/140/175/210","0.6","42/63/84/105/126","0.75","925","0","0","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.9,"key":"a1"},{"link":"bonusattackdamage","coeff":0.54,"key":"a2"}],"costType":" Energy","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"ZedQ.png","sprite":"spell13.png","group":"spell","x":240,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ZedW","name":"Living Shadow","description":"Zed's shadow dashes forward, remaining in place for 4 seconds, and mimicking his spell casts. Zed can reactivate to swap places with the shadow.","tooltip":"Passive: Whenever Zed and his shadows strike an enemy with the same ability, Zed gains {{ e3 }} energy. Energy can only be gained once per cast ability.
Active: Zed's shadow dashes forward, remaining in place for {{ e1 }} seconds. Reactivating Living Shadow will cause Zed to switch positions with this shadow.","leveltip":{"label":["Energy Return","Cost","Cooldown"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cost }} -> {{ costNL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[22,20,18,16,14],"cooldownBurn":"22/20/18/16/14","cost":[40,35,30,25,20],"costBurn":"40/35/30/25/20","effect":[null,[4.5,4.5,4.5,4.5,4.5],[0.2,0.2,0.2,0.2,0.2],[30,35,40,45,50],[4.5,4.5,4.5,4.5,4.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"4.5","0.2","30/35/40/45/50","4.5","0","0","0","0","0","0"],"vars":[],"costType":" Energy","maxammo":"-1","range":[650,650,650,650,650],"rangeBurn":"650","image":{"full":"ZedW.png","sprite":"spell13.png","group":"spell","x":288,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ZedE","name":"Shadow Slash","description":"Zed and his shadow spin their blades, creating a burst of shadow energy. The shadow's spin slows.","tooltip":"Zed and his shadows slash, dealing {{ e1 }} (+{{ a1 }}) physical damage to nearby enemies.
Each enemy champion hit by Zed's slash reduces Living Shadow's cooldown by {{ e4 }} seconds.
Enemies hit by a Shadow's slash are slowed by {{ e2 }}% for 1.5 seconds. Enemies hit by multiple slashes take no additional damage but are slowed by {{ e3 }}% instead.","leveltip":{"label":["Damage","Slow","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[5,4.5,4,3.5,3],"cooldownBurn":"5/4.5/4/3.5/3","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[65,90,115,140,165],[20,25,30,35,40],[30,37.5,45,52.5,60],[2,2,2,2,2],[1.5,1.5,1.5,1.5,1.5],[315,315,315,315,315],[290,290,290,290,290],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"65/90/115/140/165","20/25/30/35/40","30/37.5/45/52.5/60","2","1.5","315","290","0","0","0"],"vars":[{"link":"bonusattackdamage","coeff":0.8,"key":"a1"}],"costType":" Energy","maxammo":"-1","range":[290,290,290,290,290],"rangeBurn":"290","image":{"full":"ZedE.png","sprite":"spell13.png","group":"spell","x":336,"y":96,"w":48,"h":48},"resource":"{{ cost }} Energy"},{"id":"ZedR","name":"Death Mark","description":"Zed leaves a shadow behind and dashes to target Champion, marking them for death. After 3 seconds, the mark will trigger, dealing a percentage of the damage Zed has dealt while the mark was active. If the Champion dies under Death Mark, Zed can gain a portion of their attack damage.","tooltip":"Zed becomes untargetable and dashes to an enemy champion, marking them. After 3 seconds, the mark triggers, dealing physical damage equal to {{ a1 }} + {{ e2 }}% of all damage dealt to the target by Zed while the mark was active.
The dash leaves a shadow behind for {{ e4 }} seconds. Reactivating Death Mark causes Zed to switch positions with this shadow.
Reaper of Shadows: Zed reaps the shadow of the strongest foe slain under Death Mark, gaining {{ f2 }} attack damage. ({{ e0 }} + {{ e9 }}% of the victim's attack damage.)","leveltip":{"label":["Mark Detonation Damage","Percent Attack Damage Stolen","Cooldown"],"effect":["{{ e2 }}% -> {{ e2NL }}%","{{ e9 }}% -> {{ e9NL }}%","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,100,80],"cooldownBurn":"120/100/80","cost":[0,0,0],"costBurn":"0","effect":[null,[1,1,1],[25,35,45],[0.5,0.5,0.5],[6,6,6],[6.5,6.5,6.5],[3,3,3],[7.5,7.5,7.5],[4,4,4],[5,10,15],[5,5,5]],"effectBurn":[null,"1","25/35/45","0.5","6","6.5","3","7.5","4","5/10/15","5"],"vars":[{"link":"attackdamage","coeff":1,"key":"a1"}],"costType":"No Cost","maxammo":"-1","range":[625,625,625],"rangeBurn":"625","image":{"full":"ZedR.png","sprite":"spell13.png","group":"spell","x":384,"y":96,"w":48,"h":48},"resource":"No Cost"}]},"Ziggs":{"id":115,"key":"Ziggs","name":"Ziggs","title":"the Hexplosives Expert","spells":[{"id":"ZiggsQ","name":"Bouncing Bomb","description":"Ziggs throws a bouncing bomb that deals magic damage.","tooltip":"Ziggs throws a bouncing bomb that deals {{ e1 }} (+{{ a1 }}) magic damage.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[6,5.5,5,4.5,4],"cooldownBurn":"6/5.5/5/4.5/4","cost":[50,55,60,65,70],"costBurn":"50/55/60/65/70","effect":[null,[75,120,165,210,255],[850,850,850,850,850],[325,325,325,325,325],[225,225,225,225,225],[150,150,150,150,150],[240,240,240,240,240],[70,70,70,70,70],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/120/165/210/255","850","325","225","150","240","70","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.65,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"ZiggsQ.png","sprite":"spell13.png","group":"spell","x":432,"y":96,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZiggsW","name":"Satchel Charge","description":"Ziggs flings an explosive charge that detonates after 4 seconds, or when this ability is activated again. The explosion deals magic damage to enemies, knocking them away. Ziggs is also knocked away, but takes no damage. Ziggs can use the Satchel to hexplode vulnerable enemy turrets.","tooltip":"Ziggs flings an explosive charge that detonates after {{ e2 }} seconds, or when this ability is activated again. The explosion deals {{ e1 }} (+{{ a1 }}) magic damage to enemies, knocking them away. Ziggs is also knocked away, but takes no damage.
Satchel Charge will hexplode structurally unsound towers below {{ f1*100 }}% of their Health.","leveltip":{"label":["Damage","Cooldown","Tower Destruction Threshold"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ f1*100 }}% -> {{ f2*100 }}%"]},"maxrank":5,"cooldown":[26,24,22,20,18],"cooldownBurn":"26/24/22/20/18","cost":[65,65,65,65,65],"costBurn":"65","effect":[null,[70,105,140,175,210],[4,4,4,4,4],[0.25,0.275,0.3,0.325,0.35],[600,600,600,600,600],[50,50,50,50,50],[400,400,400,400,400],[325,325,325,325,325],[775,775,775,775,775],[400,400,400,400,400],[6,6,6,6,6]],"effectBurn":[null,"70/105/140/175/210","4","0.25/0.275/0.3/0.325/0.35","600","50","400","325","775","400","6"],"vars":[{"link":"spelldamage","coeff":0.35,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[1000,1000,1000,1000,1000],"rangeBurn":"1000","image":{"full":"ZiggsW.png","sprite":"spell13.png","group":"spell","x":0,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZiggsE","name":"Hexplosive Minefield","description":"Ziggs scatters proximity mines that detonate on enemy contact, dealing magic damage and slowing.","tooltip":"Ziggs scatters proximity mines that detonate on enemy contact, dealing {{ e1 }} (+{{ a1 }}) magic damage. Enemies hit are slowed by {{ e2 }}% for {{ e4 }} seconds.
Enemies triggering a mine take {{ e5 }}% damage from additional mines. Mines disarm automatically after {{ e3 }} seconds.","leveltip":{"label":["Mine Damage","Slow","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e2 }}% -> {{ e2NL }}%","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[16,16,16,16,16],"cooldownBurn":"16","cost":[70,80,90,100,110],"costBurn":"70/80/90/100/110","effect":[null,[40,65,90,115,140],[20,25,30,35,40],[10,10,10,10,10],[1.5,1.5,1.5,1.5,1.5],[40,40,40,40,40],[-0.2,-0.25,-0.3,-0.35,-0.4],[135,135,135,135,135],[150,150,150,150,150],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"40/65/90/115/140","20/25/30/35/40","10","1.5","40","-0.2/-0.25/-0.3/-0.35/-0.4","135","150","0","0"],"vars":[{"link":"spelldamage","coeff":0.3,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"ZiggsE.png","sprite":"spell13.png","group":"spell","x":48,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZiggsR","name":"Mega Inferno Bomb","description":"Ziggs deploys his ultimate creation, the Mega Inferno Bomb, hurling it an enormous distance. Enemies in the primary blast zone take more damage than those farther away. ","tooltip":"Ziggs deploys his ultimate creation, the Mega Inferno Bomb, hurling it an enormous distance. Enemies in the primary blast zone take {{ e1 }} (+{{ a1 }}) magic damage. Enemies farther away take two-thirds damage.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":3,"cooldown":[120,105,90],"cooldownBurn":"120/105/90","cost":[100,100,100],"costBurn":"100","effect":[null,[300,450,600],[66.6667,66.6667,66.6667],[525,525,525],[250,250,250],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"300/450/600","66.67","525","250","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":1.1,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[5000,5000,5000],"rangeBurn":"5000","image":{"full":"ZiggsR.png","sprite":"spell13.png","group":"spell","x":96,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Zilean":{"id":26,"key":"Zilean","name":"Zilean","title":"the Chronokeeper","spells":[{"id":"ZileanQ","name":"Time Bomb","description":"Tosses a bomb to target area that sticks to units that come near it (prioritizes Champions). It detonates after 3 seconds, dealing area of effect damage. If a Time Bomb is detonated early by another Time Bomb, it also stuns enemies.","tooltip":"Zilean tosses a time-delayed bomb to a location. The bomb sticks to the first unit which comes within a small area around it (prioritizes Champions). After {{ e2 }} seconds it detonates, dealing {{ e1 }} (+{{ a1 }}) magic damage to all surrounding enemies.
Placing two bombs on a unit detonates the first bomb early, stunning all enemies in the blast for {{ e4 }} seconds.","leveltip":{"label":["Damage","Stun Duration","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e4 }} -> {{ e4NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[10,9.5,9,8.5,8],"cooldownBurn":"10/9.5/9/8.5/8","cost":[60,65,70,75,80],"costBurn":"60/65/70/75/80","effect":[null,[75,115,165,230,300],[3,3,3,3,3],[7,7,7,7,7],[1.1,1.2,1.3,1.4,1.5],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"75/115/165/230/300","3","7","1.1/1.2/1.3/1.4/1.5","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.9,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900,900,900],"rangeBurn":"900","image":{"full":"ZileanQ.png","sprite":"spell13.png","group":"spell","x":144,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZileanW","name":"Rewind","description":"Zilean can prepare himself for future confrontations, reducing the cooldowns of his other basic abilities. ","tooltip":"Reduces Zilean's other basic spell cooldowns by {{ e2 }} seconds.","leveltip":{"label":["Cooldown"],"effect":["{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[14,12,10,8,6],"cooldownBurn":"14/12/10/8/6","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[20,30,40,50,60],[10,10,10,10,10],[35,35,35,35,35],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"20/30/40/50/60","10","35","0","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[600,600,600,600,600],"rangeBurn":"600","image":{"full":"ZileanW.png","sprite":"spell13.png","group":"spell","x":192,"y":144,"w":48,"h":48},"resource":"{{ e3 }} Mana"},{"id":"TimeWarp","name":"Time Warp","description":"Zilean bends time around any unit, decreasing an enemy's Movement Speed or increasing an ally's Movement Speed for a short time.","tooltip":"Zilean increases an allied champion's Movement Speed, or slows an enemy champion, by {{ e2 }}% for {{ e1 }} seconds.","leveltip":{"label":["Speed"],"effect":["{{ e2 }}% -> {{ e2NL }}%"]},"maxrank":5,"cooldown":[15,15,15,15,15],"cooldownBurn":"15","cost":[50,50,50,50,50],"costBurn":"50","effect":[null,[2.5,2.5,2.5,2.5,2.5],[40,55,70,85,99],[1.5,1.5,1.5,1.5,1.5],[8,8,8,8,8],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"2.5","40/55/70/85/99","1.5","8","0","0","0","0","0","0"],"vars":[],"costType":" Mana","maxammo":"-1","range":[700,700,700,700,700],"rangeBurn":"700","image":{"full":"TimeWarp.png","sprite":"spell13.png","group":"spell","x":240,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ChronoShift","name":"Chronoshift","description":"Zilean places a protective time rune on an allied champion, teleporting the champion back in time if they take lethal damage.","tooltip":"Zilean marks himself or an allied champion with a protective time rune for {{ e2 }} seconds. If the target would take lethal damage, they are instead transported back in time, arriving with {{ e1 }} (+{{ a1 }}) Health.","leveltip":{"label":["Health Restored","Cooldown","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":3,"cooldown":[120,90,60],"cooldownBurn":"120/90/60","cost":[125,150,175],"costBurn":"125/150/175","effect":[null,[600,850,1100],[5,5,5],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"600/850/1100","5","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":2,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[900,900,900],"rangeBurn":"900","image":{"full":"ChronoShift.png","sprite":"spell13.png","group":"spell","x":288,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"}]},"Zyra":{"id":143,"key":"Zyra","name":"Zyra","title":"Rise of the Thorns","spells":[{"id":"ZyraQ","name":"Deadly Spines","description":"Thick vines spread through the ground and explode into spines, dealing magic damage to enemies within the area. If cast near a seed, Deadly Spines grows a Thorn Spitter plant, which fires at enemies from afar.","tooltip":"Thick vines spread through the ground and explode into spines, dealing {{ e1 }} (+{{ a1 }}) magic damage to enemies within the area.
Garden of Thorns: If Deadly Spines is cast near a seed, a Thorn Spitter grows, dealing {{ f1 }} (+{{ a2 }}) magic damage. A Thorn Spitter has 750 range and lasts {{ f2 }} seconds.","leveltip":{"label":["Damage","Cooldown"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ cooldown }} -> {{ cooldownNL }}"]},"maxrank":5,"cooldown":[7,6.5,6,5.5,5],"cooldownBurn":"7/6.5/6/5.5/5","cost":[70,70,70,70,70],"costBurn":"70","effect":[null,[60,95,130,165,200],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.6,"key":"a1"},{"link":"spelldamage","coeff":0.15,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[800,800,800,800,800],"rangeBurn":"800","image":{"full":"ZyraQ.png","sprite":"spell13.png","group":"spell","x":336,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZyraW","name":"Rampant Growth","description":"Zyra plants a seed, lasting up to 60 seconds. Deadly Spines and Grasping Roots cast near seeds will turn them into plants who fight for Zyra. Additionally, Rampant Growth passively grants her plants improved maximum Health.","tooltip":"Plants a seed, lasting {{ e6 }} seconds. If an enemy Champion steps on a seed, it dies. Seeds spawned by Rampant Growth grant vision in a small area, and if stepped on they grant True Sight of the enemy champion for {{ e3 }} seconds.
Zyra stores a seed every {{ ammorechargetime }} seconds (Max: 8 seeds planted).
Passive: Zyra's plants gain {{ e8 }}% extra maximum Health.","leveltip":{"label":["Plant Health Bonus","Seed Recharge Rate"],"effect":["{{ e8 }}% -> {{ e8NL }}%","{{ ammorechargetime }} -> {{ ammorechargetimeNL }}"]},"maxrank":5,"cooldown":[0,0,0,0,0],"cooldownBurn":"0","cost":[0,0,0,0,0],"costBurn":"0","effect":[null,[0,0,0,0,0],[0,0,0,0,0],[2,2,2,2,2],[0,0,0,0,0],[0,0,0,0,0],[60,60,60,60,60],[0,0,0,0,0],[10,20,30,40,50],[0.4,0.8,1.2,1.6,2],[0,0,0,0,0]],"effectBurn":[null,"0","0","2","0","0","60","0","10/20/30/40/50","0.4/0.8/1.2/1.6/2","0"],"vars":[],"costType":"1 Seed","maxammo":"2","range":[850,850,850,850,850],"rangeBurn":"850","image":{"full":"ZyraW.png","sprite":"spell13.png","group":"spell","x":384,"y":144,"w":48,"h":48},"resource":"1 Seed"},{"id":"ZyraE","name":"Grasping Roots","description":"Zyra sends forth vines through the ground to ensnare her target, dealing damage and rooting enemies they come across. If cast near a seed, Grasping Roots grows a Vine Lasher, whose short range attacks reduce enemy Movement Speed.","tooltip":"Sends forward vines dealing {{ e1 }} (+{{ a1 }}) magic damage and rooting enemies for {{ e5 }} second(s).
Garden of Thorns: If Grasping Roots passes near a seed, a Vine Lasher grows dealing {{ f1 }} (+{{ a2 }}) magic damage and slowing enemies by {{ e2 }}% for {{ e3 }} seconds. A Vine Lasher has 400 range and lasts {{ f2 }} seconds.","leveltip":{"label":["Damage","Root Duration","Mana Cost"],"effect":["{{ e1 }} -> {{ e1NL }}","{{ e5 }} -> {{ e5NL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":5,"cooldown":[12,12,12,12,12],"cooldownBurn":"12","cost":[70,75,80,85,90],"costBurn":"70/75/80/85/90","effect":[null,[60,95,130,165,200],[30,30,30,30,30],[2,2,2,2,2],[4,4,4,0,0],[0.75,1,1.25,1.5,1.75],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],"effectBurn":[null,"60/95/130/165/200","30","2","4/4/4/0/0","0.75/1/1.25/1.5/1.75","0","0","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.5,"key":"a1"},{"link":"spelldamage","coeff":0.15,"key":"a2"}],"costType":" Mana","maxammo":"-1","range":[1100,1100,1100,1100,1100],"rangeBurn":"1100","image":{"full":"ZyraE.png","sprite":"spell13.png","group":"spell","x":432,"y":144,"w":48,"h":48},"resource":"{{ cost }} Mana"},{"id":"ZyraR","name":"Stranglethorns","description":"Zyra summons a twisted thicket at her target location, dealing damage to enemies as it expands and knocking them airborne as it contracts.","tooltip":"Summons the fury of nature, growing a twisted thicket at target location which deals {{ e3 }} (+{{ a1 }}) magic damage to all enemies in the area as it expands. After 2 seconds, the vines snap upward knocking enemies into the air for {{ e1 }} second.
Garden of Thorns: Plants within the thicket are enraged, attacking in a flurry for 150% total damage.","leveltip":{"label":["Damage","Cooldown","Mana Cost"],"effect":["{{ e3 }} -> {{ e3NL }}","{{ cooldown }} -> {{ cooldownNL }}","{{ cost }} -> {{ costNL }}"]},"maxrank":3,"cooldown":[130,120,110],"cooldownBurn":"130/120/110","cost":[100,120,140],"costBurn":"100/120/140","effect":[null,[1,1,1],[0,0,0],[180,265,350],[0,0,0],[0,0,0],[0,0,0],[150,150,150],[0,0,0],[0,0,0],[0,0,0]],"effectBurn":[null,"1","0","180/265/350","0","0","0","150","0","0","0"],"vars":[{"link":"spelldamage","coeff":0.7,"key":"a1"}],"costType":" Mana","maxammo":"-1","range":[700,700,700],"rangeBurn":"700","image":{"full":"ZyraR.png","sprite":"spell14.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"{{ cost }} Mana"}]}}
================================================
FILE: api_data/summoners.json
================================================
{"SummonerBarrier":{"id":21,"name":"Barrier","description":"Shields your champion from 115-455 damage (depending on champion level) for 2 seconds.","tooltip":"Temporarily shields {{ f1 }} damage from your champion for 2 seconds.","maxrank":1,"cooldown":[180],"cooldownBurn":"180","cost":[0],"costBurn":"0","effect":[null,[95],[20],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"95","20","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerBarrier","summonerLevel":4,"modes":["ARAM","CLASSIC","TUTORIAL","ODIN","ASCENSION","FIRSTBLOOD","ASSASSINATE","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[1200],"rangeBurn":"1200","image":{"full":"SummonerBarrier.png","sprite":"spell0.png","group":"spell","x":0,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerBoost":{"id":1,"name":"Cleanse","description":"Removes all disables (excluding suppression) and summoner spell debuffs affecting your champion and lowers the duration of incoming disables by 65% for 3 seconds.","tooltip":"Removes all disables (excluding suppression) and summoner spell debuffs affecting your champion and reduces the duration of disables by 65% for the next {{ f1 }} seconds.","maxrank":1,"cooldown":[210],"cooldownBurn":"210","cost":[0],"costBurn":"0","effect":[null,[0.65],[3],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"0.65","3","0","0","0","0","0","0","0","0"],"vars":[{"link":"@text","coeff":3,"key":"f1"}],"key":"SummonerBoost","summonerLevel":6,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[200],"rangeBurn":"200","image":{"full":"SummonerBoost.png","sprite":"spell0.png","group":"spell","x":48,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerDarkStarChampSelect1":{"id":35,"name":"Disabled Summoner Spells","description":"Summoner spells are disabled in this mode.","tooltip":"","maxrank":1,"cooldown":[0],"cooldownBurn":"0","cost":[0],"costBurn":"0","effect":[null,[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"0","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerDarkStarChampSelect1","summonerLevel":1,"modes":["DARKSTAR"],"costType":"","maxammo":"-1","range":[2500],"rangeBurn":"2500","image":{"full":"SummonerDarkStarChampSelect1.png","sprite":"spell0.png","group":"spell","x":96,"y":0,"w":48,"h":48}},"SummonerDarkStarChampSelect2":{"id":36,"name":"Disabled Summoner Spells","description":"Summoner spells are disabled in this mode.","tooltip":"","maxrank":1,"cooldown":[0],"cooldownBurn":"0","cost":[0],"costBurn":"0","effect":[null,[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"0","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerDarkStarChampSelect2","summonerLevel":1,"modes":["DARKSTAR"],"costType":"","maxammo":"-1","range":[2500],"rangeBurn":"2500","image":{"full":"SummonerDarkStarChampSelect2.png","sprite":"spell0.png","group":"spell","x":144,"y":0,"w":48,"h":48}},"SummonerDot":{"id":14,"name":"Ignite","description":"Ignites target enemy champion, dealing 70-410 true damage (depending on champion level) over 5 seconds, grants you vision of the target, and reduces healing effects on them for the duration.","tooltip":"Ignite deals {{ f1 }} true damage to target enemy champion over 5 seconds, grants you vision of the target and applies Grievous Wounds for the duration.
(Grievous Wounds reduces healing effects by 40%. This vision does not reveal stealthed enemies.)","maxrank":1,"cooldown":[210],"cooldownBurn":"210","cost":[0],"costBurn":"0","effect":[null,[5],[10],[4],[100],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"5","10","4","100","0","0","0","0","0","0"],"vars":[{"link":"@player.level","coeff":[70,90,110,130,150,170,190,210,230,250,270,290,310,330,350,370,390,410],"key":"f1"}],"key":"SummonerDot","summonerLevel":10,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","ASSASSINATE","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[600],"rangeBurn":"600","image":{"full":"SummonerDot.png","sprite":"spell0.png","group":"spell","x":192,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerExhaust":{"id":3,"name":"Exhaust","description":"Exhausts target enemy champion, reducing their Movement Speed by 30%, and their damage dealt by 40% for 2.5 seconds.","tooltip":"Exhausts target enemy champion, reducing their Movement Speed by {{ f3 }}%, and their damage dealt by {{ f2 }}% for 2.5 seconds.","maxrank":1,"cooldown":[210],"cooldownBurn":"210","cost":[0],"costBurn":"0","effect":[null,[2.5],[40],[0],[0],[30],[0],[0],[0],[0],[0]],"effectBurn":[null,"2.5","40","0","0","30","0","0","0","0","0"],"vars":[],"key":"SummonerExhaust","summonerLevel":4,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[650],"rangeBurn":"650","image":{"full":"SummonerExhaust.png","sprite":"spell0.png","group":"spell","x":240,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerFlash":{"id":4,"name":"Flash","description":"Teleports your champion a short distance toward your cursor's location.","tooltip":"Teleports your champion a short distance toward your cursor's location.","maxrank":1,"cooldown":[300],"cooldownBurn":"300","cost":[0],"costBurn":"0","effect":[null,[400],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"400","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerFlash","summonerLevel":8,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","ASSASSINATE","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[425],"rangeBurn":"425","image":{"full":"SummonerFlash.png","sprite":"spell0.png","group":"spell","x":288,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerHaste":{"id":6,"name":"Ghost","description":"Your champion gains increased Movement Speed and can move through units for 10 seconds. Grants a maximum of 28-45% (depending on champion level) Movement Speed after accelerating for 2 seconds.","tooltip":"Your champion gains increased Movement Speed and can move through units for 10 seconds. Grants a maximum of {{ f1 }}% Movement Speed after accelerating for 2 seconds.","maxrank":1,"cooldown":[180],"cooldownBurn":"180","cost":[0],"costBurn":"0","effect":[null,[27],[0],[2],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"27","0","2","0","0","0","0","0","0","0"],"vars":[{"link":"@text","coeff":27,"key":"f1"}],"key":"SummonerHaste","summonerLevel":1,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","ASSASSINATE","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[200],"rangeBurn":"200","image":{"full":"SummonerHaste.png","sprite":"spell0.png","group":"spell","x":336,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerHeal":{"id":7,"name":"Heal","description":"Restores 90-345 Health (depending on champion level) and grants 30% Movement Speed for 1 second to you and target allied champion. This healing is halved for units recently affected by Summoner Heal.","tooltip":"Restores {{ f1 }} Health and grants 30% Movement Speed for 1 second to your champion and target allied champion. This healing is halved for units recently affected by Summoner Heal.
If this spell cannot find a target, it will cast on the most wounded allied champion in range.","maxrank":1,"cooldown":[240],"cooldownBurn":"240","cost":[0],"costBurn":"0","effect":[null,[0.3],[75],[15],[0.5],[826],[0],[0],[0],[0],[0]],"effectBurn":[null,"0.3","75","15","0.5","826","0","0","0","0","0"],"vars":[{"link":"@player.level","coeff":[90,105,120,135,150,165,180,195,210,225,240,255,270,285,300,315,330,345],"key":"f1"}],"key":"SummonerHeal","summonerLevel":1,"modes":["CLASSIC","ODIN","TUTORIAL","ARAM","ASCENSION","FIRSTBLOOD","ASSASSINATE","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"-1","range":[850],"rangeBurn":"850","image":{"full":"SummonerHeal.png","sprite":"spell0.png","group":"spell","x":384,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerMana":{"id":13,"name":"Clarity","description":"Restores 50% of your champion's maximum Mana. Also restores allies for 25% of their maximum Mana.","tooltip":"Restores {{ f1 }}% maximum Mana to your Champion and {{ f2 }}% to nearby allies.","maxrank":1,"cooldown":[240],"cooldownBurn":"240","cost":[0],"costBurn":"0","effect":[null,[50],[25],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"50","25","0","0","0","0","0","0","0","0"],"vars":[{"link":"@player.level","coeff":[190,220,250,280,310,340,370,400,430,460,490,520,550,580,610,640,670,700],"key":"f1"},{"link":"@player.level","coeff":[95,110,125,140,155,170,185,200,215,230,245,260,275,290,305,320,335,350],"key":"f2"}],"key":"SummonerMana","summonerLevel":1,"modes":["ODIN","ARAM","ASCENSION"],"costType":"No Cost","maxammo":"-1","range":[600],"rangeBurn":"600","image":{"full":"SummonerMana.png","sprite":"spell0.png","group":"spell","x":432,"y":0,"w":48,"h":48},"resource":"No Cost"},"SummonerPoroRecall":{"id":30,"name":"To the King!","description":"Quickly travel to the Poro King's side.","tooltip":"Passive: Hitting an enemy champion with a Poro gives your team a Poro Mark. Upon reaching 10 Poro Marks, your team summons the Poro King to fight alongside them. While the Poro King is active, no Poro Marks can be scored by either team.
Active: Quickly dash to King Poro's side. Can only be cast while the Poro King is summoned for your team.
''Poros tug the heartstrings. The rest of you just comes along for the ride.''","maxrank":1,"cooldown":[10],"cooldownBurn":"10","cost":[0],"costBurn":"0","effect":[null,[3000],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"3000","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerPoroRecall","summonerLevel":1,"modes":["KINGPORO"],"costType":"No Cost","maxammo":"-1","range":[200],"rangeBurn":"200","image":{"full":"SummonerPoroRecall.png","sprite":"spell0.png","group":"spell","x":0,"y":48,"w":48,"h":48},"resource":"No Cost"},"SummonerPoroThrow":{"id":31,"name":"Poro Toss","description":"Toss a Poro at your enemies. If it hits, you can quickly travel to your target as a follow up.","tooltip":"Toss a Poro a long distance, dealing {{ f2 }} true damage to the first enemy unit hit, granting True Sight of the target. This ability can be recast for 3 seconds if it hits an enemy to dash to the target hit. Dashing to the target will reduce the cooldown of Poro Toss by 5 seconds.
Poros are not blocked by spell shields or wind walls because they are animals, not spells!
''Poros are a model for Runeterran aerodynamics.''","maxrank":1,"cooldown":[20],"cooldownBurn":"20","cost":[0],"costBurn":"0","effect":[null,[20],[10],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"20","10","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerPoroThrow","summonerLevel":1,"modes":["KINGPORO"],"costType":"No Cost","maxammo":"-1","range":[2500],"rangeBurn":"2500","image":{"full":"SummonerPoroThrow.png","sprite":"spell0.png","group":"spell","x":48,"y":48,"w":48,"h":48},"resource":"No Cost"},"SummonerSiegeChampSelect1":{"id":33,"name":"Nexus Siege: Siege Weapon Slot","description":"In Nexus Siege, Summoner Spells are replaced with Siege Weapon Slots. Spend Crystal Shards to buy single-use Siege Weapons from the item shop, then use your Summoner Spell keys to activate them!","tooltip":"","maxrank":1,"cooldown":[0],"cooldownBurn":"0","cost":[0],"costBurn":"0","effect":[null,[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"0","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerSiegeChampSelect1","summonerLevel":1,"modes":["SIEGE"],"costType":"","maxammo":"-1","range":[2500],"rangeBurn":"2500","image":{"full":"SummonerSiegeChampSelect1.png","sprite":"spell0.png","group":"spell","x":96,"y":48,"w":48,"h":48}},"SummonerSiegeChampSelect2":{"id":34,"name":"Nexus Siege: Siege Weapon Slot","description":"In Nexus Siege, Summoner Spells are replaced with Siege Weapon Slots. Spend Crystal Shards to buy single-use Siege Weapons from the item shop, then use your Summoner Spell keys to activate them!","tooltip":"","maxrank":1,"cooldown":[0],"cooldownBurn":"0","cost":[0],"costBurn":"0","effect":[null,[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"0","0","0","0","0","0","0","0","0","0"],"vars":[],"key":"SummonerSiegeChampSelect2","summonerLevel":1,"modes":["SIEGE"],"costType":"","maxammo":"-1","range":[2500],"rangeBurn":"2500","image":{"full":"SummonerSiegeChampSelect2.png","sprite":"spell0.png","group":"spell","x":144,"y":48,"w":48,"h":48}},"SummonerSmite":{"id":11,"name":"Smite","description":"Deals 390-1000 true damage (depending on champion level) to target epic or large monster or enemy minion. Restores Health based on your maximum life when used against monsters.","tooltip":"Deals {{ f1 }} true damage to target epic or large monster or enemy minion. Against monsters, additionally restores {{ f6 }}(+{{ f7 }}) Health.
Smite regains a charge every {{ f3 }} seconds, up to a maximum of 2 charges.","maxrank":1,"cooldown":[75],"cooldownBurn":"75","cost":[0],"costBurn":"0","effect":[null,[15],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"15","0","0","0","0","0","0","0","0","0"],"vars":[{"link":"@player.level","coeff":[390,410,430,450,480,510,540,570,600,640,680,720,760,800,850,900,950,1000],"key":"f1"}],"key":"SummonerSmite","summonerLevel":10,"modes":["CLASSIC","TUTORIAL","FIRSTBLOOD","URF","ARSR","DOOMBOTSTEEMO"],"costType":"No Cost","maxammo":"2","range":[500],"rangeBurn":"500","image":{"full":"SummonerSmite.png","sprite":"spell0.png","group":"spell","x":192,"y":48,"w":48,"h":48},"resource":"No Cost"},"SummonerSnowball":{"id":32,"name":"Mark","description":"Throw a snowball in a straight line at your enemies. If it hits an enemy, they become marked, granting True Sight, and your champion can quickly travel to the marked target as a follow up.","tooltip":"Throw a snowball a long distance, dealing {{ f1 }} true damage to the first enemy unit hit and granting True Sight of the target. If it hits an enemy, this ability can be recast for {{ f2 }} seconds to Dash to the tagged unit, dealing an additional {{ f5 }} true damage. Dashing to the target will reduce the cooldown of Mark by {{ f3 }}%.
Mark projectiles are not stopped by spell shields or projectile mitigation.","maxrank":1,"cooldown":[80],"cooldownBurn":"80","cost":[0],"costBurn":"0","effect":[null,[1200],[20],[10],[0.5],[0],[0],[0],[0],[0],[0]],"effectBurn":[null,"1200","20","10","0.5","0","0","0","0","0","0"],"vars":[],"key":"SummonerSnowball","summonerLevel":1,"modes":["ARAM","FIRSTBLOOD"],"costType":"No Cost","maxammo":"-1","range":[1600],"rangeBurn":"1600","image":{"full":"SummonerSnowball.png","sprite":"spell0.png","group":"spell","x":240,"y":48,"w":48,"h":48},"resource":"No Cost"},"SummonerTeleport":{"id":12,"name":"Teleport","description":"After channeling for 4.5 seconds, teleports your champion to target allied structure, minion, or ward.","tooltip":"After channeling for {{ f1 }} seconds, your champion teleports to target allied structure, minion, or ward.
.directive('accordionTransclude', function() {
return {
require: '^accordionGroup',
link: function(scope, element, attr, controller) {
scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) {
if ( heading ) {
element.html('');
element.append(heading);
}
});
}
};
});
angular.module('ui.bootstrap.alert', [])
.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {
$scope.closeable = 'close' in $attrs;
this.close = $scope.close;
}])
.directive('alert', function () {
return {
restrict:'EA',
controller:'AlertController',
templateUrl:'template/alert/alert.html',
transclude:true,
replace:true,
scope: {
type: '@',
close: '&'
}
};
})
.directive('dismissOnTimeout', ['$timeout', function($timeout) {
return {
require: 'alert',
link: function(scope, element, attrs, alertCtrl) {
$timeout(function(){
alertCtrl.close();
}, parseInt(attrs.dismissOnTimeout, 10));
}
};
}]);
angular.module('ui.bootstrap.bindHtml', [])
.directive('bindHtmlUnsafe', function () {
return function (scope, element, attr) {
element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe);
scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) {
element.html(value || '');
});
};
});
angular.module('ui.bootstrap.buttons', [])
.constant('buttonConfig', {
activeClass: 'active',
toggleEvent: 'click'
})
.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {
this.activeClass = buttonConfig.activeClass || 'active';
this.toggleEvent = buttonConfig.toggleEvent || 'click';
}])
.directive('btnRadio', function () {
return {
require: ['btnRadio', 'ngModel'],
controller: 'ButtonsController',
link: function (scope, element, attrs, ctrls) {
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
//model -> UI
ngModelCtrl.$render = function () {
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
};
//ui->model
element.bind(buttonsCtrl.toggleEvent, function () {
var isActive = element.hasClass(buttonsCtrl.activeClass);
if (!isActive || angular.isDefined(attrs.uncheckable)) {
scope.$apply(function () {
ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));
ngModelCtrl.$render();
});
}
});
}
};
})
.directive('btnCheckbox', function () {
return {
require: ['btnCheckbox', 'ngModel'],
controller: 'ButtonsController',
link: function (scope, element, attrs, ctrls) {
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
function getTrueValue() {
return getCheckboxValue(attrs.btnCheckboxTrue, true);
}
function getFalseValue() {
return getCheckboxValue(attrs.btnCheckboxFalse, false);
}
function getCheckboxValue(attributeValue, defaultValue) {
var val = scope.$eval(attributeValue);
return angular.isDefined(val) ? val : defaultValue;
}
//model -> UI
ngModelCtrl.$render = function () {
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
};
//ui->model
element.bind(buttonsCtrl.toggleEvent, function () {
scope.$apply(function () {
ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
ngModelCtrl.$render();
});
});
}
};
});
/**
* @ngdoc overview
* @name ui.bootstrap.carousel
*
* @description
* AngularJS version of an image carousel.
*
*/
angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
.controller('CarouselController', ['$scope', '$timeout', '$interval', '$transition', function ($scope, $timeout, $interval, $transition) {
var self = this,
slides = self.slides = $scope.slides = [],
currentIndex = -1,
currentInterval, isPlaying;
self.currentSlide = null;
var destroyed = false;
/* direction: "prev" or "next" */
self.select = $scope.select = function(nextSlide, direction) {
var nextIndex = slides.indexOf(nextSlide);
//Decide direction if it's not given
if (direction === undefined) {
direction = nextIndex > currentIndex ? 'next' : 'prev';
}
if (nextSlide && nextSlide !== self.currentSlide) {
if ($scope.$currentTransition) {
$scope.$currentTransition.cancel();
//Timeout so ng-class in template has time to fix classes for finished slide
$timeout(goNext);
} else {
goNext();
}
}
function goNext() {
// Scope has been destroyed, stop here.
if (destroyed) { return; }
//If we have a slide to transition from and we have a transition type and we're allowed, go
if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) {
//We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime
nextSlide.$element.addClass(direction);
var reflow = nextSlide.$element[0].offsetWidth; //force reflow
//Set all other slides to stop doing their stuff for the new transition
angular.forEach(slides, function(slide) {
angular.extend(slide, {direction: '', entering: false, leaving: false, active: false});
});
angular.extend(nextSlide, {direction: direction, active: true, entering: true});
angular.extend(self.currentSlide||{}, {direction: direction, leaving: true});
$scope.$currentTransition = $transition(nextSlide.$element, {});
//We have to create new pointers inside a closure since next & current will change
(function(next,current) {
$scope.$currentTransition.then(
function(){ transitionDone(next, current); },
function(){ transitionDone(next, current); }
);
}(nextSlide, self.currentSlide));
} else {
transitionDone(nextSlide, self.currentSlide);
}
self.currentSlide = nextSlide;
currentIndex = nextIndex;
//every time you change slides, reset the timer
restartTimer();
}
function transitionDone(next, current) {
angular.extend(next, {direction: '', active: true, leaving: false, entering: false});
angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false});
$scope.$currentTransition = null;
}
};
$scope.$on('$destroy', function () {
destroyed = true;
});
/* Allow outside people to call indexOf on slides array */
self.indexOfSlide = function(slide) {
return slides.indexOf(slide);
};
$scope.next = function() {
var newIndex = (currentIndex + 1) % slides.length;
//Prevent this user-triggered transition from occurring if there is already one in progress
if (!$scope.$currentTransition) {
return self.select(slides[newIndex], 'next');
}
};
$scope.prev = function() {
var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1;
//Prevent this user-triggered transition from occurring if there is already one in progress
if (!$scope.$currentTransition) {
return self.select(slides[newIndex], 'prev');
}
};
$scope.isActive = function(slide) {
return self.currentSlide === slide;
};
$scope.$watch('interval', restartTimer);
$scope.$on('$destroy', resetTimer);
function restartTimer() {
resetTimer();
var interval = +$scope.interval;
if (!isNaN(interval) && interval > 0) {
currentInterval = $interval(timerFn, interval);
}
}
function resetTimer() {
if (currentInterval) {
$interval.cancel(currentInterval);
currentInterval = null;
}
}
function timerFn() {
var interval = +$scope.interval;
if (isPlaying && !isNaN(interval) && interval > 0) {
$scope.next();
} else {
$scope.pause();
}
}
$scope.play = function() {
if (!isPlaying) {
isPlaying = true;
restartTimer();
}
};
$scope.pause = function() {
if (!$scope.noPause) {
isPlaying = false;
resetTimer();
}
};
self.addSlide = function(slide, element) {
slide.$element = element;
slides.push(slide);
//if this is the first slide or the slide is set to active, select it
if(slides.length === 1 || slide.active) {
self.select(slides[slides.length-1]);
if (slides.length == 1) {
$scope.play();
}
} else {
slide.active = false;
}
};
self.removeSlide = function(slide) {
//get the index of the slide inside the carousel
var index = slides.indexOf(slide);
slides.splice(index, 1);
if (slides.length > 0 && slide.active) {
if (index >= slides.length) {
self.select(slides[index-1]);
} else {
self.select(slides[index]);
}
} else if (currentIndex > index) {
currentIndex--;
}
};
}])
/**
* @ngdoc directive
* @name ui.bootstrap.carousel.directive:carousel
* @restrict EA
*
* @description
* Carousel is the outer container for a set of image 'slides' to showcase.
*
* @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.
* @param {boolean=} noTransition Whether to disable transitions on the carousel.
* @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).
*
* @example
Beautiful!
D'aww!
.carousel-indicators {
top: auto;
bottom: 15px;
}
*/
.directive('carousel', [function() {
return {
restrict: 'EA',
transclude: true,
replace: true,
controller: 'CarouselController',
require: 'carousel',
templateUrl: 'template/carousel/carousel.html',
scope: {
interval: '=',
noTransition: '=',
noPause: '='
}
};
}])
/**
* @ngdoc directive
* @name ui.bootstrap.carousel.directive:slide
* @restrict EA
*
* @description
* Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element.
*
* @param {boolean=} active Model binding, whether or not this slide is currently active.
*
* @example
Slide {{$index}}
{{slide.text}}
Interval, in milliseconds:
Enter a negative number to stop the interval.
function CarouselDemoCtrl($scope) {
$scope.myInterval = 5000;
}
.carousel-indicators {
top: auto;
bottom: 15px;
}
*/
.directive('slide', function() {
return {
require: '^carousel',
restrict: 'EA',
transclude: true,
replace: true,
templateUrl: 'template/carousel/slide.html',
scope: {
active: '=?'
},
link: function (scope, element, attrs, carouselCtrl) {
carouselCtrl.addSlide(scope, element);
//when the scope is destroyed then remove the slide from the current slides array
scope.$on('$destroy', function() {
carouselCtrl.removeSlide(scope);
});
scope.$watch('active', function(active) {
if (active) {
carouselCtrl.select(scope);
}
});
}
};
});
angular.module('ui.bootstrap.dateparser', [])
.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) {
this.parsers = {};
var formatCodeToRegex = {
'yyyy': {
regex: '\\d{4}',
apply: function(value) { this.year = +value; }
},
'yy': {
regex: '\\d{2}',
apply: function(value) { this.year = +value + 2000; }
},
'y': {
regex: '\\d{1,4}',
apply: function(value) { this.year = +value; }
},
'MMMM': {
regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
},
'MMM': {
regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
},
'MM': {
regex: '0[1-9]|1[0-2]',
apply: function(value) { this.month = value - 1; }
},
'M': {
regex: '[1-9]|1[0-2]',
apply: function(value) { this.month = value - 1; }
},
'dd': {
regex: '[0-2][0-9]{1}|3[0-1]{1}',
apply: function(value) { this.date = +value; }
},
'd': {
regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
apply: function(value) { this.date = +value; }
},
'EEEE': {
regex: $locale.DATETIME_FORMATS.DAY.join('|')
},
'EEE': {
regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
}
};
function createParser(format) {
var map = [], regex = format.split('');
angular.forEach(formatCodeToRegex, function(data, code) {
var index = format.indexOf(code);
if (index > -1) {
format = format.split('');
regex[index] = '(' + data.regex + ')';
format[index] = '$'; // Custom symbol to define consumed part of format
for (var i = index + 1, n = index + code.length; i < n; i++) {
regex[i] = '';
format[i] = '$';
}
format = format.join('');
map.push({ index: index, apply: data.apply });
}
});
return {
regex: new RegExp('^' + regex.join('') + '$'),
map: orderByFilter(map, 'index')
};
}
this.parse = function(input, format) {
if ( !angular.isString(input) || !format ) {
return input;
}
format = $locale.DATETIME_FORMATS[format] || format;
if ( !this.parsers[format] ) {
this.parsers[format] = createParser(format);
}
var parser = this.parsers[format],
regex = parser.regex,
map = parser.map,
results = input.match(regex);
if ( results && results.length ) {
var fields = { year: 1900, month: 0, date: 1, hours: 0 }, dt;
for( var i = 1, n = results.length; i < n; i++ ) {
var mapper = map[i-1];
if ( mapper.apply ) {
mapper.apply.call(fields, results[i]);
}
}
if ( isValid(fields.year, fields.month, fields.date) ) {
dt = new Date( fields.year, fields.month, fields.date, fields.hours);
}
return dt;
}
};
// Check if date is valid for specific month (and year for February).
// Month: 0 = Jan, 1 = Feb, etc
function isValid(year, month, date) {
if ( month === 1 && date > 28) {
return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
}
if ( month === 3 || month === 5 || month === 8 || month === 10) {
return date < 31;
}
return true;
}
}]);
angular.module('ui.bootstrap.position', [])
/**
* A set of utility methods that can be use to retrieve position of DOM elements.
* It is meant to be used where we need to absolute-position DOM elements in
* relation to other, existing elements (this is the case for tooltips, popovers,
* typeahead suggestions etc.).
*/
.factory('$position', ['$document', '$window', function ($document, $window) {
function getStyle(el, cssprop) {
if (el.currentStyle) { //IE
return el.currentStyle[cssprop];
} else if ($window.getComputedStyle) {
return $window.getComputedStyle(el)[cssprop];
}
// finally try and get inline style
return el.style[cssprop];
}
/**
* Checks if a given element is statically positioned
* @param element - raw DOM element
*/
function isStaticPositioned(element) {
return (getStyle(element, 'position') || 'static' ) === 'static';
}
/**
* returns the closest, non-statically positioned parentOffset of a given element
* @param element
*/
var parentOffsetEl = function (element) {
var docDomEl = $document[0];
var offsetParent = element.offsetParent || docDomEl;
while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {
offsetParent = offsetParent.offsetParent;
}
return offsetParent || docDomEl;
};
return {
/**
* Provides read-only equivalent of jQuery's position function:
* http://api.jquery.com/position/
*/
position: function (element) {
var elBCR = this.offset(element);
var offsetParentBCR = { top: 0, left: 0 };
var offsetParentEl = parentOffsetEl(element[0]);
if (offsetParentEl != $document[0]) {
offsetParentBCR = this.offset(angular.element(offsetParentEl));
offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;
offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;
}
var boundingClientRect = element[0].getBoundingClientRect();
return {
width: boundingClientRect.width || element.prop('offsetWidth'),
height: boundingClientRect.height || element.prop('offsetHeight'),
top: elBCR.top - offsetParentBCR.top,
left: elBCR.left - offsetParentBCR.left
};
},
/**
* Provides read-only equivalent of jQuery's offset function:
* http://api.jquery.com/offset/
*/
offset: function (element) {
var boundingClientRect = element[0].getBoundingClientRect();
return {
width: boundingClientRect.width || element.prop('offsetWidth'),
height: boundingClientRect.height || element.prop('offsetHeight'),
top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),
left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)
};
},
/**
* Provides coordinates for the targetEl in relation to hostEl
*/
positionElements: function (hostEl, targetEl, positionStr, appendToBody) {
var positionStrParts = positionStr.split('-');
var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';
var hostElPos,
targetElWidth,
targetElHeight,
targetElPos;
hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);
targetElWidth = targetEl.prop('offsetWidth');
targetElHeight = targetEl.prop('offsetHeight');
var shiftWidth = {
center: function () {
return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;
},
left: function () {
return hostElPos.left;
},
right: function () {
return hostElPos.left + hostElPos.width;
}
};
var shiftHeight = {
center: function () {
return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;
},
top: function () {
return hostElPos.top;
},
bottom: function () {
return hostElPos.top + hostElPos.height;
}
};
switch (pos0) {
case 'right':
targetElPos = {
top: shiftHeight[pos1](),
left: shiftWidth[pos0]()
};
break;
case 'left':
targetElPos = {
top: shiftHeight[pos1](),
left: hostElPos.left - targetElWidth
};
break;
case 'bottom':
targetElPos = {
top: shiftHeight[pos0](),
left: shiftWidth[pos1]()
};
break;
default:
targetElPos = {
top: hostElPos.top - targetElHeight,
left: shiftWidth[pos1]()
};
break;
}
return targetElPos;
}
};
}]);
angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])
.constant('datepickerConfig', {
formatDay: 'dd',
formatMonth: 'MMMM',
formatYear: 'yyyy',
formatDayHeader: 'EEE',
formatDayTitle: 'MMMM yyyy',
formatMonthTitle: 'yyyy',
datepickerMode: 'day',
minMode: 'day',
maxMode: 'year',
showWeeks: true,
startingDay: 0,
yearRange: 20,
minDate: null,
maxDate: null
})
.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) {
var self = this,
ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;
// Modes chain
this.modes = ['day', 'month', 'year'];
// Configuration attributes
angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',
'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function( key, index ) {
self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
});
// Watchable date attributes
angular.forEach(['minDate', 'maxDate'], function( key ) {
if ( $attrs[key] ) {
$scope.$parent.$watch($parse($attrs[key]), function(value) {
self[key] = value ? new Date(value) : null;
self.refreshView();
});
} else {
self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
}
});
$scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
$scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date();
$scope.isActive = function(dateObject) {
if (self.compare(dateObject.date, self.activeDate) === 0) {
$scope.activeDateId = dateObject.uid;
return true;
}
return false;
};
this.init = function( ngModelCtrl_ ) {
ngModelCtrl = ngModelCtrl_;
ngModelCtrl.$render = function() {
self.render();
};
};
this.render = function() {
if ( ngModelCtrl.$modelValue ) {
var date = new Date( ngModelCtrl.$modelValue ),
isValid = !isNaN(date);
if ( isValid ) {
this.activeDate = date;
} else {
$log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
}
ngModelCtrl.$setValidity('date', isValid);
}
this.refreshView();
};
this.refreshView = function() {
if ( this.element ) {
this._refreshView();
var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;
ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date)));
}
};
this.createDateObject = function(date, format) {
var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;
return {
date: date,
label: dateFilter(date, format),
selected: model && this.compare(date, model) === 0,
disabled: this.isDisabled(date),
current: this.compare(date, new Date()) === 0
};
};
this.isDisabled = function( date ) {
return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));
};
// Split array into smaller arrays
this.split = function(arr, size) {
var arrays = [];
while (arr.length > 0) {
arrays.push(arr.splice(0, size));
}
return arrays;
};
$scope.select = function( date ) {
if ( $scope.datepickerMode === self.minMode ) {
var dt = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0);
dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() );
ngModelCtrl.$setViewValue( dt );
ngModelCtrl.$render();
} else {
self.activeDate = date;
$scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ];
}
};
$scope.move = function( direction ) {
var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
month = self.activeDate.getMonth() + direction * (self.step.months || 0);
self.activeDate.setFullYear(year, month, 1);
self.refreshView();
};
$scope.toggleMode = function( direction ) {
direction = direction || 1;
if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
return;
}
$scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ];
};
// Key event mapper
$scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' };
var focusElement = function() {
$timeout(function() {
self.element[0].focus();
}, 0 , false);
};
// Listen for focus requests from popup directive
$scope.$on('datepicker.focus', focusElement);
$scope.keydown = function( evt ) {
var key = $scope.keys[evt.which];
if ( !key || evt.shiftKey || evt.altKey ) {
return;
}
evt.preventDefault();
evt.stopPropagation();
if (key === 'enter' || key === 'space') {
if ( self.isDisabled(self.activeDate)) {
return; // do nothing
}
$scope.select(self.activeDate);
focusElement();
} else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
$scope.toggleMode(key === 'up' ? 1 : -1);
focusElement();
} else {
self.handleKeyDown(key, evt);
self.refreshView();
}
};
}])
.directive( 'datepicker', function () {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/datepicker/datepicker.html',
scope: {
datepickerMode: '=?',
dateDisabled: '&'
},
require: ['datepicker', '?^ngModel'],
controller: 'DatepickerController',
link: function(scope, element, attrs, ctrls) {
var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
if ( ngModelCtrl ) {
datepickerCtrl.init( ngModelCtrl );
}
}
};
})
.directive('daypicker', ['dateFilter', function (dateFilter) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/datepicker/day.html',
require: '^datepicker',
link: function(scope, element, attrs, ctrl) {
scope.showWeeks = ctrl.showWeeks;
ctrl.step = { months: 1 };
ctrl.element = element;
var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
function getDaysInMonth( year, month ) {
return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];
}
function getDates(startDate, n) {
var dates = new Array(n), current = new Date(startDate), i = 0;
current.setHours(12); // Prevent repeated dates because of timezone bug
while ( i < n ) {
dates[i++] = new Date(current);
current.setDate( current.getDate() + 1 );
}
return dates;
}
ctrl._refreshView = function() {
var year = ctrl.activeDate.getFullYear(),
month = ctrl.activeDate.getMonth(),
firstDayOfMonth = new Date(year, month, 1),
difference = ctrl.startingDay - firstDayOfMonth.getDay(),
numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,
firstDate = new Date(firstDayOfMonth);
if ( numDisplayedFromPreviousMonth > 0 ) {
firstDate.setDate( - numDisplayedFromPreviousMonth + 1 );
}
// 42 is the number of days on a six-month calendar
var days = getDates(firstDate, 42);
for (var i = 0; i < 42; i ++) {
days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {
secondary: days[i].getMonth() !== month,
uid: scope.uniqueId + '-' + i
});
}
scope.labels = new Array(7);
for (var j = 0; j < 7; j++) {
scope.labels[j] = {
abbr: dateFilter(days[j].date, ctrl.formatDayHeader),
full: dateFilter(days[j].date, 'EEEE')
};
}
scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);
scope.rows = ctrl.split(days, 7);
if ( scope.showWeeks ) {
scope.weekNumbers = [];
var weekNumber = getISO8601WeekNumber( scope.rows[0][0].date ),
numWeeks = scope.rows.length;
while( scope.weekNumbers.push(weekNumber++) < numWeeks ) {}
}
};
ctrl.compare = function(date1, date2) {
return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) );
};
function getISO8601WeekNumber(date) {
var checkDate = new Date(date);
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
var time = checkDate.getTime();
checkDate.setMonth(0); // Compare with Jan 1
checkDate.setDate(1);
return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
}
ctrl.handleKeyDown = function( key, evt ) {
var date = ctrl.activeDate.getDate();
if (key === 'left') {
date = date - 1; // up
} else if (key === 'up') {
date = date - 7; // down
} else if (key === 'right') {
date = date + 1; // down
} else if (key === 'down') {
date = date + 7;
} else if (key === 'pageup' || key === 'pagedown') {
var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
ctrl.activeDate.setMonth(month, 1);
date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date);
} else if (key === 'home') {
date = 1;
} else if (key === 'end') {
date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth());
}
ctrl.activeDate.setDate(date);
};
ctrl.refreshView();
}
};
}])
.directive('monthpicker', ['dateFilter', function (dateFilter) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/datepicker/month.html',
require: '^datepicker',
link: function(scope, element, attrs, ctrl) {
ctrl.step = { years: 1 };
ctrl.element = element;
ctrl._refreshView = function() {
var months = new Array(12),
year = ctrl.activeDate.getFullYear();
for ( var i = 0; i < 12; i++ ) {
months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), {
uid: scope.uniqueId + '-' + i
});
}
scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle);
scope.rows = ctrl.split(months, 3);
};
ctrl.compare = function(date1, date2) {
return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() );
};
ctrl.handleKeyDown = function( key, evt ) {
var date = ctrl.activeDate.getMonth();
if (key === 'left') {
date = date - 1; // up
} else if (key === 'up') {
date = date - 3; // down
} else if (key === 'right') {
date = date + 1; // down
} else if (key === 'down') {
date = date + 3;
} else if (key === 'pageup' || key === 'pagedown') {
var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
ctrl.activeDate.setFullYear(year);
} else if (key === 'home') {
date = 0;
} else if (key === 'end') {
date = 11;
}
ctrl.activeDate.setMonth(date);
};
ctrl.refreshView();
}
};
}])
.directive('yearpicker', ['dateFilter', function (dateFilter) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/datepicker/year.html',
require: '^datepicker',
link: function(scope, element, attrs, ctrl) {
var range = ctrl.yearRange;
ctrl.step = { years: range };
ctrl.element = element;
function getStartingYear( year ) {
return parseInt((year - 1) / range, 10) * range + 1;
}
ctrl._refreshView = function() {
var years = new Array(range);
for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) {
years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), {
uid: scope.uniqueId + '-' + i
});
}
scope.title = [years[0].label, years[range - 1].label].join(' - ');
scope.rows = ctrl.split(years, 5);
};
ctrl.compare = function(date1, date2) {
return date1.getFullYear() - date2.getFullYear();
};
ctrl.handleKeyDown = function( key, evt ) {
var date = ctrl.activeDate.getFullYear();
if (key === 'left') {
date = date - 1; // up
} else if (key === 'up') {
date = date - 5; // down
} else if (key === 'right') {
date = date + 1; // down
} else if (key === 'down') {
date = date + 5;
} else if (key === 'pageup' || key === 'pagedown') {
date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years;
} else if (key === 'home') {
date = getStartingYear( ctrl.activeDate.getFullYear() );
} else if (key === 'end') {
date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1;
}
ctrl.activeDate.setFullYear(date);
};
ctrl.refreshView();
}
};
}])
.constant('datepickerPopupConfig', {
datepickerPopup: 'yyyy-MM-dd',
currentText: 'Today',
clearText: 'Clear',
closeText: 'Done',
closeOnDateSelection: true,
appendToBody: false,
showButtonBar: true
})
.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',
function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) {
return {
restrict: 'EA',
require: 'ngModel',
scope: {
isOpen: '=?',
currentText: '@',
clearText: '@',
closeText: '@',
dateDisabled: '&'
},
link: function(scope, element, attrs, ngModel) {
var dateFormat,
closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,
appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
scope.getText = function( key ) {
return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
};
attrs.$observe('datepickerPopup', function(value) {
dateFormat = value || datepickerPopupConfig.datepickerPopup;
ngModel.$render();
});
// popup element used to display calendar
var popupEl = angular.element('
');
popupEl.attr({
'ng-model': 'date',
'ng-change': 'dateSelection()'
});
function cameltoDash( string ){
return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
}
// datepicker element
var datepickerEl = angular.element(popupEl.children()[0]);
if ( attrs.datepickerOptions ) {
angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function( value, option ) {
datepickerEl.attr( cameltoDash(option), value );
});
}
scope.watchData = {};
angular.forEach(['minDate', 'maxDate', 'datepickerMode'], function( key ) {
if ( attrs[key] ) {
var getAttribute = $parse(attrs[key]);
scope.$parent.$watch(getAttribute, function(value){
scope.watchData[key] = value;
});
datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
// Propagate changes from datepicker to outside
if ( key === 'datepickerMode' ) {
var setAttribute = getAttribute.assign;
scope.$watch('watchData.' + key, function(value, oldvalue) {
if ( value !== oldvalue ) {
setAttribute(scope.$parent, value);
}
});
}
}
});
if (attrs.dateDisabled) {
datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
}
function parseDate(viewValue) {
if (!viewValue) {
ngModel.$setValidity('date', true);
return null;
} else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
ngModel.$setValidity('date', true);
return viewValue;
} else if (angular.isString(viewValue)) {
var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue);
if (isNaN(date)) {
ngModel.$setValidity('date', false);
return undefined;
} else {
ngModel.$setValidity('date', true);
return date;
}
} else {
ngModel.$setValidity('date', false);
return undefined;
}
}
ngModel.$parsers.unshift(parseDate);
// Inner change
scope.dateSelection = function(dt) {
if (angular.isDefined(dt)) {
scope.date = dt;
}
ngModel.$setViewValue(scope.date);
ngModel.$render();
if ( closeOnDateSelection ) {
scope.isOpen = false;
element[0].focus();
}
};
element.bind('input change keyup', function() {
scope.$apply(function() {
scope.date = ngModel.$modelValue;
});
});
// Outter change
ngModel.$render = function() {
var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : '';
element.val(date);
scope.date = parseDate( ngModel.$modelValue );
};
var documentClickBind = function(event) {
if (scope.isOpen && event.target !== element[0]) {
scope.$apply(function() {
scope.isOpen = false;
});
}
};
var keydown = function(evt, noApply) {
scope.keydown(evt);
};
element.bind('keydown', keydown);
scope.keydown = function(evt) {
if (evt.which === 27) {
evt.preventDefault();
evt.stopPropagation();
scope.close();
} else if (evt.which === 40 && !scope.isOpen) {
scope.isOpen = true;
}
};
scope.$watch('isOpen', function(value) {
if (value) {
scope.$broadcast('datepicker.focus');
scope.position = appendToBody ? $position.offset(element) : $position.position(element);
scope.position.top = scope.position.top + element.prop('offsetHeight');
$document.bind('click', documentClickBind);
} else {
$document.unbind('click', documentClickBind);
}
});
scope.select = function( date ) {
if (date === 'today') {
var today = new Date();
if (angular.isDate(ngModel.$modelValue)) {
date = new Date(ngModel.$modelValue);
date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
} else {
date = new Date(today.setHours(0, 0, 0, 0));
}
}
scope.dateSelection( date );
};
scope.close = function() {
scope.isOpen = false;
element[0].focus();
};
var $popup = $compile(popupEl)(scope);
// Prevent jQuery cache memory leak (template is now redundant after linking)
popupEl.remove();
if ( appendToBody ) {
$document.find('body').append($popup);
} else {
element.after($popup);
}
scope.$on('$destroy', function() {
$popup.remove();
element.unbind('keydown', keydown);
$document.unbind('click', documentClickBind);
});
}
};
}])
.directive('datepickerPopupWrap', function() {
return {
restrict:'EA',
replace: true,
transclude: true,
templateUrl: 'template/datepicker/popup.html',
link:function (scope, element, attrs) {
element.bind('click', function(event) {
event.preventDefault();
event.stopPropagation();
});
}
};
});
angular.module('ui.bootstrap.dropdown', [])
.constant('dropdownConfig', {
openClass: 'open'
})
.service('dropdownService', ['$document', function($document) {
var openScope = null;
this.open = function( dropdownScope ) {
if ( !openScope ) {
$document.bind('click', closeDropdown);
$document.bind('keydown', escapeKeyBind);
}
if ( openScope && openScope !== dropdownScope ) {
openScope.isOpen = false;
}
openScope = dropdownScope;
};
this.close = function( dropdownScope ) {
if ( openScope === dropdownScope ) {
openScope = null;
$document.unbind('click', closeDropdown);
$document.unbind('keydown', escapeKeyBind);
}
};
var closeDropdown = function( evt ) {
// This method may still be called during the same mouse event that
// unbound this event handler. So check openScope before proceeding.
if (!openScope) { return; }
var toggleElement = openScope.getToggleElement();
if ( evt && toggleElement && toggleElement[0].contains(evt.target) ) {
return;
}
openScope.$apply(function() {
openScope.isOpen = false;
});
};
var escapeKeyBind = function( evt ) {
if ( evt.which === 27 ) {
openScope.focusToggleElement();
closeDropdown();
}
};
}])
.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) {
var self = this,
scope = $scope.$new(), // create a child scope so we are not polluting original one
openClass = dropdownConfig.openClass,
getIsOpen,
setIsOpen = angular.noop,
toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop;
this.init = function( element ) {
self.$element = element;
if ( $attrs.isOpen ) {
getIsOpen = $parse($attrs.isOpen);
setIsOpen = getIsOpen.assign;
$scope.$watch(getIsOpen, function(value) {
scope.isOpen = !!value;
});
}
};
this.toggle = function( open ) {
return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
};
// Allow other directives to watch status
this.isOpen = function() {
return scope.isOpen;
};
scope.getToggleElement = function() {
return self.toggleElement;
};
scope.focusToggleElement = function() {
if ( self.toggleElement ) {
self.toggleElement[0].focus();
}
};
scope.$watch('isOpen', function( isOpen, wasOpen ) {
$animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass);
if ( isOpen ) {
scope.focusToggleElement();
dropdownService.open( scope );
} else {
dropdownService.close( scope );
}
setIsOpen($scope, isOpen);
if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
toggleInvoker($scope, { open: !!isOpen });
}
});
$scope.$on('$locationChangeSuccess', function() {
scope.isOpen = false;
});
$scope.$on('$destroy', function() {
scope.$destroy();
});
}])
.directive('dropdown', function() {
return {
controller: 'DropdownController',
link: function(scope, element, attrs, dropdownCtrl) {
dropdownCtrl.init( element );
}
};
})
.directive('dropdownToggle', function() {
return {
require: '?^dropdown',
link: function(scope, element, attrs, dropdownCtrl) {
if ( !dropdownCtrl ) {
return;
}
dropdownCtrl.toggleElement = element;
var toggleDropdown = function(event) {
event.preventDefault();
if ( !element.hasClass('disabled') && !attrs.disabled ) {
scope.$apply(function() {
dropdownCtrl.toggle();
});
}
};
element.bind('click', toggleDropdown);
// WAI-ARIA
element.attr({ 'aria-haspopup': true, 'aria-expanded': false });
scope.$watch(dropdownCtrl.isOpen, function( isOpen ) {
element.attr('aria-expanded', !!isOpen);
});
scope.$on('$destroy', function() {
element.unbind('click', toggleDropdown);
});
}
};
});
angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
/**
* A helper, internal data structure that acts as a map but also allows getting / removing
* elements in the LIFO order
*/
.factory('$$stackedMap', function () {
return {
createNew: function () {
var stack = [];
return {
add: function (key, value) {
stack.push({
key: key,
value: value
});
},
get: function (key) {
for (var i = 0; i < stack.length; i++) {
if (key == stack[i].key) {
return stack[i];
}
}
},
keys: function() {
var keys = [];
for (var i = 0; i < stack.length; i++) {
keys.push(stack[i].key);
}
return keys;
},
top: function () {
return stack[stack.length - 1];
},
remove: function (key) {
var idx = -1;
for (var i = 0; i < stack.length; i++) {
if (key == stack[i].key) {
idx = i;
break;
}
}
return stack.splice(idx, 1)[0];
},
removeTop: function () {
return stack.splice(stack.length - 1, 1)[0];
},
length: function () {
return stack.length;
}
};
}
};
})
/**
* A helper directive for the $modal service. It creates a backdrop element.
*/
.directive('modalBackdrop', ['$timeout', function ($timeout) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/modal/backdrop.html',
link: function (scope, element, attrs) {
scope.backdropClass = attrs.backdropClass || '';
scope.animate = false;
//trigger CSS transitions
$timeout(function () {
scope.animate = true;
});
}
};
}])
.directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) {
return {
restrict: 'EA',
scope: {
index: '@',
animate: '='
},
replace: true,
transclude: true,
templateUrl: function(tElement, tAttrs) {
return tAttrs.templateUrl || 'template/modal/window.html';
},
link: function (scope, element, attrs) {
element.addClass(attrs.windowClass || '');
scope.size = attrs.size;
$timeout(function () {
// trigger CSS transitions
scope.animate = true;
/**
* Auto-focusing of a freshly-opened modal element causes any child elements
* with the autofocus attribute to lose focus. This is an issue on touch
* based devices which will show and then hide the onscreen keyboard.
* Attempts to refocus the autofocus element via JavaScript will not reopen
* the onscreen keyboard. Fixed by updated the focusing logic to only autofocus
* the modal element if the modal does not contain an autofocus element.
*/
if (!element[0].querySelectorAll('[autofocus]').length) {
element[0].focus();
}
});
scope.close = function (evt) {
var modal = $modalStack.getTop();
if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) {
evt.preventDefault();
evt.stopPropagation();
$modalStack.dismiss(modal.key, 'backdrop click');
}
};
}
};
}])
.directive('modalTransclude', function () {
return {
link: function($scope, $element, $attrs, controller, $transclude) {
$transclude($scope.$parent, function(clone) {
$element.empty();
$element.append(clone);
});
}
};
})
.factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap',
function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) {
var OPENED_MODAL_CLASS = 'modal-open';
var backdropDomEl, backdropScope;
var openedWindows = $$stackedMap.createNew();
var $modalStack = {};
function backdropIndex() {
var topBackdropIndex = -1;
var opened = openedWindows.keys();
for (var i = 0; i < opened.length; i++) {
if (openedWindows.get(opened[i]).value.backdrop) {
topBackdropIndex = i;
}
}
return topBackdropIndex;
}
$rootScope.$watch(backdropIndex, function(newBackdropIndex){
if (backdropScope) {
backdropScope.index = newBackdropIndex;
}
});
function removeModalWindow(modalInstance) {
var body = $document.find('body').eq(0);
var modalWindow = openedWindows.get(modalInstance).value;
//clean up the stack
openedWindows.remove(modalInstance);
//remove window DOM element
removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() {
modalWindow.modalScope.$destroy();
body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
checkRemoveBackdrop();
});
}
function checkRemoveBackdrop() {
//remove backdrop if no longer needed
if (backdropDomEl && backdropIndex() == -1) {
var backdropScopeRef = backdropScope;
removeAfterAnimate(backdropDomEl, backdropScope, 150, function () {
backdropScopeRef.$destroy();
backdropScopeRef = null;
});
backdropDomEl = undefined;
backdropScope = undefined;
}
}
function removeAfterAnimate(domEl, scope, emulateTime, done) {
// Closing animation
scope.animate = false;
var transitionEndEventName = $transition.transitionEndEventName;
if (transitionEndEventName) {
// transition out
var timeout = $timeout(afterAnimating, emulateTime);
domEl.bind(transitionEndEventName, function () {
$timeout.cancel(timeout);
afterAnimating();
scope.$apply();
});
} else {
// Ensure this call is async
$timeout(afterAnimating);
}
function afterAnimating() {
if (afterAnimating.done) {
return;
}
afterAnimating.done = true;
domEl.remove();
if (done) {
done();
}
}
}
$document.bind('keydown', function (evt) {
var modal;
if (evt.which === 27) {
modal = openedWindows.top();
if (modal && modal.value.keyboard) {
evt.preventDefault();
$rootScope.$apply(function () {
$modalStack.dismiss(modal.key, 'escape key press');
});
}
}
});
$modalStack.open = function (modalInstance, modal) {
openedWindows.add(modalInstance, {
deferred: modal.deferred,
modalScope: modal.scope,
backdrop: modal.backdrop,
keyboard: modal.keyboard
});
var body = $document.find('body').eq(0),
currBackdropIndex = backdropIndex();
if (currBackdropIndex >= 0 && !backdropDomEl) {
backdropScope = $rootScope.$new(true);
backdropScope.index = currBackdropIndex;
var angularBackgroundDomEl = angular.element('');
angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass);
backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope);
body.append(backdropDomEl);
}
var angularDomEl = angular.element('');
angularDomEl.attr({
'template-url': modal.windowTemplateUrl,
'window-class': modal.windowClass,
'size': modal.size,
'index': openedWindows.length() - 1,
'animate': 'animate'
}).html(modal.content);
var modalDomEl = $compile(angularDomEl)(modal.scope);
openedWindows.top().value.modalDomEl = modalDomEl;
body.append(modalDomEl);
body.addClass(OPENED_MODAL_CLASS);
};
$modalStack.close = function (modalInstance, result) {
var modalWindow = openedWindows.get(modalInstance);
if (modalWindow) {
modalWindow.value.deferred.resolve(result);
removeModalWindow(modalInstance);
}
};
$modalStack.dismiss = function (modalInstance, reason) {
var modalWindow = openedWindows.get(modalInstance);
if (modalWindow) {
modalWindow.value.deferred.reject(reason);
removeModalWindow(modalInstance);
}
};
$modalStack.dismissAll = function (reason) {
var topModal = this.getTop();
while (topModal) {
this.dismiss(topModal.key, reason);
topModal = this.getTop();
}
};
$modalStack.getTop = function () {
return openedWindows.top();
};
return $modalStack;
}])
.provider('$modal', function () {
var $modalProvider = {
options: {
backdrop: true, //can be also false or 'static'
keyboard: true
},
$get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack',
function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) {
var $modal = {};
function getTemplatePromise(options) {
return options.template ? $q.when(options.template) :
$http.get(angular.isFunction(options.templateUrl) ? (options.templateUrl)() : options.templateUrl,
{cache: $templateCache}).then(function (result) {
return result.data;
});
}
function getResolvePromises(resolves) {
var promisesArr = [];
angular.forEach(resolves, function (value) {
if (angular.isFunction(value) || angular.isArray(value)) {
promisesArr.push($q.when($injector.invoke(value)));
}
});
return promisesArr;
}
$modal.open = function (modalOptions) {
var modalResultDeferred = $q.defer();
var modalOpenedDeferred = $q.defer();
//prepare an instance of a modal to be injected into controllers and returned to a caller
var modalInstance = {
result: modalResultDeferred.promise,
opened: modalOpenedDeferred.promise,
close: function (result) {
$modalStack.close(modalInstance, result);
},
dismiss: function (reason) {
$modalStack.dismiss(modalInstance, reason);
}
};
//merge and clean up options
modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
modalOptions.resolve = modalOptions.resolve || {};
//verify options
if (!modalOptions.template && !modalOptions.templateUrl) {
throw new Error('One of template or templateUrl options is required.');
}
var templateAndResolvePromise =
$q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));
templateAndResolvePromise.then(function resolveSuccess(tplAndVars) {
var modalScope = (modalOptions.scope || $rootScope).$new();
modalScope.$close = modalInstance.close;
modalScope.$dismiss = modalInstance.dismiss;
var ctrlInstance, ctrlLocals = {};
var resolveIter = 1;
//controllers
if (modalOptions.controller) {
ctrlLocals.$scope = modalScope;
ctrlLocals.$modalInstance = modalInstance;
angular.forEach(modalOptions.resolve, function (value, key) {
ctrlLocals[key] = tplAndVars[resolveIter++];
});
ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
if (modalOptions.controllerAs) {
modalScope[modalOptions.controllerAs] = ctrlInstance;
}
}
$modalStack.open(modalInstance, {
scope: modalScope,
deferred: modalResultDeferred,
content: tplAndVars[0],
backdrop: modalOptions.backdrop,
keyboard: modalOptions.keyboard,
backdropClass: modalOptions.backdropClass,
windowClass: modalOptions.windowClass,
windowTemplateUrl: modalOptions.windowTemplateUrl,
size: modalOptions.size
});
}, function resolveError(reason) {
modalResultDeferred.reject(reason);
});
templateAndResolvePromise.then(function () {
modalOpenedDeferred.resolve(true);
}, function () {
modalOpenedDeferred.reject(false);
});
return modalInstance;
};
return $modal;
}]
};
return $modalProvider;
});
angular.module('ui.bootstrap.pagination', [])
.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) {
var self = this,
ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
this.init = function(ngModelCtrl_, config) {
ngModelCtrl = ngModelCtrl_;
this.config = config;
ngModelCtrl.$render = function() {
self.render();
};
if ($attrs.itemsPerPage) {
$scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
self.itemsPerPage = parseInt(value, 10);
$scope.totalPages = self.calculateTotalPages();
});
} else {
this.itemsPerPage = config.itemsPerPage;
}
};
this.calculateTotalPages = function() {
var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);
return Math.max(totalPages || 0, 1);
};
this.render = function() {
$scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;
};
$scope.selectPage = function(page) {
if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) {
ngModelCtrl.$setViewValue(page);
ngModelCtrl.$render();
}
};
$scope.getText = function( key ) {
return $scope[key + 'Text'] || self.config[key + 'Text'];
};
$scope.noPrevious = function() {
return $scope.page === 1;
};
$scope.noNext = function() {
return $scope.page === $scope.totalPages;
};
$scope.$watch('totalItems', function() {
$scope.totalPages = self.calculateTotalPages();
});
$scope.$watch('totalPages', function(value) {
setNumPages($scope.$parent, value); // Readonly variable
if ( $scope.page > value ) {
$scope.selectPage(value);
} else {
ngModelCtrl.$render();
}
});
}])
.constant('paginationConfig', {
itemsPerPage: 10,
boundaryLinks: false,
directionLinks: true,
firstText: 'First',
previousText: 'Previous',
nextText: 'Next',
lastText: 'Last',
rotate: true
})
.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) {
return {
restrict: 'EA',
scope: {
totalItems: '=',
firstText: '@',
previousText: '@',
nextText: '@',
lastText: '@'
},
require: ['pagination', '?ngModel'],
controller: 'PaginationController',
templateUrl: 'template/pagination/pagination.html',
replace: true,
link: function(scope, element, attrs, ctrls) {
var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
if (!ngModelCtrl) {
return; // do nothing if no ng-model
}
// Setup configuration parameters
var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,
rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;
scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
paginationCtrl.init(ngModelCtrl, paginationConfig);
if (attrs.maxSize) {
scope.$parent.$watch($parse(attrs.maxSize), function(value) {
maxSize = parseInt(value, 10);
paginationCtrl.render();
});
}
// Create page object used in template
function makePage(number, text, isActive) {
return {
number: number,
text: text,
active: isActive
};
}
function getPages(currentPage, totalPages) {
var pages = [];
// Default page limits
var startPage = 1, endPage = totalPages;
var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages );
// recompute if maxSize
if ( isMaxSized ) {
if ( rotate ) {
// Current page is displayed in the middle of the visible ones
startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);
endPage = startPage + maxSize - 1;
// Adjust if limit is exceeded
if (endPage > totalPages) {
endPage = totalPages;
startPage = endPage - maxSize + 1;
}
} else {
// Visible pages are paginated with maxSize
startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;
// Adjust last page if limit is exceeded
endPage = Math.min(startPage + maxSize - 1, totalPages);
}
}
// Add page number links
for (var number = startPage; number <= endPage; number++) {
var page = makePage(number, number, number === currentPage);
pages.push(page);
}
// Add links to move between page sets
if ( isMaxSized && ! rotate ) {
if ( startPage > 1 ) {
var previousPageSet = makePage(startPage - 1, '...', false);
pages.unshift(previousPageSet);
}
if ( endPage < totalPages ) {
var nextPageSet = makePage(endPage + 1, '...', false);
pages.push(nextPageSet);
}
}
return pages;
}
var originalRender = paginationCtrl.render;
paginationCtrl.render = function() {
originalRender();
if (scope.page > 0 && scope.page <= scope.totalPages) {
scope.pages = getPages(scope.page, scope.totalPages);
}
};
}
};
}])
.constant('pagerConfig', {
itemsPerPage: 10,
previousText: '« Previous',
nextText: 'Next »',
align: true
})
.directive('pager', ['pagerConfig', function(pagerConfig) {
return {
restrict: 'EA',
scope: {
totalItems: '=',
previousText: '@',
nextText: '@'
},
require: ['pager', '?ngModel'],
controller: 'PaginationController',
templateUrl: 'template/pagination/pager.html',
replace: true,
link: function(scope, element, attrs, ctrls) {
var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
if (!ngModelCtrl) {
return; // do nothing if no ng-model
}
scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
paginationCtrl.init(ngModelCtrl, pagerConfig);
}
};
}]);
/**
* The following features are still outstanding: animation as a
* function, placement as a function, inside, support for more triggers than
* just mouse enter/leave, html tooltips, and selector delegation.
*/
angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] )
/**
* The $tooltip service creates tooltip- and popover-like directives as well as
* houses global options for them.
*/
.provider( '$tooltip', function () {
// The default options tooltip and popover.
var defaultOptions = {
placement: 'top',
animation: true,
popupDelay: 0
};
// Default hide triggers for each show trigger
var triggerMap = {
'mouseenter': 'mouseleave',
'click': 'click',
'focus': 'blur'
};
// The options specified to the provider globally.
var globalOptions = {};
/**
* `options({})` allows global configuration of all tooltips in the
* application.
*
* var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {
* // place tooltips left instead of top by default
* $tooltipProvider.options( { placement: 'left' } );
* });
*/
this.options = function( value ) {
angular.extend( globalOptions, value );
};
/**
* This allows you to extend the set of trigger mappings available. E.g.:
*
* $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
*/
this.setTriggers = function setTriggers ( triggers ) {
angular.extend( triggerMap, triggers );
};
/**
* This is a helper function for translating camel-case to snake-case.
*/
function snake_case(name){
var regexp = /[A-Z]/g;
var separator = '-';
return name.replace(regexp, function(letter, pos) {
return (pos ? separator : '') + letter.toLowerCase();
});
}
/**
* Returns the actual instance of the $tooltip service.
* TODO support multiple triggers
*/
this.$get = [ '$window', '$compile', '$timeout', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $document, $position, $interpolate ) {
return function $tooltip ( type, prefix, defaultTriggerShow ) {
var options = angular.extend( {}, defaultOptions, globalOptions );
/**
* Returns an object of show and hide triggers.
*
* If a trigger is supplied,
* it is used to show the tooltip; otherwise, it will use the `trigger`
* option passed to the `$tooltipProvider.options` method; else it will
* default to the trigger supplied to this directive factory.
*
* The hide trigger is based on the show trigger. If the `trigger` option
* was passed to the `$tooltipProvider.options` method, it will use the
* mapped trigger from `triggerMap` or the passed trigger if the map is
* undefined; otherwise, it uses the `triggerMap` value of the show
* trigger; else it will just use the show trigger.
*/
function getTriggers ( trigger ) {
var show = trigger || options.trigger || defaultTriggerShow;
var hide = triggerMap[show] || show;
return {
show: show,
hide: hide
};
}
var directiveName = snake_case( type );
var startSym = $interpolate.startSymbol();
var endSym = $interpolate.endSymbol();
var template =
'
'+
'
';
return {
restrict: 'EA',
compile: function (tElem, tAttrs) {
var tooltipLinker = $compile( template );
return function link ( scope, element, attrs ) {
var tooltip;
var tooltipLinkedScope;
var transitionTimeout;
var popupTimeout;
var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false;
var triggers = getTriggers( undefined );
var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']);
var ttScope = scope.$new(true);
var positionTooltip = function () {
var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
ttPosition.top += 'px';
ttPosition.left += 'px';
// Now set the calculated positioning.
tooltip.css( ttPosition );
};
// By default, the tooltip is not open.
// TODO add ability to start tooltip opened
ttScope.isOpen = false;
function toggleTooltipBind () {
if ( ! ttScope.isOpen ) {
showTooltipBind();
} else {
hideTooltipBind();
}
}
// Show the tooltip with delay if specified, otherwise show it immediately
function showTooltipBind() {
if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) {
return;
}
prepareTooltip();
if ( ttScope.popupDelay ) {
// Do nothing if the tooltip was already scheduled to pop-up.
// This happens if show is triggered multiple times before any hide is triggered.
if (!popupTimeout) {
popupTimeout = $timeout( show, ttScope.popupDelay, false );
popupTimeout.then(function(reposition){reposition();});
}
} else {
show()();
}
}
function hideTooltipBind () {
scope.$apply(function () {
hide();
});
}
// Show the tooltip popup element.
function show() {
popupTimeout = null;
// If there is a pending remove transition, we must cancel it, lest the
// tooltip be mysteriously removed.
if ( transitionTimeout ) {
$timeout.cancel( transitionTimeout );
transitionTimeout = null;
}
// Don't show empty tooltips.
if ( ! ttScope.content ) {
return angular.noop;
}
createTooltip();
// Set the initial positioning.
tooltip.css({ top: 0, left: 0, display: 'block' });
ttScope.$digest();
positionTooltip();
// And show the tooltip.
ttScope.isOpen = true;
ttScope.$digest(); // digest required as $apply is not called
// Return positioning function as promise callback for correct
// positioning after draw.
return positionTooltip;
}
// Hide the tooltip popup element.
function hide() {
// First things first: we don't show it anymore.
ttScope.isOpen = false;
//if tooltip is going to be shown after delay, we must cancel this
$timeout.cancel( popupTimeout );
popupTimeout = null;
// And now we remove it from the DOM. However, if we have animation, we
// need to wait for it to expire beforehand.
// FIXME: this is a placeholder for a port of the transitions library.
if ( ttScope.animation ) {
if (!transitionTimeout) {
transitionTimeout = $timeout(removeTooltip, 500);
}
} else {
removeTooltip();
}
}
function createTooltip() {
// There can only be one tooltip element per directive shown at once.
if (tooltip) {
removeTooltip();
}
tooltipLinkedScope = ttScope.$new();
tooltip = tooltipLinker(tooltipLinkedScope, function (tooltip) {
if ( appendToBody ) {
$document.find( 'body' ).append( tooltip );
} else {
element.after( tooltip );
}
});
}
function removeTooltip() {
transitionTimeout = null;
if (tooltip) {
tooltip.remove();
tooltip = null;
}
if (tooltipLinkedScope) {
tooltipLinkedScope.$destroy();
tooltipLinkedScope = null;
}
}
function prepareTooltip() {
prepPlacement();
prepPopupDelay();
}
/**
* Observe the relevant attributes.
*/
attrs.$observe( type, function ( val ) {
ttScope.content = val;
if (!val && ttScope.isOpen ) {
hide();
}
});
attrs.$observe( prefix+'Title', function ( val ) {
ttScope.title = val;
});
function prepPlacement() {
var val = attrs[ prefix + 'Placement' ];
ttScope.placement = angular.isDefined( val ) ? val : options.placement;
}
function prepPopupDelay() {
var val = attrs[ prefix + 'PopupDelay' ];
var delay = parseInt( val, 10 );
ttScope.popupDelay = ! isNaN(delay) ? delay : options.popupDelay;
}
var unregisterTriggers = function () {
element.unbind(triggers.show, showTooltipBind);
element.unbind(triggers.hide, hideTooltipBind);
};
function prepTriggers() {
var val = attrs[ prefix + 'Trigger' ];
unregisterTriggers();
triggers = getTriggers( val );
if ( triggers.show === triggers.hide ) {
element.bind( triggers.show, toggleTooltipBind );
} else {
element.bind( triggers.show, showTooltipBind );
element.bind( triggers.hide, hideTooltipBind );
}
}
prepTriggers();
var animation = scope.$eval(attrs[prefix + 'Animation']);
ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;
var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']);
appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
// if a tooltip is attached to we need to remove it on
// location change as its parent scope will probably not be destroyed
// by the change.
if ( appendToBody ) {
scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () {
if ( ttScope.isOpen ) {
hide();
}
});
}
// Make sure tooltip is destroyed and removed.
scope.$on('$destroy', function onDestroyTooltip() {
$timeout.cancel( transitionTimeout );
$timeout.cancel( popupTimeout );
unregisterTriggers();
removeTooltip();
ttScope = null;
});
};
}
};
};
}];
})
.directive( 'tooltipPopup', function () {
return {
restrict: 'EA',
replace: true,
scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },
templateUrl: 'template/tooltip/tooltip-popup.html'
};
})
.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'tooltip', 'tooltip', 'mouseenter' );
}])
.directive( 'tooltipHtmlUnsafePopup', function () {
return {
restrict: 'EA',
replace: true,
scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },
templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'
};
})
.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' );
}]);
/**
* The following features are still outstanding: popup delay, animation as a
* function, placement as a function, inside, support for more triggers than
* just mouse enter/leave, html popovers, and selector delegatation.
*/
angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] )
.directive( 'popoverPopup', function () {
return {
restrict: 'EA',
replace: true,
scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },
templateUrl: 'template/popover/popover.html'
};
})
.directive( 'popover', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'popover', 'popover', 'click' );
}]);
angular.module('ui.bootstrap.progressbar', [])
.constant('progressConfig', {
animate: true,
max: 100
})
.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) {
var self = this,
animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
this.bars = [];
$scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max;
this.addBar = function(bar, element) {
if ( !animate ) {
element.css({'transition': 'none'});
}
this.bars.push(bar);
bar.$watch('value', function( value ) {
bar.percent = +(100 * value / $scope.max).toFixed(2);
});
bar.$on('$destroy', function() {
element = null;
self.removeBar(bar);
});
};
this.removeBar = function(bar) {
this.bars.splice(this.bars.indexOf(bar), 1);
};
}])
.directive('progress', function() {
return {
restrict: 'EA',
replace: true,
transclude: true,
controller: 'ProgressController',
require: 'progress',
scope: {},
templateUrl: 'template/progressbar/progress.html'
};
})
.directive('bar', function() {
return {
restrict: 'EA',
replace: true,
transclude: true,
require: '^progress',
scope: {
value: '=',
type: '@'
},
templateUrl: 'template/progressbar/bar.html',
link: function(scope, element, attrs, progressCtrl) {
progressCtrl.addBar(scope, element);
}
};
})
.directive('progressbar', function() {
return {
restrict: 'EA',
replace: true,
transclude: true,
controller: 'ProgressController',
scope: {
value: '=',
type: '@'
},
templateUrl: 'template/progressbar/progressbar.html',
link: function(scope, element, attrs, progressCtrl) {
progressCtrl.addBar(scope, angular.element(element.children()[0]));
}
};
});
angular.module('ui.bootstrap.rating', [])
.constant('ratingConfig', {
max: 5,
stateOn: null,
stateOff: null
})
.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) {
var ngModelCtrl = { $setViewValue: angular.noop };
this.init = function(ngModelCtrl_) {
ngModelCtrl = ngModelCtrl_;
ngModelCtrl.$render = this.render;
this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) :
new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max );
$scope.range = this.buildTemplateObjects(ratingStates);
};
this.buildTemplateObjects = function(states) {
for (var i = 0, n = states.length; i < n; i++) {
states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]);
}
return states;
};
$scope.rate = function(value) {
if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) {
ngModelCtrl.$setViewValue(value);
ngModelCtrl.$render();
}
};
$scope.enter = function(value) {
if ( !$scope.readonly ) {
$scope.value = value;
}
$scope.onHover({value: value});
};
$scope.reset = function() {
$scope.value = ngModelCtrl.$viewValue;
$scope.onLeave();
};
$scope.onKeydown = function(evt) {
if (/(37|38|39|40)/.test(evt.which)) {
evt.preventDefault();
evt.stopPropagation();
$scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) );
}
};
this.render = function() {
$scope.value = ngModelCtrl.$viewValue;
};
}])
.directive('rating', function() {
return {
restrict: 'EA',
require: ['rating', 'ngModel'],
scope: {
readonly: '=?',
onHover: '&',
onLeave: '&'
},
controller: 'RatingController',
templateUrl: 'template/rating/rating.html',
replace: true,
link: function(scope, element, attrs, ctrls) {
var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
if ( ngModelCtrl ) {
ratingCtrl.init( ngModelCtrl );
}
}
};
});
/**
* @ngdoc overview
* @name ui.bootstrap.tabs
*
* @description
* AngularJS version of the tabs directive.
*/
angular.module('ui.bootstrap.tabs', [])
.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {
var ctrl = this,
tabs = ctrl.tabs = $scope.tabs = [];
ctrl.select = function(selectedTab) {
angular.forEach(tabs, function(tab) {
if (tab.active && tab !== selectedTab) {
tab.active = false;
tab.onDeselect();
}
});
selectedTab.active = true;
selectedTab.onSelect();
};
ctrl.addTab = function addTab(tab) {
tabs.push(tab);
// we can't run the select function on the first tab
// since that would select it twice
if (tabs.length === 1) {
tab.active = true;
} else if (tab.active) {
ctrl.select(tab);
}
};
ctrl.removeTab = function removeTab(tab) {
var index = tabs.indexOf(tab);
//Select a new tab if the tab to be removed is selected and not destroyed
if (tab.active && tabs.length > 1 && !destroyed) {
//If this is the last tab, select the previous tab. else, the next tab.
var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;
ctrl.select(tabs[newActiveIndex]);
}
tabs.splice(index, 1);
};
var destroyed;
$scope.$on('$destroy', function() {
destroyed = true;
});
}])
/**
* @ngdoc directive
* @name ui.bootstrap.tabs.directive:tabset
* @restrict EA
*
* @description
* Tabset is the outer container for the tabs directive
*
* @param {boolean=} vertical Whether or not to use vertical styling for the tabs.
* @param {boolean=} justified Whether or not to use justified styling for the tabs.
*
* @example
First Content!Second Content!First Vertical Content!Second Vertical Content!First Justified Content!Second Justified Content!
*/
.directive('tabset', function() {
return {
restrict: 'EA',
transclude: true,
replace: true,
scope: {
type: '@'
},
controller: 'TabsetController',
templateUrl: 'template/tabs/tabset.html',
link: function(scope, element, attrs) {
scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
}
};
})
/**
* @ngdoc directive
* @name ui.bootstrap.tabs.directive:tab
* @restrict EA
*
* @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.
* @param {string=} select An expression to evaluate when the tab is selected.
* @param {boolean=} active A binding, telling whether or not this tab is selected.
* @param {boolean=} disabled A binding, telling whether or not this tab is disabled.
*
* @description
* Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.
*
* @example
First Tab Alert me!
Second Tab, with alert callback and html heading!
{{item.content}}
function TabsDemoCtrl($scope) {
$scope.items = [
{ title:"Dynamic Title 1", content:"Dynamic Item 0" },
{ title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true }
];
$scope.alertMe = function() {
setTimeout(function() {
alert("You've selected the alert tab!");
});
};
};
*/
/**
* @ngdoc directive
* @name ui.bootstrap.tabs.directive:tabHeading
* @restrict EA
*
* @description
* Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.
*
* @example
HTML in my titles?!
And some content, too!
Icon heading?!?
That's right.
*/
.directive('tab', ['$parse', function($parse) {
return {
require: '^tabset',
restrict: 'EA',
replace: true,
templateUrl: 'template/tabs/tab.html',
transclude: true,
scope: {
active: '=?',
heading: '@',
onSelect: '&select', //This callback is called in contentHeadingTransclude
//once it inserts the tab's content into the dom
onDeselect: '&deselect'
},
controller: function() {
//Empty controller so other directives can require being 'under' a tab
},
compile: function(elm, attrs, transclude) {
return function postLink(scope, elm, attrs, tabsetCtrl) {
scope.$watch('active', function(active) {
if (active) {
tabsetCtrl.select(scope);
}
});
scope.disabled = false;
if ( attrs.disabled ) {
scope.$parent.$watch($parse(attrs.disabled), function(value) {
scope.disabled = !! value;
});
}
scope.select = function() {
if ( !scope.disabled ) {
scope.active = true;
}
};
tabsetCtrl.addTab(scope);
scope.$on('$destroy', function() {
tabsetCtrl.removeTab(scope);
});
//We need to transclude later, once the content container is ready.
//when this link happens, we're inside a tab heading.
scope.$transcludeFn = transclude;
};
}
};
}])
.directive('tabHeadingTransclude', [function() {
return {
restrict: 'A',
require: '^tab',
link: function(scope, elm, attrs, tabCtrl) {
scope.$watch('headingElement', function updateHeadingElement(heading) {
if (heading) {
elm.html('');
elm.append(heading);
}
});
}
};
}])
.directive('tabContentTransclude', function() {
return {
restrict: 'A',
require: '^tabset',
link: function(scope, elm, attrs) {
var tab = scope.$eval(attrs.tabContentTransclude);
//Now our tab is ready to be transcluded: both the tab heading area
//and the tab content area are loaded. Transclude 'em both.
tab.$transcludeFn(tab.$parent, function(contents) {
angular.forEach(contents, function(node) {
if (isTabHeading(node)) {
//Let tabHeadingTransclude know.
tab.headingElement = node;
} else {
elm.append(node);
}
});
});
}
};
function isTabHeading(node) {
return node.tagName && (
node.hasAttribute('tab-heading') ||
node.hasAttribute('data-tab-heading') ||
node.tagName.toLowerCase() === 'tab-heading' ||
node.tagName.toLowerCase() === 'data-tab-heading'
);
}
})
;
angular.module('ui.bootstrap.timepicker', [])
.constant('timepickerConfig', {
hourStep: 1,
minuteStep: 1,
showMeridian: true,
meridians: null,
readonlyInput: false,
mousewheel: true
})
.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) {
var selected = new Date(),
ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
this.init = function( ngModelCtrl_, inputs ) {
ngModelCtrl = ngModelCtrl_;
ngModelCtrl.$render = this.render;
var hoursInputEl = inputs.eq(0),
minutesInputEl = inputs.eq(1);
var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
if ( mousewheel ) {
this.setupMousewheelEvents( hoursInputEl, minutesInputEl );
}
$scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
this.setupInputEvents( hoursInputEl, minutesInputEl );
};
var hourStep = timepickerConfig.hourStep;
if ($attrs.hourStep) {
$scope.$parent.$watch($parse($attrs.hourStep), function(value) {
hourStep = parseInt(value, 10);
});
}
var minuteStep = timepickerConfig.minuteStep;
if ($attrs.minuteStep) {
$scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
minuteStep = parseInt(value, 10);
});
}
// 12H / 24H mode
$scope.showMeridian = timepickerConfig.showMeridian;
if ($attrs.showMeridian) {
$scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
$scope.showMeridian = !!value;
if ( ngModelCtrl.$error.time ) {
// Evaluate from template
var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();
if (angular.isDefined( hours ) && angular.isDefined( minutes )) {
selected.setHours( hours );
refresh();
}
} else {
updateTemplate();
}
});
}
// Get $scope.hours in 24H mode if valid
function getHoursFromTemplate ( ) {
var hours = parseInt( $scope.hours, 10 );
var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);
if ( !valid ) {
return undefined;
}
if ( $scope.showMeridian ) {
if ( hours === 12 ) {
hours = 0;
}
if ( $scope.meridian === meridians[1] ) {
hours = hours + 12;
}
}
return hours;
}
function getMinutesFromTemplate() {
var minutes = parseInt($scope.minutes, 10);
return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined;
}
function pad( value ) {
return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value;
}
// Respond on mousewheel spin
this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) {
var isScrollingUp = function(e) {
if (e.originalEvent) {
e = e.originalEvent;
}
//pick correct delta variable depending on event
var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;
return (e.detail || delta > 0);
};
hoursInputEl.bind('mousewheel wheel', function(e) {
$scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() );
e.preventDefault();
});
minutesInputEl.bind('mousewheel wheel', function(e) {
$scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() );
e.preventDefault();
});
};
this.setupInputEvents = function( hoursInputEl, minutesInputEl ) {
if ( $scope.readonlyInput ) {
$scope.updateHours = angular.noop;
$scope.updateMinutes = angular.noop;
return;
}
var invalidate = function(invalidHours, invalidMinutes) {
ngModelCtrl.$setViewValue( null );
ngModelCtrl.$setValidity('time', false);
if (angular.isDefined(invalidHours)) {
$scope.invalidHours = invalidHours;
}
if (angular.isDefined(invalidMinutes)) {
$scope.invalidMinutes = invalidMinutes;
}
};
$scope.updateHours = function() {
var hours = getHoursFromTemplate();
if ( angular.isDefined(hours) ) {
selected.setHours( hours );
refresh( 'h' );
} else {
invalidate(true);
}
};
hoursInputEl.bind('blur', function(e) {
if ( !$scope.invalidHours && $scope.hours < 10) {
$scope.$apply( function() {
$scope.hours = pad( $scope.hours );
});
}
});
$scope.updateMinutes = function() {
var minutes = getMinutesFromTemplate();
if ( angular.isDefined(minutes) ) {
selected.setMinutes( minutes );
refresh( 'm' );
} else {
invalidate(undefined, true);
}
};
minutesInputEl.bind('blur', function(e) {
if ( !$scope.invalidMinutes && $scope.minutes < 10 ) {
$scope.$apply( function() {
$scope.minutes = pad( $scope.minutes );
});
}
});
};
this.render = function() {
var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null;
if ( isNaN(date) ) {
ngModelCtrl.$setValidity('time', false);
$log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
} else {
if ( date ) {
selected = date;
}
makeValid();
updateTemplate();
}
};
// Call internally when we know that model is valid.
function refresh( keyboardChange ) {
makeValid();
ngModelCtrl.$setViewValue( new Date(selected) );
updateTemplate( keyboardChange );
}
function makeValid() {
ngModelCtrl.$setValidity('time', true);
$scope.invalidHours = false;
$scope.invalidMinutes = false;
}
function updateTemplate( keyboardChange ) {
var hours = selected.getHours(), minutes = selected.getMinutes();
if ( $scope.showMeridian ) {
hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system
}
$scope.hours = keyboardChange === 'h' ? hours : pad(hours);
$scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes);
$scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];
}
function addMinutes( minutes ) {
var dt = new Date( selected.getTime() + minutes * 60000 );
selected.setHours( dt.getHours(), dt.getMinutes() );
refresh();
}
$scope.incrementHours = function() {
addMinutes( hourStep * 60 );
};
$scope.decrementHours = function() {
addMinutes( - hourStep * 60 );
};
$scope.incrementMinutes = function() {
addMinutes( minuteStep );
};
$scope.decrementMinutes = function() {
addMinutes( - minuteStep );
};
$scope.toggleMeridian = function() {
addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) );
};
}])
.directive('timepicker', function () {
return {
restrict: 'EA',
require: ['timepicker', '?^ngModel'],
controller:'TimepickerController',
replace: true,
scope: {},
templateUrl: 'template/timepicker/timepicker.html',
link: function(scope, element, attrs, ctrls) {
var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
if ( ngModelCtrl ) {
timepickerCtrl.init( ngModelCtrl, element.find('input') );
}
}
};
});
angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])
/**
* A helper service that can parse typeahead's syntax (string provided by users)
* Extracted to a separate service for ease of unit testing
*/
.factory('typeaheadParser', ['$parse', function ($parse) {
// 00000111000000000000022200000000000000003333333333333330000000000044000
var TYPEAHEAD_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
return {
parse:function (input) {
var match = input.match(TYPEAHEAD_REGEXP);
if (!match) {
throw new Error(
'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' +
' but got "' + input + '".');
}
return {
itemName:match[3],
source:$parse(match[4]),
viewMapper:$parse(match[2] || match[1]),
modelMapper:$parse(match[1])
};
}
};
}])
.directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser',
function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) {
var HOT_KEYS = [9, 13, 27, 38, 40];
return {
require:'ngModel',
link:function (originalScope, element, attrs, modelCtrl) {
//SUPPORTED ATTRIBUTES (OPTIONS)
//minimal no of characters that needs to be entered before typeahead kicks-in
var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1;
//minimal wait time after last character typed before typehead kicks-in
var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
//should it restrict model values to the ones selected from the popup only?
var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
//binding to a variable that indicates if matches are being retrieved asynchronously
var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
//a callback executed when a match is selected
var onSelectCallback = $parse(attrs.typeaheadOnSelect);
var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;
//INTERNAL VARIABLES
//model setter executed upon match selection
var $setModelValue = $parse(attrs.ngModel).assign;
//expressions used by typeahead
var parserResult = typeaheadParser.parse(attrs.typeahead);
var hasFocus;
//create a child scope for the typeahead directive so we are not polluting original scope
//with typeahead-specific data (matches, query etc.)
var scope = originalScope.$new();
originalScope.$on('$destroy', function(){
scope.$destroy();
});
// WAI-ARIA
var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
element.attr({
'aria-autocomplete': 'list',
'aria-expanded': false,
'aria-owns': popupId
});
//pop-up element used to display matches
var popUpEl = angular.element('');
popUpEl.attr({
id: popupId,
matches: 'matches',
active: 'activeIdx',
select: 'select(activeIdx)',
query: 'query',
position: 'position'
});
//custom item template
if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);
}
var resetMatches = function() {
scope.matches = [];
scope.activeIdx = -1;
element.attr('aria-expanded', false);
};
var getMatchId = function(index) {
return popupId + '-option-' + index;
};
// Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.
// This attribute is added or removed automatically when the `activeIdx` changes.
scope.$watch('activeIdx', function(index) {
if (index < 0) {
element.removeAttr('aria-activedescendant');
} else {
element.attr('aria-activedescendant', getMatchId(index));
}
});
var getMatchesAsync = function(inputValue) {
var locals = {$viewValue: inputValue};
isLoadingSetter(originalScope, true);
$q.when(parserResult.source(originalScope, locals)).then(function(matches) {
//it might happen that several async queries were in progress if a user were typing fast
//but we are interested only in responses that correspond to the current view value
var onCurrentRequest = (inputValue === modelCtrl.$viewValue);
if (onCurrentRequest && hasFocus) {
if (matches.length > 0) {
scope.activeIdx = focusFirst ? 0 : -1;
scope.matches.length = 0;
//transform labels
for(var i=0; i= minSearch) {
if (waitTime > 0) {
cancelPreviousTimeout();
scheduleSearchWithTimeout(inputValue);
} else {
getMatchesAsync(inputValue);
}
} else {
isLoadingSetter(originalScope, false);
cancelPreviousTimeout();
resetMatches();
}
if (isEditable) {
return inputValue;
} else {
if (!inputValue) {
// Reset in case user had typed something previously.
modelCtrl.$setValidity('editable', true);
return inputValue;
} else {
modelCtrl.$setValidity('editable', false);
return undefined;
}
}
});
modelCtrl.$formatters.push(function (modelValue) {
var candidateViewValue, emptyViewValue;
var locals = {};
if (inputFormatter) {
locals.$model = modelValue;
return inputFormatter(originalScope, locals);
} else {
//it might happen that we don't have enough info to properly render input value
//we need to check for this situation and simply return model value if we can't apply custom formatting
locals[parserResult.itemName] = modelValue;
candidateViewValue = parserResult.viewMapper(originalScope, locals);
locals[parserResult.itemName] = undefined;
emptyViewValue = parserResult.viewMapper(originalScope, locals);
return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue;
}
});
scope.select = function (activeIdx) {
//called from within the $digest() cycle
var locals = {};
var model, item;
locals[parserResult.itemName] = item = scope.matches[activeIdx].model;
model = parserResult.modelMapper(originalScope, locals);
$setModelValue(originalScope, model);
modelCtrl.$setValidity('editable', true);
onSelectCallback(originalScope, {
$item: item,
$model: model,
$label: parserResult.viewMapper(originalScope, locals)
});
resetMatches();
//return focus to the input element if a match was selected via a mouse click event
// use timeout to avoid $rootScope:inprog error
$timeout(function() { element[0].focus(); }, 0, false);
};
//bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
element.bind('keydown', function (evt) {
//typeahead is open and an "interesting" key was pressed
if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
return;
}
// if there's nothing selected (i.e. focusFirst) and enter is hit, don't do anything
if (scope.activeIdx == -1 && (evt.which === 13 || evt.which === 9)) {
return;
}
evt.preventDefault();
if (evt.which === 40) {
scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
scope.$digest();
} else if (evt.which === 38) {
scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
scope.$digest();
} else if (evt.which === 13 || evt.which === 9) {
scope.$apply(function () {
scope.select(scope.activeIdx);
});
} else if (evt.which === 27) {
evt.stopPropagation();
resetMatches();
scope.$digest();
}
});
element.bind('blur', function (evt) {
hasFocus = false;
});
// Keep reference to click handler to unbind it.
var dismissClickHandler = function (evt) {
if (element[0] !== evt.target) {
resetMatches();
scope.$digest();
}
};
$document.bind('click', dismissClickHandler);
originalScope.$on('$destroy', function(){
$document.unbind('click', dismissClickHandler);
if (appendToBody) {
$popup.remove();
}
});
var $popup = $compile(popUpEl)(scope);
if (appendToBody) {
$document.find('body').append($popup);
} else {
element.after($popup);
}
}
};
}])
.directive('typeaheadPopup', function () {
return {
restrict:'EA',
scope:{
matches:'=',
query:'=',
active:'=',
position:'=',
select:'&'
},
replace:true,
templateUrl:'template/typeahead/typeahead-popup.html',
link:function (scope, element, attrs) {
scope.templateUrl = attrs.templateUrl;
scope.isOpen = function () {
return scope.matches.length > 0;
};
scope.isActive = function (matchIdx) {
return scope.active == matchIdx;
};
scope.selectActive = function (matchIdx) {
scope.active = matchIdx;
};
scope.selectMatch = function (activeIdx) {
scope.select({activeIdx:activeIdx});
};
}
};
})
.directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {
return {
restrict:'EA',
scope:{
index:'=',
match:'=',
query:'='
},
link:function (scope, element, attrs) {
var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';
$http.get(tplUrl, {cache: $templateCache}).success(function(tplContent){
element.replaceWith($compile(tplContent.trim())(scope));
});
}
};
}])
.filter('typeaheadHighlight', function() {
function escapeRegexp(queryToEscape) {
return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
}
return function(matchItem, query) {
return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem;
};
});
================================================
FILE: public/dist/js/angular.js
================================================
/**
* @license AngularJS v1.3.15
* (c) 2010-2014 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, document, undefined) {'use strict';
/**
* @description
*
* This object provides a utility for producing rich Error messages within
* Angular. It can be called as follows:
*
* var exampleMinErr = minErr('example');
* throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
*
* The above creates an instance of minErr in the example namespace. The
* resulting error will have a namespaced error code of example.one. The
* resulting error will replace {0} with the value of foo, and {1} with the
* value of bar. The object is not restricted in the number of arguments it can
* take.
*
* If fewer arguments are specified than necessary for interpolation, the extra
* interpolation markers will be preserved in the final string.
*
* Since data will be parsed statically during a build step, some restrictions
* are applied with respect to how minErr instances are created and called.
* Instances should have names of the form namespaceMinErr for a minErr created
* using minErr('namespace') . Error codes, namespaces and template strings
* should all be static strings, not variables or general expressions.
*
* @param {string} module The namespace to use for the new minErr instance.
* @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
* error from returned function, for cases when a particular type of error is useful.
* @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
*/
function minErr(module, ErrorConstructor) {
ErrorConstructor = ErrorConstructor || Error;
return function() {
var code = arguments[0],
prefix = '[' + (module ? module + ':' : '') + code + '] ',
template = arguments[1],
templateArgs = arguments,
message, i;
message = prefix + template.replace(/\{\d+\}/g, function(match) {
var index = +match.slice(1, -1), arg;
if (index + 2 < templateArgs.length) {
return toDebugString(templateArgs[index + 2]);
}
return match;
});
message = message + '\nhttp://errors.angularjs.org/1.3.15/' +
(module ? module + '/' : '') + code;
for (i = 2; i < arguments.length; i++) {
message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
encodeURIComponent(toDebugString(arguments[i]));
}
return new ErrorConstructor(message);
};
}
/* We need to tell jshint what variables are being exported */
/* global angular: true,
msie: true,
jqLite: true,
jQuery: true,
slice: true,
splice: true,
push: true,
toString: true,
ngMinErr: true,
angularModule: true,
uid: true,
REGEX_STRING_REGEXP: true,
VALIDITY_STATE_PROPERTY: true,
lowercase: true,
uppercase: true,
manualLowercase: true,
manualUppercase: true,
nodeName_: true,
isArrayLike: true,
forEach: true,
sortedKeys: true,
forEachSorted: true,
reverseParams: true,
nextUid: true,
setHashKey: true,
extend: true,
int: true,
inherit: true,
noop: true,
identity: true,
valueFn: true,
isUndefined: true,
isDefined: true,
isObject: true,
isString: true,
isNumber: true,
isDate: true,
isArray: true,
isFunction: true,
isRegExp: true,
isWindow: true,
isScope: true,
isFile: true,
isFormData: true,
isBlob: true,
isBoolean: true,
isPromiseLike: true,
trim: true,
escapeForRegexp: true,
isElement: true,
makeMap: true,
includes: true,
arrayRemove: true,
copy: true,
shallowCopy: true,
equals: true,
csp: true,
concat: true,
sliceArgs: true,
bind: true,
toJsonReplacer: true,
toJson: true,
fromJson: true,
startingTag: true,
tryDecodeURIComponent: true,
parseKeyValue: true,
toKeyValue: true,
encodeUriSegment: true,
encodeUriQuery: true,
angularInit: true,
bootstrap: true,
getTestability: true,
snake_case: true,
bindJQuery: true,
assertArg: true,
assertArgFn: true,
assertNotHasOwnProperty: true,
getter: true,
getBlockNodes: true,
hasOwnProperty: true,
createMap: true,
NODE_TYPE_ELEMENT: true,
NODE_TYPE_TEXT: true,
NODE_TYPE_COMMENT: true,
NODE_TYPE_DOCUMENT: true,
NODE_TYPE_DOCUMENT_FRAGMENT: true,
*/
////////////////////////////////////
/**
* @ngdoc module
* @name ng
* @module ng
* @description
*
* # ng (core module)
* The ng module is loaded by default when an AngularJS application is started. The module itself
* contains the essential components for an AngularJS application to function. The table below
* lists a high level breakdown of each of the services/factories, filters, directives and testing
* components available within this core module.
*
*
*/
var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
// The name of a form control's ValidityState property.
// This is used so that it's possible for internal tests to create mock ValidityStates.
var VALIDITY_STATE_PROPERTY = 'validity';
/**
* @ngdoc function
* @name angular.lowercase
* @module ng
* @kind function
*
* @description Converts the specified string to lowercase.
* @param {string} string String to be converted to lowercase.
* @returns {string} Lowercased string.
*/
var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
var hasOwnProperty = Object.prototype.hasOwnProperty;
/**
* @ngdoc function
* @name angular.uppercase
* @module ng
* @kind function
*
* @description Converts the specified string to uppercase.
* @param {string} string String to be converted to uppercase.
* @returns {string} Uppercased string.
*/
var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
var manualLowercase = function(s) {
/* jshint bitwise: false */
return isString(s)
? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
: s;
};
var manualUppercase = function(s) {
/* jshint bitwise: false */
return isString(s)
? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
: s;
};
// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
// with correct but slower alternatives.
if ('i' !== 'I'.toLowerCase()) {
lowercase = manualLowercase;
uppercase = manualUppercase;
}
var
msie, // holds major version number for IE, or NaN if UA is not IE.
jqLite, // delay binding since jQuery could be loaded after us.
jQuery, // delay binding
slice = [].slice,
splice = [].splice,
push = [].push,
toString = Object.prototype.toString,
ngMinErr = minErr('ng'),
/** @name angular */
angular = window.angular || (window.angular = {}),
angularModule,
uid = 0;
/**
* documentMode is an IE-only property
* http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
*/
msie = document.documentMode;
/**
* @private
* @param {*} obj
* @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
* String ...)
*/
function isArrayLike(obj) {
if (obj == null || isWindow(obj)) {
return false;
}
var length = obj.length;
if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
return true;
}
return isString(obj) || isArray(obj) || length === 0 ||
typeof length === 'number' && length > 0 && (length - 1) in obj;
}
/**
* @ngdoc function
* @name angular.forEach
* @module ng
* @kind function
*
* @description
* Invokes the `iterator` function once for each item in `obj` collection, which can be either an
* object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
* is the value of an object property or an array element, `key` is the object property key or
* array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
*
* It is worth noting that `.forEach` does not iterate over inherited properties because it filters
* using the `hasOwnProperty` method.
*
* Unlike ES262's
* [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
* Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
* return the value provided.
*
```js
var values = {name: 'misko', gender: 'male'};
var log = [];
angular.forEach(values, function(value, key) {
this.push(key + ': ' + value);
}, log);
expect(log).toEqual(['name: misko', 'gender: male']);
```
*
* @param {Object|Array} obj Object to iterate over.
* @param {Function} iterator Iterator function.
* @param {Object=} context Object to become context (`this`) for the iterator function.
* @returns {Object|Array} Reference to `obj`.
*/
function forEach(obj, iterator, context) {
var key, length;
if (obj) {
if (isFunction(obj)) {
for (key in obj) {
// Need to check if hasOwnProperty exists,
// as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
iterator.call(context, obj[key], key, obj);
}
}
} else if (isArray(obj) || isArrayLike(obj)) {
var isPrimitive = typeof obj !== 'object';
for (key = 0, length = obj.length; key < length; key++) {
if (isPrimitive || key in obj) {
iterator.call(context, obj[key], key, obj);
}
}
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context, obj);
} else {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key, obj);
}
}
}
}
return obj;
}
function sortedKeys(obj) {
return Object.keys(obj).sort();
}
function forEachSorted(obj, iterator, context) {
var keys = sortedKeys(obj);
for (var i = 0; i < keys.length; i++) {
iterator.call(context, obj[keys[i]], keys[i]);
}
return keys;
}
/**
* when using forEach the params are value, key, but it is often useful to have key, value.
* @param {function(string, *)} iteratorFn
* @returns {function(*, string)}
*/
function reverseParams(iteratorFn) {
return function(value, key) { iteratorFn(key, value); };
}
/**
* A consistent way of creating unique IDs in angular.
*
* Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
* we hit number precision issues in JavaScript.
*
* Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
*
* @returns {number} an unique alpha-numeric string
*/
function nextUid() {
return ++uid;
}
/**
* Set or clear the hashkey for an object.
* @param obj object
* @param h the hashkey (!truthy to delete the hashkey)
*/
function setHashKey(obj, h) {
if (h) {
obj.$$hashKey = h;
} else {
delete obj.$$hashKey;
}
}
/**
* @ngdoc function
* @name angular.extend
* @module ng
* @kind function
*
* @description
* Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
* by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
* Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
*
* @param {Object} dst Destination object.
* @param {...Object} src Source object(s).
* @returns {Object} Reference to `dst`.
*/
function extend(dst) {
var h = dst.$$hashKey;
for (var i = 1, ii = arguments.length; i < ii; i++) {
var obj = arguments[i];
if (obj) {
var keys = Object.keys(obj);
for (var j = 0, jj = keys.length; j < jj; j++) {
var key = keys[j];
dst[key] = obj[key];
}
}
}
setHashKey(dst, h);
return dst;
}
function int(str) {
return parseInt(str, 10);
}
function inherit(parent, extra) {
return extend(Object.create(parent), extra);
}
/**
* @ngdoc function
* @name angular.noop
* @module ng
* @kind function
*
* @description
* A function that performs no operations. This function can be useful when writing code in the
* functional style.
```js
function foo(callback) {
var result = calculateResult();
(callback || angular.noop)(result);
}
```
*/
function noop() {}
noop.$inject = [];
/**
* @ngdoc function
* @name angular.identity
* @module ng
* @kind function
*
* @description
* A function that returns its first argument. This function is useful when writing code in the
* functional style.
*
```js
function transformer(transformationFn, value) {
return (transformationFn || angular.identity)(value);
};
```
* @param {*} value to be returned.
* @returns {*} the value passed in.
*/
function identity($) {return $;}
identity.$inject = [];
function valueFn(value) {return function() {return value;};}
/**
* @ngdoc function
* @name angular.isUndefined
* @module ng
* @kind function
*
* @description
* Determines if a reference is undefined.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is undefined.
*/
function isUndefined(value) {return typeof value === 'undefined';}
/**
* @ngdoc function
* @name angular.isDefined
* @module ng
* @kind function
*
* @description
* Determines if a reference is defined.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is defined.
*/
function isDefined(value) {return typeof value !== 'undefined';}
/**
* @ngdoc function
* @name angular.isObject
* @module ng
* @kind function
*
* @description
* Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
* considered to be objects. Note that JavaScript arrays are objects.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is an `Object` but not `null`.
*/
function isObject(value) {
// http://jsperf.com/isobject4
return value !== null && typeof value === 'object';
}
/**
* @ngdoc function
* @name angular.isString
* @module ng
* @kind function
*
* @description
* Determines if a reference is a `String`.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is a `String`.
*/
function isString(value) {return typeof value === 'string';}
/**
* @ngdoc function
* @name angular.isNumber
* @module ng
* @kind function
*
* @description
* Determines if a reference is a `Number`.
*
* This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`.
*
* If you wish to exclude these then you can use the native
* [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)
* method.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is a `Number`.
*/
function isNumber(value) {return typeof value === 'number';}
/**
* @ngdoc function
* @name angular.isDate
* @module ng
* @kind function
*
* @description
* Determines if a value is a date.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is a `Date`.
*/
function isDate(value) {
return toString.call(value) === '[object Date]';
}
/**
* @ngdoc function
* @name angular.isArray
* @module ng
* @kind function
*
* @description
* Determines if a reference is an `Array`.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is an `Array`.
*/
var isArray = Array.isArray;
/**
* @ngdoc function
* @name angular.isFunction
* @module ng
* @kind function
*
* @description
* Determines if a reference is a `Function`.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is a `Function`.
*/
function isFunction(value) {return typeof value === 'function';}
/**
* Determines if a value is a regular expression object.
*
* @private
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is a `RegExp`.
*/
function isRegExp(value) {
return toString.call(value) === '[object RegExp]';
}
/**
* Checks if `obj` is a window object.
*
* @private
* @param {*} obj Object to check
* @returns {boolean} True if `obj` is a window obj.
*/
function isWindow(obj) {
return obj && obj.window === obj;
}
function isScope(obj) {
return obj && obj.$evalAsync && obj.$watch;
}
function isFile(obj) {
return toString.call(obj) === '[object File]';
}
function isFormData(obj) {
return toString.call(obj) === '[object FormData]';
}
function isBlob(obj) {
return toString.call(obj) === '[object Blob]';
}
function isBoolean(value) {
return typeof value === 'boolean';
}
function isPromiseLike(obj) {
return obj && isFunction(obj.then);
}
var trim = function(value) {
return isString(value) ? value.trim() : value;
};
// Copied from:
// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
// Prereq: s is a string.
var escapeForRegexp = function(s) {
return s.replace(/([-()\[\]{}+?*.$\^|,:#= 0)
array.splice(index, 1);
return value;
}
/**
* @ngdoc function
* @name angular.copy
* @module ng
* @kind function
*
* @description
* Creates a deep copy of `source`, which should be an object or an array.
*
* * If no destination is supplied, a copy of the object or array is created.
* * If a destination is provided, all of its elements (for arrays) or properties (for objects)
* are deleted and then all elements/properties from the source are copied to it.
* * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
* * If `source` is identical to 'destination' an exception will be thrown.
*
* @param {*} source The source that will be used to make a copy.
* Can be any type, including primitives, `null`, and `undefined`.
* @param {(Object|Array)=} destination Destination into which the source is copied. If
* provided, must be of the same type as `source`.
* @returns {*} The copy or updated `destination`, if `destination` was specified.
*
* @example
form = {{user | json}}
master = {{master | json}}
*/
function copy(source, destination, stackSource, stackDest) {
if (isWindow(source) || isScope(source)) {
throw ngMinErr('cpws',
"Can't copy! Making copies of Window or Scope instances is not supported.");
}
if (!destination) {
destination = source;
if (source) {
if (isArray(source)) {
destination = copy(source, [], stackSource, stackDest);
} else if (isDate(source)) {
destination = new Date(source.getTime());
} else if (isRegExp(source)) {
destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
destination.lastIndex = source.lastIndex;
} else if (isObject(source)) {
var emptyObject = Object.create(Object.getPrototypeOf(source));
destination = copy(source, emptyObject, stackSource, stackDest);
}
}
} else {
if (source === destination) throw ngMinErr('cpi',
"Can't copy! Source and destination are identical.");
stackSource = stackSource || [];
stackDest = stackDest || [];
if (isObject(source)) {
var index = stackSource.indexOf(source);
if (index !== -1) return stackDest[index];
stackSource.push(source);
stackDest.push(destination);
}
var result;
if (isArray(source)) {
destination.length = 0;
for (var i = 0; i < source.length; i++) {
result = copy(source[i], null, stackSource, stackDest);
if (isObject(source[i])) {
stackSource.push(source[i]);
stackDest.push(result);
}
destination.push(result);
}
} else {
var h = destination.$$hashKey;
if (isArray(destination)) {
destination.length = 0;
} else {
forEach(destination, function(value, key) {
delete destination[key];
});
}
for (var key in source) {
if (source.hasOwnProperty(key)) {
result = copy(source[key], null, stackSource, stackDest);
if (isObject(source[key])) {
stackSource.push(source[key]);
stackDest.push(result);
}
destination[key] = result;
}
}
setHashKey(destination,h);
}
}
return destination;
}
/**
* Creates a shallow copy of an object, an array or a primitive.
*
* Assumes that there are no proto properties for objects.
*/
function shallowCopy(src, dst) {
if (isArray(src)) {
dst = dst || [];
for (var i = 0, ii = src.length; i < ii; i++) {
dst[i] = src[i];
}
} else if (isObject(src)) {
dst = dst || {};
for (var key in src) {
if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
dst[key] = src[key];
}
}
}
return dst || src;
}
/**
* @ngdoc function
* @name angular.equals
* @module ng
* @kind function
*
* @description
* Determines if two objects or two values are equivalent. Supports value types, regular
* expressions, arrays and objects.
*
* Two objects or values are considered equivalent if at least one of the following is true:
*
* * Both objects or values pass `===` comparison.
* * Both objects or values are of the same type and all of their properties are equal by
* comparing them with `angular.equals`.
* * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
* * Both values represent the same regular expression (In JavaScript,
* /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
* representation matches).
*
* During a property comparison, properties of `function` type and properties with names
* that begin with `$` are ignored.
*
* Scope and DOMWindow objects are being compared only by identify (`===`).
*
* @param {*} o1 Object or value to compare.
* @param {*} o2 Object or value to compare.
* @returns {boolean} True if arguments are equal.
*/
function equals(o1, o2) {
if (o1 === o2) return true;
if (o1 === null || o2 === null) return false;
if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
if (t1 == t2) {
if (t1 == 'object') {
if (isArray(o1)) {
if (!isArray(o2)) return false;
if ((length = o1.length) == o2.length) {
for (key = 0; key < length; key++) {
if (!equals(o1[key], o2[key])) return false;
}
return true;
}
} else if (isDate(o1)) {
if (!isDate(o2)) return false;
return equals(o1.getTime(), o2.getTime());
} else if (isRegExp(o1)) {
return isRegExp(o2) ? o1.toString() == o2.toString() : false;
} else {
if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
keySet = {};
for (key in o1) {
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
if (!equals(o1[key], o2[key])) return false;
keySet[key] = true;
}
for (key in o2) {
if (!keySet.hasOwnProperty(key) &&
key.charAt(0) !== '$' &&
o2[key] !== undefined &&
!isFunction(o2[key])) return false;
}
return true;
}
}
}
return false;
}
var csp = function() {
if (isDefined(csp.isActive_)) return csp.isActive_;
var active = !!(document.querySelector('[ng-csp]') ||
document.querySelector('[data-ng-csp]'));
if (!active) {
try {
/* jshint -W031, -W054 */
new Function('');
/* jshint +W031, +W054 */
} catch (e) {
active = true;
}
}
return (csp.isActive_ = active);
};
function concat(array1, array2, index) {
return array1.concat(slice.call(array2, index));
}
function sliceArgs(args, startIndex) {
return slice.call(args, startIndex || 0);
}
/* jshint -W101 */
/**
* @ngdoc function
* @name angular.bind
* @module ng
* @kind function
*
* @description
* Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
* `fn`). You can supply optional `args` that are prebound to the function. This feature is also
* known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
* distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
*
* @param {Object} self Context which `fn` should be evaluated in.
* @param {function()} fn Function to be bound.
* @param {...*} args Optional arguments to be prebound to the `fn` function call.
* @returns {function()} Function that wraps the `fn` with all the specified bindings.
*/
/* jshint +W101 */
function bind(self, fn) {
var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
if (isFunction(fn) && !(fn instanceof RegExp)) {
return curryArgs.length
? function() {
return arguments.length
? fn.apply(self, concat(curryArgs, arguments, 0))
: fn.apply(self, curryArgs);
}
: function() {
return arguments.length
? fn.apply(self, arguments)
: fn.call(self);
};
} else {
// in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
return fn;
}
}
function toJsonReplacer(key, value) {
var val = value;
if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
val = undefined;
} else if (isWindow(value)) {
val = '$WINDOW';
} else if (value && document === value) {
val = '$DOCUMENT';
} else if (isScope(value)) {
val = '$SCOPE';
}
return val;
}
/**
* @ngdoc function
* @name angular.toJson
* @module ng
* @kind function
*
* @description
* Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
* stripped since angular uses this notation internally.
*
* @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
* @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace.
* If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2).
* @returns {string|undefined} JSON-ified string representing `obj`.
*/
function toJson(obj, pretty) {
if (typeof obj === 'undefined') return undefined;
if (!isNumber(pretty)) {
pretty = pretty ? 2 : null;
}
return JSON.stringify(obj, toJsonReplacer, pretty);
}
/**
* @ngdoc function
* @name angular.fromJson
* @module ng
* @kind function
*
* @description
* Deserializes a JSON string.
*
* @param {string} json JSON string to deserialize.
* @returns {Object|Array|string|number} Deserialized JSON string.
*/
function fromJson(json) {
return isString(json)
? JSON.parse(json)
: json;
}
/**
* @returns {string} Returns the string representation of the element.
*/
function startingTag(element) {
element = jqLite(element).clone();
try {
// turns out IE does not let you set .html() on elements which
// are not allowed to have children. So we just ignore it.
element.empty();
} catch (e) {}
var elemHtml = jqLite('
').append(element).html();
try {
return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
elemHtml.
match(/^(<[^>]+>)/)[1].
replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
} catch (e) {
return lowercase(elemHtml);
}
}
/////////////////////////////////////////////////
/**
* Tries to decode the URI component without throwing an exception.
*
* @private
* @param str value potential URI component to check.
* @returns {boolean} True if `value` can be decoded
* with the decodeURIComponent function.
*/
function tryDecodeURIComponent(value) {
try {
return decodeURIComponent(value);
} catch (e) {
// Ignore any invalid uri component
}
}
/**
* Parses an escaped url query string into key-value pairs.
* @returns {Object.}
*/
function parseKeyValue(/**string*/keyValue) {
var obj = {}, key_value, key;
forEach((keyValue || "").split('&'), function(keyValue) {
if (keyValue) {
key_value = keyValue.replace(/\+/g,'%20').split('=');
key = tryDecodeURIComponent(key_value[0]);
if (isDefined(key)) {
var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
if (!hasOwnProperty.call(obj, key)) {
obj[key] = val;
} else if (isArray(obj[key])) {
obj[key].push(val);
} else {
obj[key] = [obj[key],val];
}
}
}
});
return obj;
}
function toKeyValue(obj) {
var parts = [];
forEach(obj, function(value, key) {
if (isArray(value)) {
forEach(value, function(arrayValue) {
parts.push(encodeUriQuery(key, true) +
(arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
});
} else {
parts.push(encodeUriQuery(key, true) +
(value === true ? '' : '=' + encodeUriQuery(value, true)));
}
});
return parts.length ? parts.join('&') : '';
}
/**
* We need our custom method because encodeURIComponent is too aggressive and doesn't follow
* http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
* segments:
* segment = *pchar
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
* pct-encoded = "%" HEXDIG HEXDIG
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
* / "*" / "+" / "," / ";" / "="
*/
function encodeUriSegment(val) {
return encodeUriQuery(val, true).
replace(/%26/gi, '&').
replace(/%3D/gi, '=').
replace(/%2B/gi, '+');
}
/**
* This method is intended for encoding *key* or *value* parts of query component. We need a custom
* method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
* encoded per http://tools.ietf.org/html/rfc3986:
* query = *( pchar / "/" / "?" )
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* pct-encoded = "%" HEXDIG HEXDIG
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
* / "*" / "+" / "," / ";" / "="
*/
function encodeUriQuery(val, pctEncodeSpaces) {
return encodeURIComponent(val).
replace(/%40/gi, '@').
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%3B/gi, ';').
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}
var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
function getNgAttribute(element, ngAttr) {
var attr, i, ii = ngAttrPrefixes.length;
element = jqLite(element);
for (i = 0; i < ii; ++i) {
attr = ngAttrPrefixes[i] + ngAttr;
if (isString(attr = element.attr(attr))) {
return attr;
}
}
return null;
}
/**
* @ngdoc directive
* @name ngApp
* @module ng
*
* @element ANY
* @param {angular.Module} ngApp an optional application
* {@link angular.module module} name to load.
* @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
* created in "strict-di" mode. This means that the application will fail to invoke functions which
* do not use explicit function annotation (and are thus unsuitable for minification), as described
* in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
* tracking down the root of these bugs.
*
* @description
*
* Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
* designates the **root element** of the application and is typically placed near the root element
* of the page - e.g. on the `` or `` tags.
*
* Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
* found in the document will be used to define the root element to auto-bootstrap as an
* application. To run multiple applications in an HTML document you must manually bootstrap them using
* {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
*
* You can specify an **AngularJS module** to be used as the root module for the application. This
* module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
* should contain the application code needed or have dependencies on other modules that will
* contain the code. See {@link angular.module} for more information.
*
* In the example below if the `ngApp` directive were not placed on the `html` element then the
* document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
* would not be resolved to `3`.
*
* `ngApp` is the easiest, and most common way to bootstrap an application.
*
I can add: {{a}} + {{b}} = {{ a+b }}
angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
$scope.a = 1;
$scope.b = 2;
});
*
* Using `ngStrictDi`, you would see something like this:
*
I can add: {{a}} + {{b}} = {{ a+b }}
This renders because the controller does not fail to
instantiate, by using explicit annotation style (see
script.js for details)
Name:
Hello, {{name}}!
This renders because the controller does not fail to
instantiate, by using explicit annotation style
(see script.js for details)
I can add: {{a}} + {{b}} = {{ a+b }}
The controller could not be instantiated, due to relying
on automatic function annotations (which are disabled in
strict mode). As such, the content of this section is not
interpolated, and there should be an error in your web console.
angular.module('ngAppStrictDemo', [])
// BadController will fail to instantiate, due to relying on automatic function annotation,
// rather than an explicit annotation
.controller('BadController', function($scope) {
$scope.a = 1;
$scope.b = 2;
})
// Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
// due to using explicit annotations using the array style and $inject property, respectively.
.controller('GoodController1', ['$scope', function($scope) {
$scope.a = 1;
$scope.b = 2;
}])
.controller('GoodController2', GoodController2);
function GoodController2($scope) {
$scope.name = "World";
}
GoodController2.$inject = ['$scope'];
div[ng-controller] {
margin-bottom: 1em;
-webkit-border-radius: 4px;
border-radius: 4px;
border: 1px solid;
padding: .5em;
}
div[ng-controller^=Good] {
border-color: #d6e9c6;
background-color: #dff0d8;
color: #3c763d;
}
div[ng-controller^=Bad] {
border-color: #ebccd1;
background-color: #f2dede;
color: #a94442;
margin-bottom: 0;
}
*/
function angularInit(element, bootstrap) {
var appElement,
module,
config = {};
// The element `element` has priority over any other element
forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
appElement = element;
module = element.getAttribute(name);
}
});
forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
var candidate;
if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
appElement = candidate;
module = candidate.getAttribute(name);
}
});
if (appElement) {
config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
bootstrap(appElement, module ? [module] : [], config);
}
}
/**
* @ngdoc function
* @name angular.bootstrap
* @module ng
* @description
* Use this function to manually start up angular application.
*
* See: {@link guide/bootstrap Bootstrap}
*
* Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
* They must use {@link ng.directive:ngApp ngApp}.
*
* Angular will detect if it has been loaded into the browser more than once and only allow the
* first loaded script to be bootstrapped and will report a warning to the browser console for
* each of the subsequent scripts. This prevents strange results in applications, where otherwise
* multiple instances of Angular try to work on the DOM.
*
* ```html
*
*
*
*
* {{greeting}}
*
*
*
*
*
*
* ```
*
* @param {DOMElement} element DOM element which is the root of angular application.
* @param {Array=} modules an array of modules to load into the application.
* Each item in the array should be the name of a predefined module or a (DI annotated)
* function that will be invoked by the injector as a `config` block.
* See: {@link angular.module modules}
* @param {Object=} config an object for defining configuration options for the application. The
* following keys are supported:
*
* * `strictDi` - disable automatic function annotation for the application. This is meant to
* assist in finding bugs which break minified code. Defaults to `false`.
*
* @returns {auto.$injector} Returns the newly created injector for this app.
*/
function bootstrap(element, modules, config) {
if (!isObject(config)) config = {};
var defaultConfig = {
strictDi: false
};
config = extend(defaultConfig, config);
var doBootstrap = function() {
element = jqLite(element);
if (element.injector()) {
var tag = (element[0] === document) ? 'document' : startingTag(element);
//Encode angle brackets to prevent input from being sanitized to empty string #8683
throw ngMinErr(
'btstrpd',
"App Already Bootstrapped with this Element '{0}'",
tag.replace(/,'<').replace(/>/,'>'));
}
modules = modules || [];
modules.unshift(['$provide', function($provide) {
$provide.value('$rootElement', element);
}]);
if (config.debugInfoEnabled) {
// Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
modules.push(['$compileProvider', function($compileProvider) {
$compileProvider.debugInfoEnabled(true);
}]);
}
modules.unshift('ng');
var injector = createInjector(modules, config.strictDi);
injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
function bootstrapApply(scope, element, compile, injector) {
scope.$apply(function() {
element.data('$injector', injector);
compile(element)(scope);
});
}]
);
return injector;
};
var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
config.debugInfoEnabled = true;
window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
}
if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
return doBootstrap();
}
window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
angular.resumeBootstrap = function(extraModules) {
forEach(extraModules, function(module) {
modules.push(module);
});
return doBootstrap();
};
if (isFunction(angular.resumeDeferredBootstrap)) {
angular.resumeDeferredBootstrap();
}
}
/**
* @ngdoc function
* @name angular.reloadWithDebugInfo
* @module ng
* @description
* Use this function to reload the current application with debug information turned on.
* This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
*
* See {@link ng.$compileProvider#debugInfoEnabled} for more.
*/
function reloadWithDebugInfo() {
window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
window.location.reload();
}
/**
* @name angular.getTestability
* @module ng
* @description
* Get the testability service for the instance of Angular on the given
* element.
* @param {DOMElement} element DOM element which is the root of angular application.
*/
function getTestability(rootElement) {
var injector = angular.element(rootElement).injector();
if (!injector) {
throw ngMinErr('test',
'no injector found for element argument to getTestability');
}
return injector.get('$$testability');
}
var SNAKE_CASE_REGEXP = /[A-Z]/g;
function snake_case(name, separator) {
separator = separator || '_';
return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
return (pos ? separator : '') + letter.toLowerCase();
});
}
var bindJQueryFired = false;
var skipDestroyOnNextJQueryCleanData;
function bindJQuery() {
var originalCleanData;
if (bindJQueryFired) {
return;
}
// bind to jQuery if present;
jQuery = window.jQuery;
// Use jQuery if it exists with proper functionality, otherwise default to us.
// Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
// Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
// versions. It will not work for sure with jQuery <1.7, though.
if (jQuery && jQuery.fn.on) {
jqLite = jQuery;
extend(jQuery.fn, {
scope: JQLitePrototype.scope,
isolateScope: JQLitePrototype.isolateScope,
controller: JQLitePrototype.controller,
injector: JQLitePrototype.injector,
inheritedData: JQLitePrototype.inheritedData
});
// All nodes removed from the DOM via various jQuery APIs like .remove()
// are passed through jQuery.cleanData. Monkey-patch this method to fire
// the $destroy event on all removed nodes.
originalCleanData = jQuery.cleanData;
jQuery.cleanData = function(elems) {
var events;
if (!skipDestroyOnNextJQueryCleanData) {
for (var i = 0, elem; (elem = elems[i]) != null; i++) {
events = jQuery._data(elem, "events");
if (events && events.$destroy) {
jQuery(elem).triggerHandler('$destroy');
}
}
} else {
skipDestroyOnNextJQueryCleanData = false;
}
originalCleanData(elems);
};
} else {
jqLite = JQLite;
}
angular.element = jqLite;
// Prevent double-proxying.
bindJQueryFired = true;
}
/**
* throw error if the argument is falsy.
*/
function assertArg(arg, name, reason) {
if (!arg) {
throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
}
return arg;
}
function assertArgFn(arg, name, acceptArrayAnnotation) {
if (acceptArrayAnnotation && isArray(arg)) {
arg = arg[arg.length - 1];
}
assertArg(isFunction(arg), name, 'not a function, got ' +
(arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
return arg;
}
/**
* throw error if the name given is hasOwnProperty
* @param {String} name the name to test
* @param {String} context the context in which the name is used, such as module or directive
*/
function assertNotHasOwnProperty(name, context) {
if (name === 'hasOwnProperty') {
throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
}
}
/**
* Return the value accessible from the object by path. Any undefined traversals are ignored
* @param {Object} obj starting object
* @param {String} path path to traverse
* @param {boolean} [bindFnToScope=true]
* @returns {Object} value as accessible by path
*/
//TODO(misko): this function needs to be removed
function getter(obj, path, bindFnToScope) {
if (!path) return obj;
var keys = path.split('.');
var key;
var lastInstance = obj;
var len = keys.length;
for (var i = 0; i < len; i++) {
key = keys[i];
if (obj) {
obj = (lastInstance = obj)[key];
}
}
if (!bindFnToScope && isFunction(obj)) {
return bind(lastInstance, obj);
}
return obj;
}
/**
* Return the DOM siblings between the first and last node in the given array.
* @param {Array} array like object
* @returns {jqLite} jqLite collection containing the nodes
*/
function getBlockNodes(nodes) {
// TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
// collection, otherwise update the original collection.
var node = nodes[0];
var endNode = nodes[nodes.length - 1];
var blockNodes = [node];
do {
node = node.nextSibling;
if (!node) break;
blockNodes.push(node);
} while (node !== endNode);
return jqLite(blockNodes);
}
/**
* Creates a new object without a prototype. This object is useful for lookup without having to
* guard against prototypically inherited properties via hasOwnProperty.
*
* Related micro-benchmarks:
* - http://jsperf.com/object-create2
* - http://jsperf.com/proto-map-lookup/2
* - http://jsperf.com/for-in-vs-object-keys2
*
* @returns {Object}
*/
function createMap() {
return Object.create(null);
}
var NODE_TYPE_ELEMENT = 1;
var NODE_TYPE_TEXT = 3;
var NODE_TYPE_COMMENT = 8;
var NODE_TYPE_DOCUMENT = 9;
var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
/**
* @ngdoc type
* @name angular.Module
* @module ng
* @description
*
* Interface for configuring angular {@link angular.module modules}.
*/
function setupModuleLoader(window) {
var $injectorMinErr = minErr('$injector');
var ngMinErr = minErr('ng');
function ensure(obj, name, factory) {
return obj[name] || (obj[name] = factory());
}
var angular = ensure(window, 'angular', Object);
// We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
angular.$$minErr = angular.$$minErr || minErr;
return ensure(angular, 'module', function() {
/** @type {Object.} */
var modules = {};
/**
* @ngdoc function
* @name angular.module
* @module ng
* @description
*
* The `angular.module` is a global place for creating, registering and retrieving Angular
* modules.
* All modules (angular core or 3rd party) that should be available to an application must be
* registered using this mechanism.
*
* When passed two or more arguments, a new module is created. If passed only one argument, an
* existing module (the name passed as the first argument to `module`) is retrieved.
*
*
* # Module
*
* A module is a collection of services, directives, controllers, filters, and configuration information.
* `angular.module` is used to configure the {@link auto.$injector $injector}.
*
* ```js
* // Create a new module
* var myModule = angular.module('myModule', []);
*
* // register a new service
* myModule.value('appName', 'MyCoolApp');
*
* // configure existing services inside initialization blocks.
* myModule.config(['$locationProvider', function($locationProvider) {
* // Configure existing providers
* $locationProvider.hashPrefix('!');
* }]);
* ```
*
* Then you can create an injector and load your modules like this:
*
* ```js
* var injector = angular.injector(['ng', 'myModule'])
* ```
*
* However it's more likely that you'll just use
* {@link ng.directive:ngApp ngApp} or
* {@link angular.bootstrap} to simplify this process for you.
*
* @param {!string} name The name of the module to create or retrieve.
* @param {!Array.=} requires If specified then new module is being created. If
* unspecified then the module is being retrieved for further configuration.
* @param {Function=} configFn Optional configuration function for the module. Same as
* {@link angular.Module#config Module#config()}.
* @returns {module} new module with the {@link angular.Module} api.
*/
return function module(name, requires, configFn) {
var assertNotHasOwnProperty = function(name, context) {
if (name === 'hasOwnProperty') {
throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
}
};
assertNotHasOwnProperty(name, 'module');
if (requires && modules.hasOwnProperty(name)) {
modules[name] = null;
}
return ensure(modules, name, function() {
if (!requires) {
throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
"the module name or forgot to load it. If registering a module ensure that you " +
"specify the dependencies as the second argument.", name);
}
/** @type {!Array.>} */
var invokeQueue = [];
/** @type {!Array.} */
var configBlocks = [];
/** @type {!Array.} */
var runBlocks = [];
var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
/** @type {angular.Module} */
var moduleInstance = {
// Private state
_invokeQueue: invokeQueue,
_configBlocks: configBlocks,
_runBlocks: runBlocks,
/**
* @ngdoc property
* @name angular.Module#requires
* @module ng
*
* @description
* Holds the list of modules which the injector will load before the current module is
* loaded.
*/
requires: requires,
/**
* @ngdoc property
* @name angular.Module#name
* @module ng
*
* @description
* Name of the module.
*/
name: name,
/**
* @ngdoc method
* @name angular.Module#provider
* @module ng
* @param {string} name service name
* @param {Function} providerType Construction function for creating new instance of the
* service.
* @description
* See {@link auto.$provide#provider $provide.provider()}.
*/
provider: invokeLater('$provide', 'provider'),
/**
* @ngdoc method
* @name angular.Module#factory
* @module ng
* @param {string} name service name
* @param {Function} providerFunction Function for creating new instance of the service.
* @description
* See {@link auto.$provide#factory $provide.factory()}.
*/
factory: invokeLater('$provide', 'factory'),
/**
* @ngdoc method
* @name angular.Module#service
* @module ng
* @param {string} name service name
* @param {Function} constructor A constructor function that will be instantiated.
* @description
* See {@link auto.$provide#service $provide.service()}.
*/
service: invokeLater('$provide', 'service'),
/**
* @ngdoc method
* @name angular.Module#value
* @module ng
* @param {string} name service name
* @param {*} object Service instance object.
* @description
* See {@link auto.$provide#value $provide.value()}.
*/
value: invokeLater('$provide', 'value'),
/**
* @ngdoc method
* @name angular.Module#constant
* @module ng
* @param {string} name constant name
* @param {*} object Constant value.
* @description
* Because the constant are fixed, they get applied before other provide methods.
* See {@link auto.$provide#constant $provide.constant()}.
*/
constant: invokeLater('$provide', 'constant', 'unshift'),
/**
* @ngdoc method
* @name angular.Module#animation
* @module ng
* @param {string} name animation name
* @param {Function} animationFactory Factory function for creating new instance of an
* animation.
* @description
*
* **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
*
*
* Defines an animation hook that can be later used with
* {@link ngAnimate.$animate $animate} service and directives that use this service.
*
* ```js
* module.animation('.animation-name', function($inject1, $inject2) {
* return {
* eventName : function(element, done) {
* //code to run the animation
* //once complete, then run done()
* return function cancellationFunction(element) {
* //code to cancel the animation
* }
* }
* }
* })
* ```
*
* See {@link ng.$animateProvider#register $animateProvider.register()} and
* {@link ngAnimate ngAnimate module} for more information.
*/
animation: invokeLater('$animateProvider', 'register'),
/**
* @ngdoc method
* @name angular.Module#filter
* @module ng
* @param {string} name Filter name.
* @param {Function} filterFactory Factory function for creating new instance of filter.
* @description
* See {@link ng.$filterProvider#register $filterProvider.register()}.
*/
filter: invokeLater('$filterProvider', 'register'),
/**
* @ngdoc method
* @name angular.Module#controller
* @module ng
* @param {string|Object} name Controller name, or an object map of controllers where the
* keys are the names and the values are the constructors.
* @param {Function} constructor Controller constructor function.
* @description
* See {@link ng.$controllerProvider#register $controllerProvider.register()}.
*/
controller: invokeLater('$controllerProvider', 'register'),
/**
* @ngdoc method
* @name angular.Module#directive
* @module ng
* @param {string|Object} name Directive name, or an object map of directives where the
* keys are the names and the values are the factories.
* @param {Function} directiveFactory Factory function for creating new instance of
* directives.
* @description
* See {@link ng.$compileProvider#directive $compileProvider.directive()}.
*/
directive: invokeLater('$compileProvider', 'directive'),
/**
* @ngdoc method
* @name angular.Module#config
* @module ng
* @param {Function} configFn Execute this function on module load. Useful for service
* configuration.
* @description
* Use this method to register work which needs to be performed on module loading.
* For more about how to configure services, see
* {@link providers#provider-recipe Provider Recipe}.
*/
config: config,
/**
* @ngdoc method
* @name angular.Module#run
* @module ng
* @param {Function} initializationFn Execute this function after injector creation.
* Useful for application initialization.
* @description
* Use this method to register work which should be performed when the injector is done
* loading all modules.
*/
run: function(block) {
runBlocks.push(block);
return this;
}
};
if (configFn) {
config(configFn);
}
return moduleInstance;
/**
* @param {string} provider
* @param {string} method
* @param {String=} insertMethod
* @returns {angular.Module}
*/
function invokeLater(provider, method, insertMethod, queue) {
if (!queue) queue = invokeQueue;
return function() {
queue[insertMethod || 'push']([provider, method, arguments]);
return moduleInstance;
};
}
});
};
});
}
/* global: toDebugString: true */
function serializeObject(obj) {
var seen = [];
return JSON.stringify(obj, function(key, val) {
val = toJsonReplacer(key, val);
if (isObject(val)) {
if (seen.indexOf(val) >= 0) return '<>';
seen.push(val);
}
return val;
});
}
function toDebugString(obj) {
if (typeof obj === 'function') {
return obj.toString().replace(/ \{[\s\S]*$/, '');
} else if (typeof obj === 'undefined') {
return 'undefined';
} else if (typeof obj !== 'string') {
return serializeObject(obj);
}
return obj;
}
/* global angularModule: true,
version: true,
$LocaleProvider,
$CompileProvider,
htmlAnchorDirective,
inputDirective,
inputDirective,
formDirective,
scriptDirective,
selectDirective,
styleDirective,
optionDirective,
ngBindDirective,
ngBindHtmlDirective,
ngBindTemplateDirective,
ngClassDirective,
ngClassEvenDirective,
ngClassOddDirective,
ngCspDirective,
ngCloakDirective,
ngControllerDirective,
ngFormDirective,
ngHideDirective,
ngIfDirective,
ngIncludeDirective,
ngIncludeFillContentDirective,
ngInitDirective,
ngNonBindableDirective,
ngPluralizeDirective,
ngRepeatDirective,
ngShowDirective,
ngStyleDirective,
ngSwitchDirective,
ngSwitchWhenDirective,
ngSwitchDefaultDirective,
ngOptionsDirective,
ngTranscludeDirective,
ngModelDirective,
ngListDirective,
ngChangeDirective,
patternDirective,
patternDirective,
requiredDirective,
requiredDirective,
minlengthDirective,
minlengthDirective,
maxlengthDirective,
maxlengthDirective,
ngValueDirective,
ngModelOptionsDirective,
ngAttributeAliasDirectives,
ngEventDirectives,
$AnchorScrollProvider,
$AnimateProvider,
$BrowserProvider,
$CacheFactoryProvider,
$ControllerProvider,
$DocumentProvider,
$ExceptionHandlerProvider,
$FilterProvider,
$InterpolateProvider,
$IntervalProvider,
$HttpProvider,
$HttpBackendProvider,
$LocationProvider,
$LogProvider,
$ParseProvider,
$RootScopeProvider,
$QProvider,
$$QProvider,
$$SanitizeUriProvider,
$SceProvider,
$SceDelegateProvider,
$SnifferProvider,
$TemplateCacheProvider,
$TemplateRequestProvider,
$$TestabilityProvider,
$TimeoutProvider,
$$RAFProvider,
$$AsyncCallbackProvider,
$WindowProvider,
$$jqLiteProvider
*/
/**
* @ngdoc object
* @name angular.version
* @module ng
* @description
* An object that contains information about the current AngularJS version. This object has the
* following properties:
*
* - `full` – `{string}` – Full version string, such as "0.9.18".
* - `major` – `{number}` – Major version number, such as "0".
* - `minor` – `{number}` – Minor version number, such as "9".
* - `dot` – `{number}` – Dot version number, such as "18".
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
*/
var version = {
full: '1.3.15', // all of these placeholder strings will be replaced by grunt's
major: 1, // package task
minor: 3,
dot: 15,
codeName: 'locality-filtration'
};
function publishExternalAPI(angular) {
extend(angular, {
'bootstrap': bootstrap,
'copy': copy,
'extend': extend,
'equals': equals,
'element': jqLite,
'forEach': forEach,
'injector': createInjector,
'noop': noop,
'bind': bind,
'toJson': toJson,
'fromJson': fromJson,
'identity': identity,
'isUndefined': isUndefined,
'isDefined': isDefined,
'isString': isString,
'isFunction': isFunction,
'isObject': isObject,
'isNumber': isNumber,
'isElement': isElement,
'isArray': isArray,
'version': version,
'isDate': isDate,
'lowercase': lowercase,
'uppercase': uppercase,
'callbacks': {counter: 0},
'getTestability': getTestability,
'$$minErr': minErr,
'$$csp': csp,
'reloadWithDebugInfo': reloadWithDebugInfo
});
angularModule = setupModuleLoader(window);
try {
angularModule('ngLocale');
} catch (e) {
angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
}
angularModule('ng', ['ngLocale'], ['$provide',
function ngModule($provide) {
// $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
$provide.provider({
$$sanitizeUri: $$SanitizeUriProvider
});
$provide.provider('$compile', $CompileProvider).
directive({
a: htmlAnchorDirective,
input: inputDirective,
textarea: inputDirective,
form: formDirective,
script: scriptDirective,
select: selectDirective,
style: styleDirective,
option: optionDirective,
ngBind: ngBindDirective,
ngBindHtml: ngBindHtmlDirective,
ngBindTemplate: ngBindTemplateDirective,
ngClass: ngClassDirective,
ngClassEven: ngClassEvenDirective,
ngClassOdd: ngClassOddDirective,
ngCloak: ngCloakDirective,
ngController: ngControllerDirective,
ngForm: ngFormDirective,
ngHide: ngHideDirective,
ngIf: ngIfDirective,
ngInclude: ngIncludeDirective,
ngInit: ngInitDirective,
ngNonBindable: ngNonBindableDirective,
ngPluralize: ngPluralizeDirective,
ngRepeat: ngRepeatDirective,
ngShow: ngShowDirective,
ngStyle: ngStyleDirective,
ngSwitch: ngSwitchDirective,
ngSwitchWhen: ngSwitchWhenDirective,
ngSwitchDefault: ngSwitchDefaultDirective,
ngOptions: ngOptionsDirective,
ngTransclude: ngTranscludeDirective,
ngModel: ngModelDirective,
ngList: ngListDirective,
ngChange: ngChangeDirective,
pattern: patternDirective,
ngPattern: patternDirective,
required: requiredDirective,
ngRequired: requiredDirective,
minlength: minlengthDirective,
ngMinlength: minlengthDirective,
maxlength: maxlengthDirective,
ngMaxlength: maxlengthDirective,
ngValue: ngValueDirective,
ngModelOptions: ngModelOptionsDirective
}).
directive({
ngInclude: ngIncludeFillContentDirective
}).
directive(ngAttributeAliasDirectives).
directive(ngEventDirectives);
$provide.provider({
$anchorScroll: $AnchorScrollProvider,
$animate: $AnimateProvider,
$browser: $BrowserProvider,
$cacheFactory: $CacheFactoryProvider,
$controller: $ControllerProvider,
$document: $DocumentProvider,
$exceptionHandler: $ExceptionHandlerProvider,
$filter: $FilterProvider,
$interpolate: $InterpolateProvider,
$interval: $IntervalProvider,
$http: $HttpProvider,
$httpBackend: $HttpBackendProvider,
$location: $LocationProvider,
$log: $LogProvider,
$parse: $ParseProvider,
$rootScope: $RootScopeProvider,
$q: $QProvider,
$$q: $$QProvider,
$sce: $SceProvider,
$sceDelegate: $SceDelegateProvider,
$sniffer: $SnifferProvider,
$templateCache: $TemplateCacheProvider,
$templateRequest: $TemplateRequestProvider,
$$testability: $$TestabilityProvider,
$timeout: $TimeoutProvider,
$window: $WindowProvider,
$$rAF: $$RAFProvider,
$$asyncCallback: $$AsyncCallbackProvider,
$$jqLite: $$jqLiteProvider
});
}
]);
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Any commits to this file should be reviewed with security in mind. *
* Changes to this file can potentially create security vulnerabilities. *
* An approval from 2 Core members with history of modifying *
* this file is required. *
* *
* Does the change somehow allow for arbitrary javascript to be executed? *
* Or allows for someone to change the prototype of built-in objects? *
* Or gives undesired access to variables likes document or window? *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* global JQLitePrototype: true,
addEventListenerFn: true,
removeEventListenerFn: true,
BOOLEAN_ATTR: true,
ALIASED_ATTR: true,
*/
//////////////////////////////////
//JQLite
//////////////////////////////////
/**
* @ngdoc function
* @name angular.element
* @module ng
* @kind function
*
* @description
* Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
*
* If jQuery is available, `angular.element` is an alias for the
* [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
* delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
*
*
jqLite is a tiny, API-compatible subset of jQuery that allows
* Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
* commonly needed functionality with the goal of having a very small footprint.
*
* To use jQuery, simply load it before `DOMContentLoaded` event fired.
*
*
**Note:** all element references in Angular are always wrapped with jQuery or
* jqLite; they are never raw DOM references.
*
* ## Angular's jqLite
* jqLite provides only the following jQuery methods:
*
* - [`addClass()`](http://api.jquery.com/addClass/)
* - [`after()`](http://api.jquery.com/after/)
* - [`append()`](http://api.jquery.com/append/)
* - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
* - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
* - [`children()`](http://api.jquery.com/children/) - Does not support selectors
* - [`clone()`](http://api.jquery.com/clone/)
* - [`contents()`](http://api.jquery.com/contents/)
* - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`
* - [`data()`](http://api.jquery.com/data/)
* - [`detach()`](http://api.jquery.com/detach/)
* - [`empty()`](http://api.jquery.com/empty/)
* - [`eq()`](http://api.jquery.com/eq/)
* - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
* - [`hasClass()`](http://api.jquery.com/hasClass/)
* - [`html()`](http://api.jquery.com/html/)
* - [`next()`](http://api.jquery.com/next/) - Does not support selectors
* - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
* - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
* - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
* - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
* - [`prepend()`](http://api.jquery.com/prepend/)
* - [`prop()`](http://api.jquery.com/prop/)
* - [`ready()`](http://api.jquery.com/ready/)
* - [`remove()`](http://api.jquery.com/remove/)
* - [`removeAttr()`](http://api.jquery.com/removeAttr/)
* - [`removeClass()`](http://api.jquery.com/removeClass/)
* - [`removeData()`](http://api.jquery.com/removeData/)
* - [`replaceWith()`](http://api.jquery.com/replaceWith/)
* - [`text()`](http://api.jquery.com/text/)
* - [`toggleClass()`](http://api.jquery.com/toggleClass/)
* - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
* - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
* - [`val()`](http://api.jquery.com/val/)
* - [`wrap()`](http://api.jquery.com/wrap/)
*
* ## jQuery/jqLite Extras
* Angular also provides the following additional methods and events to both jQuery and jqLite:
*
* ### Events
* - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
* on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
* element before it is removed.
*
* ### Methods
* - `controller(name)` - retrieves the controller of the current element or its parent. By default
* retrieves controller associated with the `ngController` directive. If `name` is provided as
* camelCase directive name, then the controller for this directive will be retrieved (e.g.
* `'ngModel'`).
* - `injector()` - retrieves the injector of the current element or its parent.
* - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
* element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
* be enabled.
* - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
* current element. This getter should be used only on elements that contain a directive which starts a new isolate
* scope. Calling `scope()` on this element always returns the original non-isolate scope.
* Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
* - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
* parent element is reached.
*
* @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
* @returns {Object} jQuery object.
*/
JQLite.expando = 'ng339';
var jqCache = JQLite.cache = {},
jqId = 1,
addEventListenerFn = function(element, type, fn) {
element.addEventListener(type, fn, false);
},
removeEventListenerFn = function(element, type, fn) {
element.removeEventListener(type, fn, false);
};
/*
* !!! This is an undocumented "private" function !!!
*/
JQLite._data = function(node) {
//jQuery always returns an object on cache miss
return this.cache[node[this.expando]] || {};
};
function jqNextId() { return ++jqId; }
var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
var MOZ_HACK_REGEXP = /^moz([A-Z])/;
var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
var jqLiteMinErr = minErr('jqLite');
/**
* Converts snake_case to camelCase.
* Also there is special case for Moz prefix starting with upper case letter.
* @param name Name to normalize
*/
function camelCase(name) {
return name.
replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
return offset ? letter.toUpperCase() : letter;
}).
replace(MOZ_HACK_REGEXP, 'Moz$1');
}
var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
var HTML_REGEXP = /<|?\w+;/;
var TAG_NAME_REGEXP = /<([\w:]+)/;
var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
var wrapMap = {
'option': [1, ''],
'thead': [1, '
', '
'],
'col': [2, '
', '
'],
'tr': [2, '
', '
'],
'td': [3, '
', '
'],
'_default': [0, "", ""]
};
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
function jqLiteIsTextNode(html) {
return !HTML_REGEXP.test(html);
}
function jqLiteAcceptsData(node) {
// The window object can accept data but has no nodeType
// Otherwise we are only interested in elements (1) and documents (9)
var nodeType = node.nodeType;
return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
}
function jqLiteBuildFragment(html, context) {
var tmp, tag, wrap,
fragment = context.createDocumentFragment(),
nodes = [], i;
if (jqLiteIsTextNode(html)) {
// Convert non-html into a text node
nodes.push(context.createTextNode(html));
} else {
// Convert html into DOM nodes
tmp = tmp || fragment.appendChild(context.createElement("div"));
tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
wrap = wrapMap[tag] || wrapMap._default;
tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1>$2>") + wrap[2];
// Descend through wrappers to the right content
i = wrap[0];
while (i--) {
tmp = tmp.lastChild;
}
nodes = concat(nodes, tmp.childNodes);
tmp = fragment.firstChild;
tmp.textContent = "";
}
// Remove wrapper from fragment
fragment.textContent = "";
fragment.innerHTML = ""; // Clear inner HTML
forEach(nodes, function(node) {
fragment.appendChild(node);
});
return fragment;
}
function jqLiteParseHTML(html, context) {
context = context || document;
var parsed;
if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
return [context.createElement(parsed[1])];
}
if ((parsed = jqLiteBuildFragment(html, context))) {
return parsed.childNodes;
}
return [];
}
/////////////////////////////////////////////
function JQLite(element) {
if (element instanceof JQLite) {
return element;
}
var argIsString;
if (isString(element)) {
element = trim(element);
argIsString = true;
}
if (!(this instanceof JQLite)) {
if (argIsString && element.charAt(0) != '<') {
throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
}
return new JQLite(element);
}
if (argIsString) {
jqLiteAddNodes(this, jqLiteParseHTML(element));
} else {
jqLiteAddNodes(this, element);
}
}
function jqLiteClone(element) {
return element.cloneNode(true);
}
function jqLiteDealoc(element, onlyDescendants) {
if (!onlyDescendants) jqLiteRemoveData(element);
if (element.querySelectorAll) {
var descendants = element.querySelectorAll('*');
for (var i = 0, l = descendants.length; i < l; i++) {
jqLiteRemoveData(descendants[i]);
}
}
}
function jqLiteOff(element, type, fn, unsupported) {
if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
var expandoStore = jqLiteExpandoStore(element);
var events = expandoStore && expandoStore.events;
var handle = expandoStore && expandoStore.handle;
if (!handle) return; //no listeners registered
if (!type) {
for (type in events) {
if (type !== '$destroy') {
removeEventListenerFn(element, type, handle);
}
delete events[type];
}
} else {
forEach(type.split(' '), function(type) {
if (isDefined(fn)) {
var listenerFns = events[type];
arrayRemove(listenerFns || [], fn);
if (listenerFns && listenerFns.length > 0) {
return;
}
}
removeEventListenerFn(element, type, handle);
delete events[type];
});
}
}
function jqLiteRemoveData(element, name) {
var expandoId = element.ng339;
var expandoStore = expandoId && jqCache[expandoId];
if (expandoStore) {
if (name) {
delete expandoStore.data[name];
return;
}
if (expandoStore.handle) {
if (expandoStore.events.$destroy) {
expandoStore.handle({}, '$destroy');
}
jqLiteOff(element);
}
delete jqCache[expandoId];
element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
}
}
function jqLiteExpandoStore(element, createIfNecessary) {
var expandoId = element.ng339,
expandoStore = expandoId && jqCache[expandoId];
if (createIfNecessary && !expandoStore) {
element.ng339 = expandoId = jqNextId();
expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
}
return expandoStore;
}
function jqLiteData(element, key, value) {
if (jqLiteAcceptsData(element)) {
var isSimpleSetter = isDefined(value);
var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
var massGetter = !key;
var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
var data = expandoStore && expandoStore.data;
if (isSimpleSetter) { // data('key', value)
data[key] = value;
} else {
if (massGetter) { // data()
return data;
} else {
if (isSimpleGetter) { // data('key')
// don't force creation of expandoStore if it doesn't exist yet
return data && data[key];
} else { // mass-setter: data({key1: val1, key2: val2})
extend(data, key);
}
}
}
}
}
function jqLiteHasClass(element, selector) {
if (!element.getAttribute) return false;
return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
indexOf(" " + selector + " ") > -1);
}
function jqLiteRemoveClass(element, cssClasses) {
if (cssClasses && element.setAttribute) {
forEach(cssClasses.split(' '), function(cssClass) {
element.setAttribute('class', trim(
(" " + (element.getAttribute('class') || '') + " ")
.replace(/[\n\t]/g, " ")
.replace(" " + trim(cssClass) + " ", " "))
);
});
}
}
function jqLiteAddClass(element, cssClasses) {
if (cssClasses && element.setAttribute) {
var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
.replace(/[\n\t]/g, " ");
forEach(cssClasses.split(' '), function(cssClass) {
cssClass = trim(cssClass);
if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
existingClasses += cssClass + ' ';
}
});
element.setAttribute('class', trim(existingClasses));
}
}
function jqLiteAddNodes(root, elements) {
// THIS CODE IS VERY HOT. Don't make changes without benchmarking.
if (elements) {
// if a Node (the most common case)
if (elements.nodeType) {
root[root.length++] = elements;
} else {
var length = elements.length;
// if an Array or NodeList and not a Window
if (typeof length === 'number' && elements.window !== elements) {
if (length) {
for (var i = 0; i < length; i++) {
root[root.length++] = elements[i];
}
}
} else {
root[root.length++] = elements;
}
}
}
}
function jqLiteController(element, name) {
return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
}
function jqLiteInheritedData(element, name, value) {
// if element is the document object work with the html element instead
// this makes $(document).scope() possible
if (element.nodeType == NODE_TYPE_DOCUMENT) {
element = element.documentElement;
}
var names = isArray(name) ? name : [name];
while (element) {
for (var i = 0, ii = names.length; i < ii; i++) {
if ((value = jqLite.data(element, names[i])) !== undefined) return value;
}
// If dealing with a document fragment node with a host element, and no parent, use the host
// element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
// to lookup parent controllers.
element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
}
}
function jqLiteEmpty(element) {
jqLiteDealoc(element, true);
while (element.firstChild) {
element.removeChild(element.firstChild);
}
}
function jqLiteRemove(element, keepData) {
if (!keepData) jqLiteDealoc(element);
var parent = element.parentNode;
if (parent) parent.removeChild(element);
}
function jqLiteDocumentLoaded(action, win) {
win = win || window;
if (win.document.readyState === 'complete') {
// Force the action to be run async for consistent behaviour
// from the action's point of view
// i.e. it will definitely not be in a $apply
win.setTimeout(action);
} else {
// No need to unbind this handler as load is only ever called once
jqLite(win).on('load', action);
}
}
//////////////////////////////////////////
// Functions which are declared directly.
//////////////////////////////////////////
var JQLitePrototype = JQLite.prototype = {
ready: function(fn) {
var fired = false;
function trigger() {
if (fired) return;
fired = true;
fn();
}
// check if document is already loaded
if (document.readyState === 'complete') {
setTimeout(trigger);
} else {
this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
// we can not use jqLite since we are not done loading and jQuery could be loaded later.
// jshint -W064
JQLite(window).on('load', trigger); // fallback to window.onload for others
// jshint +W064
}
},
toString: function() {
var value = [];
forEach(this, function(e) { value.push('' + e);});
return '[' + value.join(', ') + ']';
},
eq: function(index) {
return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
},
length: 0,
push: push,
sort: [].sort,
splice: [].splice
};
//////////////////////////////////////////
// Functions iterating getter/setters.
// these functions return self on setter and
// value on get.
//////////////////////////////////////////
var BOOLEAN_ATTR = {};
forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
BOOLEAN_ATTR[lowercase(value)] = value;
});
var BOOLEAN_ELEMENTS = {};
forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
BOOLEAN_ELEMENTS[value] = true;
});
var ALIASED_ATTR = {
'ngMinlength': 'minlength',
'ngMaxlength': 'maxlength',
'ngMin': 'min',
'ngMax': 'max',
'ngPattern': 'pattern'
};
function getBooleanAttrName(element, name) {
// check dom last since we will most likely fail on name
var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
// booleanAttr is here twice to minimize DOM access
return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
}
function getAliasedAttrName(element, name) {
var nodeName = element.nodeName;
return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
}
forEach({
data: jqLiteData,
removeData: jqLiteRemoveData
}, function(fn, name) {
JQLite[name] = fn;
});
forEach({
data: jqLiteData,
inheritedData: jqLiteInheritedData,
scope: function(element) {
// Can't use jqLiteData here directly so we stay compatible with jQuery!
return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
},
isolateScope: function(element) {
// Can't use jqLiteData here directly so we stay compatible with jQuery!
return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
},
controller: jqLiteController,
injector: function(element) {
return jqLiteInheritedData(element, '$injector');
},
removeAttr: function(element, name) {
element.removeAttribute(name);
},
hasClass: jqLiteHasClass,
css: function(element, name, value) {
name = camelCase(name);
if (isDefined(value)) {
element.style[name] = value;
} else {
return element.style[name];
}
},
attr: function(element, name, value) {
var lowercasedName = lowercase(name);
if (BOOLEAN_ATTR[lowercasedName]) {
if (isDefined(value)) {
if (!!value) {
element[name] = true;
element.setAttribute(name, lowercasedName);
} else {
element[name] = false;
element.removeAttribute(lowercasedName);
}
} else {
return (element[name] ||
(element.attributes.getNamedItem(name) || noop).specified)
? lowercasedName
: undefined;
}
} else if (isDefined(value)) {
element.setAttribute(name, value);
} else if (element.getAttribute) {
// the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
// some elements (e.g. Document) don't have get attribute, so return undefined
var ret = element.getAttribute(name, 2);
// normalize non-existing attributes to undefined (as jQuery)
return ret === null ? undefined : ret;
}
},
prop: function(element, name, value) {
if (isDefined(value)) {
element[name] = value;
} else {
return element[name];
}
},
text: (function() {
getText.$dv = '';
return getText;
function getText(element, value) {
if (isUndefined(value)) {
var nodeType = element.nodeType;
return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
}
element.textContent = value;
}
})(),
val: function(element, value) {
if (isUndefined(value)) {
if (element.multiple && nodeName_(element) === 'select') {
var result = [];
forEach(element.options, function(option) {
if (option.selected) {
result.push(option.value || option.text);
}
});
return result.length === 0 ? null : result;
}
return element.value;
}
element.value = value;
},
html: function(element, value) {
if (isUndefined(value)) {
return element.innerHTML;
}
jqLiteDealoc(element, true);
element.innerHTML = value;
},
empty: jqLiteEmpty
}, function(fn, name) {
/**
* Properties: writes return selection, reads return first value
*/
JQLite.prototype[name] = function(arg1, arg2) {
var i, key;
var nodeCount = this.length;
// jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
// in a way that survives minification.
// jqLiteEmpty takes no arguments but is a setter.
if (fn !== jqLiteEmpty &&
(((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
if (isObject(arg1)) {
// we are a write, but the object properties are the key/values
for (i = 0; i < nodeCount; i++) {
if (fn === jqLiteData) {
// data() takes the whole object in jQuery
fn(this[i], arg1);
} else {
for (key in arg1) {
fn(this[i], key, arg1[key]);
}
}
}
// return self for chaining
return this;
} else {
// we are a read, so read the first child.
// TODO: do we still need this?
var value = fn.$dv;
// Only if we have $dv do we iterate over all, otherwise it is just the first element.
var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
for (var j = 0; j < jj; j++) {
var nodeValue = fn(this[j], arg1, arg2);
value = value ? value + nodeValue : nodeValue;
}
return value;
}
} else {
// we are a write, so apply to all children
for (i = 0; i < nodeCount; i++) {
fn(this[i], arg1, arg2);
}
// return self for chaining
return this;
}
};
});
function createEventHandler(element, events) {
var eventHandler = function(event, type) {
// jQuery specific api
event.isDefaultPrevented = function() {
return event.defaultPrevented;
};
var eventFns = events[type || event.type];
var eventFnsLength = eventFns ? eventFns.length : 0;
if (!eventFnsLength) return;
if (isUndefined(event.immediatePropagationStopped)) {
var originalStopImmediatePropagation = event.stopImmediatePropagation;
event.stopImmediatePropagation = function() {
event.immediatePropagationStopped = true;
if (event.stopPropagation) {
event.stopPropagation();
}
if (originalStopImmediatePropagation) {
originalStopImmediatePropagation.call(event);
}
};
}
event.isImmediatePropagationStopped = function() {
return event.immediatePropagationStopped === true;
};
// Copy event handlers in case event handlers array is modified during execution.
if ((eventFnsLength > 1)) {
eventFns = shallowCopy(eventFns);
}
for (var i = 0; i < eventFnsLength; i++) {
if (!event.isImmediatePropagationStopped()) {
eventFns[i].call(element, event);
}
}
};
// TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
// events on `element`
eventHandler.elem = element;
return eventHandler;
}
//////////////////////////////////////////
// Functions iterating traversal.
// These functions chain results into a single
// selector.
//////////////////////////////////////////
forEach({
removeData: jqLiteRemoveData,
on: function jqLiteOn(element, type, fn, unsupported) {
if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
// Do not add event handlers to non-elements because they will not be cleaned up.
if (!jqLiteAcceptsData(element)) {
return;
}
var expandoStore = jqLiteExpandoStore(element, true);
var events = expandoStore.events;
var handle = expandoStore.handle;
if (!handle) {
handle = expandoStore.handle = createEventHandler(element, events);
}
// http://jsperf.com/string-indexof-vs-split
var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
var i = types.length;
while (i--) {
type = types[i];
var eventFns = events[type];
if (!eventFns) {
events[type] = [];
if (type === 'mouseenter' || type === 'mouseleave') {
// Refer to jQuery's implementation of mouseenter & mouseleave
// Read about mouseenter and mouseleave:
// http://www.quirksmode.org/js/events_mouse.html#link8
jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
var target = this, related = event.relatedTarget;
// For mousenter/leave call the handler if related is outside the target.
// NB: No relatedTarget if the mouse left/entered the browser window
if (!related || (related !== target && !target.contains(related))) {
handle(event, type);
}
});
} else {
if (type !== '$destroy') {
addEventListenerFn(element, type, handle);
}
}
eventFns = events[type];
}
eventFns.push(fn);
}
},
off: jqLiteOff,
one: function(element, type, fn) {
element = jqLite(element);
//add the listener twice so that when it is called
//you can remove the original function and still be
//able to call element.off(ev, fn) normally
element.on(type, function onFn() {
element.off(type, fn);
element.off(type, onFn);
});
element.on(type, fn);
},
replaceWith: function(element, replaceNode) {
var index, parent = element.parentNode;
jqLiteDealoc(element);
forEach(new JQLite(replaceNode), function(node) {
if (index) {
parent.insertBefore(node, index.nextSibling);
} else {
parent.replaceChild(node, element);
}
index = node;
});
},
children: function(element) {
var children = [];
forEach(element.childNodes, function(element) {
if (element.nodeType === NODE_TYPE_ELEMENT)
children.push(element);
});
return children;
},
contents: function(element) {
return element.contentDocument || element.childNodes || [];
},
append: function(element, node) {
var nodeType = element.nodeType;
if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
node = new JQLite(node);
for (var i = 0, ii = node.length; i < ii; i++) {
var child = node[i];
element.appendChild(child);
}
},
prepend: function(element, node) {
if (element.nodeType === NODE_TYPE_ELEMENT) {
var index = element.firstChild;
forEach(new JQLite(node), function(child) {
element.insertBefore(child, index);
});
}
},
wrap: function(element, wrapNode) {
wrapNode = jqLite(wrapNode).eq(0).clone()[0];
var parent = element.parentNode;
if (parent) {
parent.replaceChild(wrapNode, element);
}
wrapNode.appendChild(element);
},
remove: jqLiteRemove,
detach: function(element) {
jqLiteRemove(element, true);
},
after: function(element, newElement) {
var index = element, parent = element.parentNode;
newElement = new JQLite(newElement);
for (var i = 0, ii = newElement.length; i < ii; i++) {
var node = newElement[i];
parent.insertBefore(node, index.nextSibling);
index = node;
}
},
addClass: jqLiteAddClass,
removeClass: jqLiteRemoveClass,
toggleClass: function(element, selector, condition) {
if (selector) {
forEach(selector.split(' '), function(className) {
var classCondition = condition;
if (isUndefined(classCondition)) {
classCondition = !jqLiteHasClass(element, className);
}
(classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
});
}
},
parent: function(element) {
var parent = element.parentNode;
return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
},
next: function(element) {
return element.nextElementSibling;
},
find: function(element, selector) {
if (element.getElementsByTagName) {
return element.getElementsByTagName(selector);
} else {
return [];
}
},
clone: jqLiteClone,
triggerHandler: function(element, event, extraParameters) {
var dummyEvent, eventFnsCopy, handlerArgs;
var eventName = event.type || event;
var expandoStore = jqLiteExpandoStore(element);
var events = expandoStore && expandoStore.events;
var eventFns = events && events[eventName];
if (eventFns) {
// Create a dummy event to pass to the handlers
dummyEvent = {
preventDefault: function() { this.defaultPrevented = true; },
isDefaultPrevented: function() { return this.defaultPrevented === true; },
stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
stopPropagation: noop,
type: eventName,
target: element
};
// If a custom event was provided then extend our dummy event with it
if (event.type) {
dummyEvent = extend(dummyEvent, event);
}
// Copy event handlers in case event handlers array is modified during execution.
eventFnsCopy = shallowCopy(eventFns);
handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
forEach(eventFnsCopy, function(fn) {
if (!dummyEvent.isImmediatePropagationStopped()) {
fn.apply(element, handlerArgs);
}
});
}
}
}, function(fn, name) {
/**
* chaining functions
*/
JQLite.prototype[name] = function(arg1, arg2, arg3) {
var value;
for (var i = 0, ii = this.length; i < ii; i++) {
if (isUndefined(value)) {
value = fn(this[i], arg1, arg2, arg3);
if (isDefined(value)) {
// any function which returns a value needs to be wrapped
value = jqLite(value);
}
} else {
jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
}
}
return isDefined(value) ? value : this;
};
// bind legacy bind/unbind to on/off
JQLite.prototype.bind = JQLite.prototype.on;
JQLite.prototype.unbind = JQLite.prototype.off;
});
// Provider for private $$jqLite service
function $$jqLiteProvider() {
this.$get = function $$jqLite() {
return extend(JQLite, {
hasClass: function(node, classes) {
if (node.attr) node = node[0];
return jqLiteHasClass(node, classes);
},
addClass: function(node, classes) {
if (node.attr) node = node[0];
return jqLiteAddClass(node, classes);
},
removeClass: function(node, classes) {
if (node.attr) node = node[0];
return jqLiteRemoveClass(node, classes);
}
});
};
}
/**
* Computes a hash of an 'obj'.
* Hash of a:
* string is string
* number is number as string
* object is either result of calling $$hashKey function on the object or uniquely generated id,
* that is also assigned to the $$hashKey property of the object.
*
* @param obj
* @returns {string} hash string such that the same input will have the same hash string.
* The resulting string key is in 'type:hashKey' format.
*/
function hashKey(obj, nextUidFn) {
var key = obj && obj.$$hashKey;
if (key) {
if (typeof key === 'function') {
key = obj.$$hashKey();
}
return key;
}
var objType = typeof obj;
if (objType == 'function' || (objType == 'object' && obj !== null)) {
key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
} else {
key = objType + ':' + obj;
}
return key;
}
/**
* HashMap which can use objects as keys
*/
function HashMap(array, isolatedUid) {
if (isolatedUid) {
var uid = 0;
this.nextUid = function() {
return ++uid;
};
}
forEach(array, this.put, this);
}
HashMap.prototype = {
/**
* Store key value pair
* @param key key to store can be any type
* @param value value to store can be any type
*/
put: function(key, value) {
this[hashKey(key, this.nextUid)] = value;
},
/**
* @param key
* @returns {Object} the value for the key
*/
get: function(key) {
return this[hashKey(key, this.nextUid)];
},
/**
* Remove the key/value pair
* @param key
*/
remove: function(key) {
var value = this[key = hashKey(key, this.nextUid)];
delete this[key];
return value;
}
};
/**
* @ngdoc function
* @module ng
* @name angular.injector
* @kind function
*
* @description
* Creates an injector object that can be used for retrieving services as well as for
* dependency injection (see {@link guide/di dependency injection}).
*
* @param {Array.} modules A list of module functions or their aliases. See
* {@link angular.module}. The `ng` module must be explicitly added.
* @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
* disallows argument name annotation inference.
* @returns {injector} Injector object. See {@link auto.$injector $injector}.
*
* @example
* Typical usage
* ```js
* // create an injector
* var $injector = angular.injector(['ng']);
*
* // use the injector to kick off your application
* // use the type inference to auto inject arguments, or use implicit injection
* $injector.invoke(function($rootScope, $compile, $document) {
* $compile($document)($rootScope);
* $rootScope.$digest();
* });
* ```
*
* Sometimes you want to get access to the injector of a currently running Angular app
* from outside Angular. Perhaps, you want to inject and compile some markup after the
* application has been bootstrapped. You can do this using the extra `injector()` added
* to JQuery/jqLite elements. See {@link angular.element}.
*
* *This is fairly rare but could be the case if a third party library is injecting the
* markup.*
*
* In the following example a new block of HTML containing a `ng-controller`
* directive is added to the end of the document body by JQuery. We then compile and link
* it into the current AngularJS scope.
*
* ```js
* var $div = $('
{{content.label}}
');
* $(document.body).append($div);
*
* angular.element(document).injector().invoke(function($compile) {
* var scope = angular.element($div).scope();
* $compile($div)(scope);
* });
* ```
*/
/**
* @ngdoc module
* @name auto
* @description
*
* Implicit module which gets automatically added to each {@link auto.$injector $injector}.
*/
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var $injectorMinErr = minErr('$injector');
function anonFn(fn) {
// For anonymous functions, showing at the very least the function signature can help in
// debugging.
var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
args = fnText.match(FN_ARGS);
if (args) {
return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
}
return 'fn';
}
function annotate(fn, strictDi, name) {
var $inject,
fnText,
argDecl,
last;
if (typeof fn === 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
if (fn.length) {
if (strictDi) {
if (!isString(name) || !name) {
name = fn.name || anonFn(fn);
}
throw $injectorMinErr('strictdi',
'{0} is not using explicit annotation and cannot be invoked in strict mode', name);
}
fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
arg.replace(FN_ARG, function(all, underscore, name) {
$inject.push(name);
});
});
}
fn.$inject = $inject;
}
} else if (isArray(fn)) {
last = fn.length - 1;
assertArgFn(fn[last], 'fn');
$inject = fn.slice(0, last);
} else {
assertArgFn(fn, 'fn', true);
}
return $inject;
}
///////////////////////////////////////
/**
* @ngdoc service
* @name $injector
*
* @description
*
* `$injector` is used to retrieve object instances as defined by
* {@link auto.$provide provider}, instantiate types, invoke methods,
* and load modules.
*
* The following always holds true:
*
* ```js
* var $injector = angular.injector();
* expect($injector.get('$injector')).toBe($injector);
* expect($injector.invoke(function($injector) {
* return $injector;
* })).toBe($injector);
* ```
*
* # Injection Function Annotation
*
* JavaScript does not have annotations, and annotations are needed for dependency injection. The
* following are all valid ways of annotating function with injection arguments and are equivalent.
*
* ```js
* // inferred (only works if code not minified/obfuscated)
* $injector.invoke(function(serviceA){});
*
* // annotated
* function explicit(serviceA) {};
* explicit.$inject = ['serviceA'];
* $injector.invoke(explicit);
*
* // inline
* $injector.invoke(['serviceA', function(serviceA){}]);
* ```
*
* ## Inference
*
* In JavaScript calling `toString()` on a function returns the function definition. The definition
* can then be parsed and the function arguments can be extracted. This method of discovering
* annotations is disallowed when the injector is in strict mode.
* *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
* argument names.
*
* ## `$inject` Annotation
* By adding an `$inject` property onto a function the injection parameters can be specified.
*
* ## Inline
* As an array of injection names, where the last item in the array is the function to call.
*/
/**
* @ngdoc method
* @name $injector#get
*
* @description
* Return an instance of the service.
*
* @param {string} name The name of the instance to retrieve.
* @param {string} caller An optional string to provide the origin of the function call for error messages.
* @return {*} The instance.
*/
/**
* @ngdoc method
* @name $injector#invoke
*
* @description
* Invoke the method and supply the method arguments from the `$injector`.
*
* @param {!Function} fn The function to invoke. Function parameters are injected according to the
* {@link guide/di $inject Annotation} rules.
* @param {Object=} self The `this` for the invoked method.
* @param {Object=} locals Optional object. If preset then any argument names are read from this
* object first, before the `$injector` is consulted.
* @returns {*} the value returned by the invoked `fn` function.
*/
/**
* @ngdoc method
* @name $injector#has
*
* @description
* Allows the user to query if the particular service exists.
*
* @param {string} name Name of the service to query.
* @returns {boolean} `true` if injector has given service.
*/
/**
* @ngdoc method
* @name $injector#instantiate
* @description
* Create a new instance of JS type. The method takes a constructor function, invokes the new
* operator, and supplies all of the arguments to the constructor function as specified by the
* constructor annotation.
*
* @param {Function} Type Annotated constructor function.
* @param {Object=} locals Optional object. If preset then any argument names are read from this
* object first, before the `$injector` is consulted.
* @returns {Object} new instance of `Type`.
*/
/**
* @ngdoc method
* @name $injector#annotate
*
* @description
* Returns an array of service names which the function is requesting for injection. This API is
* used by the injector to determine which services need to be injected into the function when the
* function is invoked. There are three ways in which the function can be annotated with the needed
* dependencies.
*
* # Argument names
*
* The simplest form is to extract the dependencies from the arguments of the function. This is done
* by converting the function into a string using `toString()` method and extracting the argument
* names.
* ```js
* // Given
* function MyController($scope, $route) {
* // ...
* }
*
* // Then
* expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
* ```
*
* You can disallow this method by using strict injection mode.
*
* This method does not work with code minification / obfuscation. For this reason the following
* annotation strategies are supported.
*
* # The `$inject` property
*
* If a function has an `$inject` property and its value is an array of strings, then the strings
* represent names of services to be injected into the function.
* ```js
* // Given
* var MyController = function(obfuscatedScope, obfuscatedRoute) {
* // ...
* }
* // Define function dependencies
* MyController['$inject'] = ['$scope', '$route'];
*
* // Then
* expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
* ```
*
* # The array notation
*
* It is often desirable to inline Injected functions and that's when setting the `$inject` property
* is very inconvenient. In these situations using the array notation to specify the dependencies in
* a way that survives minification is a better choice:
*
* ```js
* // We wish to write this (not minification / obfuscation safe)
* injector.invoke(function($compile, $rootScope) {
* // ...
* });
*
* // We are forced to write break inlining
* var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
* // ...
* };
* tmpFn.$inject = ['$compile', '$rootScope'];
* injector.invoke(tmpFn);
*
* // To better support inline function the inline annotation is supported
* injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
* // ...
* }]);
*
* // Therefore
* expect(injector.annotate(
* ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
* ).toEqual(['$compile', '$rootScope']);
* ```
*
* @param {Function|Array.} fn Function for which dependent service names need to
* be retrieved as described above.
*
* @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
*
* @returns {Array.} The names of the services which the function requires.
*/
/**
* @ngdoc service
* @name $provide
*
* @description
*
* The {@link auto.$provide $provide} service has a number of methods for registering components
* with the {@link auto.$injector $injector}. Many of these functions are also exposed on
* {@link angular.Module}.
*
* An Angular **service** is a singleton object created by a **service factory**. These **service
* factories** are functions which, in turn, are created by a **service provider**.
* The **service providers** are constructor functions. When instantiated they must contain a
* property called `$get`, which holds the **service factory** function.
*
* When you request a service, the {@link auto.$injector $injector} is responsible for finding the
* correct **service provider**, instantiating it and then calling its `$get` **service factory**
* function to get the instance of the **service**.
*
* Often services have no configuration options and there is no need to add methods to the service
* provider. The provider will be no more than a constructor function with a `$get` property. For
* these cases the {@link auto.$provide $provide} service has additional helper methods to register
* services without specifying a provider.
*
* * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
* {@link auto.$injector $injector}
* * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
* providers and services.
* * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
* services, not providers.
* * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
* that will be wrapped in a **service provider** object, whose `$get` property will contain the
* given factory function.
* * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
* that will be wrapped in a **service provider** object, whose `$get` property will instantiate
* a new object using the given constructor function.
*
* See the individual methods for more information and examples.
*/
/**
* @ngdoc method
* @name $provide#provider
* @description
*
* Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
* are constructor functions, whose instances are responsible for "providing" a factory for a
* service.
*
* Service provider names start with the name of the service they provide followed by `Provider`.
* For example, the {@link ng.$log $log} service has a provider called
* {@link ng.$logProvider $logProvider}.
*
* Service provider objects can have additional methods which allow configuration of the provider
* and its service. Importantly, you can configure what kind of service is created by the `$get`
* method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
* method {@link ng.$logProvider#debugEnabled debugEnabled}
* which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
* console or not.
*
* @param {string} name The name of the instance. NOTE: the provider will be available under `name +
'Provider'` key.
* @param {(Object|function())} provider If the provider is:
*
* - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
* {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
* - `Constructor`: a new instance of the provider will be created using
* {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
*
* @returns {Object} registered provider instance
* @example
*
* The following example shows how to create a simple event tracking service and register it using
* {@link auto.$provide#provider $provide.provider()}.
*
* ```js
* // Define the eventTracker provider
* function EventTrackerProvider() {
* var trackingUrl = '/track';
*
* // A provider method for configuring where the tracked events should been saved
* this.setTrackingUrl = function(url) {
* trackingUrl = url;
* };
*
* // The service factory function
* this.$get = ['$http', function($http) {
* var trackedEvents = {};
* return {
* // Call this to track an event
* event: function(event) {
* var count = trackedEvents[event] || 0;
* count += 1;
* trackedEvents[event] = count;
* return count;
* },
* // Call this to save the tracked events to the trackingUrl
* save: function() {
* $http.post(trackingUrl, trackedEvents);
* }
* };
* }];
* }
*
* describe('eventTracker', function() {
* var postSpy;
*
* beforeEach(module(function($provide) {
* // Register the eventTracker provider
* $provide.provider('eventTracker', EventTrackerProvider);
* }));
*
* beforeEach(module(function(eventTrackerProvider) {
* // Configure eventTracker provider
* eventTrackerProvider.setTrackingUrl('/custom-track');
* }));
*
* it('tracks events', inject(function(eventTracker) {
* expect(eventTracker.event('login')).toEqual(1);
* expect(eventTracker.event('login')).toEqual(2);
* }));
*
* it('saves to the tracking url', inject(function(eventTracker, $http) {
* postSpy = spyOn($http, 'post');
* eventTracker.event('login');
* eventTracker.save();
* expect(postSpy).toHaveBeenCalled();
* expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
* expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
* expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
* }));
* });
* ```
*/
/**
* @ngdoc method
* @name $provide#factory
* @description
*
* Register a **service factory**, which will be called to return the service instance.
* This is short for registering a service where its provider consists of only a `$get` property,
* which is the given service factory function.
* You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
* configure your service in a provider.
*
* @param {string} name The name of the instance.
* @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand
* for `$provide.provider(name, {$get: $getFn})`.
* @returns {Object} registered provider instance
*
* @example
* Here is an example of registering a service
* ```js
* $provide.factory('ping', ['$http', function($http) {
* return function ping() {
* return $http.send('/ping');
* };
* }]);
* ```
* You would then inject and use this service like this:
* ```js
* someModule.controller('Ctrl', ['ping', function(ping) {
* ping();
* }]);
* ```
*/
/**
* @ngdoc method
* @name $provide#service
* @description
*
* Register a **service constructor**, which will be invoked with `new` to create the service
* instance.
* This is short for registering a service where its provider's `$get` property is the service
* constructor function that will be used to instantiate the service instance.
*
* You should use {@link auto.$provide#service $provide.service(class)} if you define your service
* as a type/class.
*
* @param {string} name The name of the instance.
* @param {Function} constructor A class (constructor function) that will be instantiated.
* @returns {Object} registered provider instance
*
* @example
* Here is an example of registering a service using
* {@link auto.$provide#service $provide.service(class)}.
* ```js
* var Ping = function($http) {
* this.$http = $http;
* };
*
* Ping.$inject = ['$http'];
*
* Ping.prototype.send = function() {
* return this.$http.get('/ping');
* };
* $provide.service('ping', Ping);
* ```
* You would then inject and use this service like this:
* ```js
* someModule.controller('Ctrl', ['ping', function(ping) {
* ping.send();
* }]);
* ```
*/
/**
* @ngdoc method
* @name $provide#value
* @description
*
* Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
* number, an array, an object or a function. This is short for registering a service where its
* provider's `$get` property is a factory function that takes no arguments and returns the **value
* service**.
*
* Value services are similar to constant services, except that they cannot be injected into a
* module configuration function (see {@link angular.Module#config}) but they can be overridden by
* an Angular
* {@link auto.$provide#decorator decorator}.
*
* @param {string} name The name of the instance.
* @param {*} value The value.
* @returns {Object} registered provider instance
*
* @example
* Here are some examples of creating value services.
* ```js
* $provide.value('ADMIN_USER', 'admin');
*
* $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
*
* $provide.value('halfOf', function(value) {
* return value / 2;
* });
* ```
*/
/**
* @ngdoc method
* @name $provide#constant
* @description
*
* Register a **constant service**, such as a string, a number, an array, an object or a function,
* with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
* injected into a module configuration function (see {@link angular.Module#config}) and it cannot
* be overridden by an Angular {@link auto.$provide#decorator decorator}.
*
* @param {string} name The name of the constant.
* @param {*} value The constant value.
* @returns {Object} registered instance
*
* @example
* Here a some examples of creating constants:
* ```js
* $provide.constant('SHARD_HEIGHT', 306);
*
* $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
*
* $provide.constant('double', function(value) {
* return value * 2;
* });
* ```
*/
/**
* @ngdoc method
* @name $provide#decorator
* @description
*
* Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
* intercepts the creation of a service, allowing it to override or modify the behaviour of the
* service. The object returned by the decorator may be the original service, or a new service
* object which replaces or wraps and delegates to the original service.
*
* @param {string} name The name of the service to decorate.
* @param {function()} decorator This function will be invoked when the service needs to be
* instantiated and should return the decorated service instance. The function is called using
* the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
* Local injection arguments:
*
* * `$delegate` - The original service instance, which can be monkey patched, configured,
* decorated or delegated to.
*
* @example
* Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
* calls to {@link ng.$log#error $log.warn()}.
* ```js
* $provide.decorator('$log', ['$delegate', function($delegate) {
* $delegate.warn = $delegate.error;
* return $delegate;
* }]);
* ```
*/
function createInjector(modulesToLoad, strictDi) {
strictDi = (strictDi === true);
var INSTANTIATING = {},
providerSuffix = 'Provider',
path = [],
loadedModules = new HashMap([], true),
providerCache = {
$provide: {
provider: supportObject(provider),
factory: supportObject(factory),
service: supportObject(service),
value: supportObject(value),
constant: supportObject(constant),
decorator: decorator
}
},
providerInjector = (providerCache.$injector =
createInternalInjector(providerCache, function(serviceName, caller) {
if (angular.isString(caller)) {
path.push(caller);
}
throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
})),
instanceCache = {},
instanceInjector = (instanceCache.$injector =
createInternalInjector(instanceCache, function(serviceName, caller) {
var provider = providerInjector.get(serviceName + providerSuffix, caller);
return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
}));
forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
return instanceInjector;
////////////////////////////////////
// $provider
////////////////////////////////////
function supportObject(delegate) {
return function(key, value) {
if (isObject(key)) {
forEach(key, reverseParams(delegate));
} else {
return delegate(key, value);
}
};
}
function provider(name, provider_) {
assertNotHasOwnProperty(name, 'service');
if (isFunction(provider_) || isArray(provider_)) {
provider_ = providerInjector.instantiate(provider_);
}
if (!provider_.$get) {
throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
}
return providerCache[name + providerSuffix] = provider_;
}
function enforceReturnValue(name, factory) {
return function enforcedReturnValue() {
var result = instanceInjector.invoke(factory, this);
if (isUndefined(result)) {
throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
}
return result;
};
}
function factory(name, factoryFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
});
}
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
}
function value(name, val) { return factory(name, valueFn(val), false); }
function constant(name, value) {
assertNotHasOwnProperty(name, 'constant');
providerCache[name] = value;
instanceCache[name] = value;
}
function decorator(serviceName, decorFn) {
var origProvider = providerInjector.get(serviceName + providerSuffix),
orig$get = origProvider.$get;
origProvider.$get = function() {
var origInstance = instanceInjector.invoke(orig$get, origProvider);
return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
};
}
////////////////////////////////////
// Module Loading
////////////////////////////////////
function loadModules(modulesToLoad) {
var runBlocks = [], moduleFn;
forEach(modulesToLoad, function(module) {
if (loadedModules.get(module)) return;
loadedModules.put(module, true);
function runInvokeQueue(queue) {
var i, ii;
for (i = 0, ii = queue.length; i < ii; i++) {
var invokeArgs = queue[i],
provider = providerInjector.get(invokeArgs[0]);
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
}
}
try {
if (isString(module)) {
moduleFn = angularModule(module);
runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
runInvokeQueue(moduleFn._invokeQueue);
runInvokeQueue(moduleFn._configBlocks);
} else if (isFunction(module)) {
runBlocks.push(providerInjector.invoke(module));
} else if (isArray(module)) {
runBlocks.push(providerInjector.invoke(module));
} else {
assertArgFn(module, 'module');
}
} catch (e) {
if (isArray(module)) {
module = module[module.length - 1];
}
if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
// Safari & FF's stack traces don't contain error.message content
// unlike those of Chrome and IE
// So if stack doesn't contain message, we create a new string that contains both.
// Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
/* jshint -W022 */
e = e.message + '\n' + e.stack;
}
throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
module, e.stack || e.message || e);
}
});
return runBlocks;
}
////////////////////////////////////
// internal Injector
////////////////////////////////////
function createInternalInjector(cache, factory) {
function getService(serviceName, caller) {
if (cache.hasOwnProperty(serviceName)) {
if (cache[serviceName] === INSTANTIATING) {
throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
serviceName + ' <- ' + path.join(' <- '));
}
return cache[serviceName];
} else {
try {
path.unshift(serviceName);
cache[serviceName] = INSTANTIATING;
return cache[serviceName] = factory(serviceName, caller);
} catch (err) {
if (cache[serviceName] === INSTANTIATING) {
delete cache[serviceName];
}
throw err;
} finally {
path.shift();
}
}
}
function invoke(fn, self, locals, serviceName) {
if (typeof locals === 'string') {
serviceName = locals;
locals = null;
}
var args = [],
$inject = createInjector.$$annotate(fn, strictDi, serviceName),
length, i,
key;
for (i = 0, length = $inject.length; i < length; i++) {
key = $inject[i];
if (typeof key !== 'string') {
throw $injectorMinErr('itkn',
'Incorrect injection token! Expected service name as string, got {0}', key);
}
args.push(
locals && locals.hasOwnProperty(key)
? locals[key]
: getService(key, serviceName)
);
}
if (isArray(fn)) {
fn = fn[length];
}
// http://jsperf.com/angularjs-invoke-apply-vs-switch
// #5388
return fn.apply(self, args);
}
function instantiate(Type, locals, serviceName) {
// Check if Type is annotated and use just the given function at n-1 as parameter
// e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
// Object creation: http://jsperf.com/create-constructor/2
var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
var returnedValue = invoke(Type, instance, locals, serviceName);
return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
}
return {
invoke: invoke,
instantiate: instantiate,
get: getService,
annotate: createInjector.$$annotate,
has: function(name) {
return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
}
};
}
}
createInjector.$$annotate = annotate;
/**
* @ngdoc provider
* @name $anchorScrollProvider
*
* @description
* Use `$anchorScrollProvider` to disable automatic scrolling whenever
* {@link ng.$location#hash $location.hash()} changes.
*/
function $AnchorScrollProvider() {
var autoScrollingEnabled = true;
/**
* @ngdoc method
* @name $anchorScrollProvider#disableAutoScrolling
*
* @description
* By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
* {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.
* Use this method to disable automatic scrolling.
*
* If automatic scrolling is disabled, one must explicitly call
* {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
* current hash.
*/
this.disableAutoScrolling = function() {
autoScrollingEnabled = false;
};
/**
* @ngdoc service
* @name $anchorScroll
* @kind function
* @requires $window
* @requires $location
* @requires $rootScope
*
* @description
* When called, it checks the current value of {@link ng.$location#hash $location.hash()} and
* scrolls to the related element, according to the rules specified in the
* [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
*
* It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
* match any anchor whenever it changes. This can be disabled by calling
* {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
*
* Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
* vertical scroll-offset (either fixed or dynamic).
*
* @property {(number|function|jqLite)} yOffset
* If set, specifies a vertical scroll-offset. This is often useful when there are fixed
* positioned elements at the top of the page, such as navbars, headers etc.
*
* `yOffset` can be specified in various ways:
* - **number**: A fixed number of pixels to be used as offset.
* - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
* a number representing the offset (in pixels).
* - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
* the top of the page to the element's bottom will be used as offset.
* **Note**: The element will be taken into account only as long as its `position` is set to
* `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
* their height and/or positioning according to the viewport's size.
*
*
*
* In order for `yOffset` to work properly, scrolling should take place on the document's root and
* not some child element.
*
angular.module('anchorScrollExample', [])
.controller('ScrollController', ['$scope', '$location', '$anchorScroll',
function ($scope, $location, $anchorScroll) {
$scope.gotoBottom = function() {
// set the location.hash to the id of
// the element you wish to scroll to.
$location.hash('bottom');
// call $anchorScroll()
$anchorScroll();
};
}]);
#scrollArea {
height: 280px;
overflow: auto;
}
#bottom {
display: block;
margin-top: 2000px;
}
*
*
* The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
* See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
*
* @example
angular.module('anchorScrollOffsetExample', [])
.run(['$anchorScroll', function($anchorScroll) {
$anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
}])
.controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
function ($anchorScroll, $location, $scope) {
$scope.gotoAnchor = function(x) {
var newHash = 'anchor' + x;
if ($location.hash() !== newHash) {
// set the $location.hash to `newHash` and
// $anchorScroll will automatically scroll to it
$location.hash('anchor' + x);
} else {
// call $anchorScroll() explicitly,
// since $location.hash hasn't changed
$anchorScroll();
}
};
}
]);
body {
padding-top: 50px;
}
.anchor {
border: 2px dashed DarkOrchid;
padding: 10px 10px 200px 10px;
}
.fixed-header {
background-color: rgba(0, 0, 0, 0.2);
height: 50px;
position: fixed;
top: 0; left: 0; right: 0;
}
.fixed-header > a {
display: inline-block;
margin: 5px 15px;
}
*/
this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
var document = $window.document;
// Helper function to get first anchor from a NodeList
// (using `Array#some()` instead of `angular#forEach()` since it's more performant
// and working in all supported browsers.)
function getFirstAnchor(list) {
var result = null;
Array.prototype.some.call(list, function(element) {
if (nodeName_(element) === 'a') {
result = element;
return true;
}
});
return result;
}
function getYOffset() {
var offset = scroll.yOffset;
if (isFunction(offset)) {
offset = offset();
} else if (isElement(offset)) {
var elem = offset[0];
var style = $window.getComputedStyle(elem);
if (style.position !== 'fixed') {
offset = 0;
} else {
offset = elem.getBoundingClientRect().bottom;
}
} else if (!isNumber(offset)) {
offset = 0;
}
return offset;
}
function scrollTo(elem) {
if (elem) {
elem.scrollIntoView();
var offset = getYOffset();
if (offset) {
// `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
// This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
// top of the viewport.
//
// IF the number of pixels from the top of `elem` to the end of the page's content is less
// than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
// way down the page.
//
// This is often the case for elements near the bottom of the page.
//
// In such cases we do not need to scroll the whole `offset` up, just the difference between
// the top of the element and the offset, which is enough to align the top of `elem` at the
// desired position.
var elemTop = elem.getBoundingClientRect().top;
$window.scrollBy(0, elemTop - offset);
}
} else {
$window.scrollTo(0, 0);
}
}
function scroll() {
var hash = $location.hash(), elm;
// empty hash, scroll to the top of the page
if (!hash) scrollTo(null);
// element with given id
else if ((elm = document.getElementById(hash))) scrollTo(elm);
// first anchor with given name :-D
else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
// no element and hash == 'top', scroll to the top of the page
else if (hash === 'top') scrollTo(null);
}
// does not scroll when user clicks on anchor link that is currently on
// (no url change, no $location.hash() change), browser native does scroll
if (autoScrollingEnabled) {
$rootScope.$watch(function autoScrollWatch() {return $location.hash();},
function autoScrollWatchAction(newVal, oldVal) {
// skip the initial scroll if $location.hash is empty
if (newVal === oldVal && newVal === '') return;
jqLiteDocumentLoaded(function() {
$rootScope.$evalAsync(scroll);
});
});
}
return scroll;
}];
}
var $animateMinErr = minErr('$animate');
/**
* @ngdoc provider
* @name $animateProvider
*
* @description
* Default implementation of $animate that doesn't perform any animations, instead just
* synchronously performs DOM
* updates and calls done() callbacks.
*
* In order to enable animations the ngAnimate module has to be loaded.
*
* To see the functional implementation check out src/ngAnimate/animate.js
*/
var $AnimateProvider = ['$provide', function($provide) {
this.$$selectors = {};
/**
* @ngdoc method
* @name $animateProvider#register
*
* @description
* Registers a new injectable animation factory function. The factory function produces the
* animation object which contains callback functions for each event that is expected to be
* animated.
*
* * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`
* must be called once the element animation is complete. If a function is returned then the
* animation service will use this function to cancel the animation whenever a cancel event is
* triggered.
*
*
* ```js
* return {
* eventFn : function(element, done) {
* //code to run the animation
* //once complete, then run done()
* return function cancellationFunction() {
* //code to cancel the animation
* }
* }
* }
* ```
*
* @param {string} name The name of the animation.
* @param {Function} factory The factory function that will be executed to return the animation
* object.
*/
this.register = function(name, factory) {
var key = name + '-animation';
if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',
"Expecting class selector starting with '.' got '{0}'.", name);
this.$$selectors[name.substr(1)] = key;
$provide.factory(key, factory);
};
/**
* @ngdoc method
* @name $animateProvider#classNameFilter
*
* @description
* Sets and/or returns the CSS class regular expression that is checked when performing
* an animation. Upon bootstrap the classNameFilter value is not set at all and will
* therefore enable $animate to attempt to perform an animation on any element.
* When setting the classNameFilter value, animations will only be performed on elements
* that successfully match the filter expression. This in turn can boost performance
* for low-powered devices as well as applications containing a lot of structural operations.
* @param {RegExp=} expression The className expression which will be checked against all animations
* @return {RegExp} The current CSS className expression value. If null then there is no expression value
*/
this.classNameFilter = function(expression) {
if (arguments.length === 1) {
this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
}
return this.$$classNameFilter;
};
this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {
var currentDefer;
function runAnimationPostDigest(fn) {
var cancelFn, defer = $$q.defer();
defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {
cancelFn && cancelFn();
};
$rootScope.$$postDigest(function ngAnimatePostDigest() {
cancelFn = fn(function ngAnimateNotifyComplete() {
defer.resolve();
});
});
return defer.promise;
}
function resolveElementClasses(element, classes) {
var toAdd = [], toRemove = [];
var hasClasses = createMap();
forEach((element.attr('class') || '').split(/\s+/), function(className) {
hasClasses[className] = true;
});
forEach(classes, function(status, className) {
var hasClass = hasClasses[className];
// If the most recent class manipulation (via $animate) was to remove the class, and the
// element currently has the class, the class is scheduled for removal. Otherwise, if
// the most recent class manipulation (via $animate) was to add the class, and the
// element does not currently have the class, the class is scheduled to be added.
if (status === false && hasClass) {
toRemove.push(className);
} else if (status === true && !hasClass) {
toAdd.push(className);
}
});
return (toAdd.length + toRemove.length) > 0 &&
[toAdd.length ? toAdd : null, toRemove.length ? toRemove : null];
}
function cachedClassManipulation(cache, classes, op) {
for (var i=0, ii = classes.length; i < ii; ++i) {
var className = classes[i];
cache[className] = op;
}
}
function asyncPromise() {
// only serve one instance of a promise in order to save CPU cycles
if (!currentDefer) {
currentDefer = $$q.defer();
$$asyncCallback(function() {
currentDefer.resolve();
currentDefer = null;
});
}
return currentDefer.promise;
}
function applyStyles(element, options) {
if (angular.isObject(options)) {
var styles = extend(options.from || {}, options.to || {});
element.css(styles);
}
}
/**
*
* @ngdoc service
* @name $animate
* @description The $animate service provides rudimentary DOM manipulation functions to
* insert, remove and move elements within the DOM, as well as adding and removing classes.
* This service is the core service used by the ngAnimate $animator service which provides
* high-level animation hooks for CSS and JavaScript.
*
* $animate is available in the AngularJS core, however, the ngAnimate module must be included
* to enable full out animation support. Otherwise, $animate will only perform simple DOM
* manipulation operations.
*
* To learn more about enabling animation support, click here to visit the {@link ngAnimate
* ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service
* page}.
*/
return {
animate: function(element, from, to) {
applyStyles(element, { from: from, to: to });
return asyncPromise();
},
/**
*
* @ngdoc method
* @name $animate#enter
* @kind function
* @description Inserts the element into the DOM either after the `after` element or
* as the first child within the `parent` element. When the function is called a promise
* is returned that will be resolved at a later time.
* @param {DOMElement} element the element which will be inserted into the DOM
* @param {DOMElement} parent the parent element which will append the element as
* a child (if the after element is not present)
* @param {DOMElement} after the sibling element which will append the element
* after itself
* @param {object=} options an optional collection of styles that will be applied to the element.
* @return {Promise} the animation callback promise
*/
enter: function(element, parent, after, options) {
applyStyles(element, options);
after ? after.after(element)
: parent.prepend(element);
return asyncPromise();
},
/**
*
* @ngdoc method
* @name $animate#leave
* @kind function
* @description Removes the element from the DOM. When the function is called a promise
* is returned that will be resolved at a later time.
* @param {DOMElement} element the element which will be removed from the DOM
* @param {object=} options an optional collection of options that will be applied to the element.
* @return {Promise} the animation callback promise
*/
leave: function(element, options) {
applyStyles(element, options);
element.remove();
return asyncPromise();
},
/**
*
* @ngdoc method
* @name $animate#move
* @kind function
* @description Moves the position of the provided element within the DOM to be placed
* either after the `after` element or inside of the `parent` element. When the function
* is called a promise is returned that will be resolved at a later time.
*
* @param {DOMElement} element the element which will be moved around within the
* DOM
* @param {DOMElement} parent the parent element where the element will be
* inserted into (if the after element is not present)
* @param {DOMElement} after the sibling element where the element will be
* positioned next to
* @param {object=} options an optional collection of options that will be applied to the element.
* @return {Promise} the animation callback promise
*/
move: function(element, parent, after, options) {
// Do not remove element before insert. Removing will cause data associated with the
// element to be dropped. Insert will implicitly do the remove.
return this.enter(element, parent, after, options);
},
/**
*
* @ngdoc method
* @name $animate#addClass
* @kind function
* @description Adds the provided className CSS class value to the provided element.
* When the function is called a promise is returned that will be resolved at a later time.
* @param {DOMElement} element the element which will have the className value
* added to it
* @param {string} className the CSS class which will be added to the element
* @param {object=} options an optional collection of options that will be applied to the element.
* @return {Promise} the animation callback promise
*/
addClass: function(element, className, options) {
return this.setClass(element, className, [], options);
},
$$addClassImmediately: function(element, className, options) {
element = jqLite(element);
className = !isString(className)
? (isArray(className) ? className.join(' ') : '')
: className;
forEach(element, function(element) {
jqLiteAddClass(element, className);
});
applyStyles(element, options);
return asyncPromise();
},
/**
*
* @ngdoc method
* @name $animate#removeClass
* @kind function
* @description Removes the provided className CSS class value from the provided element.
* When the function is called a promise is returned that will be resolved at a later time.
* @param {DOMElement} element the element which will have the className value
* removed from it
* @param {string} className the CSS class which will be removed from the element
* @param {object=} options an optional collection of options that will be applied to the element.
* @return {Promise} the animation callback promise
*/
removeClass: function(element, className, options) {
return this.setClass(element, [], className, options);
},
$$removeClassImmediately: function(element, className, options) {
element = jqLite(element);
className = !isString(className)
? (isArray(className) ? className.join(' ') : '')
: className;
forEach(element, function(element) {
jqLiteRemoveClass(element, className);
});
applyStyles(element, options);
return asyncPromise();
},
/**
*
* @ngdoc method
* @name $animate#setClass
* @kind function
* @description Adds and/or removes the given CSS classes to and from the element.
* When the function is called a promise is returned that will be resolved at a later time.
* @param {DOMElement} element the element which will have its CSS classes changed
* removed from it
* @param {string} add the CSS classes which will be added to the element
* @param {string} remove the CSS class which will be removed from the element
* @param {object=} options an optional collection of options that will be applied to the element.
* @return {Promise} the animation callback promise
*/
setClass: function(element, add, remove, options) {
var self = this;
var STORAGE_KEY = '$$animateClasses';
var createdCache = false;
element = jqLite(element);
var cache = element.data(STORAGE_KEY);
if (!cache) {
cache = {
classes: {},
options: options
};
createdCache = true;
} else if (options && cache.options) {
cache.options = angular.extend(cache.options || {}, options);
}
var classes = cache.classes;
add = isArray(add) ? add : add.split(' ');
remove = isArray(remove) ? remove : remove.split(' ');
cachedClassManipulation(classes, add, true);
cachedClassManipulation(classes, remove, false);
if (createdCache) {
cache.promise = runAnimationPostDigest(function(done) {
var cache = element.data(STORAGE_KEY);
element.removeData(STORAGE_KEY);
// in the event that the element is removed before postDigest
// is run then the cache will be undefined and there will be
// no need anymore to add or remove and of the element classes
if (cache) {
var classes = resolveElementClasses(element, cache.classes);
if (classes) {
self.$$setClassImmediately(element, classes[0], classes[1], cache.options);
}
}
done();
});
element.data(STORAGE_KEY, cache);
}
return cache.promise;
},
$$setClassImmediately: function(element, add, remove, options) {
add && this.$$addClassImmediately(element, add);
remove && this.$$removeClassImmediately(element, remove);
applyStyles(element, options);
return asyncPromise();
},
enabled: noop,
cancel: noop
};
}];
}];
function $$AsyncCallbackProvider() {
this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
return $$rAF.supported
? function(fn) { return $$rAF(fn); }
: function(fn) {
return $timeout(fn, 0, false);
};
}];
}
/* global stripHash: true */
/**
* ! This is a private undocumented service !
*
* @name $browser
* @requires $log
* @description
* This object has two goals:
*
* - hide all the global state in the browser caused by the window object
* - abstract away all the browser specific features and inconsistencies
*
* For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
* service, which can be used for convenient testing of the application without the interaction with
* the real browser apis.
*/
/**
* @param {object} window The global window object.
* @param {object} document jQuery wrapped document.
* @param {object} $log window.console or an object with the same interface.
* @param {object} $sniffer $sniffer service
*/
function Browser(window, document, $log, $sniffer) {
var self = this,
rawDocument = document[0],
location = window.location,
history = window.history,
setTimeout = window.setTimeout,
clearTimeout = window.clearTimeout,
pendingDeferIds = {};
self.isMock = false;
var outstandingRequestCount = 0;
var outstandingRequestCallbacks = [];
// TODO(vojta): remove this temporary api
self.$$completeOutstandingRequest = completeOutstandingRequest;
self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
/**
* Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
* counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
*/
function completeOutstandingRequest(fn) {
try {
fn.apply(null, sliceArgs(arguments, 1));
} finally {
outstandingRequestCount--;
if (outstandingRequestCount === 0) {
while (outstandingRequestCallbacks.length) {
try {
outstandingRequestCallbacks.pop()();
} catch (e) {
$log.error(e);
}
}
}
}
}
function getHash(url) {
var index = url.indexOf('#');
return index === -1 ? '' : url.substr(index + 1);
}
/**
* @private
* Note: this method is used only by scenario runner
* TODO(vojta): prefix this method with $$ ?
* @param {function()} callback Function that will be called when no outstanding request
*/
self.notifyWhenNoOutstandingRequests = function(callback) {
// force browser to execute all pollFns - this is needed so that cookies and other pollers fire
// at some deterministic time in respect to the test runner's actions. Leaving things up to the
// regular poller would result in flaky tests.
forEach(pollFns, function(pollFn) { pollFn(); });
if (outstandingRequestCount === 0) {
callback();
} else {
outstandingRequestCallbacks.push(callback);
}
};
//////////////////////////////////////////////////////////////
// Poll Watcher API
//////////////////////////////////////////////////////////////
var pollFns = [],
pollTimeout;
/**
* @name $browser#addPollFn
*
* @param {function()} fn Poll function to add
*
* @description
* Adds a function to the list of functions that poller periodically executes,
* and starts polling if not started yet.
*
* @returns {function()} the added function
*/
self.addPollFn = function(fn) {
if (isUndefined(pollTimeout)) startPoller(100, setTimeout);
pollFns.push(fn);
return fn;
};
/**
* @param {number} interval How often should browser call poll functions (ms)
* @param {function()} setTimeout Reference to a real or fake `setTimeout` function.
*
* @description
* Configures the poller to run in the specified intervals, using the specified
* setTimeout fn and kicks it off.
*/
function startPoller(interval, setTimeout) {
(function check() {
forEach(pollFns, function(pollFn) { pollFn(); });
pollTimeout = setTimeout(check, interval);
})();
}
//////////////////////////////////////////////////////////////
// URL API
//////////////////////////////////////////////////////////////
var cachedState, lastHistoryState,
lastBrowserUrl = location.href,
baseElement = document.find('base'),
reloadLocation = null;
cacheState();
lastHistoryState = cachedState;
/**
* @name $browser#url
*
* @description
* GETTER:
* Without any argument, this method just returns current value of location.href.
*
* SETTER:
* With at least one argument, this method sets url to new value.
* If html5 history api supported, pushState/replaceState is used, otherwise
* location.href/location.replace is used.
* Returns its own instance to allow chaining
*
* NOTE: this api is intended for use only by the $location service. Please use the
* {@link ng.$location $location service} to change url.
*
* @param {string} url New url (when used as setter)
* @param {boolean=} replace Should new url replace current history record?
* @param {object=} state object to use with pushState/replaceState
*/
self.url = function(url, replace, state) {
// In modern browsers `history.state` is `null` by default; treating it separately
// from `undefined` would cause `$browser.url('/foo')` to change `history.state`
// to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
if (isUndefined(state)) {
state = null;
}
// Android Browser BFCache causes location, history reference to become stale.
if (location !== window.location) location = window.location;
if (history !== window.history) history = window.history;
// setter
if (url) {
var sameState = lastHistoryState === state;
// Don't change anything if previous and current URLs and states match. This also prevents
// IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
// See https://github.com/angular/angular.js/commit/ffb2701
if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
return self;
}
var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
lastBrowserUrl = url;
lastHistoryState = state;
// Don't use history API if only the hash changed
// due to a bug in IE10/IE11 which leads
// to not firing a `hashchange` nor `popstate` event
// in some cases (see #9143).
if ($sniffer.history && (!sameBase || !sameState)) {
history[replace ? 'replaceState' : 'pushState'](state, '', url);
cacheState();
// Do the assignment again so that those two variables are referentially identical.
lastHistoryState = cachedState;
} else {
if (!sameBase) {
reloadLocation = url;
}
if (replace) {
location.replace(url);
} else if (!sameBase) {
location.href = url;
} else {
location.hash = getHash(url);
}
}
return self;
// getter
} else {
// - reloadLocation is needed as browsers don't allow to read out
// the new location.href if a reload happened.
// - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
return reloadLocation || location.href.replace(/%27/g,"'");
}
};
/**
* @name $browser#state
*
* @description
* This method is a getter.
*
* Return history.state or null if history.state is undefined.
*
* @returns {object} state
*/
self.state = function() {
return cachedState;
};
var urlChangeListeners = [],
urlChangeInit = false;
function cacheStateAndFireUrlChange() {
cacheState();
fireUrlChange();
}
function getCurrentState() {
try {
return history.state;
} catch (e) {
// MSIE can reportedly throw when there is no state (UNCONFIRMED).
}
}
// This variable should be used *only* inside the cacheState function.
var lastCachedState = null;
function cacheState() {
// This should be the only place in $browser where `history.state` is read.
cachedState = getCurrentState();
cachedState = isUndefined(cachedState) ? null : cachedState;
// Prevent callbacks fo fire twice if both hashchange & popstate were fired.
if (equals(cachedState, lastCachedState)) {
cachedState = lastCachedState;
}
lastCachedState = cachedState;
}
function fireUrlChange() {
if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
return;
}
lastBrowserUrl = self.url();
lastHistoryState = cachedState;
forEach(urlChangeListeners, function(listener) {
listener(self.url(), cachedState);
});
}
/**
* @name $browser#onUrlChange
*
* @description
* Register callback function that will be called, when url changes.
*
* It's only called when the url is changed from outside of angular:
* - user types different url into address bar
* - user clicks on history (forward/back) button
* - user clicks on a link
*
* It's not called when url is changed by $browser.url() method
*
* The listener gets called with new url as parameter.
*
* NOTE: this api is intended for use only by the $location service. Please use the
* {@link ng.$location $location service} to monitor url changes in angular apps.
*
* @param {function(string)} listener Listener function to be called when url changes.
* @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
*/
self.onUrlChange = function(callback) {
// TODO(vojta): refactor to use node's syntax for events
if (!urlChangeInit) {
// We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
// don't fire popstate when user change the address bar and don't fire hashchange when url
// changed by push/replaceState
// html5 history api - popstate event
if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
// hashchange event
jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
urlChangeInit = true;
}
urlChangeListeners.push(callback);
return callback;
};
/**
* Checks whether the url has changed outside of Angular.
* Needs to be exported to be able to check for changes that have been done in sync,
* as hashchange/popstate events fire in async.
*/
self.$$checkUrlChange = fireUrlChange;
//////////////////////////////////////////////////////////////
// Misc API
//////////////////////////////////////////////////////////////
/**
* @name $browser#baseHref
*
* @description
* Returns current
* (always relative - without domain)
*
* @returns {string} The current base href
*/
self.baseHref = function() {
var href = baseElement.attr('href');
return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
};
//////////////////////////////////////////////////////////////
// Cookies API
//////////////////////////////////////////////////////////////
var lastCookies = {};
var lastCookieString = '';
var cookiePath = self.baseHref();
function safeDecodeURIComponent(str) {
try {
return decodeURIComponent(str);
} catch (e) {
return str;
}
}
/**
* @name $browser#cookies
*
* @param {string=} name Cookie name
* @param {string=} value Cookie value
*
* @description
* The cookies method provides a 'private' low level access to browser cookies.
* It is not meant to be used directly, use the $cookie service instead.
*
* The return values vary depending on the arguments that the method was called with as follows:
*
* - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
* it
* - cookies(name, value) -> set name to value, if value is undefined delete the cookie
* - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
* way)
*
* @returns {Object} Hash of all cookies (if called without any parameter)
*/
self.cookies = function(name, value) {
var cookieLength, cookieArray, cookie, i, index;
if (name) {
if (value === undefined) {
rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath +
";expires=Thu, 01 Jan 1970 00:00:00 GMT";
} else {
if (isString(value)) {
cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
';path=' + cookiePath).length + 1;
// per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
// - 300 cookies
// - 20 cookies per unique domain
// - 4096 bytes per cookie
if (cookieLength > 4096) {
$log.warn("Cookie '" + name +
"' possibly not set or overflowed because it was too large (" +
cookieLength + " > 4096 bytes)!");
}
}
}
} else {
if (rawDocument.cookie !== lastCookieString) {
lastCookieString = rawDocument.cookie;
cookieArray = lastCookieString.split("; ");
lastCookies = {};
for (i = 0; i < cookieArray.length; i++) {
cookie = cookieArray[i];
index = cookie.indexOf('=');
if (index > 0) { //ignore nameless cookies
name = safeDecodeURIComponent(cookie.substring(0, index));
// the first value that is seen for a cookie is the most
// specific one. values for the same cookie name that
// follow are for less specific paths.
if (lastCookies[name] === undefined) {
lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
}
}
}
}
return lastCookies;
}
};
/**
* @name $browser#defer
* @param {function()} fn A function, who's execution should be deferred.
* @param {number=} [delay=0] of milliseconds to defer the function execution.
* @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
*
* @description
* Executes a fn asynchronously via `setTimeout(fn, delay)`.
*
* Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
* `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
* via `$browser.defer.flush()`.
*
*/
self.defer = function(fn, delay) {
var timeoutId;
outstandingRequestCount++;
timeoutId = setTimeout(function() {
delete pendingDeferIds[timeoutId];
completeOutstandingRequest(fn);
}, delay || 0);
pendingDeferIds[timeoutId] = true;
return timeoutId;
};
/**
* @name $browser#defer.cancel
*
* @description
* Cancels a deferred task identified with `deferId`.
*
* @param {*} deferId Token returned by the `$browser.defer` function.
* @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
* canceled.
*/
self.defer.cancel = function(deferId) {
if (pendingDeferIds[deferId]) {
delete pendingDeferIds[deferId];
clearTimeout(deferId);
completeOutstandingRequest(noop);
return true;
}
return false;
};
}
function $BrowserProvider() {
this.$get = ['$window', '$log', '$sniffer', '$document',
function($window, $log, $sniffer, $document) {
return new Browser($window, $document, $log, $sniffer);
}];
}
/**
* @ngdoc service
* @name $cacheFactory
*
* @description
* Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
* them.
*
* ```js
*
* var cache = $cacheFactory('cacheId');
* expect($cacheFactory.get('cacheId')).toBe(cache);
* expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
*
* cache.put("key", "value");
* cache.put("another key", "another value");
*
* // We've specified no options on creation
* expect(cache.info()).toEqual({id: 'cacheId', size: 2});
*
* ```
*
*
* @param {string} cacheId Name or id of the newly created cache.
* @param {object=} options Options object that specifies the cache behavior. Properties:
*
* - `{number=}` `capacity` — turns the cache into LRU cache.
*
* @returns {object} Newly created cache object with the following set of methods:
*
* - `{object}` `info()` — Returns id, size, and options of cache.
* - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
* it.
* - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
* - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
* - `{void}` `removeAll()` — Removes all cached values.
* - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
*
* @example
Cached Values
:
Cache Info
:
angular.module('cacheExampleApp', []).
controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
$scope.keys = [];
$scope.cache = $cacheFactory('cacheId');
$scope.put = function(key, value) {
if ($scope.cache.get(key) === undefined) {
$scope.keys.push(key);
}
$scope.cache.put(key, value === undefined ? null : value);
};
}]);
p {
margin: 10px 0 3px;
}
*/
function $CacheFactoryProvider() {
this.$get = function() {
var caches = {};
function cacheFactory(cacheId, options) {
if (cacheId in caches) {
throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
}
var size = 0,
stats = extend({}, options, {id: cacheId}),
data = {},
capacity = (options && options.capacity) || Number.MAX_VALUE,
lruHash = {},
freshEnd = null,
staleEnd = null;
/**
* @ngdoc type
* @name $cacheFactory.Cache
*
* @description
* A cache object used to store and retrieve data, primarily used by
* {@link $http $http} and the {@link ng.directive:script script} directive to cache
* templates and other data.
*
* ```js
* angular.module('superCache')
* .factory('superCache', ['$cacheFactory', function($cacheFactory) {
* return $cacheFactory('super-cache');
* }]);
* ```
*
* Example test:
*
* ```js
* it('should behave like a cache', inject(function(superCache) {
* superCache.put('key', 'value');
* superCache.put('another key', 'another value');
*
* expect(superCache.info()).toEqual({
* id: 'super-cache',
* size: 2
* });
*
* superCache.remove('another key');
* expect(superCache.get('another key')).toBeUndefined();
*
* superCache.removeAll();
* expect(superCache.info()).toEqual({
* id: 'super-cache',
* size: 0
* });
* }));
* ```
*/
return caches[cacheId] = {
/**
* @ngdoc method
* @name $cacheFactory.Cache#put
* @kind function
*
* @description
* Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
* retrieved later, and incrementing the size of the cache if the key was not already
* present in the cache. If behaving like an LRU cache, it will also remove stale
* entries from the set.
*
* It will not insert undefined values into the cache.
*
* @param {string} key the key under which the cached data is stored.
* @param {*} value the value to store alongside the key. If it is undefined, the key
* will not be stored.
* @returns {*} the value stored.
*/
put: function(key, value) {
if (capacity < Number.MAX_VALUE) {
var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
refresh(lruEntry);
}
if (isUndefined(value)) return;
if (!(key in data)) size++;
data[key] = value;
if (size > capacity) {
this.remove(staleEnd.key);
}
return value;
},
/**
* @ngdoc method
* @name $cacheFactory.Cache#get
* @kind function
*
* @description
* Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
*
* @param {string} key the key of the data to be retrieved
* @returns {*} the value stored.
*/
get: function(key) {
if (capacity < Number.MAX_VALUE) {
var lruEntry = lruHash[key];
if (!lruEntry) return;
refresh(lruEntry);
}
return data[key];
},
/**
* @ngdoc method
* @name $cacheFactory.Cache#remove
* @kind function
*
* @description
* Removes an entry from the {@link $cacheFactory.Cache Cache} object.
*
* @param {string} key the key of the entry to be removed
*/
remove: function(key) {
if (capacity < Number.MAX_VALUE) {
var lruEntry = lruHash[key];
if (!lruEntry) return;
if (lruEntry == freshEnd) freshEnd = lruEntry.p;
if (lruEntry == staleEnd) staleEnd = lruEntry.n;
link(lruEntry.n,lruEntry.p);
delete lruHash[key];
}
delete data[key];
size--;
},
/**
* @ngdoc method
* @name $cacheFactory.Cache#removeAll
* @kind function
*
* @description
* Clears the cache object of any entries.
*/
removeAll: function() {
data = {};
size = 0;
lruHash = {};
freshEnd = staleEnd = null;
},
/**
* @ngdoc method
* @name $cacheFactory.Cache#destroy
* @kind function
*
* @description
* Destroys the {@link $cacheFactory.Cache Cache} object entirely,
* removing it from the {@link $cacheFactory $cacheFactory} set.
*/
destroy: function() {
data = null;
stats = null;
lruHash = null;
delete caches[cacheId];
},
/**
* @ngdoc method
* @name $cacheFactory.Cache#info
* @kind function
*
* @description
* Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
*
* @returns {object} an object with the following properties:
*
*
**id**: the id of the cache instance
*
**size**: the number of entries kept in the cache instance
*
**...**: any additional properties from the options object when creating the
* cache.
*
*/
info: function() {
return extend({}, stats, {size: size});
}
};
/**
* makes the `entry` the freshEnd of the LRU linked list
*/
function refresh(entry) {
if (entry != freshEnd) {
if (!staleEnd) {
staleEnd = entry;
} else if (staleEnd == entry) {
staleEnd = entry.n;
}
link(entry.n, entry.p);
link(entry, freshEnd);
freshEnd = entry;
freshEnd.n = null;
}
}
/**
* bidirectionally links two entries of the LRU linked list
*/
function link(nextEntry, prevEntry) {
if (nextEntry != prevEntry) {
if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
}
}
}
/**
* @ngdoc method
* @name $cacheFactory#info
*
* @description
* Get information about all the caches that have been created
*
* @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
*/
cacheFactory.info = function() {
var info = {};
forEach(caches, function(cache, cacheId) {
info[cacheId] = cache.info();
});
return info;
};
/**
* @ngdoc method
* @name $cacheFactory#get
*
* @description
* Get access to a cache object by the `cacheId` used when it was created.
*
* @param {string} cacheId Name or id of a cache to access.
* @returns {object} Cache object identified by the cacheId or undefined if no such cache.
*/
cacheFactory.get = function(cacheId) {
return caches[cacheId];
};
return cacheFactory;
};
}
/**
* @ngdoc service
* @name $templateCache
*
* @description
* The first time a template is used, it is loaded in the template cache for quick retrieval. You
* can load templates directly into the cache in a `script` tag, or by consuming the
* `$templateCache` service directly.
*
* Adding via the `script` tag:
*
* ```html
*
* ```
*
* **Note:** the `script` tag containing the template does not need to be included in the `head` of
* the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
* element with ng-app attribute), otherwise the template will be ignored.
*
* Adding via the `$templateCache` service:
*
* ```js
* var myApp = angular.module('myApp', []);
* myApp.run(function($templateCache) {
* $templateCache.put('templateId.html', 'This is the content of the template');
* });
* ```
*
* To retrieve the template later, simply use it in your HTML:
* ```html
*
* ```
*
* or get it via Javascript:
* ```js
* $templateCache.get('templateId.html')
* ```
*
* See {@link ng.$cacheFactory $cacheFactory}.
*
*/
function $TemplateCacheProvider() {
this.$get = ['$cacheFactory', function($cacheFactory) {
return $cacheFactory('templates');
}];
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Any commits to this file should be reviewed with security in mind. *
* Changes to this file can potentially create security vulnerabilities. *
* An approval from 2 Core members with history of modifying *
* this file is required. *
* *
* Does the change somehow allow for arbitrary javascript to be executed? *
* Or allows for someone to change the prototype of built-in objects? *
* Or gives undesired access to variables likes document or window? *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
*
* DOM-related variables:
*
* - "node" - DOM Node
* - "element" - DOM Element or Node
* - "$node" or "$element" - jqLite-wrapped node or element
*
*
* Compiler related stuff:
*
* - "linkFn" - linking fn of a single directive
* - "nodeLinkFn" - function that aggregates all linking fns for a particular node
* - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
* - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
*/
/**
* @ngdoc service
* @name $compile
* @kind function
*
* @description
* Compiles an HTML string or DOM into a template and produces a template function, which
* can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
*
* The compilation is a process of walking the DOM tree and matching DOM elements to
* {@link ng.$compileProvider#directive directives}.
*
*
* **Note:** This document is an in-depth reference of all directive options.
* For a gentle introduction to directives with examples of common use cases,
* see the {@link guide/directive directive guide}.
*
*
* ## Comprehensive Directive API
*
* There are many different options for a directive.
*
* The difference resides in the return value of the factory function.
* You can either return a "Directive Definition Object" (see below) that defines the directive properties,
* or just the `postLink` function (all other properties will have the default values).
*
*
* **Best Practice:** It's recommended to use the "directive definition object" form.
*
*
* Here's an example directive declared with a Directive Definition Object:
*
* ```js
* var myModule = angular.module(...);
*
* myModule.directive('directiveName', function factory(injectables) {
* var directiveDefinitionObject = {
* priority: 0,
* template: '', // or // function(tElement, tAttrs) { ... },
* // or
* // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
* transclude: false,
* restrict: 'A',
* templateNamespace: 'html',
* scope: false,
* controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
* controllerAs: 'stringAlias',
* require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
* compile: function compile(tElement, tAttrs, transclude) {
* return {
* pre: function preLink(scope, iElement, iAttrs, controller) { ... },
* post: function postLink(scope, iElement, iAttrs, controller) { ... }
* }
* // or
* // return function postLink( ... ) { ... }
* },
* // or
* // link: {
* // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
* // post: function postLink(scope, iElement, iAttrs, controller) { ... }
* // }
* // or
* // link: function postLink( ... ) { ... }
* };
* return directiveDefinitionObject;
* });
* ```
*
*
* **Note:** Any unspecified options will use the default value. You can see the default values below.
*
*
* Therefore the above can be simplified as:
*
* ```js
* var myModule = angular.module(...);
*
* myModule.directive('directiveName', function factory(injectables) {
* var directiveDefinitionObject = {
* link: function postLink(scope, iElement, iAttrs) { ... }
* };
* return directiveDefinitionObject;
* // or
* // return function postLink(scope, iElement, iAttrs) { ... }
* });
* ```
*
*
*
* ### Directive Definition Object
*
* The directive definition object provides instructions to the {@link ng.$compile
* compiler}. The attributes are:
*
* #### `multiElement`
* When this property is set to true, the HTML compiler will collect DOM nodes between
* nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
* together as the directive elements. It is recommended that this feature be used on directives
* which are not strictly behavioural (such as {@link ngClick}), and which
* do not manipulate or replace child nodes (such as {@link ngInclude}).
*
* #### `priority`
* When there are multiple directives defined on a single DOM element, sometimes it
* is necessary to specify the order in which the directives are applied. The `priority` is used
* to sort the directives before their `compile` functions get called. Priority is defined as a
* number. Directives with greater numerical `priority` are compiled first. Pre-link functions
* are also run in priority order, but post-link functions are run in reverse order. The order
* of directives with the same priority is undefined. The default priority is `0`.
*
* #### `terminal`
* If set to true then the current `priority` will be the last set of directives
* which will execute (any directives at the current priority will still execute
* as the order of execution on same `priority` is undefined). Note that expressions
* and other directives used in the directive's template will also be excluded from execution.
*
* #### `scope`
* **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
* same element request a new scope, only one new scope is created. The new scope rule does not
* apply for the root of the template since the root of the template always gets a new scope.
*
* **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
* normal scope in that it does not prototypically inherit from the parent scope. This is useful
* when creating reusable components, which should not accidentally read or modify data in the
* parent scope.
*
* The 'isolate' scope takes an object hash which defines a set of local scope properties
* derived from the parent scope. These local properties are useful for aliasing values for
* templates. Locals definition is a hash of local scope property to its source:
*
* * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
* always a string since DOM attributes are strings. If no `attr` name is specified then the
* attribute name is assumed to be the same as the local name.
* Given `` and widget definition
* of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
* the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
* `localName` property on the widget scope. The `name` is read from the parent scope (not
* component scope).
*
* * `=` or `=attr` - set up bi-directional binding between a local scope property and the
* parent scope property of name defined via the value of the `attr` attribute. If no `attr`
* name is specified then the attribute name is assumed to be the same as the local name.
* Given `` and widget definition of
* `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
* value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
* in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
* scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
* can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
* you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
* `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
*
* * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
* If no `attr` name is specified then the attribute name is assumed to be the same as the
* local name. Given `` and widget definition of
* `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
* a function wrapper for the `count = count + value` expression. Often it's desirable to
* pass data from the isolated scope via an expression to the parent scope, this can be
* done by passing a map of local variable names and values into the expression wrapper fn.
* For example, if the expression is `increment(amount)` then we can specify the amount value
* by calling the `localFn` as `localFn({amount: 22})`.
*
*
* #### `bindToController`
* When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
* allow a component to have its properties bound to the controller, rather than to scope. When the controller
* is instantiated, the initial values of the isolate scope bindings are already available.
*
* #### `controller`
* Controller constructor function. The controller is instantiated before the
* pre-linking phase and it is shared with other directives (see
* `require` attribute). This allows the directives to communicate with each other and augment
* each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
*
* * `$scope` - Current scope associated with the element
* * `$element` - Current element
* * `$attrs` - Current attributes object for the element
* * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
* `function([scope], cloneLinkingFn, futureParentElement)`.
* * `scope`: optional argument to override the scope.
* * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
* * `futureParentElement`:
* * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
* * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
* * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
* and when the `cloneLinkinFn` is passed,
* as those elements need to created and cloned in a special way when they are defined outside their
* usual containers (e.g. like `
<% var trinkets = championData.trinkets; %>
<% for(var i = 0; i
<%= trinkets[i].winPercent %>%
Win Rate
<%= trinkets[i].games %>
Games
<% } %>
================================================
FILE: views/champion.ejs
================================================
<% include header.ejs %>
<% include champion/champion_image_roles.ejs %>
<% include champion/champion_statistics.ejs %>
<% include champion/winrate_playrate_damage_advert_trinket.ejs %>
<% include champion/gamelength_experience_summoners.ejs %>
<% if (championData.skills.highestWinPercent.winPercent) { %>
<% include champion/skill_order.ejs %>
<% } %>
<% if (championData.runes.highestWinPercent) { %>
<% include champion/runes.ejs %>
<% } %>
<% if (championData.items.highestWinPercent) { %>
<% include champion/core_build.ejs %>
<% } %>
<% include champion/first_items.ejs %>
<% if (championData.masteries.mostGames.masteries[0]) { %>
<% include champion/masteries.ejs %>
<% } %>
<% include champion/counters_matchups.ejs %>
<% include champion/advertisement.ejs %>
<% include champion/reddit.ejs %>
<% include scripts.ejs %>
<% include footer.ejs %>
================================================
FILE: views/error.ejs
================================================
<% include header.ejs %>
Teemo, we have a problem...
<%= message %>
Think something on the site is broken? Please send me a message... (on reddit) /u/joeldo
<% include scripts.ejs %>
<% include footer.ejs %>
================================================
FILE: views/faq.ejs
================================================
<% include header.ejs %>
Frequently Asked Questions
What stats do you use?
Champion.gg uses game data from Platinum to Challenger from NA, EUW, EUNE and Korea for the current patch, available through Riot's API
What advantage does Champion.gg have over any other statistic sites?
Most other LoL statistic websites are lacking in three areas. First, data doesn't necessarily reflect a champion's true performance if their play in certain roles isn't taken into account - this is something Champion.gg is very well equipped for; any champion can be selected in their played role to get tailored statistics.
Second, many statistical websites present their data over the past month/week/day. This gives an inaccurate view of the champion on the current patch. This is because the sample size can cover more than the current patch or be too small (in the case of a day). Champion.gg bases all data off the current patch apart from the player experience section - which uses the past 2 patches.
Third, many statistic websites don't show the win rates when a champion is (potentially) played at their best - Champion.gg provides win rates for the best builds, masteries, runes, summoners and skill order.
How is the Overall Placement/Performance Ranking determined?
Thanks for asking! The overall performance ranking takes more than win rate into account! Depending on the particular role, different attributes (such as Win Rate, Play Rate, Ban Rate, Kills, Deaths, CS, Damage Dealt/Taken etc.) are weighted at different levels to provide an overview of how the champion performs as a whole. For example, an ADC champion has a higher weighting for 'Damage Dealt' than that of a support champion.
How is the Counters Statistical Rating determined?
The statistical rating of counters is determined in a similar way as the overall performance ranking, but it also takes into account how well a champion normally performs, and the effect the particular matchup has on this performance. It also takes into account who has a stronger performance in the matchup.
How are the win rates/play rates of full builds calculated?
Because the number of games where a full build is successfully completed is very low, it is hard to accurately determine the overall win rate of a given build. This is because completed builds typically have extremely high win rates (players that are ahead have more items completed).
Therefore, Champion.gg places a similar weighting for partially completed builds that follow the same build path as the full build. This helps provide a better overview of the build as a whole as it takes into account all stages of the build. In order to further stabilize the win rate, it is normalized against the win rate of the champions role.
How do you determine what role a champion plays in?
Champion.gg uses Riot's API which provides the lane and role of a particular champion. This is based on the areas a particular champion spends the majority of the early game/laning phase.
How frequently is data updated?
Data is updated as soon as possible whenever a new patch is released (usually within 3 days). Towards the end of a patch, data is updated less frequently--Champion.gg has over 300gb of champion data, so processing can take around 15 hours.
Why does x champion have such a high/low win rate?
Champions such as Urgot are seen very very rarely in Platinum+ games. Consequently, there isn't always a large enough sample size to determine whether the statistics are a true reflection of the champion's performance. If small sample size isn't an issue, chances are Riot is having balancing issues.
How can I support Champion.gg?
Champion.gg is and always will be free to use - it does, however, cost to process, download, and host gigabytes of data each day. There are a number of ways you can help out! You can share Champion.gg with your friends/groups, you can white list Champion.gg through your adblocker, or for those who don't like advertisements, you can consider donating.
Is Champion.gg open source?
I have the web development/design side of Champion.gg on GitHub - You can take a look for yourself! The data aggregation/processing side of things is in a private repo until I clean it up.
What programming language(s) did you use?
Champion.gg is a full JavaScript endeavour, utilising Node.js/Express on the back end with MongoDB serving the data. The front end uses Angular.js as its primary framework. Data aggregation/analysis was performed with MongoDB's aggregation framework / Node.js.