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:

+ +

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:

+ +

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

+ +

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:

+ +

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