| 03-23-2007, 02:47 AM | #1 |
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: 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 |
JASS:function Attacking_Script_IsWarrior takes unit u returns boolean return (IsUnitType(u, UNIT_TYPE_PEON) == false) and (GetUnitLevel(u) > 0) endfunction |
| 03-23-2007, 05:13 PM | #3 |
Ok... Writing in the usual way (I did it in that way for debugging by reading) 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 |
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 |
Let me increase your rep a little bit. Thanks!!!! (I should try not to work in JASS so late in the night) |
