Snippet AutocastOrderEvent

Azlier

Old World Ghost
Reaction score
461
This detects when you turn on or off autocast. You know, by right clicking the ability icon. Yep.

Two functions available to you:
JASS:
TriggerRegisterAutocastOnEvent takes trigger whichTrigger returns nothing
//Readies a trigger to fire when autocast is turned on.

TriggerRegisterAutocastOffEvent takes trigger whichTrigger returns nothing
//Same as above, but for when autocast is turned off.


Requires Event (but of course).

There are no configurables.
JASS:
library AutocastOrderEvent requires Event

globals
    private constant integer OFFSET = 0xD0000
    private integer array Data
    private Event On
    private Event Off
    private integer i
endglobals

function TriggerRegisterAutocastOnEvent takes trigger whichTrigger returns nothing
    call On.register(whichTrigger)
endfunction

function TriggerRegisterAutocastOffEvent takes trigger whichTrigger returns nothing
    call Off.register(whichTrigger)
endfunction

private function Fire takes nothing returns boolean
    set i = Data[GetIssuedOrderId() - OFFSET]
    if i == 1 then
        call On.fire()
    elseif i == 2 then
        call Off.fire()
    endif
    return false
endfunction

private function RegisterOrder takes integer i returns nothing
    set Data<i> = 1
    set Data[i + 1] = 2
endfunction

private struct Hack extends array

    static method onInit takes nothing returns nothing
        local trigger t = CreateTrigger()
        local integer i = 15
        loop
            call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_ORDER, null)
            exitwhen i == 0
            set i = i - 1
        endloop
        call TriggerAddCondition(t, Condition(function Fire))
    
        set On = Event.create()
        set Off = Event.create()
    
        //Register all autocast orders. Oh God.
        call RegisterOrder(0x060) //Heal
        call RegisterOrder(0x063) //Inner Fire
        call RegisterOrder(0x06C) //Slow
        call RegisterOrder(0x204) //Spell Steal
        call RegisterOrder(0x086) //Bloodlust
        call RegisterOrder(0x0F4) //Web
        call RegisterOrder(0x0DF) //Curse
        call RegisterOrder(0x0E6) //Raise Dead
        call RegisterOrder(0x242) //Essence of Blight
        call RegisterOrder(0x245) //Spirit Touch
        call RegisterOrder(0x1EA) //Frost Armor
        call RegisterOrder(0x0B6) //Faerie Fire
        call RegisterOrder(0x0A5) //Abolish Magic
        call RegisterOrder(0x0CE) //Searing Arrows
        call RegisterOrder(0x114) //Cold Arrows
        call RegisterOrder(0x27A) //Parasite
        call RegisterOrder(0x039) //Repair
        call RegisterOrder(0x0EB) //Restore
        call RegisterOrder(0x0C2) //Renew
        call RegisterOrder(0x0BE) //Recharge
        call RegisterOrder(0x248) //Carrion Beetles
        call RegisterOrder(0x262) //Black Arrow
        call RegisterOrder(0x23C) //Orb of Annihilation
        call RegisterOrder(0x053) //Get Corpse
        call RegisterOrder(0x049) //Kaboom!
        call RegisterOrder(0x11F) //Poison Arrows
        call RegisterOrder(0x2BF) //Incinerate Arrows...?
    endmethod
    
endstruct

endlibrary</i>


How to quickly fix an unresponsive autocast order:
1. Import the PrintOrders library into your map, and start then map.
2. Right-click the ability with the unresponsive Autocast order.
3. Some information should be printed on screen when you right-clicked the ability.
4. There should be a hexadecimal number that starts with 0xD0. Copy that number.
5. Paste the name of the unresponsive autocast order in this thread, and paste the number with it.
 

Romek

Super Moderator
Reaction score
963
Useful. :D

Maybe you could add a Register function which also takes the ID?
 

Azlier

Old World Ghost
Reaction score
461
That would pretty much defeat the purpose of it being generic and accepting any autocast order. If you need something specific, it's a very simple matter to craft the trigger yourself. With a single if block checking the order ID.
 

Kenny

Back for now.
Reaction score
202
I was just in the process of making one of these, seems you beat me too it. Nicely done. Seems pretty handy. :thup:
 

Romek

Super Moderator
Reaction score
963
> That would pretty much defeat the purpose of it being generic and accepting any autocast order.
Let me rephrase. In addition to the generic ones, adding a specific one would make things easier for the user.

> it's a very simple matter to craft the trigger yourself. With a single if block checking the order ID.
It's an even simpler matter to just register it specifically.

Well, it's your choice. I can't really force you to add a function like that. I'm just stating why it would be useful.
 

Azlier

Old World Ghost
Reaction score
461
I could do it if I create more triggers. However, I would need to spam Events if one needed to register more than one trigger to a single ID. Let me see what I can do.

EDIT: Hmm. This will be harder than I thought. The user could pull it off with a single if block using GetAutocastOrder, but I would need to attach to order ID's. Which means I need to wait for hashtables to become official :banghead:.
 

Romek

Super Moderator
Reaction score
963
> However, I would need to spam Events if one needed to register more than one trigger to a single ID. Let me see what I can do.
Then that person could just use the generic one.
Chances are, people using this even would need it for one specific ID.
 

Azlier

Old World Ghost
Reaction score
461
If I were to implement specific orders like that, I would need to attach to order ID's. Any ideas on how to do that?
 

Romek

Super Moderator
Reaction score
963
Hashtables?
You could probably just do a wrapper function you know. :p
 

Azlier

Old World Ghost
Reaction score
461
Yeah, and it would need to take a trigger. Then, I need to fire that trigger when the taken order is issued. Making me need to attach to that order. Looks like a bit much to lift a single if off of the user, and lose quite a bit of efficiency :nuts:.

>Hashtables?
Sure, once the patch becomes officially released and done.
 

Azlier

Old World Ghost
Reaction score
461
What actions and conditions? What are you talking about? This behaves exactly like a normal WC3 event, on the outside. Even the event response returns 0 when used somewhere incorrectly.
 

Azlier

Old World Ghost
Reaction score
461
You are free to make a wrapper for that, if you want. It's not my job to account for user laziness :p.

JASS:
function AutocastOrderOn takes code act, code cond returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterAutocastOnEvent(t)
    if act != null then
        call TriggerAddAction(t, act)
    endif
    if cond != null then
        call TriggerAddCondition(t, Condition(cond))
    endif
endfunction


EDIT: Ouch, just noticed something. A few abilities (very few) use un(abilityname) and (abilityname) for turning autocast on and off. Unfortunately, there is no sane way to detect those. Must update first post.
 

Azlier

Old World Ghost
Reaction score
461
Order ID's are either 0, or some very high number (past 50,000 if I remember). I'll go ahead and try some modulo. But I don't want to spam Events, sorreh.
 

Renendaru

(Evol)ution is nothing without love.
Reaction score
309
I was like, "Ooo, yay", but when I saw spells like searing arrows and other attack modify autocasts don't work I was annoyed. I needed the exact thing for it.
 

Jesus4Lyf

Good Idea™
Reaction score
397
I'm sure he can find a way around that.

And it's not spamming, Azlier. There's a strict limit to the number of order IDs available. ;) Not that Event spamming matters. They're just structs... lol

And you can just do it for IDs that are actually used. Y'know, if == 0, set to Event.create()... o.o
 

Romek

Super Moderator
Reaction score
963
Approved.
This is useful. :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    So what it really is me trying to implement some kind of better site navigation not change the whole theme of the site
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/

      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