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

  • 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

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • 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)