Hi guys.. i am not really good in writing JASS, ok i am really bad in it.
All i can to is modify numbers or set "false" in "true".
So i have here a code about tinys toss in dota.. all i want is that it can damages neutrals AND remove the damage if the unit is an allied AND make it possible to toss also items.
I dont know if that is much to change or not, i find the parts to change but dont even know what to write.
Well if someone of you could change that for me, i would be really happy. Here is the code:
All i can to is modify numbers or set "false" in "true".
So i have here a code about tinys toss in dota.. all i want is that it can damages neutrals AND remove the damage if the unit is an allied AND make it possible to toss also items.
I dont know if that is much to change or not, i find the parts to change but dont even know what to write.
Well if someone of you could change that for me, i would be really happy. Here is the code:
JASS:
//TESH.scrollpos=0
//TESH.alwaysfold=0
function DistanceBetweenXY takes real x1,real y1,real x2,real y2 returns real
return SquareRoot(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))
endfunction
function AngleBetweenXY takes real x1,real y1,real x2,real y2 returns real
return Atan2(y2-y1,x2-x1)
endfunction
function GenericTrue takes nothing returns boolean
return true
endfunction
function KillTrees takes nothing returns nothing
call KillDestructable(GetEnumDestructable())
endfunction
function DestroyTrees takes real x,real y,real d returns nothing
local rect r=Rect(x-d,y-d,x+d,y+d)
call EnumDestructablesInRect(r,Condition(function GenericTrue),function KillTrees)
call RemoveRect(r)
set r=null
endfunction
function TossCheck takes nothing returns boolean
return (IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) == false and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0)
endfunction
function TossPickUnit takes unit Source returns unit
local unit TossUnit=null
local group g=CreateGroup()
call GroupEnumUnitsInRange(g,GetUnitX(Source),GetUnitY(Source),275,Condition(function TossCheck))
call GroupRemoveUnit(g,Source)
set TossUnit=GroupPickRandomUnit(g)
call DestroyGroup(g)
set udg_unit = TossUnit
set TossUnit=null
return udg_unit
endfunction
function DamageGroupToss takes nothing returns nothing
if(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) == true) then
call UnitDamageTarget(udg_unit,GetEnumUnit(),udg_damage/3,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
else
call UnitDamageTarget(udg_unit,GetEnumUnit(),udg_damage,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
endif
endfunction
function DamageCheck takes nothing returns boolean
return ( GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0 and IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()),GetOwningPlayer(udg_unit)))
endfunction
function TossDamage takes unit Source,real x,real y,real r,real d returns nothing
local group g=CreateGroup()
set udg_unit=Source
set udg_damage=d
call GroupEnumUnitsInRange(g,x,y,r,Condition(function DamageCheck))
call ForGroup(g,function DamageGroupToss)
call DestroyGroup(g)
endfunction
function TossMove takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer cache=GetHandleId(t)
local integer Runtimes=GetTriggerEvalCount(t)
local unit Source=LoadUnitHandle(udg_gHash,cache,StringHash("Source"))
local unit TossUnit=LoadUnitHandle(udg_gHash,cache,StringHash("TossUnit"))
local unit Target=LoadUnitHandle(udg_gHash,cache,StringHash("Target"))
local real x0=LoadReal(udg_gHash,cache,StringHash("TargetX"))
local real y0=LoadReal(udg_gHash,cache,StringHash("TargetY"))
local real x1=GetUnitX(TossUnit)
local real y1=GetUnitY(TossUnit)
local real x2=GetUnitX(Target)
local real y2=GetUnitY(Target)
local real AngleToFly
local real DistanceToFly
local real DistanceThis
local real Height
local real NewX
local real NewY
if DistanceBetweenXY(x0,y0,x2,y2)>1000 then
set x2=x0
set y2=y0
endif
set AngleToFly=AngleBetweenXY(x1,y1,x2,y2)
set DistanceToFly=DistanceBetweenXY(x1,y1,x2,y2)
set DistanceThis=DistanceToFly/ IMaxBJ(51-Runtimes,1)
set Height=(Runtimes-25)*(Runtimes-25)
set NewX=x1+DistanceThis*Cos(AngleToFly)
set NewY=y1+DistanceThis*Sin(AngleToFly)
if Runtimes<51 then
call SetUnitFlyHeight(TossUnit,775-Height,0)
call SetUnitPosition(TossUnit,NewX,NewY)
else
call SetUnitFlyHeight(TossUnit,GetUnitDefaultFlyHeight(TossUnit),0)
call PauseUnit(TossUnit,false)
call SetUnitPathing(TossUnit,true)
call SetUnitPosition(TossUnit,x2,y2)
//Toss ends
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetUnitX(TossUnit),GetUnitY(TossUnit)))
if IsUnitAlly(TossUnit,GetOwningPlayer(Source))then
call UnitDamageTarget(Source,TossUnit,0.2*75*GetUnitAbilityLevel(Source,039;A009039;),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
else
call UnitDamageTarget(Source,TossUnit,0.2*75*GetUnitAbilityLevel(Source,039;A009039;),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
endif
call DestroyTrees(x2,y2,300)
call TossDamage(Source,x2,y2,300,75*GetUnitAbilityLevel(Source,039;A009039;))
call FlushChildHashtable(udg_gHash,cache)
call DestroyTrigger(t)
endif
set t=null
set Source=null
set TossUnit=null
set Target=null
return false
endfunction
function TossOnEffect takes nothing returns nothing
local unit Source=GetTriggerUnit()
local unit TossUnit=TossPickUnit(Source)
local unit Target=GetSpellTargetUnit()
local trigger t=CreateTrigger()
local integer cache=GetHandleId(t)
call PauseUnit(TossUnit,true)
call SetUnitPathing(TossUnit,false)
call UnitAddAbility(TossUnit,039;Amrf039;)
call UnitRemoveAbility(TossUnit,039;Amrf039;)
//Toss starts
call SaveUnitHandle(udg_gHash,cache,StringHash("Source"),Source)
call SaveUnitHandle(udg_gHash,cache,StringHash("TossUnit"),TossUnit)
call SaveUnitHandle(udg_gHash,cache,StringHash("Target"),Target)
call SaveReal(udg_gHash,cache,StringHash("TargetX"),GetUnitX(Target))
call SaveReal(udg_gHash,cache,StringHash("TargetY"),GetUnitY(Target))
call TriggerRegisterTimerEvent(t,0.02,true)
call TriggerAddCondition(t,Condition(function TossMove))
set Source=null
set TossUnit=null
set Target=null
set t=null
endfunction
function TossOnCast takes nothing returns nothing
local unit Source=GetTriggerUnit()
local unit TossUnit=TossPickUnit(Source)
if TossUnit==null then
call DisplayTextToPlayer(GetOwningPlayer(Source),0,0,"No Vaild Unit to Toss!")
call PauseUnit(Source,true)
call IssueImmediateOrder(Source,"stop")
call PauseUnit(Source,false)
endif
set Source=null
set TossUnit=null
endfunction
function TossConditions takes nothing returns boolean
if GetSpellAbilityId()==039;A009039; then
if GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_CAST then
call TossOnCast()
else
call TossOnEffect()
endif
endif
return false
endfunction
//===========================================================================
function InitTrig_Toss_Old takes nothing returns nothing
set gg_trg_Toss_Old = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(gg_trg_Toss_Old, EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerRegisterAnyUnitEventBJ(gg_trg_Toss_Old, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition( gg_trg_Toss_Old, Condition( function TossConditions))
endfunction