Need someone who changes something in Jass

Silencer

New Member
Reaction score
0
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:

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,'A009'),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
        else
            call UnitDamageTarget(Source,TossUnit,0.2*75*GetUnitAbilityLevel(Source,'A009'),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,'A009'))
        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,'Amrf')
    call UnitRemoveAbility(TossUnit,'Amrf')
//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()=='A009' 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
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top