HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Unitgroup filtering issue

03-23-2007, 02:47 AM#1
moyack
Hi guys:

I'm working with a script which classify the units owned by a player in groups.

There are three classifications, land units, fliers and Naval units. Workers and buildings can't be part of this groups.

The Air units are chosen right by the script, but the land units are not selected.

This is the code:

Collapse JASS:
function Attacking_Script_IsWarrior takes unit u returns boolean
    local boolean b1 = IsUnitType(u, UNIT_TYPE_PEON) == false
    local boolean b2 = GetUnitLevel(u) > 0
    return b1 and b2
endfunction

function Attacking_Script_IsFlier takes unit u returns boolean
    return IsUnitType(u, UNIT_TYPE_FLYING) == false
endfunction

function Attacking_Script_IsShip takes unit u returns boolean
    local integer uid = GetUnitTypeId(u)
    local boolean b1 = uid == 'o005' or uid == 'n00M' or uid == 'ojgn' or uid == 'odes'
    set b1 = b1 or uid == 'h001' or uid == 'N00O' or uid == 'hdes' or uid == 'hbsh'
    return b1
endfunction

function Attacking_Script_IsTransShip takes unit u returns boolean
    local integer uid = GetUnitTypeId(u)
    return uid == 'obot' or uid == 'hbot'
endfunction

function Attacking_Script_IsLand takes unit u returns boolean
    local boolean b1 = not Attacking_Script_IsFlier(u)
    local boolean b2 = not Attacking_Script_IsShip(u)
    local boolean b3 = not Attacking_Script_IsTransShip(u)
    local boolean b4 = Attacking_Script_IsWarrior(u)
    return b1 and b2 and b3 and b4
endfunction

function Attacking_Script_IsAirExpr takes nothing returns boolean
    return Attacking_Script_IsFlier(GetFilterUnit())
endfunction

function Attacking_Script_IsNavalExpr takes nothing returns boolean
    return Attacking_Script_IsShip(GetFilterUnit())
endfunction

function Attacking_Script_IsTransExpr takes nothing returns boolean
    return Attacking_Script_IsTransShip(GetFilterUnit())
endfunction

function Attacking_Script_IsLandExpr takes nothing returns boolean
    return Attacking_Script_IsLand(GetFilterUnit())
endfunction

I've tried everything, and I've checked this many times without finding anything wrong.

Is there a better way to do the filtering?? Am I sleepy and I'm not seeing something?? Any help will be really appreciated.
03-23-2007, 03:19 AM#2
Earth-Fury
Collapse JASS:
function Attacking_Script_IsWarrior takes unit u returns boolean
    return (IsUnitType(u, UNIT_TYPE_PEON) == false) and (GetUnitLevel(u) > 0)
endfunction
Most of your functions declare allot of un-needed variables which makes them too much of a pain for me to read. Thats about as far as i got, its 11:18. I'll edit with more in the morning if the forums are inactive tonight.
03-23-2007, 05:13 PM#3
moyack
Ok... Writing in the usual way (I did it in that way for debugging by reading)

Collapse JASS:
function Attacking_Script_IsWarrior takes unit u returns boolean
    return IsUnitType(u, UNIT_TYPE_PEON) == false and GetUnitLevel(u) > 0
endfunction

function Attacking_Script_IsFlier takes unit u returns boolean
    return IsUnitType(u, UNIT_TYPE_FLYING) == false
endfunction

function Attacking_Script_IsShip takes unit u returns boolean
    return uid == 'o005' or uid == 'n00M' or uid == 'ojgn' or uid == 'odes' or uid == 'h001' or uid == 'N00O' or uid == 'hdes' or uid == 'hbsh'
endfunction

function Attacking_Script_IsTransShip takes unit u returns boolean
    return GetUnitTypeId(u) == 'obot' or GetUnitTypeId(u) == 'hbot'
endfunction

function Attacking_Script_IsLand takes unit u returns boolean
    return not Attacking_Script_IsFlier(u) and not Attacking_Script_IsShip(u) and not Attacking_Script_IsTransShip(u) and Attacking_Script_IsWarrior(u)
endfunction

function Attacking_Script_IsAirExpr takes nothing returns boolean
    return Attacking_Script_IsFlier(GetFilterUnit())
endfunction

function Attacking_Script_IsNavalExpr takes nothing returns boolean
    return Attacking_Script_IsShip(GetFilterUnit())
endfunction

function Attacking_Script_IsTransExpr takes nothing returns boolean
    return Attacking_Script_IsTransShip(GetFilterUnit())
endfunction

function Attacking_Script_IsLandExpr takes nothing returns boolean
    return Attacking_Script_IsLand(GetFilterUnit())
endfunction

The first functions take arguments because I use them in other functions and with that I optimize the system. I'm thinking the problem is in the UNIT_TYPE_PEON part, but in theory it should work.
03-23-2007, 08:29 PM#4
blu_da_noob
Attacking_Script_IsFlier would return true for ground units and false for fliers. And then in your IsLand function you not it. So IsLand would never return true for land units. Change Attacking_Script_IsFlier to == true.
03-23-2007, 08:34 PM#5
moyack
Let me increase your rep a little bit. Thanks!!!!

(I should try not to work in JASS so late in the night)