Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
D
dota2-ai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
JoyJ
dota2-ai
Commits
e1de1801
Commit
e1de1801
authored
Apr 03, 2023
by
JoyJ
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add venomancer and 7.32 stuff
parent
cda235f7
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
777 additions
and
73 deletions
+777
-73
BotLib/hero_abaddon.lua
BotLib/hero_abaddon.lua
+31
-28
BotLib/hero_venomancer.lua
BotLib/hero_venomancer.lua
+674
-0
FunLib/aba_buff.lua
FunLib/aba_buff.lua
+24
-16
FunLib/aba_item.lua
FunLib/aba_item.lua
+30
-20
FunLib/aba_minion.lua
FunLib/aba_minion.lua
+11
-6
ability_item_usage_generic.lua
ability_item_usage_generic.lua
+3
-3
hero_selection.lua
hero_selection.lua
+4
-0
No files found.
BotLib/hero_abaddon.lua
View file @
e1de1801
...
...
@@ -118,14 +118,14 @@ local abilityR = bot:GetAbilityByName( sAbilityList[6] )
local
castQDesire
,
castQTarget
local
castWDesire
,
castWTarget
local
castRDesire
,
castRTarget
local
castRDesire
local
nKeepMana
,
nMP
,
nHP
,
nLV
,
hEnemyList
,
hAllyList
,
botTarget
,
sMotive
local
aetherRange
=
0
function
X
.
SkillsComplement
()
if
J
.
CanNotUseAbility
(
bot
)
or
bot
:
IsInvisible
()
then
return
end
if
J
.
CanNotUseAbility
IgnoreStun
(
bot
)
or
bot
:
IsInvisible
()
then
return
end
nKeepMana
=
350
aetherRange
=
0
...
...
@@ -136,8 +136,20 @@ function X.SkillsComplement()
hEnemyList
=
bot
:
GetNearbyHeroes
(
1600
,
true
,
BOT_MODE_NONE
)
hAllyList
=
J
.
GetAlliesNearLoc
(
bot
:
GetLocation
(),
1600
)
local
aether
=
J
.
IsItemAvailable
(
"item_aether_lens"
)
if
aether
~=
nil
then
aetherRange
=
250
end
aetherRange
=
J
.
GetBonusCastRange
(
bot
)
castRDesire
,
sMotive
=
X
.
ConsiderR
()
if
(
castRDesire
>
0
)
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
true
)
bot
:
ActionQueue_UseAbility
(
abilityR
)
return
end
if
bot
:
IsStunned
()
then
return
end
castQDesire
,
castQTarget
,
sMotive
=
X
.
ConsiderQ
()
if
(
castQDesire
>
0
)
then
...
...
@@ -163,17 +175,6 @@ function X.SkillsComplement()
end
castRDesire
,
castRTarget
,
sMotive
=
X
.
ConsiderR
()
if
(
castRDesire
>
0
)
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
true
)
bot
:
ActionQueue_UseAbility
(
abilityR
)
return
end
end
function
X
.
ConsiderQ
()
...
...
@@ -187,6 +188,20 @@ function X.ConsiderQ()
local
nDamage
=
abilityQ
:
GetAbilityDamage
()
local
nDamageType
=
DAMAGE_TYPE_MAGICAL
local
nInRangeEnemyList
=
bot
:
GetNearbyHeroes
(
nCastRange
,
true
,
BOT_MODE_NONE
)
local
heroList
=
J
.
FilterGroup
(
nInRangeEnemyList
,
function
(
u
)
return
J
.
IsValidHero
(
u
)
and
J
.
IsInRange
(
bot
,
u
,
nCastRange
)
and
J
.
CanCastOnNonMagicImmune
(
u
)
end
)
--击杀,WR期间无脑用
for
_
,
npcEnemy
in
pairs
(
heroList
)
do
if
J
.
WillMagicKillTarget
(
bot
,
npcEnemy
,
nDamage
,
nCastPoint
+
1
.
0
)
or
J
.
GetModifierTime
(
bot
,
'modifier_abaddon_borrowed_time'
)
>
nCastPoint
or
J
.
GetModifierTime
(
bot
,
'modifier_abaddon_aphotic_shield'
)
>
nCastPoint
then
return
BOT_ACTION_DESIRE_HIGH
,
npcEnemy
,
"Q-对"
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
..
"耗血"
end
end
--治疗队友
for
_
,
npcAlly
in
pairs
(
hAllyList
)
...
...
@@ -196,7 +211,7 @@ function X.ConsiderQ()
and
npcAlly
~=
bot
and
J
.
IsInRange
(
bot
,
npcAlly
,
nCastRange
)
and
J
.
CanCastOnNonMagicImmune
(
npcAlly
)
and
(
J
.
GetHP
(
npcAlly
)
<
0
.
3
or
((
J
.
IsPushing
(
npcAlly
)
or
npcAlly
:
WasRecentlyDamagedByAnyHero
(
3
.
0
))
and
J
.
GetHP
(
npcAlly
)
<
0
.
5
)
)
and
(
J
.
GetHP
(
npcAlly
)
<
0
.
3
or
((
J
.
IsPushing
(
npcAlly
)
or
npcAlly
:
WasRecentlyDamagedByAnyHero
(
3
.
0
))
and
J
.
GetHP
(
npcAlly
)
<
0
.
7
)
)
then
return
BOT_ACTION_DESIRE_HIGH
,
npcAlly
,
"Q-治疗"
..
J
.
Chat
.
GetNormName
(
npcAlly
)
end
...
...
@@ -213,18 +228,6 @@ function X.ConsiderQ()
return
BOT_ACTION_DESIRE_HIGH
,
botTarget
,
"Q-攻击"
..
J
.
Chat
.
GetNormName
(
botTarget
)
end
for
_
,
npcEnemy
in
pairs
(
hEnemyList
)
do
if
J
.
IsValidHero
(
npcEnemy
)
and
J
.
IsInRange
(
bot
,
npcEnemy
,
nCastRange
)
and
J
.
CanCastOnNonMagicImmune
(
npcEnemy
)
and
(
J
.
WillMagicKillTarget
(
bot
,
npcEnemy
,
nDamage
,
nCastPoint
)
or
(
nSkillLV
>
1
and
nMP
>
0
.
6
)
or
J
.
GetModifierTime
(
bot
,
'modifier_abaddon_borrowed_time'
)
>
nCastPoint
or
J
.
GetModifierTime
(
bot
,
'modifier_abaddon_aphotic_shield'
)
>
nCastPoint
)
then
return
BOT_ACTION_DESIRE_HIGH
,
npcEnemy
,
"Q-对"
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
..
"耗血"
end
end
return
BOT_ACTION_DESIRE_NONE
end
...
...
BotLib/hero_venomancer.lua
0 → 100644
View file @
e1de1801
----------------------------------------------------------------------------------------------------
--- The Creation Come From: BOT EXPERIMENT Credit:FURIOUSPUPPY
--- BOT EXPERIMENT Author: Arizona Fauzie 2018.11.21
--- Link:http://steamcommunity.com/sharedfiles/filedetails/?id=837040016
--- Refactor: 决明子 Email: dota2jmz@163.com 微博@Dota2_决明子
--- Link:http://steamcommunity.com/sharedfiles/filedetails/?id=1573671599
--- Link:http://steamcommunity.com/sharedfiles/filedetails/?id=1627071163
--- Updated: Nikel
--- tank, priest
----------------------------------------------------------------------------------------------------
--script from https://github.com/jodyjmaulana/aba-update
--只看了Q,剩下的还没看
----------------------------------------------------------------------------------------------------
local
X
=
{}
local
bDebugMode
=
(
1
==
10
)
local
bot
=
GetBot
()
local
J
=
require
(
GetScriptDirectory
()
..
'/FunLib/jmz_func'
)
local
Minion
=
dofile
(
GetScriptDirectory
()
..
'/FunLib/aba_minion'
)
local
sTalentList
=
J
.
Skill
.
GetTalentList
(
bot
)
local
sAbilityList
=
J
.
Skill
.
GetAbilityList
(
bot
)
local
sOutfitType
=
J
.
Item
.
GetOutfitType
(
bot
)
local
tTalentTreeList
=
{
[
'outfit_carry'
]
=
{
[
't25'
]
=
{
10
,
0
},
[
't20'
]
=
{
0
,
10
},
[
't15'
]
=
{
10
,
0
},
[
't10'
]
=
{
10
,
0
},
},
[
'outfit_mid'
]
=
{
[
't25'
]
=
{
10
,
0
},
[
't20'
]
=
{
0
,
10
},
[
't15'
]
=
{
0
,
10
},
[
't10'
]
=
{
10
,
0
},
},
[
'outfit_priest'
]
=
{
[
't25'
]
=
{
10
,
0
},
[
't20'
]
=
{
0
,
10
},
[
't15'
]
=
{
0
,
10
},
[
't10'
]
=
{
10
,
0
},
},
[
'outfit_mage'
]
=
{
[
't25'
]
=
{
0
,
10
},
[
't20'
]
=
{
10
,
0
},
[
't15'
]
=
{
0
,
10
},
[
't10'
]
=
{
0
,
10
},
},
[
'outfit_tank'
]
=
{
[
't25'
]
=
{
0
,
10
},
[
't20'
]
=
{
10
,
0
},
[
't15'
]
=
{
0
,
10
},
[
't10'
]
=
{
0
,
10
},
},
}
local
tAllAbilityBuildList
=
{
[
'outfit_carry'
]
=
{
{
2
,
3
,
3
,
2
,
2
,
6
,
3
,
2
,
3
,
1
,
6
,
1
,
1
,
1
,
6
}
},
[
'outfit_mid'
]
=
{
{
1
,
2
,
3
,
3
,
3
,
6
,
3
,
2
,
2
,
2
,
6
,
1
,
1
,
1
,
6
}
},
[
'outfit_priest'
]
=
{
{
1
,
3
,
1
,
2
,
1
,
6
,
1
,
3
,
3
,
3
,
6
,
2
,
2
,
2
,
6
}
},
[
'outfit_mage'
]
=
{
{
1
,
3
,
1
,
2
,
1
,
6
,
1
,
3
,
3
,
3
,
6
,
2
,
2
,
2
,
6
}
},
[
'outfit_tank'
]
=
{
{
1
,
2
,
3
,
3
,
3
,
6
,
3
,
2
,
2
,
2
,
6
,
1
,
1
,
1
,
6
}
},
}
local
nAbilityBuildList
=
J
.
Skill
.
GetRandomBuild
(
tAllAbilityBuildList
[
sOutfitType
]
)
local
nTalentBuildList
=
J
.
Skill
.
GetTalentBuild
(
tTalentTreeList
[
sOutfitType
]
)
local
sRandomItem
=
RandomInt
(
1
,
9
)
>
6
and
0
or
10
local
sRandomItem_1
=
sRandomItem
==
0
and
"item_blink"
or
"item_force_staff"
local
sRandomItem_2
=
sRandomItem
==
0
and
"item_overwhelming_blink"
or
"item_hurricane_pike"
local
tOutFitList
=
{}
tOutFitList
[
'outfit_carry'
]
=
{
"item_venomancer_outfit"
,
"item_urn_of_shadows"
,
"item_ancient_janggo"
,
"item_veil_of_discord"
,
"item_aghanims_shard"
,
sRandomItem_1
,
"item_ultimate_scepter"
,
"item_boots_of_bearing"
,
"item_ghost"
,
"item_spirit_vessel"
,
sRandomItem_2
,
"item_ethereal_blade"
,
"item_ultimate_scepter_2"
,
"item_aether_lens"
,
"item_octarine_core"
,
"item_moon_shard"
,
}
tOutFitList
[
'outfit_mid'
]
=
tOutFitList
[
'outfit_carry'
]
tOutFitList
[
'outfit_priest'
]
=
{
"item_priest_2_outfit"
,
"item_force_staff"
,
"item_glimmer_cape"
,
"item_mekansm"
,
"item_aeon_disk"
,
"item_aghanims_shard"
,
"item_guardian_greaves"
,
"item_ghost"
,
"item_ultimate_scepter"
,
"item_hurricane_pike"
,
"item_ethereal_blade"
,
"item_ultimate_scepter_2"
,
"item_aether_lens"
,
"item_octarine_core"
,
"item_moon_shard"
,
}
tOutFitList
[
'outfit_mage'
]
=
tOutFitList
[
'outfit_carry'
]
tOutFitList
[
'outfit_tank'
]
=
tOutFitList
[
'outfit_carry'
]
X
[
'sBuyList'
]
=
tOutFitList
[
sOutfitType
]
X
[
'sSellList'
]
=
{
"item_blink"
,
"item_wraith_band"
,
"item_force_staff"
,
"item_wraith_band"
,
"item_ultimate_scepter"
,
"item_magic_wand"
,
}
if
J
.
Role
.
IsPvNMode
()
or
J
.
Role
.
IsAllShadow
()
then
X
[
'sBuyList'
],
X
[
'sSellList'
]
=
{
'PvN_mage'
},
{}
end
nAbilityBuildList
,
nTalentBuildList
,
X
[
'sBuyList'
],
X
[
'sSellList'
]
=
J
.
SetUserHeroInit
(
nAbilityBuildList
,
nTalentBuildList
,
X
[
'sBuyList'
],
X
[
'sSellList'
]
)
X
[
'sSkillList'
]
=
J
.
Skill
.
GetSkillList
(
sAbilityList
,
nAbilityBuildList
,
sTalentList
,
nTalentBuildList
)
X
[
'bDeafaultAbility'
]
=
false
X
[
'bDeafaultItem'
]
=
false
function
X
.
MinionThink
(
hMinionUnit
)
if
Minion
.
IsValidUnit
(
hMinionUnit
)
then
if
Minion
.
IsAttackingWard
(
hMinionUnit
:
GetUnitName
()
)
then
Minion
.
AttackingWardThink
(
hMinionUnit
)
else
Minion
.
IllusionThink
(
hMinionUnit
)
end
end
end
--[[
npc_dota_hero_venomancer
"Ability1" "venomancer_venomous_gale"
"Ability2" "venomancer_poison_sting"
"Ability3" "venomancer_plague_ward"
"Ability4" "venomancer_latent_poison"
"Ability5" "generic_hidden"
"Ability6" "venomancer_poison_nova"
"Ability10" "special_bonus_unique_venomancer_3"
"Ability11" "special_bonus_unique_venomancer_poisonsting_regen_reduction"
"Ability12" "special_bonus_unique_venomancer_8"
"Ability13" "special_bonus_unique_venomancer_2"
"Ability14" "special_bonus_unique_venomancer_4"
"Ability15" "special_bonus_unique_venomancer_gale_plagueward"
"Ability16" "special_bonus_unique_venomancer_5"
"Ability17" "special_bonus_unique_venomancer"
modifier_projectile_vision
modifier_venomancer_venomous_gale
modifier_venomancer_poison_sting_applier
modifier_venomancer_poison_sting
modifier_venomancer_poison_sting_ward
modifier_kill
modifier_magic_immune
modifier_plague_wards_bonus
modifier_venomancer_latent_poison
modifier_stunned
modifier_venomancer_poison_nova_thinker
modifier_venomancer_poison_nova
--]]
local
abilityQ
=
bot
:
GetAbilityByName
(
sAbilityList
[
1
]
)
local
abilityE
=
bot
:
GetAbilityByName
(
sAbilityList
[
3
]
)
local
abilityD
=
bot
:
GetAbilityByName
(
sAbilityList
[
4
]
)
local
abilityR
=
bot
:
GetAbilityByName
(
sAbilityList
[
6
]
)
local
castQDesire
,
castQLocation
local
castEDesire
,
castELocation
local
castDDesire
,
castDTarget
local
castRDesire
local
nKeepMana
,
nMP
,
nHP
,
nLV
,
botTarget
,
hEnemyList
,
hAllyList
,
sMotive
local
bonusRange
=
0
function
X
.
SkillsComplement
()
if
J
.
CanNotUseAbility
(
bot
)
or
bot
:
IsInvisible
()
then
return
end
nKeepMana
=
400
bonusRange
=
0
nLV
=
bot
:
GetLevel
()
nMP
=
bot
:
GetMana
()
/
bot
:
GetMaxMana
()
nHP
=
bot
:
GetHealth
()
/
bot
:
GetMaxHealth
()
botTarget
=
J
.
GetProperTarget
(
bot
)
hEnemyList
=
bot
:
GetNearbyHeroes
(
1600
,
true
,
BOT_MODE_NONE
)
hAllyList
=
J
.
GetAlliesNearLoc
(
bot
:
GetLocation
(),
1600
)
bonusRange
=
J
.
GetBonusCastRange
(
bot
)
castRDesire
,
sMotive
=
X
.
ConsiderR
()
if
castRDesire
>
0
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
true
)
bot
:
ActionQueue_UseAbility
(
abilityR
)
return
end
castQDesire
,
castQLocation
,
sMotive
=
X
.
ConsiderQ
()
if
castQDesire
>
0
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
true
)
bot
:
ActionQueue_UseAbilityOnLocation
(
abilityQ
,
castQLocation
)
return
end
castDDesire
,
castDTarget
,
sMotive
=
X
.
ConsiderD
()
if
(
castDDesire
>
0
)
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
false
)
bot
:
ActionQueue_UseAbilityOnEntity
(
abilityD
,
castDTarget
)
return
end
castEDesire
,
castELocation
,
sMotive
=
X
.
ConsiderE
()
if
castEDesire
>
0
then
J
.
SetReportMotive
(
bDebugMode
,
sMotive
)
J
.
SetQueuePtToINT
(
bot
,
false
)
bot
:
ActionQueue_UseAbilityOnLocation
(
abilityE
,
castELocation
)
return
end
end
function
X
.
ConsiderQ
()
if
not
abilityQ
:
IsFullyCastable
()
then
return
BOT_ACTION_DESIRE_NONE
,
nil
end
local
nSkillLV
=
abilityQ
:
GetLevel
()
local
nCastRange
=
abilityQ
:
GetCastRange
()
+
bonusRange
local
nRadius
=
abilityQ
:
GetSpecialValueInt
(
'radius'
)
local
nCastPoint
=
abilityQ
:
GetCastPoint
()
local
nManaCost
=
abilityQ
:
GetManaCost
()
local
nDamage
=
abilityQ
:
GetSpecialValueInt
(
'strike_damage'
)
+
(
abilityQ
:
GetSpecialValueInt
(
'tick_damage'
)
*
3
)
--因为是延时伤害所以故意少算一些
local
nRealDamage
=
abilityQ
:
GetSpecialValueInt
(
'strike_damage'
)
+
(
abilityQ
:
GetSpecialValueInt
(
'tick_damage'
)
*
3
)
local
nDamageType
=
DAMAGE_TYPE_MAGICAL
local
nAlliedHeroesInRange
=
bot
:
GetNearbyHeroes
(
nCastRange
,
false
,
BOT_MODE_NONE
)
local
nEnemyHeroesInRange
=
bot
:
GetNearbyHeroes
(
nCastRange
,
true
,
BOT_MODE_NONE
)
local
nTargetLocation
=
nil
--击杀
for
_
,
npcEnemy
in
pairs
(
nEnemyHeroesInRange
)
do
if
J
.
IsValidHero
(
npcEnemy
)
and
J
.
CanCastOnNonMagicImmune
(
npcEnemy
)
and
J
.
WillMagicKillTarget
(
bot
,
npcEnemy
,
nDamage
,
nCastPoint
)
or
(
nRealDamage
*
(
1
-
npcEnemy
:
GetMagicResist
())
>
J
.
GetHP
(
npcEnemy
)
*
0
.
4
)
--能耗好多血的话也扔一下
then
nTargetLocation
=
botTarget
:
GetExtrapolatedLocation
(
nCastPoint
+
J
.
GetDistanceFromUnitToUnit
(
bot
,
botTarget
)
/
1200
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-击杀:'
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
end
end
--AOE
local
most
=
0
local
nAoeLoc
for
i
=
1
,
36
do
local
angle
=
10
*
i
local
hitEnemy
=
J
.
FilterGroup
(
nEnemyHeroesInRange
,
function
(
u
)
return
J
.
IsValidHero
(
u
)
and
not
u
:
IsMagicImmune
()
and
J
.
PointInRectangle
(
u
:
GetLocation
(),
bot
:
GetLocation
(),
angle
,
nCastRange
,
nRadius
)
end
)
if
#
hitEnemy
>
most
then
most
=#
hitEnemy
nAoeLoc
=
J
.
GetVectorFromVectorToAngleWithDistance
(
bot
:
GetLocation
(),
angle
,
nCastRange
-
100
)
end
end
if
nAoeLoc
~=
nil
and
most
>
1
then
nTargetLocation
=
nAoeLoc
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-对线AOE'
end
--团战
if
J
.
IsInTeamFight
(
bot
,
1200
)
then
nAoeLoc
=
J
.
GetAoeEnemyHeroLocation
(
bot
,
nCastRange
,
nRadius
,
2
)
if
nAoeLoc
~=
nil
then
nTargetLocation
=
nAoeLoc
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-Battle'
end
end
--追杀
if
J
.
IsGoingOnSomeone
(
bot
)
then
if
J
.
IsValidHero
(
botTarget
)
and
J
.
CanCastOnNonMagicImmune
(
botTarget
)
and
J
.
IsInRange
(
botTarget
,
bot
,
nCastRange
)
then
nTargetLocation
=
botTarget
:
GetExtrapolatedLocation
(
nCastPoint
)
if
J
.
IsInLocRange
(
bot
,
nTargetLocation
,
nCastRange
)
then
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-Attack:'
..
J
.
Chat
.
GetNormName
(
botTarget
)
end
end
end
--撤退减速
if
J
.
IsRetreating
(
bot
)
then
for
_
,
npcEnemy
in
pairs
(
nEnemyHeroesInRange
)
do
if
J
.
IsValidHero
(
npcEnemy
)
and
bot
:
WasRecentlyDamagedByHero
(
npcEnemy
,
5
.
0
)
and
J
.
CanCastOnNonMagicImmune
(
npcEnemy
)
and
bot
:
IsFacingLocation
(
npcEnemy
:
GetExtrapolatedLocation
(
nCastPoint
),
20
)
then
nTargetLocation
=
npcEnemy
:
GetExtrapolatedLocation
(
nCastPoint
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-Retreat:'
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
end
end
end
--肉山
if
bot
:
GetActiveMode
()
==
BOT_MODE_ROSHAN
and
nMP
>=
0
.
78
then
if
J
.
IsRoshan
(
botTarget
)
and
J
.
GetHP
(
botTarget
)
>
0
.
15
and
J
.
IsInRange
(
botTarget
,
bot
,
nCastRange
)
then
nTargetLocation
=
botTarget
:
GetLocation
()
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'Q-Roshan'
end
end
return
BOT_ACTION_DESIRE_NONE
,
nil
end
function
X
.
ConsiderE
()
if
not
abilityE
:
IsFullyCastable
()
then
return
BOT_ACTION_DESIRE_NONE
,
nil
end
local
nSkillLV
=
abilityE
:
GetLevel
()
local
nCastRange
=
abilityE
:
GetCastRange
()
+
bonusRange
local
nRadius
=
600
local
nCastPoint
=
abilityE
:
GetCastPoint
()
local
nManaCost
=
abilityE
:
GetManaCost
()
local
nEnemyHeroesInRange
=
bot
:
GetNearbyHeroes
(
nCastRange
,
true
,
BOT_MODE_NONE
)
local
nTargetLocation
=
nil
--追杀
if
J
.
IsGoingOnSomeone
(
bot
)
then
if
J
.
IsValidHero
(
botTarget
)
and
J
.
IsInRange
(
bot
,
botTarget
,
nCastRange
+
nRadius
-
100
)
and
not
botTarget
:
IsAttackImmune
()
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
botTarget
,
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
1
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'E-Attack:'
..
J
.
Chat
.
GetNormName
(
botTarget
)
end
end
--追杀
if
J
.
IsInTeamFight
(
bot
,
1200
)
then
for
_
,
npcEnemy
in
pairs
(
nEnemyHeroesInRange
)
do
if
J
.
IsValidHero
(
botTarget
)
and
not
npcEnemy
:
IsAttackImmune
()
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
npcEnemy
,
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'E-Battle'
end
end
end
if
J
.
IsLaning
(
bot
)
then
for
_
,
npcEnemy
in
pairs
(
nEnemyHeroesInRange
)
do
if
J
.
IsValidHero
(
npcEnemy
)
and
not
botTarget
:
IsAttackImmune
()
and
J
.
IsInRange
(
npcEnemy
,
bot
,
nCastRange
+
nRadius
)
and
J
.
IsHealing
(
npcEnemy
)
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
botTarget
,
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-DispelHeal:"
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
end
if
J
.
IsValidHero
(
npcEnemy
)
and
not
botTarget
:
IsAttackImmune
()
and
J
.
IsAllowedToSpam
(
bot
,
nManaCost
)
and
nMP
>=
0
.
5
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
botTarget
,
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-SpamHarass:"
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
end
end
end
if
(
J
.
IsPushing
(
bot
)
or
J
.
IsDefending
(
bot
)
or
J
.
IsFarming
(
bot
)
)
and
J
.
IsAllowedToSpam
(
bot
,
nManaCost
*
0
.
32
)
and
nSkillLV
>=
2
and
DotaTime
()
>
8
*
60
then
local
nEnemyCreeps
=
bot
:
GetNearbyLaneCreeps
(
nCastRange
+
nRadius
,
true
)
if
#
nEnemyCreeps
>=
3
and
J
.
IsValid
(
nEnemyCreeps
[
1
]
)
and
not
nEnemyCreeps
[
1
]:
HasModifier
(
"modifier_fountain_glyph"
)
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
nEnemyCreeps
[
1
],
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-Push"
end
end
if
J
.
IsFarming
(
bot
)
and
not
(
J
.
IsPushing
(
bot
)
or
J
.
IsDefending
(
bot
)
)
and
J
.
IsAllowedToSpam
(
bot
,
nManaCost
*
0
.
25
)
and
nSkillLV
>=
3
and
#
hEnemyList
==
0
and
#
hAllyList
<=
2
then
local
nNeutralCreeps
=
bot
:
GetNearbyNeutralCreeps
(
nCastRange
+
nRadius
)
if
#
nNeutralCreeps
>=
3
or
nMP
>=
0
.
8
then
local
targetCreep
=
nNeutralCreeps
[
1
]
if
J
.
IsValid
(
targetCreep
)
and
targetCreep
:
GetHealth
()
>=
500
and
J
.
GetAroundTargetEnemyUnitCount
(
targetCreep
,
300
)
>=
1
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
targetCreep
,
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-Farm:"
..
(
#
nNeutralCreeps
)
end
end
end
if
bot
:
GetActiveMode
()
==
BOT_MODE_ROSHAN
and
nMP
>=
0
.
65
then
if
J
.
IsRoshan
(
botTarget
)
and
J
.
GetHP
(
botTarget
)
>
0
.
15
and
J
.
IsInRange
(
botTarget
,
bot
,
nCastRange
)
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
botTarget
,
nCastRange
,
nRadius
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'E-Roshan'
end
end
local
nRManaCost
=
abilityR
:
GetManaCost
()
if
#
hEnemyList
>=
1
and
(
not
abilityR
:
IsFullyCastable
()
or
bot
:
GetMana
()
>
nRManaCost
)
then
local
nAlliedCreeps
=
bot
:
GetNearbyLaneCreeps
(
nCastRange
+
nRadius
,
false
)
if
J
.
IsValidHero
(
hEnemyList
[
1
]
)
and
not
hEnemyList
[
1
]:
IsAttackImmune
()
and
J
.
IsAllowedToSpam
(
bot
,
nManaCost
)
and
nMP
>=
0
.
5
and
(
#
nAlliedCreeps
>=
1
or
#
hAllyList
>=
2
)
then
nTargetLocation
=
J
.
GetCastLocation
(
bot
,
hEnemyList
[
1
],
nCastRange
,
nRadius
)
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
'E-Spam'
end
end
local
nTowerList
=
bot
:
GetNearbyTowers
(
990
,
true
)
local
nBarrackList
=
bot
:
GetNearbyBarracks
(
990
,
true
)
local
nEnemyAncient
=
GetAncient
(
GetOpposingTeam
()
)
local
hBuildingList
=
{
botTarget
,
nTowerList
[
1
],
nBarrackList
[
1
],
nEnemyAncient
,
}
for
_
,
building
in
pairs
(
hBuildingList
)
do
if
J
.
IsValidBuilding
(
building
)
and
J
.
IsInRange
(
bot
,
building
,
nCastRange
+
nRadius
)
and
not
building
:
HasModifier
(
'modifier_fountain_glyph'
)
and
not
building
:
HasModifier
(
'modifier_invulnerable'
)
and
not
building
:
HasModifier
(
'modifier_backdoor_protection'
)
and
not
J
.
IsKeyWordUnit
(
"DOTA_Outpost"
,
building
)
then
nTargetLocation
=
building
:
GetLocation
()
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-Push-Tower"
end
end
nTowerList
=
bot
:
GetNearbyTowers
(
990
,
false
)
nBarrackList
=
bot
:
GetNearbyBarracks
(
990
,
false
)
nEnemyAncient
=
GetAncient
(
GetOpposingTeam
()
)
hBuildingList
=
{
nTowerList
[
1
],
nBarrackList
[
1
],
nEnemyAncient
,
}
for
_
,
building
in
pairs
(
hBuildingList
)
do
if
J
.
IsValidBuilding
(
building
)
and
J
.
IsInRange
(
bot
,
building
,
nCastRange
+
nRadius
)
and
not
J
.
IsKeyWordUnit
(
"DOTA_Outpost"
,
building
)
and
(
J
.
GetAroundTargetEnemyUnitCount
(
building
,
600
)
>=
1
or
J
.
IsDefending
(
bot
)
)
then
nTargetLocation
=
building
:
GetLocation
()
+
RandomVector
(
nRadius
*
0
.
5
)
return
BOT_ACTION_DESIRE_HIGH
,
nTargetLocation
,
"E-Defend-Tower"
end
end
return
BOT_ACTION_DESIRE_NONE
,
nil
end
function
X
.
ConsiderD
()
if
not
abilityD
:
IsFullyCastable
()
then
return
BOT_ACTION_DESIRE_NONE
,
nil
end
local
nSkillLV
=
abilityD
:
GetLevel
()
local
nCastRange
=
abilityD
:
GetCastRange
()
+
bonusRange
local
nCastPoint
=
abilityD
:
GetCastPoint
()
local
nManaCost
=
abilityD
:
GetManaCost
()
local
nAlliedHeroesInRange
=
bot
:
GetNearbyHeroes
(
nCastRange
,
false
,
BOT_MODE_NONE
)
local
nEnemyHeroesInRange
=
bot
:
GetNearbyHeroes
(
nCastRange
,
true
,
BOT_MODE_NONE
)
if
J
.
IsInTeamFight
(
bot
,
1200
)
then
local
npcWeakestEnemy
=
J
.
GetVulnerableWeakestUnitWithLotusCheck
(
bot
,
true
,
true
,
nCastRange
)
if
npcWeakestEnemy
~=
nil
then
return
BOT_ACTION_DESIRE_HIGH
,
npcWeakestEnemy
,
'D-Battle-Weakest:'
..
J
.
Chat
.
GetNormName
(
npcWeakestEnemy
)
end
end
if
J
.
IsGoingOnSomeone
(
bot
)
then
if
J
.
IsValidHero
(
botTarget
)
and
J
.
CanCastAbilityOnTarget
(
botTarget
,
false
)
and
J
.
CanCastOnTargetAdvanced
(
botTarget
)
and
J
.
IsInRange
(
botTarget
,
bot
,
nCastRange
)
then
return
BOT_ACTION_DESIRE_HIGH
,
botTarget
,
'D-Slow:'
..
J
.
Chat
.
GetNormName
(
botTarget
)
end
end
if
J
.
IsRetreating
(
bot
)
then
for
_
,
npcEnemy
in
pairs
(
nEnemyHeroesInRange
)
do
if
J
.
IsValid
(
npcEnemy
)
and
bot
:
WasRecentlyDamagedByHero
(
npcEnemy
,
3
.
5
)
and
J
.
CanCastAbilityOnTarget
(
botTarget
,
false
)
and
J
.
CanCastOnTargetAdvanced
(
npcEnemy
)
and
bot
:
IsFacingLocation
(
npcEnemy
:
GetExtrapolatedLocation
(
nCastPoint
),
20
)
then
return
BOT_ACTION_DESIRE_HIGH
,
npcEnemy
,
'D-Retreat:'
..
J
.
Chat
.
GetNormName
(
npcEnemy
)
end
end
end
return
BOT_ACTION_DESIRE_NONE
,
nil
end
function
X
.
ConsiderR
()
if
not
abilityR
:
IsFullyCastable
()
then
return
BOT_ACTION_DESIRE_NONE
,
nil
end
local
nSkillLV
=
abilityR
:
GetLevel
()
local
nRadius
=
abilityR
:
GetSpecialValueInt
(
'start_radius'
)
+
abilityR
:
GetSpecialValueInt
(
'radius'
)
local
nCastPoint
=
abilityR
:
GetCastPoint
()
local
nManaCost
=
abilityR
:
GetManaCost
()
local
nAlliedHeroesInRange
=
bot
:
GetNearbyHeroes
(
nRadius
,
false
,
BOT_MODE_NONE
)
local
nEnemyHeroesInRange
=
bot
:
GetNearbyHeroes
(
nRadius
-
300
,
true
,
BOT_MODE_NONE
)
local
nTargetLocation
=
nil
if
J
.
IsInTeamFight
(
bot
,
1200
)
then
if
#
nEnemyHeroesInRange
>=
3
then
return
BOT_ACTION_DESIRE_HIGH
,
'R-Battle'
end
end
if
J
.
IsGoingOnSomeone
(
bot
)
then
if
J
.
IsValidHero
(
botTarget
)
and
J
.
CanCastOnMagicImmune
(
botTarget
)
and
J
.
IsInRange
(
botTarget
,
bot
,
nRadius
-
150
)
and
#
nEnemyHeroesInRange
>=
2
and
#
nEnemyHeroesInRange
>=
#
nAlliedHeroesInRange
then
return
BOT_ACTION_DESIRE_HIGH
,
'R-Chase:'
..
J
.
Chat
.
GetNormName
(
botTarget
)
end
end
if
J
.
IsRetreating
(
bot
)
and
bot
:
WasRecentlyDamagedByHero
(
npcEnemy
,
3
.
0
)
and
#
nEnemyHeroesInRange
>=
2
and
#
nEnemyHeroesInRange
>=
#
hAllyList
then
return
BOT_ACTION_DESIRE_HIGH
,
'R-Retreat'
end
return
BOT_ACTION_DESIRE_NONE
,
nil
end
return
X
\ No newline at end of file
FunLib/aba_buff.lua
View file @
e1de1801
...
...
@@ -18,10 +18,10 @@ Buff["creep_is_immune"] = {
Buff
[
"enemy_is_immune"
]
=
{
"modifier_necrolyte_reapers_scythe"
,
--Nec大
"modifier_winter_wyvern_winters_curse"
,
--冰龙大
"modifier_winter_wyvern_winters_curse_aura"
,
--冰龙大
"modifier_troll_warlord_battle_trance"
,
--巨魔大
"modifier_naga_siren_song_of_the_siren"
,
--娜迦大
--"modifier_modifier_dazzle_shallow_grave",
--"modifier_oracle_false_promise_timer",
--"modifier_item_blade_mail_reflect",
...
...
@@ -98,6 +98,8 @@ Buff["hero_is_healing"] = {
"modifier_item_spirit_vessel_heal"
,
"modifier_bottle_regeneration"
,
--"modifier_filler_heal",
"modifier_aegis_regen"
,
"modifier_rune_regen"
,
}
...
...
@@ -107,21 +109,27 @@ Buff["hero_not_invisible"] = {
"modifier_item_dustofappearance"
,
"modifier_sniper_assassinate"
,
"modifier_bounty_hunter_track"
,
--大鱼大
--血魔嗜血
--祸乱魔爪
--渔网诱捕
--阿托斯
--小Y锁
--米波网
--娜迦网
--冰女冰
--火猫索
--军团决斗
--骨法吸
--屠夫大
--大树大
--孽主深渊
"modifier_slardar_amplify_damage"
,
"modifier_bloodseeker_thirst_vision"
,
"modifier_bane_fiends_grip"
,
"modifier_bane_fiends_grip_cast_illusion"
,
"modifier_oracle_fortunes_end_purge"
,
"modifier_shadow_shaman_shackles"
,
"modifier_rod_of_atos_debuff"
,
"modifier_gungnir_debuff"
,
"modifier_meepo_earthbind"
,
"modifier_naga_siren_ensnare"
,
"modifier_crystal_maiden_frostbite"
,
"modifier_ember_spirit_searing_chains"
,
"modifier_legion_commander_duel"
,
"modifier_pugna_life_drain"
,
"modifier_pudge_dismember"
,
"modifier_treant_natures_guise_root"
,
"modifier_treant_overgrowth"
,
"modifier_abyssal_underlord_pit_of_malice_ensare"
,
"modifier_aghsfort_lich_sinister_gaze"
,
"modifier_lone_druid_spirit_bear_entangle_effect"
,
"modifier_troll_warlord_berserkers_rage_ensnare"
,
}
...
...
FunLib/aba_item.lua
View file @
e1de1801
...
...
@@ -381,6 +381,8 @@ local sConsumableList = {
'item_cheese'
,
'item_refresher_shard'
,
'item_aegis'
,
'item_ultimate_scepter_roshan'
,
'item_aghanims_shard_roshan'
,
}
local
tConsumableItemList
=
{}
...
...
@@ -441,62 +443,72 @@ local tNeutralItemLevelList = {
[
'item_arcane_ring'
]
=
35
,
[
'item_broom_handle'
]
=
33
,
[
'item_faded_broach'
]
=
31
,
[
'item_keen_optic'
]
=
29
,
-- 基恩镜片
[
'item_ocean_heart'
]
=
43
,
--
['item_faded_broach'] = 31,
--
['item_keen_optic'] = 29, -- 基恩镜片
--
['item_ocean_heart'] = 43,
[
'item_royal_jelly'
]
=
96
,
[
'item_trusty_shovel'
]
=
32
,
[
'item_ironwood_tree'
]
=
44
,
[
'item_mysterious_hat'
]
=
35
,
[
'item_chipped_vest'
]
=
34
,
--
['item_chipped_vest'] = 34,
[
'item_possessed_mask'
]
=
33
,
[
'item_pogo_stick'
]
=
30
,
[
'item_unstable_wand'
]
=
30
,
[
'item_seeds_of_serenity'
]
=
30
,
[
'item_lance_of_pursuit'
]
=
30
,
[
'item_occult_bracelet'
]
=
30
,
[
'item_dragon_scale'
]
=
38
,
-- 炎龙之鳞
[
'item_essence_ring'
]
=
55
.
5
,
-- 精华指环
--
['item_essence_ring'] = 55.5, -- 精华指环
[
'item_grove_bow'
]
=
40
,
-- 林野长弓
[
'item_imp_claw'
]
=
51
.
5
,
-- 魔童之爪
--
['item_imp_claw'] = 51.5, -- 魔童之爪
[
'item_nether_shawl'
]
=
28
,
-- 幽冥披巾
[
'item_philosophers_stone'
]
=
47
.
5
,
-- 贤者石
[
'item_pupils_gift'
]
=
41
,
[
'item_ring_of_aquila'
]
=
46
,
[
'item_vambrace'
]
=
52
,
[
'item_quicksilver_amulet'
]
=
45
,
-- ['item_quicksilver_amulet'] = 45,
[
'item_bullwhip'
]
=
48
,
[
'item_misericorde'
]
=
40
,
[
'item_eye_of_the_vizier'
]
=
40
,
[
'item_specialists_array'
]
=
40
,
[
'item_dagger_of_ristul'
]
=
40
,
[
'item_enchanted_quiver'
]
=
44
,
-- 魔力箭袋
[
'item_mind_breaker'
]
=
55
,
[
'item_orb_of_destruction'
]
=
53
,
-- 毁灭灵球
--
['item_orb_of_destruction'] = 53, -- 毁灭灵球
[
'item_paladin_sword'
]
=
40
,
-- 骑士剑
[
'item_quickening_charm'
]
=
50
,
[
'item_titan_sliver'
]
=
54
,
-- 巨神残铁
[
'item_spider_legs'
]
=
60
,
-- ['item_spider_legs'] = 60,
[
'item_ceremonial_robe'
]
=
46
,
[
'item_cloak_of_flames'
]
=
49
,
[
'item_elven_tunic'
]
=
47
,
[
'item_psychic_headband'
]
=
50
,
[
'item_black_powder_bag'
]
=
50
,
[
'item_ogre_seal_totem'
]
=
50
,
[
'item_spy_gadget'
]
=
36
,
-- 望远镜
[
'item_flicker'
]
=
49
,
-- 闪灵
[
'item_illusionsts_cape'
]
=
64
,
[
'item_minotaur_horn'
]
=
65
,
-- 恶牛角
--
['item_illusionsts_cape'] = 64,
--
['item_minotaur_horn'] = 65, -- 恶牛角
[
'item_ninja_gear'
]
=
58
,
-- 忍者用具
[
'item_spell_prism'
]
=
69
,
-- 法术棱镜
[
'item_the_leveller'
]
=
61
,
-- 平世剑
--
['item_the_leveller'] = 61, -- 平世剑
[
'item_timeless_relic'
]
=
59
,
-- 永恒遗物
[
'item_trickster_cloak'
]
=
62
,
[
'item_stormcrafter'
]
=
68
,
[
'item_penta_edged_sword'
]
=
57
,
[
'item_heavy_blade'
]
=
55
,
[
'item_ascetic_cap'
]
=
55
,
[
'item_havoc_hammer'
]
=
55
,
[
'item_apex'
]
=
72
,
-- 极品
[
'item_ballista'
]
=
3
6
.
5
,
-- 弩炮
[
'item_ballista'
]
=
7
6
.
5
,
-- 弩炮
[
'item_demonicon'
]
=
73
,
[
'item_desolator_2'
]
=
75
,
[
'item_ex_machina'
]
=
71
,
...
...
@@ -505,9 +517,9 @@ local tNeutralItemLevelList = {
[
'item_mirror_shield'
]
=
77
,
[
'item_pirate_hat'
]
=
74
,
[
'item_seer_stone'
]
=
40
,
[
'item_book_of_shadows'
]
=
49
,
[
'item_giants_ring'
]
=
70
,
[
'item_force_field'
]
=
70
,
}
...
...
@@ -900,8 +912,6 @@ Item['item_sven_outfit'] = { 'item_tango', 'item_flask', 'item_quelling_blade
Item
[
'item_bristleback_outfit'
]
=
{
'item_tango'
,
'item_flask'
,
'item_quelling_blade'
,
'item_double_branches'
,
'item_circlet'
,
'item_magic_stick'
,
'item_gauntlets'
,
'item_recipe_bracer'
,
'item_flask'
,
'item_recipe_magic_wand'
,
'item_power_treads_str'
}
Item
[
'item_centaur_outfit'
]
=
{
'item_tango'
,
'item_flask'
,
'item_quelling_blade'
,
'item_double_branches'
,
'item_circlet'
,
'item_magic_stick'
,
'item_gauntlets'
,
'item_recipe_bracer'
,
'item_flask'
,
'item_recipe_magic_wand'
,
'item_tranquil_boots'
}
----------------------------------------------------------------------
...
...
FunLib/aba_minion.lua
View file @
e1de1801
...
...
@@ -111,12 +111,9 @@ function X.IsMinionWithNoSkill(unit_name)
or
unit_name
==
"npc_dota_neutral_kobold_tunneler"
or
unit_name
==
"npc_dota_neutral_kobold_taskmaster"
or
unit_name
==
"npc_dota_neutral_centaur_outrunner"
or
unit_name
==
"npc_dota_neutral_fel_beast"
or
unit_name
==
"npc_dota_neutral_polar_furbolg_champion"
or
unit_name
==
"npc_dota_neutral_ogre_mauler"
or
unit_name
==
"npc_dota_neutral_giant_wolf"
or
unit_name
==
"npc_dota_neutral_alpha_wolf"
or
unit_name
==
"npc_dota_neutral_wildkin"
or
unit_name
==
"npc_dota_neutral_jungle_stalker"
or
unit_name
==
"npc_dota_neutral_elder_jungle_stalker"
or
unit_name
==
"npc_dota_neutral_prowler_acolyte"
...
...
@@ -126,9 +123,7 @@ function X.IsMinionWithNoSkill(unit_name)
or
unit_name
==
"npc_dota_neutral_gnoll_assassin"
or
unit_name
==
"npc_dota_neutral_ghost"
or
unit_name
==
"npc_dota_wraith_ghost"
or
unit_name
==
"npc_dota_neutral_dark_troll"
or
unit_name
==
"npc_dota_neutral_forest_troll_berserker"
or
unit_name
==
"npc_dota_neutral_harpy_scout"
or
unit_name
==
"npc_dota_neutral_black_drake"
or
unit_name
==
"npc_dota_dark_troll_warlord_skeleton_warrior"
or
unit_name
==
"npc_dota_necronomicon_warrior_1"
...
...
@@ -158,7 +153,10 @@ local independent = {
"npc_dota_brewmaster_storm_3"
,
"npc_dota_brewmaster_fire_1"
,
"npc_dota_brewmaster_fire_2"
,
"npc_dota_brewmaster_fire_3"
"npc_dota_brewmaster_fire_3"
,
"npc_dota_brewmaster_void_1"
,
"npc_dota_brewmaster_void_2"
,
"npc_dota_brewmaster_void_3"
}
function
X
.
IsValidUnit
(
unit
)
...
...
@@ -559,6 +557,13 @@ end
-----------MINION WITH SKILLS
function
X
.
IsMinionWithSkill
(
unit_name
)
return
unit_name
==
"npc_dota_neutral_centaur_khan"
or
unit_name
==
"npc_dota_neutral_fel_beast"
or
unit_name
==
"npc_dota_neutral_warpine_raider"
or
unit_name
==
"npc_dota_neutral_ogre_mauler"
or
unit_name
==
"npc_dota_neutral_wildkin"
or
unit_name
==
"npc_dota_neutral_ice_shaman"
or
unit_name
==
"npc_dota_neutral_dark_troll"
or
unit_name
==
"npc_dota_neutral_harpy_scout"
or
unit_name
==
"npc_dota_neutral_polar_furbolg_ursa_warrior"
or
unit_name
==
"npc_dota_neutral_mud_golem"
or
unit_name
==
"npc_dota_neutral_mud_golem_split"
...
...
ability_item_usage_generic.lua
View file @
e1de1801
...
...
@@ -670,9 +670,9 @@ local function ItemUsageComplement()
botTarget
=
J
.
GetProperTarget
(
bot
)
nMode
=
bot
:
GetActiveMode
()
local
aether
=
J
.
IsItemAvailable
(
"item_aether_lens"
)
if
aether
~=
nil
then
aetherRange
=
250
else
aetherRange
=
0
end
aetherRange
=
J
.
GetBonusCastRange
(
bot
)
local
nItemSlot
=
{
5
,
4
,
3
,
2
,
1
,
0
,
15
,
16
}
for
_
,
nSlot
in
pairs
(
nItemSlot
)
...
...
hero_selection.lua
View file @
e1de1801
...
...
@@ -233,6 +233,7 @@ local sHasDevelopmentHeroList = {
"npc_dota_hero_mirana"
,
"npc_dota_hero_muerta"
,
"npc_dota_hero_visage"
,
'npc_dota_hero_venomancer'
,
}
...
...
@@ -248,6 +249,7 @@ local sFirstList = {
"npc_dota_hero_death_prophet"
,
"npc_dota_hero_lion"
,
"npc_dota_hero_dazzle"
,
'npc_dota_hero_venomancer'
,
-- "npc_dota_hero_windrunner",
...
...
@@ -375,6 +377,7 @@ local sMageList = {
-- "npc_dota_hero_windrunner",
"npc_dota_hero_queenofpain"
,
"npc_dota_hero_disruptor"
,
'npc_dota_hero_venomancer'
,
}
...
...
@@ -460,6 +463,7 @@ local sMidList = {
"npc_dota_hero_sniper"
,
"npc_dota_hero_viper"
,
"npc_dota_hero_muerta"
,
'npc_dota_hero_venomancer'
,
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment