├── Abilityrange ├── body.js ├── config.conf └── version.txt ├── AncientCreepStack ├── body.js └── version.txt ├── Antiinitiation ├── body.js └── version.txt ├── Enemymanabars ├── body.js └── version.txt ├── ExperienceRange ├── body.js └── version.txt ├── Ezmeepo ├── body.js └── version.txt ├── Ezprocast ├── body.js ├── config.conf ├── panel.xml └── version.txt ├── Eztechies ├── body.js ├── config.conf └── version.txt ├── IORelocateEscape ├── body.js └── version.txt ├── InvokerPanel ├── body.js ├── config.conf ├── invokerpanel.xml └── version.txt ├── Itemspanel ├── body.js ├── config.conf ├── panel.xml └── version.txt ├── Main ├── body.js └── version.txt ├── ManaAbuse ├── body.js └── version.txt ├── Perfectdagger ├── body.js └── version.txt ├── Rubickautosteal ├── body.js ├── config.conf └── version.txt ├── ScriptsPreview ├── body.js └── version.txt ├── Skillalert ├── body.js └── version.txt ├── Spawnboxes ├── body.js └── version.txt ├── Utils ├── body.js └── version.txt └── Zeusautoult ├── body.js └── version.txt /Abilityrange/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Показывает радиус абилов. Учитывает линзу. 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | try{ Game.Panels.AbilityRange.DeleteAsync(0) }catch(e){} 10 | for (i in Game.Subscribes.AbilityRange) 11 | try{ GameEvents.Unsubscribe( Game.Subscribes.AbilityRange[i] ) }catch(e){} 12 | for(i in Game.Particles.AbilityRange) 13 | try{ Particles.DestroyParticleEffect(Game.Particles.AbilityRange[i],Game.Particles.AbilityRange[i]) }catch(e){} 14 | 15 | Game.Particles.AbilityRange = [] 16 | Game.Subscribes.AbilityRange = [] 17 | Game.Panels.AbilityRange = [] 18 | var LensInInv = false 19 | var Config = [] 20 | 21 | function GetAbilityRange( Abil ){ 22 | var MyEnt = Players.GetPlayerHeroEntityIndex( Game.GetLocalPlayerID() ) 23 | var Range = 0 24 | var Lens = Entities.HasItemInInventory( MyEnt, 'item_aether_lens' ) 25 | Range = Abilities.GetCastRange( parseInt(Abil) ) 26 | var Behavior = Game.Behaviors( parseInt(Abil) ) 27 | if ( Lens && ( Behavior.indexOf(16)!=-1 || Behavior.indexOf(8)!=-1 ) ) 28 | Range += 200 29 | return Range 30 | } 31 | 32 | function InventoryChanged(data){ 33 | if (!AbilityRange.checked) 34 | return 35 | var MyID = Game.GetLocalPlayerID() 36 | if ( MyID==-1 ) 37 | return 38 | MyEnt = Players.GetPlayerHeroEntityIndex(MyID) 39 | if ( MyEnt==-1 ) 40 | return 41 | var Lens = Entities.HasItemInInventory( MyEnt, 'item_aether_lens' ) 42 | if (Lens == LensInInv) 43 | return 44 | LensInInv = Lens 45 | if ( Game.Particles.AbilityRange.length == 0 ) 46 | return 47 | for(var i in Game.Particles.AbilityRange){ 48 | Range = GetAbilityRange(i) 49 | Particles.DestroyParticleEffect(Game.Particles.AbilityRange[i],Game.Particles.AbilityRange[i]) 50 | if ( !Range || Range <= 0 ) 51 | return 52 | Game.Particles.AbilityRange[i] = Particles.CreateParticle("particles/ui_mouseactions/range_display.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW , MyEnt) 53 | Particles.SetParticleControl(Game.Particles.AbilityRange[i], 1, [Range,0,0]) 54 | } 55 | } 56 | 57 | Destroy=function(){ 58 | try{ Game.Panels.AbilityRange.DeleteAsync(0) }catch(e){} 59 | for (i in Game.Subscribes.AbilityRange.length) 60 | try{ GameEvents.Unsubscribe( Game.Subscribes.AbilityRange[i] ) }catch(e){} 61 | for(i in Game.Particles.AbilityRange) 62 | try{ Particles.DestroyParticleEffect(Game.Particles.AbilityRange[i],Game.Particles.AbilityRange[i]) }catch(e){} 63 | Game.Subscribes.AbilityRange = [] 64 | Game.Particles.AbilityRange = [] 65 | } 66 | 67 | function SkillLearned(data){ 68 | if (!AbilityRange.checked) 69 | return 70 | var MyID = Game.GetLocalPlayerID() 71 | var MyEnt = Players.GetPlayerHeroEntityIndex(MyID) 72 | if ( data.PlayerID != MyID ) 73 | return 74 | var LearnedAbil = Entities.GetAbilityByName( MyEnt, data.abilityname ) 75 | if ( LearnedAbil == -1 ) 76 | return 77 | Range = GetAbilityRange( LearnedAbil ) 78 | if ( data.abilityname == 'attribute_bonus' || Range<=0 ) 79 | return 80 | if (Game.Particles.AbilityRange[LearnedAbil]){ 81 | Particles.DestroyParticleEffect(Game.Particles.AbilityRange[LearnedAbil],Game.Particles.AbilityRange[LearnedAbil]) 82 | Game.Particles.AbilityRange[LearnedAbil] = Particles.CreateParticle("particles/ui_mouseactions/range_display.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW , MyEnt) 83 | Particles.SetParticleControl(Game.Particles.AbilityRange[LearnedAbil], 1, [Range,0,0]) 84 | } 85 | CheckBs = AbilityRangePanel.Children() 86 | for(c=0;c", false, false) 93 | CheckB.Children()[1].abilityname = Abilities.GetAbilityName(LearnedAbil) 94 | CheckB.SetAttributeInt('Skill', LearnedAbil) 95 | CheckB.SetPanelEvent( 'onactivate', chkboxpressed ) 96 | } 97 | 98 | function MapLoaded(data){ 99 | Destroy() 100 | AbilityRange.checked = false 101 | } 102 | 103 | function chkboxpressed(){ 104 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 105 | var CheckBs = AbilityRangePanel.Children() 106 | for(c=0;c", false, false ) 142 | GameUI.MovePanel(Game.Panels.AbilityRange,function(p){ 143 | var position = Game.Panels.AbilityRange.style.position.split(' ') 144 | Config.MainPanel.x = position[0] 145 | Config.MainPanel.y = position[1] 146 | Game.SaveConfig('abilityrange/config.conf', Config) 147 | }) 148 | Game.GetConfig('abilityrange/config.conf',function(a){ 149 | Config = a 150 | Game.Panels.AbilityRange.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 151 | Game.Panels.AbilityRange.style.flowChildren = Config.MainPanel.flow 152 | }); 153 | Game.AddCommand( '__AbilityRange_Rotate', function(){ 154 | if (Game.Panels.AbilityRange.style.flowChildren == 'right') 155 | Game.Panels.AbilityRange.style.flowChildren = 'down' 156 | else 157 | Game.Panels.AbilityRange.style.flowChildren = 'right' 158 | Config.MainPanel.flow = Game.Panels.AbilityRange.style.flowChildren 159 | Game.SaveConfig('abilityrange/config.conf', Config) 160 | }, '',0 ) 161 | }else{ 162 | Game.ScriptLogMsg('Script disabled: AbilityRange', '#ff0000') 163 | Destroy() 164 | return 165 | } 166 | AbilityRangePanel = Game.GetMainHUD().FindChildrenWithClassTraverse( 'AbilityRangePanel' )[0] 167 | for ( i = 0; i < Entities.GetAbilityCount(MyEnt ); i++){ 168 | Abil = Entities.GetAbility(MyEnt,i) 169 | if ( Abil == -1 ) 170 | continue 171 | Range = GetAbilityRange( Abil ) 172 | if (Abilities.GetAbilityName(Abil) == 'attribute_bonus' || Range<=0 ) 173 | continue 174 | Behavior = Abilities.GetBehavior( Abil ) 175 | CheckB = $.CreatePanel( "ToggleButton", AbilityRangePanel, "AbilityRangeSkill" ) 176 | CheckB.BLoadLayoutFromString( "", false, false) 177 | CheckB.Children()[1].abilityname = Abilities.GetAbilityName(Abil) 178 | CheckB.SetAttributeInt('Skill', Abil) 179 | CheckB.SetPanelEvent( 'onactivate', chkboxpressed ) 180 | } 181 | Game.Subscribes.AbilityRange.push( GameEvents.Subscribe('game_newmap', MapLoaded) ) 182 | Game.Subscribes.AbilityRange.push( GameEvents.Subscribe('dota_player_learned_ability', SkillLearned) ) 183 | Game.Subscribes.AbilityRange.push( GameEvents.Subscribe('dota_inventory_changed', InventoryChanged) ) 184 | Game.ScriptLogMsg('Script enabled: AbilityRange', '#00ff00') 185 | } 186 | 187 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "AbilityRange" ) 188 | Temp.SetPanelEvent( 'onactivate', AbilityRangeF ) 189 | Temp.BLoadLayoutFromString( '', false, false) 190 | var AbilityRange = $.GetContextPanel().FindChildTraverse( 'AbilityRange' ).Children()[0] -------------------------------------------------------------------------------- /Abilityrange/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"0.260417%","y":"4.537037%","flow":"down"}} -------------------------------------------------------------------------------- /Abilityrange/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /AncientCreepStack/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Автостак древних крипов 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | destroy() 10 | var uiw = Game.GetScreenWidth() 11 | var uih = Game.GetScreenHeight() 12 | var interval = 0 13 | var hpn = false 14 | var b = false 15 | var camp 16 | var z = 0 17 | var myid 18 | var ent 19 | var team 20 | var status 21 | var a = [ 22 | [ 23 | [-2625,-333,384], 24 | [-2576,-457,384], 25 | [-2517,-656,384], 26 | [-2675,-812,384], 27 | [-2826,-971,384], 28 | [-2987,-1121,384], 29 | [-3160,-1264,384], 30 | [-3292,-1416,384], 31 | [-3443,-1576,384], 32 | [-3621,-1706,384], 33 | [-3791,-1842,384], 34 | [-3959,-1983,384], 35 | [-4125,-2123,384] 36 | ], 37 | [ 38 | [3104,-769,256], 39 | [3033,-773,256], 40 | [2812,-786,256], 41 | [2602,-795,256], 42 | [2389,-772,256], 43 | [2207,-653,256], 44 | [2125,-447,256], 45 | [2085,-237,256], 46 | [2087,-15,256], 47 | [2152,187,256], 48 | [2267,360,256], 49 | [2322,575,256], 50 | [2400,736,256] 51 | ] 52 | ] 53 | var camps = [ 54 | [ 55 | [-2463,-160,384], 56 | 55, 57 | -0.05 58 | 59 | ], 60 | [ 61 | [3535,-786,256], 62 | 54.9, 63 | 0.1 64 | ] 65 | ] 66 | var ancients = { 67 | npc_dota_neutral_black_drake:[250,279], 68 | npc_dota_neutral_big_thunder_lizard:[223,393], 69 | npc_dota_neutral_granite_golem:[230,393] 70 | } 71 | var spots = [[-3307, 383, -2564, -413, 400],[3456, -384, 4543, -1151, 300]] 72 | function destroy(){ 73 | if(typeof Game.Subscribes.AncientCreepStack != 'undefined') 74 | GameEvents.Unsubscribe(Game.Subscribes.AncientCreepStack) 75 | try{Game.Panels.AncientCreepStack.DeleteAsync(0)}catch(e){} 76 | for(i in Game.Particles.AncientCreepStack) 77 | try{Particles.DestroyParticleEffect(Game.Particles.AncientCreepStack[i],Game.Particles.AncientCreepStack[i])}catch(e){} 78 | Game.Particles.AncientCreepStack = [] 79 | } 80 | function create(){ 81 | myid = Players.GetLocalPlayer() 82 | team = Players.GetTeam(myid)-2 83 | camp = camps[team] 84 | status = 0 85 | ent = Players.GetLocalPlayerPortraitUnit() 86 | if(!(Entities.IsControllableByPlayer(ent,myid)&&Entities.IsCreep(ent)&&Entities.IsValidEntity(ent)&&Entities.IsAlive(ent)&&Entities.IsRangedAttacker(ent))){ 87 | GameEvents.SendEventClientSide( 'antiaddiction_toast', {"message":"Выбранный юнит не является союзным подконтрольным крипом дальнего боя :(\nДоступна команда: __AncientCreepStack_Activate","duration":"5"}) 88 | AncientCreepStack.checked = false 89 | return 90 | } 91 | DrawBox(spots[team]) 92 | Game.Subscribes.AncientCreepStack = GameEvents.Subscribe("entity_hurt", function(a){ 93 | if(a.entindex_attacker==ent) 94 | b=true 95 | }) 96 | Game.Panels.AncientCreepStack = $.CreatePanel( "Panel", Game.GetMainHUD(), "AncientCreepStack" ) 97 | Game.Panels.AncientCreepStack.BLoadLayoutFromString( '\ 98 | \ 99 | \ 100 | \ 101 | \ 102 | \ 103 | \ 104 | \ 108 | \ 109 | ', false, false) 110 | Game.AnimatePanel( Game.Panels.AncientCreepStack, {"transform": "rotateX( 35deg );"}, 0.3, "ease-in", 0) 111 | Game.ScriptLogMsg('Script enabled: AncientCreepStack', '#00ff00') 112 | } 113 | if(!Game.AncientCreepStackCreate){ 114 | Game.AncientCreepStackCreate = true 115 | Game.AddCommand("__AncientCreepStack_Activate", create, "", 0) 116 | } 117 | function DrawBox(box){ 118 | Game.Particles.AncientCreepStack.push(DrawLineInGameWorld( [ box[0], box[1], box[4] ], [ box[0], box[3], box[4] ])) 119 | Game.Particles.AncientCreepStack.push(DrawLineInGameWorld( [ box[2], box[1], box[4] ], [ box[2], box[3], box[4] ])) 120 | Game.Particles.AncientCreepStack.push(DrawLineInGameWorld( [ box[0], box[1], box[4] ], [ box[2], box[1], box[4] ])) 121 | Game.Particles.AncientCreepStack.push(DrawLineInGameWorld( [ box[0], box[3], box[4] ], [ box[2], box[3], box[4] ])) 122 | } 123 | function DrawLineInGameWorld(a, b){ 124 | var temp = Particles.CreateParticle("particles/ui_mouseactions/bounding_area_view_a.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN, 0) 125 | Particles.SetParticleControl(temp, 0, a) 126 | Particles.SetParticleControl(temp, 1, b) 127 | return temp 128 | } 129 | function ComparePoints(a,b,c){ 130 | if(Math.abs(a[0]-b[0])>c||Math.abs(a[1]-b[1])>c||Math.abs(a[2]-b[2])>c) 131 | return false 132 | else 133 | return true 134 | } 135 | function GetNeutral(ent,maxrange){ 136 | var neutrals = Entities.GetAllEntitiesByClassname('npc_dota_creep_neutral') 137 | var mr = maxrange 138 | var n = -1 139 | var l = 0 140 | var e = -1 141 | var gold = 0 142 | var exp = 0 143 | for(i in neutrals){ 144 | var p = Entities.GetAbsOrigin(neutrals[i]) 145 | if(!Entities.IsAncient(neutrals[i])||Entities.NoHealthBar(neutrals[i])) 146 | continue 147 | var name = Entities.GetUnitName(neutrals[i]) 148 | if(typeof ancients[name] != 'undefined'){ 149 | gold+=ancients[name][0] 150 | exp+=ancients[name][1] 151 | } 152 | if(p[0]>spots[team][0]-500&&p[0]spots[team][3]-500) 153 | l++ 154 | if(Entities.GetRangeToUnit(ent,neutrals[i])400) 184 | hpn = false 185 | var xyz = Entities.GetAbsOrigin(ent) 186 | if(!Entities.IsRangedAttacker(ent)&&GetNeutral(ent,1000)[1]<=250) 187 | b=true 188 | if(time<50){ 189 | if(!ComparePoints(xyz,camp[0],5)&&status==0) 190 | move(ent,entnow,camp[0]) 191 | interval = 0.5 192 | } 193 | else 194 | interval = 0 195 | //if(Math.abs(time+(GetNeutral(ent,1000)[1]/Entities.GetIdealSpeed(ent))-(camp[1]-(GetNeutral(ent,1000)[2]*camp[2])))<=0.2&&!Entities.IsMoving(ent)&&status==0) ну и хуйня ебаная. 196 | if(time==52.5){ 197 | z=0 198 | b=false 199 | status=1 200 | } 201 | if(status==1&&!b){ 202 | GameUI.SelectUnit(ent,false) 203 | Game.AttackTarget(ent,GetNeutral(ent,1000)[0],false) 204 | GameUI.SelectUnit(entnow,false) 205 | }else if(status==1&&b){ 206 | if(z>=a[team].length-2){ 207 | status=0 208 | z=0 209 | b=false 210 | return 211 | } 212 | if(z==0){ 213 | z++ 214 | move(ent,entnow,a[team][z]) 215 | return 216 | } 217 | if(ComparePoints(xyz,a[team][z],150)){ 218 | z++ 219 | move(ent,entnow,a[team][z]) 220 | } 221 | } 222 | } 223 | function AncientCreepStackU(){ 224 | if ( !AncientCreepStack.checked || (Game.GetState()!=7 && Game.GetState()!=6)) 225 | return 226 | var xy = [Game.WorldToScreenX(spots[team][2]-400,spots[team][1],spots[team][4])+50,Game.WorldToScreenY(spots[team][2]-400,spots[team][1],spots[team][4]+50)] 227 | if(xy[0]<0||xy[1]<0) 228 | Game.Panels.AncientCreepStack.visible = false 229 | else 230 | Game.Panels.AncientCreepStack.visible = true 231 | Game.Panels.AncientCreepStack.style.position = (xy[0]/uiw*100)+'% '+(xy[1]/uih*100)+'% 0' 232 | var neu = GetNeutral(ent,1000) 233 | Game.Panels.AncientCreepStack.Children()[0].text='Stacks: '+((parseInt((neu[3]/3)*10))/10) 234 | Game.Panels.AncientCreepStack.Children()[1].text='Gold: ~'+neu[4] 235 | Game.Panels.AncientCreepStack.Children()[2].text='Exp: ~'+neu[5] 236 | var time = (parseInt((Game.GetDOTATime(false,false)%60)*10))/10 237 | Game.AnimatePanel( Game.Panels.AncientCreepStack, {"transform": "rotateX( 35deg ) translate3d( 0px, "+((time-Math.floor(time))*20)+"px, 0px );"}, 0.3, "ease-in-out", 0) 238 | } 239 | function move(ent,entnow,xyz){ 240 | GameUI.SelectUnit(ent,false) 241 | Game.MoveTo(ent,xyz,false) 242 | GameUI.SelectUnit(entnow,false) 243 | } 244 | var AncientCreepStackOnCheckBoxClick = function(){ 245 | if ( !AncientCreepStack.checked ){ 246 | destroy() 247 | Game.ScriptLogMsg('Script disabled: AncientCreepStack', '#ff0000') 248 | return 249 | } 250 | create() 251 | function f(){ $.Schedule( interval,function(){ 252 | AncientCreepStackF() 253 | if(AncientCreepStack.checked) 254 | f() 255 | })} 256 | f() 257 | function u(){ $.Schedule( 0,function(){ 258 | AncientCreepStackU() 259 | if(AncientCreepStack.checked) 260 | u() 261 | })} 262 | u() 263 | } 264 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "AncientCreepStack" ) 265 | Temp.SetPanelEvent( 'onactivate', AncientCreepStackOnCheckBoxClick ) 266 | Temp.BLoadLayoutFromString( '', false, false) 267 | var AncientCreepStack = $.GetContextPanel().FindChildTraverse( 'AncientCreepStack' ).Children()[0] -------------------------------------------------------------------------------- /AncientCreepStack/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Antiinitiation/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Автодизейбл вражеских инициаторов 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | //айтемы с помощью которых будем дизейблить 10 | var DisableItems = [ 11 | "item_orchid", 12 | "item_bloodthorn", 13 | "item_sheepstick", 14 | "item_cyclone" 15 | ] 16 | 17 | //абилки с помощью которых будем дизейблить 18 | var DisableAbils = [ 19 | "pudge_dismember", 20 | "lion_voodoo", 21 | "puck_waning_rift", 22 | "shadow_shaman_voodoo", 23 | "dragon_knight_dragon_tail", 24 | "rubick_telekinesis" 25 | ] 26 | 27 | //спелы врагов на которые будет реагировать скрипт 28 | var InitSpells = [ 29 | "tidehunter_ravage", 30 | "enigma_black_hole", 31 | "axe_berserkers_call", 32 | "magnataur_reverse_polarity", 33 | "legion_commander_duel", 34 | "beastmaster_primal_roar", 35 | "treant_overgrowth", 36 | "faceless_void_chronosphere", 37 | "batrider_flaming_lasso", 38 | "dark_seer_wall_of_replica", 39 | "slardar_slithereen_crush", 40 | "queenofpain_sonic_wave", 41 | "centaur_hoof_stomp", 42 | "sven_storm_bolt" 43 | ] 44 | 45 | var LenseBonusRange = 200 46 | var interval = 0 47 | var flag = false 48 | var threads = 3 //threads :D 49 | 50 | function AntiInitiationF(){ 51 | if ( !AntiInitiation.checked || flag ) 52 | return 53 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 54 | var item=-1 55 | c: // C: 56 | for(i in DisableItems) 57 | for(m = 0; m<6; m++){ 58 | var it = Entities.GetItemInSlot( MyEnt, m ) 59 | if(DisableItems[i]==Abilities.GetAbilityName(it) && Abilities.GetCooldownTimeRemaining(it)==0){ 60 | item = it 61 | break c; 62 | } 63 | } 64 | C: 65 | if(item==-1){ 66 | for(i in DisableAbils) 67 | for(m = 0; mitemrange && itemrange!=0) 89 | continue 90 | for(m=0;m', false, false) 134 | var AntiInitiation = $.GetContextPanel().FindChildTraverse( 'AntiInitiation' ).Children()[0] -------------------------------------------------------------------------------- /Antiinitiation/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Enemymanabars/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Показывает вражеские манабары. 5 | Не отображает у иллюзий. 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | 10 | try{ 11 | for(i in Game.Panels.EnemyManaBars) 12 | Game.Panels.EnemyManaBars[i].DeleteAsync(0) 13 | }catch(e){} 14 | Game.Panels.EnemyManaBars = [] 15 | var uiw = Game.GetMainHUD().actuallayoutwidth 16 | var uih = Game.GetMainHUD().actuallayoutheight 17 | 18 | function EnemyManaBarsF(){ 19 | var ids = Game.GetAllPlayerIDs() 20 | for(i in ids){ 21 | var ent = Players.GetPlayerHeroEntityIndex( ids[i] ) 22 | if(!Entities.IsEnemy(ent)) 23 | continue 24 | var hboffs = Game.HBOffsets[Entities.GetUnitName(ent)] 25 | if(Entities.GetAllHeroEntities().indexOf(ent)==-1 || !Entities.IsAlive(ent)){ 26 | if(Game.Panels.EnemyManaBars[i]) 27 | Game.Panels.EnemyManaBars[i].visible = false 28 | continue 29 | }else 30 | if(Game.Panels.EnemyManaBars[i]) 31 | Game.Panels.EnemyManaBars[i].visible = true 32 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 33 | var xyz = Entities.GetAbsOrigin(ent) 34 | var uix = Game.WorldToScreenX( xyz[0], xyz[1], (xyz[2]+hboffs) ) 35 | var uiy = Game.WorldToScreenY( xyz[0], xyz[1], (xyz[2]+hboffs) ) 36 | var uixp = uix/uiw*100 37 | var uiyp = uiy/uih*100 38 | if(Game.Panels.EnemyManaBars[i]) 39 | Game.Panels.EnemyManaBars[i].style.position = uixp+'% '+uiyp+'% 0' 40 | else{ 41 | Game.Panels.EnemyManaBars[i] = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'EzProcast1Items' ) 42 | Game.Panels.EnemyManaBars[i].BLoadLayoutFromString( '', false, false ) 43 | Game.Panels.EnemyManaBars[i].style.position = uixp+'% '+uiyp+'% 0' 44 | } 45 | var Mana = Entities.GetMana( parseInt( ent ) ) 46 | var MaxMana = Entities.GetMaxMana( parseInt( ent ) ) 47 | var ManaPercent = Math.floor( Mana / MaxMana * 100 ) 48 | Game.Panels.EnemyManaBars[i].Children()[0].style.width = ManaPercent+'%' 49 | Game.Panels.EnemyManaBars[i].Children()[1].text = ManaPercent+'%' 50 | Game.Panels.EnemyManaBars[i].Children()[2].text = Mana 51 | } 52 | } 53 | 54 | 55 | var EnemyManaBarsOnCheckBoxClick = function(){ 56 | if ( !EnemyManaBars.checked ){ 57 | try{ 58 | for(i in Game.Panels.EnemyManaBars) 59 | Game.Panels.EnemyManaBars[i].DeleteAsync(0) 60 | }catch(e){} 61 | Game.Panels.EnemyManaBars = [] 62 | Game.ScriptLogMsg('Script disabled: EnemyManaBars', '#ff0000') 63 | return 64 | } 65 | Game.Panels.EnemyManaBars = [] 66 | function f(){ $.Schedule( 0,function(){ 67 | if (EnemyManaBars.checked){ 68 | EnemyManaBarsF() 69 | f() 70 | } 71 | })} 72 | f() 73 | Game.ScriptLogMsg('Script enabled: EnemyManaBars', '#00ff00') 74 | } 75 | 76 | //шаблонное добавление чекбокса в панель 77 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "EnemyManaBars" ) 78 | Temp.SetPanelEvent( 'onactivate', EnemyManaBarsOnCheckBoxClick ) 79 | Temp.BLoadLayoutFromString( '', false, false) 80 | var EnemyManaBars = $.GetContextPanel().FindChildTraverse( 'EnemyManaBars' ).Children()[0] -------------------------------------------------------------------------------- /Enemymanabars/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /ExperienceRange/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Jтображает радиус получения опыта 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | var Range = 1300 10 | 11 | var exprangeLoad = function(){ 12 | try{ 13 | Particles.DestroyParticleEffect(Game.Particles.ExpRange,Game.Particles.ExpRange) 14 | } 15 | catch(e){} 16 | var MyEnt = Players.GetPlayerHeroEntityIndex( Game.GetLocalPlayerID() ) 17 | Game.Particles.ExpRange = Particles.CreateParticle("particles/ui_mouseactions/range_display.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW , MyEnt) 18 | Particles.SetParticleControl(Game.Particles.ExpRange, 1, [Range,0,0]) 19 | } 20 | 21 | function exprangeOnOff(){ 22 | if ( !ExpRange.checked ){ 23 | try{ 24 | Particles.DestroyParticleEffect(Game.Particles.ExpRange,Game.Particles.ExpRange) 25 | } 26 | catch(e){} 27 | Game.ScriptLogMsg('Script disabled: ExpRange', '#ff0000') 28 | 29 | }else{ 30 | exprangeLoad() 31 | Game.ScriptLogMsg('Script enabled: ExpRange', '#00ff00') 32 | } 33 | } 34 | 35 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "ExpRange" ) 36 | Temp.SetPanelEvent( 'onactivate', exprangeOnOff ) 37 | Temp.BLoadLayoutFromString( '', false, false) 38 | ExpRange = $.GetContextPanel().FindChildTraverse( 'ExpRange' ).Children()[0] -------------------------------------------------------------------------------- /ExperienceRange/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Ezmeepo/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Мгновенные пуффы к главному мипо и бросок сетки. 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | var interval = 0.1 10 | var spoof = false 11 | var uiw = Game.GetMainHUD().actuallayoutwidth 12 | var uih = Game.GetMainHUD().actuallayoutheight 13 | 14 | try{ 15 | Game.Panels.EzMeepo.DeleteAsync(0) 16 | GameEvents.Unsubscribe( Game.Subscribes.EzMeepoonchatmsg ) 17 | }catch(e){} 18 | 19 | 20 | function EzMeepoF(){ 21 | if ( !EzMeepo.checked ) 22 | return 23 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 24 | var meepo = Entities.GetAllEntitiesByName('npc_dota_hero_meepo') 25 | var mainmeepo = Players.GetLocalPlayerPortraitUnit() 26 | if(Entities.GetUnitName(mainmeepo)!='npc_dota_hero_meepo') 27 | return 28 | meepo.splice(meepo.indexOf(mainmeepo)) 29 | if(Game.spoof){ 30 | Game.Panels.EzMeepo.Children()[0].value+=1 31 | for(i in meepo){ 32 | var poof = Entities.GetAbilityByName( meepo[i], 'meepo_poof' ) 33 | var cd = Abilities.GetCooldownTimeRemaining(poof) 34 | if(cd!=0) 35 | continue 36 | if(!Abilities.IsInAbilityPhase(poof)){ 37 | GameUI.SelectUnit(meepo[i],false) 38 | Game.CastTarget(meepo[i],poof,mainmeepo,false) 39 | GameUI.SelectUnit(mainmeepo,false) 40 | } 41 | } 42 | }else{ 43 | Game.Panels.EzMeepo.Children()[0].value=0 44 | for(i in meepo){ 45 | var poof = Entities.GetAbilityByName( meepo[i], 'meepo_poof' ) 46 | var cd = Abilities.GetCooldownTimeRemaining(poof) 47 | if(cd!=0) 48 | continue 49 | if(Abilities.IsInAbilityPhase(poof)){ 50 | GameUI.SelectUnit(meepo[i],false) 51 | Game.EntStop(meepo[i], false) 52 | GameUI.SelectUnit(mainmeepo,false) 53 | } 54 | } 55 | } 56 | 57 | } 58 | 59 | 60 | var EzMeepoOnCheckBoxClick = function(){ 61 | if ( !EzMeepo.checked ){ 62 | try{ 63 | Game.Panels.EzMeepo.DeleteAsync(0) 64 | GameEvents.Unsubscribe( Game.Subscribes.EzMeepoonchatmsg ) 65 | }catch(e){} 66 | Game.ScriptLogMsg('Script disabled: EzMeepo', '#ff0000') 67 | return 68 | } 69 | if ( Players.GetPlayerSelectedHero(Game.GetLocalPlayerID()) != 'npc_dota_hero_meepo' ){ 70 | EzMeepo.checked = false 71 | Game.ScriptLogMsg('EzMeepo: Not Meepo', '#ff0000') 72 | return 73 | } 74 | 75 | Game.Functions.Meepo = function(){ 76 | var meepo = Entities.GetAllEntitiesByName('npc_dota_hero_meepo') 77 | var CursorXYZ = Game.ScreenXYToWorld( GameUI.GetCursorPosition()[0],GameUI.GetCursorPosition()[1] ) 78 | var mainmeepo = Players.GetLocalPlayerPortraitUnit() 79 | for(i in meepo){ 80 | var earthbind = Entities.GetAbilityByName( meepo[i], 'meepo_earthbind' ) 81 | var cd = Abilities.GetCooldownTimeRemaining(earthbind) 82 | if(cd!=0) 83 | continue 84 | GameUI.SelectUnit(meepo[i],false) 85 | Game.CastPosition(meepo[i], earthbind, CursorXYZ, false) 86 | GameUI.SelectUnit(mainmeepo,false) 87 | return 88 | } 89 | } 90 | GameEvents.Subscribe('game_newmap', function(){ 91 | Game.EzMeepoCreate = false 92 | Game.EzMeepoCreate = false 93 | }) 94 | if(!Game.EzMeepoCreate){ 95 | Game.EzMeepoCreate = true 96 | Game.AddCommand("__EzMeepo_Poof", function(){if(Game.spoof){Game.spoof=false}else{Game.spoof=true}}, "", 0) 97 | } 98 | if(!Game.EzMeepoCreate2){ 99 | Game.EzMeepoCreate2 = true 100 | Game.AddCommand("__EzMeepo_Earthbind", Game.Functions.Meepo, "", 0) 101 | } 102 | 103 | //циклически замкнутый таймер с проверкой условия с интервалом 'interval' 104 | function f(){ $.Schedule( interval,function(){ 105 | if (EzMeepo.checked){ 106 | EzMeepoF() 107 | f() 108 | } 109 | })} 110 | f() 111 | Game.Panels.EzMeepo = $.CreatePanel( "Panel", Game.GetMainHUD(), "EzTechiesSlider" ) 112 | Game.Panels.EzMeepo.BLoadLayoutFromString( '', false, false) 113 | Game.Panels.EzMeepo.Children()[0].max=15 114 | Game.Panels.EzMeepo.Children()[0].value=0 115 | 116 | function L(){ $.Schedule( 0,function(){ 117 | if (EzMeepo.checked){ 118 | var mainmeepo = Players.GetLocalPlayerPortraitUnit() 119 | if(Entities.GetUnitName(mainmeepo)!='npc_dota_hero_meepo'){ 120 | Game.Panels.EzMeepo.visible = false 121 | }else{ 122 | Game.Panels.EzMeepo.visible = true 123 | var xyz = Entities.GetAbsOrigin(mainmeepo) 124 | var uix = Game.WorldToScreenX( xyz[0], xyz[1], xyz[2]+125 ) 125 | var uiy = Game.WorldToScreenY( xyz[0], xyz[1], xyz[2]+125 ) 126 | var uixp = uix/uiw*100 127 | var uiyp = uiy/uih*100 128 | Game.Panels.EzMeepo.style.position = uixp+'% '+uiyp+'% 0' 129 | } 130 | } 131 | L() 132 | })} 133 | L() 134 | 135 | Game.ScriptLogMsg('Script enabled: EzMeepo', '#00ff00') 136 | } 137 | 138 | var EzMeepo = Game.AddScript(1,"EzMeepo",EzMeepoOnCheckBoxClick) -------------------------------------------------------------------------------- /Ezmeepo/version.txt: -------------------------------------------------------------------------------- 1 | 1.2 -------------------------------------------------------------------------------- /Ezprocast/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Самостоятельно комбинирование прокастов 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | try{Game.Panels.EzProcast.DeleteAsync(0)}catch(e){} 10 | 11 | var Config = [] 12 | 13 | Game.Functions.EzProcastF = function(){ 14 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 15 | var EntOnCursor = GameUI.FindScreenEntities( GameUI.GetCursorPosition() ) 16 | var CursorXYZ = Game.ScreenXYToWorld( GameUI.GetCursorPosition()[0],GameUI.GetCursorPosition()[1] ) 17 | var items = Game.Panels.EzProcast.Children()[2].Children() 18 | var abils = [] 19 | for(i in items){ 20 | if(items[i].Children()[0].paneltype=='DOTAAbilityImage'){ 21 | abils.push(items[i].Children()[0].abilityname) 22 | 23 | }else if(items[i].Children()[0].paneltype=='DOTAItemImage'){ 24 | abils.push(items[i].Children()[0].itemname) 25 | } 26 | } 27 | $.Msg('Abils: '+abils) 28 | Game.EntStop(MyEnt, false) 29 | for(i in abils){ 30 | var AbName = abils[i] 31 | var Abil = Game.GetAbilityByName(MyEnt,abils[i]) 32 | var EzPBeh = Game.Behaviors( Abil ) 33 | var EzPDUTT = Abilities.GetAbilityTargetTeam( Abil ) 34 | var myxyz = Entities.GetAbsOrigin(MyEnt) 35 | $.Msg('Team Target: '+EzPDUTT) 36 | $.Msg('Ability Behavior: '+EzPBeh) 37 | if(EzPBeh.indexOf(512)!=-1){ 38 | Game.ToggleAbil(MyEnt, Abil, true) 39 | continue 40 | 41 | }else if(EzPBeh.indexOf(4)!=-1){ 42 | 43 | Game.CastNoTarget(MyEnt, Abil, true) 44 | continue 45 | 46 | }else if(EzPBeh.indexOf(16)!=-1){ 47 | $.Msg(Game.PointDistance(CursorXYZ,myxyz)) 48 | if(AbName=="item_blink" && Game.PointDistance(CursorXYZ,myxyz)<=400) 49 | continue 50 | Game.CastPosition(MyEnt, Abil, CursorXYZ, true) 51 | continue 52 | 53 | }else if(AbName=="item_ethereal_blade" || AbName=="item_diffusal_blade" || AbName=="item_diffusal_blade_2"){ 54 | 55 | if( EntOnCursor.length!=0 && Entities.IsEnemy(EntOnCursor[0].entityIndex )) 56 | Game.CastTarget(MyEnt, Abil, EntOnCursor[0].entityIndex, true) 57 | else 58 | Game.CastTarget(MyEnt, Abil, MyEnt, true) 59 | 60 | }else if(EzPBeh.indexOf(8)!=-1 || EzPBeh.length == 0 ){ 61 | 62 | if( parseInt(EzPDUTT)==3 || parseInt(EzPDUTT)==1 ){ 63 | Game.CastTarget(MyEnt, Abil, MyEnt, true) 64 | }else if( parseInt(EzPDUTT)==4 || parseInt(EzPDUTT)==7 ){ 65 | Game.CastTarget(MyEnt, Abil, MyEnt, true) 66 | }else if( parseInt(EzPDUTT)==2 ){ 67 | Game.CastTarget(MyEnt, Abil, EntOnCursor[0].entityIndex, true) 68 | } 69 | 70 | } 71 | } 72 | } 73 | 74 | var MyInv = [] 75 | function UpdateUnv(){ 76 | if (!EzProcast.checked) 77 | return 78 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 79 | var Inv = Game.GetInventory(MyEnt) 80 | if(Game.CompareArrays(MyInv,Inv)){ 81 | 82 | return 83 | } 84 | MyInv = Inv 85 | try{Game.Panels.EzProcast.Children()[0].RemoveAndDeleteChildren()}catch(e){} 86 | var AbC = Entities.GetAbilityCount(MyEnt) 87 | for(i=0;i', false, false ) 93 | P.Children()[0].abilityname = Abilities.GetAbilityName( Ab ) 94 | } 95 | for(i in Inv){ 96 | Behaviors = Game.Behaviors(Inv[i]) 97 | if( Behaviors.indexOf(2)!=-1 ) 98 | continue 99 | var P = $.CreatePanel( 'Panel', Game.Panels.EzProcast.Children()[0], 'EzProcast1Items2' ) 100 | P.BLoadLayoutFromString( '', false, false ) 101 | P.Children()[0].itemname = Abilities.GetAbilityName( Inv[i] ) 102 | } 103 | } 104 | 105 | EzProcastOnOffLoad = function(){ 106 | Game.GetFile('ezprocast/panel.xml', function(a){ 107 | Game.Panels.EzProcast = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'EzProcast1' ) 108 | Game.Panels.EzProcast.BLoadLayoutFromString( a, false, false ) 109 | GameUI.MovePanel(Game.Panels.EzProcast,function(p){ 110 | var position = p.style.position.split(' ') 111 | Config.MainPanel.x = position[0] 112 | Config.MainPanel.y = position[1] 113 | Game.SaveConfig('ezprocast/config.conf', Config) 114 | }) 115 | Game.GetConfig('ezprocast/config.conf',function(a){ 116 | Config = a 117 | Game.Panels.EzProcast.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 118 | }); 119 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 120 | var AbC = Entities.GetAbilityCount( MyEnt ) 121 | for(i=0;i', false, false ) 127 | P.Children()[0].abilityname = Abilities.GetAbilityName( Ab ) 128 | } 129 | var Inv = Game.GetInventory(MyEnt) 130 | for(i in Inv){ 131 | Behaviors = Game.Behaviors(Inv[i]) 132 | if( Behaviors.indexOf(2)!=-1 ) 133 | continue 134 | var P = $.CreatePanel( 'Panel', Game.Panels.EzProcast.Children()[0], 'EzProcast1Items2' ) 135 | P.BLoadLayoutFromString( '', false, false ) 136 | P.Children()[0].itemname = Abilities.GetAbilityName( Inv[i] ) 137 | } 138 | }); 139 | } 140 | 141 | function EzProcastOnOff(){ 142 | if ( !EzProcast.checked ){ 143 | try{ 144 | Game.Panels.EzProcast.DeleteAsync(0) 145 | }catch(e){} 146 | Game.ScriptLogMsg('Script disabled: EzProcast-V0.1', '#ff0000') 147 | 148 | }else{ 149 | EzProcastOnOffLoad() 150 | function L(){ $.Schedule( 0,function(){ 151 | if (EzProcast.checked){ 152 | UpdateUnv() 153 | } 154 | L() 155 | })} 156 | L() 157 | GameEvents.Subscribe('game_newmap', function(){ 158 | Game.Functions.EzProcast = false 159 | Game.Functions.EzProcast = false 160 | }) 161 | if(!Game.Functions.EzProcast){ 162 | Game.Functions.EzProcast = true 163 | Game.AddCommand("__EzProcast", Game.Functions.EzProcastF, "", 0) 164 | } 165 | Game.ScriptLogMsg('Script enabled: EzProcast-V0.1', '#00ff00') 166 | } 167 | } 168 | var EzProcast = Game.AddScript(1,"EzProcast",EzProcastOnOff) -------------------------------------------------------------------------------- /Ezprocast/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"92.864586%","y":"5.277778%"}} -------------------------------------------------------------------------------- /Ezprocast/panel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Ezprocast/version.txt: -------------------------------------------------------------------------------- 1 | 1.2 -------------------------------------------------------------------------------- /Eztechies/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Автоматическое взрывание бочек, 5 | отображенние суммарного урона стака мин, 6 | автофорсстафф, учет бафов 7 | Автор: vk.com/exieros 8 | ///////////////////////////////////////////////// 9 | -----------------------End---------------------*/ 10 | 11 | var Config = [] 12 | //радиус срабатывания дистанционных мин 13 | var triggerradius = 300 14 | //интервал(в секундах) через который будет делаться проверка 15 | var interval = 0.1 16 | //урон мин 17 | var damageland = [150,190,225,260] 18 | //урон бочек без аганима 19 | var damage = [300,450,600] 20 | //с аганимом 21 | var scepterdamage = [450,600,750] 22 | 23 | //бафы, при наличии которых у вражеских героев, мины не будут срабатывать 24 | var IgnoreBuffs = [ 25 | "modifier_abaddon_borrowed_time", 26 | "modifier_brewmaster_primal_split", 27 | "modifier_omniknight_repel", 28 | "modifier_phoenix_supernova_hiding", 29 | "modifier_tusk_snowball_movement", 30 | "modifier_tusk_snowball_movement_friendly", 31 | "modifier_juggernaut_blade_fury", 32 | "modifier_medusa_stone_gaze", 33 | "modifier_nyx_assassin_spiked_carapace", 34 | "modifier_templar_assassin_refraction_absorb", 35 | "modifier_oracle_false_promise", 36 | "modifier_dazzle_shallow_grave", 37 | "modifier_treant_living_armor", 38 | "modifier_life_stealer_rage", 39 | "modifier_item_aegis" 40 | ] 41 | 42 | //де\бафы на вражеских героях, умножающие маг. урон 43 | var DebuffsAddMagicDmg = [ 44 | ["modifier_bloodthorn_debuff", 1.3], 45 | ["modifier_orchid_malevolence_debuff", 1.3], 46 | ["modifier_item_mask_of_madness_berserk", 1.25], 47 | ["modifier_bloodseeker_bloodrage", [1.25,1.3,1.35,1.4]], 48 | ["modifier_ursa_enrage", 0.2], 49 | ] 50 | 51 | //бафы на вражеских героях, абсорбирующие определенное количество маг урона(не %) 52 | var BuffsAbsorbMagicDmg = [ 53 | ["modifier_item_pipe_barrier", 400], 54 | ["modifier_item_hood_of_defiance_barrier", 400], 55 | ["modifier_item_infused_raindrop", 120], 56 | ["modifier_abaddon_aphotic_shield", [110,140,170,200]], 57 | ["modifier_ember_spirit_flame_guard", [50,200,350,500]] 58 | ] 59 | 60 | //бафы на минере умножающие урон 61 | var BuffsAddMagicDmgForMe = [ 62 | ["item_aether_lens", 1.05], 63 | ["modifier_bloodseeker_bloodrage", [1.25,1.3,1.35,1.4]] 64 | ] 65 | 66 | //Game.EzTechies.Remotemines = [] 67 | if(!Array.isArray(Game.EzTechies)){ 68 | Game.EzTechies = [] 69 | Game.EzTechies.Remotemines = [] 70 | } 71 | if(!Array.isArray(Game.EzTechiesLVLUp)){ 72 | Game.EzTechiesLVLUp = [] 73 | } 74 | 75 | for(i in Game.Particles.EzTechies){ 76 | try{Particles.DestroyParticleEffect(parseInt(Game.Particles.EzTechies[i]),parseInt(Game.Particles.EzTechies[i]))}catch(e){} 77 | } 78 | Game.Particles.EzTechies = [] 79 | 80 | try{ Game.Panels.EzTechies.DeleteAsync(0) }catch(e){} 81 | try{ GameEvents.Unsubscribe(parseInt(Game.Subscribes.EzTechiesRemoteMinesSpawn)) }catch(e){} 82 | try{ GameEvents.Unsubscribe(parseInt(Game.Subscribes.UltiUp)) }catch(e){} 83 | 84 | Game.Subscribes.UltiUp = GameEvents.Subscribe("dota_player_learned_ability", function(a){ 85 | if(a.PlayerID!=Game.GetLocalPlayerID()||a.abilityname!='techies_remote_mines') 86 | return 87 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 88 | var lvl = Abilities.GetLevel(Entities.GetAbility(MyEnt, 5)) 89 | Game.EzTechiesLVLUp[lvl-1] = Game.GetGameTime() 90 | }) 91 | 92 | Game.Subscribes.EzTechiesRemoteMinesSpawn = GameEvents.Subscribe('npc_spawned', function(a){ 93 | var ent = parseInt(a.entindex) 94 | if( Entities.IsEnemy(ent) ) 95 | return 96 | if(Entities.GetUnitName(ent)=='npc_dota_techies_remote_mine'){ 97 | radius = Particles.CreateParticle("particles/ui_mouseactions/range_display.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW , ent) 98 | Particles.SetParticleControl(radius, 1, [triggerradius,0,0]) 99 | Game.Particles.EzTechies.push(radius) 100 | } 101 | }) 102 | 103 | function EzTechiesF(){ 104 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 105 | var force = Game.GetAbilityByName(MyEnt,'item_force_staff') 106 | if ( !EzTechies.checked || Players.GetPlayerSelectedHero(Game.GetLocalPlayerID()) != 'npc_dota_hero_techies' ) 107 | return 108 | var Ulti = Entities.GetAbility(MyEnt, 5) 109 | var UltiLvl = Abilities.GetLevel(Ulti) 110 | if(UltiLvl==0) 111 | return 112 | var HEnts = Game.PlayersHeroEnts() 113 | for (i in HEnts) { 114 | var ent = parseInt(HEnts[i]) 115 | var buffsnames = Game.GetBuffsNames(ent) 116 | if ( !Entities.IsEnemy(ent) || Entities.IsMagicImmune(ent) || !Entities.IsAlive(ent) || Game.IntersecArrays(buffsnames, IgnoreBuffs)) 117 | continue 118 | var MagicResist = Entities.GetArmorReductionForDamageType( ent, 2 )*100 119 | var MagicDamagePercent = 100+MagicResist //% 120 | var buffs = Game.GetBuffs(ent) 121 | for(m in buffs) 122 | for(k in DebuffsAddMagicDmg) 123 | if(Buffs.GetName(ent,buffs[m]) === DebuffsAddMagicDmg[k][0]) 124 | if(Array.isArray(DebuffsAddMagicDmg[k][1])) 125 | MagicDamagePercent *= DebuffsAddMagicDmg[k][1][Abilities.GetLevel(Buffs.GetAbility(ent,buffs[i]))-1] 126 | else 127 | MagicDamagePercent *= DebuffsAddMagicDmg[k][1] 128 | var buffsme = Game.GetBuffs(MyEnt) 129 | for(m in buffsme) 130 | for(k in BuffsAddMagicDmgForMe) 131 | if(Buffs.GetName(ent,buffsme[m]) === BuffsAddMagicDmgForMe[k][0]) 132 | if(Array.isArray(BuffsAddMagicDmgForMe[k][1])) 133 | MagicDamagePercent *= BuffsAddMagicDmgForMe[k][1][Abilities.GetLevel(buffsme.GetAbility(ent,buffsme[i]))-1] 134 | else 135 | MagicDamagePercent *= BuffsAddMagicDmgForMe[k][1] 136 | if(MagicDamagePercent==0) 137 | continue 138 | for(m in buffs) 139 | for(k in BuffsAbsorbMagicDmg) 140 | if(Buffs.GetName(ent,buffs[m]) === BuffsAbsorbMagicDmg[k][0]) 141 | if(Array.isArray(BuffsAbsorbMagicDmg[k][1])) 142 | MagicDamagePercent -= BuffsAbsorbMagicDmg[k][1][Abilities.GetLevel(buffs.GetAbility(ent,buffs[i]))-1] 143 | else 144 | MagicDamagePercent -= BuffsAddMagicDmgForMe[k][1] 145 | var rmines = [] 146 | var rminessummdmg = 0 147 | var HP = Entities.GetHealth(ent) 148 | var mines = Entities.GetAllEntitiesByClassname('npc_dota_techies_mines') 149 | c: 150 | for(m in mines){ 151 | var rmine = mines[m] 152 | if(Entities.GetUnitName(rmine)!='npc_dota_techies_remote_mine') 153 | continue 154 | var buffs = Game.GetBuffs(rmine) 155 | if(buffs.length==0) 156 | continue 157 | for(k in buffs) 158 | if(Buffs.GetName(rmine,buffs[k])=='modifier_techies_deploy_trap') 159 | continue c; 160 | for(k in buffs) 161 | if(Buffs.GetName(rmine,buffs[k])=='modifier_techies_remote_mine') 162 | var time = Buffs.GetCreationTime(rmine, buffs[k]) 163 | for(z=0;z<=3;z++){ 164 | if(time>Game.EzTechiesLVLUp[z]){ 165 | if(Entities.HasScepter(MyEnt)) 166 | var dmg = scepterdamage[z]-scepterdamage[z]/100*MagicResist 167 | else 168 | var dmg = damage[z]-damage[z]/100*MagicResist 169 | if(Abilities.GetLevel(Entities.GetAbility(MyEnt, 5))==z+1) 170 | break 171 | } 172 | } 173 | if( Entities.GetRangeToUnit(rmine,ent)>triggerradius || !Entities.IsValidEntity(rmine)) 174 | continue 175 | else{ 176 | rmines.push(rmine) 177 | rminessummdmg += dmg 178 | if(rminessummdmg >= HP) 179 | break 180 | } 181 | } 182 | //rminessummdmg = rminessummdmg - rminessummdmg/100*MagicResist 183 | if(rmines.length!=0 || rminessummdmg!=0){ 184 | if ( rminessummdmg >= HP ){ 185 | for(n in rmines){ 186 | var rminesn = parseInt(rmines[n]) 187 | GameUI.SelectUnit(rminesn,false) 188 | Game.CastNoTarget(rminesn, Entities.GetAbilityByName(rminesn, 'techies_remote_mines_self_detonate'), false) 189 | } 190 | } 191 | }else{ 192 | if(force!=-1 && Entities.GetRangeToUnit(MyEnt,ent)<=800){ 193 | var rmines = [] 194 | var rminessummdmg = 0 195 | C: 196 | for(m in mines){ 197 | var rmine = mines[m] 198 | var buffs = Game.GetBuffs(rmine) 199 | if(buffs.length==0) 200 | continue 201 | for(k in buffs) 202 | if(Buffs.GetName(rmine,buffs[k])=='modifier_techies_deploy_trap') 203 | continue C; 204 | for(k in buffs) 205 | if(Buffs.GetName(rmine,buffs[k])=='modifier_techies_remote_mine') 206 | var time = Buffs.GetCreationTime(rmine, buffs[k]) 207 | for(z=0;z<=3;z++){ 208 | if(time>Game.EzTechiesLVLUp[z]){ 209 | if(Entities.HasScepter(MyEnt)) 210 | var dmg = scepterdamage[z]-scepterdamage[z]/100*MagicResist 211 | else 212 | var dmg = damage[z]-damage[z]/100*MagicResist 213 | if(Abilities.GetLevel(Entities.GetAbility(MyEnt, 5))==z+1) 214 | break 215 | } 216 | } 217 | var zxc = Entities.GetAbsOrigin(ent) 218 | var zxcm = Entities.GetAbsOrigin(rmine) 219 | var dforce = 600 220 | var forward = Entities.GetForward(ent) 221 | var newzxc = [forward[0]*dforce+zxc[0],forward[1]*dforce+zxc[1],forward[2]*dforce+zxc[2]] 222 | if(Game.PointDistance(newzxc,zxcm)>triggerradius) 223 | continue 224 | else 225 | { 226 | rmines.push(rmine) 227 | rminessummdmg += dmg 228 | if(rminessummdmg >= HP){ 229 | GameUI.SelectUnit(MyEnt,false) 230 | Game.CastTarget(MyEnt, force, ent, false) 231 | break 232 | } 233 | } 234 | } 235 | } 236 | } 237 | } 238 | } 239 | function RefreshR(){ 240 | var mines = Entities.GetAllEntitiesByClassname('npc_dota_techies_mines') 241 | for(i in Game.Particles.EzTechies){ 242 | Particles.DestroyParticleEffect(parseInt(Game.Particles.EzTechies[i]),parseInt(Game.Particles.EzTechies[i])) 243 | } 244 | Game.Particles.EzTechies = [] 245 | for(m in mines){ 246 | var rmine = mines[m] 247 | if(Entities.GetUnitName(rmine)!='npc_dota_techies_remote_mine') 248 | continue 249 | var particle = Particles.CreateParticle("particles/ui_mouseactions/range_display.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW , rmine) 250 | Particles.SetParticleControl(particle, 1, [triggerradius,0,0]) 251 | Game.Particles.EzTechies.push(particle) 252 | } 253 | } 254 | 255 | var EzTechiesCheckBoxClick = function(){ 256 | if ( !EzTechies.checked ){ 257 | try{Game.Panels.EzTechies.DeleteAsync(0)}catch(e){} 258 | for(i in Game.Particles.EzTechies){ 259 | Particles.DestroyParticleEffect(parseInt(Game.Particles.EzTechies[i]),parseInt(Game.Particles.EzTechies[i])) 260 | } 261 | Game.Particles.EzTechies = [] 262 | Game.ScriptLogMsg('Script disabled: EzTechies', '#ff0000') 263 | return 264 | } 265 | if ( Players.GetPlayerSelectedHero(Game.GetLocalPlayerID()) != 'npc_dota_hero_techies' ){ 266 | EzTechies.checked = false 267 | Game.ScriptLogMsg('EzTechies: Not Techies', '#ff0000') 268 | return 269 | } 270 | RefreshR() 271 | //циклически замкнутый таймер с проверкой условия с интервалом 'interval' 272 | Game.Panels.EzTechies = $.CreatePanel( "Panel", Game.GetMainHUD(), "EzTechiesSlider" ) 273 | Game.Panels.EzTechies.BLoadLayoutFromString( '', false, false) 274 | GameUI.MovePanel(Game.Panels.EzTechies,function(p){ 275 | var position = p.style.position.split(' ') 276 | Config.MainPanel.x = position[0] 277 | Config.MainPanel.y = position[1] 278 | Game.SaveConfig('eztechies/config.conf', Config) 279 | }) 280 | Game.GetConfig('eztechies/config.conf',function(a){ 281 | Config = a 282 | Game.Panels.EzTechies.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 283 | }); 284 | var slider = [] 285 | Game.Panels.EzTechies.Children()[0].min = 0 286 | Game.Panels.EzTechies.Children()[0].max = 500 287 | Game.Panels.EzTechies.Children()[0].value = triggerradius 288 | Game.Panels.EzTechies.Children()[0].lastval = Game.Panels.EzTechies.Children()[0].value 289 | function x(){ $.Schedule( 0.1,function(){ 290 | if(Game.Panels.EzTechies.Children()[0].value!=Game.Panels.EzTechies.Children()[0].lastval){ 291 | triggerradius=Game.Panels.EzTechies.Children()[0].value 292 | Game.Panels.EzTechies.Children()[1].Children()[1].text = Math.floor(triggerradius) 293 | RefreshR() 294 | } 295 | Game.Panels.EzTechies.Children()[0].lastval=Game.Panels.EzTechies.Children()[0].value 296 | if(EzTechies.checked) 297 | x() 298 | } 299 | )} 300 | x() 301 | function f(){ $.Schedule( interval,function(){ 302 | EzTechiesF() 303 | if(EzTechies.checked) 304 | f() 305 | } 306 | )} 307 | f() 308 | Game.ScriptLogMsg('Script enabled: EzTechies', '#00ff00') 309 | } 310 | 311 | //шаблонное добавление чекбокса в панель 312 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "EzTechies" ) 313 | Temp.SetPanelEvent( 'onactivate', EzTechiesCheckBoxClick ) 314 | Temp.BLoadLayoutFromString( '', false, false) 315 | var EzTechies = $.GetContextPanel().FindChildTraverse( 'EzTechies' ).Children()[0] -------------------------------------------------------------------------------- /Eztechies/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"91.979164%","y":"74.444443%"}} -------------------------------------------------------------------------------- /Eztechies/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /IORelocateEscape/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Автоматический тпаут при релокейте. 5 | и удивление врагов :))) 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | 10 | //ПИНГОЗАВИСИМЫЙ ПАРАМЕТР, С 0.1 У МЕНЯ ПРЕКРАСНО РАБОТАЛ СКРИПТ ПРИ ПИНГЕ 60 мс 11 | const tpouttime = 0.1 12 | 13 | var notify = false 14 | var cd = false 15 | function IORelocateEscapeF(){ 16 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 17 | var Buff = Game.GetBuffByName(MyEnt,'modifier_wisp_relocate_return') 18 | if(Buff==-1){ 19 | notify = false 20 | cd = false 21 | return 22 | } 23 | var tp = Game.GetAbilityByName(MyEnt,'item_tpscroll') 24 | if(tp==-1||Abilities.GetCooldownTimeRemaining(tp)!=0){ 25 | notify = false 26 | cd = false 27 | return 28 | } 29 | if(!notify){ 30 | notify = true 31 | GameEvents.SendEventClientSide( 'antiaddiction_toast', {"message":"Внимание, активирован IORelocateEscape!","duration":"3"}) 32 | } 33 | if((parseInt(Buffs.GetRemainingTime(MyEnt,Buff)*10))/10==tpouttime-10&&!cd){ 34 | cd = true 35 | Abilities.CreateDoubleTapCastOrder( tp, MyEnt ) 36 | } 37 | } 38 | 39 | var IORelocateEscapeOnCheckBoxClick = function(){ 40 | if ( !IORelocateEscape.checked ){ 41 | Game.ScriptLogMsg('Script disabled: IORelocateEscape', '#ff0000') 42 | return 43 | } 44 | function f(){ $.Schedule( 0,function(){ 45 | if (IORelocateEscape.checked){ 46 | f() 47 | IORelocateEscapeF() 48 | } 49 | })} 50 | f() 51 | Game.ScriptLogMsg('Script enabled: IORelocateEscape', '#00ff00') 52 | } 53 | var IORelocateEscape = Game.AddScript(1,"IORelocateEscape",IORelocateEscapeOnCheckBoxClick) -------------------------------------------------------------------------------- /IORelocateEscape/version.txt: -------------------------------------------------------------------------------- 1 | 1.1 -------------------------------------------------------------------------------- /InvokerPanel/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Панель показывает куллдаун скилов и манакост, 5 | так же позволяет сотворить заклинание кликом по иконке 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | 10 | var Config 11 | try{ Game.Panels.InvokerPanel.DeleteAsync(0) }catch(e){} 12 | for (i in Game.Subscribes.InvokerPanel) 13 | try{ GameEvents.Unsubscribe( Game.Subscribes.InvokerPanel[i] ) }catch(e){} 14 | Game.Subscribes.InvokerPanel = [] 15 | Game.Subscribes.InvokerPanel.push( GameEvents.Subscribe('game_newmap', RefreshIPS) ) 16 | Game.Subscribes.InvokerPanel.push( GameEvents.Subscribe('player_connect_full', RefreshIPS) ) 17 | Game.Subscribes.InvokerPanel.push( GameEvents.Subscribe('player_connect', RefreshIPS) ) 18 | Game.Subscribes.InvokerPanel.push( GameEvents.Subscribe('dota_player_pick_hero', RefreshIPS) ) 19 | Game.Subscribes.InvokerPanel.push( GameEvents.Subscribe('dota_player_update_hero_selection', RefreshIPS) ) 20 | 21 | 22 | function RefreshIPS(){ 23 | var MyID = Game.GetLocalPlayerID() 24 | try{ Game.Panels.InvokerPanel.DeleteAsync(0) }catch(e){} 25 | for (i in Game.Subscribes.InvokerPanel) 26 | try{ GameEvents.Unsubscribe( Game.Subscribes.InvokerPanel[i] ) }catch(e){} 27 | Game.Subscribes.InvokerPanel = [] 28 | } 29 | 30 | 31 | 32 | InvokerPanelF = function(){ 33 | var MyID = Game.GetLocalPlayerID() 34 | if ( MyID==-1 ){ 35 | InvokerPanel.checked = false 36 | try{ Game.Panels.InvokerPanel.DeleteAsync(0) }catch(e){} 37 | for (i in Game.Subscribes.InvokerPanel) 38 | try{ GameEvents.Unsubscribe( Game.Subscribes.InvokerPanel[i] ) }catch(e){} 39 | Game.Subscribes.InvokerPanel = [] 40 | return 41 | } 42 | if ( Players.GetPlayerSelectedHero(MyID) != 'npc_dota_hero_invoker' ){ 43 | //Game.ScriptLogMsg('InvokerPanel: Not Invoker', '#ff0000') 44 | InvokerPanel.checked = false 45 | try{ Game.Panels.InvokerPanel.DeleteAsync(0) }catch(e){} 46 | for (i in Game.Subscribes.InvokerPanel) 47 | try{ GameEvents.Unsubscribe( Game.Subscribes.InvokerPanel[i] ) }catch(e){} 48 | Game.Subscribes.InvokerPanel = [] 49 | return 50 | } 51 | if (InvokerPanel.checked){ 52 | Game.GetFile('Invokerpanel/invokerpanel.xml', function(a){ 53 | Game.Panels.InvokerPanel = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'InvokerPanelMain' ) 54 | Game.Panels.InvokerPanel.BLoadLayoutFromString( a, false, false ) 55 | GameUI.MovePanel(Game.Panels.InvokerPanel,function(p){ 56 | var position = p.style.position.split(' ') 57 | Config.MainPanel.x = position[0] 58 | Config.MainPanel.y = position[1] 59 | Game.SaveConfig('Invokerpanel/config.conf', Config) 60 | }) 61 | Game.GetConfig('Invokerpanel/config.conf',function(a){ 62 | Config = a[0] 63 | Game.Panels.InvokerPanel.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 64 | Game.Panels.InvokerPanel.style.flowChildren = Config.MainPanel.flow 65 | }) 66 | try{Game.AddCommand( '__InvokerPanel_Rotate', function(){ 67 | if (Game.Panels.InvokerPanel.Children()[0].style.flowChildren == 'right') 68 | Game.Panels.InvokerPanel.Children()[0].style.flowChildren = 'down' 69 | else 70 | Game.Panels.InvokerPanel.Children()[0].style.flowChildren = 'right' 71 | Config.MainPanel.flow = Game.Panels.InvokerPanel.style.flowChildren 72 | Game.SaveConfig('Invokerpanel/config.conf', Config) 73 | }, '',0 )}catch(e){} 74 | }) 75 | Game.ScriptLogMsg('Script enabled: InvokerPanel', '#00ff00') 76 | }else{ 77 | try{ Game.Panels.InvokerPanel.DeleteAsync(0) }catch(e){} 78 | for (i in Game.Subscribes.InvokerPanel) 79 | try{ GameEvents.Unsubscribe( Game.Subscribes.InvokerPanel[i] ) }catch(e){} 80 | Game.Subscribes.InvokerPanel = [] 81 | } 82 | } 83 | 84 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "Invokerpanel" ) 85 | Temp.SetPanelEvent( 'onactivate', InvokerPanelF ) 86 | Temp.BLoadLayoutFromString( '', false, false) 87 | var InvokerPanel = $.GetContextPanel().FindChildTraverse( 'Invokerpanel' ).Children()[0] 88 | 89 | RefreshIPS() -------------------------------------------------------------------------------- /InvokerPanel/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"97.083336%","y":"4.537037%","flow":"down"}} -------------------------------------------------------------------------------- /InvokerPanel/invokerpanel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /InvokerPanel/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Itemspanel/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Отображает панель вражеского инвентаря. 5 | Уведомляет при появлении важного предмета. 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | 10 | try{ Game.Panels.ItemsPanel01.DeleteAsync(0) }catch(e){} 11 | var Config = [] 12 | Config.MainPanel = [] 13 | Config.Items = [] 14 | Game.ItemsPanelItems = [] 15 | 16 | function NewItem(oldinv, newinv, ent){ 17 | for(i in newinv){ 18 | n = newinv[i] 19 | if ( oldinv.indexOf(n)==-1 && Config.Items.indexOf(Abilities.GetAbilityName(n))!= -1 ){ 20 | if(Config.Notify=="true"){ 21 | A = $.CreatePanel( 'Panel', Game.Panels.ItemsPanel01, 'Alert'+ent+n ) 22 | A.BLoadLayoutFromString( '', false, false ) 23 | A.Children()[0].heroname = Entities.GetUnitName(ent) 24 | A.Children()[2].itemname = Abilities.GetAbilityName(n) 25 | A.DeleteAsync( parseInt( Config.NotifyTime ) ) 26 | } 27 | if (Config.EmitSound=="true") 28 | Game.EmitSound( 'General.Buy' ) 29 | } 30 | } 31 | } 32 | 33 | function ItemsPanel01Every(){ 34 | if ( !ItemsPanel01.checked ){ 35 | Game.ItemsPanelItems = [] 36 | try{ Game.Panels.ItemsPanel01.DeleteAsync(0) }catch(e){} 37 | return 38 | } 39 | if(Game.GetState()!=7 && Game.GetState()!=6){ 40 | try{ Game.Panels.ItemsPanel01.DeleteAsync(0) }catch(e){} 41 | Game.ItemsPanelItems = [] 42 | ItemsPanel01.checked = false 43 | return 44 | } 45 | var ents = Game.PlayersEnemyHeroEnts() 46 | for(m in ents){ 47 | var Ent = ents[m] 48 | var P = Game.Panels.ItemsPanel01.Children()[m] 49 | if(P.Children()[0].heroname!=Entities.GetUnitName(Ent)) 50 | P.Children()[0].heroname=Entities.GetUnitName(Ent) 51 | var Inv = Game.GetInventory(Ent) 52 | if ( Array.isArray(Game.ItemsPanelItems[Ent])){ 53 | if ( Game.CompareArrays(Game.ItemsPanelItems[Ent],Inv) ) 54 | continue 55 | }else 56 | Game.ItemsPanelItems[Ent] = [] 57 | NewItem(Game.ItemsPanelItems[Ent],Inv,Ent) 58 | Game.ItemsPanelItems[Ent]=Inv 59 | for(z = 1;z<=6;z++){ 60 | P.Children()[z].itemname = Abilities.GetAbilityName( Entities.GetItemInSlot( Ent, z-1 ) ) 61 | } 62 | } 63 | } 64 | 65 | var ItemsPanel01Load = function(){ 66 | Game.GetFile('itemspanel/panel.xml', function(a){ 67 | Game.Panels.ItemsPanel01 = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'ItemsPanel1' ) 68 | Game.Panels.ItemsPanel01.BLoadLayoutFromString( a, false, false ) 69 | GameUI.MovePanel(Game.Panels.ItemsPanel01,function(p){ 70 | var position = p.style.position.split(' ') 71 | Config.MainPanel.x = position[0] 72 | Config.MainPanel.y = position[1] 73 | Game.SaveConfig('itemspanel/config.conf', Config) 74 | }) 75 | 76 | Game.GetConfig('itemspanel/config.conf',function(a){ 77 | Config = a 78 | Game.Panels.ItemsPanel01.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 79 | }); 80 | function f(){ $.Schedule( 0.5,function(){ 81 | if (ItemsPanel01.checked){ 82 | ItemsPanel01Every() 83 | f() 84 | } 85 | })} 86 | f() 87 | }); 88 | } 89 | 90 | function ItemsPanel01LoadOnOff(){ 91 | if ( !ItemsPanel01.checked ){ 92 | Game.ItemsPanelItems = [] 93 | try{ Game.Panels.ItemsPanel01.DeleteAsync(0) }catch(e){} 94 | Game.ScriptLogMsg('Script disabled: ItemsPanel', '#ff0000') 95 | 96 | }else{ 97 | ItemsPanel01Load() 98 | Game.ScriptLogMsg('Script enabled: ItemsPanel', '#00ff00') 99 | } 100 | } 101 | 102 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "ItemsPanel01" ) 103 | Temp.SetPanelEvent( 'onactivate', ItemsPanel01LoadOnOff ) 104 | Temp.BLoadLayoutFromString( '', false, false) 105 | var ItemsPanel01 = $.GetContextPanel().FindChildTraverse( 'ItemsPanel01' ).Children()[0] -------------------------------------------------------------------------------- /Itemspanel/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"83.333336%","y":"3.888889%"},"EmitSound":"true","Notify":"true","NotifyTime":"3","Items":["item_blink","item_gem","item_dust","item_ward_sentry","item_rapier","item_ward_observer"]} -------------------------------------------------------------------------------- /Itemspanel/panel.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /Itemspanel/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Main/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Необходимый для боковой панели скрипт. 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | GameEvents.Subscribe('game_newmap', MapLoaded) 10 | GameEvents.Subscribe('player_team', RefreshToggles) 11 | function RefreshToggles(){ 12 | MyID = Game.GetLocalPlayerID() 13 | Toggles = $('#scripts').Children() 14 | if ( MyID == -1 ) 15 | for ( var i in Toggles ) 16 | Toggles[i].enabled = false 17 | else 18 | for ( var i in Toggles ) 19 | Toggles[i].enabled = true 20 | } 21 | function MapLoaded(data){ 22 | if(!Game.ToggleSPanelR){ 23 | Game.ToggleSPanelR = true 24 | try{Game.AddCommand( '__ToggleSPanel', function(){ 25 | $.GetContextPanel().ToggleClass('PopupOpened') 26 | }, '',0 )}catch(e){} 27 | } 28 | GameUI.SetCameraDistance( slider.value ) 29 | RefreshToggles() 30 | } 31 | $('#Buttons').RemoveAndDeleteChildren() 32 | var Reload = $.CreatePanel( 'Panel', $('#Buttons'), 'Button1' ) 33 | Reload.BLoadLayoutFromString( '', false, false ) 34 | var Official = $.CreatePanel( 'Panel', $('#Buttons'), 'Button3' ) 35 | Official.BLoadLayoutFromString( '', false, false ) 36 | var slider = $.GetContextPanel().FindChildInLayoutFile( "CameraDistance" ) 37 | //КОСТЫЛЬ ОБНОВИТЬ XML 38 | $('#scripts').style.height = "300px" 39 | slider.min = 1000 40 | slider.max = 1800 41 | slider.value = 1134 42 | lastValue = slider.value 43 | $('#CamDist').text = 'Дальность камеры: ' + Math.floor(slider.value) 44 | function f(){ $.Schedule( 0,function(){ 45 | if (slider.value != lastValue) 46 | GameUI.SetCameraDistance( slider.value ) 47 | $('#CamDist').text = 'Дальность камеры: ' + Math.floor(slider.value) 48 | lastValue = slider.value 49 | f() 50 | })} 51 | f() 52 | Game.ScriptLogMsg('MainScript sucessfull loaded', '#00ff00') -------------------------------------------------------------------------------- /Main/version.txt: -------------------------------------------------------------------------------- 1 | 1.3 -------------------------------------------------------------------------------- /ManaAbuse/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Выкладывает все предметы дающие запас маны, 5 | использует арканы или соулринг и собирает обратно. 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | var ping = 0.25 10 | 11 | var AbuseManaItems = [ 12 | "item_arcane_boots", 13 | "item_guardian_greaves", 14 | "item_soul_ring" 15 | ] 16 | 17 | Game.Functions.ManaAbuseF = function(){ 18 | var MyEnt = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 19 | var XYZ = Entities.GetAbsOrigin( MyEnt ) 20 | var uix = Game.WorldToScreenX( XYZ[0], XYZ[1], (XYZ[2]) ) 21 | var uiy = Game.WorldToScreenY( XYZ[0], XYZ[1], (XYZ[2]) ) 22 | var Inv = Game.GetInventory(MyEnt) 23 | var DropItems = [] 24 | for(key in Inv){ 25 | var Item = parseInt(Inv[key]) 26 | var ItemName = Abilities.GetAbilityName( Item ) 27 | var ManaPool = 0 28 | ManaPool += Abilities.GetSpecialValueFor( Item, 'bonus_int' ) 29 | ManaPool += Abilities.GetSpecialValueFor( Item, 'bonus_intellect' ) 30 | ManaPool += Abilities.GetSpecialValueFor( Item, 'bonus_all_stats' ) 31 | ManaPool += Abilities.GetSpecialValueFor( Item, 'bonus_mana' ) 32 | if(ManaPool>0&&AbuseManaItems.indexOf(ItemName)==-1){ 33 | Game.DropItem(MyEnt,Item,XYZ,false) 34 | DropItems.push(Item) 35 | } 36 | } 37 | for(key in Inv){ 38 | var Item = parseInt(Inv[key]) 39 | var ItemName = Abilities.GetAbilityName( Item ) 40 | if(AbuseManaItems.indexOf(ItemName)!=-1) 41 | Game.CastNoTarget(MyEnt,Item,false) 42 | } 43 | $.Schedule(ping,function(){ 44 | var EntsOnCursor = GameUI.FindScreenEntities( [uix,uiy] ) 45 | for(key in EntsOnCursor){ 46 | var Item = parseInt(EntsOnCursor[key].entityIndex) 47 | Game.PuckupItem(MyEnt,Item,true) 48 | } 49 | }) 50 | 51 | } 52 | GameEvents.Subscribe('game_newmap', function(){ 53 | Game.Functions.ManaAbuse=true 54 | Game.AddCommand("__ManaAbuse", Game.Functions.ManaAbuseF, "", 0) 55 | }) 56 | if(!Game.Functions.ManaAbuse){ 57 | Game.Functions.ManaAbuse = true 58 | Game.AddCommand("__ManaAbuse", Game.Functions.ManaAbuseF, "", 0) 59 | } -------------------------------------------------------------------------------- /ManaAbuse/version.txt: -------------------------------------------------------------------------------- 1 | 1.3 -------------------------------------------------------------------------------- /Perfectdagger/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | При использовании блинка, блинкуется на 5 | максимальное расстояние (1200) без штрафа за 6 | превышение дальности (1/5) 7 | Автор: vk.com/exieros 8 | ///////////////////////////////////////////////// 9 | -----------------------End---------------------*/ 10 | 11 | var BlinkMaxRangeOnCheckBoxClick = function(){ 12 | if ( PerfectDagger.checked ){ 13 | GameUI.SetMouseCallback( function(eventName,arg){ 14 | var ab = Abilities.GetLocalPlayerActiveAbility() 15 | var abn = Abilities.GetAbilityName(ab) 16 | if ( GameUI.GetClickBehaviors()!==3 || abn!="item_blink" ) 17 | return false 18 | if ( eventName == "pressed" ) 19 | { 20 | if (arg === 0) 21 | { 22 | var myent = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 23 | var xyz = Entities.GetAbsOrigin(myent) 24 | var xyz2 = GameUI.GetScreenWorldPosition(GameUI.GetCursorPosition()) 25 | var vec = [xyz2[0]-xyz[0], xyz2[1]-xyz[1], xyz2[2]-xyz[2]] 26 | var range = Math.sqrt(Math.pow(vec[0],2)+Math.pow(vec[1],2)+Math.pow(vec[2],2)) 27 | if(range<=1200) 28 | return false 29 | var evec = [vec[0]/range, vec[1]/range, vec[2]/range] 30 | Game.CastPosition(myent,ab,[xyz[0]+evec[0]*1200, xyz[1]+evec[1]*1200, xyz[2]+evec[2]*1200],false) 31 | return true 32 | } 33 | if (arg === 1) 34 | return false 35 | } 36 | return false 37 | }) 38 | Game.ScriptLogMsg('Script enabled: PerfectDagger', '#00ff00') 39 | return 40 | } 41 | GameUI.SetMouseCallback( function(){}) 42 | Game.ScriptLogMsg('Script disabled: PerfectDagger', '#ff0000') 43 | } 44 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "PerfectDagger" ) 45 | Temp.SetPanelEvent( 'onactivate', BlinkMaxRangeOnCheckBoxClick ) 46 | Temp.BLoadLayoutFromString( '', false, false) 47 | var PerfectDagger = $.GetContextPanel().FindChildTraverse( 'PerfectDagger' ).Children()[0] -------------------------------------------------------------------------------- /Perfectdagger/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Rubickautosteal/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Автостил спеллов при игре за рубика. 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | try{ 10 | Game.Panels.RubickAutoSteal.DeleteAsync(0) 11 | }catch(e){} 12 | 13 | var interval = 0.1 14 | var LenseBonusRange = 200 15 | var flag = false 16 | var StealIfThere = true 17 | var LastSpells = {} 18 | var Config = [] 19 | 20 | function RubickAutoStealF(){ 21 | if ( !RubickAutoSteal.checked ){ 22 | try{ 23 | Game.Panels.RubickAutoSteal.DeleteAsync(0) 24 | }catch(e){} 25 | return 26 | } 27 | if(flag) 28 | return 29 | var AbPanel = Game.Panels.RubickAutoSteal.Children() 30 | var z = [] 31 | for(i in AbPanel) 32 | if(AbPanel[i].style.opacity==1 || AbPanel[i].style.opacity==null) 33 | z.push(AbPanel[i].Children()[0].abilityname) 34 | var MyEnt = parseInt( Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) ) 35 | var Ulti = Entities.GetAbilityByName(MyEnt, 'rubick_spell_steal' ) 36 | var UltiRange = Abilities.GetCastRange( Ulti ) 37 | if(Entities.HasItemInInventory( MyEnt, 'item_aether_lens')) 38 | UltiRange+=LenseBonusRange 39 | var UltiLvl = Abilities.GetLevel(Ulti) 40 | var UltiCd = Abilities.GetCooldownTimeRemaining( Ulti ) 41 | if(UltiLvl==0) 42 | return 43 | var HEnts = Game.PlayersHeroEnts() 44 | for(i in LastSpells) 45 | if(HEnts.indexOf(i)==-1) 46 | LastSpells[i]=-1 47 | for (i in HEnts) { 48 | ent = parseInt(HEnts[i]) 49 | if( !Entities.IsEnemy(ent) || Entities.IsMagicImmune(ent) || !Entities.IsAlive(ent)) 50 | continue 51 | var Range = Entities.GetRangeToUnit(MyEnt, ent) 52 | if(Range>UltiRange) 53 | continue 54 | var Count = Entities.GetAbilityCount( ent ) 55 | for(i=0;i0){ 72 | flag = true 73 | $.Schedule(0.3,function(){ flag=false }) 74 | GameUI.SelectUnit(MyEnt,false) 75 | Game.EntStop(MyEnt, false) 76 | Game.CastTarget(MyEnt, Ulti, ent, false) 77 | } 78 | } 79 | } 80 | } 81 | function RubickAutoStealCreatePanel(){ 82 | Game.Panels.RubickAutoSteal = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'RubickAutoStealAbilities' ) 83 | Game.Panels.RubickAutoSteal.BLoadLayoutFromString( '', false, false ) 84 | GameUI.MovePanel(Game.Panels.RubickAutoSteal,function(p){ 85 | var position = p.style.position.split(' ') 86 | Config.MainPanel.x = position[0] 87 | Config.MainPanel.y = position[1] 88 | Game.SaveConfig('rubickautosteal/config.conf', Config) 89 | }) 90 | Game.GetConfig('rubickautosteal/config.conf',function(a){ 91 | 92 | Config = a 93 | Game.Panels.RubickAutoSteal.style.position = Config.MainPanel.x + ' ' + Config.MainPanel.y + ' 0' 94 | }); 95 | var HEnts = Game.PlayersHeroEnts() 96 | for (i in HEnts) { 97 | ent = parseInt(HEnts[i]) 98 | if(!Entities.IsEnemy(ent)) 99 | continue 100 | var Count = Entities.GetAbilityCount( ent ) 101 | for(i=0;i', false, false ) 108 | Item.BLoadLayoutFromString( '', false, false ) 109 | Item.style.opacity = 0.1 110 | Item.Children()[0].abilityname=name 111 | } 112 | } 113 | } 114 | 115 | var RubickAutoStealOnCheckBoxClick = function(){ 116 | if ( !RubickAutoSteal.checked ){ 117 | try{ 118 | Game.Panels.RubickAutoSteal.DeleteAsync(0) 119 | }catch(e){} 120 | Game.ScriptLogMsg('Script disabled: RubickAutoSteal', '#ff0000') 121 | return 122 | } 123 | if ( Players.GetPlayerSelectedHero(Game.GetLocalPlayerID()) != 'npc_dota_hero_rubick' ){ 124 | RubickAutoSteal.checked = false 125 | Game.ScriptLogMsg('RubickAutoSteal: Not Rubick', '#ff0000') 126 | return 127 | } 128 | //циклически замкнутый таймер с проверкой условия с интервалом 'interval' 129 | function f(){ $.Schedule( interval,function(){ 130 | RubickAutoStealF() 131 | if(RubickAutoSteal.checked) 132 | f() 133 | })} 134 | f() 135 | RubickAutoStealCreatePanel() 136 | Game.ScriptLogMsg('Script enabled: RubickAutoSteal', '#00ff00') 137 | } 138 | 139 | //шаблонное добавление чекбокса в панель 140 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "RubickAutoSteal" ) 141 | Temp.SetPanelEvent( 'onactivate', RubickAutoStealOnCheckBoxClick ) 142 | Temp.BLoadLayoutFromString( '', false, false) 143 | var RubickAutoSteal = $.GetContextPanel().FindChildTraverse( 'RubickAutoSteal' ).Children()[0] -------------------------------------------------------------------------------- /Rubickautosteal/config.conf: -------------------------------------------------------------------------------- 1 | {"MainPanel":{"x":"97.395836%","y":"4.166667%"}} -------------------------------------------------------------------------------- /Rubickautosteal/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /ScriptsPreview/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Добавление демопанельки в игру, превью скриптов 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | try{ Game.Panels.ScriptMovies.DeleteAsync(0) }catch(e){} 10 | 11 | Game.Panels.ScriptMovies = $.CreatePanel( 'Panel', Game.GetMainHUD(), 'ScriptMovies' ) 12 | Game.Panels.ScriptMovies.BLoadLayoutFromString( '\ 13 | \ 14 | \ 15 | \ 16 | \ 17 | \ 18 | \ 19 | \ 20 | \ 21 | \ 22 | \ 23 | \ 24 | ', false, false ) 25 | var ScriptMoviesButton = $.CreatePanel( 'Panel', $('#Buttons'), 'Button4' ) 26 | ScriptMoviesButton.BLoadLayoutFromString( '', false, false ) 27 | ScriptMoviesButton.SetPanelEvent('onactivate',function(){Game.AnimatePanel( Game.Panels.ScriptMovies, {"position": "0 0 0;"}, 0.5, "linear", 0)}) 28 | var ScriptContainer = Game.Panels.ScriptMovies.Children()[0].Children()[0] 29 | var VideoContainer = Game.Panels.ScriptMovies.Children()[0].Children()[1] 30 | var t = $.CreatePanel( 'Panel', ScriptContainer, 'CloseButton' ) 31 | t.BLoadLayoutFromString( '', false, false ) 32 | t.SetPanelEvent('onactivate',function(){ 33 | Game.AnimatePanel( Game.Panels.ScriptMovies, {"position": "-100% 0 0;"}, 0.5, "linear", 0) 34 | VideoContainer.Stop() 35 | }) 36 | function AddScriptToMovies(cont,videocont,scriptname,url){ 37 | var t = $.CreatePanel( 'Panel', cont, 'ButtonMovie' ) 38 | t.BLoadLayoutFromString( '', false, false ) 39 | t.SetPanelEvent('onactivate',function(){ 40 | videocont.SetMovie(url) 41 | videocont.SetPlaybackVolume(100) 42 | videocont.SetRepeat(true) 43 | videocont.Play() 44 | }) 45 | } 46 | AddScriptToMovies(ScriptContainer,VideoContainer,'Ability Range','https://www.dropbox.com/s/il40ih7j8ar2x33/abilityRange.webm?dl=1') 47 | AddScriptToMovies(ScriptContainer,VideoContainer,'Anti Initiation','https://www.dropbox.com/s/oya0domynxtsd6l/Antinitiation.webm?dl=1') 48 | AddScriptToMovies(ScriptContainer,VideoContainer,'Enemy Chat','https://www.dropbox.com/s/z82lurbl9p3tqr3/enemychat.webm?dl=1') 49 | AddScriptToMovies(ScriptContainer,VideoContainer,'Enemy ManaBars','https://www.dropbox.com/s/jw77jn0jkf78lou/enemymanabars.webm?dl=1') 50 | AddScriptToMovies(ScriptContainer,VideoContainer,'Ez Meepo','https://www.dropbox.com/s/8a8p0apyfaoi62q/ezmeepo.webm?dl=1') 51 | AddScriptToMovies(ScriptContainer,VideoContainer,'Ez Techies','https://www.dropbox.com/s/444ubgddm5crxm4/eztechis.webm?dl=1') 52 | AddScriptToMovies(ScriptContainer,VideoContainer,'Invoker Panel','https://www.dropbox.com/s/k0us91u4ux6w33w/invokerpanel.webm?dl=1') 53 | AddScriptToMovies(ScriptContainer,VideoContainer,'Items Panel','https://www.dropbox.com/s/dow8kg73bmnhnav/Itempanel11.webm?dl=1') 54 | AddScriptToMovies(ScriptContainer,VideoContainer,'Skill Allert','https://www.dropbox.com/s/sqfyqrsy8vub501/skillalert.webm?dl=1') 55 | AddScriptToMovies(ScriptContainer,VideoContainer,'Zeus AutoUlt','https://www.dropbox.com/s/97hnnuippyqhfer/zeusautoult.webm?dl=1') -------------------------------------------------------------------------------- /ScriptsPreview/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Skillalert/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Показывает анимацию каста следующих скиллов: 5 | стан лины, санстрайк, торрент кунки, 6 | разгон бары, шар тускара. 7 | Автор: vk.com/exieros 8 | ///////////////////////////////////////////////// 9 | -----------------------End---------------------*/ 10 | 11 | var modifiers = [ 12 | ["modifier_invoker_sun_strike", 1.7], 13 | ["modifier_kunkka_torrent_thinker", 1.6], 14 | ["modifier_lina_light_strike_array", 0.5], 15 | ["modifier_leshrac_split_earth_thinker", 0.35], 16 | ["modifier_spirit_breaker_charge_of_darkness_vision", 1.5], 17 | ["modifier_tusk_snowball_visible", 1.5] 18 | ] 19 | 20 | var z = [] 21 | 22 | function SAllertEvery(){ 23 | try{if (!SkillAlert.checked){return}}catch(e){} 24 | thinkers = Entities.GetAllEntitiesByName('npc_dota_thinker') 25 | 26 | var User = Players.GetPlayerHeroEntityIndex(Game.GetLocalPlayerID()) 27 | 28 | for ( var m in thinkers){ 29 | var ent = thinkers[m] 30 | var xyz = Entities.GetAbsOrigin(ent) 31 | var buffsnames = Game.GetBuffsNames(ent) 32 | if(buffsnames.length!=1) 33 | continue 34 | var f = false 35 | for(i in modifiers) 36 | { 37 | Game.ScriptLogMsg( buffsnames[0], '#00ff00') 38 | if(modifiers[i][0]==buffsnames[0]) 39 | CreateTimerParticle(xyz,modifiers[i][1]) 40 | } 41 | } 42 | 43 | var UserBuffs = Game.GetBuffsNames(User) 44 | var xyz = Entities.GetAbsOrigin(User) 45 | 46 | for (ibuff in UserBuffs) 47 | for(imod in modifiers) 48 | { 49 | //Game.ScriptLogMsg( 'My buffs: ' + UserBuffs[ibuff], '#00ff00') 50 | if (modifiers[imod][0]==UserBuffs[ibuff]) 51 | { 52 | if ((modifiers[imod][0]=="modifier_spirit_breaker_charge_of_darkness_vision")||(modifiers[imod][0]=="modifier_tusk_snowball_visible")) 53 | CreateFollowParticle(modifiers[imod][1],"particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge_target_mark.vpcf",User) 54 | else 55 | CreateTimerParticle(xyz,modifiers[imod][1]) 56 | } 57 | } 58 | } 59 | 60 | function CreateFollowParticle(time,particlepath,someobj,ent){ 61 | if(z.indexOf(ent)!=-1) 62 | return 63 | var p = Particles.CreateParticle(particlepath, ParticleAttachment_t.PATTACH_OVERHEAD_FOLLOW, someobj) 64 | Particles.SetParticleControl(p, 0, 0) 65 | z.push(ent) 66 | $.Schedule(time+0.1,function(){ Particles.DestroyParticleEffect(p,p); z.splice(z.indexOf(ent),1); }) 67 | } 68 | 69 | function CreateTimerParticle(xyz,time,ent){ 70 | if(z.indexOf(ent)!=-1) 71 | return 72 | var p = Particles.CreateParticle("particles/neutral_fx/roshan_spawn.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN, 0) 73 | Particles.SetParticleControl(p, 0, xyz) 74 | z.push(ent) 75 | $.Schedule(time+0.1,function(){ Particles.DestroyParticleEffect(p,p); z.splice(z.indexOf(ent),1); }) 76 | } 77 | 78 | function SkillAlertChkBox(){ 79 | if ( !SkillAlert.checked ){ 80 | Game.ScriptLogMsg('Script disabled: SkillAlert', '#ff0000') 81 | }else{ 82 | function f(){ $.Schedule( 0.1,function(){ 83 | try{if (SkillAlert.checked){ 84 | SAllertEvery() 85 | f() 86 | }}catch(e){} 87 | })} 88 | f() 89 | Game.ScriptLogMsg('Script enabled: SkillAlert', '#00ff00') 90 | } 91 | } 92 | 93 | var Temp = $.CreatePanel( "Panel", $('#scripts'), "SkillAlert" ) 94 | Temp.SetPanelEvent( 'onactivate', SkillAlertChkBox ) 95 | Temp.BLoadLayoutFromString( '', false, false) 96 | var SkillAlert = $.GetContextPanel().FindChildTraverse( 'SkillAlert' ).Children()[0] -------------------------------------------------------------------------------- /Skillalert/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 -------------------------------------------------------------------------------- /Spawnboxes/body.js: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------- 2 | //////////////// vk.com/d2jscripts ////////////// 3 | ///////////////////////////////////////////////// 4 | Показывает границы лагерей нейтральных крипов 5 | Автор: vk.com/exieros 6 | ///////////////////////////////////////////////// 7 | -----------------------End---------------------*/ 8 | 9 | Game.Particles.SpawnBoxes = [] 10 | 11 | function MapLoaded(){ 12 | GameEvents.Unsubscribe( Game.Subscribes.SpawnBoxesOnmaploaded ) 13 | SpawnBoxes.checked = false 14 | Game.Particles.SpawnBoxes = [] 15 | } 16 | 17 | function DrawLineInGameWorld( a, b, Grb ){ 18 | //a = [0,0,0], b = [100,200,150] 19 | temp = Particles.CreateParticle("particles/ui_mouseactions/bounding_area_view_a.vpcf", ParticleAttachment_t.PATTACH_ABSORIGIN, 0) 20 | Grb.push(temp) 21 | Particles.SetParticleControl(temp, 0, a) 22 | Particles.SetParticleControl(temp, 1, b) 23 | Particles.SetParticleControl(temp, 16, [1,0,0]) 24 | } 25 | 26 | SpawnBoxes = function(){ 27 | if ( !SpawnBoxes.checked ){ 28 | GameEvents.Unsubscribe( Game.Subscribes.SpawnBoxesOnmaploaded ) 29 | for ( i=0; i', false, false) 65 | SpawnBoxes = $.GetContextPanel().FindChildTraverse( 'SpawnBoxes' ).Children()[0] -------------------------------------------------------------------------------- /Spawnboxes/version.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | -------------------------------------------------------------------------------- /Utils/body.js: -------------------------------------------------------------------------------- 1 | nope 2 | /*----------------------------------------------- 3 | //////////////// vk.com/d2jscripts ////////////// 4 | ///////////////////////////////////////////////// 5 | Описание базовых функций для других скриптов 6 | Автор: vk.com/exieros 7 | ///////////////////////////////////////////////// 8 | -----------------------End---------------------*/ 9 | 10 | //загрузка произвольного файла с сервера будь то конфиг или xml. Учитывайте, что это асинхронная функция, потому она не возвращает результат мгновенно. 11 | //Пример использования: var test; Game.GetFile('папка_файла.xml', function(a){ test = a }); 12 | Game.GetFile = function(file, callback){ 13 | $.AsyncWebRequest( 14 | 'http://127.0.0.1:8083/'+file+'?nocache='+Game.Time(), 15 | { 16 | type: 'GET', 17 | dataType: 'text', 18 | contentType: 'application/json', 19 | cache: false, 20 | success: function(a){ 21 | callback(a) 22 | } 23 | } 24 | ) 25 | } 26 | //загрузка конфига в json - спецификации 27 | Game.GetConfig = function(config, callback){ 28 | $.AsyncWebRequest( 29 | 'http://127.0.0.1:8083/'+config+'?nocache='+Game.Time(), 30 | { 31 | type: 'GET', 32 | dataType: 'text', 33 | contentType: 'application/json', 34 | cache: false, 35 | success: function(a){ 36 | callback(JSON.parse(a)) 37 | } 38 | } 39 | ) 40 | } 41 | 42 | //сохранение конфига в json - спецификации 43 | Game.SaveConfig = function(config, json){ 44 | $.AsyncWebRequest( 45 | 'http://127.0.0.1:8083', 46 | { 47 | type: 'POST', 48 | dataType: 'json', 49 | data: { 50 | 'writefile':config, 51 | 'data':JSON.stringify(json) 52 | }, 53 | contentType: 'text/html', 54 | success: function(a){ 55 | $.Msg('Config saved.') 56 | } 57 | } 58 | ) 59 | } 60 | 61 | 62 | //Таймер. Лучше использовать $.Schedule() если это возможно 63 | Game.Every = function(start, time, tick, func){var startTime = Game.Time();var tickRate = tick;if(tick < 1){if(start < 0) tick--;tickRate = time / -tick;}var tickCount = time/ tickRate;if(time < 0){tickCount = 9999999;}var numRan = 0;$.Schedule(start, (function(start,numRan,tickRate,tickCount){return function(){if(start < 0){start = 0;if(func()){return;}; } var tickNew = function(){numRan++;delay = (startTime+tickRate*numRan)-Game.Time();if((startTime+tickRate*numRan)-Game.Time() < 0){delay = 0;}$.Schedule(delay, function(){if(func()){return;};tickCount--;if(tickCount > 0) tickNew();});};tickNew();}})(start,numRan,tickRate,tickCount));}; 64 | 65 | //глобальные массивы для хранения объектов, которые могут остаться в старой области видимости при перезагрузке скрипта 66 | if(!Array.isArray(Game.Particles)) 67 | Game.Particles = [] 68 | if(!Array.isArray(Game.Panels)) 69 | Game.Panels = [] 70 | if(!Array.isArray(Game.Functions)) 71 | Game.Functions = [] 72 | if(Array.isArray(Game.Subscribes)){ 73 | for(i in Game.Subscribes){ 74 | if ( typeof Game.Subscribes[i] === 'number' ) 75 | try{ GameEvents.Unsubscribe(Game.Subscribes[i]) }catch(e){} 76 | else if( typeof Game.Subscribes[i] === 'object' ){ 77 | for(m in Game.Subscribes[i]) 78 | try{ GameEvents.Unsubscribe(Game.Subscribes[i][m]) }catch(e){} 79 | } 80 | } 81 | } 82 | Game.Subscribes = [] 83 | 84 | 85 | /* ФУНКЦИИ ДЛЯ РАБОТЫ С UI */ 86 | //сообщение в боковую панель 87 | Game.ScriptLogMsg = function(msg, color){ 88 | var ScriptLog = $('#ScriptLog') 89 | var ScriptLogMessage = $.CreatePanel( "Label", ScriptLog, "ScriptLogMessage" ) 90 | ScriptLogMessage.BLoadLayoutFromString( "", false, false) 91 | ScriptLogMessage.style.fontSize = '15px' 92 | var text = ' ••• ' + msg 93 | ScriptLogMessage.text = text 94 | if (color){ 95 | ScriptLogMessage.style.color = color 96 | ScriptLogMessage.style.textShadow = '0px 0px 4px 1.2 ' + color + '33'; 97 | } 98 | ScriptLogMessage.DeleteAsync(7) 99 | Game.AnimatePanel( ScriptLogMessage, {"opacity": "0;"}, 2, "linear", 4) 100 | } 101 | //Функция делает панельку перемещаемой кликом мыши по ней. callback нужен например для того, чтобы сохранить координаты панели в файл 102 | GameUI.MovePanel = function(a, callback){ 103 | var e = function(){ 104 | if (!GameUI.IsControlDown()) 105 | return 106 | var color = a.style.backgroundColor 107 | a.style.backgroundColor = '#FFFF00FF' 108 | var uiw = Game.GetMainHUD().actuallayoutwidth 109 | var uih = Game.GetMainHUD().actuallayoutheight 110 | linkpanel = function(){ 111 | a.style.position = (GameUI.GetCursorPosition()[0]/uiw*100) + '% ' + (GameUI.GetCursorPosition()[1]/uih*100) + '% ' + '0' 112 | if (GameUI.IsMouseDown( 0 )){ 113 | Game.DTick(linkpanel) 114 | a.SetPanelEvent('onactivate', e) 115 | a.style.backgroundColor = color 116 | callback(a) 117 | } 118 | } 119 | Game.Tick(linkpanel) 120 | } 121 | a.SetPanelEvent( 'onactivate', e) 122 | } 123 | //добавление чекбокса в список скриптов 124 | Game.AddScript = function(type,name,callback){ 125 | if(type==1){ 126 | var Temp = $.CreatePanel( "Panel", $('#scripts'), name ) 127 | Temp.SetPanelEvent( 'onactivate', callback ) 128 | Temp.BLoadLayoutFromString( '', false, false) 129 | return $.GetContextPanel().FindChildTraverse(name).Children()[0] 130 | } 131 | $("#scripts").Children().sort(function(a,b){ 132 | if (a.text > b.text) return 1; 133 | if (a.text < b.text) return -1; 134 | }) 135 | } 136 | //нахождение главного родительского HUD`a 137 | Game.GetMainHUD = function(){ 138 | var globalContext=$.GetContextPanel() 139 | while(true){ 140 | if(globalContext.paneltype == "DOTAHud"){ 141 | break 142 | }else{ 143 | globalContext = globalContext.GetParent() 144 | } 145 | } 146 | return globalContext 147 | } 148 | //анимирование панелей. Источник moddota.com 149 | var AnimatePanel_DEFAULT_DURATION = "300.0ms"; 150 | var AnimatePanel_DEFAULT_EASE = "linear"; 151 | Game.AnimatePanel = function(panel, values, duration, ease, delay) 152 | { 153 | var durationString = (duration != null ? parseInt(duration * 1000) + ".0ms" : AnimatePanel_DEFAULT_DURATION); 154 | var easeString = (ease != null ? ease : AnimatePanel_DEFAULT_EASE); 155 | var delayString = (delay != null ? parseInt(delay * 1000) + ".0ms" : "0.0ms"); 156 | var transitionString = durationString + " " + easeString + " " + delayString; 157 | var i = 0; 158 | var finalTransition = "" 159 | for (var property in values) 160 | { 161 | finalTransition = finalTransition + (i > 0 ? ", " : "") + property + " " + transitionString; 162 | i++; 163 | } 164 | panel.style.transition = finalTransition + ";"; 165 | for (var property in values) 166 | panel.style[property] = values[property]; 167 | } 168 | /* END */ 169 | 170 | 171 | //получение высоты полоски hp у героев 172 | Game.HBOffsets={"npc_dota_hero_lone_druid": 145, 173 | "npc_dota_hero_huskar": 170, "npc_dota_hero_drow_ranger": 130, "npc_dota_hero_pugna": 140, "npc_dota_hero_naga_siren": 180, "npc_dota_hero_wisp": 160, "npc_dota_hero_vengefulspirit": 170, "npc_dota_hero_ogre_magi": 180, "npc_dota_hero_sand_king": 130, "npc_dota_hero_slardar": 140, "npc_dota_hero_jakiro": 280, "npc_dota_hero_windrunner": 160, "npc_dota_hero_tiny": 165, "npc_dota_hero_morphling": 140, "npc_dota_hero_lycan": 220, "npc_dota_hero_medusa": 200, "npc_dota_hero_enigma": 220, "npc_dota_hero_oracle": 240, "npc_dota_hero_razor": 230, "npc_dota_hero_shredder": 250, "npc_dota_hero_clinkz": 144, "npc_dota_hero_templar_assassin": 180, "npc_dota_hero_riki": 115, "npc_dota_hero_magnataur": 220, "npc_dota_hero_skeleton_king": 190, "npc_dota_hero_slark": 140, "npc_dota_hero_weaver": 110, "npc_dota_hero_abaddon": 175, "npc_dota_hero_puck": 165, "npc_dota_hero_antimage": 140, "npc_dota_hero_legion_commander": 200, "npc_dota_hero_bane": 235, "npc_dota_hero_kunkka": 150, "npc_dota_hero_pudge": 180, "npc_dota_hero_arc_warden": 160, "npc_dota_hero_abyssal_underlord": 200, "npc_dota_hero_winter_wyvern": 200, "npc_dota_hero_ancient_apparition": 190, "npc_dota_hero_techies": 150, "npc_dota_hero_phoenix": 240, "npc_dota_hero_life_stealer": 130, "npc_dota_hero_faceless_void": 150, "npc_dota_hero_venomancer": 150, "npc_dota_hero_earthshaker": 155, "npc_dota_hero_enchantress": 180, "npc_dota_hero_undying": 250, "npc_dota_hero_earth_spirit": 200, "npc_dota_hero_mirana": 155, "npc_dota_hero_keeper_of_the_light": 230, "npc_dota_hero_lina": 170, "npc_dota_hero_tusk": 190, "npc_dota_hero_bristleback": 200, "npc_dota_hero_centaur": 220, "npc_dota_hero_troll_warlord": 200, "npc_dota_hero_visage": 180, "npc_dota_hero_phantom_lancer": 190, "npc_dota_hero_spirit_breaker": 160, "npc_dota_hero_elder_titan": 200, "npc_dota_hero_rattletrap": 130, "npc_dota_hero_nevermore": 250, "npc_dota_hero_dazzle": 160, "npc_dota_hero_tidehunter": 190, "npc_dota_hero_disruptor": 200, "npc_dota_hero_rubick": 170, "npc_dota_hero_terrorblade": 280, "npc_dota_hero_batrider": 240, "npc_dota_hero_treant": 260, "npc_dota_hero_phantom_assassin": 180, "npc_dota_hero_meepo": 125, "npc_dota_hero_brewmaster": 140, "npc_dota_hero_night_stalker": 165, "npc_dota_hero_luna": 185, "npc_dota_hero_lion": 170, "npc_dota_hero_beastmaster": 180, "npc_dota_hero_axe": 160, "npc_dota_hero_juggernaut": 170, "npc_dota_hero_shadow_demon": 175, "npc_dota_hero_obsidian_destroyer": 350, "npc_dota_hero_spectre": 180, "npc_dota_hero_silencer": 130, "npc_dota_hero_bounty_hunter": 120, "npc_dota_hero_zuus": 130, "npc_dota_hero_invoker": 170, "npc_dota_hero_omniknight": 145, "npc_dota_hero_alchemist": 200, "npc_dota_hero_furion": 180, "npc_dota_hero_crystal_maiden": 135, "npc_dota_hero_gyrocopter": 240, "npc_dota_hero_broodmother": 120, "npc_dota_hero_doom_bringer": 240, "npc_dota_hero_ursa": 150, "npc_dota_hero_chen": 190, "npc_dota_hero_death_prophet": 200, "npc_dota_hero_bloodseeker": 130, "npc_dota_hero_shadow_shaman": 130, "npc_dota_hero_storm_spirit": 170, "npc_dota_hero_dark_seer": 130, "npc_dota_hero_queenofpain": 145, "npc_dota_hero_sniper": 110, "npc_dota_hero_lich": 225, "npc_dota_hero_skywrath_mage": 300, "npc_dota_hero_necrolyte": 160, "npc_dota_hero_warlock": 195, "npc_dota_hero_nyx_assassin": 200, "npc_dota_hero_sven": 150, "npc_dota_hero_dragon_knight": 170, "npc_dota_hero_tinker": 150, "npc_dota_hero_leshrac": 170, "npc_dota_hero_ember_spirit": 200, "npc_dota_hero_witch_doctor": 150, "npc_dota_hero_chaos_knight": 220, "npc_dota_hero_viper": 210} 174 | 175 | //приказ герою переместится в точку с координатами [x,y,z] 176 | Game.MoveTo = function(ent, xyz, queue){ 177 | var order = {}; 178 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_MOVE_TO_POSITION 179 | order.UnitIndex = ent 180 | order.Position = xyz; 181 | order.Queue = queue 182 | order.ShowEffects = false 183 | Game.PrepareUnitOrders( order ); 184 | } 185 | 186 | //каст способности или айтема на цель 187 | Game.CastTarget = function(ent, abil, target, queue){ 188 | var order = {}; 189 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_CAST_TARGET 190 | order.UnitIndex = ent 191 | order.TargetIndex = target 192 | order.AbilityIndex = abil 193 | order.Queue = queue 194 | order.ShowEffects = false 195 | Game.PrepareUnitOrders( order ); 196 | } 197 | 198 | //атаковать 199 | Game.AttackTarget = function(ent, target, queue){ 200 | var order = {}; 201 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_ATTACK_TARGET 202 | order.UnitIndex = ent 203 | order.TargetIndex = target 204 | order.Queue = queue 205 | order.ShowEffects = false 206 | Game.PrepareUnitOrders( order ); 207 | } 208 | 209 | //атаковать в точку 210 | Game.AttackPoint = function(ent, xyz, queue){ 211 | var order = {}; 212 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_ATTACK_TARGET 213 | order.UnitIndex = ent 214 | order.Position = xyz 215 | order.Queue = queue 216 | order.ShowEffects = false 217 | Game.PrepareUnitOrders( order ); 218 | } 219 | 220 | //каст способности или айтема в точку (sunstrike) 221 | Game.CastPosition = function(ent, abil, xyz, queue){ 222 | var order = {}; 223 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_CAST_POSITION 224 | order.UnitIndex = ent 225 | order.Position = xyz 226 | order.AbilityIndex = abil 227 | order.Queue = queue 228 | order.ShowEffects = false 229 | Game.PrepareUnitOrders( order ) 230 | } 231 | 232 | //каст notarget способности или айтема 233 | Game.CastNoTarget = function(ent, abil, queue){ 234 | var order = {}; 235 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_CAST_NO_TARGET 236 | order.UnitIndex = ent 237 | order.AbilityIndex = abil 238 | order.Queue = queue 239 | order.ShowEffects = false 240 | Game.PrepareUnitOrders( order ) 241 | } 242 | 243 | //переключение способности 244 | Game.ToggleAbil = function(ent, abil, queue){ 245 | var order = {}; 246 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_CAST_TOGGLE 247 | order.UnitIndex = ent 248 | order.AbilityIndex = abil 249 | order.Queue = queue 250 | order.ShowEffects = false 251 | Game.PrepareUnitOrders( order ) 252 | } 253 | 254 | //приказ остановиться 255 | Game.EntStop = function(ent, queue){ 256 | var order = {}; 257 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_STOP 258 | order.UnitIndex = ent 259 | order.Queue = queue 260 | order.ShowEffects = false 261 | Game.PrepareUnitOrders( order ) 262 | } 263 | 264 | //разобрать артефакт 265 | Game.DisassembleItem = function(ent, item, queue){ 266 | var order = {}; 267 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_DISASSEMBLE_ITEM 268 | order.UnitIndex = ent 269 | order.AbilityIndex = item 270 | order.Queue = queue 271 | order.ShowEffects = false 272 | Game.PrepareUnitOrders( order ) 273 | } 274 | 275 | //разобрать артефакт 276 | Game.DropItem = function(ent, item, xyz, queue){ 277 | var order = {}; 278 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_DROP_ITEM 279 | order.UnitIndex = ent 280 | order.Position = xyz 281 | order.AbilityIndex = item 282 | order.Queue = queue 283 | order.ShowEffects = false 284 | Game.PrepareUnitOrders( order ) 285 | } 286 | 287 | //поднять артефакт 288 | Game.PuckupItem = function(ent, item, queue){ 289 | var order = {}; 290 | order.OrderType = dotaunitorder_t.DOTA_UNIT_ORDER_PICKUP_ITEM 291 | order.UnitIndex = ent 292 | order.TargetIndex = item 293 | order.Queue = queue 294 | order.ShowEffects = false 295 | Game.PrepareUnitOrders( order ) 296 | } 297 | 298 | //Получение расстояния между двумя точками в пространстве, высшая математика епта 299 | Game.PointDistance = function(a,b){ 300 | return Math.sqrt(Math.pow(a[0]-b[0],2)+Math.pow(a[1]-b[1],2)+Math.pow(a[2]-b[2],2)) 301 | } 302 | 303 | //"округление" числа до определенного кол-ва знаков после запятой 304 | Game.roundPlus = function(x, n){ 305 | if(isNaN(x) || isNaN(n)) return false; 306 | var m = Math.pow(10,n) 307 | return Math.round(x*m)/m 308 | } 309 | 310 | //логарифм по основанию 311 | Math.logb = function(number, base) { 312 | return Math.log(number) / Math.log(base) 313 | } 314 | 315 | //поэлементное сравнение двух массивов, порядок элементов не учитывается 316 | Game.CompareArrays = function(a,b){ 317 | if (a==b) 318 | return true 319 | if (a.length!=b.length) 320 | return false 321 | for(i in a) 322 | if (a[i]!=b[i]) 323 | return false 324 | return true 325 | } 326 | 327 | //проверяет есть ли в двух объектах хотя бы один одинаковый элемент 328 | Game.IntersecArrays = function(a,b){ 329 | for(i in a) 330 | for(m in b) 331 | if(a[i]==b[m]) 332 | return true 333 | return false 334 | } 335 | 336 | //получение массива с инвентарем юнита 337 | Game.GetInventory = function(entity){ 338 | inv = [] 339 | for(i = 0; i<6; i++){ 340 | if(Entities.GetItemInSlot( entity, i )!=-1) 341 | inv.push(Entities.GetItemInSlot( entity, i )) 342 | } 343 | return inv 344 | } 345 | 346 | //проверяет является ли иллюзией герой 347 | Game.IsIllusion = function(entity){ 348 | var PlayersEnt = [] 349 | var PlayersIDs = Game.GetAllPlayerIDs() 350 | for(i in PlayersIDs) 351 | PlayersEnt.push( Players.GetPlayerHeroEntityIndex( PlayersIDs[i] ) ) 352 | if (PlayersEnt.indexOf(entity)==-1) 353 | return true 354 | else 355 | return false 356 | } 357 | 358 | //список указателей на героев без иллюзий 359 | Game.PlayersHeroEnts = function(){ 360 | var PlayersEnt = [] 361 | var PlayersIDs = Game.GetAllPlayerIDs() 362 | for(i in PlayersIDs) 363 | PlayersEnt.push( Players.GetPlayerHeroEntityIndex( PlayersIDs[i] ) ) 364 | return PlayersEnt 365 | } 366 | 367 | //список указателей на только вражеских героев без иллюзий 368 | Game.PlayersEnemyHeroEnts = function(){ 369 | var PlayersEnt = [] 370 | var PlayersIDs = Game.GetAllPlayerIDs() 371 | for(i in PlayersIDs) 372 | if(Players.GetTeam(Players.GetLocalPlayer())!=Players.GetTeam(PlayersIDs[i])) 373 | PlayersEnt.push( Players.GetPlayerHeroEntityIndex( PlayersIDs[i] ) ) 374 | return PlayersEnt 375 | } 376 | 377 | //возвращает DOTA_ABILITY_BEHAVIOR в удобном представлении 378 | Game.Behaviors = function(DABor){ 379 | var DABh = [] 380 | var ZBehavior = Abilities.GetBehavior( parseInt( DABor ) ) 381 | var s = 32 382 | while ( ZBehavior > 0 && s > 0 ){ 383 | if(Math.pow(2,s)>ZBehavior){ 384 | s-- 385 | continue 386 | } 387 | ZBehavior-=Math.pow(2,s) 388 | DABh.push(Math.pow(2,s)) 389 | } 390 | return DABh 391 | } 392 | Game.Behaviors2 = function(DABor){ 393 | var DABh = [] 394 | var ZBehavior = DABor 395 | var s = 32 396 | while ( ZBehavior > 0 && s > 0 ){ 397 | if(Math.pow(2,s)>ZBehavior){ 398 | s-- 399 | continue 400 | } 401 | ZBehavior-=Math.pow(2,s) 402 | DABh.push(Math.pow(2,s)) 403 | } 404 | return DABh 405 | } 406 | 407 | //ищет по названию и в абилках и в инвентаре 408 | Game.GetAbilityByName = function(ent,name){ 409 | var GABN = Entities.GetAbilityByName( ent, name ) 410 | if (GABN!=-1) 411 | return GABN 412 | for(i=0;i<6;i++){ 413 | var item = Entities.GetItemInSlot( ent, i ) 414 | if(Abilities.GetAbilityName(item)==name) 415 | return item 416 | } 417 | return -1 418 | } 419 | 420 | //объект с указателями на бафы юнита 421 | Game.GetBuffs = function(ent){ 422 | var buffs = [] 423 | for(i=0;i', false, false) 168 | var ZeusAutoult = $.GetContextPanel().FindChildTraverse( 'ZeusAutoult' ).Children()[0] -------------------------------------------------------------------------------- /Zeusautoult/version.txt: -------------------------------------------------------------------------------- 1 | 1.0 --------------------------------------------------------------------------------