Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Prevent Repeat Action Button Event

I've created a mining system (evented), and what's happening is people are putting weighted things on their enter button and are leaving their game on for hours at a time, looping the mining.
The only reason this is an issue is because my game is Online.

Is there anything I can do withing my event like an additional conditional branch to only run if the Input::C is pressed and released?
I've looked through the Help files and theres nothing there.

PS: Is this a scripting or eventing issue? I'm not sure where to put it XD
 
With trigger?, you can just sit there holding down the enter button, and it will repeat. I want it to NOT pickup the fact that its held down and deny any additional repeats after 1 has gone by without taking your finger off of the enter button.
Input.trigger? is the same as action button, anyway.
It also messes up a fair bit when use with action button.

What would help is if there's an Input.released?. I need the action button event to only run once, even if the button is held down.
 
Well, I don't Input.release? will work because in the Help File it only shows Input.trigger?, Input.press?, and Input.repeat?

However, Input.trigger? is actually what I think you're looking for as Regi said. Do you want it so that the player can't just hold it down or do you want it so that the player can only mine once and that's it. I just tested it out, trigger? only counts as one after you release your finger.

Also, if you don't want to use the action button, just do something like: Input.trigger?(Input::R)
 
Well, I tried making the event Event Touch, and have a conditional branch within it to mine, but it still allowed me to hold it down.
I had in a conditional branch: Input.trigger?(Input::Letters["S"])
I'm using the input script by CyberSam, edited by Astromech and MrMo.
The syntax there is fine.
But yeah, it still repeats.
Are there any edits that can be made to Game_Character/Game_Event to change this?
 
Howdy Zen, I'm not sure how to achieve exactly what you want. But maybe you could make it so each mining node (I'm guessing there nodes?) Has a set limit it can be mined, once that mine has been depleted put a timer on that event to say when it will come back? I know this isn't what you want exactly. But there is always the option of trying different things =)
 
It already has a timer (the event will change graphic as the ore is taken) It has variables to randomise the time to mine depending on the pickaxe, and all of that stuff. It does dissapear, should you manage to get ore (you can't mine it again until the timer has ended) But people go off and do other stuff for hours at a time (my friends do, lol) while its still sitting there, and as the ore re-appears, it starts mining it again instantly.

I'm looking for a method of when a event is activated through action button, it will run the event once, and not multiple times. Try making an event (action button), and make it do something like show animation. Hold down your enter button, and watch it repeat. I'm looking for a way to prevent this. So you can't just leave the enter button pushed down and repeat the event, but it rather ignores it and only does whatever it was meant to do once.

Make sense? (sorry about the wall of text)
 

Zeriab

Sponsor

That .trigger? repeats probably means there is a bug in your input script.
Anyway, you can either use the Button Input Processing if available or you can event it as checking for the button being pressed and then have a loop with a wait and a conditional branch checking if that button is being pressed. Break the loop in the Else branch.

*hugs*
 
This here is the input script I use:
Code:
#===============================================================================

# ** Input Script v2 - This script was first created by Cybersam and she 

#                         deserves most of the credit, all I did was add a few 

#                         functions. (Astro_Mech says)

#-------------------------------------------------------------------------------

# Author    Cybersam

# Version   2.0

# Date      11-04-06

# Edit      Astro_mech and Mr.Mo

#===============================================================================

SDK.log("Input", "Astro_mech and Mr.Mo", "2.0", " 13-04-06")

#-------------------------------------------------------------------------------

# Begin SDK Enabled Check

#-------------------------------------------------------------------------------

if SDK.state('Input')

module Input

  #--------------------------------------------------------------------------

  # * Variable Setup

  #-------------------------------------------------------------------------- 

    @keys = []

    @pressed = []

    Mouse_Left = 1

    Mouse_Right = 2

    Mouse_Middle = 4

    Back= 8

    Tab = 9

    Enter = 13

    Shift = 16

    Ctrl = 17

    Alt = 18

    Esc = 0x1B

    LT = 0x25

    UPs = 0x26  

    RT = 0x27 

    DN = 0x28

    Space = 32

    Numberkeys = {}

    Numberkeys[0] = 48        # => 0

    Numberkeys[1] = 49        # => 1

    Numberkeys[2] = 50        # => 2

    Numberkeys[3] = 51        # => 3

    Numberkeys[4] = 52        # => 4

    Numberkeys[5] = 53        # => 5

    Numberkeys[6] = 54        # => 6

    Numberkeys[7] = 55        # => 7

    Numberkeys[8] = 56        # => 8

    Numberkeys[9] = 57        # => 9

    Numberpad = {}

    Numberpad[0] = 45

    Numberpad[1] = 35

    Numberpad[2] = 40

    Numberpad[3] = 34

    Numberpad[4] = 37

    Numberpad[5] = 12

    Numberpad[6] = 39

    Numberpad[7] = 36

    Numberpad[8] = 38

    Numberpad[9] = 33

    Letters = {}

    Letters["A"] = 65

    Letters["B"] = 66

    Letters["C"] = 67

    Letters["D"] = 68

    Letters["E"] = 69

    Letters["F"] = 70

    Letters["G"] = 71

    Letters["H"] = 72

    Letters["I"] = 73

    Letters["J"] = 74

    Letters["K"] = 75

    Letters["L"] = 76

    Letters["M"] = 77

    Letters["N"] = 78

    Letters["O"] = 79

    Letters["P"] = 80

    Letters["Q"] = 81

    Letters["R"] = 82

    Letters["S"] = 83

    Letters["T"] = 84

    Letters["U"] = 85

    Letters["V"] = 86

    Letters["W"] = 87

    Letters["X"] = 88

    Letters["Y"] = 89

    Letters["Z"] = 90

    

    Equ={} # Shift Value for num US

    Equ[0]=')'    # FR: à

    Equ[1]='!'    # FR: &

    Equ[2]='@'    # FR: é

    Equ[3]='#'    # FR: "

    Equ[4]='$'    # FR: '

    Equ[5]='%'    # FR: (

    Equ[6]='^'    # FR: -

    Equ[7]='&'    # FR: è

    Equ[8]='*'    # FR: _

    Equ[9]='('    # FR: ç

    

    Carac = {}

    Carac[0] = 48        # => 0

    Carac[1] = 49        # => 1

    Carac[2] = 50        # => 2

    Carac[3] = 51        # => 3

    Carac[4] = 52        # => 4

    Carac[5] = 53        # => 5

    Carac[6] = 54        # => 6

    Carac[7] = 55        # => 7

    Carac[8] = 56        # => 8

    Carac[9] = 57        # => 9

    Carac["A"] = 65

    Carac["B"] = 66

    Carac["C"] = 67

    Carac["D"] = 68

    Carac["E"] = 69

    Carac["F"] = 70

    Carac["G"] = 71

    Carac["H"] = 72

    Carac["I"] = 73

    Carac["J"] = 74

    Carac["K"] = 75

    Carac["L"] = 76

    Carac["M"] = 77

    Carac["N"] = 78

    Carac["O"] = 79

    Carac["P"] = 80

    Carac["Q"] = 81

    Carac["R"] = 82

    Carac["S"] = 83

    Carac["T"] = 84

    Carac["U"] = 85

    Carac["V"] = 86

    Carac["W"] = 87

    Carac["X"] = 88

    Carac["Y"] = 89

    Carac["Z"] = 90

    

    Fkeys = {}

    Fkeys[1] = 112

    Fkeys[2] = 113

    Fkeys[3] = 114

    Fkeys[4] = 115

    Fkeys[5] = 116

    Fkeys[6] = 117

    Fkeys[7] = 118

    Fkeys[8] = 119

    Fkeys[9] = 120

    Fkeys[10] = 121

    Fkeys[11] = 122

    Fkeys[12] = 123

    Collon = 186        # => \ |

    Equal = 187         # => = +

    Comma = 188         # => , <

    Underscore = 189    # => - _

    Dot = 190           # => . >

    Backslash = 191     # => / ?

    Lb = 219

    Rb = 221

    Quote = 222         # => '"

    

    Lb = 219            # US: [{  FR: )°

    Rb = 221            # US: ]}  FR: ^¨

    E2 = 226            #         FR: <>

    DC = 220            # US: \|  FR: *µ

    DF = 223            #         FR: !§

    C0 = 192            # US: `~  FR: ù%

    

    State = Win32API.new('user32','GetKeyState',['i'],'i')

    Key = Win32API.new('user32','GetAsyncKeyState',['i'],'i')

#-------------------------------------------------------------------------------

    USED_KEYS = [Mouse_Left, Mouse_Right, Mouse_Middle] 

#-------------------------------------------------------------------------------

  module_function

    #--------------------------------------------------------------------------  

    def Input.getstate(key)

      return true unless State.call(key).between?(0, 1)

      return false

    end

    #--------------------------------------------------------------------------

    def Input.testkey(key)

      Key.call(key) & 0x01 == 1

    end

    #--------------------------------------------------------------------------

    def Input.update

      $mouse.update

      @keys = []

      @keys.push(Input::Mouse_Left) if Input.testkey(Input::Mouse_Left)

      @keys.push(Input::Mouse_Right) if Input.testkey(Input::Mouse_Right)

      @keys.push(Input::Back) if Input.testkey(Input::Back)

      @keys.push(Input::Tab) if Input.testkey(Input::Tab)

      @keys.push(Input::Enter) if Input.testkey(Input::Enter)

      @keys.push(Input::Shift) if Input.testkey(Input::Shift)

      @keys.push(Input::Ctrl) if Input.testkey(Input::Ctrl)

      @keys.push(Input::Alt) if Input.testkey(Input::Alt)

      @keys.push(Input::Esc) if Input.testkey(Input::Esc)

      for key in Input::Letters.values

        @keys.push(key) if Input.testkey(key)

      end

      for key in Input::Numberkeys.values

        @keys.push(key) if Input.testkey(key)

      end

      for key in Input::Numberpad.values

        @keys.push(key) if Input.testkey(key)

      end

      for key in Input::Fkeys.values

        @keys.push(key) if Input.testkey(key)

      end

      @keys.push(Input::Collon) if Input.testkey(Input::Collon)

      @keys.push(Input::Equal) if Input.testkey(Input::Equal)

      @keys.push(Input::Comma) if Input.testkey(Input::Comma)

      @keys.push(Input::Underscore) if Input.testkey(Input::Underscore)

      @keys.push(Input::Dot) if Input.testkey(Input::Dot)

      @keys.push(Input::Backslash) if Input.testkey(Input::Backslash)

      @keys.push(Input::Lb) if Input.testkey(Input::Lb)

      @keys.push(Input::Rb) if Input.testkey(Input::Rb)

      @keys.push(Input::Quote) if Input.testkey(Input::Quote)

      @keys.push(Input::Space) if Input.testkey(Input::Space)

      @keys.push(Input::LT) if Input.testkey(Input::LT)

      @keys.push(Input::UPs) if Input.testkey(Input::UPs)

      @keys.push(Input::RT) if Input.testkey(Input::RT)

      @keys.push(Input::DN) if Input.testkey(Input::DN)

      @pressed = []

      @pressed.push(Input::Space) if Input.getstate(Input::Space)

      @pressed.push(Input::Mouse_Left) if Input.getstate(Input::Mouse_Left)

      @pressed.push(Input::Mouse_Right) if Input.getstate(Input::Mouse_Right)

      @pressed.push(Input::Back) if Input.getstate(Input::Back)

      @pressed.push(Input::Tab) if Input.getstate(Input::Tab)

      @pressed.push(Input::Enter) if Input.getstate(Input::Enter)

      @pressed.push(Input::Shift) if Input.getstate(Input::Shift)

      @pressed.push(Input::Ctrl) if Input.getstate(Input::Ctrl)

      @pressed.push(Input::Alt) if Input.getstate(Input::Alt)

      @pressed.push(Input::Esc) if Input.getstate(Input::Esc)

      @pressed.push(Input::LT) if Input.getstate(Input::LT)

      @pressed.push(Input::UPs) if Input.getstate(Input::UPs)

      @pressed.push(Input::RT) if Input.getstate(Input::RT)

      @pressed.push(Input::DN) if Input.getstate(Input::DN)

      for key in Input::Numberkeys.values

        @pressed.push(key) if Input.getstate(key)

      end

      for key in Input::Numberpad.values

        @pressed.push(key) if Input.getstate(key)

      end

      for key in Input::Letters.values

        @pressed.push(key) if Input.getstate(key)

      end

      for key in Input::Fkeys.values

        @pressed.push(key) if Input.getstate(key)

      end

      @pressed.push(Input::Collon) if Input.getstate(Input::Collon)

      @pressed.push(Input::Equal) if Input.getstate(Input::Equal)

      @pressed.push(Input::Comma) if Input.getstate(Input::Comma)

      @pressed.push(Input::Underscore) if Input.getstate(Input::Underscore)

      @pressed.push(Input::Dot) if Input.getstate(Input::Dot)

      @pressed.push(Input::Backslash) if Input.getstate(Input::Backslash)

      @pressed.push(Input::Lb) if Input.getstate(Input::Lb)

      @pressed.push(Input::Rb) if Input.getstate(Input::Rb)

      @pressed.push(Input::Quote) if Input.getstate(Input::Quote)  

    end

    #--------------------------------------------------------------------------

    def Input.triggerd?(key)

      return true if @keys.include?(key)

      return false

    end

    #--------------------------------------------------------------------------

    def Input.pressed?(key)

      return true if @pressed.include?(key)

      return false

    end

  #--------------------------------------------------------------------------

  # * 4 Diraction

  #--------------------------------------------------------------------------

  def Input.dir4

    return 2 if Input.pressed?(Input::DN)

    return 4 if Input.pressed?(Input::LT)

    return 6 if Input.pressed?(Input::RT)

    return 8 if Input.pressed?(Input::UPs)

  end

  #--------------------------------------------------------------------------

  # * Trigger (key)

  #--------------------------------------------------------------------------

 

  def trigger?(key)

    keys = []

    case key

    when Input::DOWN

      keys.push(Input::DN)

    when Input::UP

      keys.push(Input::UPs)

    when Input::LEFT

      keys.push(Input::LT)

    when Input::RIGHT

      keys.push(Input::RT)

    when Input::C

      keys.push(Input::Enter)

    when Input::B

      keys.push(Input::Esc, Input::Numberpad[0])

    when Input::X

      keys.push(Input::Letters["A"])

    when Input::L

      keys.push(Input::Letters["Q"])

    when Input::R

      keys.push(Input::Letters["W"])

    when Input::Y

      keys.push(Input::Letters["R"])

    when Input::F5

      keys.push(Input::Fkeys[5])

    when Input::F6

      keys.push(Input::Fkeys[6])

    when Input::F7

      keys.push(Input::Fkeys[7])

    when Input::F8

      keys.push(Input::Fkeys[8])

    when Input::F9

      keys.push(Input::Fkeys[9])

    when Input::SHIFT

      keys.push(Input::Shift)

    when Input::CTRL

      keys.push(Input::Ctrl)

    when Input::ALT

      keys.push(Input::Alt)

    else

      keys.push(key)

    end

    for k in keys

     if Input.triggerd?(k)

       return true

     end

   end

   return false

 end

 

 

  #--------------------------------------------------------------------------

  # * Mouse Triggered ? (key)

  #-------------------------------------------------------------------------- 

  def trigger(key)

    return @used_i.include?(key)

  end

  #--------------------------------------------------------------------------

  # * Mouse Pressed ? (key)

  #-------------------------------------------------------------------------- 

  def pressed(key)

    return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)

    return false

  end

  

  #--------------------------------------------------------------------------

  # * Repeat (key)

  #-------------------------------------------------------------------------- 

  def repeat?(key)

    keys = []

    case key

    when Input::DOWN

      keys.push(Input::DN)

    when Input::UP

      keys.push(Input::UPs)

    when Input::LEFT

      keys.push(Input::LT)

    when Input::RIGHT

      keys.push(Input::RT)

    when Input::C

      keys.push(Input::Enter)

    when Input::B

      keys.push(Input::Esc, Input::Numberpad[0])

    when Input::X

      keys.push(Input::Letters["A"])

    when Input::L

      keys.push(Input::Letters["Q"])

    when Input::R

      keys.push(Input::Letters["W"])

    when Input::Y

      keys.push(Input::Letters["R"])

    when Input::F5

      keys.push(Input::Fkeys[5])

    when Input::F6

      keys.push(Input::Fkeys[6])

    when Input::F7

      keys.push(Input::Fkeys[7])

    when Input::F8

      keys.push(Input::Fkeys[8])

    when Input::F9

      keys.push(Input::Fkeys[9])

    when Input::SHIFT

      keys.push(Input::Shift)

    when Input::CTRL

      keys.push(Input::Ctrl)

    when Input::ALT

      keys.push(Input::Alt)

    else

      keys.push(key)

    end

    for k in keys

     if Input.triggerd?(k)

       return true

     end

   end

   return false

  end     

  #--------------------------------------------------------------------------

  # * Check (key)

  #-------------------------------------------------------------------------- 

  def check(key)

    Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1  # key 0

  end

  #--------------------------------------------------------------------------

  # * Mouse Update

  #-------------------------------------------------------------------------- 

  def mouse_update

    @used_i = []

    for i in USED_KEYS

      x = check(i)

      if x == true

        @used_i.push(i)

      end

    end

  end

  #--------------------------------------------------------------------------

  # * Short Write C

  #-------------------------------------------------------------------------- 

  def Input.C

    Input.trigger?(C)

  end

  #--------------------------------------------------------------------------

  # * Short Write B

  #-------------------------------------------------------------------------- 

  def Input.B

    Input.trigger?(B)

  end

  #--------------------------------------------------------------------------

  # * Short Write A

  #-------------------------------------------------------------------------- 

  def Input.A

    Input.trigger?(A)

  end

  #--------------------------------------------------------------------------

  # * Short Write Down

  #-------------------------------------------------------------------------- 

  def Input.Down

    Input.trigger?(DOWN)

  end

  #--------------------------------------------------------------------------

  # * Short Write Up

  #-------------------------------------------------------------------------- 

  def Input.Up

    Input.trigger?(UP)

  end

  #--------------------------------------------------------------------------

  # * Short Write Right

  #-------------------------------------------------------------------------- 

  def Input.Right

    Input.trigger?(RIGHT)

  end

  #--------------------------------------------------------------------------

  # * Short Write Left

  #-------------------------------------------------------------------------- 

  def Input.Left

    Input.trigger?(LEFT)

  end

  #--------------------------------------------------------------------------

  # * Anykey pressed?  ( A or B or C or Down or Up or Right or Left )

  #-------------------------------------------------------------------------- 

  def Input.Anykey

    if A or B or C or Down or Up or Right or Left

      return true

    else

      return false

    end

  end

end

 

module Keys

MOUSE_PRIMARY = Input::Mouse_Left

MOUSE_SECONDARY = Input::Mouse_Right

 

  def Keys.name?(num)

    return "MOUSE PRIMARY" if num==1

    return "MOUSE SECONDARY" if num==2

    return "MOUSE MIDDLE" if num==4

    return "MOUSE 4TH" if num==5

    return "MOUSE 5TH" if num==6

    return "BACKSPACE" if num==8

    return "TAB" if num==9

    return "RETURN" if num==13

    return "SHIFT" if num==16

    return "CTLR" if num==17

    return "ALT" if num==18

    return "CAPS LOCK" if num==20

    return "ESCAPE" if num==27

    return "SPACE" if num==32

    return "PGUP" if num==33

    return "PGDN" if num==34

    return "END" if num==35

    return "HOME" if num==36

    return "LEFT" if num==37

    return "UP" if num==38

    return "RIGHT" if num==39

    return "DOWN" if num==40

    return "SNAPSHOT" if num==44

    return "INSERT" if num==45

    return "DELETE" if num==46

    return "0" if num==48

    return "1" if num==49

    return "2" if num==50

    return "3" if num==51

    return "4" if num==52

    return "5" if num==53

    return "6" if num==54

    return "7" if num==55

    return "8" if num==56

    return "9" if num==57

    return "A" if num==65

    return "B" if num==66

    return "C" if num==67

    return "D" if num==68

    return "E" if num==69

    return "F" if num==70

    return "G" if num==71

    return "H" if num==72

    return "I" if num==73

    return "J" if num==74

    return "K" if num==75

    return "L" if num==76

    return "M" if num==77

    return "N" if num==78

    return "O" if num==79

    return "P" if num==80

    return "Q" if num==81

    return "R" if num==82

    return "S" if num==83

    return "T" if num==84

    return "U" if num==85

    return "V" if num==86

    return "W" if num==87

    return "X" if num==88

    return "Y" if num==89

    return "Z" if num==90

    return "LWIN" if num==91

    return "RWIN" if num==92

    return "APPS" if num==93

    return "0" if num==96

    return "1" if num==97

    return "2" if num==98

    return "3" if num==99

    return "4" if num==100

    return "5" if num==101

    return "6" if num==102

    return "7" if num==103

    return "8" if num==104

    return "9" if num==105

    return "*" if num==106

    return "+" if num==107

    return "-" if num==109

    return "." if num==110

    return "/" if num==111

    return "F1" if num==112

    return "F2" if num==113

    return "F3" if num==114

    return "F4" if num==115

    return "F5" if num==116

    return "F6" if num==117

    return "F7" if num==118

    return "F8" if num==119

    return "F9" if num==120

    return "F10" if num==121

    return "F11" if num==122

    return "F12" if num==123

    return "NUM LOCK" if num==144

    return "SCROLL LOCK" if num==145

    return "LEFT SHIFT" if num==160

    return "RIGHT SHIFT" if num==161

    return "LEFT CTRL" if num==162

    return "RIGHT CTRL" if num==163

    return "LEFT ALT" if num==164

    return "RIGHT ALT" if num==165

    return ";" if num==186

    return "=" if num==187

    return "," if num==188

    return "_" if num==189

    return "." if num==190

    return "/" if num==191

    return "`" if num==192

    return "[" if num==219

    return " \\ " if num==220

    return "]" if num==221

    return "'" if num==222

    return "??? - " + "#{num}"

  end

  

end

 

end

#-------------------------------------------------------------------------------

# End SDK Enabled Check

#-------------------------------------------------------------------------------

I had a look through; I couldn't find the problem.
Help?
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top