diff --git a/resources/[carscripts]/mx_fixwiring/client/main.lua b/resources/[carscripts]/mx_fixwiring/client/main.lua new file mode 100644 index 000000000..ce2acf9b4 --- /dev/null +++ b/resources/[carscripts]/mx_fixwiring/client/main.lua @@ -0,0 +1,67 @@ +-- How to use +-- CircuitGame('x', 'y', 'scale', 'tamanho do jogo em vmin', '1.ogg', function() +-- run something +-- end) + +-- parameters +-- x = position on screen +-- y = position on screen +-- scale = game size on screen in scale (Normally 1.0) +-- sound_name = audio name + format (example 1.ogg) + +-- example +-- TriggerEvent("Mx::StartMinigameElectricCircuit", '50%', '92%', '1.0', '30vmin', '1.ogg', function() +-- print("Oops, I hit the code and ran something") +-- end) + +-- /startgame 50% 50% 1.0 30vmin 1.ogg + +CallBackFunction = nil + +RegisterCommand('startgame', function(src, args, cmd) + TriggerEvent("Mx::StartMinigameElectricCircuit", args[1], args[2], args[3], args[4], args[5], function() + print(">>>>>> Success <<<<<<") + end) +end, false) + +RegisterNetEvent('Mx::StartMinigameElectricCircuit') +AddEventHandler('Mx::StartMinigameElectricCircuit', function(x, y, scale, size_game, sound_name, Callback) + CircuitGame(x, y, scale, size_game, sound_name, Callback) +end) + +function CircuitGame(x, y, scale, size_game, sound_name, Callback) + SetNuiFocus(true,true) + SendNUIMessage({ + ui = 'ui', + NuiOpen = true, + x = x, + y = y, + scale = scale, + size_game = size_game, + sound_name = sound_name, + name_resource = GetCurrentResourceName() + }) + CallBackFunction = Callback +end + +RegisterNUICallback('electric_circuit_completed', function(data, cb) + CallBackFunction() + CloseNui() + cb('ok') +end) + +RegisterNUICallback('CloseNui', function(data, cb) + CloseNui() + cb('ok') +end) + +function CloseNui() + local ped = PlayerPedId() + ClearPedTasks(ped) + + SetNuiFocus(false, false) + SendNUIMessage({ + ui = 'ui', + NuiOpen = false, + }) +end \ No newline at end of file diff --git a/resources/[carscripts]/mx_fixwiring/fxmanifest.lua b/resources/[carscripts]/mx_fixwiring/fxmanifest.lua new file mode 100644 index 000000000..af61a0955 --- /dev/null +++ b/resources/[carscripts]/mx_fixwiring/fxmanifest.lua @@ -0,0 +1,27 @@ +fx_version 'cerulean' + +game 'gta5' + +description 'Mx Fix Wiring' + +version '1.1' + +ui_page 'html/index.html' + + +server_scripts { + 'server/*' +} + +client_scripts { + 'client/*' +} + +files { + 'html/index.html', + 'html/css/*.css', + 'html/js/*.js', + 'html/img/*.png', + 'html/sound/*.ogg', +} + diff --git a/resources/[carscripts]/mx_fixwiring/html/css/app.d30a452f.css b/resources/[carscripts]/mx_fixwiring/html/css/app.d30a452f.css new file mode 100644 index 000000000..2047ec491 --- /dev/null +++ b/resources/[carscripts]/mx_fixwiring/html/css/app.d30a452f.css @@ -0,0 +1 @@ +@import url(https://fonts.googleapis.com/css2?family=Bree+Serif&display=swap);body{margin:0;display:grid;place-items:center;height:100vh;overflow:hidden}#container{position:absolute;top:0;left:0;transform:translate(0) scale(1)}svg{height:auto;border-radius:2vh}.drag,.light{opacity:0}.drag{fill:#fff}.line{stroke-width:18px}.line,.line-back{pointer-events:none}.line-back{stroke-width:30px}.line-1{stroke:#324d9c}.line-2{stroke:#e52320}.line-3{stroke:#ffeb13}.line-4{stroke:#a6529a}.c{fill:#273065;stroke:#1a1b36}.c,.d,.e,.f,.k,.u{stroke-miterlimit:10}.c,.d,.e,.f,.u,.y{stroke-width:5px}.d{fill:#71160e;stroke:#280f10}.e{fill:#8c6c15}.e,.u{stroke:#38321a}.f{fill:#212021;stroke:#000}.h{fill:#9b3015;stroke:#471d12}.h,.y{stroke-linecap:round;stroke-linejoin:round}.k,.y{fill:none}.k{stroke:#1d1d1b;stroke-width:6px}.l{fill:#d9c905}.m{fill:#25378d}.n{fill:#324d9c}.o{fill:#a71916}.p{fill:#e52320}.q{fill:#aa9f17}.r{fill:#ffeb13}.s{fill:#90378c}.t{fill:#a6529a}.u{fill:#1d1d1b}.v{fill:#5b5c64}.w{fill:#292829}.x{fill:#2f3038}.y{stroke:#252526} \ No newline at end of file diff --git a/resources/[carscripts]/mx_fixwiring/html/favicon.ico b/resources/[carscripts]/mx_fixwiring/html/favicon.ico new file mode 100644 index 000000000..df36fcfb7 Binary files /dev/null and b/resources/[carscripts]/mx_fixwiring/html/favicon.ico differ diff --git a/resources/[carscripts]/mx_fixwiring/html/index.html b/resources/[carscripts]/mx_fixwiring/html/index.html new file mode 100644 index 000000000..6e702160e --- /dev/null +++ b/resources/[carscripts]/mx_fixwiring/html/index.html @@ -0,0 +1 @@ +
, or missing
. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes([oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. \n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for