init
This commit is contained in:
commit
3a3257fa37
33
Client Config.json
Normal file
33
Client Config.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"fallback_language": "zh",
|
||||
"fallback_languageVO": "",
|
||||
"fallback_graphicsDriver": "dx12",
|
||||
"fallback_cluster": "public",
|
||||
"server_host": "127.0.0.1",
|
||||
"http_port": 80,
|
||||
"https_port": 443,
|
||||
"autologin": false,
|
||||
"autologin_email": "",
|
||||
"autologin_password": "",
|
||||
"high_damage_numbers_patch": true,
|
||||
"simulacrum_blacklisted": false,
|
||||
"simulacrum_whitelisted": true,
|
||||
"pause_always_stops_time": false,
|
||||
"disable_nrs_connection": true,
|
||||
"ee_log_in_console": false,
|
||||
"skip_mission_start_timer": false,
|
||||
"logout_on_request_failure": true,
|
||||
"fov_override": 0.0,
|
||||
"forced_profile_dir": "",
|
||||
"auto_start_scripts": [
|
||||
"samples/Chat Commands.pluto"
|
||||
],
|
||||
"alternative_loading": false,
|
||||
"dont_resolve_labels": false,
|
||||
"save_all_metadata": false,
|
||||
"write_all_metadata_reads_to_console": false,
|
||||
"write_all_metadata_reads_to_ee_log": false,
|
||||
"write_patched_metadata_reads_to_console": false,
|
||||
"write_patched_metadata_reads_to_ee_log": false,
|
||||
"client_http_port": 6155
|
||||
}
|
||||
BIN
Content/0/H.Cache.bin!D_---------------------w
Normal file
BIN
Content/0/H.Cache.bin!D_---------------------w
Normal file
Binary file not shown.
BIN
Content/0/H.Cache.bin!D_---------------------w.bak
Normal file
BIN
Content/0/H.Cache.bin!D_---------------------w.bak
Normal file
Binary file not shown.
65
Download Latest DLL.ps1
Normal file
65
Download Latest DLL.ps1
Normal file
@ -0,0 +1,65 @@
|
||||
Write-Host "Fetching latest version..."
|
||||
$latest = Invoke-RestMethod -Uri "https://openwf.io/supplementals/client%20drop-in/meta" -Method Get
|
||||
|
||||
$dll_path = "../wtsapi32.dll"
|
||||
if (Test-Path "../dwmapi.dll") {
|
||||
$dll_path = "../dwmapi.dll"
|
||||
}
|
||||
if (Test-Path "../version.dll") {
|
||||
$dll_path = "../version.dll"
|
||||
}
|
||||
|
||||
$sha256 = ""
|
||||
if (Test-Path $dll_path) {
|
||||
$sha256 = (Get-FileHash $dll_path -Algorithm SHA256).Hash.ToLower()
|
||||
}
|
||||
$hotfix_sha256 = ""
|
||||
if (Test-Path "Hotfix.owf") {
|
||||
$hotfix_sha256 = (Get-FileHash "Hotfix.owf" -Algorithm SHA256).Hash.ToLower()
|
||||
}
|
||||
|
||||
$sideloadify_sha256 = ""
|
||||
if (Test-Path "sideloadify-cli.cache") {
|
||||
$sideloadify_sha256 = (Get-FileHash "sideloadify-cli.cache" -Algorithm SHA256).Hash
|
||||
}
|
||||
if ($sideloadify_sha256 -ne "EE990FF8366E49DE5AF5A80DB845A9BFE9285092365E3A887FDFC76EB20C61AF") {
|
||||
Invoke-WebRequest -Uri "https://github.com/Sainan/Sideloadify/releases/download/1.1.0/sideloadify-cli.exe" -OutFile "sideloadify-cli.cache"
|
||||
}
|
||||
|
||||
$should_sleep = $false
|
||||
|
||||
if ($sha256 -ne $latest.sha256 -or $hotfix_sha256 -ne $latest.hotfix_sha256) {
|
||||
if ($latest.hotfix -ne "") {
|
||||
Write-Host "Downloading OpenWF Bootstrapper v$($latest.version) $($latest.hotfix)..."
|
||||
}
|
||||
else {
|
||||
Write-Host "Downloading OpenWF Bootstrapper v$($latest.version)..."
|
||||
}
|
||||
|
||||
if ($sha256 -ne $latest.sha256) {
|
||||
Invoke-WebRequest -Uri "https://openwf.io/supplementals/client%20drop-in/$($latest.version)/dwmapi.dll" -OutFile $dll_path
|
||||
}
|
||||
if ($hotfix_sha256 -ne $latest.hotfix_sha256) {
|
||||
if ($latest.hotfix -ne "") {
|
||||
Invoke-WebRequest -Uri "https://openwf.io/supplementals/client%20drop-in/$($latest.version)/$($latest.hotfix)/Hotfix.owf" -OutFile "Hotfix.owf"
|
||||
}
|
||||
else {
|
||||
Remove-Item "Hotfix.owf"
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host "Your OpenWF Bootstrapper is up-to-date."
|
||||
$should_sleep = $true
|
||||
}
|
||||
|
||||
Rename-Item -Path "sideloadify-cli.cache" -NewName "sideloadify-cli.exe"
|
||||
$sideloadified = (./sideloadify-cli.exe ../Warframe.x64.exe).Contains(" has successfully been sideloadified.")
|
||||
Rename-Item -Path "sideloadify-cli.exe" -NewName "sideloadify-cli.cache"
|
||||
if ($sideloadified) {
|
||||
Write-Host "Warframe.x64.exe has successfully been sideloadified."
|
||||
$should_sleep = $true
|
||||
}
|
||||
if ($should_sleep) {
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
28
Hotkeys.json
Normal file
28
Hotkeys.json
Normal file
@ -0,0 +1,28 @@
|
||||
[
|
||||
// By default, O opens the in-game settings:
|
||||
|
||||
{
|
||||
"key": "O",
|
||||
"script": "owf_toggle_script[[samples/Settings.pluto]]"
|
||||
},
|
||||
|
||||
// Some additional samples:
|
||||
|
||||
// {
|
||||
// "key": "K",
|
||||
// "script": "owf_toggle_script[[samples/Cycle Camera.pluto]]"
|
||||
// },
|
||||
|
||||
// {
|
||||
// "key": "N",
|
||||
// "script": "owf_toggle_script[[samples/Noclip.pluto]]"
|
||||
// },
|
||||
|
||||
// {
|
||||
// "key": 186, // the key to the right of L
|
||||
// "shift": false,
|
||||
// "script": "set_ee_log_in_console(not get_ee_log_in_console())"
|
||||
// },
|
||||
|
||||
// The presence of a modifier (ctrl, shift, or alt) means it must be pressed/released depending on the value (true/false).
|
||||
]
|
||||
1
Label Replacements.cat.txt
Normal file
1
Label Replacements.cat.txt
Normal file
@ -0,0 +1 @@
|
||||
/Menu/ProjectName: Warframe [OpenWF]
|
||||
13
Metadata Patches/Untitled.txt
Normal file
13
Metadata Patches/Untitled.txt
Normal file
@ -0,0 +1,13 @@
|
||||
# Lines starting with # are a comment.
|
||||
#
|
||||
# An example patch that renames "Vitality" to "Moar Health" and changes it from +9% to +100%:
|
||||
#
|
||||
# /Lotus/Upgrades/Mods/Warframe/AvatarHealthMaxMod
|
||||
# LocalizeTag=Moar Health
|
||||
# r|Value=0.090910003|Value=1
|
||||
#
|
||||
# When this patch is applied and the type has been loaded by the game, you can get the effective metadata via the http interface:
|
||||
# http://localhost:6155/get_effective_metadata?/Lotus/Upgrades/Mods/Warframe/AvatarHealthMaxMod
|
||||
# For logging only, you can supply an empty patch or enable "save_all_metadata" in the Client Config at the expense of slower loading.
|
||||
#
|
||||
# Modifications to this file will only apply after a restart of the game.
|
||||
149
Reference Manual.html
Normal file
149
Reference Manual.html
Normal file
@ -0,0 +1,149 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>OpenWF Bootstrapper Manual</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
/* https://calamity-inc.github.io/Silver/base.css */
|
||||
|
||||
html
|
||||
{
|
||||
background: #111;
|
||||
color: #fff;
|
||||
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
margin: 8px 12px;
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
font-weight: 400;
|
||||
font-size: 2.5em;
|
||||
margin-block: 0.3em;
|
||||
}
|
||||
|
||||
h2
|
||||
{
|
||||
font-weight: 350;
|
||||
font-size: 2em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
h3
|
||||
{
|
||||
font-weight: 300;
|
||||
font-size: 1.5em;
|
||||
margin-block-end: 0.4em;
|
||||
}
|
||||
|
||||
p
|
||||
{
|
||||
margin-block: 0.5em;
|
||||
}
|
||||
|
||||
code
|
||||
{
|
||||
padding: 1px 2px;
|
||||
border: 1px solid #2f2f2f;
|
||||
}
|
||||
|
||||
li:not(:last-child)
|
||||
{
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
a
|
||||
{
|
||||
color: #257afb
|
||||
}
|
||||
|
||||
a:hover
|
||||
{
|
||||
color: #3586ff;
|
||||
}
|
||||
|
||||
a:focus
|
||||
{
|
||||
color: #4791ff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>OpenWF Bootstrapper Manual</h1>
|
||||
<p>While the main feature of the bootstrapper (wtsapi32.dll, dwmapi.dll, or version.dll) is to use a custom server with the game, it has other features as well.</p>
|
||||
<h2>Client Config.json</h2>
|
||||
<p>The bootstrapper's configuration is in <code>OpenWF/Client Config.json</code> relative to your game folder. It has the following fields:</p>
|
||||
<ul>
|
||||
<li><code>fallback_language</code> — If not empty, this language will be used when Warframe.x64.exe is invoked without a <code>language</code> command line argument.</li>
|
||||
<li><code>fallback_languageVO</code> — If not empty, this voiceover language will be used when Warframe.x64.exe is invoked without a <code>languageVO</code> command line argument.</li>
|
||||
<li><code>fallback_graphicsDriver</code> — If not empty, this graphics driver will be used when Warframe.x64.exe is invoked without a <code>graphicsDriver</code> command line argument.</li>
|
||||
<li><code>fallback_cluster</code> — The cluster to use when Warframe.x64.exe was double-clicked or the argument was simply omitted. Can be <code>public</code>, <code>test</code>, or <code>dev</code> — the latter two enable some more logging.</li>
|
||||
|
||||
<li><code>server_host</code> — The hostname or IP address to redirect game traffic to. This should match <code>myAddress</code> in SpaceNinjaServer.</li>
|
||||
<li><code>http_port</code> — The port to use for HTTP traffic. This should match <code>httpPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>https_port</code> — The port to use for HTTPS traffic. This should match <code>httpsPort</code> in SpaceNinjaServer.</li>
|
||||
<li><code>autologin</code> — Uses the provided credentials to automatically login on startup. If another instance is logged in on the same account, it will be forcefully logged out.</li>
|
||||
<li><code>autologin_email</code></li>
|
||||
<li><code>autologin_password</code> — The whirlpool hash of the password to use for autologin. You can simply enter your password and it will automatically be hashed and overwritten.</li>
|
||||
|
||||
<li><code>high_damage_numbers_patch</code> — If true, patches the game to display the exact number of damage that you dealt to fix -2147483648 showing up on high damage.</li>
|
||||
<li><code>simulacrum_blacklisted</code> — If true, blacklisted enemies are shown in the Simulacrum. Defaults to false to match the game.</li>
|
||||
<li><code>simulacrum_whitelisted</code> — If true, whitelisted enemies are shown in the Simulacrum. Defaults to true to match the game.</li>
|
||||
<li><code>pause_always_stops_time</code></li>
|
||||
<li><code>disable_nrs_connection</code> — If true, disables NRS connections, preventing the game from showing "Please ensure that your firewall permits UDP ports 4950 & 4955."</li>
|
||||
|
||||
<li><code>ee_log_in_console</code> — If true, writes everything that gets written to EE.log to the console as well.</li>
|
||||
<li><code>skip_mission_start_timer</code> — If true, disables the 5 second wait before a mission starts.</li>
|
||||
<li><code>logout_on_request_failure</code> — If false, the game will ignore HTTP request failures/timeouts instead of forcing a logout.</li>
|
||||
<li><code>fov_override</code> — If not 0, overrides the game's FOV setting. You can use any value from 1 to 226.</li>
|
||||
<li><code>forced_profile_dir</code> — An absolute path to a folder that will be used to read and write your game settings. Notably, this can be used to have the same settings regardless of username.</li>
|
||||
<li><code>auto_start_scripts</code> — A list of scripts to automatically start.</li>
|
||||
<li><code>alternative_loading</code> — Enables an alternative loading mode (<code>Server.FastLoad</code>) which also skips intro cutscenes when loading into a relay. However, this breaks some parts of The New War and possibly other missions.</li>
|
||||
<li><code>dont_resolve_labels</code> — If true, shows language tags instead of their associated value, e.g. <code>/Menu/Confirm_Item_Yes</code> instead of <code>YES</code>.</li>
|
||||
<li><code>save_all_metadata</code> — If true, implicitly creates an empty patch on every metadata read to make it available for get_effective_metadata requests. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_console</code> — If true, writes all metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_all_metadata_reads_to_ee_log</code> — If true, writes all metadata reads to EE.log. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_console</code> — If true, writes patched metadata reads to the console. May degrade performance.</li>
|
||||
<li><code>write_patches_metadata_reads_to_ee_log</code> — If true, writes patched metadata reads to EE.log. May degrade performance.</li>
|
||||
</ul>
|
||||
<h2>HTTP Interface</h2>
|
||||
<p>While the game is running, you can visit <a href="http://localhost:6155/" target="_blank">http://localhost:6155/</a> to modify some of the above options, access additional features like teleportation, and use scripts.</p>
|
||||
<h2>Command Line Arguments</h2>
|
||||
<p>The bootstrapper adds the <code>owfServerHost</code> command line argument, which can be used to override the <code>server_host</code> in the config.</p>
|
||||
<h2>Tunables</h2>
|
||||
<p>When connecting to a server, the bootstrapper requests <code>/custom/tunables.json</code> to check the JSON object for the presence of the following fields:</p>
|
||||
<ul>
|
||||
<li><code>prohibit_skip_mission_start_timer</code></li>
|
||||
<li><code>prohibit_fov_override</code></li>
|
||||
<li><code>prohibit_freecam</code></li>
|
||||
<li><code>prohibit_teleport</code></li>
|
||||
<li><code>prohibit_scripts</code></li>
|
||||
</ul>
|
||||
<p>The presence of a field disables the respective feature.</p>
|
||||
<p>To aid in troubleshooting, the bootstrapper assumes that a compatible server responds to this request with status code 200 and a valid JSON object, otherwise showing a warning popup.</p>
|
||||
<h2>Traffic Deviations</h2>
|
||||
<ul>
|
||||
<li>login.php & worldState.php requests have the extra query parameter <code>buildLabel</code> to indicate the client's buildLabel.</li>
|
||||
<li>login.php requests also have an extra <code>clientMod</code> parameter indicating the Bootstrapper's name and version. If Metadata Patches are in use, <code>metadataPatchesInUse=1</code> is added as well.</li>
|
||||
<li>inventory.php & missionInventoryUpdate.php requests have the extra query parameter <code>xpBasedLevelCapDisabled</code> to indicate that the client has been patched to accept any PlayerLevel and doesn't need XPInfo to match.</li>
|
||||
<li>The IRC <code>USER</code> message is adjusted to contain <code>nonce=...</code> in the 'realname' field.</li>
|
||||
</ul>
|
||||
<h2>Metadata Patches</h2>
|
||||
<p>Metadata Patches are loaded from <code>.txt</code> files in the <code>OpenWF/Metadata Patches/</code> folder.</p>
|
||||
<p>They are parsed line by line, with leading and trailing spaces and tabs being ignored:</p>
|
||||
<ul>
|
||||
<li><code>> /Path/Here</code> starts a patch that will be applied to <code>/Path/Here</code>.</li>
|
||||
<li><code>> /First/Path & /Second/Path</code> starts a patch that will be applied to <code>/First/Path</code> and <code>/Second/Path</code>. It is possible to stretch this over multiple lines by either ending a line with <code>&</code> or starting the new line <code>&</code>.</li>
|
||||
<li>Any line not starting with a special token (<code>></code>, <code>r|</code>, ...) is added as a prefix to all affected metadata. This works to add top-level properties but also to replace them because the game resolves duplicates by ignoring subsequent entries.</li>
|
||||
<li>Lines starting with <code>r|</code> create replacements, e.g. <code>r|A|Z</code> replaces all instances of <code>A</code> with <code>Z</code> in affected metadata.</li>
|
||||
<li>Lines starting with <code>s|</code> create regex substitutions, e.g. <code>s|(?m)^(.+)=1$|$1=0</code> would replace a value of 1 on any line with a 0, using the 'm' flag here so ^ and $ also match on line boundaries. See <a href="https://github.com/calamity-inc/Soup/blob/senpai/docs/user/regex.md" target="_blank">here</a> for more information about the Regex engine.</li>
|
||||
</ul>
|
||||
<p>If multiple patches affect the same absolute path, they are combined.</p>
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
797
Script API Reference.pluto
Normal file
797
Script API Reference.pluto
Normal file
File diff suppressed because one or more lines are too long
9
Scripts/samples/Auto Teleport to Waypoint.pluto
Normal file
9
Scripts/samples/Auto Teleport to Waypoint.pluto
Normal file
@ -0,0 +1,9 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
for gRegion:GetLocalPlayer():GetHudStatus():GetFlashMarkers() as marker do
|
||||
if marker.markerType == 49 and not marker.garbage then
|
||||
gRegion:GetLocalPlayerAvatar():SetPosition(marker.baseMarkerInfo:GetPosition())
|
||||
marker.baseMarkerInfo:Destroy()
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
9
Scripts/samples/Become The Stalker.pluto
Normal file
9
Scripts/samples/Become The Stalker.pluto
Normal file
@ -0,0 +1,9 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local name = "/Lotus/Powersuits/Stalker/Stalker"
|
||||
|
||||
local loader = UISys.ScriptResLoader_Create({ name })
|
||||
repeat yield() until loader:IsDone()
|
||||
|
||||
gRegion:GetLocalPlayerAvatar():InventoryControl():RemoveItem(Engine.SLOT_4, true)
|
||||
gRegion:GetLocalPlayerAvatar():GiveItem(Type(name), true)
|
||||
gRegion:GetLocalPlayerAvatar():InventoryControl():GetActivePowerSuit():SetXP(1600000)
|
||||
140
Scripts/samples/Chat Commands.pluto
Normal file
140
Scripts/samples/Chat Commands.pluto
Normal file
@ -0,0 +1,140 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local function streaming_request(names)
|
||||
local loader = UISys.ScriptResLoader_Create(names)
|
||||
repeat yield() until loader:IsDone()
|
||||
end
|
||||
|
||||
local commands = {}
|
||||
commands["god"] = function()
|
||||
local avatar = gRegion:GetLocalPlayerAvatar()
|
||||
if avatar instanceof LotusVehicleAvatar then
|
||||
avatar = avatar:GetRider()
|
||||
end
|
||||
if avatar:DamageControl():HasTemporaryImmunity() then
|
||||
avatar:DamageControl():RemoveTemporaryImmunity()
|
||||
chat_system_reply("Removed immunity.")
|
||||
else
|
||||
avatar:DamageControl():GiveTemporaryImmunity(500000, 500000)
|
||||
chat_system_reply("Granted immunity.")
|
||||
end
|
||||
end
|
||||
commands["suicide"] = function()
|
||||
if gGameRules instanceof LotusGameRules then
|
||||
gRegion:GetLocalPlayerAvatar():Suicide()
|
||||
else
|
||||
chat_system_reply("That's not a good idea.")
|
||||
end
|
||||
end
|
||||
commands["killall"] = function()
|
||||
local player = gRegion:GetLocalPlayerAvatar()
|
||||
for gRegion:GetAvatars() as avatar do
|
||||
if not avatar:IsAvatarFriendly(player) then
|
||||
avatar:Suicide()
|
||||
end
|
||||
end
|
||||
end
|
||||
commands["kdrive"] = function()
|
||||
streaming_request({ "/Lotus/Types/Enemies/Corpus/Venus/Hoverboard/CrpHoverboardUnmannedAvatar" })
|
||||
gRegion:CreateEntity(Type("/Lotus/Types/Enemies/Corpus/Venus/Hoverboard/CrpHoverboardUnmannedAvatar"))
|
||||
end
|
||||
commands["dargyn"] = function()
|
||||
streaming_request({ "/Lotus/Types/Enemies/Grineer/Eidolon/GrineerSkiff/GrineerSkiffUnmannedAvatar" })
|
||||
gRegion:CreateEntity(Type("/Lotus/Types/Enemies/Grineer/Eidolon/GrineerSkiff/GrineerSkiffUnmannedAvatar"))
|
||||
end
|
||||
commands["kaithe"] = function()
|
||||
gRegion:GetNpcMgr():CreateAgentAtPosition(Type("/Lotus/Types/NeutralCreatures/ErsatzHorse/ErsatzHorseUnmannedGearSummonItemAgent"), gRegion:GetLocalPlayerAvatar():GetPosition(), ZERO_ROTATION)
|
||||
end
|
||||
commands["simulacrum"] = function()
|
||||
local args = Engine.OpenLevelArgs()
|
||||
args:SetLevel("/Lotus/Levels/Tenno/SimulacrumEnemySpawnerC.level")
|
||||
args:SetGameRules("/Lotus/Types/GameRules/LotusDangerRoomGameRules")
|
||||
Engine.OpenLevel(args)
|
||||
end
|
||||
commands["level"] = function(text)
|
||||
local level = text:split(" ")[2]
|
||||
chat_system_reply("Loading level "..level)
|
||||
local args = Engine.OpenLevelArgs()
|
||||
args:SetLevel(level)
|
||||
Engine.OpenLevel(args)
|
||||
end
|
||||
commands["captura"] = function(text)
|
||||
local level = text:split(" ")[2]
|
||||
chat_system_reply("Opening Captura in "..level)
|
||||
local args = Engine.OpenLevelArgs()
|
||||
args:SetLevel(level)
|
||||
args:SetGameRules("/Lotus/Types/GameRules/LotusPhotoBoothGameRules")
|
||||
Engine.OpenLevel(args)
|
||||
end
|
||||
commands["energy"] = function()
|
||||
local avatar = gRegion:GetLocalPlayerAvatar()
|
||||
if avatar instanceof LotusVehicleAvatar then
|
||||
avatar = avatar:GetRider()
|
||||
end
|
||||
avatar:InventoryControl():GetActivePowerSuit():SetMaxEnergy(1000000)
|
||||
avatar:InventoryControl():GetActivePowerSuit():SetEnergy(1000000)
|
||||
end
|
||||
commands["scale"] = function(text)
|
||||
local scale = tonumber(text:split(" ")[2])
|
||||
if scale ~= 0 then
|
||||
gRegion:GetLocalPlayerAvatar():SetMeshScale(scale)
|
||||
else
|
||||
chat_system_reply("That's not a good idea.")
|
||||
end
|
||||
end
|
||||
commands["timescale"] = function(text)
|
||||
local scale = tonumber(text:split(" ")[2])
|
||||
if scale == 1 then
|
||||
gGameRules:CancelSlomo()
|
||||
elseif scale > 0 then
|
||||
gGameRules:RequestSlomo(scale)
|
||||
else
|
||||
chat_system_reply("That's not a good idea.")
|
||||
end
|
||||
end
|
||||
commands["pause"] = function()
|
||||
gGameRules:RequestPause()
|
||||
end
|
||||
commands["unpause"] = function()
|
||||
gGameRules:RequestUnpause()
|
||||
end
|
||||
commands["script"] = function(text)
|
||||
local query = text:sub(text:find(" ") + 1):lower()
|
||||
if query:sub(-6) ~= ".pluto" then
|
||||
query ..= ".pluto"
|
||||
end
|
||||
if script := owf_get_running_scripts():find(|x| -> x:lower() == query) then
|
||||
owf_stop_script(script)
|
||||
chat_system_reply($"Stopped {script}.")
|
||||
elseif script := owf_get_available_scripts():find(|x| -> x:lower() == query) then
|
||||
owf_start_script(script)
|
||||
chat_system_reply($"Started {script}.")
|
||||
else
|
||||
chat_system_reply($"No such script: {query}")
|
||||
end
|
||||
end
|
||||
commands["sync"] = function()
|
||||
gGameData:SyncInventoryFromDB()
|
||||
end
|
||||
commands["resync"] = commands["sync"]
|
||||
commands["unstick"] = function()
|
||||
gGameRules:UnstickLocalPlayer()
|
||||
end
|
||||
commands["quit"] = function()
|
||||
gFlashMgr:ExecuteToolMenuCommand(Resource("/EE/Editor/ToolMenus/Commands/CmdQuit"))
|
||||
end
|
||||
for prefix in commands do
|
||||
chat_subscribe_prefix("/"..prefix, true)
|
||||
chat_subscribe_outgoing_prefix("$"..prefix)
|
||||
end
|
||||
repeat
|
||||
while evt := owf_next_event() do
|
||||
if evt.type == OWF_EVT_SUBMIT_CHAT_MESSAGE or evt.type == OWF_EVT_OUTGOING_CHAT_MESSAGE then
|
||||
for prefix, f in commands do
|
||||
if evt.text:sub(2, #prefix + 1) == prefix then
|
||||
f(evt.text)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
6
Scripts/samples/Complete Wave or Mission.pluto
Normal file
6
Scripts/samples/Complete Wave or Mission.pluto
Normal file
@ -0,0 +1,6 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
if gGameRules instanceof LotusGameRules then
|
||||
gGameRules:OpenMissionContinueDialog(nil)
|
||||
else
|
||||
print("Not available in the current mission")
|
||||
end
|
||||
13
Scripts/samples/Cycle Camera.pluto
Normal file
13
Scripts/samples/Cycle Camera.pluto
Normal file
@ -0,0 +1,13 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
if gRegion:GetLocalPlayerAvatar():isFollowedByCamera() then
|
||||
-- Normal -> Freecam
|
||||
gRegion:GetLocalPlayer():setControllingCamera(true)
|
||||
gRegion:GetLocalPlayerAvatar():ControlCamera(false)
|
||||
elseif gRegion:GetLocalPlayer():isControllingCamera() then
|
||||
-- Freecam -> Locked In Place
|
||||
gRegion:GetLocalPlayer():setControllingCamera(false)
|
||||
else
|
||||
-- Locked In Place -> Normal
|
||||
gRegion:GetLocalPlayer():setControllingCamera(false)
|
||||
gRegion:GetLocalPlayerAvatar():ControlCamera(true)
|
||||
end
|
||||
26
Scripts/samples/Detailed Enemy HP.pluto
Normal file
26
Scripts/samples/Detailed Enemy HP.pluto
Normal file
@ -0,0 +1,26 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local Health = Localize("/Lotus/Language/Labels/HUD_COLOR_HEALTH")
|
||||
local Shield = Localize("/Lotus/Language/Labels/HUD_COLOR_SHIELD")
|
||||
local Armor = Localize("/Lotus/Language/Labels/HUD_COLOR_ARMOR")
|
||||
local Overguard = Localize("/Lotus/Language/Labels/HUD_COLOR_PROTECTED_HEALTH")
|
||||
repeat
|
||||
for gRegion:FindAll(Type("/Lotus/Types/Game/LotusNpcAvatar")) as ent do
|
||||
local dc = ent:DamageControl()
|
||||
|
||||
local name = Localize(ent:GetLocTag():c_str())
|
||||
if ent:GetEnhancementCount() ~= 0 then
|
||||
name = Localize(ent:GetEnhancementLocTag():c_str(), {
|
||||
ENEMY = name
|
||||
})
|
||||
end
|
||||
|
||||
ent:SetDynamicUIName(true)
|
||||
ent:SetUIName(
|
||||
name
|
||||
.."\r\n"..Health..": "..string.formatint(ent:GetHealth()).." / "..string.formatint(ent:GetMaxHealth())
|
||||
.."\r\n"..Shield..": "..string.formatint(dc:GetShield()).." / "..string.formatint(dc:GetMaxShield())
|
||||
.."\r\n"..Armor..": "..string.formatint(dc:GetArmourRating())
|
||||
.."\r\n"..Overguard..": "..string.formatint(dc:GetOverguardAmount())
|
||||
)
|
||||
end
|
||||
until yield()
|
||||
8
Scripts/samples/Enter Simulacrum.pluto
Normal file
8
Scripts/samples/Enter Simulacrum.pluto
Normal file
@ -0,0 +1,8 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
while not gPlayerProfileMgr:IsLoggedIn() do
|
||||
yield()
|
||||
end
|
||||
local args = Engine.OpenLevelArgs()
|
||||
args:SetLevel("/Lotus/Levels/Tenno/SimulacrumEnemySpawnerC.level")
|
||||
args:SetGameRules("/Lotus/Types/GameRules/LotusDangerRoomGameRules")
|
||||
Engine.OpenLevel(args)
|
||||
22
Scripts/samples/First Person View.pluto
Normal file
22
Scripts/samples/First Person View.pluto
Normal file
@ -0,0 +1,22 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local in_air_toggle = owf_script_add_toggle("In Air")
|
||||
repeat
|
||||
local cc = gRegion:GetLocalPlayer():CameraControl()
|
||||
cc:SetViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetAimViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetRunViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetDodgeOffset(Vector(0, -0.1, 0.5))
|
||||
if in_air_toggle.value then
|
||||
cc:SetInAirViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetInAirAimViewOffset(Vector(0, -0.1, 0.5))
|
||||
end
|
||||
cc:SetMeleeOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetCoverLeftViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetCoverRightViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetCrouchCoverAimLeftViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetCrouchCoverAimRightViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetWallRunLeftViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetWallRunRightViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetWallRunLeftAimViewOffset(Vector(0, -0.1, 0.5))
|
||||
cc:SetWallRunRightAimViewOffset(Vector(0, -0.1, 0.5))
|
||||
until yield()
|
||||
17
Scripts/samples/Freecam Teleport on Disable.pluto
Normal file
17
Scripts/samples/Freecam Teleport on Disable.pluto
Normal file
@ -0,0 +1,17 @@
|
||||
local was_in_freecam = false
|
||||
local last_pos
|
||||
repeat
|
||||
if avatar := gRegion:GetLocalPlayerAvatar() then
|
||||
if avatar:isFollowedByCamera() then
|
||||
if was_in_freecam then
|
||||
was_in_freecam = false
|
||||
avatar:SetPosition(last_pos)
|
||||
end
|
||||
else
|
||||
was_in_freecam = gRegion:GetLocalPlayer():isControllingCamera()
|
||||
if was_in_freecam then
|
||||
last_pos = gRegion:GetGameCamera():GetPosition()
|
||||
end
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
19
Scripts/samples/Freecam Up Down.pluto
Normal file
19
Scripts/samples/Freecam Up Down.pluto
Normal file
@ -0,0 +1,19 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
$define VK_CONTROL = 0x11
|
||||
$define VK_SPACE = 0x20
|
||||
|
||||
local Y_STEP <const> = Vector(0, 0.01, 0)
|
||||
|
||||
local t = os.millis()
|
||||
repeat
|
||||
local delta = os.millis() - t
|
||||
if gRegion:GetLocalPlayer():isControllingCamera() then
|
||||
if owf_is_key_down(VK_SPACE) then
|
||||
gRegion:GetGameCamera():SetPosition(gRegion:GetGameCamera():GetPosition() + Y_STEP * delta)
|
||||
end
|
||||
if owf_is_key_down(VK_CONTROL) then
|
||||
gRegion:GetGameCamera():SetPosition(gRegion:GetGameCamera():GetPosition() - Y_STEP * delta)
|
||||
end
|
||||
end
|
||||
t = os.millis()
|
||||
until yield()
|
||||
15
Scripts/samples/Godmode.pluto
Normal file
15
Scripts/samples/Godmode.pluto
Normal file
@ -0,0 +1,15 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
if avatar := gRegion:GetLocalPlayerAvatar() then
|
||||
if avatar instanceof LotusVehicleAvatar then
|
||||
avatar = avatar:GetRider()
|
||||
end
|
||||
avatar:DamageControl():GiveTemporaryImmunity(500000, 500000)
|
||||
end
|
||||
until not pcall(yield)
|
||||
|
||||
local avatar = gRegion:GetLocalPlayerAvatar()
|
||||
if avatar instanceof LotusVehicleAvatar then
|
||||
avatar = avatar:GetRider()
|
||||
end
|
||||
avatar:DamageControl():RemoveTemporaryImmunity()
|
||||
9
Scripts/samples/Increase Damage.pluto
Normal file
9
Scripts/samples/Increase Damage.pluto
Normal file
@ -0,0 +1,9 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
if weapon := gRegion:GetLocalPlayerAvatar():InventoryControl():GetWeaponInHand(0) then
|
||||
local impactBehavior = weapon:GetActiveImpactBehavior()
|
||||
impactBehavior.criticalHitChance = 10000
|
||||
impactBehavior.criticalHitDamageMultiplier = 10000
|
||||
print("Your weapon damage has been increased!")
|
||||
else
|
||||
print("You don't seem to have a weapon in hand.")
|
||||
end
|
||||
9
Scripts/samples/Kill All Enemies.pluto
Normal file
9
Scripts/samples/Kill All Enemies.pluto
Normal file
@ -0,0 +1,9 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
local player = gRegion:GetLocalPlayerAvatar()
|
||||
for gRegion:GetAvatars() as avatar do
|
||||
if not avatar:IsAvatarFriendly(player) then
|
||||
avatar:Suicide()
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
8
Scripts/samples/Loot Party.pluto
Normal file
8
Scripts/samples/Loot Party.pluto
Normal file
@ -0,0 +1,8 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
for gRegion:GetAvatars() as avatar do
|
||||
if inventory := avatar:InventoryControl() then
|
||||
inventory:DoItemDrop()
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
10
Scripts/samples/No Ability Cooldowns.pluto
Normal file
10
Scripts/samples/No Ability Cooldowns.pluto
Normal file
@ -0,0 +1,10 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
if suit := gRegion:GetLocalPlayerAvatar():InventoryControl():GetActivePowerSuit() then
|
||||
for i = 0, 3 do
|
||||
if ability := suit:GetAbilityByIndex(i) then
|
||||
ability:SetCooldownTime(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
27
Scripts/samples/Noclip.pluto
Normal file
27
Scripts/samples/Noclip.pluto
Normal file
@ -0,0 +1,27 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local avatar
|
||||
local function disable()
|
||||
if not IsNull(avatar) then
|
||||
avatar:SetCustomAnimController(nil)
|
||||
avatar:SetCustomMotionController(nil)
|
||||
if (mc := avatar:MotionControl()) instanceof LotusSpaceFlightMotionController then
|
||||
mc:EnableFlight(false)
|
||||
end
|
||||
avatar:SetCustomCameraController(nil)
|
||||
avatar:SetPostureModifier(PostureModifier.PM_AIRBORNE, false)
|
||||
avatar:SetCollisionEnabled(true)
|
||||
end
|
||||
end
|
||||
repeat
|
||||
if avatar ~= gRegion:GetLocalPlayerAvatar() then
|
||||
disable()
|
||||
avatar = gRegion:GetLocalPlayerAvatar()
|
||||
end
|
||||
if not IsNull(avatar) then
|
||||
avatar:SetCustomAnimController(Type("/Lotus/Powersuits/Fairy/FairyFlightAnimController"))
|
||||
avatar:SetCustomMotionController(Type("/Lotus/Types/Game/LotusGroundFlightMotionController"))
|
||||
avatar:SetCustomCameraController(Type("/Lotus/Types/Player/SpaceBattle/SpaceMoveCameraController"))
|
||||
avatar:SetCollisionEnabled(false)
|
||||
end
|
||||
until not pcall(yield)
|
||||
disable()
|
||||
59
Scripts/samples/Settings.pluto
Normal file
59
Scripts/samples/Settings.pluto
Normal file
@ -0,0 +1,59 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
local { CHECKBOX, INPUTBOX } = require "Lotus.Interface.LotusUtilities"
|
||||
|
||||
local dict = get_lang_dict()
|
||||
local options = {
|
||||
{ dict.high_damage_numbers_patch, get_high_damage_numbers_patch, set_high_damage_numbers_patch },
|
||||
{ dict.skip_mission_start_timer, get_skip_mission_start_timer, set_skip_mission_start_timer },
|
||||
{ dict.simulacrum_blacklisted, get_simulacrum_blacklisted, set_simulacrum_blacklisted },
|
||||
{ dict.simulacrum_whitelisted, get_simulacrum_whitelisted, set_simulacrum_whitelisted },
|
||||
{ dict.alternative_loading, get_alternative_loading, set_alternative_loading },
|
||||
{ dict.ee_log_in_console, get_ee_log_in_console, set_ee_log_in_console },
|
||||
{ dict.dont_resolve_labels, get_dont_resolve_labels, set_dont_resolve_labels },
|
||||
{ dict.fov_override, get_fov_override, |s| -> set_fov_override(tonumber(s) or 0) },
|
||||
}
|
||||
|
||||
local done = false
|
||||
local movie = _T.OpenScreen("GenericSettings")
|
||||
movie:Execute("SetTitle", "OpenWF In-Game Options")
|
||||
function _T.owfSampleSettingsChangesDone(inputs, cancel)
|
||||
if not cancel then
|
||||
for i, opt in options do
|
||||
local value = type(opt[4]) == "boolean" ? inputs[i].mValue : inputs[i].mContent
|
||||
if opt[4] ~= value then
|
||||
print(opt[1].." set to "..value)
|
||||
opt[3](value)
|
||||
end
|
||||
end
|
||||
end
|
||||
done = true
|
||||
end
|
||||
movie:Execute("SetCallBack", "owfSampleSettingsChangesDone")
|
||||
function _T.owfSampleGetSettings()
|
||||
return options:mapped(function(opt)
|
||||
opt[4] = opt[2]()
|
||||
if type(opt[4]) == "boolean" then
|
||||
return {
|
||||
mLabel = opt[1],
|
||||
mType = CHECKBOX,
|
||||
mValue = opt[4],
|
||||
}
|
||||
end
|
||||
return {
|
||||
mLabel = opt[1],
|
||||
mType = INPUTBOX,
|
||||
mContent = opt[4],
|
||||
mMaxChars = 500,
|
||||
mMultiLine = false,
|
||||
mSkipAutoFocus = true,
|
||||
}
|
||||
end)
|
||||
end
|
||||
movie:Execute("SetElementsFunction", "owfSampleGetSettings")
|
||||
movie:Execute("SetConfirmButtonActive", "true")
|
||||
movie:Execute("EnableHints", "")
|
||||
repeat
|
||||
until done or not pcall(yield)
|
||||
if not IsNull(movie) then
|
||||
movie:Close()
|
||||
end
|
||||
7
Scripts/samples/Speedometer.pluto
Normal file
7
Scripts/samples/Speedometer.pluto
Normal file
@ -0,0 +1,7 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
if _T.AddHudTracker then
|
||||
require("Lotus.Scripts.Libs.ObjectiveText").SetPrimaryObjText(string.format("%.2f KMH", (gRegion:GetLocalPlayerAvatar():GetSpeed() * 3.6)))
|
||||
end
|
||||
until not pcall(yield)
|
||||
require("Lotus.Scripts.Libs.ObjectiveText").ClearPrimaryObjText()
|
||||
11
Scripts/samples/Wallhack.pluto
Normal file
11
Scripts/samples/Wallhack.pluto
Normal file
@ -0,0 +1,11 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
repeat
|
||||
local npcAvatars = gRegion:FindAll(gLotusNpcAvatarType)
|
||||
for npcAvatars as avatar do
|
||||
if IsNull(avatar:GetAttachment(Type("/Lotus/Fx/Gameplay/Fishing/FishHighlightVision"))) then
|
||||
local proj = avatar:Attach(Type("/Lotus/Fx/Gameplay/Fishing/FishHighlightVision"), EMPTY_SYMBOL, ZERO_VECTOR, ZERO_ROTATION)
|
||||
proj:SetTint(Color(255, 0, 0))
|
||||
proj:SetMaterialParam(Symbol("FadeParams"), 0, 100)
|
||||
end
|
||||
end
|
||||
until yield()
|
||||
5
Scripts/samples/Watermark.pluto
Normal file
5
Scripts/samples/Watermark.pluto
Normal file
@ -0,0 +1,5 @@
|
||||
-- Modifications to sample scripts will be lost the next time you start the game.
|
||||
owf_overlay_add_text(12, 12, "OpenWF", OWF_FONT_SIMPLE8, 0, 0, 0, 2) -- shadow
|
||||
owf_overlay_add_text(10, 10, "OpenWF", OWF_FONT_SIMPLE8, 90, 253, 123, 2) -- text
|
||||
owf_overlay_update()
|
||||
while pcall(yield) do end -- keep the script running
|
||||
BIN
sideloadify-cli.cache
Normal file
BIN
sideloadify-cli.cache
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user