Spell Targeting Problems

Ellimistrox

New Member
Reaction score
10
Ok, I'm pretty new to Jass, only started recently, and mainly self taught. I've made a spell in GUI, Static Electricity, then tried converting it to Jass, filling with locals where required and removed as many BJ's as I could. However No matter what I seem to do when in Jass it hits only one unit, dealing damage and stunning, whereas it is meant to hit one in five units. (Used random integer condition, integer is set between 1-100, if equal to or below 20 the unit is stunned and damaged for 10 times the current mana of the caster.)

Also it IS meant to remove all mana from the unit.

PS It DID work in GUI form. :banghead:

JASS:
function Trig_Static_Electricity_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A005'   
endfunction

function Trig_Static_Electricity_Func001Func001Func004C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 100) <= 20 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Static_Electricity_Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
        return false
    endif
    if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true ) ) then
        return false
    endif
    if ( not ( IsUnitAliveBJ(GetEnumUnit()) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Static_Electricity_Func001A takes nothing returns nothing
    
  local unit u = GetSpellAbilityUnit()
  local player p = GetOwningPlayer(u)
  local real x
  local real y
  local unit e
  local unit d
  local real r = ( GetUnitStateSwap(UNIT_STATE_MANA, GetSpellAbilityUnit()) * 10.00 )
  
    
    if ( Trig_Static_Electricity_Func001Func001C() ) then
        if ( Trig_Static_Electricity_Func001Func001Func004C() ) then
            set e = GetEnumUnit()
            set x = GetUnitX(e)
            set y = GetUnitY(e)
            set d = CreateUnit( p, 'h006', x, y, bj_UNIT_FACING )
            call UnitAddAbility( d, 'A006' )
            call IssueTargetOrder( d, "thunderbolt", e )
            call UnitApplyTimedLife( d, 'BTLF', 0.50 )
            call UnitDamageTarget( u, e, r, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
            
        else
        endif
        
    else
    endif
    
endfunction

function Trig_Static_Electricity_Actions takes nothing returns nothing

    local group g = GetUnitsInRectAll(GetEntireMapRect())
    
    call ForGroup(g, function Trig_Static_Electricity_Func001A )
    call SetUnitManaPercentBJ( GetSpellAbilityUnit(), 0.00 )
    
    call PolledWait(2.50)
    
    call DestroyGroup(g)
endfunction

function InitTrig_Static_Electricity takes nothing returns nothing
    set gg_trg_Static_Electricity = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Static_Electricity, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Static_Electricity, Condition( function Trig_Static_Electricity_Conditions ) )
    call TriggerAddAction( gg_trg_Static_Electricity, function Trig_Static_Electricity_Actions )
endfunction
 

cleeezzz

The Undead Ranger.
Reaction score
268
JASS:
scope Spell initializer Init

globals
    unit Caster
endglobals

private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A005'   
endfunction

private function Shock takes nothing returns nothing
    
  local unit u = Caster
  local player p = GetOwningPlayer(u)
  local real x
  local real y
  local unit e
  local unit d
  local real r = GetUnitState(u, UNIT_STATE_MANA) * 10.00 
    
  if IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false and IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(u)) == true and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) > .405 then
        if GetRandomInt(1, 100) <= 20 then
            set e = GetEnumUnit()
            set x = GetUnitX(e)
            set y = GetUnitY(e)
            set d = CreateUnit( p, 'h006', x, y, bj_UNIT_FACING )
            call UnitAddAbility( d, 'A006' )
            call IssueTargetOrder( d, "thunderbolt", e )
            call UnitApplyTimedLife( d, 'BTLF', 0.50 )
            call UnitDamageTarget( u, e, r, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
        endif
    endif 
endfunction

private function Actions takes nothing returns nothing
    local group g = GetUnitsInRectAll(GetEntireMapRect())
    set Caster = GetTriggerUnit()
    call ForGroup(g, function Shock )
    call SetUnitManaPercentBJ( GetSpellAbilityUnit(), 0.00 )
    call PolledWait(2.50)
    call DestroyGroup(g)
endfunction

private function Init takes nothing returns nothing
    local trigger trig = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( trig, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( trig, Condition( function Conditions ) )
    call TriggerAddAction( trig, function Actions )
endfunction

endscope

try that, you need newgen btw

(I think your problem was trying to use GetSpellAbilityUnit() in the ForGroup loop, but since the ForGroup is a completely separate function, it doesn't carry over, im a bit rusty so im not sure)
 

saw792

Is known to say things. That is all.
Reaction score
280
Name the scope, too. And add the initialiser bit.
 

Squll2

je'ne sais pas
Reaction score
76
OK first off, hes obviously programming in normal jass, why the hell would u give a Vjass answer? thats just stupid, he wants to learn not have you blast some code in his face and make him go dl some other program that he might not even know about?

THINK people, and Globals? from that looks of it this guy wants the spell to be MUI otherwise he would have used globals himself.

________

Other then that, im not really sure what the problem is with the code, or how its a code in the first place :( its not really making sense to me right now, but its still early and im not awake yet :p
 

cleeezzz

The Undead Ranger.
Reaction score
268
its still mui.. just cuz it contains a global doesn't mean its not mui, nothing in the code uses the global AFTER the wait 2 seconds so its fine.

and i dont know normal jass so i dont use it, i learned vjass from the start

and its been awhile so yea i forgot to name the scope

JASS:
scope Spell initializer Init


and newgen is like a must for map makers, even if you dont use jass
 

Squll2

je'ne sais pas
Reaction score
76
Ok i Apologize, long time since i Jassed = Me thinking all globals mean non MUI :p
 
General chit-chat
Help Users

      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