Back to Index | Page generated: Dec 20, 2024, 7:22:09 AM |
from Expansion Manager's OXP list | from Expansion Manifest | |
---|---|---|
Description | Fixes a compatibility problem between SniperLock and Telescope. | Fixes a compatibility problem between SniperLock and Telescope. |
Identifier | oolite.oxp.dybal.SniperLock_Fix | oolite.oxp.dybal.SniperLock_Fix |
Title | SniperLock Fix | SniperLock Fix |
Category | Equipment | Equipment |
Author | Dybal | Dybal |
Version | 1.0 | 1.0 |
Tags | ||
Required Oolite Version | ||
Maximum Oolite Version | ||
Required Expansions |
|
|
Optional Expansions | ||
Conflict Expansions | ||
Information URL | n/a | |
Download URL | https://wiki.alioth.net/img_auth.php/7/7c/SniperLock_Fix-1.0.oxz | n/a |
License | CC-BY-NC-SA 4.0 | CC-BY-NC-SA 4.0 |
File Size | n/a | |
Upload date | 1610873343 |
Also read http://wiki.alioth.net/index.php/SniperLock%20Fix
SniperLock Fix -------------- v1.0, by Dybal SniperLock Fix, as the name suggests, fixes a icompatibility problem in SniperLock. The problem caused travel direction reversal while using Torus Drive if SniperLock was locked on a farway target through Telescope. Since SniperLock's license includes the "Thargoid clauses", which restrict CC BY-NC-SA 3.0 so the code can be re-used (if id collisions were avoided) but the original OXP can't be modified, it was necessary to create this OXP to wrap the SniperLock function and only call it when it's safe. License ------- CC-BY-NC-SA 4.0 - Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-nc-sa/4.0/)
Path | |
---|---|
Config/script.js | "use strict"; this.name = "sniperlock_fix"; this.author = "Dybal"; this.copyright = "2020 Dybal"; this.license = "CC-BY-NC-SA 4.0"; this.description = "Fixes a bug in SniperLock"; this.version = "1.0"; // // Event Handlers // //------------------------------------------------------------------------------------------// this.startUp = function _sniperlockFix_startUp() { var ws = worldScripts.sniperlock; if (ws && ws.sniperLock) { log(this.name, "Wrapping SniperLock's sniperLock function"); ws.$sniperlockFix_saved_sniperLock = ws.sniperLock; ws.sniperLock = this.$FCB_Wrap; ws.$lastOK = true; } } // // Internal Functions // //------------------------------------------------------------------------------------------// this.$FCB_Wrap = function _sniperlockFix_FCB_Wrap(delta) { var that = _sniperlockFix_FCB_Wrap; var ws = (that.ws = that.ws || worldScripts.sniperlock); var sniperLock = (that.sniperLock || ws.$sniperlockFix_saved_sniperLock); var reset = (that.reset = that.reset || ws.shipTargetAcquired); var pship = player.ship; if (!sniperLock || !pship.target) return; if (pship.speed > pship.maxSpeed && pship.target.dataKey === "telescopemarker") { if (ws.$lastOK) { // resets to clean the stored target positions // avoids using old target positions when sniperlock resumes log(this.name, "resetting SniperLock"); reset.call(ws); } ws.$lastOK = false; } else { sniperLock.call(ws, delta); ws.$lastOK = true; } } |