Jump to content

NQ-Ligo

Developer
  • Posts

    57
  • Joined

  • Last visited

Everything posted by NQ-Ligo

  1. NEW Construct Construct represents your construct. It gives access to the properties of your constructions and to the events linked to them, which can be used in your scripts. Functions NEW [string] getName(): Returns the name of the construct NEW [int] getId(): Returns the construct unique ID NEW [table] getOwner(): Returns the owner entity return [table]: The owner entity table with fields {[int] id, [bool] isOrganization} describing the owner. Use system.getPlayerName(id) and system.getOrganization(id) to retrieve info about it NEW [table] getCreator(): Returns the creator entity return [table]: The creator entity table with fields {[int] id, [bool] isOrganization} describing the owner. Use system.getPlayerName(id) and system.getOrganization(id) to retrieve info about it NEW [int] isWarping(): Checks if the construct is currently warping NEW [int] getWarpState(): Returns the current warp state return [int]: The current warp state index (Idle = 1, Engage = 2, Align = 3, Spool = 4, Accelerate = 5, Cruise = 6, Decelerate = 7, Stopping = 8, Disengage = 9) NEW [int] isInPvPZone(): Checks if the construct is in PvP zone NEW [float] getDistanceToSafeZone(): Returns the distance between the construct and the nearest safe zone NEW [float] getPvPTimer(): Returns the current construct PvP timer state NEW [float] getMass(): Returns the mass of the construct NEW [float] getInertialMass(): Returns the inertial mass of the construct, calculated as 1/3 of the trace of the inertial tensor NEW [table] getInertialTensor(): Returns the inertial tensor of the construct NEW [table] getCenterOfMass(): Returns the position of the center of mass of the construct, in local construct coordinates NEW [table] getWorldCenterOfMass(): Returns the position of the center of mass of the construct, in world coordinates NEW [float] getCrossSection(): Returns the construct's cross sectional surface in the current direction of movement NEW [table] getSize(): Returns the size of the building zone of the construct NEW [table] getBoundingBoxSize(): Returns the size of the bounding box of the construct NEW [table] getBoundingBoxCenter(): Returns the position of the center of bounding box of the construct in local construct coordinates NEW [float] getMaxSpeed(): Returns the max speed along current moving direction NEW [float] getMaxAngularSpeed(): Returns the max angular speed NEW [table] getMaxSpeedPerAxis(): Returns the max speed per axis NEW [table] getMaxThrustAlongAxis([string] taglist, [table] CRefAxis): Returns the construct max kinematics parameters in both atmo and space range, in newtons. [string] taglist: Comma (for union) or space (for intersection) separated list of tags. You can set tags directly on the engines in the right-click menu [table] CRefAxis: Axis along which to compute the max force (in construct reference) NEW [float] getCurrentBrake(): Returns the current braking force generated by construct brakes NEW [float] getMaxBrake(): Returns the maximum braking force that can currently be generated by the construct brakes NEW [table] getWorldPosition(): Returns the world position of the construct NEW [table] getVelocity(): The construct's linear velocity, relative to its parent, in construct local coordinates NEW [table] getWorldVelocity(): The construct's linear velocity, relative to its parent, in world coordinates NEW [table] getAbsoluteVelocity(): The construct's absolute linear velocity, in construct local coordinates NEW [table] getWorldAbsoluteVelocity(): The construct's absolute linear velocity, in world coordinates NEW [table] getAcceleration(): The construct's linear acceleration, in construct local coordinates NEW [table] getWorldAcceleration(): The construct's linear acceleration, in world coordinates NEW [table] getAngularVelocity(): The construct's angular velocity, in construct local coordinates NEW [table] getWorldAngularVelocity(): The construct's angular velocity, in world coordinates NEW [table] getAngularAcceleration(): The construct's angular acceleration, in construct local coordinates NEW [table] getWorldAngularAcceleration(): The construct's angular acceleration, in world coordinates NEW [table] getWorldAirFrictionAcceleration(): Returns the acceleration generated by air resistance NEW [table] getWorldAirFrictionAngularAcceleration(): Returns the acceleration torque generated by air resistance NEW [table] getFrictionBurnSpeed(): Returns the speed at which your construct will suffer damage due to friction with the air NEW [table] getForward(): Returns the forward vector of the construct coordinates system NEW [table] getRight(): Returns the right vector of the construct coordinates system NEW [table] getUp(): Returns the up direction vector of the construct coordinates system NEW [table] getWorldForward(): Returns the forward direction vector of the construct, in world coordinates NEW [table] getWorldRight(): Returns the right direction vector of the construct, in world coordinates NEW [table] getWorldUp(): Returns the up direction vector of the construct, in world coordinates NEW [int] getOrientationUnitId(): Returns the local id of the current active orientation unit (core unit or gyro unit) NEW [table] getOrientationForward(): Returns the forward direction vector of the active orientation unit, in construct local coordinates NEW [table] getOrientationRight(): Returns the right direction vector of the active orientation unit, in construct local coordinates NEW [table] getOrientationUp(): Returns the up direction vector of the active orientation unit, in construct local coordinates NEW [table] getWorldOrientationForward(): Returns the forward direction vector of the active orientation unit, in world coordinates NEW [table] getWorldOrientationRight(): Returns the right direction vector of the active orientation unit, in world coordinates NEW [table] getWorldOrientationUp(): Returns the up direction vector of the active orientation unit, in world coordinates NEW [int] getParent(): Returns the id of the parent construct of our active construct NEW [int] getClosestParent(): Returns the id of the nearest constructs, on which the construct can dock NEW [table] getCloseParents(): Returns the list of ids of nearby constructs, on which the construct can dock NEW [table] getParentPosition(): Returns the position of the construct's parent when docked in local coordinates NEW [table] getParentWorldPosition(): Returns the position of the construct's parent when docked in world coordinates NEW [table] getParentForward(): Returns the construct's parent forward direction vector, in local coordinates NEW [table] getParentRight(): Returns the construct's parent right direction vector, in construct local coordinates NEW [table] getParentUp(): Returns the construct's parent up direction vector, in construct local coordinates NEW [table] getParentWorldForward(): Returns the construct's parent forward direction vector, in world coordinates NEW [table] getParentWorldRight(): Returns the construct's parent right direction vector, in world coordinates NEW [table] getParentWorldUp(): Returns the construct's parent up direction vector, in world coordinates NEW [table] getPlayersOnBoard(): Returns the list of player IDs on board the construct NEW [table] getPlayersOnBoardInVRStation(): Returns the list of player ids on board the construct inside a VR Station NEW [int] isPlayerBoarded([int] id): Checks if the given player is on board in the construct [int] id: The player id NEW [int] isPlayerBoardedInVRStation([int] id): Returns 1 if the given player is boarded to the construct inside a VR Station [int] id: The player id NEW [float] getBoardedPlayerMass([int] id): Returns the mass of the given player or surrogate if it is on board the construct [int] id: The player id NEW [float] getBoardedInVRStationAvatarMass([int] id): Returns the mass of the given player if in VR station on board the construct [int] id: The player id NEW [table] getDockedConstructs([int] id): Returns the list of IDs of constructs docked to the construct [int] id: The construct id NEW [table] isConstructDocked([int] id): Checks if the given construct is docked to the construct [int] id: The construct id NEW [float] getDockedConstructMass([int] id): Returns the mass of the given construct if it is docked to the construct [int] id: The construct id NEW setDockingMode([int] mode): Sets the docking mode [int] id: The docking mode (0: Manual, 1: Automatic, 2: Semi-automatic) NEW [int] getDockingMode(): Returns the current docking mode return [int]: The docking mode (0: Manual, 1: Automatic, 2: Semi-automatic) NEW [int] dock([int] id): Sends a request to dock to the given construct. Limited to piloting controllers [int] id: The parent construct id NEW [int] undock(): Sends a request to undock the construct. Limited to piloting controllers NEW forceDeboard([int] id): Sends a request to deboard a player or surrogate with the given id [int] id: The player id NEW forceUndock([int] id): Sends a request to undock a construct with the given id [int] id: The construct id NEW forceInterruptVRSession([int] id): Sends a request to interrupt the surrogate session of a player with the given id [int] id: The player id Events NEW onDocked([int] id): Emitted when the construct becomes docked [int] id: The parent id NEW onUndocked([int] id): Emitted when the construct is undocked [int] id: The previous parent id NEW onPlayerBoarded([int] id): Emitted when a player or surrogate boards the construct [int] id: The id of the boarding player NEW onVRStationEntered([int] id): Emitted when a player enters a VR Station [int] id: The id of the boarding player NEW onConstructDocked([int] id): Emitted when another construct docks this construct [int] id: The id of the docking construct NEW onPvPTimer([int] active): Emitted when the PvP timer started or elapsed [int] active: 1 if the timer started, false when the timer elapsed
  2. Base Shield Generator Generates a protective shield around the space construct Functions activate(): Activate the shield deactivate(): Deactivate the shield NEW [int] isActive(): Returns the activation state of the shield DEPRECATED [int] getState() → isActive() toggle(): Toggle the state of the shield [float] getShieldHitpoints(): Returns the current hit points of the shield [float] getMaxShieldHitpoints(): Returns the maximal hit points of the shield [table] getResistances(): Returns distribution of resistance pool over resistance types setResistances([float] antimatter,[float] electromagnetic,[float] kinetic,[float] thermic): Distribute the resistance pool according to damage type [float] antimatter: Antimatter damage resistance [float] electromagnetic: Electromagnetic damage resistance [float] kinetic: Kinetic damage resistance [float] thermic: Thermic damage resistance [float] getResistancesCooldown(): Returns time after which adjusting resistances is possible again [float] getResistancesMaxCooldown(): Returns maximal cooldown between adjusting resistances [float] getResistancesPool(): Returns total resistance pool that may be distributed [float] getResistancesRemaining(): Returns the remaining amount of the resistance pool that can be distributed [table] getStressRatio(): Returns ratio per damage type of recent weapon impacts after applying resistance [table] getStressRatioRaw(): Returns ratio per damage type of recent weapon impacts without resistance [float] getStressHitpoints(): Returns stress, that is the total hit points of recent weapon impacts after applying resistance [float] getStressHitpointsRaw(): Returns stress, that is the total hit points of recent weapon impacts without resistance [int] inLockdown(): Returns whether the base shield is currently in lockdown [float] getLockdownRemaining(): Returns the remaining time of the base shield lockdown [int] getLockdownExitTime(): Returns the hour since midnight of the preferred lockdown exit setLockdownExitTime([int] hour): Set hour since midnight for the preferred lockdown exit [int] hour: Preferred lockdown exit hour UTC Events NEW onToggled([int] active): Emitted when we started or stopped the shield generator [int] active: 1 if the element was activated, 0 otherwise DEPRECATED toggled([int] active) → onToggled([int] active) NEW onAbsorbed([float] hitpoints,[float] rawHitpoints): Emitted when the shield absorbed incoming damage [float] hitpoints: Damage the shield absorbed [float] rawHitpoints: Total damage without taking resistances into account DEPRECATED absorbed([float] hitpoints,[float] rawHitpoints) → onAbsorbed([float] hitpoints,[float] rawHitpoints) NEW onDown(): Emitted when the shield hit points reached 0 due to damage DEPRECATED down() → onDown() NEW onRestored(): Emitted when the shield hit points were fully restored DEPRECATED restored() → onRestored() NEW onEnterLockdown(): Emitted when the shield enters lockdown DEPRECATED enterLockdown() → onEnterLockdown() NEW onLeaveLockdown(): Emitted when the shield exits the lockdown DEPRECATED leaveLockdown() → onLeaveLockdown()
  3. NEW Atmospheric Engines Atmospheric engines are engines designed to operate optimally in the atmosphere Functions activate(): Start the engine at full power (works only when run inside a cockpit or under remote control) deactivate(): Stops the engine (works only when run inside a cockpit or under remote control) NEW [int] isActive(): Checks if the engine is active DEPRECATED [int] getState() → isActive() toggle(): Toggle the state of the engine setThrust([float] thrust): Set the thrust of the engine [float] thrust: The engine thrust in newtons (limited by the maximum thrust) [float] getThrust(): Returns the current thrust of the engine NEW [float] getMaxThrust(): Returns the maximal thrust the engine can deliver in principle, under optimal conditions. DEPRECATED [float] getMaxThrustBase() → getMaxLift() NEW [float] getCurrentMinThrust(): Returns the minimal thrust the engine can deliver at the moment (can be more than zero), which will depend on various conditions like atmospheric density, obstruction, orientation, etc DEPRECATED [float] getMinThrust() → getCurrentMinThrust() NEW [float] getCurrentMaxThrust(): Returns the maximal thrust the engine can deliver at the moment, which might depend on various conditions like atmospheric density, obstruction, orientation, etc. The actual thrust will be anything below this maxThrust, which defines the current max capability of the engine DEPRECATED [float] getMaxThrust() → getCurrentMaxThrust() NEW [float] getMaxThrustEfficiency(): Returns the ratio between the current maximum thrust and the optimal maximum thrust NEW [int] isTorqueEnabled(): Checks if the torque generation is enabled on the engine NEW enableTorque([bool] state): Sets the torque generation state on the engine NEW [vec3] getThrustAxis(): Returns the engine thrust direction in construct local coordinates NEW [vec3] getTorqueAxis(): Returns the engine torque axis in construct local coordinates NEW [vec3] getWorldThrustAxis(): Returns the engine exhaust thrust direction in world coordinates DEPRECATED [vec3] thrustAxis() → getWorldThrustAxis() NEW [vec3] getWorldTorqueAxis(): Returns the engine torque axis in world coordinates DEPRECATED [vec3] torqueAxis() → getWorldTorqueAxis() [int] isOutOfFuel(): Checks if the engine out of fuel NEW [int] getFuelId(): Returns the item ID of the fuel currently used by the engine NEW [int] getFuelTankId(): Returns the local ID of the fueltank linked to the engine [int] hasFunctionalFuelTank(): Checks if the engine linked to a functional Fuel Tank (not broken or colliding) [float] getCurrentFuelRate(): Returns the engine fuel consumption rate per newton of thrust delivered per second [float] getFuelRateEfficiency(): Returns the ratio between the current fuel rate and the theoretical nominal fuel rate [float] getFuelConsumption(): Returns the current fuel consumption rate NEW [float] getWarmupTime(): Returns the T50; the time needed for the engine to reach 50% of its maximal thrust (all engines do not instantly reach the thrust that is set for them, but they can take time to "warm up" to the final value) DEPRECATED [float] getT50() → getWarmupTime() [float] getObstructionFactor(): Returns the obstruction ratio of the engine exhaust by Elements and Voxels. The more obstructed the engine is, the less properly it will work. Try to fix your design if this is the case. [string] getTags(): Returns the tags of the engine [string] setTags([string] tags,[boolean] ignore): Set the tags of the engine [string] tags: The CSV string of the tags [bool] ignore: True to ignore the default engine tags [int] isIgnoringTags(): Checks if the engine is ignoring default tags DEPRECATED getDistance() → No reason to keep it from Engine API, only works for hover engines and vertical boosters
  4. Anti-gravity generator Generates graviton condensates to power anti-gravity pulsors Functions activate(): Activate the anti-gravity generator deactivate(): Deactivate the anti-gravity generator NEW [int] isActive(): Returns the state of activation of the anti-gravity generator DEPRECATED [int] getState() → isActive() toggle(): Toggle the anti-gravity generator NEW [float] getFieldStrength(): Returns the strength of the anti-gravitational field NEW [float] getCompensationRate(): Returns the current rate of compensation of the gravitational field NEW [float] getFieldPower(): Returns the current power of the gravitational field NEW [int] getPulsorCount(): Returns the number of pulsors linked to the anti-gravity generator setTargetAltitude([float] altitude): Set the target altitude for the anti-gravity field. Cannot be called from onFlush DEPRECATED [float] setBaseAltitude() → setTargetAltitude() NEW [float] getTargetAltitude(): Returns the target altitude defined for the anti-gravitational field NEW [float] getBaseAltitude(): Returns the current base altitude of the anti-gravitational field
  5. NEW Airfoil Airfoils are aerodynamic elements that produce a lift force according to their aerodynamic profile; as wings, stabilizers and ailerons Functions [float] getLift(): Returns the current lift of the airfoil DEPRECATED [float] getThrust() → getLift() [float] getMaxLift(): Gives the maximum lift that the airfoil can generate, under optimal conditions. DEPRECATED [float] getMaxThrustBase() → getMaxLift() NEW [float] getDrag(): Returns the current drag of the airfoil NEW [float] getDragRatio(): The ratio between lift and drag, depending of the aerodynamic profile of the airfoil NEW [float] getCurrentMinLift(): Returns the minimal lift the airfoil can deliver at the moment (can be higher than zero), which will depend on various conditions like atmospheric density, obstruction, orientation, etc DEPRECATED [float] getMinThrust() → getCurrentMinLift() NEW [float] getCurrentMaxLift(): Returns the maximal lift the aifoil can deliver at the moment, which might depend on various conditions like atmospheric density, obstruction, orientation, etc. The actual lift will be anything below this maximum lift, which defines the current max capability of the airfoil. DEPRECATED [float] getMaxThrust() → getCurrentMaxLift() NEW [float] getMaxLiftEfficiency(): Returns the ratio between the current maximum lift and the optimal maximum lift DEPRECATED [float] getMaxThrustEfficiency() → getMaxLiftEfficiency() NEW [vec3] getLiftAxis(): Returns the airfoil lift direction in construct local coordinates NEW [vec3] getTorqueAxis(): Returns the airfoil torque axis in construct local coordinates NEW [vec3] getWorldLiftAxis(): Returns the airfoil lift direction in world coordinates DEPRECATED [vec3] thrustAxis() → getWorldLiftAxis() NEW [vec3] getWorldTorqueAxis(): Returns the adjustor torque axis in world coordinates DEPRECATED [vec3] torqueAxis() → getWorldTorqueAxis() NEW [int] isStalled(): Checks if the airfoil is stalled NEW [float] getStallAngle(): Returns the airfoil stall angle NEW [float] getMinAngle(): Returns the minimum angle to produce the maximum lift of the airfoil. Note that the airfoil will produce lift at a lower angle but not optimally NEW [float] getMaxAngle(): Returns the maximum angle to produce the maximum lift of the airfoil. Note that the airfoil will produce lift at a higher angle but not optimally [float] getObstructionFactor(): Returns the obstruction ratio of the engine exhaust by Elements and Voxels. The more obstructed the engine is, the less properly it will work. Try to fix your design if this is the case. [string] getTags(): Returns the tags of the engine [string] setTags([string] tags,[boolean] ignore): Set the tags of the engine [string] tags: The CSV string of the tags [bool] ignore: True to ignore the default engine tags [int] isIgnoringTags(): Checks if the engine is ignoring default tags DEPRECATED activate() → No reason to keep it from Engine API DEPRECATED deactivate() → No reason to keep it from Engine API DEPRECATED [int] getState() → No reason to keep it from Engine API DEPRECATED setThrust([float] thrust) → No reason to keep it from Engine API DEPRECATED [int] isOutOfFuel() → No reason to keep it from Engine API DEPRECATED [int] hasFunctionalFuelTank() → No reason to keep it from Engine API DEPRECATED [float] getCurrentFuelRate() → No reason to keep it from Engine API DEPRECATED [float] getFuelRateEfficiency() → No reason to keep it from Engine API DEPRECATED [float] getFuelConsumption() → No reason to keep it from Engine API DEPRECATED [float] getDistance() → No reason to keep it from Engine AP DEPRECATED [float] getT50() → No reason to keep it from Engine API
  6. NEW Airbrake Atmospheric airbrakes are elements designed to produce thrust opposite to the movement of a construct in the atmosphere. It that can be used to slow down your construct Functions activate(): Start the brake at full power (works only when run inside a cockpit or under remote control) deactivate(): Stops the brake (works only when run inside a cockpit or under remote control) NEW [int] isActive(): Checks if the brake is active DEPRECATED [int] getState() → isActive() toggle(): Toggle the state of the brake setThrust([float] thrust): Set the thrust of the brake. Note that brakes can generate a force only in the movement opposite direction [float] thrust: The brake thrust in newtons (limited by the maximum thrust) [float] getThrust(): Returns the current thrust of the brake NEW [float] getMaxThrust(): Returns the maximal thrust the brake can deliver in principle, under optimal conditions. DEPRECATED [float] getMaxThrustBase() → getMaxThrust() NEW [float] getCurrentMinThrust(): Returns the minimal thrust the brake can deliver at the moment (can be more than zero), which will depend on various conditions like atmospheric density, obstruction, orientation, etc. DEPRECATED [float] getMinThrust() → getCurrentMinThrust() NEW [float] getCurrentMaxThrust(): Returns the maximal thrust the brake can deliver at the moment, which might depend on various conditions like atmospheric density, obstruction, orientation, etc. DEPRECATED [float] getMaxThrust() → getCurrentMaxThrust() [float] getMaxThrustEfficiency(): Returns the ratio between the current maximum thrust and the optimal maximum thrust NEW [vec3] getThrustAxis(): Returns the brake thrust direction in construct local coordinates NEW [vec3] getWorldThrustAxis(): Returns the brake thrust direction in world coordinates DEPRECATED [vec3] thrustAxis() → getWorldThrustAxis() [float] getObstructionFactor(): Returns the obstruction ratio of the engine exhaust by Elements and Voxels. The more obstructed the engine is, the less properly it will work. Try to fix your design if this is the case. [string] getTags(): Returns the tags of the engine [string] setTags([string] tags,[boolean] ignore): Set the tags of the engine [string] tags: The CSV string of the tags [bool] ignore: True to ignore the default engine tags [int] isIgnoringTags(): Checks if the engine is ignoring default tags DEPRECATED [int] isOutOfFuel() → No reason to keep it from Engine API DEPRECATED [int] hasFunctionalFuelTank() → No reason to keep it from Engine API DEPRECATED [float] getCurrentFuelRate() → No reason to keep it from Engine API DEPRECATED [float] getFuelRateEfficiency() → No reason to keep it from Engine API DEPRECATED [float] getFuelConsumption() → No reason to keep it from Engine API DEPRECATED [float] getDistance() → No reason to keep it from Engine AP DEPRECATED [float] getT50() → No reason to keep it from Engine API DEPRECATED [float] torqueAxis() → No reason to keep it from Engine API
  7. NEW Adjustor Adjustors are specific motors that expel gas to generate torque on your construct. Functions activate(): Start the adjustor at full power (works only when run inside a cockpit or under remote control) deactivate(): Stops the adjustor (works only when run inside a cockpit or under remote control) NEW [int] isActive(): Checks if the adjustor is active DEPRECATED [int] getState() → isActive() toggle(): Toggle the state of the adjustor setThrust([float] thrust): Set the exhaust thrust of the adjustor [float] thrust: The adjustor thrust in newtons (limited by the maximum thrust) [float] getThrust(): Returns the current exhaust thrust of the adjustor NEW [float] getMaxThrust(): Returns the maximal exhaust thrust the adjustor can deliver DEPRECATED [float] getMaxThrustBase() → getMaxThrust() NEW [vec3] getThrustAxis(): Returns the adjustor exhaust thrust direction in construct local coordinates NEW [vec3] getTorqueAxis(): Returns the adjustor torque axis in construct local coordinates NEW [vec3] getWorldThrustAxis(): Returns the adjustor exhaust thrust direction in world coordinates DEPRECATED [vec3] thrustAxis() → getWorldThrustAxis() NEW [vec3] getWorldTorqueAxis(): Returns the adjustor torque axis in world coordinates DEPRECATED [vec3] torqueAxis() → getWorldTorqueAxis() DEPRECATED [int] isOutOfFuel() → No reason to keep it from Engine API DEPRECATED [int] hasFunctionalFuelTank() → No reason to keep it from Engine API DEPRECATED [float] getCurrentFuelRate() → No reason to keep it from Engine API DEPRECATED [float] getFuelRateEfficiency() → No reason to keep it from Engine API DEPRECATED [float] getFuelConsumption() → No reason to keep it from Engine API DEPRECATED [float] getDistance() → No reason to keep it from Engine API DEPRECATED [float] getT50() → No reason to keep it from Engine API
  8. Hello noveans! As explained in the Mercury Lua devblog, the update is bringing too many changes to list them in such an article. We therefore decided to detail them on a separate thread for players interested in the details! LUA API CHANGES In this post, we will then go through each API, one by one, identifying the new additions and changes in the alphabetic order. To list the general changes: Added new `player` permanent slot. Represents the local player, usually called MasterPlayer in the API. Give access to name, id, nanopack mass/volume, headlight control, parenting, etc. Added new `construct` permanent slot. Represents the control unit construct, usually accessed through the Core Unit API. Give access to name, warp status, pvp status, more physics data, etc. Implemented new naming convention for events. Changed container content acquisition behavior to a fixed minimum inter-request delay of 30 sec. Added more item API support in containers and industry API. Added specialized API for all engine type elements, such as wings, adjusters, atmospheric engines, space engines, airbrakes, space brakes, vertical boosters, hover engines, rocket engines. Added Lua API for weapons Added Lua API for plasma extractor Re-enabled HDR color support for lights Added Lua left mouse click action for onActionStart, onActionStop and onActionLoop events, as "leftmouse". Replaced all string status values with integers for better comparisons and to be future-proof. Redesigned the Counter element API to make it more interesting. Redesigned the Telemeter element API to make it more interesting. Added several useful functions on different elements I invite you at the same time to study the details of the changes in the posts of this thread to see all the subtleties! As stated in the previous devblog, our goal is to remove all depreciation at launch. However, this will remain dependent on our ability to release the new flight configuration before then and on the feedback we get from our community. In any case, we will keep you informed if this is retained at release. LUA API MOCKUP ON GITHUB! In addition to that, we published a mockup of the API on our public GitHub. We've made it as usable as possible, directly for use in Visual Studio Code, community tools, etc. It's free to use, so please enjoy! https://github.com/dual-universe/lua-examples The goal will be to update it with every major update we make for the future. CONCLUSION I hope you will like these changes, from the more concrete to the more subtle ones. I can't wait to see what you'll create with all these additions! And I hope it will inspire you. Thank you all for the support you have shown for this revamp, it encourages us to go further. Our goal is and will remain to offer you more and better Lua tools, so you can create your own content!
  9. This is something we would like to add for sure, however it has multiple requirements before that we need to take care of first. So I can't yet answer when or if we will do it currently, sorry.
  10. It seems that this information has not been detailed, but the panel overview contains two pages, home (home icon) and skins. So if it can reassure you, the home page will contain general information like : - Current balance - Current owned constructs (with the maximum based on your talents) - Current territories count (with the X/5 HQ reserved) - Linked container range - Current calibration charges (with maximum based on your talents) - Charge regeneration time (based on your talents) Don't worry about values, developer accounts have super-powerful talents.😁
  11. Hi @Kormolos! Local channels are made for short range exchanges, like a tile for example. In your case, you can create a private channel with /join <channel_name> and share it with your teammates even if they are not from the same organization.
  12. Hi @Jeronimo! There is a difference between loading only the positions, and loading all the elements, the construction data, the environment data for any kind of elements you might want to control. It's not just about positions, but also about things like loading, control, concurrency race, environment, etc. It would be exactly like having your client at each position of your target build and wanting to get control/data at the same time And that triggered by script. If you have a detection zone, if you have a radar, a telemeter, if you have engines, industries ...etc you have directly more and more data to load, as if you were there. To close this subject, it's not something we could keep under control, and would be very heavy on many points. It do not mean we do not consider to have higher range emitters, or higher range radar (which are a totally different problematic), just means that we can't keep things loaded constantly for control, or data get for all of your constructs...etc
  13. Hi @Wolfram Indeed, thanks for your comment! It is indeed a tricky implementation to set up. We would like to add a lot of things you know, but sometimes it takes more time or sometimes it needs a restriction to save the security aspect or the server data exchange ...etc. This is one of the main reasons why we prefer not to promise things, but to check with you your wishes in order to be able to design a solution adapted between our constraints and your wishes. As far as the user interface goes, I'm less in the business, but we could add something, like a price reduction rate by tens or something like that; we'll think about that and discuss it with the team.
  14. @Gottchar If we're able to implement the API as I would like, should be able to do that by using the PB to set the content of the batch from the screen , yes no issues on that. However, in absolute, I can't promise you that it will be possible, there are still some points to study. But that's the goal. And as usual, if we implement it, I will publish a code example to do that.
  15. Hi everyone! For those of you reading this thread later, this requested feature has been added to Athena Update 0.29.
  16. @Yoarii First of all, the links are a mechanic made to limit things, and even though you can use a lot of programming boards ... etc, it's still not as convenient, and so it pushes players to not have too much of that. Simplifying things is going to push more people to do it, and the people who were already doing it, are going to be able to do it even more. That's why I said server requests. And then we don't want to, by gamedesign, have control over everything without using links. On that point, it's a no-no. Even though we might consider adding subscription to events in Lua, links are still needed to limit players in DU for now. I can understand the frustration, believe me, but it is an essential part of the game. So, on that note, we will keep that link requirement. On that note, I remain firm sorry. And for the tag on dispenser ; only one per dispenser, it's used to be able to group dispensers together and make that if you have delay set for example, it will prevent the player to take a batch on other dispensers of the tagged group.
  17. And in addition @Yoarii, for the getTag and setTag, not all elements have tags. And it's not the same thing here, than engine tags for example.
  18. Hi @Yoarii @Gottchar ! So to answer to remarks : Have access from the core, and not via link : Not for in fully honesty, firstly because it could push people to use more and more dispensers and so generate a large amount of server requests on changes. Secondly, if you could be able to change the price, batch ...etc you would no longer need a soo large array of dispenser, no ? Activate / Deactivate : Sorry if I explained it wrong, the point is simply that there is no state. If we want to add this enable/disable feature, it just means we have to add it. My goal here is mainly to make sure I have a clear vision for you on what can be done, what needs to be done if we want to do it, and for me to make sure I understand what you want.
  19. Hi there ! Just for people who may come to this thread in the future, this problem has been fixed on the Athena update.
  20. Hi there ! We considered the text rotation, but was not possible some aspects. So we added full layer transformations support on Athena update, so you can use that to rotate your text.
  21. HI Yoarii ! I just saw your topic yesterday, so replied on it To summarize your post : Trigger controller from a container event : The main problem I see for this, is that this analog signal will start the controller, ok, no problem here, but will not provide any data because it will not trigger a potential event like onAdded for example, so lose interest no? Adding a Lua event providing the interacting player, or the added element ... etc has a strong potential, but the logical signal, not sure. 🤔 Reverse dispensers, as answered on your topic The forgotten Dispenser API , it would need a new dev on it to add it. So it may take some time. Adding a smaller dispenser: means a new asset to design and a lower dev but still to do. And logically a limitation on one aspect, because otherwise it will make the "classic" dispenser useless; to be considered. Multiple containers per dispenser : Can be a tricky point, because can lead to an high server cost on container change subscription. Not sure can be done 🤔 However, I hope this answers your question. And remember, I can't give any promises, we have a lot of work to do and some things you would like to see, and I would like to see, can't be done for a long time.
  22. So ! First point, do not hesitate to ping on thread about the Lua. I can't spend a lot of time on the forum, because we have a lot of work to do, but even if I can check on time a week, it let know interesting and even useful threads about Lua Else I totally miss these thread and reply weeks (and month here 😅 later) Secondly, so, I do not promise anything, but just would check your proposals about the dispenser API. So to sum your posts : SetPrice(price) / GetPrice() - I don't see anything against that. Activate() / Deactivate() - There is no state on dispensers currently, you activate ou deactivate it. GetContainerId() - Would be the local id, the id of the container on the construct. HasBatchContents() - If we add a function to get the content of the batch, this functions would be useless. BatchesAvailable() - Can be a bit harder to be done, but indeed could be a nice to have. getPermissionDebit() - No RDMS control on Lua yet, so not possible. getPermissions() - Same as previous For reversed dispenser, it require to add an other and specific element with so a new dev on that. So to summarize, it would be (no promises guys huh 😉) ?? setBatchPrice([float] price, [bool] notify) : Set the price of the batch and if you want to notify the player (only if the price is 0). [float] getBatchPrice() : Return the batch price set. setDelay([float] delay) : Set the delay between two batch claim. [float] getDelay() : Return the delay set between two batch claim. setBatchLimit([int] limit) : Set the limit of batch per player. getBatchLimit() : Return the limit of batch per player set. setPlayerBeneficiary([int] pId) : Set the player with the given ID as beneficiary. setOrgBeneficiary([int] oId) : Set the organisation with the given ID as beneficiary. setTag([string] tag) : Set the tag of the dispenser. [string] getTag() : Return the tag of the dispenser. setBatchContent([table] content) : Set the batch content for the table in format {{id, quantity},{id, quantity}, ...} [table] getBatchContent() : Return the batch content as table of pair itemId and quantity. [int] getContainerId() : Return the local id of the container. [int] getBatchAmount() : Returns the amount of batches available in the linked container. [event] purchased([int] pId) : Emitted when a a player claim a batch. The lack of an entity/portfolio API can be a hindrance to adding a distributor API, to designate the beneficiary. The item API was a requirement to consider the dispenser API addition.
  23. Hi @Dakanmer Let me reply to your proposals in order of your list : Get docked construct name by ID This is a gameplay choice, we always wanted to keep this aspect of needing a sensor to get information outside the construction. Just like a telemeter for example. So the use of a radar is a gameplay choice. However considering it's "docked" construct ... potentialy 🤔 Get docked construct position/orientation by ID Same that the first point. Get active waypoint Can be a privacy/security issue to get the waypoint of the player, could be used to track other players destinations. 🤔 Even if we put that on explicit use only this issue still relevant. To consider ... A category for "database" in the codex Will see if we can add it to the codex (which is auto generated and do not parse Lua libs). Categories for other function types that aren't listed but can be used, if there are any others (like database), or updating existing categories with functions that aren't listed but exist Same, I see the point as Navigator ...etc Same than the previous point. Warp drive API Setting the warp destination is a bit complex, considering it's not a position but a warp beacon or planet. It adds some consideration as "How the player get the destination ?" "How do we designate a destination ?" ...etc An other point is automation on that point. Getting warp destination, same issues, but not really for the automation, but for the "How". Warp cell cost ? Absolutely nothing against on that point ; a function getWarpCost, getWarpAvailableCells (or something like that 😅 ) Deactivate ... automation possibility 🤔 Warp beacon API and/or perms RDMS API is a complex subject. What do you expect as API ? There is no action to do on the element without Lua, so we don't see what to add on Lua. Clear waypoint Hmmm, no real problem in mind. So it could be added. Do not hesitate to ping me, else I can miss some useful topics like that
  24. Hi everyone! Well before starting, I would like to thank you for your feedback, whether it is positive or "less positive". I will try to answer your questions in a general way, hoping to bring the hoped answers. First of all, I must respond to the critics: I can totally understand that this aspect of the game is secondary for you, and it's normal, not all players are interested in Lua, just like not all players are interested in pvp, or industry, voxelmancy ...etc. But remember that in a studio, not everyone is working on the same thing at the same time. People who work on Lua, and myself, are multi-tasking but not necessarily working on pvp, or content, or art...etc at the same time, or even just for some like me, pvp/content/art is not in their work domain. It do not means that there is nobody working on these aspect when we do some Lua changes. Core to core data exchange & elements LOD This aspect is really complex, when Lua is run locally by the client, it always has to interact, get data from elements or control them. So the more access you want to add, the more data you have to constantly load/request. This can be very tricky on the server side. Imagine, having the ability to get rangefinder or radar data from a building at a distance of 10 SU (for an absurd example), you have to get ALL the buildings around the target, terrain voxels...etc! That's a lot of data to query, load, update, etc. And on top of that, even with all the good will in the world, it is really complex to keep everything loaded all the time. That's why we've even added a build limit setting, to allow players to adjust it according to their bandwidth and computer configuration. Anyway, even if we could, I say could, rework systems for receiver transmitters, we will certainly not be able to allow the loading of a remote construct and the proximity environment ... etc. So to answer, say, really complex problem. Static image URL I didn't saw this thread @Juvenius Drakonius (do not hesitate to tag me on Lua related stuff, even if I will not reply every time obviously, it let me know the subject and let you know that I saw that). 😉 It's an idea, something to consider 🤔 Potentially, if we could add a way to update an image on the "upload image" page of your profile, it could do the same thing. I'll discuss this with the team. No promises, we'll see. But one point is the validation process of the image, it means it would have to repass by it to be sure the player do not upload a forbidden image. Industries, dispensers next ? As you may have read at the end of the devblog, we've outlined the fact that we think the item API approach can be good and would like to get your feedback on it since we could then apply it to other aspects of the game. So, the aspects affected could potentially be, if the item API formula works: industries, containers, elements in general, and dispensers ...etc. That's one of our goal behind the item API, so potentially if you feel this approach the good one 😉. Camera direction function not working ? Don't worry @Modgud,it's not a bug, it looks like you're using the wrong function for what you expect. Indeed, getMasterPlayerForward returns the front vector of your character, not the camera. To get the forward vector of the camera, you should use getCameraForward() or getCameraWorldForward () depending of the coordinate system you want to use (These links reach the awesome online CODEX made by a community member, it can help you a lot). An other word Finally, I'd like to address this word; keep in mind that we'd like to do a lot of things too, and a lot of which come from our players' ideas, but there are multiple issues and constraints; both human in terms of available resources; Lua remains a secondary feature, as well as community; some want to push the dev on this, or want this or that freedom, there are multiple opinions similar to yours and multiple opposed to yours. Especially on Lua, some would like to not hold back from breaking a good part of the API to improve it, and others are totally against it because it would break their scripts. That's why it's important to tell us what you think about these devblog threads, so that we can know if a majority prefers this or that approach. Anyway, thank you all the same for welcoming the evolutions we make on the Lua and for sharing your ideas and desires. 🙂
  25. Hi @Mncdk1, Construct speed loss We are well aware of this problem. When we don't speak up yet, it is usually because we are still analyzing the problem. We need to find out the reason of the problem and how to solve it before promising any fix or date. However, if it can reassure you, as @NQ-Deckard announced on Discord, we think we have identified the problem and have a fix in the pipeline. See below the full announce posted on Discord.
×
×
  • Create New...