Commit f9b36aa1 authored by JoyJ's avatar JoyJ

7.33 stuffs

parent bfb02f13
...@@ -40,7 +40,7 @@ tOutFitList['outfit_carry'] = { ...@@ -40,7 +40,7 @@ tOutFitList['outfit_carry'] = {
'item_melee_carry_outfit', 'item_melee_carry_outfit',
-- 'item_medallion_of_courage', -- 'item_medallion_of_courage',
'item_vanguard', 'item_vanguard',
-- "item_aghanims_shard", "item_aghanims_shard",
"item_solar_crest", "item_solar_crest",
"item_black_king_bar", "item_black_king_bar",
"item_ultimate_scepter", "item_ultimate_scepter",
...@@ -172,8 +172,8 @@ function X.SkillsComplement() ...@@ -172,8 +172,8 @@ function X.SkillsComplement()
hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 ) hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 )
aetherRange = J.GetBonusCastRange( bot ) aetherRange = J.GetBonusCastRange( bot )
if talent3:IsTrained() then talent3Damage = talent3:GetSpecialValueInt( "value" ) end if talent3:IsTrained() then talent3Damage = talent3:GetSpecialValueInt( "value" ) end
...@@ -185,7 +185,11 @@ function X.SkillsComplement() ...@@ -185,7 +185,11 @@ function X.SkillsComplement()
J.SetQueuePtToINT( bot, false ) J.SetQueuePtToINT( bot, false )
bot:ActionQueue_UseAbility( abilityE ) if bit.band(abilityE:GetBehavior(),ABILITY_BEHAVIOR_NO_TARGET)>0 then
bot:ActionQueue_UseAbility( abilityE )
else
bot:ActionQueue_UseAbilityOnEntity(abilityE,bot)
end
return return
end end
......
...@@ -39,14 +39,14 @@ tOutFitList['outfit_carry'] = { ...@@ -39,14 +39,14 @@ tOutFitList['outfit_carry'] = {
"item_crystal_maiden_outfit", "item_crystal_maiden_outfit",
"item_force_staff", "item_force_staff",
"item_hand_of_midas", "item_hand_of_midas",
"item_ultimate_scepter", -- "item_ultimate_scepter",
"item_aghanims_shard", "item_aghanims_shard",
"item_orchid", "item_orchid",
"item_black_king_bar", "item_black_king_bar",
"item_hurricane_pike", "item_hurricane_pike",
"item_bloodthorn", "item_bloodthorn",
"item_mystic_staff", "item_mystic_staff",
"item_ultimate_scepter_2", -- "item_ultimate_scepter_2",
"item_sheepstick", "item_sheepstick",
} }
...@@ -61,6 +61,7 @@ tOutFitList['outfit_priest'] = { ...@@ -61,6 +61,7 @@ tOutFitList['outfit_priest'] = {
"item_glimmer_cape", "item_glimmer_cape",
"item_aghanims_shard", "item_aghanims_shard",
"item_guardian_greaves", "item_guardian_greaves",
"item_octarine_core",
"item_spirit_vessel", "item_spirit_vessel",
--"item_holy_locket", --"item_holy_locket",
-- "item_ultimate_scepter", -- "item_ultimate_scepter",
...@@ -81,6 +82,7 @@ tOutFitList['outfit_mage'] = { ...@@ -81,6 +82,7 @@ tOutFitList['outfit_mage'] = {
"item_aghanims_shard", "item_aghanims_shard",
--"item_holy_locket", --"item_holy_locket",
"item_veil_of_discord", "item_veil_of_discord",
"item_octarine_core",
-- "item_ultimate_scepter", -- "item_ultimate_scepter",
"item_mystic_staff", "item_mystic_staff",
-- "item_ultimate_scepter_2", -- "item_ultimate_scepter_2",
...@@ -179,10 +181,7 @@ function X.SkillsComplement() ...@@ -179,10 +181,7 @@ function X.SkillsComplement()
hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 ) hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 )
aetherRange = J.GetBonusCastRange( bot )
if aether ~= nil then aetherRange = 225 end
castWDesire, castWTarget, sMotive = X.ConsiderW() castWDesire, castWTarget, sMotive = X.ConsiderW()
if ( castWDesire > 0 ) if ( castWDesire > 0 )
...@@ -219,82 +218,35 @@ function X.SkillsComplement() ...@@ -219,82 +218,35 @@ function X.SkillsComplement()
return return
end end
castRDesire, castRTarget, sMotive = X.ConsiderR() castRDesire, castRTarget, sMotive = X.ConsiderR()
if ( castRDesire > 0 ) if ( castRDesire > 0 )
then then
J.SetReportMotive( bDebugMode, sMotive ) J.SetReportMotive( bDebugMode, sMotive )
J.SetQueuePtToINT( bot, true ) J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbility( abilityR ) bot:ActionQueue_UseAbility( abilityR )
return return
end end
castFDesire, castFTarget, sMotive = X.ConsiderF()
if ( castFDesire > 0 )
then
J.SetReportMotive( bDebugMode, sMotive )
J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbilityOnEntity( abilityF, castFTarget )
return
end
end
function X.ConsiderF()
if not abilityF:IsFullyCastable()
or not bot:HasScepter()
then return 0 end
if not abilityQ:IsFullyCastable()
and not abilityW:IsFullyCastable()
and not abilityE:IsFullyCastable()
and not abilityR:IsFullyCastable()
then
local allyList = bot:GetNearbyHeroes( 400, false, BOT_MODE_NONE )
local targetAlly = bot
local targetAllyNetWorth = 0
for _, npcAlly in pairs( allyList )
do
if npcAlly:IsAlive()
and not npcAlly:IsIllusion()
and not npcAlly:HasModifier('modifier_arc_warden_tempest_double')
then
if npcAlly:GetNetWorth() > targetAllyNetWorth
then
targetAlly = npcAlly
targetAllyNetWorth = npcAlly:GetNetWorth()
end
end
end
if targetAlly ~= nil
then
return BOT_ACTION_DESIRE_HIGH, targetAlly, "F-刷新物品"
end
end
return BOT_ACTION_DESIRE_NONE
end end
function X.ConsiderR() function X.ConsiderR()
local nSkillLV = abilityQ:GetLevel()
local cost= nSkillLV * 25 + 50
if bot:HasModifier('modifier_dazzle_bad_juju_manacost') then
cost=math.pow(cost,bot:GetModifierStackCount(bot:GetModifierByName('modifier_dazzle_bad_juju_manacost')))
end
if not abilityR:IsFullyCastable() then return 0 end if not abilityR:IsFullyCastable() then return 0 end
if not abilityQ:IsFullyCastable() if not abilityQ:IsFullyCastable()
and not abilityW:IsFullyCastable() and not abilityW:IsFullyCastable()
and not abilityE:IsFullyCastable() and not abilityE:IsFullyCastable()
then and (abilityW:GetCooldownTimeRemaining() < abilityR:GetVal('cooldown_reduction')
or J.GetModifierTime(bot, 'modifier_dazzle_shallow_grave') > abilityR:GetCooldown()
or cost * 2 < bot:GetHealth()) then
local enemyList = bot:GetNearbyHeroes( 900, true, BOT_MODE_NONE ) local enemyList = bot:GetNearbyHeroes( 900, true, BOT_MODE_NONE )
if #enemyList >= 1 if #enemyList >= 1
then then
...@@ -302,7 +254,6 @@ function X.ConsiderR() ...@@ -302,7 +254,6 @@ function X.ConsiderR()
end end
end end
return BOT_ACTION_DESIRE_NONE return BOT_ACTION_DESIRE_NONE
end end
...@@ -492,11 +443,8 @@ function X.ConsiderQ() ...@@ -492,11 +443,8 @@ function X.ConsiderQ()
end end
end end
return BOT_ACTION_DESIRE_NONE return BOT_ACTION_DESIRE_NONE
end end
...@@ -517,6 +465,9 @@ function X.ConsiderW() ...@@ -517,6 +465,9 @@ function X.ConsiderW()
local hCastTarget = nil local hCastTarget = nil
local sCastMotive = nil local sCastMotive = nil
if nHP < 0.05 then
return BOT_ACTION_DESIRE_HIGH, bot, "W-保护自己"
end
for _, npcAlly in pairs( hAllyList ) for _, npcAlly in pairs( hAllyList )
do do
......
...@@ -164,7 +164,7 @@ local castWDesire, castWTarget ...@@ -164,7 +164,7 @@ local castWDesire, castWTarget
local castEDesire, castETarget local castEDesire, castETarget
local castASDesire, castASTarget local castASDesire, castASTarget
local castE2Desire local castE2Desire
local castDDesire local castDDesire, castDLocation
local castRDesire, castRLocation local castRDesire, castRLocation
local Combo1Desire, C1Target, C1Location local Combo1Desire, C1Target, C1Location
local Combo2Desire, C2Target, C2Location local Combo2Desire, C2Target, C2Location
...@@ -302,11 +302,12 @@ function X.SkillsComplement() ...@@ -302,11 +302,12 @@ function X.SkillsComplement()
--浪 --浪
castDDesire, castDLocation = X.ConsiderD() castDDesire, castDLocation = X.ConsiderD()
if not castDLocation then castDLocation = bot:GetLocation() end
if castDDesire > 0 if castDDesire > 0
then then
J.SetQueuePtToINT( bot, true ) J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbility( abilityD ) bot:ActionQueue_UseAbilityOnLocation( abilityD, castDLocation )
return return
end end
...@@ -465,6 +466,9 @@ function X.ConsiderCombo3() ...@@ -465,6 +466,9 @@ function X.ConsiderCombo3()
end end
function X.ConsiderD() function X.ConsiderD()
local nCastRange = abilityD:GetCastRange()
local nRadius = abilityD:GetVal('torrent_max_distance')
local nCastPoint = abilityQ:GetCastPoint()
if not abilityD:IsFullyCastable() if not abilityD:IsFullyCastable()
or not bot:HasScepter() or not bot:HasScepter()
...@@ -476,22 +480,17 @@ function X.ConsiderD() ...@@ -476,22 +480,17 @@ function X.ConsiderD()
then then
local npcTarget = J.GetProperTarget( bot ) local npcTarget = J.GetProperTarget( bot )
if J.IsValidHero( npcTarget ) if J.IsValidHero( npcTarget )
and J.IsInRange( bot, npcTarget, 900 ) and J.IsInRange( bot, npcTarget, 300 )
and J.CanCastOnNonMagicImmune( npcTarget ) and J.CanCastOnNonMagicImmune( npcTarget )
then then
return BOT_ACTION_DESIRE_HIGH return BOT_ACTION_DESIRE_HIGH
end end
end end
if J.IsRetreating( bot ) or J.IsInTeamFight( bot, 1200 ) if J.IsRetreating( bot ) or J.IsInTeamFight( bot, 1600 )
then then
local nEnemyHeroList = J.GetEnemyList( bot, 1100 ) local locationAoE = bot:FindAoELocation( true, true, bot:GetLocation(), nCastRange, nRadius, nCastPoint, 3 )
if #nEnemyHeroList >= 3 if locationAoE then return BOT_ACTION_DESIRE_HIGH,locationAoE end
or ( #nEnemyHeroList >= 2 and nHP <= 0.5 )
or ( #nEnemyHeroList >= 1 and nHP <= 0.4 and bot:WasRecentlyDamagedByHero( 3.0 ) )
then
return BOT_ACTION_DESIRE_HIGH
end
end end
return BOT_ACTION_DESIRE_NONE return BOT_ACTION_DESIRE_NONE
......
...@@ -170,11 +170,7 @@ function X.SkillsComplement() ...@@ -170,11 +170,7 @@ function X.SkillsComplement()
hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 ) hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 )
--计算天赋可能带来的通用变化
aetherRange = J.GetBonusCastRange( bot ) aetherRange = J.GetBonusCastRange( bot )
castRDesire, castRTarget, sMotive = X.ConsiderR() castRDesire, castRTarget, sMotive = X.ConsiderR()
if castRDesire > 0 if castRDesire > 0
...@@ -217,7 +213,7 @@ function X.SkillsComplement() ...@@ -217,7 +213,7 @@ function X.SkillsComplement()
J.SetQueuePtToINT( bot, true ) J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbilityOnLocation( abilityQ, castQTarget ) bot:ActionQueue_UseAbility( abilityQ )
return return
end end
...@@ -249,8 +245,8 @@ function X.ConsiderQ() ...@@ -249,8 +245,8 @@ function X.ConsiderQ()
if not abilityQ:IsFullyCastable() then return 0 end if not abilityQ:IsFullyCastable() then return 0 end
local nSkillLV = abilityQ:GetLevel() local nSkillLV = abilityQ:GetLevel()
local nCastRange = abilityQ:GetCastRange() local nCastRange = 600
local nRadius = abilityQ:GetSpecialValueInt( 'radius' ) local nRadius = 600
local nCastPoint = abilityQ:GetCastPoint() local nCastPoint = abilityQ:GetCastPoint()
local nManaCost = abilityQ:GetManaCost() local nManaCost = abilityQ:GetManaCost()
local nDamage = abilityQ:GetSpecialValueInt( 'damage' ) * 2 local nDamage = abilityQ:GetSpecialValueInt( 'damage' ) * 2
...@@ -273,7 +269,7 @@ function X.ConsiderQ() ...@@ -273,7 +269,7 @@ function X.ConsiderQ()
end end
--消耗 --消耗
local nCanHurtEnemyAoE = bot:FindAoELocation( true, true, bot:GetLocation(), nCastRange, nRadius + 50, 0, 0 ) local nCanHurtEnemyAoE = bot:FindAoELocation( true, true, bot:GetLocation(), 10, 590, 0, 0 )
if nCanHurtEnemyAoE.count >= 3 if nCanHurtEnemyAoE.count >= 3
then then
hCastTarget = nCanHurtEnemyAoE.targetloc hCastTarget = nCanHurtEnemyAoE.targetloc
...@@ -285,7 +281,7 @@ function X.ConsiderQ() ...@@ -285,7 +281,7 @@ function X.ConsiderQ()
if J.IsLaning( bot ) if J.IsLaning( bot )
then then
--对线消耗 --对线消耗
local nAoeLoc = J.GetAoeEnemyHeroLocation( bot, nCastRange - 80, nRadius - 80, 2 ) local nAoeLoc = J.GetAoeEnemyHeroLocation( bot, 50, 450, 2 )
if nAoeLoc ~= nil and nMP > 0.38 if nAoeLoc ~= nil and nMP > 0.38
then then
hCastTarget = nAoeLoc hCastTarget = nAoeLoc
...@@ -297,7 +293,7 @@ function X.ConsiderQ() ...@@ -297,7 +293,7 @@ function X.ConsiderQ()
--团战 --团战
if J.IsInTeamFight( bot, 1200 ) if J.IsInTeamFight( bot, 1200 )
then then
local nAoeLoc = J.GetAoeEnemyHeroLocation( bot, nCastRange, nRadius - 100, 2 ) local nAoeLoc = J.GetAoeEnemyHeroLocation( bot, 49, 499, 2 )
if nAoeLoc ~= nil if nAoeLoc ~= nil
then then
hCastTarget = nAoeLoc hCastTarget = nAoeLoc
...@@ -315,7 +311,7 @@ function X.ConsiderQ() ...@@ -315,7 +311,7 @@ function X.ConsiderQ()
then then
if nSkillLV >= 2 or nMP > 0.68 or J.GetHP( botTarget ) < 0.38 if nSkillLV >= 2 or nMP > 0.68 or J.GetHP( botTarget ) < 0.38
then then
hCastTarget = J.GetCastLocation( bot, botTarget, nCastRange, nRadius - 80 ) hCastTarget = J.GetCastLocation( bot, botTarget, 10, 490 )
if hCastTarget ~= nil if hCastTarget ~= nil
then then
return BOT_ACTION_DESIRE_HIGH, hCastTarget, 'Q-攻击'..J.Chat.GetNormName( botTarget ) return BOT_ACTION_DESIRE_HIGH, hCastTarget, 'Q-攻击'..J.Chat.GetNormName( botTarget )
...@@ -354,7 +350,7 @@ function X.ConsiderQ() ...@@ -354,7 +350,7 @@ function X.ConsiderQ()
and ( botTarget:GetMagicResist() < 0.4 or nMP > 0.9 ) and ( botTarget:GetMagicResist() < 0.4 or nMP > 0.9 )
then then
local nShouldHurtCount = nMP > 0.55 and 3 or 4 local nShouldHurtCount = nMP > 0.55 and 3 or 4
local locationAoE = bot:FindAoELocation( true, false, bot:GetLocation(), nCastRange - 400, nRadius - 50, 0, 0 ) local locationAoE = bot:FindAoELocation( true, false, bot:GetLocation(), 40, 400, 0, 0 )
if ( locationAoE.count >= nShouldHurtCount ) if ( locationAoE.count >= nShouldHurtCount )
then then
hCastTarget = locationAoE.targetloc hCastTarget = locationAoE.targetloc
...@@ -376,7 +372,7 @@ function X.ConsiderQ() ...@@ -376,7 +372,7 @@ function X.ConsiderQ()
and not laneCreepList[1]:HasModifier( "modifier_fountain_glyph" ) and not laneCreepList[1]:HasModifier( "modifier_fountain_glyph" )
then then
local locationAoEHurt = bot:FindAoELocation( true, false, bot:GetLocation(), nCastRange - 300, nRadius - 50, 0, 0 ) local locationAoEHurt = bot:FindAoELocation( true, false, bot:GetLocation(), 30, 400, 0, 0 )
if locationAoEHurt.count >= 4 if locationAoEHurt.count >= 4
then then
hCastTarget = locationAoEHurt.targetloc hCastTarget = locationAoEHurt.targetloc
......
...@@ -24,7 +24,7 @@ local tTalentTreeList = { ...@@ -24,7 +24,7 @@ local tTalentTreeList = {
} }
local tAllAbilityBuildList = { local tAllAbilityBuildList = {
{3,2,2,3,2,6,2,1,1,1,1,6,3,3,6}, {2,1,3,2,2,6,2,1,1,1,3,6,3,3,6},
} }
local nAbilityBuildList = J.Skill.GetRandomBuild( tAllAbilityBuildList ) local nAbilityBuildList = J.Skill.GetRandomBuild( tAllAbilityBuildList )
...@@ -174,14 +174,6 @@ function X.SkillsComplement() ...@@ -174,14 +174,6 @@ function X.SkillsComplement()
nHP = bot:GetHealth()/bot:GetMaxHealth() nHP = bot:GetHealth()/bot:GetMaxHealth()
hEnemyHeroList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) hEnemyHeroList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
castEDesire = X.ConsiderE()
if castEDesire > 0
then
bot:Action_UseAbility( abilityE )
return
end
castWDesire, castWTarget = X.ConsiderW() castWDesire, castWTarget = X.ConsiderW()
if castWDesire > 0 if castWDesire > 0
...@@ -228,7 +220,7 @@ function X.ConsiderQ() ...@@ -228,7 +220,7 @@ function X.ConsiderQ()
local botTarget = J.GetProperTarget(bot) local botTarget = J.GetProperTarget(bot)
--关闭分裂的情况 --关闭分裂的情况
if J.IsLaning(bot) if J.IsLaning( bot )
or ( #nInRangeEnemyHeroList == 1 ) or ( #nInRangeEnemyHeroList == 1 )
or ( J.IsGoingOnSomeone(bot) and J.IsValidHero(botTarget) and nSkillLv <= 2 and #nInRangeEnemyHeroList == 2 ) or ( J.IsGoingOnSomeone(bot) and J.IsValidHero(botTarget) and nSkillLv <= 2 and #nInRangeEnemyHeroList == 2 )
or ( #nInRangeEnemyHeroList == 0 and #nInRangeEnemyCreepList <= 1 ) or ( #nInRangeEnemyHeroList == 0 and #nInRangeEnemyCreepList <= 1 )
......
...@@ -433,7 +433,6 @@ function X.ConsiderR() ...@@ -433,7 +433,6 @@ function X.ConsiderR()
if J.CanKillTarget( npcTarget, EstDamage, DAMAGE_TYPE_MAGICAL ) if J.CanKillTarget( npcTarget, EstDamage, DAMAGE_TYPE_MAGICAL )
or ( npcTarget:IsChanneling() and npcTarget:HasModifier( "modifier_teleporting" ) ) or ( npcTarget:IsChanneling() and npcTarget:HasModifier( "modifier_teleporting" ) )
then then
X.ReportDetails( bot, npcTarget, EstDamage, nDamagePerHealth )
return BOT_ACTION_DESIRE_HIGH, npcTarget return BOT_ACTION_DESIRE_HIGH, npcTarget
end end
end end
...@@ -455,7 +454,6 @@ function X.ConsiderR() ...@@ -455,7 +454,6 @@ function X.ConsiderR()
local EstDamage = X.GetEstDamage( bot, npcEnemy, nDamagePerHealth ) local EstDamage = X.GetEstDamage( bot, npcEnemy, nDamagePerHealth )
if J.CanKillTarget( npcEnemy, EstDamage, DAMAGE_TYPE_MAGICAL ) if J.CanKillTarget( npcEnemy, EstDamage, DAMAGE_TYPE_MAGICAL )
then then
X.ReportDetails( bot, npcEnemy, EstDamage, nDamagePerHealth )
npcToKill = npcEnemy npcToKill = npcEnemy
break break
end end
...@@ -479,7 +477,6 @@ function X.ConsiderR() ...@@ -479,7 +477,6 @@ function X.ConsiderR()
local EstDamage = X.GetEstDamage( bot, npcEnemy, nDamagePerHealth ) local EstDamage = X.GetEstDamage( bot, npcEnemy, nDamagePerHealth )
if J.CanCastOnNonMagicImmune( npcEnemy ) and J.CanKillTarget( npcEnemy, EstDamage, DAMAGE_TYPE_MAGICAL ) if J.CanCastOnNonMagicImmune( npcEnemy ) and J.CanKillTarget( npcEnemy, EstDamage, DAMAGE_TYPE_MAGICAL )
then then
X.ReportDetails( bot, npcEnemy, EstDamage, nDamagePerHealth )
return BOT_ACTION_DESIRE_HIGH, npcEnemy return BOT_ACTION_DESIRE_HIGH, npcEnemy
end end
end end
...@@ -544,38 +541,6 @@ function X.GetEstDamage( bot, npcTarget, nDamagePerHealth ) ...@@ -544,38 +541,6 @@ function X.GetEstDamage( bot, npcTarget, nDamagePerHealth )
end end
local ReportTime = 99999
function X.ReportDetails( bot, npcTarget, EstDamage, nDamagePerHealth )
if DotaTime() > ReportTime + 5.0
then
local nMessage
local nNumber
local MagicResist = 1 - npcTarget:GetMagicResist()
ReportTime = DotaTime()
nMessage = "基础伤害值:"
nNumber = nDamagePerHealth * ( npcTarget:GetMaxHealth() - npcTarget:GetHealth() )
nNumber = nNumber * MagicResist
bot:ActionImmediate_Chat( nMessage..string.gsub( tostring( nNumber ), "npc_dota_", "" ), true )
nMessage = "计算伤害值:"
nNumber = EstDamage * MagicResist
bot:ActionImmediate_Chat( nMessage..string.gsub( tostring( nNumber ), "npc_dota_", "" ), true )
-- nMessage = "目标魔法增强率:"
-- nNumber = npcTarget:GetSpellAmp()
-- bot:ActionImmediate_Chat( nMessage..string.gsub( tostring( nNumber ), "npc_dota_", "" ), true )
nMessage = npcTarget:GetUnitName()
nNumber = npcTarget:GetHealth()
bot:ActionImmediate_Chat( string.gsub( tostring( nMessage ), "npc_dota_", "" )..'当前生命值:'..tostring( nNumber ), true )
end
end
function X.ConsiderAS() function X.ConsiderAS()
...@@ -592,7 +557,7 @@ function X.ConsiderAS() ...@@ -592,7 +557,7 @@ function X.ConsiderAS()
local tableNearbyEnemyHeroes = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) local tableNearbyEnemyHeroes = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
if J.IsRetreating( bot ) if J.IsRetreating( bot )
then then
local enemyHeroList = bot:GetNearbyHeroes( 500, true, BOT_MODE_NONE ) local enemyHeroList = bot:GetNearbyHeroes( 500, true, BOT_MODE_NONE )
......
...@@ -35,9 +35,7 @@ local tOutFitList = {} ...@@ -35,9 +35,7 @@ local tOutFitList = {}
tOutFitList['outfit_carry'] = { tOutFitList['outfit_carry'] = {
"item_quelling_blade", "item_bristleback_outfit",
"item_crystal_maiden_outfit",
"item_blade_mail",
"item_hand_of_midas", "item_hand_of_midas",
"item_aghanims_shard", "item_aghanims_shard",
"item_ultimate_scepter", "item_ultimate_scepter",
...@@ -55,49 +53,13 @@ tOutFitList['outfit_carry'] = { ...@@ -55,49 +53,13 @@ tOutFitList['outfit_carry'] = {
tOutFitList['outfit_mid'] = tOutFitList['outfit_carry'] tOutFitList['outfit_mid'] = tOutFitList['outfit_carry']
tOutFitList['outfit_priest'] = { tOutFitList['outfit_priest'] = tOutFitList['outfit_carry']
"item_quelling_blade", tOutFitList['outfit_mage'] = tOutFitList['outfit_carry']
"item_priest_outfit",
"item_urn_of_shadows",
"item_hand_of_midas",
"item_mekansm",
"item_glimmer_cape",
"item_aghanims_shard",
"item_guardian_greaves",
"item_spirit_vessel",
"item_ultimate_scepter",
"item_octarine_core",
"item_shivas_guard",
"item_moon_shard",
"item_ultimate_scepter_2",
"item_sheepstick",
}
tOutFitList['outfit_mage'] = {
"item_quelling_blade",
"item_mage_outfit",
"item_hand_of_midas",
"item_boots_of_bearing",
"item_glimmer_cape",
"item_aghanims_shard",
"item_pipe",
"item_ultimate_scepter",
"item_travel_boots",
"item_veil_of_discord",
"item_moon_shard",
"item_travel_boots_2",
"item_ultimate_scepter_2",
"item_shivas_guard",
}
tOutFitList['outfit_tank'] = { tOutFitList['outfit_tank'] = {
"item_ogre_magi_outfit", "item_tank_outfit",
"item_crimson_guard", "item_crimson_guard",
"item_aghanims_shard", "item_aghanims_shard",
"item_ultimate_scepter", "item_ultimate_scepter",
...@@ -113,6 +75,7 @@ tOutFitList['outfit_tank'] = { ...@@ -113,6 +75,7 @@ tOutFitList['outfit_tank'] = {
} }
X['sBuyList'] = tOutFitList[sOutfitType] X['sBuyList'] = tOutFitList[sOutfitType]
X['sSellList'] = { X['sSellList'] = {
...@@ -120,8 +83,6 @@ X['sSellList'] = { ...@@ -120,8 +83,6 @@ X['sSellList'] = {
"item_power_treads", "item_power_treads",
"item_quelling_blade", "item_quelling_blade",
"item_arcane_boots",
"item_quelling_blade",
"item_assault", "item_assault",
"item_magic_wand", "item_magic_wand",
...@@ -219,9 +180,8 @@ function X.SkillsComplement() ...@@ -219,9 +180,8 @@ function X.SkillsComplement()
hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE ) hEnemyList = bot:GetNearbyHeroes( 1600, true, BOT_MODE_NONE )
hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 ) hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 )
aetherRange = J.GetBonusCastRange( bot ) aetherRange = J.GetBonusCastRange( bot )
-- if talent2:IsTrained() then aetherRange = aetherRange + talent2:GetSpecialValueInt( "value" ) end -- if talent2:IsTrained() then aetherRange = aetherRange + talent2:GetSpecialValueInt( "value" ) end
if talent8:IsTrained() then talent8Damage = talent8Damage + talent8:GetSpecialValueInt( "value" ) end if talent8:IsTrained() then talent8Damage = talent8Damage + talent8:GetSpecialValueInt( "value" ) end
......
...@@ -43,7 +43,7 @@ X['sBuyList'] = { ...@@ -43,7 +43,7 @@ X['sBuyList'] = {
"item_travel_boots", "item_travel_boots",
"item_abyssal_blade", "item_abyssal_blade",
"item_ultimate_scepter", "item_ultimate_scepter",
"item_moon_shard", "item_moon_share",
"item_travel_boots_2", "item_travel_boots_2",
"item_eagle", "item_eagle",
"item_ultimate_scepter_2", "item_ultimate_scepter_2",
...@@ -142,8 +142,6 @@ function X.SkillsComplement() ...@@ -142,8 +142,6 @@ function X.SkillsComplement()
hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 ) hAllyList = J.GetAlliesNearLoc( bot:GetLocation(), 1600 )
nAttackPoint = bot:GetSecondsPerAttack() nAttackPoint = bot:GetSecondsPerAttack()
aetherRange = J.GetBonusCastRange( bot ) aetherRange = J.GetBonusCastRange( bot )
castQDesire, castQTarget, sMotive = X.ConsiderQ() castQDesire, castQTarget, sMotive = X.ConsiderQ()
...@@ -179,18 +177,7 @@ function X.SkillsComplement() ...@@ -179,18 +177,7 @@ function X.SkillsComplement()
return return
end end
castASDesire, castASTarget, sMotive = X.ConsiderAS()
if ( castASDesire > 0 )
then
J.SetReportMotive( bDebugMode, sMotive )
J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbilityOnEntity( abilityAS, castASTarget )
return
end
end end
......
...@@ -387,7 +387,6 @@ local sConsumableList = { ...@@ -387,7 +387,6 @@ local sConsumableList = {
'item_refresher_shard', 'item_refresher_shard',
'item_aegis', 'item_aegis',
'item_ultimate_scepter_roshan', 'item_ultimate_scepter_roshan',
'item_aghanims_shard_roshan',
} }
local tConsumableItemList = {} local tConsumableItemList = {}
...@@ -441,94 +440,6 @@ do ...@@ -441,94 +440,6 @@ do
tNotSellItemList[sItem] = true tNotSellItemList[sItem] = true
end end
--由于默认的机制问题, 已停用
local tNeutralItemLevelList = {
['item_arcane_ring'] = 35,
['item_broom_handle'] = 33,
-- ['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_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_grove_bow'] = 40, -- 林野长弓
-- ['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_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_paladin_sword'] = 40, -- 骑士剑
['item_quickening_charm'] = 50,
['item_titan_sliver'] = 54, -- 巨神残铁
-- ['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_ninja_gear'] = 58, -- 忍者用具
['item_spell_prism'] = 69, -- 法术棱镜
-- ['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'] = 76.5, -- 弩炮
['item_demonicon'] = 73,
['item_desolator_2'] = 75,
['item_ex_machina'] = 71,
['item_fallen_sky'] = 80,
['item_force_boots'] = 66,
['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,
}
local tSmallItemList = { local tSmallItemList = {
['item_tpscroll'] = 1, ['item_tpscroll'] = 1,
...@@ -575,7 +486,7 @@ Item['item_ancient_janggo'] = GetItemComponents( 'item_ancient_janggo' )[1] ...@@ -575,7 +486,7 @@ Item['item_ancient_janggo'] = GetItemComponents( 'item_ancient_janggo' )[1]
Item['item_aeon_disk'] = GetItemComponents( 'item_aeon_disk' )[1] Item['item_aeon_disk'] = GetItemComponents( 'item_aeon_disk' )[1]
Item['item_bfury'] = { 'item_quelling_blade', 'item_claymore', 'item_pers', 'item_broadsword' } Item['item_bfury'] = GetItemComponents( 'item_bfury' )[1]
Item['item_black_king_bar'] = GetItemComponents( 'item_black_king_bar' )[1] Item['item_black_king_bar'] = GetItemComponents( 'item_black_king_bar' )[1]
...@@ -595,7 +506,7 @@ Item['item_basher'] = GetItemComponents( 'item_basher' )[1] ...@@ -595,7 +506,7 @@ Item['item_basher'] = GetItemComponents( 'item_basher' )[1]
Item['item_crimson_guard'] = GetItemComponents( 'item_crimson_guard' )[1] Item['item_crimson_guard'] = GetItemComponents( 'item_crimson_guard' )[1]
Item['item_cyclone'] = { 'item_void_stone', 'item_staff_of_wizardry', 'item_recipe_cyclone', 'item_wind_lace' } Item['item_cyclone'] = GetItemComponents( 'item_cyclone' )[1]
Item['item_dagon'] = GetItemComponents( 'item_dagon' )[1] Item['item_dagon'] = GetItemComponents( 'item_dagon' )[1]
...@@ -621,7 +532,7 @@ Item['item_force_staff'] = GetItemComponents( 'item_force_staff' )[1] ...@@ -621,7 +532,7 @@ Item['item_force_staff'] = GetItemComponents( 'item_force_staff' )[1]
Item['item_glimmer_cape'] = GetItemComponents( 'item_glimmer_cape' )[1] Item['item_glimmer_cape'] = GetItemComponents( 'item_glimmer_cape' )[1]
Item['item_guardian_greaves'] = { 'item_arcane_boots', 'item_mekansm', 'item_recipe_guardian_greaves', 'item_buckler' } Item['item_guardian_greaves'] = GetItemComponents( 'item_guardian_greaves' )[1]
Item['item_greater_crit'] = GetItemComponents( 'item_greater_crit' )[1] Item['item_greater_crit'] = GetItemComponents( 'item_greater_crit' )[1]
...@@ -671,7 +582,7 @@ Item['item_moon_shard'] = GetItemComponents( 'item_moon_shard' )[1] ...@@ -671,7 +582,7 @@ Item['item_moon_shard'] = GetItemComponents( 'item_moon_shard' )[1]
Item['item_meteor_hammer'] = GetItemComponents( 'item_meteor_hammer' )[1] Item['item_meteor_hammer'] = GetItemComponents( 'item_meteor_hammer' )[1]
Item['item_necronomicon'] = { 'item_sobi_mask', 'item_belt_of_strength', 'item_recipe_necronomicon', 'item_sobi_mask' } Item['item_necronomicon'] = GetItemComponents( 'item_necronomicon' )[1]
Item['item_necronomicon_2'] = GetItemComponents( 'item_necronomicon_2' )[1] Item['item_necronomicon_2'] = GetItemComponents( 'item_necronomicon_2' )[1]
...@@ -1213,46 +1124,6 @@ function Item.GetBasicItems( sItemList ) ...@@ -1213,46 +1124,6 @@ function Item.GetBasicItems( sItemList )
end end
--获取物品的基础构造
function Item.GetItemBasicBuild( sItemName )
local tItem = sItemName
if type( tItem ) == "string" then tItem = { tItem } end
local sBasicItem = {}
for i, v in pairs( tItem )
do
local tComponents = GetItemComponents( v )
if #tComponents == 0
then
sBasicItem[#sBasicItem + 1] = v
elseif #tComponents > 0
then
for _, w in pairs( Item.GetItemBasicBuild( tComponents[1] ) )
do
sBasicItem[#sBasicItem + 1] = w
end
end
end
return sBasicItem
end
--根据购物列表获取完整的不重复基础物品名单
function Item.GetBasicItemToBuyList( sItemList )
local sBasicItemToBuyList = {}
return sBasicItemToBuyList
end
function Item.GetMainInvLessValItemSlot( bot ) function Item.GetMainInvLessValItemSlot( bot )
local minPrice = 10000 local minPrice = 10000
......
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
local X = {} local X = {}
-- local sBotVersion = "New" local sBotVersion = "New"
local sBotVersion = "Mid" -- local sBotVersion = "Mid"
local sVersionDate = " 7.32, 2022/09/01" local sVersionDate = " 7.33, 2023/04/22"
function X.GetBotVersion() function X.GetBotVersion()
return sBotVersion, sVersionDate return sBotVersion, sVersionDate
...@@ -1493,35 +1493,10 @@ X["hero_roles"] = { ...@@ -1493,35 +1493,10 @@ X["hero_roles"] = {
['support'] = 3, ['support'] = 3,
['pusher'] = 0 ['pusher'] = 0
}, },
["npc_dota_hero_primal_beast"] = {
['carry'] = 0,
['disabler'] = 2,
['durable'] = 1,
['escape'] = 1,
['initiator'] = 3,
['jungler'] = 0,
['nuker'] = 0,
['support'] = 1,
['pusher'] = 0
},
["npc_dota_hero_muerta"] = {
['carry'] = 2,
['disabler'] = 2,
['durable'] = 0,
['escape'] = 1,
['initiator'] = 0,
['jungler'] = 2,
['nuker'] = 3,
['support'] = 2,
['pusher'] = 2
},
} }
X["bottle"] = { X["bottle"] = {
["npc_dota_hero_grimstroke"] = 1,
["npc_dota_hero_tinker"] = 1, ["npc_dota_hero_tinker"] = 1,
["npc_dota_hero_storm_spirit"] = 1, ["npc_dota_hero_storm_spirit"] = 1,
["npc_dota_hero_pudge"] = 1, ["npc_dota_hero_pudge"] = 1,
...@@ -1545,7 +1520,6 @@ X["bottle"] = { ...@@ -1545,7 +1520,6 @@ X["bottle"] = {
X["phase_boots"] = { X["phase_boots"] = {
["npc_dota_hero_abaddon"] = 1, ["npc_dota_hero_abaddon"] = 1,
["npc_dota_hero_night_stalker"] = 1,
["npc_dota_hero_alchemist"] = 1, ["npc_dota_hero_alchemist"] = 1,
["npc_dota_hero_gyrocopter"] = 1, ["npc_dota_hero_gyrocopter"] = 1,
["npc_dota_hero_medusa"] = 1, ["npc_dota_hero_medusa"] = 1,
...@@ -1648,7 +1622,6 @@ end ...@@ -1648,7 +1622,6 @@ end
X['off'] = { X['off'] = {
'npc_dota_hero_abaddon', 'npc_dota_hero_abaddon',
'npc_dota_hero_night_stalker',
'npc_dota_hero_abyssal_underlord', 'npc_dota_hero_abyssal_underlord',
'npc_dota_hero_axe', 'npc_dota_hero_axe',
'npc_dota_hero_batrider', 'npc_dota_hero_batrider',
...@@ -1674,12 +1647,9 @@ X['off'] = { ...@@ -1674,12 +1647,9 @@ X['off'] = {
'npc_dota_hero_tusk', 'npc_dota_hero_tusk',
'npc_dota_hero_venomancer', 'npc_dota_hero_venomancer',
'npc_dota_hero_windrunner', 'npc_dota_hero_windrunner',
'npc_dota_hero_primal_beast',
'npc_dota_hero_obsidian_destroyer',
} }
X['mid'] = { X['mid'] = {
'npc_dota_hero_grimstroke',
'npc_dota_hero_alchemist', 'npc_dota_hero_alchemist',
'npc_dota_hero_arc_warden', 'npc_dota_hero_arc_warden',
'npc_dota_hero_bloodseeker', 'npc_dota_hero_bloodseeker',
...@@ -1717,7 +1687,6 @@ X['mid'] = { ...@@ -1717,7 +1687,6 @@ X['mid'] = {
X['safe'] = { X['safe'] = {
'npc_dota_hero_antimage', 'npc_dota_hero_antimage',
'npc_dota_hero_night_stalker',
'npc_dota_hero_chaos_knight', 'npc_dota_hero_chaos_knight',
"npc_dota_hero_mars", "npc_dota_hero_mars",
'npc_dota_hero_drow_ranger', 'npc_dota_hero_drow_ranger',
...@@ -1747,7 +1716,6 @@ X['safe'] = { ...@@ -1747,7 +1716,6 @@ X['safe'] = {
'npc_dota_hero_ogre_magi', 'npc_dota_hero_ogre_magi',
'npc_dota_hero_omniknight', 'npc_dota_hero_omniknight',
'npc_dota_hero_marci', 'npc_dota_hero_marci',
'npc_dota_hero_muerta',
} }
...@@ -1795,6 +1763,7 @@ X['supp'] = { ...@@ -1795,6 +1763,7 @@ X['supp'] = {
'npc_dota_hero_death_prophet', 'npc_dota_hero_death_prophet',
'npc_dota_hero_windrunner', 'npc_dota_hero_windrunner',
'npc_dota_hero_venomancer', 'npc_dota_hero_venomancer',
} }
...@@ -2157,9 +2126,6 @@ function X.IsABAHero() ...@@ -2157,9 +2126,6 @@ function X.IsABAHero()
local sABAHeroIndex = { local sABAHeroIndex = {
["npc_dota_hero_antimage"] = true, ["npc_dota_hero_antimage"] = true,
["npc_dota_hero_night_stalker"] = true,
["npc_dota_hero_obsidian_destroyer"] = true,
["npc_dota_hero_grimstroke"] = true,
["npc_dota_hero_arc_warden"] = true, ["npc_dota_hero_arc_warden"] = true,
["npc_dota_hero_bane"] = true, ["npc_dota_hero_bane"] = true,
["npc_dota_hero_bloodseeker"] = true, ["npc_dota_hero_bloodseeker"] = true,
...@@ -2205,7 +2171,6 @@ function X.IsABAHero() ...@@ -2205,7 +2171,6 @@ function X.IsABAHero()
["npc_dota_hero_axe"] = true, ["npc_dota_hero_axe"] = true,
["npc_dota_hero_slardar"] = true, ["npc_dota_hero_slardar"] = true,
["npc_dota_hero_legion_commander"] = true, ["npc_dota_hero_legion_commander"] = true,
["npc_dota_hero_terrorblade"] = true,
["npc_dota_hero_tidehunter"] = true, ["npc_dota_hero_tidehunter"] = true,
["npc_dota_hero_omniknight"] = true, ["npc_dota_hero_omniknight"] = true,
["npc_dota_hero_naga_siren"] = true, ["npc_dota_hero_naga_siren"] = true,
...@@ -2411,25 +2376,18 @@ function X.IsUserSetSup( bot ) ...@@ -2411,25 +2376,18 @@ function X.IsUserSetSup( bot )
end end
X["bPvNMode"] = false
function X.IsPvNMode()
if X["bPvNMode"] or DotaTime() > 60 then return X["bPvNMode"] end
local oppositePlayerCount = #GetTeamPlayers( GetOpposingTeam() ) function X.IsPvNMode()
if oppositePlayerCount <= 3 then X["bPvNMode"] = true end
return X["bPvNMode"] return X.IsAllShadow()
end end
local nShadowNumber = RandomInt( 1, 66666 )
function X.IsAllShadow() function X.IsAllShadow()
return nShadowNumber <= 3 return false
end end
......
...@@ -668,7 +668,7 @@ function Site.RefreshCamp( bot ) ...@@ -668,7 +668,7 @@ function Site.RefreshCamp( bot )
end end
function Site.GetClosestNeutralSpwan( bot, availableCampList ) function Site.GetClosestNeutralSpawn( bot, availableCampList )
local minDist = 15000 local minDist = 15000
local pCamp = nil local pCamp = nil
......
...@@ -5863,50 +5863,107 @@ local function UseGlyph() ...@@ -5863,50 +5863,107 @@ local function UseGlyph()
TOWER_TOP_1, TOWER_TOP_1,
TOWER_MID_1, TOWER_MID_1,
TOWER_BOT_1, TOWER_BOT_1,
}
local T2 = {
TOWER_TOP_2,
TOWER_MID_2,
TOWER_BOT_2,
}
local T3 = {
TOWER_TOP_3, TOWER_TOP_3,
TOWER_MID_3, TOWER_MID_3,
TOWER_BOT_3, TOWER_BOT_3,
TOWER_BASE_1,
TOWER_BASE_2
} }
for _, t in pairs( T1 )
do
local tower = GetTower( GetTeam(), t )
if tower ~= nil and tower:GetHealth() > 0
and tower:GetHealth() / tower:GetMaxHealth() < 0.36
and tower:GetAttackTarget() ~= nil
then
bot:ActionImmediate_Glyph( )
return
end
end
local MeleeBarrack = { local MeleeBarrack = {
BARRACKS_TOP_MELEE, BARRACKS_TOP_MELEE,
BARRACKS_MID_MELEE, BARRACKS_MID_MELEE,
BARRACKS_BOT_MELEE BARRACKS_BOT_MELEE
} }
local num = 0
for _, t in pairs( T1 ) do
local tower = GetTower( GetTeam(), t )
if tower and tower:GetHealth() > 0 then
num = num + 1
end
end
if num == #T1 then
for _, t in pairs( T1 ) do
local tower = GetTower( GetTeam(), t )
if tower and (X.IsTargetedByEnemy(tower)
or #tower:GetNearbyCreeps(1200,true)>3
or tower:GetHealthPercent() < 0.1)
and not tower:HasModifier('modifier_backdoor_protection')
and tower:GetHealthPercent() < 0.3 then
bot:ActionImmediate_Glyph()
return
end
end
end
num = 0
for _, t in pairs( T2 ) do
local tower = GetTower( GetTeam(), t )
if tower and tower:GetHealth() > 0 then
num = num + 1
end
end
if num == #T2 then
for _, t in pairs( T2 ) do
local tower = GetTower( GetTeam(), t )
if tower and (X.IsTargetedByEnemy(tower)
or #tower:GetNearbyCreeps(1200,true)>3
or tower:GetHealthPercent() < 0.1)
and not tower:HasModifier('modifier_backdoor_protection')
and tower:GetHealthPercent() < 0.5 then
bot:ActionImmediate_Glyph()
return
end
end
end
for _, t in pairs( T3 ) do
local tower = GetTower( GetTeam(), t )
if tower and (X.IsTargetedByEnemy(tower)
or #tower:GetNearbyCreeps(1200,true)>3
or tower:GetHealthPercent() < 0.1)
and not tower:HasModifier('modifier_backdoor_protection')
and tower:GetHealthPercent() < 0.5 then
bot:ActionImmediate_Glyph()
return
end
end
for _, b in pairs( MeleeBarrack ) for _, b in pairs( MeleeBarrack )
do do
local barrack = GetBarracks( GetTeam(), b ) local barrack = GetBarracks( GetTeam(), b )
if barrack ~= nil and barrack:GetHealth() > 0 if barrack and (X.IsTargetedByEnemy(barrack)
and barrack:GetHealth() / barrack:GetMaxHealth() < 0.5 or #barrack:GetNearbyCreeps(1200,true)>3
and X.IsTargetedByEnemy( barrack ) or barrack:GetHealthPercent() < 0.1)
then and not barrack:HasModifier('modifier_backdoor_protection')
bot:ActionImmediate_Glyph( ) and barrack:GetHealthPercent() < 0.5 then
bot:ActionImmediate_Glyph()
return return
end end
end end
local Ancient = GetAncient( GetTeam() ) local Ancient = GetAncient( GetTeam() )
if Ancient ~= nil and Ancient:GetHealth() > 0 if Ancient and (X.IsTargetedByEnemy(Ancient)
and Ancient:GetHealth() / Ancient:GetMaxHealth() < 0.5 or #Ancient:GetNearbyCreeps(1200,true)>3
and X.IsTargetedByEnemy( Ancient ) or Ancient:GetHealthPercent() < 0.1)
then and not Ancient:HasModifier('modifier_backdoor_protection')
bot:ActionImmediate_Glyph( ) and Ancient:GetHealthPercent() < 0.5 then
bot:ActionImmediate_Glyph()
return return
end end
......
...@@ -27,14 +27,16 @@ local bLineupActive = false ...@@ -27,14 +27,16 @@ local bLineupActive = false
local bLineupReserve = false local bLineupReserve = false
local bLineupNotRepeated = false local bLineupNotRepeated = false
--[[
--夜魇有玩家时AI也走中路补丁 --夜魇有玩家时AI也走中路补丁
local nDireFirstLaneType = 1 --夜魇默认一楼1中路, 2是下路, 3是上路 local nDireFirstLaneType = 1 --夜魇默认一楼1中路, 2是下路, 3是上路
if pcall( require, 'game/bot_dire_first_lane_type' ) if pcall( require, 'game/bot_dire_first_lane_type' )
then then
nDireFirstLaneType = require( 'game/bot_dire_first_lane_type' ) nDireFirstLaneType = require( 'game/bot_dire_first_lane_type' )
end end
]]--
require(GetScriptDirectory() .. "/rewrite_functions")
local Role = require( GetScriptDirectory()..'/FunLib/aba_role' ) local Role = require( GetScriptDirectory()..'/FunLib/aba_role' )
local Chat = require( GetScriptDirectory()..'/FunLib/aba_chat' ) local Chat = require( GetScriptDirectory()..'/FunLib/aba_chat' )
......
...@@ -82,6 +82,8 @@ local function GeneralPurchase() ...@@ -82,6 +82,8 @@ local function GeneralPurchase()
or bot.currentComponentToBuy == "item_tome_of_knowledge" or bot.currentComponentToBuy == "item_tome_of_knowledge"
or bot.currentComponentToBuy == "item_ward_observer" or bot.currentComponentToBuy == "item_ward_observer"
or bot.currentComponentToBuy == "item_ward_sentry" or bot.currentComponentToBuy == "item_ward_sentry"
or bot.currentComponentToBuy == "item_tango"
or bot.currentComponentToBuy == "item_flask"
then then
if GetItemStockCount( bot.currentComponentToBuy ) <= 0 if GetItemStockCount( bot.currentComponentToBuy ) <= 0
then then
...@@ -246,6 +248,7 @@ local function TurboModeGeneralPurchase() ...@@ -246,6 +248,7 @@ local function TurboModeGeneralPurchase()
or bot.currentComponentToBuy == "item_tome_of_knowledge" or bot.currentComponentToBuy == "item_tome_of_knowledge"
or bot.currentComponentToBuy == "item_ward_observer" or bot.currentComponentToBuy == "item_ward_observer"
or bot.currentComponentToBuy == "item_ward_sentry" or bot.currentComponentToBuy == "item_ward_sentry"
or bot.currentComponentToBuy == "item_tango"
then then
if GetItemStockCount( bot.currentComponentToBuy ) <= 0 if GetItemStockCount( bot.currentComponentToBuy ) <= 0
then then
......
...@@ -72,13 +72,13 @@ end ...@@ -72,13 +72,13 @@ end
local sNoticeList = { local sNoticeList = {
[1] = "创建本地主机房间设置AI即可与好友一起游戏", [1] = "创建本地主机房间设置AI即可与好友一起游戏",
[2] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om", [2] = "暂停功能会导致客户端BUG引发机器人重复出装的问题.",
[3] = "寻找AI玩家一起游戏, 千人交流群等着你过来.", [3] = "寻找AI玩家一起游戏, 千人交流群等着你过来.",
[4] = "跟车队5人一起玩AI, 等你加群体验游戏.", [4] = "跟车队5人一起玩AI, 等你加群体验游戏.",
[5] = "可以和我们公屏聊天互动,武斗文斗同时进行.", [5] = "可以和我们公屏聊天互动,武斗文斗同时进行.",
[6] = "感谢各位玩家朋友的支持,AI因你而持续更新.", [6] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om",
[7] = "暂停功能会导致客户端BUG引发机器人重复出装的问题.", [7] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om",
[8] = "我们正处于各种困境之中, 请帮我们出谋划策.", [8] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om",
[9] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om", [9] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om",
[10] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om", [10] = "赞助冠名或发送建议,请联系:dota2jmz@163.匚om",
...@@ -288,7 +288,7 @@ function GetDesire() ...@@ -288,7 +288,7 @@ function GetDesire()
if bot:IsAlive() and bot:HasModifier('modifier_arc_warden_tempest_double') if bot:IsAlive() and bot:HasModifier('modifier_arc_warden_tempest_double')
and GetRoshanDesire() > 0.85 and GetRoshanDesire() > 0.85
then then
if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp) end; if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp) end;
return 0.99; return 0.99;
end end
...@@ -386,7 +386,7 @@ function GetDesire() ...@@ -386,7 +386,7 @@ function GetDesire()
if madas ~= nil and madas:IsFullyCastable() and J.IsInAllyArea(bot) if madas ~= nil and madas:IsFullyCastable() and J.IsInAllyArea(bot)
then then
hLaneCreepList = bot:GetNearbyLaneCreeps(1600, true); hLaneCreepList = bot:GetNearbyLaneCreeps(1600, true);
if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp) end; if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp) end;
return BOT_MODE_DESIRE_HIGH; return BOT_MODE_DESIRE_HIGH;
end end
...@@ -411,7 +411,7 @@ function GetDesire() ...@@ -411,7 +411,7 @@ function GetDesire()
then then
return BOT_MODE_DESIRE_HIGH; return BOT_MODE_DESIRE_HIGH;
else else
if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp);end if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp);end
if preferedCamp ~= nil then if preferedCamp ~= nil then
if not J.Site.IsModeSuitableToFarm(bot) if not J.Site.IsModeSuitableToFarm(bot)
...@@ -432,7 +432,7 @@ function GetDesire() ...@@ -432,7 +432,7 @@ function GetDesire()
then then
if pushTime > DotaTime() - 8.0 if pushTime > DotaTime() - 8.0
then then
if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp);end if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp);end
return BOT_MODE_DESIRE_MODERATE; return BOT_MODE_DESIRE_MODERATE;
end end
...@@ -625,7 +625,7 @@ function Think() ...@@ -625,7 +625,7 @@ function Think()
end end
if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp);end if preferedCamp == nil then preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp);end
if preferedCamp ~= nil then if preferedCamp ~= nil then
local targetFarmLoc = preferedCamp.cattr.location; local targetFarmLoc = preferedCamp.cattr.location;
local cDist = GetUnitToLocationDistance(bot, targetFarmLoc); local cDist = GetUnitToLocationDistance(bot, targetFarmLoc);
...@@ -742,7 +742,7 @@ function Think() ...@@ -742,7 +742,7 @@ function Think()
farmState = 0; farmState = 0;
J.Role['availableCampTable'], preferedCamp = J.Site.UpdateAvailableCamp(bot, preferedCamp, J.Role['availableCampTable']); J.Role['availableCampTable'], preferedCamp = J.Site.UpdateAvailableCamp(bot, preferedCamp, J.Role['availableCampTable']);
availableCamp = J.Role['availableCampTable']; availableCamp = J.Role['availableCampTable'];
preferedCamp = J.Site.GetClosestNeutralSpwan(bot, availableCamp); preferedCamp = J.Site.GetClosestNeutralSpawn(bot, availableCamp);
local farmTarget = J.Site.FindFarmNeutralTarget(neutralCreeps) local farmTarget = J.Site.FindFarmNeutralTarget(neutralCreeps)
...@@ -1016,6 +1016,7 @@ function X.ShouldRun(bot) ...@@ -1016,6 +1016,7 @@ function X.ShouldRun(bot)
if botLevel <= 9 if botLevel <= 9
and nEnemyTowers[1] ~= nil and nEnemyTowers[1] ~= nil
and nEnemyTowers[1]:GetAttackTarget() == bot and nEnemyTowers[1]:GetAttackTarget() == bot
and nEnemyTowers[1]:CanBeSeen()
and #hAllyHeroList <= 1 and #hAllyHeroList <= 1
then then
return 1; return 1;
......
...@@ -58,8 +58,13 @@ local vWaitRuneLocList = { ...@@ -58,8 +58,13 @@ local vWaitRuneLocList = {
function GetDesire() function GetDesire()
-- if 7.29 then return 0 end if bot:IsInvulnerable()
and bot:GetHealth() / bot:GetMaxHealth() > 0.96
and bot:DistanceFromFountain() < 100
then
return 1.0
end
if GetGameMode() == GAMEMODE_1V1MID if GetGameMode() == GAMEMODE_1V1MID
or ( GetGameMode() == GAMEMODE_MO and DotaTime() <= 0 ) or ( GetGameMode() == GAMEMODE_MO and DotaTime() <= 0 )
or ( bot:HasModifier("modifier_arc_warden_tempest_double") ) or ( bot:HasModifier("modifier_arc_warden_tempest_double") )
...@@ -190,6 +195,15 @@ end ...@@ -190,6 +195,15 @@ end
function Think() function Think()
if bot:IsInvulnerable()
and bot:GetHealth() / bot:GetMaxHealth() > 0.96
and bot:DistanceFromFountain() < 100
then
bot:Action_MoveToLocation(bot:GetLocation()+ RandomVector(500) )
return
end
if bot:IsChanneling() if bot:IsChanneling()
or bot:NumQueuedActions() > 0 or bot:NumQueuedActions() > 0
or bot:IsCastingAbility() or bot:IsCastingAbility()
......
...@@ -8,85 +8,13 @@ if GetBot():IsInvulnerable() or not GetBot():IsHero() or not string.find(GetBot( ...@@ -8,85 +8,13 @@ if GetBot():IsInvulnerable() or not GetBot():IsHero() or not string.find(GetBot(
return; return;
end end
local bot = GetBot()
local X = {}
local targetWatchTower = nil
local activeWatchTowerCD = 30.0
local lastActiveWatchTowerTime = 0
local nWatchTower_1 = nil
local nWatchTower_2 = nil
local ignoreDistance = 0
local bEnemyTower2Destroyed = false
function GetDesire() function GetDesire()
if 7.30 then return BOT_MODE_DESIRE_NONE end
local currentTime = DotaTime()
if bot:HasModifier("modifier_arc_warden_tempest_double")
or bot:GetCurrentActionType() == BOT_ACTION_TYPE_IDLE
or not X.HasEnemyTower2Destroyed()
or X.GetAliveEnemyHeroCount() >= 4
then
return BOT_MODE_DESIRE_NONE
end
if targetWatchTower ~= nil
and GetUnitToUnitDistance(bot,targetWatchTower) <= 3800 - ignoreDistance
and targetWatchTower:GetTeam() ~= bot:GetTeam()
and X.IsSuitableToActiveWatchTower()
and lastActiveWatchTowerTime + activeWatchTowerCD < currentTime
then
local nBonusDesire = -0.05
if GetUnitToUnitDistance(bot,targetWatchTower) <= 600
then nBonusDesire = nBonusDesire + 0.02 end
if bot:IsChanneling() and bot:GetActiveMode() == BOT_MODE_SIDE_SHOP
then
nBonusDesire = nBonusDesire + 0.1
local nEnemies = bot:GetNearbyHeroes(1600,true,BOT_MODE_NONE)
if #nEnemies == 0 then nBonusDesire = nBonusDesire + 0.1 end
end
return BOT_MODE_DESIRE_HIGH + nBonusDesire
end
if currentTime % 60 > 0 and currentTime % 60 < 45
then
ignoreDistance = 1000
else
ignoreDistance = 0
end
targetWatchTower = X.GetNearestWatchTower(bot)
if targetWatchTower ~= nil
and targetWatchTower:GetTeam() == bot:GetTeam()
then
lastActiveWatchTowerTime = DotaTime()
end
return BOT_MODE_DESIRE_NONE return BOT_MODE_DESIRE_NONE
end end
function Think() function Think()
if bot:IsChanneling()
or bot:NumQueuedActions() > 0
or bot:IsCastingAbility()
or bot:IsUsingAbility()
then
return
end
if GetUnitToUnitDistance(bot,targetWatchTower) > 300
then
bot:Action_MoveToLocation(targetWatchTower:GetLocation() + RandomVector(30))
else
bot:Action_AttackUnit(targetWatchTower,false)
end
end end
...@@ -97,106 +25,7 @@ end ...@@ -97,106 +25,7 @@ end
function OnEnd() function OnEnd()
targetWatchTower = nil
end
function X.GetNearestWatchTower(bot)
if nWatchTower_1 == nil
then
local allUnitList = GetUnitList(UNIT_LIST_ALL)
for _,v in pairs(allUnitList)
do
if v:GetUnitName() == '#DOTA_OutpostName_North'
or v:GetUnitName() == '#DOTA_OutpostName_South'
then
if nWatchTower_1 == nil
then
nWatchTower_1 = v
else
nWatchTower_2 = v
end
end
end
end
if nWatchTower_1 ~= nil and nWatchTower_2 ~= nil
and GetUnitToUnitDistance(bot,nWatchTower_1) < GetUnitToUnitDistance(bot,nWatchTower_2)
then
return nWatchTower_1
else
return nWatchTower_2
end
end
function X.IsSuitableToActiveWatchTower()
local mode = bot:GetActiveMode()
local nEnemies = bot:GetNearbyHeroes(1400, true, BOT_MODE_NONE)
local nAttackAllies = bot:GetNearbyHeroes(1200,false,BOT_MODE_ATTACK)
local nRetreatAllies = bot:GetNearbyHeroes(1200,false,BOT_MODE_RETREAT)
local nWatchtTowerAllies = bot:GetNearbyHeroes(1600,false,BOT_MODE_SIDE_SHOP)
if ( mode == BOT_MODE_RETREAT and bot:GetActiveModeDesire() > BOT_MODE_DESIRE_HIGH )
or ( mode == BOT_MODE_RETREAT and bot:WasRecentlyDamagedByAnyHero(2.0) )
or ( #nAttackAllies >= 1 )
or ( #nEnemies >= 1 and ( X.IsEnemyTargetBot(nEnemies) or #nEnemies >= 2 ) )
or ( #nRetreatAllies >= 2 and nRetreatAllies[2]:GetActiveModeDesire() > BOT_MODE_DESIRE_HIGH )
or ( #nWatchtTowerAllies >= 2 and mode ~= BOT_MODE_SIDE_SHOP )
then
return false
end
return true
end
function X.IsEnemyTargetBot(nEnemies)
for _,u in pairs(nEnemies)
do
if u:GetAttackTarget() == bot
or u:IsFacingLocation(bot:GetLocation(),10)
or ( targetWatchTower ~= nil and GetUnitToUnitDistance(u,targetWatchTower) < 500 )
then
return true
end
end
return false
end
function X.HasEnemyTower2Destroyed()
if bEnemyTower2Destroyed then return true end
for i = 1, 7, 3
do
local tower = GetTower( GetOpposingTeam(), i )
if tower == nil
then
bEnemyTower2Destroyed = true
return true
end
end
return false
end
function X.GetAliveEnemyHeroCount()
local aliveEnemyHeroCount = 0
for _, id in pairs( GetTeamPlayers( GetOpposingTeam() ) )
do
if IsHeroAlive( id )
then
aliveEnemyHeroCount = aliveEnemyHeroCount + 1
end
end
return aliveEnemyHeroCount
end end
......
...@@ -1193,20 +1193,6 @@ function X.GetNearbyLastHitCreep(ignorAlly, bEnemy, nDamage, nRadius, bot) ...@@ -1193,20 +1193,6 @@ function X.GetNearbyLastHitCreep(ignorAlly, bEnemy, nDamage, nRadius, bot)
end end
end end
if bEnemy
and botName == "npc_dota_hero_clinkz"
then
local cAbility = bot:GetAbilityByName( "clinkz_searing_arrows" );
if cAbility:IsTrained() and cAbility:GetAutoCastState()
then
local bonusDamage = cAbility:GetSpecialValueInt( 'damage_bonus' );
local bonusTalent = bot:GetAbilityByName( "special_bonus_unique_clinkz_1" )
local talentDamage = bonusTalent:IsTrained() and bonusTalent:GetSpecialValueInt( 'value' ) or 0
nDamage = nDamage + bonusDamage + talentDamage
end
end
for _,nCreep in pairs(nNearbyCreeps) for _,nCreep in pairs(nNearbyCreeps)
do do
if X.CanBeAttacked(nCreep) and nCreep:GetHealth() < ( nDamage + 256 ) if X.CanBeAttacked(nCreep) and nCreep:GetHealth() < ( nDamage + 256 )
...@@ -1226,24 +1212,6 @@ function X.GetNearbyLastHitCreep(ignorAlly, bEnemy, nDamage, nRadius, bot) ...@@ -1226,24 +1212,6 @@ function X.GetNearbyLastHitCreep(ignorAlly, bEnemy, nDamage, nRadius, bot)
end end
end end
if bEnemy and botName == "npc_dota_hero_phantom_lancer"
and not J.IsInRange(bot,nCreep,251)
then
local cAbility = bot:GetAbilityByName( "phantom_lancer_phantom_edge" );
if cAbility:IsFullyCastable()
then
local bonusDamage = cAbility:GetSpecialValueInt( 'bonus_agility' );
nDamage = nDamage + bonusDamage;
end
if bot:HasModifier('modifier_phantom_lancer_phantom_edge_agility')
and J.GetModifierTime( bot,"modifier_phantom_lancer_phantom_edge_agility" ) < nAttackProDelayTime * 1.18
then
local bonusDamage = cAbility:GetSpecialValueInt( 'bonus_agility' );
nDamage = nDamage - bonusDamage;
end
end
local nRealDamage = nDamage * bot:GetAttackCombatProficiency(nCreep) local nRealDamage = nDamage * bot:GetAttackCombatProficiency(nCreep)
if J.WillKillTarget(nCreep,nRealDamage,nDamageType,nAttackProDelayTime) if J.WillKillTarget(nCreep,nRealDamage,nDamageType,nAttackProDelayTime)
......
---------------------------------------------------------------------------
--- The Creation Come From: A Beginner AI
--- Author: 决明子 Email: dota2jmz@163.com 微博@Dota2_决明子
--- Link:http://steamcommunity.com/sharedfiles/filedetails/?id=1573671599
--- Link:http://steamcommunity.com/sharedfiles/filedetails/?id=1627071163
---------------------------------------------------------------------------
-- 有多少人工, 才有多么智能
-- How much artificial, how many intelligence.
------------------------------------------------------2017.08.20
--if _G.Rewrite then return end
--_G.Rewrite = true
--------------------------------
--new functions
--------------------------------
function print_r(t,page)
local print_r_cache={}
local function sub_print_r(t,indent)
if (print_r_cache[tostring(t)]) then
print(indent.."*"..tostring(t))
else
print_r_cache[tostring(t)]=true
if (type(t)=="table") then
for pos,val in pairs(t) do
if (type(val)=="table") then
print(indent.."["..pos.."] => "..tostring(t).." {")
sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
print(indent..string.rep(" ",string.len(pos)+6).."}")
elseif (type(val)=="string") then
print(indent.."["..pos..'] => "'..val..'"')
else
print(indent.."["..pos.."] => "..tostring(val))
end
end
else
print(indent..tostring(t))
end
end
end
if (type(t)=="table") then
print(tostring(t).." {")
sub_print_r(t," ")
print("}")
else
sub_print_r(t," ")
end
end
_G.FilterTable = function(t,filter)
local newGroup={}
for _, obj in pairs( t ) do
if filter(obj) then
table.insert(newGroup,obj)
end
end
return newGroup
end
function CDOTA_Bot_Script.IsAlly(unit)
return GetBot():GetTeam() == unit:GetTeam()
end
function CDOTA_Bot_Script.GetHealthPercent(unit)
return unit:GetHealth() / unit:GetMaxHealth()
end
function CDOTA_Bot_Script.GetManaPercent(unit)
return unit:GetMana() / unit:GetMaxMana()
end
function CDOTA_Bot_Script.IsEnemy(unit)
return GetBot():GetTeam() ~= unit:GetTeam()
end
function CDOTA_Bot_Script.GetDistanceToUnit(unit, unit2)
if not unit2 then return 99999 end
local loc1=unit:GetLocation()
local loc2=unit2:GetLocation()
return math.sqrt(( loc1.x - loc2.x )*( loc1.x - loc2.x ) + ( loc1.y - loc2.y ) * ( loc1.y - loc2.y ))
end
function CDOTA_Bot_Script.GetDistanceToLocation(unit, loc)
if not loc then return 99999 end
local loc1=unit:GetLocation()
return math.sqrt(( loc1.x - loc.x )*( loc1.x - loc.x ) + ( loc1.y - loc.y ) * ( loc1.y - loc.y ))
end
function CDOTA_Bot_Script.WasRecentlyDamagedByAnyUnit(unit,time)
return unit:WasRecentlyDamagedByAnyHero(time)
or unit:WasRecentlyDamagedByCreep(time)
end
function CDOTABaseAbility_BotScript.GetVal(ability, name)
local f=ability:GetSpecialValueFloat(name)
if math.abs(f)<0.0001 then
f=ability:GetSpecialValueInt(name)
end
return f
end
--------------------------------
--rewrite functions CDOTA_Bot_Script
--------------------------------
CDOTA_Bot_Script.GetAttackCombatProficiency=function(u)
return 1.0
end
local gar=CDOTA_Bot_Script.GetAttackRange
local gar_data={}
CDOTA_Bot_Script.GetAttackRange=function(u)
if u:CanBeSeen() then
gar_data[u]=gar(u)
return gar(u)
end
return gar_data[u] or 0
end
local ic=CDOTA_Bot_Script.IsChanneling
CDOTA_Bot_Script.IsChanneling=function(u)
if u:CanBeSeen() then
return ic(u)
end
return false
end
local hm=CDOTA_Bot_Script.HasModifier
CDOTA_Bot_Script.HasModifier=function(u,pszModifierName)
if u:CanBeSeen() then
return hm(u,pszModifierName)
end
return false
end
local gedtt=CDOTA_Bot_Script.GetEstimatedDamageToTarget
CDOTA_Bot_Script.GetEstimatedDamageToTarget=function(u,bCurrentlyAvailable,hTarget,fDuration,nDamageTypes)
if u:CanBeSeen() then
return gedtt(u,bCurrentlyAvailable,hTarget,fDuration,nDamageTypes)
end
local result = DotaTime() * 0.5 + 50
if DotaTime() > 5 * 60 then
result = 200 + (DotaTime()-300) * 0.4
end
if DotaTime() > 10 * 60 then
result = 320 + (DotaTime()-600) * 0.2
end
if DotaTime() > 20 * 60 then
result = 440 + (DotaTime()-600) * 0.1
end
if DotaTime() > 30 * 60 then
result = 500
end
return math.floor(result * fDuration)
end
local iua=CDOTA_Bot_Script.IsUsingAbility
CDOTA_Bot_Script.IsUsingAbility=function(u)
if u:CanBeSeen() then
return iua(u)
end
return false
end
local gat=CDOTA_Bot_Script.GetAttackTarget
CDOTA_Bot_Script.GetAttackTarget=function(u)
if u:CanBeSeen() then
return gat(u)
end
return nil
end
local gt=CDOTA_Bot_Script.GetTarget
CDOTA_Bot_Script.GetTarget=function(u)
if u:IsAlly() then
return gt(u)
end
return nil
end
local ii=CDOTA_Bot_Script.IsInvulnerable
CDOTA_Bot_Script.IsInvulnerable=function(u)
if u:CanBeSeen() then
return ii(u)
end
return false
end
local iai=CDOTA_Bot_Script.IsAttackImmune
CDOTA_Bot_Script.IsAttackImmune=function(u)
if u:CanBeSeen() then
return iai(u)
end
return false
end
local gaid=CDOTA_Bot_Script.GetActualIncomingDamage
CDOTA_Bot_Script.GetActualIncomingDamage=function(u, nDamage, nType)
if u:CanBeSeen() then
return gaid(u, nDamage, nType)
end
return 0
end
local gh=CDOTA_Bot_Script.GetHealth
CDOTA_Bot_Script.GetHealth=function(u)
if u:CanBeSeen() then
return gh(u)
end
return GetBot():GetMaxHealth() - gh(GetBot())
--自己血越少,认为看不见的敌人血越多
end
local gmh=CDOTA_Bot_Script.GetMaxHealth
CDOTA_Bot_Script.GetMaxHealth=function(u)
if u:CanBeSeen() then
return gmh(u)
end
return gmh(GetBot())
end
local ghr=CDOTA_Bot_Script.GetHealthRegen
CDOTA_Bot_Script.GetHealthRegen=function(u)
if u:CanBeSeen() then
return ghr(u)
end
return ghr(GetBot())
end
local gm=CDOTA_Bot_Script.GetMana
CDOTA_Bot_Script.GetMana=function(u)
if u:CanBeSeen() then
return gm(u)
end
return gm(GetBot())
end
local gmm=CDOTA_Bot_Script.GetMaxMana
CDOTA_Bot_Script.GetMaxMana=function(u)
if u:CanBeSeen() then
return gmm(u)
end
return gmm(GetBot())
end
local gnh=CDOTA_Bot_Script.GetNearbyHeroes
CDOTA_Bot_Script.GetNearbyHeroes = function(u,nRadius,bEnemies,eBotMode)
if not u:CanBeSeen() then return {} end
if nRadius <= 1600 and u:IsBot() then return gnh(u,nRadius,bEnemies,eBotMode) end
local list
if bEnemies then
list=GetUnitList(UNIT_LIST_ENEMY_HEROES)
else
list=GetUnitList(UNIT_LIST_ALLIED_HEROES)
end
list=FilterTable(list,function(unit)
return u:GetDistanceToUnit(unit) <= nRadius
and (bEnemies or eBotMode == BOT_MODE_NONE or not unit:IsBot() or eBotMode == unit:GetActiveMode())
end)
return list
end
local gnc=CDOTA_Bot_Script.GetNearbyCreeps
CDOTA_Bot_Script.GetNearbyCreeps = function(u,nRadius,bEnemies)
if not u:CanBeSeen() then return {} end
if nRadius <= 1600 and u:IsBot() then return gnc(u,nRadius,bEnemies) end
local list
if bEnemies then
list=GetUnitList(UNIT_LIST_ENEMY_CREEPS) or {}
else
list=GetUnitList(UNIT_LIST_ALLIED_CREEPS) or {}
end
list=FilterTable(list,function(unit)
return u:GetDistanceToUnit(unit) <= nRadius
end)
return list
end
--------------------------------
--rewrite functions CDOTABaseAbility_BotScript
--------------------------------
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment