I wish my cat wouldn't lick so loudly
This commit is contained in:
commit
0bb2a6be23
18 changed files with 510 additions and 0 deletions
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
*.zip
|
||||||
|
/plugin/Data/Scripts/
|
||||||
|
/plugin/Data/Meshes/
|
||||||
|
/build/
|
||||||
|
node_modules/
|
||||||
|
*.blend[0-9]*
|
14
.vscode/launch.json
vendored
Normal file
14
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
// Verwendet IntelliSense zum Ermitteln möglicher Attribute.
|
||||||
|
// Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
|
||||||
|
// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "papyrus",
|
||||||
|
"name": "Skyrim",
|
||||||
|
"request": "attach",
|
||||||
|
"game": "skyrimSpecialEdition"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
20
.vscode/tasks.json
vendored
Normal file
20
.vscode/tasks.json
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||||
|
// for the documentation about the tasks.json format
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "Build",
|
||||||
|
"type": "shell",
|
||||||
|
"group": {
|
||||||
|
"isDefault": true,
|
||||||
|
"kind": "build"
|
||||||
|
},
|
||||||
|
"command": "${workspaceFolder}/build.ps1",
|
||||||
|
"args": ["-Reload"],
|
||||||
|
"problemMatcher": [
|
||||||
|
"$PapyrusCompiler"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
Gameloop.Vdf.dll
Normal file
BIN
Gameloop.Vdf.dll
Normal file
Binary file not shown.
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# skyrim-item-roulette
|
||||||
|
|
||||||
|
Roulettes items
|
BIN
Source/Meshes/_EQ_ItemRoulette/roulette_container.blend
Normal file
BIN
Source/Meshes/_EQ_ItemRoulette/roulette_container.blend
Normal file
Binary file not shown.
5
Source/Scripts/_EQ_ItemRoulette_Main.psc
Normal file
5
Source/Scripts/_EQ_ItemRoulette_Main.psc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Scriptname _EQ_ItemRoulette_Main extends ReferenceAlias
|
||||||
|
|
||||||
|
Event OnPlayerLoadGame()
|
||||||
|
(GetOwningQuest() as _EQ_ItemRoulette_Quest).Main()
|
||||||
|
EndEvent
|
54
Source/Scripts/_EQ_ItemRoulette_Quest.psc
Normal file
54
Source/Scripts/_EQ_ItemRoulette_Quest.psc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
Scriptname _EQ_ItemRoulette_Quest extends Quest
|
||||||
|
|
||||||
|
Actor Property PlayerRef Auto
|
||||||
|
Static Property _EQ_ItemRoulette_Roulette Auto
|
||||||
|
|
||||||
|
ObjectReference[] DisplayItems
|
||||||
|
|
||||||
|
Int MAX_ITEMS = 6
|
||||||
|
Int CIRCLE_RADIUS = 16
|
||||||
|
|
||||||
|
Event OnInit()
|
||||||
|
DisplayItems = New ObjectReference[127]
|
||||||
|
int index = 0
|
||||||
|
While index < MAX_ITEMS
|
||||||
|
DisplayItems[index] = None
|
||||||
|
index += 1
|
||||||
|
EndWhile
|
||||||
|
|
||||||
|
Main()
|
||||||
|
EndEvent
|
||||||
|
|
||||||
|
Function Main()
|
||||||
|
Debug.Trace("Item Roulette loaded")
|
||||||
|
RegisterForModEvent("_EQ_ItemRoulette_Activate", "OnMyAction")
|
||||||
|
VRIK.VrikAddGestureAction("_EQ_ItemRoulette_Activate", "Activate Item Roulette")
|
||||||
|
RegisterForSingleUpdate(0.01)
|
||||||
|
EndFunction
|
||||||
|
|
||||||
|
Event OnUpdate()
|
||||||
|
Int index = 0
|
||||||
|
While index < MAX_ITEMS && DisplayItems[index] != None
|
||||||
|
DisplayItems[index].SetPosition(VRIK.VrikGetHandX(true) + CIRCLE_RADIUS * Math.sin(60 * index), VRIK.VrikGetHandY(true), VRIK.VrikGetHandZ(true) + CIRCLE_RADIUS * Math.cos(60 * index))
|
||||||
|
index += 1
|
||||||
|
EndWhile
|
||||||
|
|
||||||
|
RegisterForSingleUpdate(0.01)
|
||||||
|
EndEvent
|
||||||
|
|
||||||
|
Event OnMyAction(string eventName, string strArg, float numArg, Form sender)
|
||||||
|
Debug.Trace("VRIK activated me!")
|
||||||
|
PlayerRef.PlaceAtMe(_EQ_ItemRoulette_Roulette)
|
||||||
|
Int numItems = PlayerRef.getNumItems()
|
||||||
|
Int formIndex = numItems
|
||||||
|
Int count = 0
|
||||||
|
While formIndex > 0 && formIndex > numItems - MAX_ITEMS
|
||||||
|
formIndex -= 1
|
||||||
|
count = numItems - formIndex
|
||||||
|
Form invItem = PlayerRef.GetNthForm(formIndex)
|
||||||
|
ObjectReference invItemInst = PlayerRef.DropObject(invItem)
|
||||||
|
invItemInst.SetScale(0.1)
|
||||||
|
invItemInst.SetMotionType(invItemInst.Motion_Keyframed)
|
||||||
|
DisplayItems[count - 1] = invItemInst
|
||||||
|
EndWhile
|
||||||
|
EndEvent
|
137
build.ps1
Normal file
137
build.ps1
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Builds the plugin and optionally reloads it in Vortex.
|
||||||
|
|
||||||
|
.PARAMETER Reload
|
||||||
|
Reloads Skyrim after building. Reloading assumes you have symlinked the mod
|
||||||
|
into Vortex's staging area using the method in setup-dev.ps1. It completely
|
||||||
|
kills and restarts the game as I had trouble getting hlp and reloadscript
|
||||||
|
commands to work.
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $False)]
|
||||||
|
[Switch]
|
||||||
|
$Reload
|
||||||
|
)
|
||||||
|
|
||||||
|
New-Item -ItemType Directory "$PSScriptRoot/build" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
Add-Type -Path "$PSScriptRoot/Gameloop.Vdf.dll" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
$Proc = Get-Process Skyrim*
|
||||||
|
|
||||||
|
# Use the running instance
|
||||||
|
if($Proc) {
|
||||||
|
$Wmi = Get-WmiObject -Class win32_process -filter "ProcessId=$($Proc.Id)"
|
||||||
|
$SkyrimBase = Split-Path $Wmi.ExecutablePath
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for Steam version
|
||||||
|
if(-not $SkyrimBase) {
|
||||||
|
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") {
|
||||||
|
$steamInstallPath = "${env:ProgramFiles(x86)}/Steam"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$steamInstallPath = "$env:ProgramFiles/Steam"
|
||||||
|
}
|
||||||
|
|
||||||
|
$libraryFolders = [Gameloop.Vdf.VdfConvert]::Deserialize((Get-Content "$steamInstallPath/steamapps/libraryfolders.vdf") -join "`n")
|
||||||
|
|
||||||
|
$steamLibraries = @()
|
||||||
|
|
||||||
|
$steamLibraries += @($steamInstallPath)
|
||||||
|
$steamLibraries += Get-Member -InputObject $libraryFolders.Value -MemberType Dynamic | where-object -Property Name -Match "[0-9]+" | foreach { $libraryFolders.Value[$_.Name].ToString() }
|
||||||
|
|
||||||
|
$manifestPath = $None
|
||||||
|
foreach($steamLibrary in $steamLibraries) {
|
||||||
|
$manifestPath = Get-Item -Path @(
|
||||||
|
"$steamLibrary/steamapps/appmanifest_611670.acf",
|
||||||
|
"$steamLibrary/steamapps/appmanifest_489930.acf",
|
||||||
|
"$steamLibrary/steamapps/appmanifest_72850.acf"
|
||||||
|
) -ErrorAction SilentlyContinue | Select-Object -First 1
|
||||||
|
|
||||||
|
if($manifestPath) {
|
||||||
|
Write-Host "Manifest found at $($manifestPath.FullName)"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($manifestPath) {
|
||||||
|
$appManifest = [Gameloop.Vdf.VdfConvert]::Deserialize((Get-Content $manifestPath) -join "`n")
|
||||||
|
$installDir = $appManifest.Value["installdir"].ToString()
|
||||||
|
$SkyrimBase = "$(Split-Path $manifestPath)/common/$installDir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default to non-Steam version
|
||||||
|
if(-not $SkyrimBase) {
|
||||||
|
$SkyrimBase = (Get-Item -Path @(
|
||||||
|
"$env:ProgramFiles/Bethesda*/*Skyrim*"
|
||||||
|
"${env:ProgramFiles(x86)}/Bethesda*/*Skyrim*"
|
||||||
|
)).FullName
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compile the scripts
|
||||||
|
& "$SkyrimBase/Papyrus Compiler/PapyrusCompiler.exe" `
|
||||||
|
"$PsScriptRoot/Source/Scripts" `
|
||||||
|
"-f=$SkyrimBase/Data/Source/Scripts/TESV_Papyrus_Flags.flg" `
|
||||||
|
"-i=$SkyrimBase/Data/Source/Scripts;$PsScriptRoot/Source/Scripts" `
|
||||||
|
"-o=$PsScriptRoot/plugin/Data/Scripts" `
|
||||||
|
"-all"
|
||||||
|
|
||||||
|
if($LastExitCode -ne 0) {
|
||||||
|
return $LastExitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build the models
|
||||||
|
blender.exe --background --python "$PSScriptRoot/export-blender-models.py"
|
||||||
|
|
||||||
|
if($LastExitCode -ne 0) {
|
||||||
|
return $LastExitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
# ZIP up the deployment package
|
||||||
|
$ZipPath = "$PSScriptRoot/build/Item Roulette for VRIK.zip"
|
||||||
|
|
||||||
|
Remove-Item $ZipPath -ErrorAction SilentlyContinue
|
||||||
|
Compress-Archive -Path $PSScriptRoot/plugin/* -DestinationPath $ZipPath
|
||||||
|
|
||||||
|
if($Reload) {
|
||||||
|
if($Proc) {
|
||||||
|
Stop-Process $Proc
|
||||||
|
}
|
||||||
|
|
||||||
|
# Restart Vortex and kick off deploy-mods event via Chrome Debug Protocol.
|
||||||
|
Stop-Process -Name Vortex
|
||||||
|
$env:KICK_PORT=6969
|
||||||
|
$VortexPath = (Get-ItemProperty HKLM:\SOFTWARE\57979c68-f490-55b8-8fed-8b017a5af2fe).InstallLocation
|
||||||
|
$GameId = (Get-Item "$env:APPDATA/Vortex/skyrim*").BaseName
|
||||||
|
& "$VortexPath/Vortex.exe" --remote-debugging-port=$env:KICK_PORT --game=$GameId
|
||||||
|
|
||||||
|
pnpm install -C "$PSScriptRoot"
|
||||||
|
|
||||||
|
node.exe "$PSScriptRoot/kick-vortex.js"
|
||||||
|
Stop-Process -Name Vortex -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Prefer SKSE loader if we have it installed
|
||||||
|
$SkyrimExe = Get-Item -Path @(
|
||||||
|
"$SkyrimBase/skse*_loader.exe",
|
||||||
|
"$SkyrimBase/Skyrim*.exe"
|
||||||
|
) | Select-Object -First 1
|
||||||
|
|
||||||
|
Start-Process -WorkingDirectory $SkyrimExe.DirectoryName -FilePath $SkyrimExe
|
||||||
|
|
||||||
|
# Send JSON command to load first autosave. Doesn't currently work.
|
||||||
|
do {
|
||||||
|
$wrFail = $None
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
Invoke-WebRequest -Uri "http://localhost:8558/api/command" `
|
||||||
|
-Method Post `
|
||||||
|
-ErrorVariable $wrFail `
|
||||||
|
-ContentType 'application/json' `
|
||||||
|
-Headers @{ Accept = 'application/json' } `
|
||||||
|
-Body @"
|
||||||
|
{ "command": "load \"autosave1\" " }
|
||||||
|
"@
|
||||||
|
} while ($wrFail)
|
||||||
|
}
|
24
export-blender-models.py
Normal file
24
export-blender-models.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import bpy
|
||||||
|
import os
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
curdir = Path(__file__).parent
|
||||||
|
print("Current directory: " + str(curdir))
|
||||||
|
plugin_data_dir = curdir.joinpath("plugin/Data")
|
||||||
|
print("Plugin directory: " + str(plugin_data_dir))
|
||||||
|
mesh_src_dir = curdir.joinpath("Source/Meshes")
|
||||||
|
print("Mesh Source directory: " + str(mesh_src_dir))
|
||||||
|
mesh_dest_dir = plugin_data_dir.joinpath("Meshes")
|
||||||
|
print("Mesh Dest directory: " + str(mesh_dest_dir))
|
||||||
|
blend_paths = Path(mesh_src_dir).rglob("*.blend")
|
||||||
|
for blend_path in blend_paths:
|
||||||
|
dest_blend_path = mesh_dest_dir.joinpath(blend_path.relative_to(mesh_src_dir))
|
||||||
|
nif_parent = dest_blend_path.parent
|
||||||
|
nif_path = nif_parent.joinpath(dest_blend_path.stem + '.nif')
|
||||||
|
print(str(blend_path) + " -> " + str(nif_path))
|
||||||
|
bpy.ops.wm.open_mainfile(filepath=str(blend_path))
|
||||||
|
try:
|
||||||
|
nif_parent.mkdir(parents=True)
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
bpy.ops.export_scene.nif(filepath=str(nif_path))
|
58
kick-vortex.js
Normal file
58
kick-vortex.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
const CDP = require('chrome-remote-interface');
|
||||||
|
const waitPort = require('wait-port')
|
||||||
|
const util = require('util')
|
||||||
|
|
||||||
|
const main = async() => {
|
||||||
|
const port = parseInt(process.env.KICK_PORT);
|
||||||
|
await waitPort({
|
||||||
|
host: '127.0.0.1',
|
||||||
|
port: port,
|
||||||
|
})
|
||||||
|
let client;
|
||||||
|
while(!client) {
|
||||||
|
try {
|
||||||
|
client = await CDP({
|
||||||
|
host: '127.0.0.1',
|
||||||
|
port: port,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log('Connected to CDP')
|
||||||
|
let target;
|
||||||
|
while(!target || splash) {
|
||||||
|
await new Promise(res => setTimeout(res, 100))
|
||||||
|
const targets = await client.Target.getTargets();
|
||||||
|
splash = targets.targetInfos.find(y => y.url.endsWith('splash.html'))
|
||||||
|
target = targets.targetInfos.find(y => y.url.endsWith('index.html'))
|
||||||
|
}
|
||||||
|
console.log('Found target!')
|
||||||
|
await new Promise(res => client.close(res));
|
||||||
|
client = await CDP({
|
||||||
|
host: '127.0.0.1',
|
||||||
|
port: port,
|
||||||
|
});
|
||||||
|
await client.Runtime.evaluate({
|
||||||
|
awaitPromise: true,
|
||||||
|
expression: '(' + (async function() {
|
||||||
|
await new Promise(function(res, rej) {
|
||||||
|
async function handler() {
|
||||||
|
if(_API && _API.events && _API.events.emit) {
|
||||||
|
await _API.awaitUI();
|
||||||
|
_API.events.emit("deploy-mods", res);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setTimeout(handler, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handler();
|
||||||
|
});
|
||||||
|
}).toString() + ')()'
|
||||||
|
})
|
||||||
|
client.close();
|
||||||
|
console.log('Finished everything!')
|
||||||
|
};
|
||||||
|
|
||||||
|
main().catch(console.error)
|
15
package.json
Normal file
15
package.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "skyrim-item-roulette",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Roulettes items",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"chrome-remote-interface": "^0.30.0",
|
||||||
|
"wait-port": "^0.2.9"
|
||||||
|
}
|
||||||
|
}
|
BIN
plugin/Data/_EQ_ItemRoulette.esp
Normal file
BIN
plugin/Data/_EQ_ItemRoulette.esp
Normal file
Binary file not shown.
1
plugin/Data/_EQ_ItemRoulette_Placeholder.md
Normal file
1
plugin/Data/_EQ_ItemRoulette_Placeholder.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
This is a placeholder file for development purposes.
|
14
plugin/fomod/ModuleConfig.xml
Normal file
14
plugin/fomod/ModuleConfig.xml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<!-- FOMod Creation Tool [http://www.nexusmods.com/fallout4/mods/6821] -->
|
||||||
|
<!-- FOMod Quick Guide [https://media.readthedocs.org/pdf/fomod-docs/latest/fomod-docs.pdf] -->
|
||||||
|
<!-- FOMod Reference Manual [https://fomod-designer.readthedocs.io/en/stable/] -->
|
||||||
|
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://qconsulting.ca/fo3/ModConfig5.0.xsd">
|
||||||
|
<moduleName>Item Roulette Selector for VRIK</moduleName>
|
||||||
|
|
||||||
|
<moduleDependencies operator="And">
|
||||||
|
<fileDependency file="vrik.esp" state="Active" />
|
||||||
|
</moduleDependencies>
|
||||||
|
|
||||||
|
<requiredInstallFiles>
|
||||||
|
<folder source="Data" priority="0"/>
|
||||||
|
</requiredInstallFiles>
|
||||||
|
</config>
|
6
plugin/fomod/info.xml
Normal file
6
plugin/fomod/info.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<!-- Created with FOMOD Creation Tool 1.7.0.37 [http://www.nexusmods.com/fallout4/mods/6821] -->
|
||||||
|
<!-- FOMod Document [https://media.readthedocs.org/pdf/fomod-docs/latest/fomod-docs.pdf] -->
|
||||||
|
<fomod>
|
||||||
|
<Name>Item Roulette Selector for VRIK</Name>
|
||||||
|
<Website>https://www.nexusmods.com/skyrimspecialedition/mods/FIXME</Website>
|
||||||
|
</fomod>
|
114
pnpm-lock.yaml
generated
Normal file
114
pnpm-lock.yaml
generated
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
lockfileVersion: 5.3
|
||||||
|
|
||||||
|
specifiers:
|
||||||
|
chrome-remote-interface: ^0.30.0
|
||||||
|
wait-port: ^0.2.9
|
||||||
|
|
||||||
|
devDependencies:
|
||||||
|
chrome-remote-interface: 0.30.0
|
||||||
|
wait-port: 0.2.9
|
||||||
|
|
||||||
|
packages:
|
||||||
|
|
||||||
|
/ansi-styles/3.2.1:
|
||||||
|
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
dependencies:
|
||||||
|
color-convert: 1.9.3
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/chalk/2.4.2:
|
||||||
|
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
dependencies:
|
||||||
|
ansi-styles: 3.2.1
|
||||||
|
escape-string-regexp: 1.0.5
|
||||||
|
supports-color: 5.5.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/chrome-remote-interface/0.30.0:
|
||||||
|
resolution: {integrity: sha512-krIHiWQCRvlLhHmjWuGgHJfqhj2Jcj3mtVebq3c/Pwv4RF7P0A2eSy6YRqrBPwcziYJrtsPGR0rm7uCe4987rQ==}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
commander: 2.11.0
|
||||||
|
ws: 7.4.6
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- utf-8-validate
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/color-convert/1.9.3:
|
||||||
|
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
|
||||||
|
dependencies:
|
||||||
|
color-name: 1.1.3
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/color-name/1.1.3:
|
||||||
|
resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/commander/2.11.0:
|
||||||
|
resolution: {integrity: sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/commander/3.0.2:
|
||||||
|
resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/debug/4.3.1:
|
||||||
|
resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==}
|
||||||
|
engines: {node: '>=6.0'}
|
||||||
|
peerDependencies:
|
||||||
|
supports-color: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
supports-color:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
ms: 2.1.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/escape-string-regexp/1.0.5:
|
||||||
|
resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
|
||||||
|
engines: {node: '>=0.8.0'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/has-flag/3.0.0:
|
||||||
|
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/ms/2.1.2:
|
||||||
|
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/supports-color/5.5.0:
|
||||||
|
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
dependencies:
|
||||||
|
has-flag: 3.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/wait-port/0.2.9:
|
||||||
|
resolution: {integrity: sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
chalk: 2.4.2
|
||||||
|
commander: 3.0.2
|
||||||
|
debug: 4.3.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/ws/7.4.6:
|
||||||
|
resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==}
|
||||||
|
engines: {node: '>=8.3.0'}
|
||||||
|
peerDependencies:
|
||||||
|
bufferutil: ^4.0.1
|
||||||
|
utf-8-validate: ^5.0.2
|
||||||
|
peerDependenciesMeta:
|
||||||
|
bufferutil:
|
||||||
|
optional: true
|
||||||
|
utf-8-validate:
|
||||||
|
optional: true
|
||||||
|
dev: true
|
39
setup-dev.ps1
Normal file
39
setup-dev.ps1
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
mkdir "$PSScriptRoot/build" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
pnpm install -C $PSScriptRoot
|
||||||
|
|
||||||
|
$ZipName = "EmpathicQubit-ItemRoulette-Dev.zip"
|
||||||
|
$ModPath = (Get-Item "$env:APPDATA/Vortex/skyrim*/mods").FullName+"/"+[IO.Path]::GetFileNameWithoutExtension($ZipName)
|
||||||
|
|
||||||
|
if((Get-Item $ModPath).Attributes.HasFlag([IO.FileAttributes]::ReparsePoint)) {
|
||||||
|
Write-Host "Already setup."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
$ZipPath = "$PSScriptRoot/build/$ZipName"
|
||||||
|
Compress-Archive -Update -Path "$PSScriptRoot/plugin/Data/_EQ_ItemRoulette_Placeholder.md" -DestinationPath $ZipPath
|
||||||
|
|
||||||
|
$VortexPath = (Get-ItemProperty HKLM:\SOFTWARE\57979c68-f490-55b8-8fed-8b017a5af2fe).InstallLocation
|
||||||
|
|
||||||
|
Invoke-WebRequest -Uri http://nginx.org/download/nginx-1.21.0.zip -OutFile "$PSScriptRoot/build/nginx.zip"
|
||||||
|
Expand-Archive -Path "$PSScriptRoot/build/nginx.zip" -DestinationPath "$PSScriptRoot/build"
|
||||||
|
$NginxPath = "$PSScriptRoot/build/nginx-1.21.0"
|
||||||
|
|
||||||
|
Move-Item "$NginxPath/conf/nginx.conf" "$NginxPath/conf/nginx.conf.old"
|
||||||
|
(Get-Content "$NginxPath/conf/nginx.conf.old") `
|
||||||
|
-replace '^([^#]*root).*$', "`$1 $PSScriptRoot/build;" `
|
||||||
|
-replace '^([^#]*listen).*$', '$1 8998;' `
|
||||||
|
| Out-File -Encoding ascii "$NginxPath/conf/nginx.conf"
|
||||||
|
|
||||||
|
$job = Start-Job { & "$NginxPath/nginx.exe" -g 'daemon off;' }
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
|
||||||
|
& "$VortexPath/Vortex.exe" -i "http://localhost:8998/$ZipName"
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
|
||||||
|
Stop-Job $job
|
||||||
|
|
||||||
|
Remove-Item -Recurse $ModPath
|
||||||
|
New-Item -Path $ModPath -ItemType SymbolicLink -Value "$PSScriptRoot/plugin/Data"
|
Loading…
Add table
Reference in a new issue