forked from kungur77/BoL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKatarina - The Sinister Blade.lua
1777 lines (1722 loc) · 58.1 KB
/
Katarina - The Sinister Blade.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
local version = "2.11993"
--[[
db dD .d8b. d888888b .d8b. d8888b. d888888b d8b db .d8b.
88 ,8P' d8' `8b `~~88~~' d8' `8b 88 `8D `88' 888o 88 d8' `8b
88,8P 88ooo88 88 88ooo88 88oobY' 88 88V8o 88 88ooo88
88`8b 88~~~88 88 88~~~88 88`8b 88 88 V8o88 88~~~88
88 `88. 88 88 88 88 88 88 `88. .88. 88 V888 88 88
YP YD YP YP YP YP YP 88 YD Y888888P VP V8P YP YP
Script - Katarina - The Sinister Blade 2.1.0 by Skeem and Roach
Changelog :
1.0 - Initial Release
1.1 - Fixed Damage Calculation
- Fixed Auto Ignite
- Hopefully Fixed BugSplat
1.2 - Really fixed BugSplat Now
- More Damage Calculation Adjustments
- More checks for when to ult
- More checks to not use W when enemy not in range
1.2.1 - Fixed the problem with channelling ultimate
1.3 - Fixed the problem with ult AGAIN
- Added Auto Pots
- Added Auto Zhonyas
- Added Draw Circles of targets that can die
1.3.1 - Lul another Ult fix wtfux
- Added move to mouse to harass mode
1.4 - Recoded most of the script
- Added toggle to use items with KS
- Jungle Clearing
- New method to stop ult from not channeling
- New Menu
- Lane Clear
1.4.1 - Added packet block ult movement
1.4.2 - Some draw text fixes
- ult range fixes so it doesn't keep spinning if no enemies are around
- Added some permashows
1.5 - No longer AutoCarry Script
- Requires iSAC library for orbwalking
- Revamped code a little
- Deleted ult usage from auto KS for now
1.5.2 - Fixed Skills not casting ult
- Fixed enemy chasing bug
- Added delay W to both harass & full combo with toggle in menu
1.6 - Fixed Jungle Clear
- Added Toggle to Stop ult if enemies can die from other spells
- Fixed Ward Jump
- Improved Farm a bit
1.6.1 - Added Blackfire Tourch in combo
- Fixed ult stop when enemies can die
1.6.2 - Fixed Blackfire torch error
1.7 - Updated ward jump, won't use more than 1 item
- Beta KS with wards if E not ready
- Beta ward save when in danger
- Doesn't require iSAC anymore
1.7.1 - Fixed ward jump (doesn't jump to wards that are in oposite way of mouse)
- Fixed Combo
- some fixes for auto ward save
1.8 - Added Trinkets for Ward Jump
- Improved KS a little, removed unnecessary code
1.8.3 - Attempt to fix some errors
- Reworked combo a little should be smoother now
- Added togge for orbwalking in combo as requested
- Casting wards should work a little better as well
1.8.4 - Fixed bugsplat
1.8.5 - Fixed Draw Errors
1.8.7 - Fixed W Delay changed name to Proc Q Mark
- Fixed text errors added Q mark to calculations
1.9 - Fixed ult issues recoded a couple of things
2.0 - Big update rewrote everything!
- Combo Reworked should be a lot smoother now
- Harass Reworked as well, should work better and detonate marks
- Farm reworked / Uses mixed skill damages to maximize farm
- Ward Jump Improved / Now Can ward to minions & allies that are in range
- Lane Clear & Jungle Clear Improved / Uses new jungle table with all mobs in 5v5 / 3v3
- New Overkill Protection
- New Option to OrbWalk Minions In Lane During Lane Clear
- New Option to Orbwalk Jungle during jungle clear
- New Option to block packets while channeling (Won't block ultimate if Target is killable (Option for this too))
- New Option to KS with Ult
- New Option to KS with Items
- New Option to KS with Wards / Minions / Allies
- Added Priority Arranger to Target Selector
- New Draw which shows exactly which skills need to be used to kill
- New Option to Draw Who is being targetted by text
- New Option to Draw a circle around target
2.0.1 - Removed Draw Circles around Target (FPS Drops)
- All bug fixes by Roach:
- Fixed Variables
- Fixed and Added Ward Jump
- Fixed Items Usage
2.0.2 - Added TickManager/FPS Drops Improver - It will lower your FPS Drops
- Deleted 'wardSave' from Misc Menu
- Improved Ulti-KS
- Now Lag Free Circles is implemented:
- Credits to:
- barasia283
- vadash
- ViceVersa
- Trees
- Any more I don't know of
- Features:
- Globally reduces the FPS drop from circles.
- Requirements:
- VIP
2.0.3 - Added Ulti Seconds Timer
- Features:
- How many seconds do we need to kill an Enemy
- It will be Improved as it is in Early Development
- Fixed some more Typo
- Fixed a little bug where the Ward-Jump function didn't jumped on Minions
- 'colorText' is now Yellow every time, because other colors can be hard to see
- Fixed a bug where, if you were a Free User, the Lag Free Cicrcles Started to Spam errors
2.0.4 - Fixed a bug where 'Sinister Steel' (W) was used even if Katarina was Channelling her Ultimate
- Fixed Range Draws blinking by adding a new option to Enable/Disable TickManager/FPS Improver in 'Misc Menu' (Default: OFF)
- Using ARGB Function for the Draw Ranges
- Fixed a bug where E Range was not seen
- Fixed more typo and variables from 1.9
- Made ward jumping more accurate
- Fixed harass function
2.0.5 - FPS Lag should be fixed now
- Edited Ward Jump to jump at max range
- Added Jump to Allies if in danger
- Fixed Ulti problem for Free Users
- Updated Damage Calculation
- Added: Q+E+W+Itm = Kill
- Hopefully fixed Ward-Jump
- Improved Ulti functionality for VIP and Free Users
- Fixed a bug where Katarina was not farming with W if only W was Enabled to farm
- Fixed a bug with Damage Calculation
- Added Liandry's Torment into the Damage Calculation
- Increased Farming Performance
2.0.6 - Added Orbwalkig in Harass
- Improved Ult Functionality
- Fixed bugs from 2.0.5 about Ult
- Fixed some typo
- Fixed some logics about killsteal
- Fixed some Logics about getting Distance
- Improved Logics of the Script
2.0.7 - Finally fixed Proc Q Mark
- Changed some variables
- Improved Ult Killsteal (Experimental)
- Hopefully fixed Double-Ward Bug
- Fixed farm with 'Shunpo' (E)
- Fixed Sightstone not casting Bug
- Fixed typo
- Added Auto-updater
- Added Anti-Ult Breaking for MMA / SAC
- Fixed Ult Breaking for Free / VIP Users
2.0.8 - Fixed Ignite Bug while Ult (VIP Users Bug)
- Fixed Auto-W Bug while Ult
- Added Auto-E at Max Range while Ult (Option in Combo Menu)
- Changed Harass Menu
- Fixed Packet Spamming Errors
- Improved Proc Q Mark
- Hopefully fixed Spamming Errors
- Improved Ult Functionality
- Improved Damage Calculation
- Improved Orbwalker
- Fixed Ward-Jump Bug when Ult
- Fixed MMA Blocking Issues for Free Users
- Added Support for MMA Target Selector
- Fixed Combo Stuttering
- Fixed Ult Stuttering
2.0.9 - Fixed Spamming Errors when Using Ult
- Fixed MMA Breaking Ult
- Added Summoner Spells as an Exception at Blocking Packets while Kata is Channeling Ult (VIP USERS)
- Improved Combo Functionality
- Fixed Combo Stuttering
- Fixed Typos about Ult
- Added Support for SAC Target Selector
- Fixed some 'nil' values arount the Script
- Improved Auto-E Functionality
- Implemented right-click to Interrupt the Ult
- Improved 'Proc Q Mark Option'
- Fixed 'Not Casting Ult' Bug
- Fixed Auto-E Bugs and Hopefully Right-Click to Interrupt Bug
2.1.0 - Added another Level Sequence (Prioritise Q)
- Changed 'Auto Level Skills' Menu
- Improved Packet Checks (VIP)
- Fixed Packet Problems (VIP)
- Fixed Jungle Clear Bug (Not using Spells neither Attack)
- Added usage for 'OnGainBuff' and 'OnLoseBuff' (VIP)
- Improved Killsteal Function
- Re-arranged 'Auto Level Skills' Menu
- Fixed Ult Cancelling
- Brought a Fix for MMA (Cancelling Ult)
- Brought a Fix for SAC (Cancelling Ult)
2.1.1 - Fixed SAC Errors
- Fixed Orbwalker not Orbwalking(lel)
- Improved Orbwalker
- Fixed Spamming Infos about Ult
- Improved Lua Script Performance
- Fixed Cancelling Ult
- Fixed Spamming Errors
- Fixed AutoSkillsLevel Spamming Errors
- Fixed Packet Errors
- Improved Ult Anti-Breaking
- Fixed Right-Click to Interrupt Bug
]] --
-- / Hero Name Check / --
if myHero.charName ~= "Katarina" then return end
-- / Hero Name Check / --
-- / Auto-Update Function / --
local autoupdateenabled = true
local UPDATE_SCRIPT_NAME = "Katarina - The Sinister Blade"
local UPDATE_HOST = "raw.github.com"
local UPDATE_PATH = "/UglyOldGuy/BoL/master/Katarina%20-%20The%20Sinister%20Blade.lua?chunk="..math.random(1, 1000)
local UPDATE_FILE_PATH = SCRIPT_PATH..GetCurrentEnv().FILE_NAME
local UPDATE_URL = "https://"..UPDATE_HOST..UPDATE_PATH
local ServerData
if autoupdateenabled then
GetAsyncWebResult(UPDATE_HOST, UPDATE_PATH, function(d) ServerData = d end)
function update()
if ServerData ~= nil then
local ServerVersion
local send, tmp, sstart = nil, string.find(ServerData, "local version = \"")
if sstart then
send, tmp = string.find(ServerData, "\"", sstart + 1)
end
if send then
ServerVersion = tonumber(string.sub(ServerData, sstart + 1, send - 1))
end
if ServerVersion ~= nil and tonumber(ServerVersion) ~= nil and tonumber(ServerVersion) > tonumber(version) then
DownloadFile(UPDATE_URL.."?nocache"..myHero.charName..os.clock(), UPDATE_FILE_PATH, function () print("<font color=\"#FF0000\"> >> "..UPDATE_SCRIPT_NAME..": successfully updated. Reload (double F9) Please.</font>") end)
elseif ServerVersion then
print("<font color=\"#FF0000\"> >> "..UPDATE_SCRIPT_NAME..": You have got the latest version of the script.</font>")
end
ServerData = nil
end
end
AddTickCallback(update)
end
-- / Auto-Update Function / --
-- / Loading Function / --
function OnLoad()
--->
Variables()
KatarinaMenu()
PrintChat("<font color='#FF0000'> >> "..UPDATE_SCRIPT_NAME.." 2.1.1 Loaded <<</font>")
---<
end
-- / Loading Function / --
-- / Tick Function / --
function OnTick()
--->
Checks()
DamageCalculation()
UseConsumables()
if Target then
if KatarinaMenu.harass.wharass and not SkillR.castingUlt then CastW(Target) end
if KatarinaMenu.killsteal.Ignite then AutoIgnite(Target) end
end
if KatarinaMenu.combo.autoE then
for _, enemy in pairs(enemyHeroes) do
if ValidTarget(enemy) and enemy ~= nil and GetDistanceSqr(enemy) > SkillR.range*SkillR.range and GetDistanceSqr(enemy) <= SkillE.range*SkillE.range and SkillR.castingUlt then
CastE(enemy)
end
end
end
---<
-- Menu Variables --
--->
ComboKey = KatarinaMenu.combo.comboKey
FarmingKey = KatarinaMenu.farming.farmKey
HarassKey = KatarinaMenu.harass.harassKey
ClearKey = KatarinaMenu.clear.clearKey
WardJumpKey = KatarinaMenu.misc.wardJumpKey
---<
-- Menu Variables --
--->
if ComboKey then
FullCombo()
end
if HarassKey then
HarassCombo()
end
if FarmingKey and not ComboKey then
Farm()
end
if ClearKey then
MixedClear()
end
if WardJumpKey then
moveToCursor()
local WardPos = GetDistanceSqr(mousePos) <= SkillWard.range*SkillWard.range and mousePos or getMousePos()
wardJump(WardPos.x, WardPos.z)
end
if KatarinaMenu.killsteal.smartKS then
KillSteal()
end
if KatarinaMenu.misc.AutoLevelSkills == 1 then
if myHero.level == 6 or myHero.level == 11 or myHero.level == 16 then
LevelSpell(_R)
end
elseif KatarinaMenu.misc.AutoLevelSkills == 2 then
autoLevelSetSequence(levelSequence.prioritiseQ)
elseif KatarinaMenu.misc.AutoLevelSkills == 3 then
autoLevelSetSequence(levelSequence.prioritiseW)
end
if KatarinaMenu.misc.jumpAllies then
DangerCheck()
end
---<
end
-- / Tick Function / --
-- / Variables Function / --
function Variables()
--- Skills Vars --
--->
SkillQ = {range = 675, name = "Bouncing Blades", ready = false, delay = 400, projSpeed = 1400, timeToHit = 0, markDelay = 4000, color = ARGB(255,178, 0 , 0 ) }
SkillW = {range = 375, name = "Sinister Steel", ready = false, color = ARGB(255, 32,178,170) }
SkillE = {range = 700, name = "Shunpo", ready = false, color = ARGB(255,128, 0 ,128) }
SkillR = {range = 550, name = "Death Lotus", ready = false, castingUlt = false, }
SkillWard = {range = 600, lastJump = 0, itemSlot = nil }
---<
--- Skills Vars ---
--- Items Vars ---
--->
Items =
{
HealthPot = {ready = false},
FlaskPot = {ready = false},
TrinketWard = {ready = false},
RubySightStone = {ready = false},
SightStone = {ready = false},
SightWard = {ready = false},
VisionWard = {ready = false}
}
---<
--- Items Vars ---
--- Orbwalking Vars ---
--->
lastAnimation = "Run"
lastAttack = 0
lastAttackCD = 0
lastWindUpTime = 0
---<
--- Orbwalking Vars ---
--- TickManager Vars ---
--->
TManager =
{
onTick = TickManager(20),
onDraw = TickManager(80),
onSpell = TickManager(15)
}
---<
--- TickManager Vars ---
if VIP_USER then
--- LFC Vars ---
--->
_G.oldDrawCircle = rawget(_G, 'DrawCircle')
_G.DrawCircle = DrawCircle2
---<
--- LFC Vars ---
end
--- Drawing Vars ---
--->
TextList = {"Harass him", "Q = Kill", "W = Kill", "E = Kill!", "Q+W = Kill", "Q+E = Kill", "E+W = Kill", "Q+E+W = Kill", "Q+E+W+Itm = Kill", "Q+W+E+R: ", "Need CDs"}
KillText = {}
colorText = ARGB(255,255,204,0)
wardColor =
{
available = ARGB(255,255,255,255),
searching = ARGB(255,250,123, 20),
unavailable = ARGB(255,255, 0 , 0 )
}
---<
--- Drawing Vars ---
--- Misc Vars ---
--->
levelSequence = {
prioritiseQ = { 1,3,2,1,1,4,1,2,1,2,4,2,2,3,3,4,3,3 },
prioritiseW = { 1,3,2,2,2,4,2,1,2,1,4,1,1,3,3,4,3,3 }
}
UsingHPot = false
gameState = GetGame()
if gameState.map.shortName == "twistedTreeline" then
TTMAP = true
else
TTMAP = false
end
---<
--- Misc Vars ---
--- Tables ---
--->
Wards = {}
allyHeroes = GetAllyHeroes()
enemyHeroes = GetEnemyHeroes()
enemyMinions = minionManager(MINION_ENEMY, SkillE.range, player, MINION_SORT_HEALTH_ASC)
allyMinions = minionManager(MINION_ALLY, SkillE.range, player, MINION_SORT_HEALTH_ASC)
JungleMobs = {}
JungleFocusMobs = {}
priorityTable = {
AP = {
"Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus",
"Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna",
"Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra",
},
Support = {
"Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean",
},
Tank = {
"Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Nautilus", "Shen", "Singed", "Skarner", "Volibear",
"Warwick", "Yorick", "Zac",
},
AD_Carry = {
"Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Lucian", "MasterYi", "MissFortune", "Pantheon", "Quinn", "Shaco", "Sivir",
"Talon","Tryndamere", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Yasuo","Zed",
},
Bruiser = {
"Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nocturne", "Olaf", "Poppy",
"Renekton", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao",
},
}
if TTMAP then --
FocusJungleNames = {
["TT_NWraith1.1.1"] = true,
["TT_NGolem2.1.1"] = true,
["TT_NWolf3.1.1"] = true,
["TT_NWraith4.1.1"] = true,
["TT_NGolem5.1.1"] = true,
["TT_NWolf6.1.1"] = true,
["TT_Spiderboss8.1.1"] = true,
}
JungleMobNames = {
["TT_NWraith21.1.2"] = true,
["TT_NWraith21.1.3"] = true,
["TT_NGolem22.1.2"] = true,
["TT_NWolf23.1.2"] = true,
["TT_NWolf23.1.3"] = true,
["TT_NWraith24.1.2"] = true,
["TT_NWraith24.1.3"] = true,
["TT_NGolem25.1.1"] = true,
["TT_NWolf26.1.2"] = true,
["TT_NWolf26.1.3"] = true,
}
else
JungleMobNames = {
["Wolf8.1.2"] = true,
["Wolf8.1.3"] = true,
["YoungLizard7.1.2"] = true,
["YoungLizard7.1.3"] = true,
["LesserWraith9.1.3"] = true,
["LesserWraith9.1.2"] = true,
["LesserWraith9.1.4"] = true,
["YoungLizard10.1.2"] = true,
["YoungLizard10.1.3"] = true,
["SmallGolem11.1.1"] = true,
["Wolf2.1.2"] = true,
["Wolf2.1.3"] = true,
["YoungLizard1.1.2"] = true,
["YoungLizard1.1.3"] = true,
["LesserWraith3.1.3"] = true,
["LesserWraith3.1.2"] = true,
["LesserWraith3.1.4"] = true,
["YoungLizard4.1.2"] = true,
["YoungLizard4.1.3"] = true,
["SmallGolem5.1.1"] = true,
}
FocusJungleNames = {
["Dragon6.1.1"] = true,
["Worm12.1.1"] = true,
["GiantWolf8.1.1"] = true,
["AncientGolem7.1.1"] = true,
["Wraith9.1.1"] = true,
["LizardElder10.1.1"] = true,
["Golem11.1.2"] = true,
["GiantWolf2.1.1"] = true,
["AncientGolem1.1.1"] = true,
["Wraith3.1.1"] = true,
["LizardElder4.1.1"] = true,
["Golem5.1.2"] = true,
["GreatWraith13.1.1"] = true,
["GreatWraith14.1.1"] = true,
}
end
for i = 0, objManager.maxObjects do
local object = objManager:getObject(i)
if object and object.valid and not object.dead then
if FocusJungleNames[object.name] then
JunglefocusMobs[#JungleFocusMobs+1] = object
elseif JungleMobNames[object.name] then
JungleMobs[#JungleMobs+1] = object
end
end
end
---<
--- Tables ---
end
-- / Variables Function / --
-- / Menu Function / --
function KatarinaMenu()
--- Main Menu ---
--->
KatarinaMenu = scriptConfig("Katarina - The Sinister Blade", "Katarina")
---> Combo Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Combo Settings]", "combo")
KatarinaMenu.combo:addParam("comboKey", "Full Combo Key (X)", SCRIPT_PARAM_ONKEYDOWN, false, 88)
KatarinaMenu.combo:addParam("stopUlt", "Stop "..SkillR.name.." (R) If Target Can Die", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.combo:addParam("autoE", "Auto E if not in "..SkillR.name.." (R) Range while Ult", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.combo:addParam("detonateQ", "Try to Proc "..SkillQ.name.." (Q) Mark", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.combo:addParam("comboItems", "Use Items with Burst", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.combo:addParam("comboOrbwalk", "Orbwalk in Combo", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.combo:permaShow("comboKey")
---<
---> Harass Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Harass Settings]", "harass")
KatarinaMenu.harass:addParam("harassKey", "Harass Hotkey (T)", SCRIPT_PARAM_ONKEYDOWN, false, 84)
KatarinaMenu.harass:addParam("hMode", "Harass Mode", SCRIPT_PARAM_LIST, 1, { "Q+E+W", "Q+W" })
KatarinaMenu.harass:addParam("detonateQ", "Proc Q Mark", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.harass:addParam("wharass", "Always "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.harass:addParam("harassOrbwalk", "Orbwalk in Harass", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.harass:permaShow("harassKey")
---<
---> Farming Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Farming Settings]", "farming")
KatarinaMenu.farming:addParam("farmKey", "Farming ON/Off (Z)", SCRIPT_PARAM_ONKEYTOGGLE, true, 90)
KatarinaMenu.farming:addParam("qFarm", "Farm with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.farming:addParam("wFarm", "Farm with "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.farming:addParam("eFarm", "Farm with "..SkillE.name.." (E)", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.farming:permaShow("farmKey")
---<
---> Clear Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Clear Settings]", "clear")
KatarinaMenu.clear:addParam("clearKey", "Jungle/Lane Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, 86)
KatarinaMenu.clear:addParam("JungleFarm", "Use Skills to Farm Jungle", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("ClearLane", "Use Skills to Clear Lane", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("clearQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("clearW", "Clear with "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("clearE", "Clear with "..SkillE.name.." (E)", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("clearOrbM", "OrbWalk Minions", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.clear:addParam("clearOrbJ", "OrbWalk Jungle", SCRIPT_PARAM_ONOFF, true)
---<
---> KillSteal Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - KillSteal Settings]", "killsteal")
KatarinaMenu.killsteal:addParam("smartKS", "Use Smart Kill Steal", SCRIPT_PARAM_ONOFF, true)
-- KatarinaMenu.killsteal:addParam("wardKS", "Use Wards to KS", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.killsteal:addParam("ultKS", "Use "..SkillR.name.." (R) to KS", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.killsteal:addParam("itemsKS", "Use Items to KS", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.killsteal:addParam("Ignite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.killsteal:permaShow("smartKS")
---<
---> Drawing Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Drawing Settings]", "drawing")
if VIP_USER then
KatarinaMenu.drawing:addSubMenu("["..myHero.charName.." - LFC Settings]", "lfc")
KatarinaMenu.drawing.lfc:addParam("LagFree", "Activate Lag Free Circles", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.drawing.lfc:addParam("CL", "Length before Snapping", SCRIPT_PARAM_SLICE, 300, 75, 2000, 0)
KatarinaMenu.drawing.lfc:addParam("CLinfo", "Higher length = Lower FPS Drops", SCRIPT_PARAM_INFO, "")
end
KatarinaMenu.drawing:addParam("disableAll", "Disable All Ranges Drawing", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.drawing:addParam("drawText", "Draw Enemy Text", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.drawing:addParam("drawTargetText", "Draw Who I'm Targetting", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.drawing:addParam("drawQ", "Draw Bouncing Blades (Q) Range", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.drawing:addParam("drawW", "Draw Sinister Steel (W) Range", SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.drawing:addParam("drawE", "Draw Shunpo (E) Range", SCRIPT_PARAM_ONOFF, false)
---<
---> Misc Menu
KatarinaMenu:addSubMenu("["..myHero.charName.." - Misc Settings]", "misc")
KatarinaMenu.misc:addParam("wardJumpKey", "Ward Jump Hotkey (G)", SCRIPT_PARAM_ONKEYDOWN, false, 71)
KatarinaMenu.misc:addParam("jumpAllies", "Jump To Allies if In Danger", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.misc:addParam("ZWItems", "Auto Zhonyas/Wooglets", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.misc:addParam("ZWHealth", "Min Health % for Zhonyas/Wooglets", SCRIPT_PARAM_SLICE, 15, 0, 100, -1)
KatarinaMenu.misc:addParam("aHP", "Auto Health Pots", SCRIPT_PARAM_ONOFF, true)
KatarinaMenu.misc:addParam("HPHealth", "Min % for Health Pots", SCRIPT_PARAM_SLICE, 50, 0, 100, -1)
KatarinaMenu.misc:addParam("uTM", "Use Tick Manager/FPS Improver",SCRIPT_PARAM_ONOFF, false)
KatarinaMenu.misc:addParam("AutoLevelSkills", "Auto Level Skills (Requires Reload)", SCRIPT_PARAM_LIST, 1, { "No", "Prioritise Q", "Prioritise W" })
KatarinaMenu.misc:permaShow("wardJumpKey")
---<
---> Target Selector
TargetSelector = TargetSelector(TARGET_LESS_CAST, SkillE.range, DAMAGE_MAGIC, true)
TargetSelector.name = "Katarina"
KatarinaMenu:addTS(TargetSelector)
---<
---> Arrange Priorities
if heroManager.iCount < 10 then -- borrowed from Sidas Auto Carry, modified to 3v3
PrintChat(" >> Too few champions to arrange priority")
elseif heroManager.iCount == 6 and TTMAP then
ArrangeTTPriorities()
else
ArrangePriorities()
end
---<
---<
--- Main Menu ---
end
-- / Menu Function / --
-- / Full Combo Function / --
function FullCombo()
--- Combo While Not Channeling --
--->
if not SkillR.castingUlt then
if ValidTarget(Target) and Target ~= nil then
if KatarinaMenu.combo.comboOrbwalk then
OrbWalking(Target)
end
if KatarinaMenu.combo.comboItems then
UseItems(Target)
end
CastQ(Target)
if KatarinaMenu.combo.detonateQ and GetTickCount() >= SkillQ.timeToHit then
if not SkillQ.ready then CastE(Target) end
if not SkillE.ready then CastW(Target) end
elseif not KatarinaMenu.combo.detonateQ then
CastE(Target)
CastW(Target)
end
CastR()
else
if KatarinaMenu.combo.comboOrbwalk then
moveToCursor()
end
end
end
---<
--- Combo While Not Channeling --
end
-- / Full Combo Function / --
-- / Harass Combo Function / --
function HarassCombo()
--- Smart Harass --
--->
if ValidTarget(Target) and Target ~= nil then
if KatarinaMenu.harass.harassOrbwalk then
OrbWalking(Target)
end
--- Harass Mode 1 Q+W+E ---
if KatarinaMenu.harass.hMode == 1 then
CastQ(Target)
if KatarinaMenu.harass.detonateQ and GetTickCount() >= SkillQ.timeToHit then
if not SkillQ.ready then CastE(Target) end
if not SkillE.ready then CastW(Target) end
elseif not KatarinaMenu.harass.detonateQ then
CastE(Target)
CastW(Target)
end
end
--- Harass Mode 1 ---
--- Harass Mode 2 Q+W ---
if KatarinaMenu.harass.hMode == 2 then
CastQ(Target)
CastW(Target)
end
--- Harass Mode 2 ---
else
if KatarinaMenu.harass.harassOrbwalk then
moveToCursor()
end
end
---<
--- Smart Harass ---
end
-- / Harass Combo Function / --
-- / Farm Function / --
function Farm()
--->
for _, minion in pairs(enemyMinions.objects) do
--- Minion Damages ---
local pMinionDmg = getDmg("Q", minion, myHero, 2)
local qMinionDmg = getDmg("Q", minion, myHero)
local wMinionDmg = getDmg("W", minion, myHero)
local eMinionDmg = getDmg("E", minion, myHero)
--- Minion Damages ---
--- Minion Keys ---
local qFarmKey = KatarinaMenu.farming.qFarm
local wFarmKey = KatarinaMenu.farming.wFarm
local eFarmKey = KatarinaMenu.farming.eFarm
--- Minion Keys ---
--- Farming Minions ---
if ValidTarget(minion) and minion ~= nil then
if GetDistanceSqr(minion) <= SkillW.range*SkillW.range then
if qFarmKey and wFarmKey then
if SkillQ.ready and SkillW.ready then
if minion.health <= (pMinionDmg + qMinionDmg + wMinionDmg) and minion.health > wMinionDmg then
CastQ(minion)
CastSpell(_W)
end
elseif SkillW.ready then
if minion.health <= (wMinionDmg) then
CastSpell(_W)
end
elseif SkillQ.ready and not SkillW.ready then
if minion.health <= (qMinionDmg) then
CastQ(minion)
end
end
elseif qFarmKey and not wFarmKey then
if SkillQ.ready then
if minion.health <= (qMinionDmg) then
CastQ(minion)
end
end
elseif not qFarmKey and wFarmKey then
if SkillW.ready then
if minion.health <= (wMinionDmg) then
CastSpell(_W)
end
end
end
elseif (GetDistanceSqr(minion) > SkillW.range*SkillW.range) then
if qFarmKey then
if minion.health <= qMinionDmg and (GetDistanceSqr(minion) <= SkillQ.range*SkillQ.range) then
CastQ(minion)
end
end
if eFarmKey then
if minion.health <= eMinionDmg and (GetDistanceSqr(minion) <= SkillE.range*SkillE.range) then
CastE(minion)
end
end
end
end
break
end
--- Farming Minions ---
---<
end
-- / Farm Function / --
-- / Clear Function / --
function MixedClear()
--- Jungle Clear ---
--->
if KatarinaMenu.clear.JungleFarm then
local JungleMob = GetJungleMob()
if JungleMob ~= nil then
if KatarinaMenu.clear.clearOrbJ then
OrbWalking(JungleMob)
end
if KatarinaMenu.clear.clearQ and SkillQ.ready and GetDistanceSqr(JungleMob) <= SkillQ.range*SkillQ.range then
CastQ(JungleMob)
end
if KatarinaMenu.clear.clearW and SkillW.ready and GetDistanceSqr(JungleMob) <= SkillW.range*SkillW.range then
CastSpell(_W)
end
if KatarinaMenu.clear.clearE and SkillE.ready and GetDistanceSqr(JungleMob) <= SkillE.range*SkillE.range then
CastE(JungleMob)
end
else
if KatarinaMenu.clear.clearOrbJ then
moveToCursor()
end
end
end
---<
--- Jungle Clear ---
--- Lane Clear ---
--->
if KatarinaMenu.clear.ClearLane then
for _, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) and minion ~= nil then
if KatarinaMenu.clear.clearOrbM then
OrbWalking(minion)
end
if KatarinaMenu.clear.clearQ and SkillQ.ready and GetDistanceSqr(minion) <= SkillQ.range*SkillQ.range then
CastQ(minion)
end
if KatarinaMenu.clear.clearW and SkillW.ready and GetDistanceSqr(minion) <= SkillW.range*SkillW.range then
CastSpell(_W)
end
if KatarinaMenu.clear.clearE and SkillE.ready and GetDistanceSqr(minion) <= SkillE.range*SkillE.range then
CastE(minion)
end
else
if KatarinaMenu.clear.clearOrbM then
moveToCursor()
end
end
end
end
---<
--- Lane Clear ---
end
-- / Clear Function / --
-- / Casting Q Function / --
function CastQ(enemy)
--- Dynamic Q Cast ---
--->
if not SkillQ.ready or (GetDistanceSqr(enemy) > SkillQ.range*SkillQ.range) then
return false
end
if ValidTarget(enemy) and enemy ~= nil then
if VIP_USER then
Packet("S_CAST", {spellId = _Q, targetNetworkId = enemy.networkID}):send()
return true
else
CastSpell(_Q, enemy)
return true
end
if SkillQ.timeToHit == 0 or GetTickCount() >= SkillQ.timeToHit then
SkillQ.timeToHit = GetTickCount() + (SkillQ.delay + (GetDistance(myHero, enemy) / SkillQ.projSpeed))
return true
end
end
return false
---<
--- Dynamic Q Cast ---
end
-- / Casting Q Function / --
-- / Casting E Function / --
function CastE(enemy)
--- Dynamic E Cast ---
--->
if not SkillE.ready or (GetDistanceSqr(enemy) > SkillE.range*SkillE.range) then
return false
end
if ValidTarget(enemy) and enemy ~= nil then
if VIP_USER then
Packet("S_CAST", {spellId = _E, targetNetworkId = enemy.networkID}):send()
return true
else
CastSpell(_E, enemy)
return true
end
end
return false
---<
--- Dynamic E Cast ---
end
-- / Casting E Function / --
-- / Casting W Function / --
function CastW(enemy)
--- Dynamic W Cast ---
--->
if not SkillW.ready or (GetDistanceSqr(enemy) > SkillW.range*SkillW.range) then
return false
end
if ValidTarget(enemy) and enemy ~= nil then
CastSpell(_W)
return true
end
return false
---<
--- Dynamic W Cast ---
end
-- / Casting W Function / --
-- / Casting R Function / --
function CastR()
--- Dynamic R Cast ---
--->
if (SkillQ.ready or SkillW.ready or SkillE.ready or SkillR.castingUlt) or not SkillR.ready then
return false
end
if CountEnemyHeroInRange(SkillR.range) >= 1 then
CastSpell(_R)
SkillR.castingUlt = true
end
---<
--- Dymanic R Cast --
end
-- / Casting R Function / --
-- / Ward Jumping Function / --
function wardJump(x, y)
--->
if SkillE.ready then
local Jumped = false
local WardDistance = 300
for _, ally in pairs(allyHeroes) do
if ValidTarget(ally, SkillE.range, false) and ally ~= nil then
if GetDistanceSqr(ally, mousePos) <= WardDistance*WardDistance then
CastSpell(_E, ally)
Jumped = true
SkillWard.lastJump = GetTickCount() + 2000
end
end
end
for _, minion in pairs(allyMinions.objects) do
if ValidTarget(minion, SkillE.range, false) and minion ~= nil then
if GetDistanceSqr(minion, mousePos) <= WardDistance*WardDistance then
CastSpell(_E, minion)
Jumped = true
SkillWard.lastJump = GetTickCount() + 2000
end
end
end
for _, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion, SkillE.range, false) and minion ~= nil then
if GetDistanceSqr(minion, mousePos) <= WardDistance*WardDistance then
CastSpell(_E, minion)
Jumped = true
SkillWard.lastJump = GetTickCount() + 2000
end
end
end
if next(Wards) ~= nil then
for i, obj in pairs(Wards) do
if obj.valid then
MousePos = getMousePos()
if GetDistanceSqr(obj, MousePos) <= WardDistance*WardDistance then
CastSpell(_E, obj)
Jumped = true
SkillWard.lastJump = GetTickCount() + 2000
end
end
end
end
if not Jumped and GetTickCount() >= SkillWard.lastJump then
if Items.TrinketWard.ready then
SkillWard.itemSlot = ITEM_7
elseif Items.RubySightStone.ready then
SkillWard.itemSlot = rstSlot
elseif Items.SightStone.ready then
SkillWard.itemSlot = ssSlot
elseif Items.SightWard.ready then
SkillWard.itemSlot = swSlot
elseif Items.VisionWard.ready then
SkillWard.itemSlot = vwSlot
end
if SkillWard.itemSlot ~= nil then
CastSpell(SkillWard.itemSlot, x, y)
Jumped = true
SkillWard.lastJump = GetTickCount() + 2000
SkillWard.itemSlot = nil
end
end
end
---<
end
-- / Ward Jumping Function / --
-- / Use Items Function / --
function UseItems(enemy)
--- Use Items (Will Improve Soon) ---
--->
if not enemy then
enemy = Target
end
if ValidTarget(enemy) and enemy ~= nil then
if dfgReady and GetDistanceSqr(enemy) <= 600*600 then CastSpell(dfgSlot, enemy) end
if bftReady and GetDistanceSqr(enemy) <= 600*600 then CastSpell(bftSlot, enemy) end
if hxgReady and GetDistanceSqr(enemy) <= 600*600 then CastSpell(hxgSlot, enemy) end
if bwcReady and GetDistanceSqr(enemy) <= 450*450 then CastSpell(bwcSlot, enemy) end
if brkReady and GetDistanceSqr(enemy) <= 450*450 then CastSpell(brkSlot, enemy) end
end
---<
--- Use Items ---
end
-- / Use Items Function / --
function UseConsumables()
--- Check if Zhonya/Wooglets Needed --
--->
if KatarinaMenu.misc.ZWItems and isLow('Zhonya') and Target and (znaReady or wgtReady) then
CastSpell((wgtSlot or znaSlot))
end
---<
--- Check if Zhonya/Wooglets Needed --
--- Check if Potions Needed --
--->
if KatarinaMenu.misc.aHP and isLow('Health') and not (UsingHPot or UsingFlask) and (Items.HealthPot.ready or Items.FlaskPot.ready) then
CastSpell((hpSlot or fskSlot))
end
---<
--- Check if Potions Needed --
end
-- / Auto Ignite Function / --
function AutoIgnite(enemy)
--- Simple Auto Ignite ---
--->
if enemy.health <= iDmg and GetDistanceSqr(enemy) <= 600*600 then
if iReady then CastSpell(ignite, enemy) end
end
---<
--- Simple Auto Ignite ---
end
-- / Auto Ignite Function / --
-- / Damage Calculation Function / --
function DamageCalculation()
--- Calculate our Damage On Enemies ---
--->