UNPKG

@cccode/create-fxr

Version:

An easy way to start using the @cccode/fxr library.

116 lines (90 loc) 3.17 kB
#!/usr/bin/env node import fs from 'node:fs/promises' import path from 'node:path' import { parseArgs } from 'node:util' import child_process from 'node:child_process' const { positionals } = parseArgs({ args: process.argv.slice(2), strict: false }) const cwd = process.cwd() const targetDir = positionals[0] || 'fxr-project' const root = path.resolve(path.join(cwd, targetDir)) const projectName = path.basename(root) if (await fs.access(root).then(() => true).catch(() => false) && (await fs.readdir(root)).length > 0) { console.clear() console.error(` \x1b[97m'${root}' already exists and it is not empty.\x1b[0m Please specify an empty folder, or one that does not already exist when running the create command: \x1b[90m>\x1b[0m \x1b[92mnpm create @cccode/fxr@latest example_folder_name\x1b[0m `) process.exit(1) } function exec(command) { return new Promise((fulfil, reject) => { child_process.exec(command, { cwd: root }, error => { if (error) { reject(error) } else { fulfil() } }) }) } const reloadExample = /*js*/` import { FXR, BasicNode, BillboardEx } from '@cccode/fxr' import reloadFXR, { Weapon, Affinity } from 'fxr-reloader' const fxr = new FXR(1) fxr.root.nodes = [ new BasicNode([ new BillboardEx({ color1: [0, 1, 0.8, 1] }) ]) ] await reloadFXR(fxr, true, Weapon.ShortSword + Affinity.Standard) `.trim() + '\n' const saveAsExample = /*js*/` import { FXR, Game, BasicNode, BillboardEx } from '@cccode/fxr' const fxr = new FXR(1) fxr.root.nodes = [ new BasicNode([ new BillboardEx({ color1: [0, 1, 0.8, 1] }) ]) ] await fxr.saveAs('example.fxr', Game.EldenRing) `.trim() + '\n' const installCmd = 'npm i fxr-reloader@latest @cccode/fxr@latest --omit=dev' try { await fs.mkdir(root, { recursive: true }) await fs.writeFile(path.join(root, 'package.json'), JSON.stringify({ name: projectName .replace(/\s+/g, '-') .replace(/[^a-z0-9-]/gi, '') .toLowerCase() .replace(/^[-]+|[-]+$/, '') || 'fxr-project', version: '1.0.0', type: 'module', }, null, 2)) await exec(installCmd + ' > nul 2>&1') await fs.writeFile(path.join(root, 'example_reload.js'), reloadExample) await fs.writeFile(path.join(root, 'example_save.js'), saveAsExample) await fs.writeFile(path.join(root, 'update.bat'), installCmd) console.clear() console.log(` \x1b[97mProject folder '${projectName}' created!\x1b[0m In this new folder, create new .js files with your code in them and run them using this command with your .js file name from the project folder: \x1b[90m>\x1b[0m \x1b[92mnode my_script.js\x1b[0m See the two example scripts in the folder to get started. \x1b[90m- The reloader example requires fxr-ws-reloader.dll to be installed in Elden Ring: https://github.com/EvenTorset/fxr-ws-reloader\x1b[0m If a new update to the FXR or reloader libraries comes out and you want to update, double click on the update.bat file in the project folder. `) } catch (err) { console.error(err) }