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)