commit 3a3257fa37e78afc717d00f3f4ccc8f2a6941f5f
Author: wxhn1225 <45218021+wxhn1225@users.noreply.github.com>
Date: Mon Oct 6 18:27:00 2025 +0800
init
diff --git a/Client Config.json b/Client Config.json
new file mode 100644
index 0000000..c81e595
--- /dev/null
+++ b/Client Config.json
@@ -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
+}
\ No newline at end of file
diff --git a/Content/0/H.Cache.bin!D_---------------------w b/Content/0/H.Cache.bin!D_---------------------w
new file mode 100644
index 0000000..8eb3c13
Binary files /dev/null and b/Content/0/H.Cache.bin!D_---------------------w differ
diff --git a/Content/0/H.Cache.bin!D_---------------------w.bak b/Content/0/H.Cache.bin!D_---------------------w.bak
new file mode 100644
index 0000000..8eb3c13
Binary files /dev/null and b/Content/0/H.Cache.bin!D_---------------------w.bak differ
diff --git a/Download Latest DLL.ps1 b/Download Latest DLL.ps1
new file mode 100644
index 0000000..b4191e3
--- /dev/null
+++ b/Download Latest DLL.ps1
@@ -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
+}
diff --git a/Hotkeys.json b/Hotkeys.json
new file mode 100644
index 0000000..18eda61
--- /dev/null
+++ b/Hotkeys.json
@@ -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).
+]
\ No newline at end of file
diff --git a/Label Replacements.cat.txt b/Label Replacements.cat.txt
new file mode 100644
index 0000000..7af15d4
--- /dev/null
+++ b/Label Replacements.cat.txt
@@ -0,0 +1 @@
+/Menu/ProjectName: Warframe [OpenWF]
\ No newline at end of file
diff --git a/Metadata Patches/Untitled.txt b/Metadata Patches/Untitled.txt
new file mode 100644
index 0000000..104c144
--- /dev/null
+++ b/Metadata Patches/Untitled.txt
@@ -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.
diff --git a/Reference Manual.html b/Reference Manual.html
new file mode 100644
index 0000000..284b254
--- /dev/null
+++ b/Reference Manual.html
@@ -0,0 +1,149 @@
+
+
+
+ OpenWF Bootstrapper Manual
+
+
+
+
+
+ OpenWF Bootstrapper Manual
+ 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.
+ Client Config.json
+ The bootstrapper's configuration is in OpenWF/Client Config.json relative to your game folder. It has the following fields:
+
+ fallback_language — If not empty, this language will be used when Warframe.x64.exe is invoked without a language command line argument.
+ fallback_languageVO — If not empty, this voiceover language will be used when Warframe.x64.exe is invoked without a languageVO command line argument.
+ fallback_graphicsDriver — If not empty, this graphics driver will be used when Warframe.x64.exe is invoked without a graphicsDriver command line argument.
+ fallback_cluster — The cluster to use when Warframe.x64.exe was double-clicked or the argument was simply omitted. Can be public, test, or dev — the latter two enable some more logging.
+
+ server_host — The hostname or IP address to redirect game traffic to. This should match myAddress in SpaceNinjaServer.
+ http_port — The port to use for HTTP traffic. This should match httpPort in SpaceNinjaServer.
+ https_port — The port to use for HTTPS traffic. This should match httpsPort in SpaceNinjaServer.
+ autologin — 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.
+ autologin_email
+ autologin_password — The whirlpool hash of the password to use for autologin. You can simply enter your password and it will automatically be hashed and overwritten.
+
+ high_damage_numbers_patch — If true, patches the game to display the exact number of damage that you dealt to fix -2147483648 showing up on high damage.
+ simulacrum_blacklisted — If true, blacklisted enemies are shown in the Simulacrum. Defaults to false to match the game.
+ simulacrum_whitelisted — If true, whitelisted enemies are shown in the Simulacrum. Defaults to true to match the game.
+ pause_always_stops_time
+ disable_nrs_connection — If true, disables NRS connections, preventing the game from showing "Please ensure that your firewall permits UDP ports 4950 & 4955."
+
+ ee_log_in_console — If true, writes everything that gets written to EE.log to the console as well.
+ skip_mission_start_timer — If true, disables the 5 second wait before a mission starts.
+ logout_on_request_failure — If false, the game will ignore HTTP request failures/timeouts instead of forcing a logout.
+ fov_override — If not 0, overrides the game's FOV setting. You can use any value from 1 to 226.
+ forced_profile_dir — 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.
+ auto_start_scripts — A list of scripts to automatically start.
+ alternative_loading — Enables an alternative loading mode (Server.FastLoad) which also skips intro cutscenes when loading into a relay. However, this breaks some parts of The New War and possibly other missions.
+ dont_resolve_labels — If true, shows language tags instead of their associated value, e.g. /Menu/Confirm_Item_Yes instead of YES.
+ save_all_metadata — If true, implicitly creates an empty patch on every metadata read to make it available for get_effective_metadata requests. May degrade performance.
+ write_all_metadata_reads_to_console — If true, writes all metadata reads to the console. May degrade performance.
+ write_all_metadata_reads_to_ee_log — If true, writes all metadata reads to EE.log. May degrade performance.
+ write_patches_metadata_reads_to_console — If true, writes patched metadata reads to the console. May degrade performance.
+ write_patches_metadata_reads_to_ee_log — If true, writes patched metadata reads to EE.log. May degrade performance.
+
+ HTTP Interface
+ While the game is running, you can visit http://localhost:6155/ to modify some of the above options, access additional features like teleportation, and use scripts.
+ Command Line Arguments
+ The bootstrapper adds the owfServerHost command line argument, which can be used to override the server_host in the config.
+ Tunables
+ When connecting to a server, the bootstrapper requests /custom/tunables.json to check the JSON object for the presence of the following fields:
+
+ prohibit_skip_mission_start_timer
+ prohibit_fov_override
+ prohibit_freecam
+ prohibit_teleport
+ prohibit_scripts
+
+ The presence of a field disables the respective feature.
+ 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.
+ Traffic Deviations
+
+ - login.php & worldState.php requests have the extra query parameter
buildLabel to indicate the client's buildLabel.
+ - login.php requests also have an extra
clientMod parameter indicating the Bootstrapper's name and version. If Metadata Patches are in use, metadataPatchesInUse=1 is added as well.
+ - inventory.php & missionInventoryUpdate.php requests have the extra query parameter
xpBasedLevelCapDisabled to indicate that the client has been patched to accept any PlayerLevel and doesn't need XPInfo to match.
+ - The IRC
USER message is adjusted to contain nonce=... in the 'realname' field.
+
+ Metadata Patches
+ Metadata Patches are loaded from .txt files in the OpenWF/Metadata Patches/ folder.
+ They are parsed line by line, with leading and trailing spaces and tabs being ignored:
+
+ > /Path/Here starts a patch that will be applied to /Path/Here.
+ > /First/Path & /Second/Path starts a patch that will be applied to /First/Path and /Second/Path. It is possible to stretch this over multiple lines by either ending a line with & or starting the new line &.
+ - Any line not starting with a special token (
>, r|, ...) 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.
+ - Lines starting with
r| create replacements, e.g. r|A|Z replaces all instances of A with Z in affected metadata.
+ - Lines starting with
s| create regex substitutions, e.g. s|(?m)^(.+)=1$|$1=0 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 here for more information about the Regex engine.
+
+ If multiple patches affect the same absolute path, they are combined.
+
+
+
diff --git a/Script API Reference.pluto b/Script API Reference.pluto
new file mode 100644
index 0000000..8b4ed63
--- /dev/null
+++ b/Script API Reference.pluto
@@ -0,0 +1,797 @@
+-- Classes
+
+Vector = require "pluto:vector3"
+
+class Rotation
+ function __construct(public heading = 0, public pitch = 0, public bank = 0)
+ function __tostring()
+
+class Symbol
+ function __construct(public name = "")
+ function __eq(b)
+ function __tostring()
+ function c_str()
+
+class Color
+ function __construct(public red, public green, public blue, public alpha = 255)
+ function __tostring()
+ function GetUInt()
+
+class ObjectType
+ function __eq(other)
+ function GetName()
+ function GetFullName()
+ function GetParent()
+ function getHierarchy()
+
+class Object
+ function __eq(other)
+ function GetType()
+ function GetName()
+ function GetFullName()
+ function IsA(type)
+
+class Player extends Object
+ function GetAvatar()
+ function GetPlayerName()
+ function GetClanName()
+ function GetPlayerAccountIDString()
+ function GetPlayerMatchMakingString()
+ function GetHudStatus()
+ function CameraControl()
+
+class HumanPlayer extends Player
+ function ToggleFreeCamera()
+ function isControllingCamera()
+ function setControllingCamera(b)
+ function AssignAvatar(avatar, b1 = true, b2 = true)
+ function SendGiveItem(resource, amount)
+
+class LotusHumanPlayer extends HumanPlayer
+ function GetLoadOut()
+
+class LoadOut
+ function GetStoredItemStruct(i1, i2)
+
+class MongoId
+
+class LotusProfileTypes.StoredItem
+ mItem
+ mModSlot
+ mCustSlot
+ mAttachedUpgrades
+
+class LotusProfileTypes.WeaponInfo
+ mItemId
+ mItemType
+ mModularParts
+ function GetCustomization()
+
+class LotusProfileTypes.UpgradeInfo
+ mItemType
+ mUpgradeFingerprint
+
+class BaseEntity extends Object
+
+class Entity extends BaseEntity
+ function GetPosition()
+ function SetPosition(pos)
+ function DistanceToEntity(b)
+ function GetRotation()
+ function GetSimRotation()
+ function SetRotation(rot)
+ function GetHealth()
+ function SetHealth(health)
+ function GetDrawOnTop()
+ function SetDrawOnTop(b)
+ function GetMeshScale()
+ function SetMeshScale(f)
+ function GetMesh()
+ function SetMesh(object, b1, b2)
+ function Attach(type, optionalBoneSymbol, optionalPosOffset)
+ function GetAttachment(type)
+ function GetAllAttachments(type)
+ function GetTag()
+ function SetTag(symbol)
+ function FirePort(port)
+ function SetVisibility(visible, delegateToAttachments = false)
+ function GetSpeed()
+ function Destroy()
+ function SetMaterialParam(symbol, f1, f2 = 3.4028235e38, f3 = 3.4028235e38, f4 = 3.4028235e38, b = false)
+ function RunScript(resource, funcSymbol, b)
+
+class BaseAvatar extends Entity
+ function GetMaxHealth(b = true)
+ function SetMaxHealth(health, b = false)
+ function Suicide()
+ function DamageControl()
+ function InventoryControl()
+ function InputControl()
+ function GiveItem(type, b)
+ function MotionControl()
+ function GetView()
+ function SetView(rot)
+ function GetCameraView()
+ function SetCameraView(rot)
+ function SetEyePosition(pos)
+ function GetFaction()
+ function GetOriginalFaction()
+ function SetFaction(symbol)
+ function GetLocTag()
+ function ClearAgent()
+ function PushInputFilter(resource)
+ function SetCustomAnimController(type)
+ function GetAnimControllerType()
+ function SetCustomMotionController(type)
+ function SetCustomCameraController(type)
+ function EnableRagdollRecovery(b1, b2)
+ function DamageDD(damageData)
+ function GetRagdoll()
+
+class Avatar extends BaseAvatar
+ function ControlCamera(b)
+ function isFollowedByCamera()
+
+class LotusAvatar extends Avatar
+ function IsAvatarFriendly(other)
+ function PlayEmote(resource)
+ function GetUIName()
+ function SetUIName(str)
+ function HasDynamicUIName()
+ function SetDynamicUIName(b)
+ function SetCollisionEnabled(b)
+ function SetCinematicID(symbol)
+
+class DamageControllerBase extends Object
+ function GiveTemporaryImmunity(a, b)
+ function HasTemporaryImmunity()
+ function RemoveTemporaryImmunity()
+ function GetShield()
+ function SetShield(i)
+ function GetMaxShield()
+ function SetMaxShield(i)
+ function GetOverguardAmount()
+ function SetOverguardAmount(i)
+ function GetOverguardMax()
+ function SetOverguardMax(i)
+
+class DamageController extends DamageControllerBase
+
+class LotusDamageController extends DamageController
+ function GetArmourRating()
+ function SetArmourRating(i)
+
+class InventoryControllerBase extends Object
+ function RemoveItem(slot, b)
+ function GetWeaponInHand(hand)
+ function AddUpgrade(upgradeType, operationType, value, _reserved = nil, _reserved = nil, damageType = DamageType.DT_ANY)
+
+class LotusInventoryController extends InventoryControllerBase
+ function GetActivePowerSuit()
+ function DoItemDrop()
+ function GetConsumableItem(idx)
+ function UseConsumableItem(idx)
+
+class ResourceBase extends Object
+
+class Mesh extends ResourceBase
+
+class Item extends Object
+ function GetAttachmentEntity(category, hand = 4)
+ function GetEnergyColor(outColor, secondary = false)
+
+class WeaponBase extends Item
+
+class WeaponEx extends WeaponBase
+ function GetActiveImpactBehavior()
+ function AddUpgrade(obj)
+
+class LotusWeapon extends WeaponEx
+ function GetXP()
+ function SetXP(xp)
+ function GetCustomization()
+ function SetCustomization(cust)
+ function SetModularParts(parts, gilded)
+
+class WeaponUpgrade extends Item
+
+class LotusWeaponUpgradeBase extends WeaponUpgrade
+ function InitializeFromFingerprint(str)
+
+class LotusArtifactUpgrade extends LotusWeaponUpgradeBase
+
+class WeaponImpactBehavior extends Object
+ criticalHitChance
+ criticalHitDamageMultiplier
+ instantImpulse
+
+class PowerSuit extends LotusWeapon
+ function SetEnergy(value)
+ function SetMaxEnergy(value)
+ function GetUnmodifiedMaxEnergy()
+ function GetCurEnergy()
+ function GetMaxEnergy()
+ function GetAbilityByIndex(i)
+ function AddAbilityByType(type, idx)
+
+class PowerSuitAbility extends Item
+ function GetCooldownDuration()
+ function SetCooldownDuration(val)
+ function GetCooldownTime()
+ function SetCooldownTime(val)
+ function AllowReactivate(b)
+
+class InputControllerBase extends Object
+
+class InputController extends InputControllerBase
+ function SetStopMovement(b)
+
+class GameRules extends Object
+ function IsPauseMenuShowing()
+ function RequestPause()
+ function RequestUnpause()
+ function RequestResource(name, callback)
+ function RequestSlomo(f)
+ function CancelSlomo()
+ function IsSlomo()
+ function getSlomoltiplier()
+ function setSlomoltiplier(f)
+
+class GameRulesImpl extends GameRules
+ function SetPauseDisabled(b)
+ function CanUnstick()
+ function UnstickLocalPlayer()
+
+class LotusBaseGameRules extends GameRulesImpl
+ function GetCurrentStarChart()
+ function GetStoreManifest()
+ function AddActiveLevelAuraUpgrade(type)
+ function RemoveActiveLevelAuraUpgrade(type)
+ function GetMission()
+
+class LotusGameRules extends LotusBaseGameRules
+ function OpenMissionContinueDialog()
+
+class LotusAttractModeGameRules extends GameRulesImpl
+ function GetStarChart()
+ function GetStoreManifest()
+
+class RadialSolarMap extends Object
+ function GetRegions()
+ function BuildMissionForLocation(symbol)
+ function SetLevelStreamingArgs(locationSymbol, openLevelArgs)
+
+class RadialRegion
+ name
+ sectors
+ droneDamage
+ damageChance
+ resources
+
+class RadialSector
+ name
+ unlocked
+ nodeType
+ missionTag
+ mission
+ challenges
+
+class LotusMissionInfo
+ missionType
+ minEnemyLevel
+ maxEnemyLevel
+ goalTag
+ activeMissionTag
+ location
+ levelOverride
+ gameRules
+ missionReward
+ missionRewardExtra
+ buddyAgents
+ miscItemFee
+ function EncodeAsString()
+ function GetEnemies()
+ function GetExtraEnemies()
+ function GetMissionEventResources()
+ function GetExtraMissionEventResources()
+ function GetAdvancedAiDirectorSpawns()
+ function GetCustomAdvancedAiDirectorSpawns()
+
+class MissionReward
+ credits
+ xp
+ items
+ countedItems
+ countedStoreItems
+ randomizedItems
+
+class MissionRewardItemManifest extends ResourceBase
+ function GetMaxAvailableTier()
+ function PickRandomItemIndex(tier, f)
+ function GetTieredItem(tier, i)
+
+class MissionRewardItem
+ function GetStoreItem()
+
+class MissionAI
+ agent
+
+class ChallengeBase extends Object
+
+class GenericChallenge extends ChallengeBase
+
+class ChallengeBase extends Object
+
+class StoreManifest extends Object
+ function GetStoreItemsOfType(objectType)
+ function GetGiftBonusItems()
+
+class StoreItem extends Object
+ function GetProductCategory()
+ function ExcludeFromCodex()
+ function ShowInMarket()
+
+class GiftBonusItem
+ gift
+ reward
+
+class CountedItem
+ mItemType
+ mItemCount
+
+class CountedStoreItem
+ mStoreItem
+ mItemCount
+
+class PickUpTypeRarity
+ mStoreItem
+ mItemType
+ mRarity
+
+class CodexManifest
+ function GetEnvironmentEntries()
+
+class CodexTypes.Entry
+ locName
+ icon
+ reqScans
+ secret
+ type
+
+class Texture extends ResourceBase
+
+class MotionControllerBase
+ function GetSpeedMultiplier()
+ function SetSpeedMultiplier(f)
+
+class LotusMotionController extends MotionControllerBase
+
+class LotusSpaceFlightMotionController extends LotusMotionController
+ function EnableFlight(b)
+
+class CameraControllerBase extends Object
+ function setFovMultiplier(fMul)
+ function getFovMultiplier()
+ function SetBaseFovOverride(fov)
+ function GetBaseFovOverride()
+ function GetViewOffset()
+ function SetViewOffset(vec)
+ function GetAimViewOffset()
+ function SetAimViewOffset(vec)
+ function GetRunViewOffset()
+ function SetRunViewOffset(vec)
+ function GetDodgeOffset()
+ function SetDodgeOffset(vec)
+ function GetInAirViewOffset()
+ function SetInAirViewOffset(vec)
+ function SetInAirAimViewOffset(vec)
+ function SetMeleeOffset(vec)
+ function SetCoverLeftViewOffset(vec)
+ function SetCoverRightViewOffset(vec)
+ function SetCrouchCoverAimLeftViewOffset(vec)
+ function SetCrouchCoverAimRightViewOffset(vec)
+ function SetWallRunLeftViewOffset(vec)
+ function SetWallRunRightViewOffset(vec)
+ function SetWallRunLeftAimViewOffset(vec)
+ function SetWallRunRightAimViewOffset(vec)
+
+class EngineNpcMgr extends Object
+ function GetAiDirector()
+
+class EngineAiDirector extends Object
+ function SetMaxPopulationSpawnCount(i)
+ function SetMaxAI(i)
+ function SetDifficulty(i)
+ function ClearEncounters()
+ function AddEncounter(type)
+ function SelectEncounterHintsWithType(type, minDist, maxDist)
+ function ActivateSpecificEncounterAtSpecificHint(hint, type)
+ function AddGlobalEncounterTag(symbol)
+ function RemoveGlobalEncounterTag(symbol)
+
+class NpcManager extends EngineNpcMgr
+ function PauseAllAgents()
+ function CreateAgentAtPosition(type, pos, rot, optionalSymbol, optionalLevel)
+
+class EngineNpcAgent extends Object
+ function GetAvatar()
+
+class LotusNpcAvatar extends LotusAvatar
+ function GetEnhancementCount()
+ function GetEnhancementLocTag()
+
+class LotusVehicleAvatar extends LotusNpcAvatar
+ function GetRider()
+ function GetTrickController()
+
+class TrickController extends Object
+ function SetMaxPointsPerCombo(pts)
+
+class HudStatus extends Object
+
+class LotusHudStatus extends HudStatus
+ function GetFlashMarkers()
+
+class FlashMarker
+ garbage
+ markerType
+ distanceToEye
+ pos
+ baseMarkerInfo
+ function ScreenX()
+ function ScreenY()
+ function ScreenZ()
+
+class BaseMarkerInfo extends Entity
+ function SetMarkerType(i)
+ function SetDisplayRange(range)
+
+class Effect extends Entity
+ function SetTint(color)
+
+class LensFlare extends Entity
+ function SetTint(color)
+
+class Decoration extends Entity
+ function TriggerAnimation()
+ function IsTriggeredAnimationDone()
+
+class Ragdoll extends Entity
+ function ApplyGlobalForce(vec, forceType)
+
+class WeaponCustomization
+ function GetSkin(iSlot)
+ function SetSkin(objectType, iSlot)
+ function GetColors(i)
+ function SetColors(i, v)
+
+class CustomizationColorPalette
+ mTintColor0
+ mTintColor1
+ mTintColor2
+ mTintColor3
+ mEmissiveColor0
+ mEmissiveColor1
+ mEnergyColor
+ mEnergyColor1
+ function GetColor(i)
+ function SetColor(i, c)
+ function Initialized(i)
+ function SetInitialized(i, b)
+
+class OverlayBase extends Object
+
+class FlashInstance extends OverlayBase
+ function AttachToEntity(ent, off, rot, vecScale)
+ function Execute(func, str)
+ function Close()
+
+class OverlayMgr
+ function SetSelectedStyle(resource)
+
+class PlayerProfile
+ function GetAccountIDString()
+
+class LevelInfo
+ postProcess
+
+class PostProcess
+ blur
+ motionBlurStrength
+ bloom
+ targetExposure
+ adaptationRateUp
+ adaptationRateDown
+ exposureConvergeSpeed
+ useBnwBuffer
+ bnwBufferInvert
+ bnwBufferBias
+ useExposureEVCurve
+ skyBloom
+ saturation
+ focalBlur
+ horizonDOF
+ horizonRadius
+ horizonFog
+ horizonFogRadius
+ horizonFogElevation
+ distanceFogDensity
+ heightFogFalloff
+ heightFogDensity
+ heightFogY
+ lightMapBoost
+ attenuateAudio
+ lightning
+ colorCorrectionConverge
+ saturationBias
+ brightnessBias
+ contrastBias
+ grainBias
+ focalNearPlane
+ focalNearDepth
+ focalFarPlane
+ focalFarDepth
+ radialBlurStrength
+ irradianceVolumeGain
+ sunShaftsDensity
+ sunShaftsDecay
+ sunShaftsMultiplier
+ sunShaftsFogAttenuation
+ sunShafts
+
+class Engine.OpenLevelArgs
+ function SetLevel(level)
+ function SetGameRules(gamerules)
+ function AddContextTag(tag)
+ function AddContextObject(objectType)
+
+class Engine.DamageData
+ baseAmount
+ criticalChance
+ criticalMultiplier
+ injuryType
+
+class UISys.ScriptResLoader
+ function IsDone()
+ function SpotLoad()
+ function Abort()
+
+-- Global functions
+
+function IsNull(val)
+function Sleep(ms)
+
+function Type(name)
+function Resource(name) -- constructs an Object instance
+function WeakResource(name) -- constructs an ObjectType instance
+function Range(minValue, maxValue)
+
+function Localize(loctag, subs = {})
+function AngleToDirection(rot)
+
+function Engine.OpenLevel(args)
+
+function UISys.ScriptResLoader_Create(names)
+
+-- OpenWF global functions
+
+function yield()
+function owf_create_thread(f)
+function get_lang_code()
+function get_lang_dict(lang = get_lang_code())
+function owf_get_build_label()
+function owf_get_build_version()
+function owf_get_build_hash()
+function owf_get_server_host()
+function owf_get_http_port()
+function owf_get_https_port()
+function owf_get_auth_query()
+function mem_scan_exe(sig)
+function mem_read_i8(addr)
+function mem_read_i16(addr)
+function mem_read_i32(addr)
+function mem_read_i64(addr)
+function mem_read_f32(addr)
+function mem_write_f32(addr, val)
+function chat_subscribe_prefix(prefix, block)
+function chat_unsubscribe_prefix(prefix)
+function chat_subscribe_outgoing_prefix(prefix)
+function chat_unsubscribe_outgoing_prefix(prefix)
+function chat_system_reply(text)
+function chat_add_to_sent_history(text)
+function chat_get_sent_history()
+function chat_get_sent_history_index()
+function chat_set_sent_history_index(idx)
+function owf_register_custom_route(path, mime, content)
+function owf_unregister_custom_route(path)
+function owf_subscribe_to_script_trigger(script, func, block)
+function owf_unsubscribe_from_script_trigger(script, func)
+function owf_script_add_toggle(name, value = false)
+function owf_script_register_channel(name)
+function owf_script_send_message(channel, text)
+function owf_get_available_scripts()
+function owf_get_running_scripts()
+function owf_start_script(name)
+function owf_stop_script(name)
+function owf_toggle_script(name)
+function owf_logout()
+
+function owf_reload_label_replacements()
+function owf_replace_label(tag, str)
+function owf_restore_label(tag)
+
+function owf_save_config()
+function get_high_damage_numbers_patch()
+function set_high_damage_numbers_patch(b)
+function get_skip_mission_start_timer()
+function set_skip_mission_start_timer(b)
+function get_simulacrum_blacklisted()
+function set_simulacrum_blacklisted(b)
+function get_simulacrum_whitelisted()
+function set_simulacrum_whitelisted(b)
+function get_alternative_loading()
+function set_alternative_loading(b)
+function get_ee_log_in_console()
+function set_ee_log_in_console(b)
+function get_dont_resolve_labels()
+function set_dont_resolve_labels(b)
+function get_fov_override()
+function set_fov_override(f)
+
+function owf_is_key_down(vk)
+function get_active_input_filter()
+function get_active_input_filter_allows_hotkeys()
+function owf_reload_hotkeys()
+
+function register_websocket_message_prefix(prefix)
+function unregister_websocket_message_prefix(prefix)
+function owf_broadcast_message(message, optionalRecipient)
+
+-- OpenWF events
+
+OWF_EVT_SUBMIT_CHAT_MESSAGE = 1
+OWF_EVT_OUTGOING_CHAT_MESSAGE = 2
+OWF_EVT_CUSTOM_ROUTE_SERVED = 3
+OWF_EVT_CALLBACK = 4
+OWF_EVT_SCRIPT_TRIGGERED = 5
+OWF_EVT_WEBSOCKET_MESSAGE = 6
+OWF_EVT_SCRIPT_MESSAGE = 7
+
+function owf_next_event()
+
+-- OpenWF Overlay. Any pixel with RGB=255,0,255 will show the game window underneath.
+
+OWF_FONT_SIMPLE8
+OWF_FONT_SIMPLE5
+
+function owf_overlay_get_size()
+function owf_overlay_add_rect(x, y, w, h, r, g, b)
+function owf_overlay_add_text(x, y, text, font, r, g, b, scale = 1)
+function owf_overlay_set_visibility(id, visible)
+function owf_overlay_set_colour(id, r, g, b)
+function owf_overlay_set_text(id, text)
+function owf_overlay_remove(id)
+function owf_overlay_update()
+function owf_measure_text(font, text)
+
+-- Global variables
+
+gRegion
+ function GetLocalPlayer()
+ function GetLocalPlayerAvatar()
+ function GetGameCamera()
+ function GetGameRules()
+ function GetAvatars()
+ function FindTagged(symbol)
+ function FindAll(type)
+ function CreateObject(type)
+ function CreateEntity(type, pos, rot)
+ function GetNpcMgr()
+ function Raycast(fromPos, toPos, avatar, _reserved_please_set_to_nil, outPos)
+ function GetLevelInfo()
+
+gGameRules
+gStarChart
+
+gFlashMgr
+ function ExecuteToolMenuCommand(resource)
+ function GotoMovie(resource)
+
+gGameData
+ function SyncInventoryFromDB(callback)
+
+gPlayerProfileMgr
+ function IsLoggedIn()
+ function GetPlayerProfile(i)
+
+gClient
+ function GetOverlayMgr()
+
+gEntityType = Type("/EE/Types/Engine/Entity")
+gBaseAvatarType = Type("/EE/Types/Engine/BaseAvatar")
+gLotusNpcAvatarType = Type("/Lotus/Types/Game/LotusNpcAvatar")
+gLotusVehicleAvatarType = Type("/Lotus/Types/Game/LotusVehicleAvatar")
+gLotusGameRulesType = Type("/Lotus/Types/Game/LotusGameRules")
+gLotusBasePvpGameRulesType = Type("/Lotus/Types/Game/LotusBasePvpGameRules")
+gLotusHubGameRulesType = Type("/Lotus/Types/Game/LotusHubGameRules")
+gLotusDuelGameRulesType = Type("/Lotus/Types/Game/LotusDuelGameRules")
+
+ZERO_VECTOR = Vector()
+ZERO_ROTATION = Rotation()
+EMPTY_SYMBOL = Symbol()
+
+Engine.SLOT_1 = 0 -- Secondary
+Engine.SLOT_2 = 1 -- Primary
+Engine.SLOT_3 = 2
+Engine.SLOT_4 = 3 -- Warframe
+Engine.SLOT_5 = 4
+Engine.SLOT_6 = 5 -- Melee
+Engine.SLOT_7 = 6
+Engine.SLOT_8 = 7
+Engine.SLOT_9 = 8
+Engine.SLOT_10 = 9
+Engine.SLOT_11 = 10
+Engine.SLOT_12 = 11
+Engine.SLOT_13 = 12
+Engine.SLOT_14 = 13
+Engine.INVALID = 14
+
+Lotus_Game.EMISSIVE_MAP_ATTEN = Symbol("EmissiveMapAtten")
+Lotus_Game.TINT_COLOR = Symbol("TintColor")
+Lotus_Game.UNLIT_ATTEN = Symbol("UnlitAtten")
+Lotus_Game.ALPHA_ATTEN = Symbol("AlphaAtten")
+Lotus_Game.CLOAK = Symbol("Cloak")
+Lotus_Game.V_SCALES = Symbol("vScales")
+Lotus_Game.V_SCALES_FADE = Symbol("vScalesFade")
+Lotus_Game.EMISSIVE_TINT_COLOR = Symbol("EmissiveTintColor")
+Lotus_Game.EMISSIVE_TINT_COLOR_HI = Symbol("EmissiveTintColorHi")
+Lotus_Game.EMISSIVE_TINT_COLOR_LO = Symbol("EmissiveTintColorLo")
+Lotus_Game.LOW_COLOR = Symbol("LowColor")
+Lotus_Game.HIGH_COLOR = Symbol("HighColor")
+Lotus_Game.TINT_COLOR0 = Symbol("TintColor0")
+Lotus_Game.TINT_COLOR1 = Symbol("TintColor1")
+Lotus_Game.TINT_COLOR2 = Symbol("TintColor2")
+Lotus_Game.TINT_COLOR3 = Symbol("TintColor3")
+
+UpgradeType = { NONE, AVATAR_ABILITY, AVATAR_ABILITY_AUGMENT, AVATAR_ABILITY_DURATION, AVATAR_ABILITY_EFFICIENCY, AVATAR_ABILITY_EFFICIENCY_MIN, AVATAR_ABILITY_EFFICIENCY_MAX, AVATAR_ABILITY_ENERGY_TO_SHIELD, AVATAR_ABILITY_ENERGY_TO_OVERSHIELD, AVATAR_ABILITY_RANGE, AVATAR_ABILITY_STRENGTH, AVATAR_ACROBATIC_SPEED, AVATAR_AFTERBURNER_MULTIPLIER, AVATAR_AIM_TIME, AVATAR_AIR_JUMP_HEIGHT, AVATAR_ALLOW_HEALTH_PICKUP, AVATAR_ALLOW_ENERGY_PICKUP, AVATAR_ARMOUR, AVATAR_AURA_EFFECTIVENESS_ON_ME, AVATAR_AURA_STRENGTH, AVATAR_AUTO_PARRY_CHANCE, AVATAR_BLEEDOUT_MODIFIER, AVATAR_BULLET_DODGE_ANGLE, AVATAR_BULLET_DODGE_CHANCE, AVATAR_CARRY_CAPACITY, AVATAR_CASTING_SPEED, AVATAR_CLEAR_TRANSFERENCE_STATIC_ON_KILL, AVATAR_CRIT_CHANCE, AVATAR_CRIT_CHANCE_LIMIT, AVATAR_CRIT_CHANCE_PER_PROC_ACTIVE, AVATAR_CRIT_CHANCE_STEALTH, AVATAR_CRIT_CHANCE_VULNERABILITY, AVATAR_CRIT_CHANCE_WEAKPOINT_VULNERABILITY, AVATAR_CRIT_DAMAGE, AVATAR_CRIT_DAMAGE_VULNERABILITY, AVATAR_CROWD_CONTROL_DAMAGE, AVATAR_CROWD_CONTROL_TIME_MULTIPLIER, AVATAR_DAMAGE_POWER_MULTIPLIER, AVATAR_DAMAGE_REDUCTION_DURING_REVIVE, AVATAR_DAMAGE_TAKEN, AVATAR_DAMAGE_VULNERABILITY, AVATAR_DAMAGE_WEAKPOINT_VULNERABILITY, AVATAR_DASH_DAMAGE, AVATAR_DASH_DISTANCE, AVATAR_DASH_RADIUS, AVATAR_DASH_CONTACT_ENERGY, AVATAR_DODGE_COOLDOWN, AVATAR_DODGE_COST_MULTIPLIER, AVATAR_DODGE_SPEED, AVATAR_DOUBLE_DROP_CHANCE, AVATAR_DROP_CHANCE_MODIFIER, AVATAR_GLOBAL_DROP_CHANCE_MODIFIER, AVATAR_GLORY_KILL_CHANCE, AVATAR_GLORY_KILL_HEALTH_RANGE, AVATAR_ENEMY_RADAR, AVATAR_ENERGY_GAIN_MULTIPLIER, AVATAR_ENERGY_ON_FULL_SHIELD_REGEN, AVATAR_ENERGY_SPAWN_PERCENT, AVATAR_ENERGY_TO_OVERSHIELDS_ON_SPAWN, AVATAR_EVADE_NPC_BULLET, AVATAR_EXPLOSION_DAMAGE, AVATAR_EXPLOSION_RADIUS, AVATAR_FALL_DAMAGE, AVATAR_FALL_IMPACT_AMOUNT, AVATAR_FALL_IMPACT_RADIUS, AVATAR_FREEZE_ON_MELEE_HIT_CHANCE, AVATAR_FREEZE_ON_MELEE_HIT_DURATION, AVATAR_FORCED_PROC_CHANCE, AVATAR_FULL_ENERGY_EFFECT_RANGE, AVATAR_HACK_CHANCE, AVATAR_HEAL_PERCENT_MAX_HEALTH, AVATAR_HEAL_RATE, AVATAR_HEAL_RATE_FORCED, AVATAR_HEALTH_MAX, AVATAR_HEALTH_MAX_INC_ON_PICKUP, AVATAR_HEAVY_LAND_RESIST_CHANCE, AVATAR_HEAVY_LAND_SPEED, AVATAR_INJURY_BLOCK_CHANCE, AVATAR_INJURY_BLOCK_CHANCE_CC, AVATAR_INJURY_ANIM_RATE, AVATAR_JOG_SPEED, AVATAR_JUMP_HEIGHT, AVATAR_KNOCKDOWN_RECOVERY_SPEED, AVATAR_LOOT_CHANCE, AVATAR_LOOT_RADAR, AVATAR_LOOT_RADAR_B, AVATAR_MARKED_DAMAGE_AMOUNT, AVATAR_MELEE_DAMAGE_REDUCTION, AVATAR_MELEE_DAMAGE_TO_JUMP_KICK, AVATAR_MOVEMENT_ACCELERATION, AVATAR_MOVEMENT_SPEED, AVATAR_NO_DEATH_PENALTY, AVATAR_NPC_HIT_CHANCE, AVATAR_NPC_VIS_RANGE, AVATAR_NPC_ENABLES_AUGMENT, AVATAR_NUM_JUMPS, AVATAR_OVERSHIELD_MAX, AVATAR_OVERGUARD_MAX, AVATAR_PICKUP_BONUS_AMOUNT, AVATAR_POWER_MAX, AVATAR_POWER_RATE, AVATAR_POWER_RATE_INC_ON_PICKUP, AVATAR_POWER_RATE_PERCENT_MAX, AVATAR_PROC_DAMAGE, AVATAR_PROC_IMMUNITY_DURATION, AVATAR_PROC_REFLECT_AMPLIFICATION, AVATAR_PROC_REFLECT_CHANCE, AVATAR_PROC_TIME, AVATAR_PROC_ABILITY_STACK, AVATAR_PROC_STACK, AVATAR_PROC_STACKED_UPGRADE_BASE_MODIFIER, AVATAR_PROC_CHANCE_VULNERABILITY, AVATAR_RAGE_BURN_RATE, AVATAR_REHACK_CHANCE, AVATAR_RESPAWN_TIME, AVATAR_REVENGE_DAMAGE_AMOUNT, AVATAR_REVENGE_DAMAGE_CHANCE, AVATAR_REVIVE_ASSIST, AVATAR_REVIVE_DISTANCE, AVATAR_REVIVE_SPEED, AVATAR_SENTINEL_ARMOUR_LINK, AVATAR_SENTINEL_CRIT_LINK, AVATAR_SENTINEL_FINISHER_DAMAGE, AVATAR_SENTINEL_HEALTH_LINK, AVATAR_SENTINEL_MASTER_BLEEDOUT_MODIFIER, AVATAR_SENTINEL_PACK_LEADER, AVATAR_SENTINEL_PACK_LEADER_OVERGUARD_CAP, AVATAR_SENTINEL_PACK_LEADER_REVERSE, AVATAR_SENTINEL_PICKUP_TO_ARMOR, AVATAR_SENTINEL_SHIELD_LINK, AVATAR_SENTINEL_STATUS_LINK, AVATAR_SHARE_ENERGY_PICKUP_RADIUS, AVATAR_SHARE_XP_RADIUS, AVATAR_SHIELD_GATE_DURATION, AVATAR_SHIELD_MAX, AVATAR_SHIELD_RECHARGE_DELAY, AVATAR_SHIELD_RECHARGE_RATE, AVATAR_SHIELD_RECHARGE_PERCENT, AVATAR_SHIELD_REDIRECTION, AVATAR_SHIELD_STAMINA_COST_MULTIPLIER, AVATAR_SHIELD_TO_STAMINA_RATIO, AVATAR_SLIDE_BOOST, AVATAR_SLIDE_FRICTION, AVATAR_SLOW_REDUCTION, AVATAR_SOFT_TARGETING_RADIUS_MODIFIER, AVATAR_SPAWN_ENERGY, AVATAR_SPRINT_SPEED, AVATAR_STAMINA_COST_MULTIPLIER, AVATAR_STAMINA_MAX, AVATAR_STAMINA_RECHARGE_DELAY, AVATAR_STAMINA_RECHARGE_RATE, AVATAR_STEALTH_MIN_OCCLUSION_RADIUS, AVATAR_STEALTH_FULL_OCCLUSION_RADIUS, AVATAR_STUN_TIME, AVATAR_SUCCESS_CHANCE, AVATAR_THORNS_PERCENT, AVATAR_TIME_LIMIT_INCREASE, AVATAR_TIME_TO_CLOAK, AVATAR_WALLCLING_TIME, AVATAR_WALLJUMP_HEIGHT, AVATAR_WALLRUN_SPEED, AVATAR_PARKOUR_BOOST, AVATAR_PARKOUR_BULLET_TIME, AVATAR_PARKOUR_GLIDE, AVATAR_PARKOUR_GRAVITY, AVATAR_PARKOUR_DAMAGE_ADDED, AVATAR_PARKOUR_SLAM_ENERGY_COST, GAMEPLAY_BULLET_KILL_XP_AMOUNT, GAMEPLAY_DAMAGE_TO_POWER, GAMEPLAY_ENEMY_AVATAR_XP_REWARD, GAMEPLAY_ENEMY_SPAWN_CHANCE, GAMEPLAY_ENERGY_PICKUP_AMOUNT, GAMEPLAY_EXECUTION_HEALTH_THRESHOLD, GAMEPLAY_FACTION_DAMAGE, GAMEPLAY_FACTION_DAMAGE_RESISTANCE, GAMEPLAY_FACTION_SHIELD_DAMAGE_RESISTANCE, GAMEPLAY_FINISHER_XP_AMOUNT, GAMEPLAY_FREE_REVIVE_COUNT, GAMEPLAY_GEAR_ITEM_COOLDOWN, GAMEPLAY_ITEM_EFFECTIVENESS, GAMEPLAY_KILL_POWER_AMOUNT, GAMEPLAY_KILL_POWER_COOLDOWN, GAMEPLAY_KILL_XP_AMOUNT, GAMEPLAY_KILL_XP_REWARD, GAMEPLAY_MAX_HEALTH_SEGMENT_REWARD, GAMEPLAY_MELEE_KILL_XP_AMOUNT, GAMEPLAY_MONEY_DROP_AMOUNT, GAMEPLAY_MONEY_PICKUP_AMOUNT, GAMEPLAY_MONEY_REWARD_AMOUNT, GAMEPLAY_NON_HUMAN_DAMAGE_RESISTANCE, GAMEPLAY_PERCENT_BASE_DAMAGE_ADDED, GAMEPLAY_PICKUP_AMOUNT, GAMEPLAY_PICKUP_RATE, GAMEPLAY_PICKUP_DOUBLED_CHANCE, GAMEPLAY_POWER_COOLDOWN, GAMEPLAY_POWER_TO_HEALTH_ON_DEATH, GAMEPLAY_HEALTH_ON_DEATH, GAMEPLAY_HEALTH_PICKUP_AMOUNT, GAMEPLAY_SHIELD_UPGRADE_LEVEL, VEHICLE_DODGE_COOLDOWN, VEHICLE_DOUBLE_JUMP_HEIGHT, VEHICLE_FALL_RESIST_CHANCE, VEHICLE_FALL_SPEED, VEHICLE_JUMP_CHARGE_TIME, VEHICLE_JUMP_HEIGHT, VEHICLE_MAGNETISM, VEHICLE_SCORE_MULTIPLIER, VEHICLE_SPEED, VEHICLE_SPEED_ALT, VEHICLE_SPRINT_SPEED, WEAPON_AIMED_SHOT_DAMAGE_BONUS, WEAPON_AMMO_CONSUME_RATE, WEAPON_AMMO_FREE_CHANCE, WEAPON_AMMO_MAX, WEAPON_AMMO_POOL_MULTISHOT_DAMAGE, WEAPON_AMMO_RETRIEVED, WEAPON_ARMOUR_BYPASS, WEAPON_AUGMENT, WEAPON_AUTO_RELOAD_RATE, WEAPON_BATTERY_REGEN_RATE, WEAPON_BONUS_NORMALIZED_PHYSICAL_DAMAGE, WEAPON_BONUS_NORMALIZED_ELEMENTAL_DAMAGE, WEAPON_BYPASS_SHIELD, WEAPON_BYPASS_SHIELD_ON_CRIT, WEAPON_CHANNELING_DAMAGE, WEAPON_CHANNELING_EFFICIENCY, WEAPON_CHARGE_RATE, WEAPON_CHARGE_STEP_SIZE, WEAPON_CHARGED_PROJECTILE_SIZE, WEAPON_CLIP_MAX, WEAPON_CONVERT_AMMO, WEAPON_CONVERT_AMMO_DELAY, WEAPON_CONVERT_AMMO_TO_BUFF, WEAPON_CORPSE_EXPLODE_DAMAGE, WEAPON_CORPSE_EXPLODE_DAMAGE_ENEMY_HEALTH_PCT, WEAPON_CORPSE_EXPLODE_RADIUS, WEAPON_CORPSE_EXPLODE_PROC_CHANCE, WEAPON_CRIT_CHANCE, WEAPON_CRIT_CHANCE_BODY_PART, WEAPON_CRIT_CHANCE_WEAKPOINT, WEAPON_CRIT_DAMAGE, WEAPON_CRIT_FIRE_RATE_BONUS, WEAPON_CRIT_FIRE_RATE_DURATION, WEAPON_CRIT_UNDER_PROC_THRESHOLD_BONUS, WEAPON_CRIT_UNDER_PROC_THRESHOLD_MAX, WEAPON_DAMAGE_AMOUNT, WEAPON_DAMAGE_AMOUNT_TO_HEALTH, WEAPON_DAMAGE_AMOUNT_TO_OVERGUARD, WEAPON_DAMAGE_AMOUNT_TO_SHIELDS, WEAPON_DAMAGE_CONVERSION, WEAPON_DAMAGE_CONVERSION_POST_COALESCE, WEAPON_DAMAGE_IF_VICTIM_PROC_ACTIVE, WEAPON_DAMAGE_PER_ACTIVE_PROC_STACK_ON_VICTIM, WEAPON_DAMAGE_OVER_DISTANCE, WEAPON_DAMAGE_SELF_AMOUNT, WEAPON_DAMAGE_TYPE_BIAS, WEAPON_DAMAGE_TYPE_FLAT_AMOUNT, WEAPON_DAMAGE_WEAKPOINT, WEAPON_DISTANCE_TO_DAMAGE_BONUS, WEAPON_DOUBLE_CRIT_CHANCE, WEAPON_DRAIN_MAX, WEAPON_EMBED_DEATH_PROC_CHANCE, WEAPON_EMPLACEMENT_AMMO_CONSUME_RATE, WEAPON_ENERGY_ON_HEADSHOT_KILL, WEAPON_EXPLOSION_RADIUS, WEAPON_EXTRA_SCAN_CHANCE, WEAPON_FIRE_ITERATIONS, WEAPON_FIRE_RATE, WEAPON_FIRE_REDIRECT_RANGE, WEAPON_FIRE_REDIRECT_PROC_CHANCE, WEAPON_FIRE_REDIRECT_PROC_TYPE, WEAPON_FORCED_PROC_CHANCE, WEAPON_FROZEN_CRIT_CHANCE, WEAPON_FROZEN_CRIT_DAMAGE, WEAPON_GORE_CHANCE, WEAPON_GRENADE_STICKY, WEAPON_BODYSHOT_MULTIPLIER, WEAPON_HEADSHOT_MULTIPLIER, WEAPON_HEALTH_ON_HIT_ENEMY_WITH_PROC, WEAPON_HEALTH_ON_KILL, WEAPON_HEALTH_ON_KILL_CHANCE, WEAPON_HOLSTER_RATE, WEAPON_INCARNON_COMBO_REQUIREMENT, WEAPON_INFINITE_CLIP_MOD, WEAPON_INIT_DAMAGE_MOD, WEAPON_KILL_TO_STAMINA, WEAPON_KNOCKDOWN_TIME, WEAPON_LAST_DAMAGE_MOD, WEAPON_LAST_MULTISHOT, WEAPON_LIFE_STEAL, WEAPON_LIFE_STEAL_CHANNELING, WEAPON_LOCK_TIME, WEAPON_LOW_CRIT_VALUE, WEAPON_LOW_CRIT_DAMAGE, WEAPON_MARK_TARGET, WEAPON_MARKED_DAMAGE_AMOUNT, WEAPON_MARKED_HEADSHOT_MULTIPLIER, WEAPON_MELEE_ARMOR_REDUCTION, WEAPON_MELEE_AUTOTARGET_MAXIMUM_ANGLE, WEAPON_MELEE_AUTOTARGET_RANGE_BONUS, WEAPON_MELEE_AUTOTARGET_SPEED_BONUS, WEAPON_MELEE_AVATAR_DAMAGE_FALL_OFF, WEAPON_MELEE_COMBO_CHANCE_FROM_DOT, WEAPON_MELEE_COMBO_CRIT_CHANCE, WEAPON_MELEE_COMBO_DECAY_AMOUNT, WEAPON_MELEE_COMBO_DURATION_BONUS, WEAPON_MELEE_COMBO_GAIN_MISS_CHANCE, WEAPON_MELEE_COMBO_GAIN_EXTRA_CHANCE, WEAPON_MELEE_COMBO_HIT_BONUS, WEAPON_MELEE_COMBO_INITIAL_BONUS, WEAPON_MELEE_COMBO_MULTIPLIER_BONUS, WEAPON_MELEE_COMBO_MULTIPLIER_CRIT_CHANCE, WEAPON_MELEE_COMBO_MULTIPLIER_PROC_CHANCE, WEAPON_MELEE_COMBO_PROC_CHANCE, WEAPON_MELEE_COMBO_USAGE_EFFICIENCY, WEAPON_MELEE_DAMAGE, WEAPON_MELEE_FINISHER_DAMAGE, WEAPON_MELEE_HEAVY_CHARGE_SPEED, WEAPON_MELEE_HEAVY_EMPOWERED_CHANCE, WEAPON_MELEE_HEAVY_EMPOWERED_DURATION, WEAPON_MELEE_HIT_GROUND_TARGET, WEAPON_MELEE_HIT_STUN_CHANCE, WEAPON_MELEE_SLAM_DAMAGE_BONUS, WEAPON_MELEE_HEAVY_PARRY_DAMAGE_BONUS, WEAPON_MELEE_HEAVY_PARRY_CRIT_CHANCE_BONUS, WEAPON_MELEE_HEAVY_PARRY_CRIT_MULTIPLIER, WEAPON_MELEE_HEAVY_INSTANT_KILL_CHANCE, WEAPON_MELEE_STAMINA_PENALTY, WEAPON_MELEE_STEALTH_LETHAL, WEAPON_MICROWAVE_PROC_CRIT_CHANCE_BONUS, WEAPON_NOCRIT_CHANCE, WEAPON_NOCRIT_DAMAGE, WEAPON_NOISE_REDUCTION, WEAPON_NULLIFIER_BUBBLE_POP_CHANCE, WEAPON_OVERHEAT_DAMAGE, WEAPON_OVERHEAT_PROC_CHANCE, WEAPON_OVERGUARD_CRIT_CHANCE, WEAPON_PARRY_ANGLE, WEAPON_PARRY_COUNTER_CHANCE, WEAPON_PARRY_COUNTER_CHANCE_STAGGER, WEAPON_PARRY_COUNTER_CHANCE_STUN, WEAPON_PARRY_DAMAGE_BLOCKED, WEAPON_PARRY_DAMAGE_REFLECTED, WEAPON_PARRY_DAMAGE_TO_STAMINA, WEAPON_PARRY_EFFECTIVENESS, WEAPON_PARRY_EFFICIENCY, WEAPON_PARRY_HEAVY_COOLDOWN, WEAPON_PERCENT_BASE_DAMAGE_ADDED, WEAPON_PERCENT_BASE_DAMAGE_ADDED_POST_COALESCE, WEAPON_POWER_DAMAGE_BLOCK, WEAPON_POWER_DAMAGE_MAX, WEAPON_POWER_DAMAGE_MULTIPLIER, WEAPON_PICKUP_SHOOT_BONUS, WEAPON_PROC_ACTIVE_BONUS_DAMAGE, WEAPON_PROC_CHANCE, WEAPON_PROC_CHANCE_AGAINST_FULLY_SCANNED, WEAPON_PROC_DAMAGE, WEAPON_PROC_MAX_STACK, WEAPON_PROC_ON_PROC_CHANCE, WEAPON_PROC_TIME, WEAPON_PROC_TIME_EXTEND_ON_HIT, WEAPON_PROC_SELF_CC_REDUCTION_CHANCE, WEAPON_PROJECTILE_BOUNCES, WEAPON_PROJECTILE_ELASTICITY, WEAPON_PROJECTILE_EXPLOSION_CHANCE, WEAPON_PROJECTILE_LINGERING_AOE_DAMAGE, WEAPON_PROJECTILE_LINGERING_AOE_DURATION, WEAPON_PROJECTILE_LINGERING_AOE_RADIUS, WEAPON_PROJECTILE_SIZE, WEAPON_PROJECTILE_SPEED, WEAPON_PUNCTURE_DEPTH, WEAPON_PUNCTURE_INFINITE, WEAPON_RANDOM_PROC_CHANCE, WEAPON_RANGE, WEAPON_RECOIL, WEAPON_REFLECTION_MODIFIER, WEAPON_REFLECTION_EXPLOSION_CHANCE, WEAPON_RELOAD_EMPTY_BATTERY, WEAPON_RELOAD_SPEED, WEAPON_RELOAD_TIME, WEAPON_RICOCHET_CHANCE, WEAPON_SELF_AOE_MULTIPLIER, WEAPON_SHIELD_ON_KILL, WEAPON_SHIELD_ON_KILL_CHANCE, WEAPON_SHIELD_ON_KILL_BY_DAMAGE_TYPE, WEAPON_SHIELD_PERCENT_ON_KILL, WEAPON_SLASH_PROC_ON_CRIT_CHANCE, WEAPON_SLASH_PROC_ON_IMPACT, WEAPON_MAGNETIC_PROC_ON_IMPACT, WEAPON_SNIPER_COMBO_MULTIPLIER_BONUS, WEAPON_SNIPER_COMBO_HIT_BONUS, WEAPON_SNIPER_COMBO_CRIT_CHANCE, WEAPON_SNIPER_COMBO_PROC_CHANCE, WEAPON_SNIPER_COMBO_DURATION_BONUS, WEAPON_SPREAD, WEAPON_STEALTH_MULTIPLIER, WEAPON_SYNDICATE_POWER, WEAPON_TARGET_AMOUNT, WEAPON_UPGRADE_SLOT, WEAPON_VICTIM_CRIT_CHANCE, WEAPON_VICTIM_CRIT_DAMAGE, WEAPON_VICTIM_DAMAGE_AMOUNT, WEAPON_VICTIM_STAMINA_DRAIN_PERCENTAGE, WEAPON_ZOOM, WEAPON_ZOOM_SHAKE_SPEED, WEAPON_MODE_SWITCH_SPEED, WEAPON_PERCENT_BASE_INNATE_DAMAGE_ADDED, WEAPON_ADD_CHARGE_COUNTER_MULTIPLIER, SKILL_ABILITY_UNLOCK, SKILL_ABILITY_TACTICAL_COOLDOWN, SKILL_ABILITY_TACTICAL_EFFICIENCY, SKILL_RJ_BC_AMMO_YIELD, SKILL_RJ_BC_COMPACTION_YIELD, SKILL_RJ_BC_COOLDOWN, SKILL_RJ_BOOST_RAM_DAMAGE, SKILL_RJ_COLLISION_DMG_REDUCTION, SKILL_RJ_ENEMY_DMG_REDUCTION, MAX_Value }
+OperationType = { ADD, ADD_BASE, MULTIPLY, STACKING_MULTIPLY, SET, SET_BASE, SET_MIN, SET_MAX }
+DamageType = { DT_IMPACT, DT_PUNCTURE, DT_SLASH, DT_FIRE, DT_FREEZE, DT_ELECTRICITY, DT_POISON, DT_EXPLOSION, DT_RADIATION, DT_GAS, DT_MAGNETIC, DT_VIRAL, DT_CORROSIVE, DT_RADIANT, DT_SENTIENT, DT_CINEMATIC, DT_SHIELD_DRAIN, DT_HEALTH_DRAIN, DT_ENERGY_DRAIN, DT_FINISHER, DT_SUICIDE, DT_PHYSICAL, DT_INVALID, DT_BASE_ELEMENTAL, DT_COMPOUND_ELEMENTAL, DT_ANY }
+PostureModifier = { PM_AIM, PM_AIM_MAIN_HAND, PM_AIM_OFF_HAND, PM_FREE_FIRED, PM_DODGE, PM_BLOCKING_ANIM, PM_STUN, PM_CLOAK, PM_ANIMATION_CONTROLLED, PM_HIBERNATE, PM_EXPLODE, PM_FINISHER_OPEN, PM_KNOCKDOWN, PM_STAGGER, PM_PRE_DEATH, PM_IN_AIR, PM_MENACE, PM_CARRYING, PM_ALT_AIM_RIGHT, PM_ALT_AIM_LEFT, PM_HELD, PM_GROUNDFIRE, PM_ALTERNATE_COVER, PM_CRIPPLED, PM_WALLJUMP, PM_BULLETJUMP, PM_PARRY, PM_GRAV_DISABLED, PM_EMPLACEMENT, PM_AIRBORNE, PM_HEAVY_MELEE, PM_MELEE_RAGE }
+Injury = { PAIN, INJURY_RESISTED, INJURY_BLOCKED, STAGGER, BIG_STAGGER, STUN, KNOCKDOWN, GROUNDFIRE, THROW, RAGDOLL, PRE_DEATH, DEATH, DEATH_RAGDOLL, DEATH_SLICE, DEATH_SEVER, ANY, MAX_Injury }
+ForceType = { FT_FORCE, FT_IMPULSE, FT_VELOCITY_CHANGE, FT_ACCELERATION }
+ColorCustomizationSlot = { PrimaryColors, Attachments, Sigil, Eyes, Facial, Clothing, Syandana }
+PowerSuitCustomizationSlot = { Helmet, ArmLeft, LegLeft, CustomEmblem, EventEmblem, AnimationSet, Neckwear, BodySkin, Chest, ArmRight, LegRight, Face, SigilChest, SigilBack, SpecialEvent, FxSet, SpecialFxSet }
+
+_T.AddHudTracker -- function(name, type) or nil
+_T.RemoveHudTracker -- function(name) or nil
+_T.OpenScreen -- function(name)
+
+-- Preloaded modules
+
+"EE.Interface.Utilities"
+ ShowMessage = function(str)
+
+"Lotus.Interface.LotusNetworkUtilities"
+ Host_LoadMission = function(node, missionInfo)
+
+"Lotus.Interface.LotusUtilities"
+ SLIDER
+ CHECKBOX
+ TOGGLE
+ BUTTON
+ TITLE
+ INPUTBOX
+ SPACER
+ INPUTCOUNT
+ ICONBUTTON
+ CHOICE
+ COLOR
+ IMAGE
+
+"Lotus.Scripts.Libs.ObjectiveText"
+ SetPrimaryObjText = function(text)
+ ClearPrimaryObjText = function()
+
+"Lotus.Scripts.Libs.DuviriActivityLib"
+ ModifyEncounterLimit = function(type, delta)
+ IsEncounterLimitReached = function(type)
diff --git a/Scripts/samples/Auto Teleport to Waypoint.pluto b/Scripts/samples/Auto Teleport to Waypoint.pluto
new file mode 100644
index 0000000..3fa0722
--- /dev/null
+++ b/Scripts/samples/Auto Teleport to Waypoint.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Become The Stalker.pluto b/Scripts/samples/Become The Stalker.pluto
new file mode 100644
index 0000000..5ee7e11
--- /dev/null
+++ b/Scripts/samples/Become The Stalker.pluto
@@ -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)
\ No newline at end of file
diff --git a/Scripts/samples/Chat Commands.pluto b/Scripts/samples/Chat Commands.pluto
new file mode 100644
index 0000000..01bbc12
--- /dev/null
+++ b/Scripts/samples/Chat Commands.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Complete Wave or Mission.pluto b/Scripts/samples/Complete Wave or Mission.pluto
new file mode 100644
index 0000000..62a1ac4
--- /dev/null
+++ b/Scripts/samples/Complete Wave or Mission.pluto
@@ -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
\ No newline at end of file
diff --git a/Scripts/samples/Cycle Camera.pluto b/Scripts/samples/Cycle Camera.pluto
new file mode 100644
index 0000000..46a5f0c
--- /dev/null
+++ b/Scripts/samples/Cycle Camera.pluto
@@ -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
\ No newline at end of file
diff --git a/Scripts/samples/Detailed Enemy HP.pluto b/Scripts/samples/Detailed Enemy HP.pluto
new file mode 100644
index 0000000..99f3cc8
--- /dev/null
+++ b/Scripts/samples/Detailed Enemy HP.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Enter Simulacrum.pluto b/Scripts/samples/Enter Simulacrum.pluto
new file mode 100644
index 0000000..c9ea3a9
--- /dev/null
+++ b/Scripts/samples/Enter Simulacrum.pluto
@@ -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)
\ No newline at end of file
diff --git a/Scripts/samples/First Person View.pluto b/Scripts/samples/First Person View.pluto
new file mode 100644
index 0000000..c9ece32
--- /dev/null
+++ b/Scripts/samples/First Person View.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Freecam Teleport on Disable.pluto b/Scripts/samples/Freecam Teleport on Disable.pluto
new file mode 100644
index 0000000..f442496
--- /dev/null
+++ b/Scripts/samples/Freecam Teleport on Disable.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Freecam Up Down.pluto b/Scripts/samples/Freecam Up Down.pluto
new file mode 100644
index 0000000..0a0576e
--- /dev/null
+++ b/Scripts/samples/Freecam Up Down.pluto
@@ -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 = 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()
\ No newline at end of file
diff --git a/Scripts/samples/Godmode.pluto b/Scripts/samples/Godmode.pluto
new file mode 100644
index 0000000..3f93a1d
--- /dev/null
+++ b/Scripts/samples/Godmode.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Increase Damage.pluto b/Scripts/samples/Increase Damage.pluto
new file mode 100644
index 0000000..b728ab4
--- /dev/null
+++ b/Scripts/samples/Increase Damage.pluto
@@ -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
\ No newline at end of file
diff --git a/Scripts/samples/Kill All Enemies.pluto b/Scripts/samples/Kill All Enemies.pluto
new file mode 100644
index 0000000..1fe8b48
--- /dev/null
+++ b/Scripts/samples/Kill All Enemies.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Loot Party.pluto b/Scripts/samples/Loot Party.pluto
new file mode 100644
index 0000000..697e08f
--- /dev/null
+++ b/Scripts/samples/Loot Party.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/No Ability Cooldowns.pluto b/Scripts/samples/No Ability Cooldowns.pluto
new file mode 100644
index 0000000..98a39b2
--- /dev/null
+++ b/Scripts/samples/No Ability Cooldowns.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Noclip.pluto b/Scripts/samples/Noclip.pluto
new file mode 100644
index 0000000..efb26b8
--- /dev/null
+++ b/Scripts/samples/Noclip.pluto
@@ -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()
diff --git a/Scripts/samples/Settings.pluto b/Scripts/samples/Settings.pluto
new file mode 100644
index 0000000..3d49f2f
--- /dev/null
+++ b/Scripts/samples/Settings.pluto
@@ -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
\ No newline at end of file
diff --git a/Scripts/samples/Speedometer.pluto b/Scripts/samples/Speedometer.pluto
new file mode 100644
index 0000000..79a4fdd
--- /dev/null
+++ b/Scripts/samples/Speedometer.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Wallhack.pluto b/Scripts/samples/Wallhack.pluto
new file mode 100644
index 0000000..c9e47d3
--- /dev/null
+++ b/Scripts/samples/Wallhack.pluto
@@ -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()
\ No newline at end of file
diff --git a/Scripts/samples/Watermark.pluto b/Scripts/samples/Watermark.pluto
new file mode 100644
index 0000000..40fdc4c
--- /dev/null
+++ b/Scripts/samples/Watermark.pluto
@@ -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
\ No newline at end of file
diff --git a/sideloadify-cli.cache b/sideloadify-cli.cache
new file mode 100644
index 0000000..33d609f
Binary files /dev/null and b/sideloadify-cli.cache differ