local SummonerBarrier = nil local SummunerHeal = nil local SummunerIgnite = nil local SummonerExhaust = nil local SummonerBoost = nil local Ball = nil local SummonerSmite = nil local SummonerFlash = nil local SummonerM = nil _G.SSScriptVersion = {1.42, "1.42", "|1.42|"} _G.SSScriptAuthor = "HeRoBaNd" -- BoL Tools Tracker -- assert(load(Base64Decode("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"), nil, "bt", _ENV))() TrackerLoad("B5YWDGqBAUGrO1AT") -- BoL Tools Tracker -- function OnLoad() local ToUpdate = {} ToUpdate.Version = _G.SSScriptVersion[1] ToUpdate.UseHttps = true ToUpdate.Host = "raw.githubusercontent.com" ToUpdate.VersionPath = "/HeRoBaNd/Scripts/master/HeRo%20Classe's.version" ToUpdate.ScriptPath = "/HeRoBaNd/Scripts/master/HeRo%20Classe's.lua" ToUpdate.SavePath = SCRIPT_PATH.."/HeRo Classe's.lua" ToUpdate.CallbackUpdate = function(NewVersion,OldVersion) print("[HeRo Classe's]: "..NewVersion.."") end ToUpdate.CallbackNoUpdate = function(OldVersion) print("[HeRo Classe's]: No Updates Found!") end ToUpdate.CallbackNewVersion = function(NewVersion) print("[HeRo Classe's]: New Version Found ("..NewVersion.."). Please wait until it's Downloaded!") end ToUpdate.CallbackError = function(NewVersion) print("[HeRo Classe's]: Error while Downloading! Please try again!") end ScriptUpdate(ToUpdate.Version, ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, ToUpdate.CallbackUpdate, ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion, ToUpdate.CallbackError) if myHero:GetSpellData(SUMMONER_1).name:find("SummonerDot") then SummunerIgnite = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerDot") then SummunerIgnite = SUMMONER_2 end if SummunerIgnite ~= nil then Ignite() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerHeal") then SummunerHeal = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerHeal") then SummunerHeal = SUMMONER_2 end if SummunerHeal ~= nil then Heal() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerBarrier") then SummonerBarrier = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerBarrier") then SummonerBarrier = SUMMONER_2 end if SummonerBarrier ~= nil then Barrier() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerExhaust") then SummonerExhaust = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerExhaust") then SummonerExhaust = SUMMONER_2 end if SummonerExhaust ~= nil then Exhaust() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerBoost") then SummonerBoost = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerBoost") then SummonerBoost = SUMMONER_2 end if SummonerBoost ~= nil then Cleanse() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerMana") then SummonerM = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerMana") then SummonerM = SUMMONER_2 end if SummonerM ~= nil then Clarity() end --[[ -------------WAIT UPL UPDATE-------------- if myHero:GetSpellData(SUMMONER_1).name:find("SummonerSnowball") then Ball = SUMMONER_1 SKey = "D" elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerSnowball") then Ball = SUMMONER_2 SKey = "F" end if Ball ~= nil then Poro_Shoot() end -------------WAIT UPL UPDATE-------------- ]]-- if myHero:GetSpellData(SUMMONER_1).name:find("SummonerSmite") then SummonerSmite = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerSmite") then SummonerSmite = SUMMONER_2 end if SummonerSmite ~= nil then Smite() end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerFlash") then SummonerFlash = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerFlash") then SummonerFlash = SUMMONER_2 end if SummonerFlash ~= nil then Flash() end end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Flash") function Flash:__init() self:Message("Flash", "Class loaded!", 3) self:Global_Menu() self:Loader() end function Flash:Global_Menu() self.Menu = scriptConfig("[HeRo] Flash Class", "HeRoFlash") self.Menu:addParam('Key', 'You Flash Key:', SCRIPT_PARAM_ONKEYDOWN, false, GetKey('N')) self.Menu:addParam('FlashMaxDistance', 'Max Distance If Wall:', SCRIPT_PARAM_ONOFF, false); self.Menu:addParam('FlashRange', 'Draw Flash Range:', SCRIPT_PARAM_ONOFF, true) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Flash:Loader() self.FlashDelay = 0 self.NoFlashSpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Flash:OnDraw() if SummonerFlash ~= nil then if self.Menu.FlashRange then if myHero:CanUseSpell(SummonerFlash) == READY then self.MaxDistance = self:GetMaxLocation(450) _G.DrawFPSCircle(myHero.x, myHero.z, 400, RGB(255, 0, 0), 7) _G.DrawFPSCircle(self.MaxDistance.x, self.MaxDistance.z, 50, RGB(255, 0, 0), 7) end end end end function Flash:OnTick() if SummonerFlash ~= nil then if self.Menu.Key then if self:CurrentTime() - self.FlashDelay > 250 then self.FlashDelay = self:CurrentTime() if myHero:CanUseSpell(SummonerFlash) == READY then self:UseFlash() if os.clock() - self.NoFlashSpamMsg > 2 then self.NoFlashSpamMsg = os.clock() self:Message("Flash", "Flash Casted!", 0) end end end end end end function Flash:UseFlash() self.MaxDistance = self:GetMaxLocation(450) self.UseSummonerFlash = true if self.Menu.FlashMaxDistance then if not self:IsWall() then return CastSpell(SummonerFlash, mousePos.x, mousePos.z); end end return CastSpell(SummonerFlash, self.MaxDistance.x, self.MaxDistance.z) end function Flash:IsWall() for I = 250, 450, 50 do self.MaxDistance = self:GetMaxLocation(I); if CalculatePath(myHero, D3DXVECTOR3(self.MaxDistance.x, self.MaxDistance.y, self.MaxDistance.z)).count ~= 2 and IsWall(D3DXVECTOR3(self.MaxDistance.x, self.MaxDistance.y, self.MaxDistance.z)) then return true end end return false end function Flash:GetMaxLocation(Range) self.MouseVector = Vector(mousePos.x, mousePos.z, mousePos.y) self.HeroVector = Vector(myHero.x, myHero.z, myHero.y) self.FlashVector = ((self.MouseVector - self.HeroVector):normalized() * Range) + self.HeroVector self.XV, self.ZV, self.YV = self.FlashVector:unpack() return {x = self.XV, y = self.YV, z = self.ZV} end function Flash:CurrentTime() return os.clock() * 1000 end function Flash:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Smite") function Smite:__init() self:Message("Smite", "Class loaded!", 3) self:Global_Menu() self:Loader() end function Smite:Global_Menu() self.Menu = scriptConfig("[HeRo] Smite Class", "HeRoSmite") self.Menu:addParam("Enable", "Enable Auto Smite:", SCRIPT_PARAM_ONKEYTOGGLE, true, string.byte("H")) self.Menu:addParam("DrawSmiteRange", "Draw Smite Range:" , SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("DrawSmiteProcess", "Draw Smite Process:", SCRIPT_PARAM_ONOFF, true) self.Menu:addSubMenu("Smite Monsters:", "Smite") if GetGame().map.shortName == "twistedTreeline" then self.Menu.Smite:addParam("Wraith", "Use Smite on: Wraith", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Golem", "Use Smite on: Golem", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Wolf", "Use Smite on: Wolf", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Spiderboss", "Use Smite on: SpiderBoss", SCRIPT_PARAM_ONOFF, true) else self.Menu.Smite:addParam("Dragon", "Use Smite on: Dragon", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Baron", "Use Smite on: Baron", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("RiftHerald", "Use Smite on: Baron", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Razorbeak", "Use Smite on: Wraith", SCRIPT_PARAM_ONOFF, false) self.Menu.Smite:addParam("Murkwolf", "Use Smite on: Wolf", SCRIPT_PARAM_ONOFF, false) self.Menu.Smite:addParam("Krug", "Use Smite on: Krug", SCRIPT_PARAM_ONOFF, false) self.Menu.Smite:addParam("Crab", "Use Smite on: Crab", SCRIPT_PARAM_ONOFF, false) self.Menu.Smite:addParam("Gromp", "Use Smite on: Gromp", SCRIPT_PARAM_ONOFF, false) self.Menu.Smite:addParam("Red", "Use Smite on: Red Buff", SCRIPT_PARAM_ONOFF, true) self.Menu.Smite:addParam("Blue", "Use Smite on: Blue Buff", SCRIPT_PARAM_ONOFF, true) end ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Smite:Loader() self.NoSmiteSpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Smite:GetSmiteDamage() self.level = myHero.level return math.max(20 * self.level + 370, 30 * self.level + 330, 40 * self.level + 240, 50 * self.level + 100) end function Smite:OnTick() self.SmiteDmg = self:GetSmiteDamage() for _, jminions in pairs(minionManager(MINION_JUNGLE, 1000, myHero, MINION_SORT_HEALTH_ASC).objects) do if not jminions.dead and jminions.visible and ValidTarget(jminions, 560) then local name = jminions.charName local name = name:sub(name:find("_")+1, name:len()) local name = name:sub(1, (name:find("_") or name:len()+1)-1) if self.Menu.Smite[name] then if myHero:CanUseSpell(SummonerSmite) == READY and GetDistance(myHero, jminions) <= 560 and self.SmiteDmg >= jminions.health then CastSpell(SummonerSmite, jminions) if os.clock() - self.NoSmiteSpamMsg > 2 then self.NoSmiteSpamMsg = os.clock() self:Message("Smite", "Smite Casted on: "..name.."!", 0) end end end end end end function Smite:OnDraw() if (self.Menu.DrawSmiteProcess and not myHero.dead and myHero:CanUseSpell(SummonerSmite) == READY) then self.SmiteDmg = self:GetSmiteDamage() for _, jminion in pairs(minionManager(MINION_JUNGLE, 1000, myHero, MINION_SORT_HEALTH_ASC).objects) do if not jminion.dead and jminion.visible and ValidTarget(jminion, 560) then local name = jminion.charName local name = name:sub(name:find("_")+1, name:len()) local name = name:sub(1, (name:find("_") or name:len()+1)-1) if self.Menu.Smite[name] then self.posMinion = WorldToScreen(D3DXVECTOR3(jminion.x, jminion.y, jminion.z)) self.SmiteProcess = math.round(100 - 100 * (jminion.health - self.SmiteDmg)/jminion.maxHealth) if myHero:CanUseSpell(SummonerSmite) == READY and GetDistance(myHero, jminion) <= 560 then DrawText("Smite Process - "..self.SmiteProcess.."%", 20, self.posMinion.x - GetTextArea("Smite Process - "..self.SmiteProcess.."%", 20).x/2, self.posMinion.y, ARGB(255,255,0,0)) DrawCircle(jminion.x, jminion.y, jminion.z, 1.5 * self.SmiteProcess, ARGB(255, 255 * (1 - self.SmiteProcess/100), 255 * self.SmiteProcess/100, 255*(1 - self.SmiteProcess/100))) DrawCircle(jminion.x, jminion.y, jminion.z, 150, ARGB(55, 55, 155, 55)) end end end end end if self.Menu.DrawSmiteRange and not myHero.dead and myHero:CanUseSpell(SummonerSmite) then _G.DrawFPSCircle(myHero.x, myHero.z, 560, RGB(255, 128, 0), 7) end end function Smite:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WAIT UPL UPDATE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WAIT UPL UPDATE-------------- --[[class("Poro_Shoot") function Poro_Shoot:__init() self:Message("Poro-Shoot", "Class loaded!", 3) self:PredictionLoader() self:Global_Menu() self:Loader() end function Poro_Shoot:PredictionLoader() require("UPL") self.UPL = UPL() ts = TargetSelector(TARGET_PRIORITY, 2000, DAMAGE_MAGIC, true) end function Poro_Shoot:Global_Menu() self.Menu = scriptConfig("[HeRo] Poro-Shoot Class", "HeRoPoro") self.Menu:addParam("Enable", "Enable Auto Poro-Shoot:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Key", "You Poro-Shoot Key:", SCRIPT_PARAM_ONKEYDOWN, false, GetKey(SKey)) self.Menu:addParam("Draw", "Enable Poro-Shoot Range Draw:", SCRIPT_PARAM_ONOFF, true) self.Menu:addSubMenu("Prediction:", "Prediction") self.UPL:AddToMenu(self.Menu.Prediction) --self.UPL:AddSpell(SummonerBall, {speed = 1600, delay = 0.33, range = 1580, width = 50, collision = true, aoe = false, type = "linear"}) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Poro_Shoot:Loader() self.NoPoroSpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Poro_Shoot:OnTick() if self.Menu.Enable and self.Menu.Key then print(self.UPL.spellData[SummonerBall]) ts:update() self:AutoPoroShoot() end end function Poro_Shoot:OnDraw() if not myHero.dead and self.Menu.Draw and myHero:CanUseSpell(SummonerBall) == READY then _G.DrawFPSCircle(myHero.x, myHero.z, 1580, RGB(255, 128, 0), 7) end end --local spellShot = {1200, 1600, 50, 0.33} --range, speed, width, cast time. function Poro_Shoot:AutoPoroShoot() if ValidTarget(ts.target) and ts.target.type == myHero.type then CastPosition, HitChance, HeroPosition = self.UPL:Predict(SummonerBall, myHero, ts.target) if CastPosition and HitChance > 0 then CastSpell(SummonerBall, CastPosition.x, CastPosition.z) if os.clock() - self.NoPoroSpamMsg > 2 then self.NoPoroSpamMsg = os.clock() self:Message("Poro-Shoot", "Poro Shooted on: "..ts.target, 0) end end end end function Poro_Shoot:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end]]-- -------------WAIT UPL UPDATE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Clarity") function Clarity:__init() self:Message("Clarity", "Class loaded!", 3) self:Loader() self:Global_Menu() end function Clarity:Global_Menu() self.Menu = scriptConfig("[HeRo] Clarity Class", "HeRoClarity") self.Menu:addParam("Enable", "Enable Auto Clarity:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("MinMana", "Mana to Use Auto Clarity:", SCRIPT_PARAM_SLICE, 20, 0, 100, 0) self.Menu:addParam("ComboEnable", "Use only in Combo Mode:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Key", "You Combo Mode Key:", SCRIPT_PARAM_ONKEYDOWN, false, 32) self.Menu:addParam("AllyClarity", "Use on Ally:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("AllyMinMana", "Ally Mana to Use Auto Clarity:", SCRIPT_PARAM_SLICE, 10, 0, 100, 0) self.Menu:addParam("Draw", "Enable Clarity Range Draw:", SCRIPT_PARAM_ONOFF, true) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Clarity:Loader() self.NoClaritySpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Clarity:OnTick() if (self.Menu.Enable and not self.Menu.ComboEnable) then self:AutoClarity() elseif self.Menu.Enable and self.Menu.ComboEnable and self.Menu.Key then self:AutoClarity() end if (self.Menu.Enable and self.Menu.AllyClarity) then self:AllyAutoClarity() end end function Clarity:OnDraw() if not myHero.dead and self.Menu.Draw and myHero:CanUseSpell(SummonerM) == READY then _G.DrawFPSCircle(myHero.x, myHero.z, 600, RGB(0, 153, 0), 7) end end function Clarity:AutoClarity() if SummonerM == nil then return end if ((myHero.mana*100)/myHero.maxMana) <= self.Menu.MinMana and myHero:CanUseSpell(SummonerM) == READY then CastSpell(SummonerM) if os.clock() - self.NoClaritySpamMsg > 2 then self.NoClaritySpamMsg = os.clock() self:Message("Clarity", "Clarity Casted on: Yourself", 0) end end end function Clarity:AllyAutoClarity() for k, ally in pairs(GetAllyHeroes()) do if not ally.dead and ally.visible then if SummonerM ~= nil and GetDistance(myHero, ally) <= 600 and myHero:CanUseSpell(SummonerM) == READY then if ((ally.mana*100)/ally.maxMana) <= self.Menu.AllyMinMana and not ally.dead then CastSpell(SummonerM) if os.clock() - self.NoClaritySpamMsg > 2 then self.NoClaritySpamMsg = os.clock() self:Message("Clarity", "Clarity Casted on: "..ally.charName, 0) end end end end end end function Clarity:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Cleanse") function Cleanse:__init() self:Message("Сleanse", "Class loaded!", 3) self:Global_Menu() self:Loader() end function Cleanse:Global_Menu() self.Menu = scriptConfig("[HeRo] Cleanse Class", "HeRoCleanse") self.Menu:addParam("Enable", "Enable Auto Cleanse:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Humanizer", "Use Humanizer:", SCRIPT_PARAM_SLICE, 200, 0, 1000, 0) self.Menu:addSubMenu("DeBuff_List", "DeBuff_List") self.Menu.DeBuff_List:addParam("Stun", "Remove Stun:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Silence", "Remove Silence:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Taunt", "Remove Taunt:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Root", "Remove Root:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Fear", "Remove Fear:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Charm", "Remove Charm:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Suppression", "Remove Suppression:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Blind", "Remove Blind:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("KnockUp", "Remove Knock-Up:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Exhaust", "Remove Exhaust:", SCRIPT_PARAM_ONOFF, true) self.Menu.DeBuff_List:addParam("Ignite", "Remove Ignite:", SCRIPT_PARAM_ONOFF, true) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Cleanse:Loader() self.NoCleanseSpamMsg = 0 AddApplyBuffCallback(function(unit, sourse, buff) self:OnApplyBuff(unit, sourse, buff) end) end function Cleanse:OnApplyBuff(unit, sourse, buff) if sourse and sourse.isMe and self.Menu.Enable then if buff.name == "SummonerExhaust" and self.Menu.DeBuff_List.Exhaust then self:AutoCleanse("Exhaust") end if buff.name == "SummonerDot" and self.Menu.DeBuff_List.Ignite then self:AutoCleanse("Ignite") end if buff.type == 5 and self.Menu.DeBuff_List.Stun then self:AutoCleanse("Stun") end if buff.type == 7 and self.Menu.DeBuff_List.Silence then self:AutoCleanse("Silence") end if buff.type == 8 and self.Menu.DeBuff_List.Taunt then self:AutoCleanse("Taunt") end if buff.type == 10 and self.Menu.DeBuff_List.Fear then self:AutoCleanse("Fear") end if buff.type == 11 and self.Menu.DeBuff_List.Root then self:AutoCleanse("Root") end if buff.type == 21 and self.Menu.DeBuff_List.Charm then self:AutoCleanse("Charm") end if buff.type == 24 and self.Menu.DeBuff_List.Suppression then self:AutoCleanse("Suppression") end if buff.type == 25 and self.Menu.DeBuff_List.Blind then self:AutoCleanse("Blind") end if buff.type == 29 and self.Menu.DeBuff_List.KnockUp then self:AutoCleanse("KnockUp") end end end function Cleanse:AutoCleanse(BuffType) if myHero:CanUseSpell(SummonerBoost) == READY then DelayAction(function() CastSpell(SummonerBoost) end, self.Menu.Humanizer/1000) if os.clock() - self.NoCleanseSpamMsg > 2 then self.NoCleanseSpamMsg = os.clock() self:Message("Cleanse", BuffType.." Removed!", 0) end end end function Cleanse:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Exhaust") function Exhaust:__init() self:Message("Exhaust", "Class loaded!", 3) self:Global_Menu() self:Loader() end function Exhaust:Global_Menu() self.Menu = scriptConfig("[HeRo] Exhaust Class", "HeRoExhaust") self.Menu:addParam("b5", "", SCRIPT_PARAM_INFO, "") self.Menu:addParam("Enable", "Enable Auto Exhaust:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Key", "You Auto Exhaust Key:", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("N")) self.Menu:addParam("Draw", "Enable Exhaust Range Draw:", SCRIPT_PARAM_ONOFF, true) ts = TargetSelector(TARGET_PRIORITY, 1000, DAMAGE_PHYSICAL) --self.Menu.:addTS(ts) --ts.name = "Exhaust Targeting" ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Exhaust:Loader() self.NoExhaustSpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Exhaust:OnTick() if self.Menu.Enable and self.Menu.Key then self:AutoExhoust() end end function Exhaust:OnDraw() if not myHero.dead and self.Menu.Draw and myHero:CanUseSpell(SummonerExhaust) then _G.DrawFPSCircle(myHero.x, myHero.z, 650, RGB(255, 128, 0), 7) end end function Exhaust:AutoExhoust() if myHero:CanUseSpell(SummonerExhaust) == READY then ts:update() if ValidTarget(ts.target) and ts.target.type == myHero.type then CastSpell(SummonerExhaust, ts.target) if os.clock() - self.NoExhaustSpamMsg > 2 then self.NoExhaustSpamMsg = os.clock() self:Message("Exhaust", "Exhaust Casted on: "..ts.target, 0) end end end end function Exhaust:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Barrier") function Barrier:__init() self:Message("Barrier", "Class loaded!", 3) self:Loader() self:Global_Menu() end function Barrier:Global_Menu() self.Menu = scriptConfig("[HeRo] Barrier Class", "HeRoBarrier") self.Menu:addParam("Enable", "Enable Auto Barrier:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("MinHealth", "Health to Use Auto Barrier:", SCRIPT_PARAM_SLICE, 20, 0, 100, 0) self.Menu:addParam("ComboEnable", "Use only in Combo Mode:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Key", "You Combo Mode Key:", SCRIPT_PARAM_ONKEYDOWN, false, 32) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Barrier:Loader() self.NoBarrierSpamMsg = 0 AddTickCallback(function() self:OnTick() end) end function Barrier:OnTick() if (self.Menu.Enable and not self.Menu.ComboEnable) then self:AutoBarrier() elseif self.Menu.Enable and self.Menu.ComboEnable and self.Menu.Key then self:AutoBarrier() end end function Barrier:AutoBarrier() if SummonerBarrier == nil then return end if ((myHero.health*100)/myHero.maxHealth) <= self.Menu.MinHealth and myHero:CanUseSpell(SummonerBarrier) == READY then CastSpell(SummonerBarrier) if os.clock() - self.NoBarrierSpamMsg > 2 then self.NoBarrierSpamMsg = os.clock() self:Message("Barrier", "Barrier Casted on: Yourself", 0) end end end function Barrier:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Heal") function Heal:__init() self:Message("Heal", "Class loaded!", 3) self:Loader() self:Global_Menu() end function Heal:Global_Menu() self.Menu = scriptConfig("[HeRo] Heal Class", "HeRoHeal") self.Menu:addParam("Enable", "Enable Auto Heal:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("MinHealth", "Health to Use Auto Heal:", SCRIPT_PARAM_SLICE, 20, 0, 100, 0) self.Menu:addParam("ComboEnable", "Use only in Combo Mode:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Key", "You Combo Mode Key:", SCRIPT_PARAM_ONKEYDOWN, false, 32) self.Menu:addParam("AllyHeal", "Use on Ally:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("AllyMinHealth", "Ally Health to Use Auto Heal:", SCRIPT_PARAM_SLICE, 10, 0, 100, 0) self.Menu:addParam("Draw", "Enable Heal Range Draw:", SCRIPT_PARAM_ONOFF, true) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Heal:Loader() self.NoHealSpamMsg = 0 self.invul = {"undyingrage", "sionpassivezombie", "aatroxpassivedeath", "chronoshift", "judicatorintervention"} AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Heal:OnTick() if (self.Menu.Enable and not self.Menu.ComboEnable) then self:AutoHeal() elseif (self.Menu.Enable and self.Menu.ComboEnable and self.Menu.Key) then self:AutoHeal() end if (self.Menu.Enable and self.Menu.AllyHeal) then self:AllyAutoHeal() end end function Heal:OnDraw() if not myHero.dead and self.Menu.Draw and myHero:CanUseSpell(SummunerHeal) == READY then _G.DrawFPSCircle(myHero.x, myHero.z, 840, RGB(0, 153, 0), 7) end end function Heal:CheckFail(unit) for i, buff in pairs(self.invul) do if TargetHaveBuff(buff, unit) then return true end end return false end function Heal:AutoHeal() if SummunerHeal == nil then return end if ((myHero.health*100)/myHero.maxHealth) <= self.Menu.MinHealth and myHero:CanUseSpell(SummunerHeal) == READY then CastSpell(SummunerHeal) if os.clock() - self.NoHealSpamMsg > 2 then self.NoHealSpamMsg = os.clock() self:Message("Heal", "Heal Casted on: Yourself", 0) end end end function Heal:AllyAutoHeal() for k, ally in pairs(GetAllyHeroes()) do if not ally.dead and ally.visible and not self:CheckFail(ally) then if SummunerHeal ~= nil and GetDistance(myHero, ally) <= 840 and myHero:CanUseSpell(SummunerHeal) == READY then if ((ally.health*100)/ally.maxHealth) <= self.Menu.AllyMinHealth and not ally.dead then CastSpell(SummunerHeal) if os.clock() - self.NoHealSpamMsg > 2 then self.NoHealSpamMsg = os.clock() self:Message("Heal", "Heal Casted on: "..ally.charName, 0) end end end end end end function Heal:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------WORKED FINE-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class("Ignite") function Ignite:__init() self:Message("Ignite", "Class loaded!", 3) self:Loader() self:Global_Menu() end function Ignite:Global_Menu() self.Menu = scriptConfig("[HeRo] Ignite Class", "HeRoIgnite") self.Menu:addParam("Enable", "Enable Auto Ignite:", SCRIPT_PARAM_ONOFF, true) self.Menu:addParam("Draw", "Enable Ignite Range Draw:", SCRIPT_PARAM_ONOFF, true) ------------------------------------------------------------------------------------------------------------------ self.Menu:addParam("b", "", SCRIPT_PARAM_INFO, "") if VIP_USER then self.Menu:addParam("b1", "User: "..GetUser().." (VIP)", SCRIPT_PARAM_INFO, "") else self.Menu:addParam("b2", "User: "..GetUser().." (FREE)", SCRIPT_PARAM_INFO, "") end self.Menu:addParam("b3", "Script Version: ".._G.SSScriptVersion[2], SCRIPT_PARAM_INFO, "") self.Menu:addParam("b4", "Script Author: ".._G.SSScriptAuthor, SCRIPT_PARAM_INFO, "") end function Ignite:Loader() self.NoIgniteSpamMsg = 0 AddTickCallback(function() self:OnTick() end) AddDrawCallback(function() self:OnDraw() end) end function Ignite:OnTick() if self.Menu.Enable then self:AutoIgnite() end end function Ignite:OnDraw() if not myHero.dead and self.Menu.Draw and myHero:CanUseSpell(SummunerIgnite) == READY then _G.DrawFPSCircle(myHero.x, myHero.z, 600, RGB(255, 0, 0), 7) end end function Ignite:AutoIgnite() for i, enemy in pairs(GetEnemyHeroes()) do if not enemy.dead and enemy.visible then if ValidTarget(enemy, 1000) then if Ignite ~= nil and GetDistance(myHero, enemy) <= 600 and myHero:CanUseSpell(SummunerIgnite) == READY then local igniteDmg = 50 + 20 * myHero.level if igniteDmg >= enemy.health and not enemy.dead then CastSpell(SummunerIgnite, enemy) if os.clock() - self.NoIgniteSpamMsg > 2 then self.NoIgniteSpamMsg = os.clock() self:Message("Ignite", "Ignite Casted on: "..enemy.charName, 0) end end end end end end end function Ignite:Message(class,msg,time) DelayAction(function() PrintChat("[HeRo "..class.." Class]: ".. msg .."") end, time) end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------_G.DrawFPSCircle Start-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- function _G.DrawLineA(x1, y1, x2, y2, color) DrawLine(x1, y1, x2, y2, 1, color) end function _G.DrawFPSCircle(x, z, radius, color, quality) for i = -radius * math.cos(math.pi/4), radius * math.cos(math.pi/4) - 1, radius * math.cos(math.pi/4)/quality do local v = WorldToScreen(D3DXVECTOR3((x + i), myHero.y, (z + math.sqrt(radius * radius - i * i)))) local c = WorldToScreen(D3DXVECTOR3((x + i), myHero.y, (z - math.sqrt(radius * radius - i * i)))) local k = WorldToScreen(D3DXVECTOR3((x + i + radius * math.cos(math.pi/4)/quality), myHero.y, (z + math.sqrt(radius * radius - (i + radius * math.cos(math.pi/4)/quality) * (i + radius * math.cos(math.pi/4)/quality))))) local n = WorldToScreen(D3DXVECTOR3((x + i + radius * math.cos(math.pi/4)/quality), myHero.y, (z - math.sqrt(radius * radius - (i + radius * math.cos(math.pi/4)/quality) * (i + radius * math.cos(math.pi/4)/quality))))) if (v.x > 0 and v.x < WINDOW_W) and (v.y > 0 and v.y < WINDOW_H) and (k.x > 0 and k.x < WINDOW_W) and (k.y > 0 and k.y < WINDOW_H) then _G.DrawLineA(v.x, v.y, k.x, k.y, color) end if (c.x > 0 and c.x < WINDOW_W) and (c.y > 0 and c.y < WINDOW_H) and (n.x > 0 and n.x < WINDOW_W) and (n.y > 0 and n.y < WINDOW_H) then _G.DrawLineA(c.x, c.y, n.x, n.y, color) end end for i = -radius * math.cos(math.pi/4), radius * math.cos(math.pi/4) - 1, radius * math.cos(math.pi/4)/quality do local v = WorldToScreen(D3DXVECTOR3((x + math.sqrt(radius * radius - i * i)), myHero.y, (z + i))) local c = WorldToScreen(D3DXVECTOR3((x - math.sqrt(radius * radius - i * i)), myHero.y, (z + i))) local k = WorldToScreen(D3DXVECTOR3((x + math.sqrt(radius * radius - (i + radius * math.cos(math.pi/4)/quality) * (i + radius * math.cos(math.pi/4)/quality))), myHero.y, (z + i + radius * math.cos(math.pi/4)/quality))) local n = WorldToScreen(D3DXVECTOR3((x - math.sqrt(radius * radius-(i + radius * math.cos(math.pi/4)/quality) * (i + radius * math.cos(math.pi/4)/quality))), myHero.y, (z + i + radius* math.cos(math.pi/4)/quality))) if (v.x > 0 and v.x < WINDOW_W) and (v.y > 0 and v.y < WINDOW_H) and (k.x > 0 and k.x < WINDOW_W) and (k.y > 0 and k.y < WINDOW_H) then _G.DrawLineA(v.x, v.y, k.x, k.y, color) end if (c.x > 0 and c.x < WINDOW_W) and (c.y > 0 and c.y < WINDOW_H) and (n.x > 0 and n.x < WINDOW_W) and (n.y > 0 and n.y < WINDOW_H) then _G.DrawLineA(c.x, c.y, n.x, n.y, color) end end end ------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------_G.DrawFPSCircle End-------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------- class "ScriptUpdate" function ScriptUpdate:__init(LocalVersion,UseHttps, Host, VersionPath, ScriptPath, SavePath, CallbackUpdate, CallbackNoUpdate, CallbackNewVersion,CallbackError) self.LocalVersion = LocalVersion self.Host = Host self.VersionPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '5' or '6')..'.php?script='..self:Base64Encode(self.Host..VersionPath)..'&rand='..math.random(99999999) self.ScriptPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '5' or '6')..'.php?script='..self:Base64Encode(self.Host..ScriptPath)..'&rand='..math.random(99999999) self.SavePath = SavePath self.CallbackUpdate = CallbackUpdate self.CallbackNoUpdate = CallbackNoUpdate self.CallbackNewVersion = CallbackNewVersion self.CallbackError = CallbackError AddDrawCallback(function() self:OnDraw() end) self:CreateSocket(self.VersionPath) self.DownloadStatus = 'Connect to Server for VersionInfo' AddTickCallback(function() self:GetOnlineVersion() end) end function ScriptUpdate:print(str) print(''..os.clock()..': '..str) end function ScriptUpdate:OnDraw() if self.DownloadStatus ~= 'Downloading Script (100%)' and self.DownloadStatus ~= 'Downloading VersionInfo (100%)'then DrawText('Download Status: '..(self.DownloadStatus or 'Unknown'),50,10,50,ARGB(0xFF,0xFF,0xFF,0xFF)) end end function ScriptUpdate:CreateSocket(url) if not self.LuaSocket then self.LuaSocket = require("socket") else self.Socket:close() self.Socket = nil self.Size = nil self.RecvStarted = false end self.LuaSocket = require("socket") self.Socket = self.LuaSocket.tcp() self.Socket:settimeout(0, 'b') self.Socket:settimeout(99999999, 't') self.Socket:connect('sx-bol.eu', 80) self.Url = url self.Started = false self.LastPrint = "" self.File = "" end function ScriptUpdate:Base64Encode(data) local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' return ((data:gsub('.', function(x) local r,b='',x:byte() for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end return r; end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) if (#x < 6) then return '' end local c=0 for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end return b:sub(c+1,c+1) end)..({ '', '==', '=' })[#data%3+1]) end function ScriptUpdate:GetOnlineVersion() if self.GotScriptVersion then return end self.Receive, self.Status, self.Snipped = self.Socket:receive(1024) if self.Status == 'timeout' and not self.Started then self.Started = true self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n") end if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then self.RecvStarted = true self.DownloadStatus = 'Downloading VersionInfo (0%)' end self.File = self.File .. (self.Receive or self.Snipped) if self.File:find('') then if not self.Size then self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1)) end if self.File:find('') then local _,ScriptFind = self.File:find('') local ScriptEnd = self.File:find('') if ScriptEnd then ScriptEnd = ScriptEnd - 1 end local DownloadedSize = self.File:sub(ScriptFind+1,ScriptEnd or -1):len() self.DownloadStatus = 'Downloading VersionInfo ('..math.round(100/self.Size*DownloadedSize,2)..'%)' end end if self.File:find('') then self.DownloadStatus = 'Downloading VersionInfo (100%)' local a,b = self.File:find('\r\n\r\n') self.File = self.File:sub(a,-1) self.NewFile = '' for line,content in ipairs(self.File:split('\n')) do if content:len() > 5 then self.NewFile = self.NewFile .. content end end local HeaderEnd, ContentStart = self.File:find('') local ContentEnd, _ = self.File:find('') if not ContentStart or not ContentEnd then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else self.OnlineVersion = (Base64Decode(self.File:sub(ContentStart + 1,ContentEnd-1))) self.OnlineVersion = tonumber(self.OnlineVersion) if self.OnlineVersion > self.LocalVersion then if self.CallbackNewVersion and type(self.CallbackNewVersion) == 'function' then self.CallbackNewVersion(self.OnlineVersion,self.LocalVersion) end self:CreateSocket(self.ScriptPath) self.DownloadStatus = 'Connect to Server for ScriptDownload' AddTickCallback(function() self:DownloadUpdate() end) else if self.CallbackNoUpdate and type(self.CallbackNoUpdate) == 'function' then self.CallbackNoUpdate(self.LocalVersion) end end end self.GotScriptVersion = true end end function ScriptUpdate:DownloadUpdate() if self.GotScriptUpdate then return end self.Receive, self.Status, self.Snipped = self.Socket:receive(1024) if self.Status == 'timeout' and not self.Started then self.Started = true self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n") end if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then self.RecvStarted = true self.DownloadStatus = 'Downloading Script (0%)' end self.File = self.File .. (self.Receive or self.Snipped) if self.File:find('') then if not self.Size then self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1)) end if self.File:find('') then local _,ScriptFind = self.File:find('') local ScriptEnd = self.File:find('') if ScriptEnd then ScriptEnd = ScriptEnd - 1 end local DownloadedSize = self.File:sub(ScriptFind+1,ScriptEnd or -1):len() self.DownloadStatus = 'Downloading Script ('..math.round(100/self.Size*DownloadedSize,2)..'%)' end end if self.File:find('') then self.DownloadStatus = 'Downloading Script (100%)' local a,b = self.File:find('\r\n\r\n') self.File = self.File:sub(a,-1) self.NewFile = '' for line,content in ipairs(self.File:split('\n')) do if content:len() > 5 then self.NewFile = self.NewFile .. content end end local HeaderEnd, ContentStart = self.NewFile:find('') local ContentEnd, _ = self.NewFile:find('') if not ContentStart or not ContentEnd then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else local newf = self.NewFile:sub(ContentStart+1,ContentEnd-1) local newf = newf:gsub('\r','') if newf:len() ~= self.Size then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end return end local newf = Base64Decode(newf) if type(load(newf)) ~= 'function' then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else local f = io.open(self.SavePath,"w+b") f:write(newf) f:close() if self.CallbackUpdate and type(self.CallbackUpdate) == 'function' then self.CallbackUpdate(self.OnlineVersion,self.LocalVersion) end end end self.GotScriptUpdate = true end end