Perfect IsUnitAlive

GoGo-Boy

You can change this now in User CP
Reaction score
40
So do you think it is speed-wise better to use UnitAlive() instead of GetWidgetLife()>=4.05?
 

Komaqtion

You can change this now in User CP.
Reaction score
469
I just did some minor testing on this, and it doesn't seem to work :(

This actually fatals, but I've discovered that it's the "out-commented" lines which causes it:

JASS:
library TestNatives initializer Init

    private function Actions takes nothing returns boolean
        call DisplayText( 0, "Hellu !" )
        
        if UnitAlive( gg_unit_Hpal_0003 ) then
            call DisplayText( 0, "He's breathing !" )
        endif
        
        /*if UnitInvis( gg_unit_Hpal_0003 ) != true then
            call DisplayText( 0, "I can see him !" )
        endif*/
        
        call DisplayText( 0, I2S( GetHeroId() ) )
        
        call DisplayTextI( 0, "Huh !", 123 )
        
        return false
    endfunction
        

    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        
        call TriggerRegisterTimerEvent( t, 0.00, false )
        
        call TriggerAddCondition( t, Condition( function Actions ) )
        
    endfunction
    
endlibrary


But as I said, this doesn't display anything, or isn't that what "DisplayText" is supposed to do ? :S

(I'll now try it with "DisplayTextToPlayer" instead ;))
 

Azlier

Old World Ghost
Reaction score
461
UnitInvis crashes and burns. For some reason. The DisplayText things don't work at all. Like I said, only a handful work.

>So do you think it is speed-wise better to use UnitAlive() instead of GetWidgetLife()>=4.05?

Possibly. I think that it draws upon some internal boolean that Warcraft 3 itself uses to know that units are dead. That would make it faster.
 

Komaqtion

You can change this now in User CP.
Reaction score
469
I've also discovered that this crashes:
JASS:


And:
JASS:
call DisplayTextToPlayer( Player( 0 ), 0.0, 0.0, I2S( GetUnitCount( 'hpea' ) ) )


;)

And also, and this is quite useful I'd believe, this will give you the last built structure of a player (Though, don't know if it'll desync :S But wouldn't think so ;)):
JASS:
    private function GetLastStructure takes player p returns unit
        local unit u
    
        if GetLocalPlayer() == p then
            set u = GetBuilding( p )
        endif
        
        return u
    endfunction


Try it out ! :D
 

Azlier

Old World Ghost
Reaction score
461
Are you sure that that won't desync if used online in combination with something else?

That also leaks a unit handle id. :p

GetPlayerUnitCountOfTypeOrWhatever works fine, and I found a perfect use for it, since it doesn't count dead units.
 

Komaqtion

You can change this now in User CP.
Reaction score
469
Are you sure that that won't desync if used online in combination with something else?

Nah, but why would it ? :S
It's not like it'll change anything right ? :S

But please, if someone wants to test it then tell me :D

JASS:
That also leaks a unit handle id. <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite7" alt=":p" title="Stick Out Tongue    :p" loading="lazy" data-shortname=":p" />


Yeah yeah... XD
Can't be helped :p (Right ? :S)

JASS:
GetPlayerUnitCountOfTypeOrWhatever works fine, and I found a perfect use for it, since it doesn&#039;t count dead units.


Yeah, I meant GetUnitType will crash, not GetPlayeRUnitTypeCount (As it's called :p) :D
 

quraji

zap
Reaction score
144
Nah, but why would it ? :S
It's not like it'll change anything right ? :S

If u is null for everyone but one player, then you kill u, what do you think will happen :p
Desync... I guess you could use it with select unit or something.

Also, GetUnitXCost crash when you use them on heroes, I found that out when I wrote my CWAL thingy.
 

Azlier

Old World Ghost
Reaction score
461
>Also, GetUnitXCost crash when you use them on heroes

Yes, I know. Forgot to mention that.

Probably has to do with how heroes cost more the higher the tier you get them in.
 

Komaqtion

You can change this now in User CP.
Reaction score
469
If u is null for everyone but one player, then you kill u, what do you think will happen :p
Desync... I guess you could use it with select unit or something.

Well, might there be a way to prevent it ? :S
 

Jesus4Lyf

Good Idea™
Reaction score
397
And also, and this is quite useful I'd believe, this will give you the last built structure of a player (Though, don't know if it'll desync :S But wouldn't think so ;)):
Komaqtion, 100% chance that will desynch (on the condition it works at all).
You are returning a different value to each player.
 

Azlier

Old World Ghost
Reaction score
461
Yeah. Don't use that native. There's a better way by using the events Blizzard gave us in common.j. :p
 

LearningCode

New Member
Reaction score
24
Is this a momentous event for JASS coding? xD

"The discovery of new natives found in the ancient, forgotten civilisation that is the Common.ai"
 

Jesus4Lyf

Good Idea™
Reaction score
397
Is this a momentous event for JASS coding? xD

"The discovery of new natives found in the ancient, forgotten civilisation that is the Common.ai"
XD
Well, Azlier and the crazies like Nestharus and I have known about Common.ai natives for some time, but this is like... really useful. Simply because we had a discussion about how nothing works.
PS. Does this detect a unit with 5 health and no dead status as dead, if it is?
 

Azlier

Old World Ghost
Reaction score
461
In the first post, I already stated that this detects dead units with increased health (AKA, above 1) health as dead.
 

Jesus4Lyf

Good Idea™
Reaction score
397
PS. Does this detect a unit with 5 health and no dead status as dead, if it is?
That's why I had to ask.
JASS:
function SchrodingersCat takes nothing returns unit
    local unit u=CreateUnit(Player(15),&#039;hfoo&#039;,0,0,0)
    call SetWidgetLife(u,0)
    call SetWidgetLife(u,9001)
    call UnitRemoveType(u,UNIT_TYPE_DEAD)
    return u
endfunction
function Test takes nothing returns nothing
    if UnitAlive(SchrodingersCat()) then
        call BJDebugMsg(&quot;Alive&quot;)
    else
        call BJDebugMsg(&quot;Dead&quot;)
    endif
endfunction

What's it return?
Edit:
And what's this return?
JASS:
function HiddenDragon takes nothing returns unit
    local unit u=CreateUnit(Player(15),&#039;hpea&#039;,0,0,0)
    call ShowUnit(u,false)
    return u
endfunction
function Test takes nothing returns nothing
    if UnitAlive(HiddenDragon()) then
        call BJDebugMsg(&quot;Alive&quot;)
    else
        call BJDebugMsg(&quot;Dead&quot;)
    endif
endfunction
 
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