need help on converting script modules ready

0 favourites
  • 12 posts
From the Asset Store
Game with complete Source-Code (Construct 3 / .c3p) + HTML5 Exported.
  • I have a script file (main.js) which disable F1 to F12 keys and a script in action block ( window.parent.getNextGame("alphabet_game"); ) which calls external api (trigger a function of website)

    both were working fine unless I switched to script type "module"

    Now script in action block working fine but main.js file not working. If I switch back to classic the working fine. What I have to do to run this main.js file too.

    Please note that I have no programming skills and script I got from internet.

     //  Put  any  global  functions  etc.  here
      
    var  shortcut  =  {
      
    	'all_shortcuts':  {},//All  the  shortcuts  are  stored  in  this  array
      
    	'add':  function  (shortcut_combination,  callback,  opt)  {
      
    		//Provide  a  set  of  default  options
      
    		var  default_options  =  {
      
    			'type':  'keydown',
      
    			'propagate':  false,
      
    			'disable_in_input':  false,
      
    			'target':  document,
      
    			'keycode':  false
      
    		};
      
    		if  (!opt)  opt  =  default_options;
      
    		else  {
      
    			for  (var  dfo  in  default_options)  {
      
    				if  (typeof  opt[dfo]  ==  'undefined')  opt[dfo]  =  default_options[dfo];
      
    			}
      
    		}
      
     
    		var  ele  =  opt.target;
      
    		if  (typeof  opt.target  ==  'string')  ele  =  document.getElementById(opt.target);
      
    		var  ths  =  this;
      
    		shortcut_combination  =  shortcut_combination.toLowerCase();
      
     
    		//The  function  to  be  called  at  keypress
      
    		var  func  =  function  (e)  {
      
    			e  =  e  ||  window.event;
      
     
    			if  (opt['disable_in_input'])  {  //Don't  enable  shortcut  keys  in  Input,  Textarea  fields
      
    				var  element;
      
    				if  (e.target)  element  =  e.target;
      
    				else  if  (e.srcElement)  element  =  e.srcElement;
      
    				if  (element.nodeType  ==  3)  element  =  element.parentNode;
      
     
    				if  (element.tagName  ==  'INPUT'  ||  element.tagName  ==  'TEXTAREA')  return;
      
    			}
      
     
    			let  code;
      
    			//Find  Which  key  is  pressed
      
    			if  (e.keyCode)  code  =  e.keyCode;
      
    			else  if  (e.which)  code  =  e.which;
      
    			var  character  =  String.fromCharCode(code).toLowerCase();
      
     
    			if  (code  ==  188)  character  =  ",";  //If  the  user  presses  ,  when  the  type  is  onkeydown
      
    			if  (code  ==  190)  character  =  ".";  //If  the  user  presses  ,  when  the  type  is  onkeydown
      
     
    			var  keys  =  shortcut_combination.split("+");
      
    			//Key  Pressed  -  counts  the  number  of  valid  keypresses  -  if  it  is  same  as  the  number  of  keys,  the  shortcut  function  is  invoked
      
    			var  kp  =  0;
      
     
    			//Work  around  for  stupid  Shift  key  bug  created  by  using  lowercase  -  as  a  result  the  shift+num  combination  was  broken
      
    			var  shift_nums  =  {
      
    				"`":  "~",
      
    				"1":  "!",
      
    				"2":  "@",
      
    				"3":  "#",
      
    				"4":  "$",
      
    				"5":  "%",
      
    				"6":  "^",
      
    				"7":  "&",
      
    				"8":  "*",
      
    				"9":  "(",
      
    				"0":  ")",
      
    				"-":  "_",
      
    				"=":  "+",
      
    				";":  ":",
      
    				"'":  "\"",
      
    				",":  "<",
      
    				".":  ">",
      
    				"/":  "?",
      
    				"\\":  "|"
      
    			};
      
    			//Special  Keys  -  and  their  codes
      
    			var  special_keys  =  {
      
    				'esc':  27,
      
    				'escape':  27,
      
    				'tab':  9,
      
    				'space':  32,
      
    				'return':  13,
      
    				'enter':  13,
      
    				'backspace':  8,
      
     
    				'scrolllock':  145,
      
    				'scroll_lock':  145,
      
    				'scroll':  145,
      
    				'capslock':  20,
      
    				'caps_lock':  20,
      
    				'caps':  20,
      
    				'numlock':  144,
      
    				'num_lock':  144,
      
    				'num':  144,
      
     
    				'pause':  19,
      
    				'break':  19,
      
     
    				'insert':  45,
      
    				'home':  36,
      
    				'delete':  46,
      
    				'end':  35,
      
     
    				'pageup':  33,
      
    				'page_up':  33,
      
    				'pu':  33,
      
     
    				'pagedown':  34,
      
    				'page_down':  34,
      
    				'pd':  34,
      
     
    				'left':  37,
      
    				'up':  38,
      
    				'right':  39,
      
    				'down':  40,
      
     
    				'f1':  112,
      
    				'f2':  113,
      
    				'f3':  114,
      
    				'f4':  115,
      
    				'f5':  116,
      
    				'f6':  117,
      
    				'f7':  118,
      
    				'f8':  119,
      
    				'f9':  120,
      
    				'f10':  121,
      
    				'f11':  122,
      
    				'f12':  123
      
    			};
      
     
    			var  modifiers  =  {
      
    				shift:  {  wanted:  false,  pressed:  false  },
      
    				ctrl:  {  wanted:  false,  pressed:  false  },
      
    				alt:  {  wanted:  false,  pressed:  false  },
      
    				meta:  {  wanted:  false,  pressed:  false  }	//Meta  is  Mac  specific
      
    			};
      
     
    			if  (e.ctrlKey)  modifiers.ctrl.pressed  =  true;
      
    			if  (e.shiftKey)  modifiers.shift.pressed  =  true;
      
    			if  (e.altKey)  modifiers.alt.pressed  =  true;
      
    			if  (e.metaKey)  modifiers.meta.pressed  =  true;
      
    			let  k;
      
    			for  (var  i  =  0;  k  =  keys[i],  i  <  keys.length;  i++)  {
      
    				//Modifiers
      
    				if  (k  ==  'ctrl'  ||  k  ==  'control')  {
      
    					kp++;
      
    					modifiers.ctrl.wanted  =  true;
      
     
    				}  else  if  (k  ==  'shift')  {
      
    					kp++;
      
    					modifiers.shift.wanted  =  true;
      
     
    				}  else  if  (k  ==  'alt')  {
      
    					kp++;
      
    					modifiers.alt.wanted  =  true;
      
    				}  else  if  (k  ==  'meta')  {
      
    					kp++;
      
    					modifiers.meta.wanted  =  true;
      
    				}  else  if  (k.length  >  1)  {  //If  it  is  a  special  key
      
    					if  (special_keys[k]  ==  code)  kp++;
      
     
    				}  else  if  (opt['keycode'])  {
      
    					if  (opt['keycode']  ==  code)  kp++;
      
     
    				}  else  {  //The  special  keys  did  not  match
      
    					if  (character  ==  k)  kp++;
      
    					else  {
      
    						if  (shift_nums[character]  &&  e.shiftKey)  {  //Stupid  Shift  key  bug  created  by  using  lowercase
      
    							character  =  shift_nums[character];
      
    							if  (character  ==  k)  kp++;
      
    						}
      
    					}
      
    				}
      
    			}
      
     
    			if  (kp  ==  keys.length  &&
      
    				modifiers.ctrl.pressed  ==  modifiers.ctrl.wanted  &&
      
    				modifiers.shift.pressed  ==  modifiers.shift.wanted  &&
      
    				modifiers.alt.pressed  ==  modifiers.alt.wanted  &&
      
    				modifiers.meta.pressed  ==  modifiers.meta.wanted)  {
      
    				callback(e);
      
     
    				if  (!opt['propagate'])  {  //Stop  the  event
      
    					//e.cancelBubble  is  supported  by  IE  -  this  will  kill  the  bubbling  process.
      
    					e.cancelBubble  =  true;
      
    					e.returnValue  =  false;
      
     
    					//e.stopPropagation  works  in  Firefox.
      
    					if  (e.stopPropagation)  {
      
    						e.stopPropagation();
      
    						e.preventDefault();
      
    					}
      
    					return  false;
      
    				}
      
    			}
      
    		};
      
    		this.all_shortcuts[shortcut_combination]  =  {
      
    			'callback':  func,
      
    			'target':  ele,
      
    			'event':  opt['type']
      
    		};
      
    		//Attach  the  function  with  the  event
      
    		if  (ele.addEventListener)  ele.addEventListener(opt['type'],  func,  false);
      
    		else  if  (ele.attachEvent)  ele.attachEvent('on'  +  opt['type'],  func);
      
    		else  ele['on'  +  opt['type']]  =  func;
      
    	},
      
     
    	//Remove  the  shortcut  -  just  specify  the  shortcut  and  I  will  remove  the  binding
      
    	'remove':  function  (shortcut_combination)  {
      
    		shortcut_combination  =  shortcut_combination.toLowerCase();
      
    		var  binding  =  this.all_shortcuts[shortcut_combination];
      
    		delete  (this.all_shortcuts[shortcut_combination]);
      
    		if  (!binding)  return;
      
    		var  type  =  binding['event'];
      
    		var  ele  =  binding['target'];
      
    		var  callback  =  binding['callback'];
      
     
    		if  (ele.detachEvent)  ele.detachEvent('on'  +  type,  callback);
      
    		else  if  (ele.removeEventListener)  ele.removeEventListener(type,  callback,  false);
      
    		else  ele['on'  +  type]  =  false;
      
    	}
      
    };
      
     
     
     
    runOnStartup(async  runtime  =>  {
      
    	//  Code  to  run  on  the  loading  screen.
      
    	//  Note  layouts,  objects  etc.  are  not  yet  available.
      
     
    	//disable  in  PRODUCTION!
      
    	document.addEventListener('keydown',  (event)  =>  {
      
    		console.log(event);
      
    	});
      
     
    	runtime.addEventListener("beforeprojectstart",  ()  =>  OnBeforeProjectStart(runtime));
      
     
    	shortcut.add("F1",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F2",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F3",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F4",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F5",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F6",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F7",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F8",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F9",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F10",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F11",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
     
    	shortcut.add("F12",  function  (e)  {
      
    		e.preventDefault();
      
     
    	});
      
    });
      
     
    function  OnBeforeProjectStart(runtime)  {
      
    	//  Code  to  run  just  before  'On  start  of  layout'  on
      
    	//  the  first  layout.  Loading  has  finished  and  initial
      
    	//  instances  are  created  and  available  to  use  here.
      
     
    	runtime.addEventListener("tick",  ()  =>  Tick(runtime));
      
    }
      
     
    function  Tick(runtime)  {
      
    	//  Code  to  run  every  tick
      
    }
      
    
  • I don't understand what the problem is. But I think I had a similar problem some time ago. In my Text Editor template I have implemented the controls "ALT + N", "CTRL + O", "CTRL + S", "CTRL + SHIFT + S", "CTRL + R". I used this code:

    - keyboardShortcuts.js

    Link:

    - GitHub

    - demo

    In your code, I would first try to replace window with globalThis (see this ).

  • I didn't understand what I have to do exactly. As I don't know how code works.

    My problem is code is working in classic mode and keys disabled with this code but switch to module, Keys are not disabled.

    I am non-programmer I don't know even a single line of code. I just doing copy paste code to run it.

    Can you please update my code which will work with module setting?

  • Well, if you just want to disable the F1 to F12 keys you can use a simpler code:

     function  stopSpecialKeyBrowser(e)  {
      
     e.stopImmediatePropagation();
      
     e.preventDefault();
      
    };
      
     
    function  stopFunctionKeys(e)  {
      
     match(e.code)
      
     .on(k  =>  k  ===  "F1",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F2",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F3",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F4",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F5",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F6",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F7",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F8",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F9",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F10",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F11",  ()  =>  stopSpecialKeyBrowser(e))
      
     .on(k  =>  k  ===  "F12",  ()  =>  stopSpecialKeyBrowser(e))			
      
     .otherwise(k  =>  ()  =>  0);
      
    };
      
     
    runOnStartup(async  runtime  =>  {
      
     document.addEventListener('keydown',  stopFunctionKeys);
      
    });
      
     
     
    const  matched  =  x  =>  ({
      
     on:  ()  =>  matched(x),
      
     otherwise:  ()  =>  x,
      
    })
      
     
    const  match  =  x  =>  ({   
     on:  (pred,  fn)  =>  (pred(x)  ?  matched(fn(x))  :  match(x)),
      
     otherwise:  fn  =>  fn(x),
      
    }) 
  • So I also set use Worker to NO ?

    update: I also tried with set Use Worker to No but still those keys are working

  • Not seeing your project makes it difficult to guess what is going wrong.

    I just uploaded a small template to GitHub to show you the code in action:

    demo

    c3demo.stranianelli.com

    github.com/el3um4s/construct-demo

  • in Construct preview its working but when I upload its html5 to website then its not working and keys are working there in browser

    myfile

  • What browser do you use?

    https://c3demo.stranianelli.com/mini-template/005-keycode-info/demo/

    On this page it works for me. On your pc?

  • Yes I tested your demo and its working but in my file its not

    I am testing in chrome browser.

    I also have a script in the eventsheet action block Is it the reason for not working?

    btw I attached my file

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • el3um4s

    its working

    Its my fault

    after I was upload HTML I was just refreshing and testing but I did not clicked inside canvas.

    Now code working.

    Thank you so much

  • its working

    Hurray!

  • Hello! I was hoping some of you could help me out. I have no java script programing experience either, and posted about a plugin I use that might need some updating here . The post seems to have been forgotten now, so I thought I'd nudge some of you. Any input would be great.

    Here is the original post:

    Hey Guys! I've got a small problem. Or maybe a big problem. IDK. I have this super cool game I've made ( itch.io , google play , construct/scirra arcade ), and I would like to keep working on it, but I am using plugins that are ancient. My game uses 4 of Rex's Firebase Pack. I spent a bunch of time determining how to add several features to my game including leaderboards and cloud saves, and that's how I did it. But these plugins are super outdated, and Rex stopped managing them years ago from my understanding. I don't really think I have the technical know-how to fix these myself, but it appears that all of his source code is still publicly available. You can download all his firebase plugins here: Link .

    The plugins I use are:

    Authentication - to connect a user's email and password with a Firebase user set

    APIv3 - general Firebase stuff

    SaveData (saveSlot) - To store user data to firebase

    LeaderBoard - To house the player leaderboard

    If this is an easy fix, I'd be happy to do it myself. I don't know how to take these scripts and compile them into a plugin file or anything like that, so any help is great.

    I don't know if it is really worth fixing these scripts or not. I guess that's the real answer I'm looking for here.

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)