Applying Buff on a Target

Nevyll

New Member
Reaction score
1
So... after 2 hours of trying I am now coming here with this issue of mine;

How does one add a buff to a unit?
 

Chaos_Knight

New Member
Reaction score
39
Then you have to create a unit, give the unit the spell which gives your buff, and order it to cast it.
 

Nevyll

New Member
Reaction score
1
Well, if it helps, heres soem of that tasty source code:

JASS:

function Trig_Elemental_Wave_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
endfunction

function Trig_Elemental_Carrion_Leech takes nothing returns nothing
endfunction

function Trig_Elemental_Carrion_Damage takes nothing returns boolean
    if not IsUnitType( GetFilterUnit(), UNIT_TYPE_FLYING ) and not IsUnitType( GetFilterUnit(), UNIT_TYPE_STRUCTURE ) and GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE ) > .405 and IsUnitEnemy( GetFilterUnit(), GetOwningPlayer( udg_Caster ) ) and not UnitHasBuffBJ( GetFilterUnit(), 'B001' ) then
        call UnitDamageTarget( udg_Caster, GetFilterUnit(), udg_Damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS )
        call IssueTargetOrder( udg_Dummy, "frostnova", GetFilterUnit() )
        call UnitResetCooldown( udg_Dummy )
    endif

    return false
endfunction

function Trig_Elemental_Carrion takes nothing returns nothing
    local timer tSpellTimer = GetExpiredTimer()
    local integer nTimerID = GetHandleId( tSpellTimer )
    local integer nAbilityLevel = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "Level" ) )
    local integer nCarrionCurrent = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ) )
    local integer nCarrionTimer = LoadInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ) )
    local unit uCastUnit = LoadUnitHandle( udg_AbilityTable, nTimerID, StringHash( "Caster" ) )
    local unit uDummyUnit = LoadUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ) )
    local real rCarrionDamage = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ) )
    local real rCarrionLeech = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ) )
    local real rAngle = LoadReal( udg_AbilityTable, nTimerID, StringHash( "Angle" ) )
    local real rCurrentDur = LoadReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ) )
    local real rNewX
    local real rNewY
    local group gDamageGroup = CreateGroup()
    local boolexpr beGroupFilter = Condition( function Trig_Elemental_Carrion_Damage )

    set rNewX = GetUnitX( uDummyUnit ) + 12. * Cos( rAngle * bj_DEGTORAD )
    set rNewY = GetUnitY( uDummyUnit ) + 12. * Sin( rAngle * bj_DEGTORAD )

    if ( rCurrentDur < 1. ) then
        call SetUnitX( uDummyUnit, rNewX )
        call SetUnitY( uDummyUnit, rNewY )

        set udg_Damage = rCarrionDamage
        set udg_Caster = uCastUnit
        set udg_Dummy = uDummyUnit

        call GroupEnumUnitsInRange( gDamageGroup, rNewX, rNewY, 65 + 50 * rCurrentDur, beGroupFilter )

        set rCurrentDur = rCurrentDur + 0.02

        call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ), uDummyUnit )
        call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ), rCarrionDamage )
        call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ), rCarrionLeech )
        call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ), nCarrionCurrent )
        call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ), nCarrionTimer )
        call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ), rCurrentDur )
    else
        call KillUnit( uDummyUnit )
        call DestroyTimer( tSpellTimer )
        call DestroyGroup( gDamageGroup )
        call FlushChildHashtable( udg_AbilityTable, nTimerID )
    endif

    set tSpellTimer = null
    set uCastUnit = null
    set uDummyUnit = null
    set gDamageGroup = null
    set beGroupFilter = null
endfunction

function Trig_Elemental_Shockwave takes nothing returns nothing
endfunction

function Trig_Elemental_Frost takes nothing returns nothing
endfunction

function Trig_Elemental_Fire takes nothing returns nothing
endfunction

function Trig_Elemental_Wave_Actions takes nothing returns nothing
    local timer tSpellTimer = CreateTimer()
    local unit uCastUnit = GetTriggerUnit()
    local unit uDummyUnit
    local integer nTimerID = GetHandleId( tSpellTimer )
    local integer nAbilityLevel = GetUnitAbilityLevel( uCastUnit, 'A004' )
    local integer nWhatSpell = GetRandomInt( 1, 200 )
    local real rCurrentDur = 0.
    local real rTargetX = GetSpellTargetX()
    local real rTargetY = GetSpellTargetY()
    local real rCastX = GetUnitX( uCastUnit )
    local real rCastY = GetUnitY( uCastUnit )
    local real rAngle = bj_RADTODEG * Atan2( rTargetY - rCastY, rTargetX - rCastX )
    local real rCurrentDur = 0.
    local player plOwningPlayer = GetOwningPlayer( uCastUnit )

    local real rCarrionDamage = 150. * I2R( nAbilityLevel )
    local real rCarrionLeech = 25. * I2R( nAbilityLevel )
    local integer nCarrionCurrent = 0
    local integer nCarrionTimer = 4 + nAbilityLevel

    call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "Caster" ), uCastUnit )
    call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "Level" ), nAbilityLevel )
    call SaveReal( udg_AbilityTable, nTimerID, StringHash( "Angle" ), rAngle )
    call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CurrentDur" ), rCurrentDur )

    if ( nWhatSpell < 250 and nWhatSpell > 0 ) then
        set uDummyUnit = CreateUnit( plOwningPlayer, 'h002', rCastX, rCastY, rAngle )

        call SaveUnitHandle( udg_AbilityTable, nTimerID, StringHash( "CarrionDummy" ), uDummyUnit )
        call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionDamage" ), rCarrionDamage )
        call SaveReal( udg_AbilityTable, nTimerID, StringHash( "CarrionLeech" ), rCarrionLeech )
        call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionCurrent" ), nCarrionCurrent )
        call SaveInteger( udg_AbilityTable, nTimerID, StringHash( "CarrionMax" ), nCarrionTimer )

        call TimerStart( tSpellTimer, 0.02, true, function Trig_Elemental_Carrion )
    elseif ( nWhatSpell < 500 and nWhatSpell >= 250 ) then
    elseif ( nWhatSpell < 750 and nWhatSpell >= 500 ) then
    elseif ( nWhatSpell <= 1000 and nWhatSpell >= 750 ) then
    endif
endfunction

function StartTrigger_Elemental_Wave takes nothing returns nothing
    set gg_trg_Elemental_Wave = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Elemental_Wave, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Elemental_Wave, Condition( function Trig_Elemental_Wave_Conditions ) )
    call TriggerAddAction( gg_trg_Elemental_Wave, function Trig_Elemental_Wave_Actions )
endfunction

function InitTrig_Elemental_Wave takes nothing returns nothing
endfunction


The problem is that I don't know which spell to give the unit, and I want the buff to last for 10 seconds, so it has to be a spell with like no spell effect what so ever :confused:
 

Nevyll

New Member
Reaction score
1
Not at all, this is JASS, written this spell from scratch, why?

By the way, do you know any spells I could use that would prove useful? :D
 

Jesus4Lyf

Good Idea™
Reaction score
397
Use tornado slow aura. It has no icon, and adds a buff. To add its buff to a unit, add the ability. To remove it, remove the ability and the buff it places (or else the buff stricks around for a sec).

OT:
You will extend your lifespan by 20% if you get vJass and use SpellStruct/BuffStruct instead.
It has been a long time since I've seen code like that...
 

Viikuna

No Marlo no game.
Reaction score
265
Since wc3 buffs cant really be controlled, using some vJass buff system for that stuff is the most logical conclusion.


Also vJass is not really another languege. It just adds some stuff that Jass should have had in the first place.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top