• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Change inventory hotkeys (SOLVED)

Status
Not open for further replies.
Level 14
Joined
Feb 7, 2020
Messages
387
I was curious about this so gave it a shot in Lua. I was thinking it would be cool if you could do a substring method for a player to implement custom keys to use in the map (I didn't do that in this example but it was another reason to opt for coding it).

Came up with this experiment script which changes the hotkeys for items to ERDFCV:

Lua:
-- @pInt = player number
function InitializeHotkey(pInt)

    local keytrig = CreateTrigger()
    local unitcaster = udg_unit

    local func = function()
        local pressedkey = BlzGetTriggerPlayerKey()
        local item
        if (pressedkey == OSKEY_E) then
            print("key OSKEY_E found")
            item = UnitItemInSlot(unitcaster,0)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_R) then
            print("key OSKEY_R found")
            item = UnitItemInSlot(unitcaster,1)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_D) then
            print("key OSKEY_D found")
            item = UnitItemInSlot(unitcaster,2)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_F) then
            print("key OSKEY_F found")
            item = UnitItemInSlot(unitcaster,3)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_C) then
            print("key OSKEY_C found")
            item = UnitItemInSlot(unitcaster,4)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_V) then
            print("key OSKEY_V found")
            item = UnitItemInSlot(unitcaster,5)
            UnitUseItem(unitcaster,item)
        end
    end

    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_E, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_R, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_D, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_F, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_C, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_V, 0, false)

    TriggerAddAction(keytrig,func)
    TriggerAddCondition(keytrig, Filter(function() return not IsUnitType(unitcaster, UNIT_TYPE_DEAD) end))

    print("key init success")

end
You would have to solution for any conditional things such as unit selected, use item on point, etc. Not sure it'd work for everything without some tinkering.

edit: missed your note on game version; can't remember if 1.31 has all of these new natives.
 

Attachments

  • keypress_test.w3m
    12.8 KB · Views: 46
Last edited:
Level 7
Joined
Sep 11, 2013
Messages
220
I was curious about this so gave it a shot in Lua. I was thinking it would be cool if you could do a substring method for a player to implement custom keys to use in the map (I didn't do that in this example but it was another reason to opt for coding it).

Came up with this experiment script which changes the hotkeys for items to ERDFCV:

Lua:
-- @pInt = player number
function InitializeHotkey(pInt)

    local keytrig = CreateTrigger()
    local unitcaster = udg_unit

    local func = function()
        local pressedkey = BlzGetTriggerPlayerKey()
        local item
        if (pressedkey == OSKEY_E) then
            print("key OSKEY_E found")
            item = UnitItemInSlot(unitcaster,0)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_R) then
            print("key OSKEY_R found")
            item = UnitItemInSlot(unitcaster,1)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_D) then
            print("key OSKEY_D found")
            item = UnitItemInSlot(unitcaster,2)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_F) then
            print("key OSKEY_F found")
            item = UnitItemInSlot(unitcaster,3)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_C) then
            print("key OSKEY_C found")
            item = UnitItemInSlot(unitcaster,4)
            UnitUseItem(unitcaster,item)
        elseif (pressedkey == OSKEY_V) then
            print("key OSKEY_V found")
            item = UnitItemInSlot(unitcaster,5)
            UnitUseItem(unitcaster,item)
        end
    end

    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_E, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_R, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_D, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_F, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_C, 0, false)
    BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_V, 0, false)

    TriggerAddAction(keytrig,func)
    TriggerAddCondition(keytrig, Filter(function() return not IsUnitType(unitcaster, UNIT_TYPE_DEAD) end))

    print("key init success")

end
You would have to solution for any conditional things such as unit selected, use item on point, etc. Not sure it'd work for everything without some tinkering.

edit: missed your note on game version; can't remember if 1.31 has all of these new natives.
Thanks for responding. Is it possible to do this with Jass? I'm only good with GUI but I can do some jass with the Custom Script trigger action.
 
Level 14
Joined
Feb 7, 2020
Messages
387
Thanks for responding. Is it possible to do this with Jass? I'm only good with GUI but I can do some jass with the Custom Script trigger action.
Had to shotgun learn JASS but got it to work. :) The unit variable is set lazily, didn't devote time to figuring all of that out.
JASS:
function KeyPressActions takes nothing returns nothing
    local oskeytype pressedkey = BlzGetTriggerPlayerKey()
    local item useitem
    if (pressedkey == OSKEY_E) then
        set useitem = UnitItemInSlot(udg_unit,0)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_R) then
        set useitem = UnitItemInSlot(udg_unit,1)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_D) then
        set useitem = UnitItemInSlot(udg_unit,2)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_F) then
        set useitem = UnitItemInSlot(udg_unit,3)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_C) then
        set useitem = UnitItemInSlot(udg_unit,4)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_V) then
        set useitem = UnitItemInSlot(udg_unit,5)
        call UnitUseItem(udg_unit,useitem)
    endif
endfunction

// @pInt = player number
function InitializeHotkey takes integer pInt returns nothing

    local trigger keytrig = CreateTrigger()

    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_E, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_R, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_D, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_F, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_C, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_V, 0, false)

    //call TriggerAddCondition(keytrig, null)
    call TriggerAddAction(keytrig, function KeyPressActions)

endfunction
 

Attachments

  • keypress_test_v2.w3m
    13.1 KB · Views: 55
Level 7
Joined
Sep 11, 2013
Messages
220
Had to shotgun learn JASS but got it to work. :) The unit variable is set lazily, didn't devote time to figuring all of that out.
JASS:
function KeyPressActions takes nothing returns nothing
    local oskeytype pressedkey = BlzGetTriggerPlayerKey()
    local item useitem
    if (pressedkey == OSKEY_E) then
        set useitem = UnitItemInSlot(udg_unit,0)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_R) then
        set useitem = UnitItemInSlot(udg_unit,1)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_D) then
        set useitem = UnitItemInSlot(udg_unit,2)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_F) then
        set useitem = UnitItemInSlot(udg_unit,3)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_C) then
        set useitem = UnitItemInSlot(udg_unit,4)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_V) then
        set useitem = UnitItemInSlot(udg_unit,5)
        call UnitUseItem(udg_unit,useitem)
    endif
endfunction

// @pInt = player number
function InitializeHotkey takes integer pInt returns nothing

    local trigger keytrig = CreateTrigger()

    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_E, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_R, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_D, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_F, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_C, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_V, 0, false)

    //call TriggerAddCondition(keytrig, null)
    call TriggerAddAction(keytrig, function KeyPressActions)

endfunction
Thanks so much dude! I'm gonna try this out :D
 
Level 7
Joined
Sep 11, 2013
Messages
220
Had to shotgun learn JASS but got it to work. :) The unit variable is set lazily, didn't devote time to figuring all of that out.
JASS:
function KeyPressActions takes nothing returns nothing
    local oskeytype pressedkey = BlzGetTriggerPlayerKey()
    local item useitem
    if (pressedkey == OSKEY_E) then
        set useitem = UnitItemInSlot(udg_unit,0)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_R) then
        set useitem = UnitItemInSlot(udg_unit,1)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_D) then
        set useitem = UnitItemInSlot(udg_unit,2)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_F) then
        set useitem = UnitItemInSlot(udg_unit,3)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_C) then
        set useitem = UnitItemInSlot(udg_unit,4)
        call UnitUseItem(udg_unit,useitem)
    elseif (pressedkey == OSKEY_V) then
        set useitem = UnitItemInSlot(udg_unit,5)
        call UnitUseItem(udg_unit,useitem)
    endif
endfunction

// @pInt = player number
function InitializeHotkey takes integer pInt returns nothing

    local trigger keytrig = CreateTrigger()

    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_E, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_R, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_D, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_F, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_C, 0, false)
    call BlzTriggerRegisterPlayerKeyEvent(keytrig, Player(pInt-1), OSKEY_V, 0, false)

    //call TriggerAddCondition(keytrig, null)
    call TriggerAddAction(keytrig, function KeyPressActions)

endfunction
Oh btw is there a way to increase a multiboard Icon's size? or display an image in the multiboard?
 
Status
Not open for further replies.
Top