Commit bfb02f13 authored by JoyJ's avatar JoyJ

fix clinkz

parent c1060786
...@@ -19,13 +19,13 @@ local sOutfitType = J.Item.GetOutfitType( bot ) ...@@ -19,13 +19,13 @@ local sOutfitType = J.Item.GetOutfitType( bot )
local tTalentTreeList = { local tTalentTreeList = {
['t25'] = {10, 0}, ['t25'] = {10, 0},
['t20'] = {0, 10}, ['t20'] = {10, 0},
['t15'] = {0, 10}, ['t15'] = {0, 10},
['t10'] = {0, 10}, ['t10'] = {0, 10},
} }
local tAllAbilityBuildList = { local tAllAbilityBuildList = {
{2,1,2,3,2,6,2,1,1,1,6,3,3,3,6}, {2,1,3,1,2,6,1,1,2,2,6,3,3,3,6},
} }
local nAbilityBuildList = J.Skill.GetRandomBuild( tAllAbilityBuildList ) local nAbilityBuildList = J.Skill.GetRandomBuild( tAllAbilityBuildList )
...@@ -124,12 +124,14 @@ modifier_clinkz_burning_army ...@@ -124,12 +124,14 @@ modifier_clinkz_burning_army
local abilityQ = bot:GetAbilityByName( sAbilityList[1] ) local abilityQ = bot:GetAbilityByName( sAbilityList[1] )
local abilityW = bot:GetAbilityByName( sAbilityList[2] ) local abilityW = bot:GetAbilityByName( sAbilityList[2] )
local abilityE = bot:GetAbilityByName( sAbilityList[3] ) local abilityE = bot:GetAbilityByName( sAbilityList[3] )
local abilityD = bot:GetAbilityByName( sAbilityList[4] )
local abilityF = bot:GetAbilityByName( sAbilityList[5] )
local abilityR = bot:GetAbilityByName( sAbilityList[6] ) local abilityR = bot:GetAbilityByName( sAbilityList[6] )
local talent4 = bot:GetAbilityByName( sTalentList[4] ) local talent4 = bot:GetAbilityByName( sTalentList[4] )
local castQDesire, castQTarget local castQDesire, castQTarget
local castWDesire, castWTarget local castWDesire, castWTarget
local castEDesire local castEDesire, castWTarget
local castRDesire, castRTarget local castRDesire, castRTarget
local nKeepMana, nMP, nHP, nLV, hEnemyList, hAllyList, botTarget, sMotive local nKeepMana, nMP, nHP, nLV, hEnemyList, hAllyList, botTarget, sMotive
...@@ -163,26 +165,25 @@ function X.SkillsComplement() ...@@ -163,26 +165,25 @@ function X.SkillsComplement()
return return
end end
castRDesire, castRTarget, sMotive = X.ConsiderR() castRDesire, 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_UseAbilityOnEntity( abilityR, castRTarget ) bot:ActionQueue_UseAbility( abilityR )
return return
end end
castQDesire, castQTarget, sMotive = X.ConsiderQ() castQDesire, sMotive = X.ConsiderQ()
if ( castQDesire > 0 ) if ( castQDesire > 0 )
then then
J.SetReportMotive( bDebugMode, sMotive ) J.SetReportMotive( bDebugMode, sMotive )
J.SetQueuePtToINT( bot, true ) J.SetQueuePtToINT( bot, true )
bot:ActionQueue_UseAbilityOnLocation( abilityQ, castQTarget ) bot:ActionQueue_UseAbility( abilityQ )
return return
end end
...@@ -191,23 +192,33 @@ function X.SkillsComplement() ...@@ -191,23 +192,33 @@ function X.SkillsComplement()
then then
J.SetReportMotive( bDebugMode, sMotive ) J.SetReportMotive( bDebugMode, sMotive )
bot:Action_UseAbilityOnEntity( abilityW, castWTarget ) local mp = bot:GetMana()
if abilityR:IsFullyCastable() and mp > 250 then
bot:ActionQueue_UseAbility(abilityR)
end
if not abilityD:IsHidden() and abilityD:IsFullyCastable() and mp > 400 then
bot:ActionQueue_UseAbilityOnLocation(abilityD, (bot:GetLocation() + castWTarget:GetLocation()) / 3)
end
bot:ActionQueue_UseAbilityOnEntity( abilityW, castWTarget )
if abilityQ:IsFullyCastable() then
bot:ActionQueue_UseAbility(abilityQ)
end
return return
end end
end end
function X.ConsiderR() function X.ConsiderE()
if not abilityR:IsFullyCastable() then return 0 end if not abilityE:IsFullyCastable() then return 0 end
local nSkillLV = abilityR:GetLevel() local nSkillLV = abilityE:GetLevel()
local nCastRange = abilityR:GetCastRange() + aetherRange + 32 local nCastRange = abilityE:GetCastRange() + aetherRange + 32
local nCastPoint = abilityR:GetCastPoint() local nCastPoint = abilityE:GetCastPoint()
local nManaCost = abilityR:GetManaCost() local nManaCost = abilityE:GetManaCost()
local nDamage = abilityR:GetAbilityDamage() local nDamage = abilityE:GetAbilityDamage()
local nDamageType = DAMAGE_TYPE_MAGICAL local nDamageType = DAMAGE_TYPE_MAGICAL
if #hEnemyList == 0 then nCastRange = 1600 end if #hEnemyList == 0 then nCastRange = 1600 end
...@@ -265,220 +276,59 @@ end ...@@ -265,220 +276,59 @@ end
local lastAutoTime = 0 local lastAutoTime = 0
function X.ConsiderW() function X.ConsiderW()
if not abilityW:IsFullyCastable() or bot:IsDisarmed() then if not abilityW:IsFullyCastable() then return BOT_ACTION_DESIRE_NONE end
return BOT_ACTION_DESIRE_NONE, 0
end
local nCastRange = bot:GetAttackRange() --不考虑combo,必须挨得够近
local nCastPoint = abilityW:GetCastPoint()
local nSkillLV = abilityW:GetLevel() local nSkillLV = abilityW:GetLevel()
local nAttackRange = bot:GetAttackRange() + 50
local nAttackDamage = bot:GetAttackDamage()
local nTalent4Damage = talent4:IsTrained() and talent4:GetSpecialValueInt( "value" ) or 0
local nAbilityDamage = nAttackDamage + abilityW:GetSpecialValueInt( "damage_bonus" ) + nTalent4Damage
local nDamageType = DAMAGE_TYPE_PHYSICAL
local nCastRange = nAttackRange
local nTowers = bot:GetNearbyTowers( 870, true )
local nEnemysLaneCreepsInRange = bot:GetNearbyLaneCreeps( nAttackRange + 100, true )
local nEnemysLaneCreepsInBonus = bot:GetNearbyLaneCreeps( 500, true )
local nEnemysWeakestLaneCreepsInRange = J.GetVulnerableWeakestUnit( bot, false, true, nAttackRange + 200 )
local nEnemysHerosInAttackRange = bot:GetNearbyHeroes( nAttackRange, true, BOT_MODE_NONE )
local nEnemysWeakestHero = J.GetVulnerableWeakestUnit( bot, true, true, nAttackRange + 40 )
local nAllyLaneCreeps = bot:GetNearbyLaneCreeps( 450, false )
local botMode = bot:GetActiveMode()
local nTargetUint = nil
if nLV >= 7
then
if ( hEnemyList[1] ~= nil or ( nSkillLV >= 4 and nMP > 0.6 - 0.01 * nLV ) )
and not abilityW:GetAutoCastState()
then
lastAutoTime = DotaTime()
abilityW:ToggleAutoCast()
elseif hEnemyList[1] == nil
and lastAutoTime < DotaTime() - 2.0
and abilityW:GetAutoCastState()
then
abilityW:ToggleAutoCast()
end
else
if abilityW:GetAutoCastState()
then
abilityW:ToggleAutoCast()
end
end
if nLV <= 6 and nHP > 0.55
and J.IsValidHero( botTarget )
and ( not J.IsRunning( bot ) or J.IsInRange( bot, botTarget, nAttackRange + 29 ) )
then
if not botTarget:IsAttackImmune()
and GetUnitToUnitDistance( bot, botTarget ) < nAttackRange + 99
then
nTargetUint = botTarget
return BOT_ACTION_DESIRE_HIGH, nTargetUint, "W-手动法球"
end
end
if ( botMode == BOT_MODE_LANING and #nTowers == 0 )
then
if J.IsValid( nEnemysWeakestHero )
then
if nHP >= 0.62
and #nEnemysLaneCreepsInBonus <= 6
and #nAllyLaneCreeps >= 2
and not bot:WasRecentlyDamagedByCreep( 1.5 )
and not bot:WasRecentlyDamagedByAnyHero( 1.5 )
then
return BOT_ACTION_DESIRE_HIGH, nEnemysWeakestHero, "W-对线法球1"
end
if J.GetAllyUnitCountAroundEnemyTarget( bot, nEnemysWeakestHero, 500 ) >= 3
and nHP >= 0.6
and not bot:WasRecentlyDamagedByCreep( 1.5 )
and not bot:WasRecentlyDamagedByAnyHero( 1.5 )
then
return BOT_ACTION_DESIRE_HIGH, nEnemysWeakestHero, "W-对线法球2"
end
end
--补刀
if J.IsWithoutTarget( bot )
and not J.IsAttacking( bot )
then
local nLaneCreepList = bot:GetNearbyLaneCreeps( 1100, true )
for _, creep in pairs( nLaneCreepList )
do
if J.IsValid( creep )
and not creep:HasModifier( "modifier_fountain_glyph" )
and creep:GetHealth() < nAttackDamage + 180
and not J.IsAllysTarget( creep )
then
local nAttackProDelayTime = J.GetAttackProDelayTime( bot, nCreep ) * 1.12 + 0.05
local nAD = nAbilityDamage * bot:GetAttackCombatProficiency( creep )
if J.WillKillTarget( creep, nAD, nDamageType, nAttackProDelayTime )
then
return BOT_ACTION_DESIRE_HIGH, creep, nAD..'W-补刀:'..creep:GetHealth()
end
end
end
end
end
local nEnemysHeroesInCastRange = bot:GetNearbyHeroes( nCastRange + 99, true, BOT_MODE_NONE )
if J.IsValidHero( botTarget ) local nEnemysHeroesInView = bot:GetNearbyHeroes( 880, true, BOT_MODE_NONE )
and not J.IsInRange( bot, botTarget, nAttackRange + 200 )
and J.IsValidHero( nEnemysHerosInAttackRange[1] ) --追杀
and J.CanBeAttacked( nEnemysHerosInAttackRange[1] ) if J.IsGoingOnSomeone( bot ) then
and botMode ~= BOT_MODE_RETREAT local target = J.GetProperTarget( bot )
then if J.IsValidHero( target )
return BOT_ACTION_DESIRE_HIGH, nEnemysHerosInAttackRange[1] and J.CanCastOnNonMagicImmune( target )
end and J.CanCastOnTargetAdvanced( target )
and J.IsInRange( target, bot, nCastRange ) then
return BOT_ACTION_DESIRE_HIGH, target
if botTarget == nil
and botMode ~= BOT_MODE_RETREAT
and botMode ~= BOT_MODE_ATTACK
and botMode ~= BOT_MODE_ASSEMBLE
and botMode ~= BOT_MODE_TEAM_ROAM
then
if J.IsValid( nEnemysWeakestLaneCreepsInRange )
and not J.IsAllysTarget( nEnemysWeakestLaneCreepsInRange )
then
local nCreep = nEnemysWeakestLaneCreepsInRange
local nAttackProDelayTime = J.GetAttackProDelayTime( bot, nCreep )
local otherAttackRealDamage = J.GetTotalAttackWillRealDamage( nCreep, nAttackProDelayTime )
local nRealDamage = nCreep:GetActualIncomingDamage( nAbilityDamage * bot:GetAttackCombatProficiency( nCreep ), nDamageType )
if otherAttackRealDamage + nRealDamage > nCreep:GetHealth()
and not J.CanKillTarget( nCreep, nAttackDamage, DAMAGE_TYPE_PHYSICAL )
then
local nTime = nAttackProDelayTime
local rMessage = "时:"..J.GetTwo( DotaTime()%60 ).."延:"..J.GetOne( nAttackProDelayTime ).."生:"..nCreep:GetHealth().."技:"..J.GetOne( nAbilityDamage ).."额:"..J.GetOne( otherAttackRealDamage ).."总:"..( otherAttackRealDamage + nRealDamage )
return BOT_ACTION_DESIRE_HIGH, nCreep, rMessage
end
end
end
if ( J.IsFarming( bot ) or J.IsPushing( bot ) )
and nSkillLV >= 3
and not abilityW:GetAutoCastState()
then
if J.IsValidBuilding( botTarget )
and bot:GetMana() > nKeepMana
and not botTarget:HasModifier( 'modifier_fountain_glyph' )
and J.IsInRange( bot, botTarget, nCastRange + 80 )
then
return BOT_ACTION_DESIRE_HIGH, botTarget, 'W-推塔'
end
if botTarget ~= nil
and botTarget:IsAlive()
and nMP > 0.4
and not botTarget:HasModifier( 'modifier_fountain_glyph' )
and botTarget:GetHealth() > nAbilityDamage * 2.6
and J.IsInRange( bot, botTarget, nCastRange + 80 )
then
return BOT_ACTION_DESIRE_HIGH, botTarget, 'W-打钱'
end
end
if J.IsGoingOnSomeone( bot ) and not abilityW:GetAutoCastState()
then
if J.IsValidHero( botTarget )
and not botTarget:IsAttackImmune()
and J.CanCastOnMagicImmune( botTarget )
and J.IsInRange( botTarget, bot, nAttackRange + 80 )
then
return BOT_ACTION_DESIRE_MODERATE, botTarget
end end
end end
--逃跑
if ( bot:GetActiveMode() == BOT_MODE_ROSHAN and not abilityW:GetAutoCastState() ) if J.IsRetreating( bot )
then then
if J.IsRoshan( botTarget ) if J.IsValid( nEnemysHeroesInCastRange[1] )
and J.IsInRange( botTarget, bot, nAttackRange ) and J.CanCastOnNonMagicImmune( nEnemysHeroesInCastRange[1] )
and J.CanCastOnTargetAdvanced( nEnemysHeroesInCastRange[1] )
and not J.IsDisabled( nEnemysHeroesInCastRange[1] )
and not nEnemysHeroesInCastRange[1]:IsDisarmed()
and GetUnitToUnitDistance( bot, nEnemysHeroesInCastRange[1] ) <= nCastRange - 60
then then
return BOT_ACTION_DESIRE_HIGH, botTarget return BOT_ACTION_DESIRE_HIGH, nEnemysHeroesInCastRange[1]
end end
end end
return BOT_ACTION_DESIRE_NONE return BOT_ACTION_DESIRE_NONE
end end
function X.ConsiderE() function X.ConsiderR()
local nEnemyTowers = bot:GetNearbyTowers( 888, true ) local nEnemyTowers = bot:GetNearbyTowers( 888, true )
if not abilityE:IsFullyCastable() if not abilityR:IsFullyCastable()
or bot:IsInvisible() or bot:IsInvisible()
or #nEnemyTowers >= 1 or #nEnemyTowers >= 1
or bot:HasModifier( "modifier_item_dustofappearance" ) or bot:HasModifier( "modifier_item_dustofappearance" )
or bot:DistanceFromFountain() < 800 or bot:DistanceFromFountain() < 800
then return 0 end then return BOT_ACTION_DESIRE_NONE end
local nSkillLV = abilityE:GetLevel() local nSkillLV = abilityR:GetLevel()
local nCastRange = abilityE:GetCastRange() local nCastRange = abilityR:GetCastRange()
local nCastPoint = abilityE:GetCastPoint() local nCastPoint = abilityR:GetCastPoint()
local nManaCost = abilityE:GetManaCost() local nManaCost = abilityR:GetManaCost()
local nDamage = abilityE:GetAbilityDamage() local nDamage = abilityR:GetAbilityDamage()
local nDamageType = DAMAGE_TYPE_MAGICAL local nDamageType = DAMAGE_TYPE_MAGICAL
local nInRangeEnemyList = bot:GetNearbyHeroes( nCastRange, true, BOT_MODE_NONE ) local nInRangeEnemyList = bot:GetNearbyHeroes( nCastRange, true, BOT_MODE_NONE )
...@@ -486,13 +336,13 @@ function X.ConsiderE() ...@@ -486,13 +336,13 @@ function X.ConsiderE()
and bot:GetActiveModeDesire() > BOT_MODE_DESIRE_HIGH and bot:GetActiveModeDesire() > BOT_MODE_DESIRE_HIGH
and #hEnemyList > 0 and #hEnemyList > 0
then then
return BOT_ACTION_DESIRE_HIGH, 'E-撤退了' return BOT_ACTION_DESIRE_HIGH, 'R-撤退了'
end end
if J.GetHP( bot ) < 0.166 if J.GetHP( bot ) < 0.166
and ( #hEnemyList > 0 or bot:WasRecentlyDamagedByAnyHero( 5.0 ) ) and ( #hEnemyList > 0 or bot:WasRecentlyDamagedByAnyHero( 5.0 ) )
then then
return BOT_ACTION_DESIRE_HIGH, 'E-隐身保命' return BOT_ACTION_DESIRE_HIGH, 'R-隐身保命'
end end
if J.IsGoingOnSomeone( bot ) if J.IsGoingOnSomeone( bot )
...@@ -506,14 +356,14 @@ function X.ConsiderE() ...@@ -506,14 +356,14 @@ function X.ConsiderE()
local hEnemyCreepList = bot:GetNearbyLaneCreeps( 700, true ) local hEnemyCreepList = bot:GetNearbyLaneCreeps( 700, true )
if #hEnemyCreepList == 0 and #hEnemyList == 0 if #hEnemyCreepList == 0 and #hEnemyList == 0
then then
return BOT_ACTION_DESIRE_HIGH, 'E-隐身攻击:'..J.Chat.GetNormName( botTarget ) return BOT_ACTION_DESIRE_HIGH, 'R-隐身攻击:'..J.Chat.GetNormName( botTarget )
end end
end end
if J.IsChasingTarget( bot, botTarget ) if J.IsChasingTarget( bot, botTarget )
and J.IsInRange( bot, botTarget, 1000 ) and J.IsInRange( bot, botTarget, 1000 )
then then
return BOT_ACTION_DESIRE_HIGH, 'E-隐身追击:'..J.Chat.GetNormName( botTarget ) return BOT_ACTION_DESIRE_HIGH, 'R-隐身追击:'..J.Chat.GetNormName( botTarget )
end end
end end
...@@ -528,7 +378,7 @@ function X.ConsiderE() ...@@ -528,7 +378,7 @@ function X.ConsiderE()
local nEnemyTowers = bot:GetNearbyTowers( 1400, true ) local nEnemyTowers = bot:GetNearbyTowers( 1400, true )
if #nEnemies == 0 and #nAllies <= 2 and nEnemyTowers == 0 if #nEnemies == 0 and #nAllies <= 2 and nEnemyTowers == 0
then then
return BOT_ACTION_DESIRE_HIGH, 'E-敌方地区潜行' return BOT_ACTION_DESIRE_HIGH, 'R-敌方地区潜行'
end end
end end
...@@ -544,30 +394,24 @@ function X.ConsiderQ() ...@@ -544,30 +394,24 @@ function X.ConsiderQ()
then return 0 end then return 0 end
local nSkillLV = abilityQ:GetLevel() local nSkillLV = abilityQ:GetLevel()
local nCastRange = 750 local nCastRange = bot:GetAttackRange()
local nCastPoint = abilityQ:GetCastPoint() local nCastPoint = abilityQ:GetCastPoint()
local nManaCost = abilityQ:GetManaCost() local nManaCost = abilityQ:GetManaCost()
local nDamage = abilityQ:GetAbilityDamage() local nDamage = abilityQ:GetAbilityDamage()
local nDamageType = DAMAGE_TYPE_MAGICAL
local nInRangeEnemyList = bot:GetNearbyHeroes( nCastRange, true, BOT_MODE_NONE ) local nInRangeEnemyList = bot:GetNearbyHeroes( nCastRange, true, BOT_MODE_NONE )
--攻击敌人 --攻击敌人
if J.IsGoingOnSomeone(bot) if J.IsGoingOnSomeone(bot)
then then
if J.IsValidHero(botTarget) if J.IsValidHero(botTarget)
and J.CanCastOnNonMagicImmune(botTarget)
and J.IsInRange(bot, botTarget, nCastRange) and J.IsInRange(bot, botTarget, nCastRange)
and botTarget:IsFacingLocation( bot:GetLocation(), 120 )
then then
return BOT_ACTION_DESIRE_HIGH, botTarget:GetLocation(), "Q-攻击敌人" return BOT_ACTION_DESIRE_HIGH,"Q-攻击"
end end
end end
return BOT_ACTION_DESIRE_NONE return BOT_ACTION_DESIRE_NONE
end end
......
...@@ -182,7 +182,6 @@ function X.ConsiderQ() ...@@ -182,7 +182,6 @@ function X.ConsiderQ()
local nCastRange = abilityQ:GetCastRange() local nCastRange = abilityQ:GetCastRange()
local nCastPoint = abilityQ:GetCastPoint() local nCastPoint = abilityQ:GetCastPoint()
local nSkillLV = abilityQ:GetLevel() local nSkillLV = abilityQ:GetLevel()
local nDamage = 30 + nSkillLV * 30 + 120 * 0.38
local nEnemysHeroesInCastRange = bot:GetNearbyHeroes( nCastRange + 99, true, BOT_MODE_NONE ) local nEnemysHeroesInCastRange = bot:GetNearbyHeroes( nCastRange + 99, true, BOT_MODE_NONE )
local nEnemysHeroesInView = bot:GetNearbyHeroes( 880, true, BOT_MODE_NONE ) local nEnemysHeroesInView = bot:GetNearbyHeroes( 880, true, BOT_MODE_NONE )
......
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