View difference between Paste ID: pQKqCQV9 and zkmUMTGx
SHOW: | | - or go back to the newest paste.
1
--[[	Ahri Helper by HeX 1.3.1 VIP Prediction
2
3
Hot Keys:
4
	-Basic Combo: Space
5
	-Harass(Toggle): Z
6
7
Features:
8
	-Basic Combo: Items-> R-> E-> Q-> W-> R*2
9
	-Harass: Q
10
	-Use ulti in combo ON/OFF option in ingame menu.
11
	-Use E in combo ON/OFF option in ingame menu.
12
	-Mark killable target with a combo.
13
	-Target configuration, Press shift to configure.
14
	-Auto ignite and/or Ulti killable enemy ON/OFF option in ingame menu.
15
	-Item Support: DFG, Hextech Gunblade, Bligewater Cutlass, Blade of the Ruined King.
16
	-Basic orb walking ON/OFF option in ingame menu. It will follow your mouse so you can kite targets if you want.
17
	
18
Explanation of the marks:
19
	-Green circle: Marks the current target to which you will do the combo
20
	-Blue circle: Killed with a combo, if all the skills were available
21
	-Red circle: Killed using Items + Q + W + E + R + Ignite(if available)
22
	-2 Red circles: Killed using Items + Q + W + E + Ignite(if available)
23
	-3 Red circles: Killed using Q + W	
24
]]--
25
26
if myHero.charName ~= "Ahri" then return end
27
--[[	Settings	]]--
28
local rBuffer = 300 --Wont use R unless they are further than this.
29
--[[ Ranges	]]--
30
local qRange = 800
31
local wRange = 800
32
local eRange = 975
33
local rRange = 1000
34
--[[	Damage Calculation	]]--
35
local calculationenemy = 1
36
local killable = {}
37
--[[	Prediction	]]--
38
if VIP_USER then
39
	qp = TargetPredictionVIP(880, 1700, 0.25)
40
	ep = TargetPredictionVIP(975, 1600, 0.1, 90)
41
	PrintChat("Ahri Helper - VIP Prediction Used")
42
else
43
	qp = TargetPrediction(880, 1.7, 250)
44
	ep = TargetPrediction(975, 1.6, 100)
45
	PrintChat("Ahri Helper - Basic Prediction Used")
46
end
47
--[[	Attacks	]]--
48
local lastBasicAttack = 0
49
local swing = 0
50
local startAttackSpeed = 0.625
51
local nextTick = 0
52
--[[	Items	]]--
53
local ignite = nil
54
local QREADY, WREADY, EREADY, RREADY = false, false, false, false
55
local BRKSlot, DFGSlot, HXGSlot, BWCSlot = nil, nil, nil, nil
56
local BRKREADY, DFGREADY, HXGREADY, BWCREADY = false, false, false, false
57
58
function OnLoad()
59
	PrintChat("<font color='#CCCCCC'> >> Ahri Helper 1.3 loaded! <<</font>")
60
	AHConfig = scriptConfig("AhriHelper", "Ahri Helper")
61
	AHConfig:addParam("scriptActive", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
62
	AHConfig:addParam("Harass", "Harass", SCRIPT_PARAM_ONKEYTOGGLE, false, 90)
63
	AHConfig:addParam("Charm", "Charm", SCRIPT_PARAM_ONKEYDOWN, false, 67)
64
	AHConfig:addParam("useE", "Use E in combo", SCRIPT_PARAM_ONOFF, true)
65
	AHConfig:addParam("useR", "Use R in combo", SCRIPT_PARAM_ONOFF, true)
66
	AHConfig:addParam("mouseDash", "Dash to Mouse", SCRIPT_PARAM_ONOFF, true)
67
	AHConfig:addParam("movement", "Use basic orb walking", SCRIPT_PARAM_ONOFF, true)
68
	AHConfig:addParam("attacks", "Use Auto Attacks", SCRIPT_PARAM_ONOFF, true)
69
	AHConfig:addParam("autoignite", "Ignite when Killable", SCRIPT_PARAM_ONOFF, true)
70
	AHConfig:addParam("drawcirclesSelf", "Draw Circles - Self", SCRIPT_PARAM_ONOFF, false)
71
	AHConfig:addParam("drawcirclesEnemy", "Draw Circles - Enemy", SCRIPT_PARAM_ONOFF, true)
72
	AHConfig:permaShow("scriptActive")
73
	AHConfig:permaShow("Harass")
74
	
75
	ts = TargetSelector(TARGET_LOW_HP, wRange+100, DAMAGE_MAGIC)
76
	ts.name = "Ahri"
77
	AHConfig:addTS(ts)
78
	
79
	lastBasicAttack = os.clock()
80
	enemyMinions = minionManager(MINION_ENEMY, 1200, player)
81
	
82
	if myHero:GetSpellData(SUMMONER_1).name:find("SummonerDot") then ignite = SUMMONER_1
83
		elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerDot") then ignite = SUMMONER_2
84
	end
85
end
86
87
function OnProcessSpell(unit, spell)
88
	if unit.isMe and (spell.name:find("Attack") ~= nil) then
89
		swing = 1
90
		lastBasicAttack = os.clock() 
91
	end
92
end 
93
94
function OnTick()
95
	ts:update()
96
	enemyMinions:update()
97
	enemyMinions = minionManager(MINION_ENEMY, 1200, player)
98
	
99
	AttackDelay = 1/(myHero.attackSpeed*startAttackSpeed)
100
	if swing == 1 and os.clock() > lastBasicAttack + AttackDelay then
101
		swing = 0
102
	end
103
104
	BRKSlot, DFGSlot, HXGSlot, BWCSlot = GetInventorySlotItem(3153), GetInventorySlotItem(3128), GetInventorySlotItem(3146), GetInventorySlotItem(3144)
105
	DFGREADY = (DFGSlot ~= nil and myHero:CanUseSpell(DFGSlot) == READY)
106
	HXGREADY = (HXGSlot ~= nil and myHero:CanUseSpell(HXGSlot) == READY)
107
	BWCREADY = (BWCSlot ~= nil and myHero:CanUseSpell(BWCSlot) == READY)
108
	BRKREADY = (BRKSlot ~= nil and myHero:CanUseSpell(BRKSlot) == READY)
109
	IREADY = (ignite ~= nil and myHero:CanUseSpell(ignite) == READY)
110
	QREADY = (myHero:CanUseSpell(_Q) == READY)
111
	WREADY = (myHero:CanUseSpell(_W) == READY)
112
	EREADY = (myHero:CanUseSpell(_E) == READY)
113
	RREADY = (myHero:CanUseSpell(_R) == READY)
114
115
	if ts.target ~= nil then
116
		qPred = qp:GetPrediction(ts.target)
117
		ePred = ep:GetPrediction(ts.target)
118
	end
119
	if tick == nil or GetTickCount()-tick>=100 then
120
		tick = GetTickCount()
121
		DmgCalculation()
122
	end
123
	
124
	--[[	Auto Ignite	]]--
125
	if AHConfig.autoignite then    
126
		if IREADY then
127
			local ignitedmg = 0    
128
			for i = 1, heroManager.iCount, 1 do
129
				local enemyhero = heroManager:getHero(i)
130
				if ValidTarget(enemyhero,600) then
131
					ignitedmg = 50 + 20 * myHero.level
132
					if enemyhero.health <= ignitedmg then
133
						CastSpell(ignite, enemyhero)
134
					end
135
				end
136
			end
137
		end
138
	end
139
140
	--[[	Harass	]]--
141
	if ts.target ~= nil and AHConfig.Harass then
142
		if qPred ~= nil and GetDistance(ts.target) < qRange then
143
			if VIP_USER and qp:GetHitChance(ts.target) > 0.5 then
144
				CastSpell(_Q, qPred.x, qPred.z)
145
			elseif not VIP_USER then
146
				CastSpell(_Q, qPred.x, qPred.z)
147
			end
148
		end
149
	end
150
	
151
	--[[	Charm	]]--
152
	if AHConfig.Charm then
153
		if EREADY and findClosestEnemy() ~= nil then
154
			ePred2 = ep:GetPrediction(findClosestEnemy())
155
			if ePRed2 and not ep:GetCollision(findClosestEnemy()) and GetDistance(ePred2) < eRange then
156
				if VIP_USER and qp:GetHitChance(findClosestEnemy()) > 0.5 then
157
					CastSpell(_E, ePred2.x, ePred2.z)
158
				elseif not VIP_USER then
159
					CastSpell(_E, ePred2.x, ePred2.z)
160
				end
161
			end
162
		end
163
	end
164
	
165
	--[[	Combo	]]--
166
	if ts.target ~= nil and AHConfig.scriptActive then
167
		--[[	Items	]]--
168
		if GetDistance(ts.target) < 600 then
169
			if DFGREADY then CastSpell(DFGSlot, ts.target) end
170
			if HXGREADY then CastSpell(HXGSlot, ts.target) end
171
			if BWCREADY then CastSpell(BWCSlot, ts.target) end
172
			if BRKREADY then CastSpell(BRKSlot, ts.target) end
173
		end
174
		--[[	Combo	]]--
175
		if RREADY and AHConfig.useR and GetDistance(ts.target) > rBuffer and GetDistance(ts.target) < rRange and not AHConfig.mouseDash then
176
			CastSpell(_R, ts.target.x, ts.target.z)
177
		elseif RREADY and AHConfig.useR and GetDistance(ts.target) < rRange and AHConfig.mouseDash then
178
			CastSpell(_R, mousePos.x, mousePos.z)
179
		end
180
		if EREADY and AHConfig.useE and ePred ~= nil and GetDistance(ts.target) < eRange then
181
			if not ep:GetCollision(ts.target) then 
182
				if VIP_USER and qp:GetHitChance(ts.target) > 0.5 then
183
					CastSpell(_E, ePred.x, ePred.z)
184
				elseif not VIP_USER then
185
					CastSpell(_E, ePred.x, ePred.z)
186
				end
187
			end
188
		end
189
		if QREADY and qPred ~= nil and GetDistance(ts.target) < qRange then
190
			if VIP_USER and qp:GetHitChance(ts.target) > 0.5 then
191
				CastSpell(_Q, qPred.x, qPred.z)
192
			elseif not VIP_USER then
193
				CastSpell(_Q, qPred.x, qPred.z)
194
			end
195
		end
196
		if WREADY and GetDistance(ts.target) < wRange then
197
			CastSpell(_W)
198
		end
199
		--[[	Attacks	]]--
200
		if swing == 0 then
201
			if GetDistance(ts.target) < (myHero.range+100) and GetTickCount() > nextTick and AHConfig.attacks then
202
				myHero:Attack(ts.target)
203
				nextTick = GetTickCount()
204
			end
205
			elseif swing == 1 then
206
			if AHConfig.movement and GetTickCount() > (nextTick + 250) then
207
				myHero:MoveTo(mousePos.x, mousePos.z)
208
			end
209
		end
210
	end
211
end
212
213
--[[
214
Explanation of the marks:
215
	-Green circle: Marks the current target to which you will do the combo
216
	-Blue circle: Killed with a combo, if all the skills were available
217
	-Red circle: Killed using Items + Q + W + E + R + Ignite(if available)
218
	-2 Red circles: Killed using Items + Q + W + E + Ignite(if available)
219
	-3 Red circles: Killed using Q + W	
220
]]
221
function DmgCalculation()
222
	local enemy = heroManager:GetHero(calculationenemy)
223
	if ValidTarget(enemy) then
224
		local ignitedamage, dfgdamage, hxgdamage, bwcdamage, brkdamage = 0, 0, 0, 0, 0
225
		local qdamage = getDmg("Q",enemy,myHero)
226
		local wdamage = getDmg("W",enemy,myHero)
227
		local edamage = getDmg("E",enemy,myHero)
228
		local rdamage = getDmg("R",enemy,myHero,1)
229
		local ignitedamage = (ignite and getDmg("IGNITE",enemy,myHero) or 0)
230
		local dfgdamage = (DFGSlot and getDmg("DFG",enemy,myHero) or 0)
231
		local hxgdamage = (HXGSlot and getDmg("HXG",enemy,myHero) or 0)
232
		local bwcdamage = (BWCSlot and getDmg("BWC",enemy,myHero) or 0)
233
		local brkdamage = (BRKSlot and getDmg("RUINEDKING",enemy,myHero) or 0)
234
		local combo1 = qdamage + wdamage + edamage + rdamage
235
		local combo2 = 0
236
		local combo3 = 0
237
		local combo4 = 0
238
	if QREADY then
239
		combo2 = combo2 + qdamage
240
		combo3 = combo3 + qdamage
241
		combo4 = combo4 + qdamage
242
	end	
243
	if WREADY then
244
		combo2 = combo2 + wdamage
245
		combo3 = combo3 + wdamage
246
		combo4 = combo4 + wdamage
247
	end
248
	if EREADY then
249
		combo2 = combo2 + edamage
250
		combo3 = combo3 + edamage
251
	end
252
	if RREADY then
253
		combo2 = combo2 + rdamage
254
	end
255
	if DFGREADY then
256
		combo1 = combo1 + dfgdamage
257
		combo2 = combo2 + dfgdamage
258
		combo3 = combo3 + dfgdamage
259
	end
260
	if HXGREADY then
261
		combo1 = combo1 + hxgdamage
262
		combo2 = combo2 + hxgdamage
263
		combo3 = combo3 + hxgdamage
264
	end
265
	if BWCREADY then
266
		combo1 = combo1 + bwcdamage
267
		combo2 = combo2 + bwcdamage
268
		combo3 = combo3 + bwcdamage
269
	end
270
	if BRKREADY then
271
		combo1 = combo1 + brkdamage
272
		combo2 = combo2 + brkdamage
273
		combo3 = combo3 + brkdamage
274
	end
275
	if IREADY then
276
		combo1 = combo1 + ignitedamage
277
		combo2 = combo2 + ignitedamage
278
		combo3 = combo3 + ignitedamage
279
	end
280
	if combo4 >= enemy.health then killable[calculationenemy] = 4
281
		elseif combo3 >= enemy.health then killable[calculationenemy] = 3
282
		elseif combo2 >= enemy.health then killable[calculationenemy] = 2
283
		elseif combo1 >= enemy.health then killable[calculationenemy] = 1
284
		else killable[calculationenemy] = 0 end
285
	end
286
		if calculationenemy == 1 then calculationenemy = heroManager.iCount
287
			else calculationenemy = calculationenemy-1 
288
		end
289
end
290
291
function OnDraw()	
292
	if AHConfig.drawcirclesSelf and not myHero.dead then
293
		DrawCircle(myHero.x,myHero.y,myHero.z, qRange, 0x00FF00)
294
		DrawCircle(myHero.x,myHero.y,myHero.z, eRange, 0x00FFFF)
295
	end
296
	if ts.target ~= nil and AHConfig.drawcirclesEnemy then
297
		for j=0, 10 do
298
			DrawCircle(ts.target.x, ts.target.y, ts.target.z, 40 + j*1.5, 0x00FF00)
299
		end
300
	end
301
	for i=1, heroManager.iCount do
302
		local enemydraw = heroManager:GetHero(i)
303
		if ValidTarget(enemydraw) then
304
			if AHConfig.drawcirclesEnemy then
305
				if killable[i] == 1 then
306
					for e=0, 15 do
307
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 80 + e*1.5, 0x0000FF)
308
					end
309
					elseif killable[i] == 2 then
310
					for e=0, 10 do
311
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 80 + e*1.5, 0xFF0000)
312
					end
313
					elseif killable[i] == 3 then
314
					for e=0, 10 do
315
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 80 + e*1.5, 0xFF0000)
316
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 110 + e*1.5, 0xFF0000)
317
					end
318
					elseif killable[i] == 4 then
319
					for e=0, 10 do
320
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 80 + e*1.5, 0xFF0000)
321
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 110 + e*1.5, 0xFF0000)
322
						DrawCircle(enemydraw.x, enemydraw.y, enemydraw.z, 140 + e*1.5, 0xFF0000)
323
					end
324
				end
325
			end
326
		end
327
	end
328
end
329
330
function findClosestEnemy()
331
	local closestEnemy = nil
332
	local currentEnemy = nil
333
	for i=1, heroManager.iCount do
334
		currentEnemy = heroManager:GetHero(i)
335
		if currentEnemy.team ~= myHero.team and not currentEnemy.dead and currentEnemy.visible then
336
			if closestEnemy == nil then
337
				closestEnemy = currentEnemy
338
				elseif GetDistance(currentEnemy) < GetDistance(closestEnemy) then
339
					closestEnemy = currentEnemy
340
			end
341
		end
342
	end
343
return closestEnemy
344
end
345
346
function minionCollision(predic, width, range)
347
	for _, minionObjectE in pairs(enemyMinions.objects) do
348
		if predic ~= nil and player:GetDistance(minionObjectE) < range then
349
			ex = player.x
350
			ez = player.z
351
			tx = predic.x
352
			tz = predic.z
353
			dx = ex - tx
354
			dz = ez - tz
355
			if dx ~= 0 then
356
				m = dz/dx
357
				c = ez - m*ex
358
			end
359
			mx = minionObjectE.x
360
			mz = minionObjectE.z
361
			distanc = (math.abs(mz - m*mx - c))/(math.sqrt(m*m+1))
362
			if distanc < width and math.sqrt((tx - ex)*(tx - ex) + (tz - ez)*(tz - ez)) > math.sqrt((tx - mx)*(tx - mx) + (tz - mz)*(tz - mz)) then
363
				return true
364
			end
365
		end
366
	end
367
return false
368
end