Jump to content

Davian_Thadd

Alpha Team Vanguard
  • Posts

    94
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Davian_Thadd got a reaction from Kaladan in Guide de démarrage - par CodeInfused - Version FR   
    Pour ceux qui l'auraient peut etre vu passer coté EN, @CodeInfused a réalisé une très bonne infographie pour aider les joueurs à commencer Dual Universe avec quelques tips pour la premiere semaine de jeu.

    Ayant discuté avec lui, nous avons fait une version FR de ce guide  

  2. Like
    Davian_Thadd reacted to NQ-Wanderer in NEW BLUEPRINT TOOLS AT LAUNCH   
    Rebuilding Helios will be easier with our enhanced Blueprint Deployment Tools.
     
    bptoolv3.mp4  
    You can omit any element, swap missing honeycomb, and soon after launch, snap blueprints to deployed cores.
     
    What will you build first, Novean?
  3. Like
    Davian_Thadd reacted to NQ-Nyota in A Magic Bus Tour Community Event!   
    All aboard the NQ Magic Bus Tour!
     
    With the reset and launch fast approaching, do you find yourself feeling a bit nostalgic? Then please join us on our Magical Bus Tour!
     
    NQ-Nicodemus and NQ-Rubicon will be piloting our flying bus, that will go through twists and turns and of course, space! Buckle up and enjoy the warp drive and the scenic stops along the way. (You may even be sitting next to some other Novaquark folks who will be along for the ride!)
     
    Your tour guide will be NQ-Nyota, and she will be welcoming you to our Magic Bus Tour with quirky tidbits and perhaps bring you places in Dual Universe that you may have not seen yet! And even if you have, what’s cooler than warping through space in a bus with your fellow Noveans? (Wait, don’t answer that, wait for the tour!)
     
    There will be two routes to choose from that will stop at different locations, some that you’ll have the opportunity for a short time to hop off the bus and explore. Route A we are calling The Inner Sanctum and Route B is The Outer Limits. Where will you be taken? Well, it depends which bus tour you make it to!

    Don't forget to check-in by getting a free gift at the dispenser at the front of the bus!
     
    Magic Bus Tour Information:
     
    All tours start and end at The Institutes (also known as District 11). This is on Alioth and can be found under Points of Interests to help you find it. Please be on time!
     
    We will be using the local chat channel for communications.
     
    Tour Departure Times:
     
    Route A: Thursday September 15th @ 18:00 UTC
    Route B: Thursday September 15th @ 23:00 UTC
     
    Route B: Friday, September 16th @ 19:30 UTC
    Route A: Saturday, September 17th @ 1:00 UTC (For those in North America, that is Friday September 16th 9:00 PM Montreal/New York Time)
     
    Route A: Saturday, September 17th @ 15:00 UTC
     
    The ability to VR will be available to join these bus tours! Just join the public access VR named - NQ Magic BUS Tour 01. 
     
    If you choose to hop on the bus with us, please remember to empty your inventory, the tour bus is not a cargo vessel and we can’t be responsible for any of your items.
     
    Please use the resurrection node available at the front of the bus! We will do our best to keep you safe but we are unable to guarantee your safety during these trips. While our Community Team Pilots are well experienced and will do their best to keep you safe at all times, there is always a small potential for possible problems that may arise. Thank you for understanding. 
     
    Please remember to remain seated at all times while enjoying the ride. We look forward to seeing you there! 
     
    Don’t forget to take photos (screenshots) and share them in our discussion thread.
  4. Like
    Davian_Thadd reacted to NQ-Wanderer in RESET: HOW TO PREPARE   
    Hello, Noveans!
     
    With the launch of Dual Universe a month away, we want to talk about how to prepare for the upcoming server reset.
     
    We’ve outlined the parts of your gameplay that you’ll keep post-reset in our announcement video and in the letter from our Creative Director. Today, we want to expand on that and discuss how best to prepare for the reset and how to get the most out of it.
     
    PREPARE YOUR CORE BLUEPRINTS

    Make a Core Blueprint of every construct you want to keep and make sure that you store it in your nanopack or in a container on a construct that you own, though we advise that you keep them in your nanopack as it’s the safest place to store them.
     
    If you have Core Blueprints in the care of others or in other locations around Helios, don’t forget to gather them, should you want to keep them. Being the original owner of a Core Blueprint has no impact on Core Blueprints outside of your possession. You will keep only those Core Blueprints in your nanopack and owned containers.
     
    The same applies to organization-owned Core Blueprints. If you’re a superlegate of an organization, make sure that you store your Core Blueprints in your nanopack or that they’re stored in a container on a construct owned by your organization, though again, we advise that you keep them in your nanopack.
     
    PREPARE YOUR ORGANIZATIONS

    Make sure that each organization you want to keep has a player as its superlegate. Any organization without a player as its superlegate will be lost at the reset.
     
    Make a list of members you would like to reinvite after the reset. Though any organization with a player as its superlegate will remain after the reset with its Core Blueprints, Name, Logo, and Manifesto intact, membership will be reset.
     
    You can use the in-game contacts system (which will remain after the reset) to keep track of your members or simply make a list outside of the game. 
     
    DON’T WASTE TIME PREPARING YOUR MINING UNITS

    We will reset the ore distribution on each body in Helios. To find good spots for your mining units, you’ll need to re-build your Territory Scanners and hunt the tiles down. None of your pre-reset knowledge of hotspots will be valid post-reset.
     
    PIONEER PACKS AND THE TALENT ACCELERATOR 

    The Pioneer Packs' items will be delivered in the first month after launch. If you’d like your collectibles, you’ll need an active subscription, and you’ll need to log into the game during its first month after release to receive them.
     
    The talent point and quanta awards will be given on the final day of each month for the first six months of release. Again, you’ll need an active subscription to receive them.
     
    Finally, if you've subscribed to the game, ensure that you have at least six months of talent training queued up. The talent point accelerator event, which is open to all players, will boost your talent point acquisition in the first six months of launch by:
    100% for the first month 50% for months two, three, and four 25% for months five and six   
    The launch of Dual Universe will likely be the last time in the game's life where the economy will be an even playing field. Though beta players and backers will gain some advantage by the end of the six-month launch period, the start of the launch will see every player on the same starting line. There’s never been a better time to join! 
     
    We’re excited to see you in Helios on the 27th of September. In the meantime, don’t hesitate to share your feedback on reset preparation here.
  5. Like
    Davian_Thadd got a reaction from Msoul in Guide de démarrage - par CodeInfused - Version FR   
    Pour ceux qui l'auraient peut etre vu passer coté EN, @CodeInfused a réalisé une très bonne infographie pour aider les joueurs à commencer Dual Universe avec quelques tips pour la premiere semaine de jeu.

    Ayant discuté avec lui, nous avons fait une version FR de ce guide  

  6. Like
    Davian_Thadd got a reaction from Omukuumi in Guide de démarrage - par CodeInfused - Version FR   
    Pour ceux qui l'auraient peut etre vu passer coté EN, @CodeInfused a réalisé une très bonne infographie pour aider les joueurs à commencer Dual Universe avec quelques tips pour la premiere semaine de jeu.

    Ayant discuté avec lui, nous avons fait une version FR de ce guide  

  7. Like
    Davian_Thadd got a reaction from Leonis27t in Guide de démarrage - par CodeInfused - Version FR   
    Pour ceux qui l'auraient peut etre vu passer coté EN, @CodeInfused a réalisé une très bonne infographie pour aider les joueurs à commencer Dual Universe avec quelques tips pour la premiere semaine de jeu.

    Ayant discuté avec lui, nous avons fait une version FR de ce guide  

  8. Like
    Davian_Thadd got a reaction from ch3w8a in Guide de démarrage - par CodeInfused - Version FR   
    Pour ceux qui l'auraient peut etre vu passer coté EN, @CodeInfused a réalisé une très bonne infographie pour aider les joueurs à commencer Dual Universe avec quelques tips pour la premiere semaine de jeu.

    Ayant discuté avec lui, nous avons fait une version FR de ce guide  

  9. Like
    Davian_Thadd reacted to VarietyMMOs in Dual Universe Ore Balancing   
    Ore
    Currently Dual Universe has far to much ore. You can look at many reasons to as why this is the case such as lower population, large amount of alts, picking up and placing auto miners to obtain high tier ore to mine (nq really?). My thoughts are it's a combination of a few problems. Population, active vs passive game play & solo/safety vs team work.
     
    Currently auto miners allow a single player to obtain far more resources then any average player would use, even if said player used all the ore which is simply unlikely the ore ends up in products which floods the market. Auto miners are further abused by alts which will exist as long as there is profit. The end result is either the profit is so low no one uses alts = Fail (due to tax) or Its so valuable people abuse alts and get an unfair advantage that cannot be taken away from them (lets be real, atmo pvp isn't coming any time soon) = also a fail.
     
    My suggestion is to dice game play up unto tiers and giving different types of game play to obtain ore to encourage active game, team play and trading.
     
    Auto miners
    I would suggest that all t4/t5 is removed from auto miners all together, having unlimited safe access to the highest tier ore in the game makes no sense to begin with.
    Every tile should offer a healthy amount of each t1 ore. Doing so allows new players to arrive on any planet and allow them to get t1 voxels, dabble in factory and play the casual play style solo style many people want to enjoy without being shafted by things happening in the universe. I believe t2 should be in healthy amounts mostly for space fuel with t3 having a lesser amount for warp cells but not an unlimited overflow as we're having right now (if every person warps every ship for any reason there's a problem)
     
    Once a player has auto miners placed, they've dabbled in building, mined some safe zone asteroids (active game play!!!), factory, bought a warp drive and experienced most aspects of the game they have a decision to make. Join an org or stay solo. If a player decides they want to remain solo they can create/barter for any luxury items they want and continue to play without  changes to dual universe stopping their game play.
     
    Lets move onto the section that every solo player aspiring to be the richest person in the universe is going to HATE.
     
    T4/T5 & Asteroids. 
     
    t1/t2 should be everywhere in bigger nodes/less popcorn nodes across all asteroids both in the safe zone and the PVP zone. This will allow new players to aim for the stars and use active game play to obtain resources faster then someone would passively (as it should be??). It's very important that players not only have an active aspect to mining but it must be extremely fast compared to auto miners to devalue alts and to encourage game play/getting people into space.
     
    With the nerf to t3 from auto miners the t3 should be more easily obtainable from t2+ asteroids. While I do believe there should be some in the safe zone asteroids it should never come to the point in which people warp everything every time for obvious reasons. Warp cells should not be rare but nor should they be everywhere.
     
    With t4/t5 being removed from auto miners the amount of t4/t5 asteroids needs to be increased as well as more ore being in each asteroids via more nodes and larger nodes. 
     
    My logic If t4 is easily obtained people simply say rare elements are good enough and have no desire to obtain exotic items completely devaluing the hardest tier of ore to obtain as well as plasma which will effectively kill alien cores just as auto miners has done to asteroids. The assumption that the population will be larger post launch so the ore per person playing is lower is a valid argument but the argument that the difference between t4/t5 is so small there's no point to attacking alien cores must be considered. The cost % and power % increase between rares to exotics makes no sense, 1000% increase for a 10% increase at best? If you used the guns in pve for an unlimited amount of time making them extremely valuable I can see this work but in dual universe in which you are constantly risking elements to extremely unpredictable battles makes it far to costly. 
     
    One could make the argument and say exotics should only be slightly better and more available, those people making this argument only care about getting cheap powerful elements and do not care about the org/alliance aspect of alien cores. A person may also make the argument that legion controls all the cores but this argument also falls flat on its face looking ahead to launch. If a single alliance controls every pvp point in the game that's a failure on nqs balancing side and has nothing to do with some elements being slightly better. 
     
    End point. I believe auto miners should provide ample t1 and supplement t2/t3 instead supply all the ore in the game you need removing active game play. As with any other game the highest tiers of elements in the game (t4/t5) should require engagement in the community or have successful people trade for it.  
     
    Edit : High tier asteroids must not spawn near the safe zone boarder!
     
  10. Like
    Davian_Thadd reacted to NQ-Wanderer in DEVBLOG: MERCURY LUA API REVAMP   
    "Hello Noveans, this is NQ-Ligo.

    Whether you’re piloting with Lua, hauling cargo on a scripted VTOL platform, controlling a factory with screens and programming boards, or simply enjoying an in-game arcade machine, Lua can impact almost every aspect of your experience in Dual Universe.

    After many years of accumulating Lua updates and additions, it’s time to revamp the Lua API of Dual Universe entirely. Our objective is to enhance and future-proof the tools available to those who create the fantastic scripts enjoyed by everyone in-game.

    WHY REVAMP LUA API?

    We must rework the Lua API to prepare it for future extensions by organizing it better, making it easier to use, and enhancing the tools available to our Lua creators. From a global point of view, the vision we have for Lua has evolved, and though we’re preparing a detailed changelog on our forum, here are some highlights:
    Restructuring of the entire Lua API. Preparing for an object-oriented approach to be ready for future evolutions. Reduce JSON use in the API to favor the use of real Lua tables. Rely much more on event-driven code to reduce player loops and server requests. Reduce the complexity of the scripts, thereby reducing their size. Add some nice-to-have features. Garner more interest in certain elements like the telemeter.  
    WHAT’S CHANGING WITH THIS LUA API REVAMP?

    With the many changes coming to the API, we wanted to give you some of the highlights, while as we said above we’ll be giving you the specifics in another communication. For now, I want to discuss some of the most significant changes with you all in this devblog:

           NEW NAMING CONVENTION

    We needed to apply a clean naming convention with this revamp to make Lua easier to use. This will become even more necessary as we expand the Lua API in the future.
    As a result, multiple functions have been renamed, but most importantly, events will receive a name change. Any event will have a prefix ‘on’ from now on, for example:
    unit.onStart() unit.onStop() system.onUpdate() system.onFlush() unit.onTimer([string] tag)  
     
           TWO NEW PERMANENT SLOTS ADDED

    As part of the API restructuring, we have decided to add two new permanent slots:
    `player` - This will represent the player using the script. Usually referred to as the "Master Player" in the current Control Unit or System API. `construct` - This will represent the construct on which the controller running the script is placed. Most of the construct-related functions were in the Core Unit API.  
    Each of these slots will have the associated functions and events and will receive some additions. Let's take the example of `construct`. You will find functions and events coming from the Core Unit API and some additions. To give you an idea, here is just a snippet of the `construct` API:
    [string] getName() : Returns the name of the construct. [int] getId() : Returns the construct unique ID. NEW [table] getOwner() : Returns the owner entity of the construct. NEW [table] getCreator() : Returns the creator entity of the construct. NEW [0 or 1] isWarping() : Checks if the construct is currently warping. NEW [int] getWarpState() : Returns the current warp state (Idle = 1, Engage = 2, Align = 3 …). NEW [0 or 1] isInPvPZone() : Checks if the construct is in the PvP zone. NEW [float] getDistanceToSafeZone() : Returns the distance between the construct and the nearest safe zone. [string] getPvPTimer() : Returns the current construct PvP timer state. [float] getMass() : Returns the mass of the construct. [float] getInertialMass() : Returns the inertial mass of the construct, calculated as 1/3 of the trace of the inertial tensor. NEW [matrix] getInertialTensor() : Returns the inertial tensor of the construct. NEW [vec3] getCenterOfMass() : Returns the position of the center of mass of the construct, in local construct coordinates. NEW [vec3] getWorldCenterOfMass() : Returns the position of the center of mass of the construct, in world coordinates. [float] getCrossSection() : Returns the construct's cross sectional surface in the current direction of movement. [vec3] getSize() : Returns the size of the building zone of the construct. NEW [vec3] getBoundingBoxSize() : Returns the size of the bounding box of the construct. NEW [vec3] getBoundingBoxCenter() : Returns the position of the center of the bounding box of the construct in local construct coordinates. [float] getMaxSpeed() : Returns the max speed along the current moving direction. [float] getMaxAngularSpeed() : Returns the max angular speed. [table] getMaxSpeedPerAxis() : Returns the max speed per axis. [table] getMaxThrustAlongAxis( [string] taglist, [vec3] CRefAxis) : Returns the construct max kinematics parameters in both atmo and space range, in newtons. 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.  
    The above are just a few examples. You can find more functions in the CODEX.
     
           MORE ITEM API FOR CONTAINERS AND INDUSTRY

    With the addition of the mining unit API, we also added item API to the game.
    We have since had a great interest in this type of function from our community, allowing players to get more detailed information from item IDs.
    As a result, we have decided to integrate it into multiple APIs for items or containers. For example:
    NEW [int] element.getItemId() : Returns the element item ID. NEW [int] weapon.getAmmo() : Returns the item ID of the currently equipped ammo. NEW [int] engine.getFuelId() : Returns the item ID of the fuel currently used by the engine. NEW [event] industry.onStarted( [int] id, [float] quantity) : Emitted when the Industry Unit has started a new production process. NEW [event] industry.onCompleted( [int] id, [float] quantity) : Emitted when the Industry Unit has completed a run. NEW [int] core.getElementItemIdById(uid): Returns the item ID of the Element, identified by its local UID. NEW [table] container.getContent() (old getItemsList): Returns a table describing the contents of the container, as a pair itemId and quantity per slot.  
           CHANGING CONTAINER API

    Reading the contents of a container is one of our most widely used features, but there has always been a problem. Its current implementation allows players to make ten requests as quickly as they would like, followed by a wait time of five minutes. This has caused spikes in server requests on our end and has been impractical for players.
     
    We will change this behavior to allow you to make a content request with a fixed minimum delay of 30 seconds between two requests made with the `updateContent()` method.
     
    As before, receiving content from the server triggers the `onContentUpdate()` event allowing you to get the contents with the `getContent()` function. We have also made the updateContent function return the time left before the next request to give our players better tracking of the process.

           CLICK WITH LUA

    We’re adding a simple but often requested function; a mouse click for Lua!

    Left-click, named ‘leftMouse’, has been added as a Lua action, triggering the onActionStart, onActionStop and onActionLoop events.
    For design and security reasons, Lua will only detect left mouse clicks when not in use by the game. So if you click on a widget or in your inventory UI, Lua won't detect it.

    We’re excited to see what our talented coders in-game will make of this tool!
     
           MAKE THE LIGHTS FLASH
     

     
    In the past, we added the possibility of making light-elements glow with color components set to higher than 255. However, this caused graphical issues, and we had to remove the feature.

    We are reintroducing this feature with Mercury but limiting it to a maximum factor of 5. And at the same time, we are changing the color format from 0-255 to 0-1 and 0-5 for HDR colors for consistency.

    We will convert the color property of all existing light elements deployed in the game.
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    Many other changes and additions will be included with this revamp. There are so many that it would not be practical to cover them all in a general devblog, but we hope this small selection will inspire your creative spirit!
     
    WILL ALL MY SCRIPTS BE BROKEN?

    Although we consider this revamp necessary, we still want to give you time to transition and adapt your systems and allow your scripts’ users to continue using them during this transition.
    To simplify the transition, we will deprecate all of the current API from Mercury, which means that the current functions and events will remain functional for a time but will not be referenced in the CODEX anymore, nor visible on the UI for events.
    You will then receive a warning when using a deprecated function or event for the first time.
    Please note: This depreciation will be time-limited. The goal is to remove all of the old API by the game’s launch. Along with other factors, we will need to release a new-API version of the default flight configuration before removing the depreciation. We will continue to assess whether removing the old API before launch is possible, and we’ll keep you apprised.

    HOW CAN I CHECK THE UPCOMING API CHANGES?

    Given the extent of the changes, we have chosen not to list them all in this devblog. The list of changes is very long, so our goal is to try and post a detailed forum thread with all changes and we have published a mock API on the official Github to allow you to prepare yourself as well as possible.

    CONCLUSION

    We hope you are excited, as players and creators, by the few changes mentioned here, especially about the new opportunities for all to enjoy that our passionate Lua community will create in Dual Universe. Our goal with the revamp is to push the door to future possibilities, evolutions, and additions for Lua. 

    We'll be looking to go even further in the future and provide you with more tools to create content for other players.

    As always, we appreciate your feedback and opinions, so please feel free to come and share your thoughts and ideas on this forum thread! We look forward to seeing you there.

    Yours truly,
    NQ Ligo"
     
  11. Like
    Davian_Thadd reacted to NQ-Ligo in DEVBLOG: MERCURY LUA API REVAMP - discussion thread   
    Hi Noveans !

    First of all thank you for telling us what you think of the additions and changes exposed in the devblog (although this is only a selection) and the global direction we chosen for the Lua feature, before you even formulate serial requests. Thanks  

    Secondly, please understand that some changes can be much more complicated than they seem, especially due to architecture choices for the Lua binding made many years ago. Many of the changes require substantive changes and others are planned as general changes.


    Concerning the offline CODEX, it turns out that there were multiple reasons for its removal including maintainability issues, anyway, I just published the API mockup for the 0.30 Mercury on our official github to allow you to have it updated, here:
    https://github.com/dual-universe/lua-examples


    Moreover, a detailed thread is being finalized as exposed on the devblog, it will give you a much more detailed view of the changes by telling you what is new, by what has been replaced such or such function ... etc  


    Regarding deprecation @space_man, it is a complete deprecation, nothing has been removed or changed without deprecation.
    I personally followed the Lua players tests to make sure that everything was working well, especially with the community custom systems like ArchHud. No concerns about deprecation have been reported. When a change of return type was made, we deprecated the old one and changed the name of the new one to avoid any problems.
    If any problem appeared, please report it to us with a ticket.  

    Concerning the suggestions @P4rty_Boy, as always, I'll be happy to discuss them on a specific thread where you can tag me to explain them in more details.  

    Overall, I really hope that all the changes will please and show the interest of Lua for us, many of them are not listed in this devblog and will be clearer on the detailed thread. Thank you.
  12. Like
    Davian_Thadd reacted to NQ-Wanderer in DEVBLOG: MERCURY LUA API REVAMP - discussion thread   
    Dear Noveans, we hope you're as excited as we are about the Lua changes coming in the next update, Mercury.
     
    Let us know your thoughts below!
  13. Like
    Davian_Thadd reacted to Haunty in DUAL ACCESS COUPONS - STATUS UPDATE - discussion thread   
    Unless NQ is insane they would wipe first before releasing DAC feature (in-game trading).
     
     
    No it's just another option in addition to paid subscription. Backers wouldn't need to use them until after release.
  14. Like
    Davian_Thadd reacted to NQ-Wanderer in DUAL ACCESS COUPONS - STATUS UPDATE   
    Hello, Noveans!
     
    We have good news: DACs are coming to Dual Universe! As many of you already know, DACs are an important feature of the game’s economy, allowing players to gain game time with quanta. We will initially be releasing a website-based DACs system in the coming months and will then be further developing the system moving forward.

    WHAT IS A DAC?
     
    A Digital Access Coupon (DAC) is equivalent to a month of subscription. Think of it as a digital coupon that you can use to gain 30 days of subscription time or transfer to another player. 

    HOW CAN I REDEEM AND TRANSFER DACs?

    Players will interact with this first iteration of DACs on our website. You’ll be able to see an overview of your DACs and be able to redeem as many as you’d like in exchange for game time. You’ll also be able to find other players by searching for their name and transfer DACs to them, but in order to receive DACs, a player must first have an account or create one on our website. There are no limits to the amount of DACs that may be transferred from one account to another.
    You will also be able to view your DACs history, giving you an overview of previous transactions.

    HOW DO I GET DACs?
     
    The initial set of DACs being released has already been purchased by our Kickstarter backers through the Founder and Supporter packages. You can however receive DACs from any player who has already purchased them, for example in exchange for quanta, allowing you to buy Dual Universe game time using your in-game assets, or to gift game time to friends.
     
     
    Just as a reminder, we wish to reinforce that this is only the first iteration of DACs in Dual Universe. We’ll be adding to this system over time and will work on integrating DACs into the game as an item that can be traded directly from a market. As always, we welcome your thoughts and look forward to reading your feedback in this forum thread.
     
  15. Like
    Davian_Thadd reacted to EasternGamer in Lua Suggestion (General Function Structure + Camera Data)   
    Intro
    With the recent dev-blogs, I feel like there's been a change in attitude with Lua. Before, we basically never got changes to it or the changes were very minimal/incomplete. (*cough* character orientation *cough*)
    But, now that we're adding a bunch of functions to Lua, so much so that it's starting to get cluttered with really long function names, I think a general structure change should occur. A perfect example is camera data.

    Structure Change
    The core unit, control unit and system basically are filled to the brim with functions that don't really related to them, especially system.
     
    So, here I go with what I believe should happen:
    The creation of a "Construct" default slot. (No links required)
    The creation of a "Player" default slot. (No links required)
    The creation of a "Database" default slot. (No links required)
    The creation of a "Elements" default slot. (No links required)

    Construct Slot (moved to)
    This slot will handle everything to do with the construct, and only the construct. As the first dev-blog has shown, a fair number of things are irrelevant of the core, thus it doesn't quite make sense that we should still access the core for them.

    For example, world orientation of the construct is irrelevant to the core, and even ordinary orientation is irrelevant to the core since it is based off the orientation unit, a gyro or core.
    However, data which is more core-related remains, like direct calculations/measurements that you would imagine the core making (velocity, acceleration etc.).
     
    Player Slot (moved to)
    This slot will handle everything to do with the master player, the player who has executed the control unit. As you can guess, a fair number of functions are placed on the unit because of this. But, it sort of makes little sense beyond the fact that the player activated, not to mention to access any player related info, they want to prefix every function with MasterPlayer, a perfect example of how absurdly long it is getting is unit.getMasterPlayerWorldForward(), now tack on camera to it... unit.getMasterPlayerCameraWorldForward(). You get the point.
     
    Database Slot (moved to)
    This will consolidate any thing that essentially accesses a database, static or otherwise, for instance getting the player name, position, etc. It will be similar to the Lua version in our files, but be entirely made of native code, instead of Lua. This should help with Database.lua's semi-redundancy and inefficiency, aside from code length contraction.
     
    Elements Slot (moved to)
    This will consolidate any general element function that is normally accessed by the core. This will remove the need to basically prefix stuff with getElementDATAById(uid)
    Instead, you will simple say getDATAById(uid) or getDATA(uid)
     
    Keys
    Bad Name* (Italics, suffixed by one or more light yellow asterisks, name requires a change for consistency reasons)  ? Dev Blog Addition (Bold, prefixed by "New" emoji) moved to (Colour coded, moved to another slot) Suggested Addition (Bold, green)
    Core
    getData() getConstructMass() getConstructIMass() getConstructCrossSection() getMaxKinematicsParametersAlongAxis(taglist,crefaxis) getConstructWorldPos() getConstructId()  ? getConstructName()  ? getOrientationUnitId() getWorldAirFrictionAngularAcceleration() getWorldAirFrictionAcceleration() spawnNumberSticker(nb, x, y, z, orientation) spawnArrowSticker(x, y, z, orientation) deleteSticker(index) moveSticker(index, x, y, z) rotateSticker(index, angle_x, angle_y, angle_z) getElementIdList() getElementNameById(uid) getElementTypeById(uid) getElementHitPointsById(uid) getElementMaxHitPointsById(uid) getElementMassById(uid) getElementPositionById(uid) ? getElementForwardById(uid) ? getElementUpById(uid) ? getElementRightById(uid) getElementIndustryStatus(uid)* getElementTagsById(uid) getSchematicInfo(schematicId) getAltitude()  ? getCurrentPlanetId() g()** getWorldGravity()*** getWorldVertical()**** getAngularVelocity() getWorldAngularVelocity() getAngularAcceleration() getWorldAngularAcceleraton() getVelocity() getWorldVelocity()  ? getAbsoluteVelocity()  ? getWorldAbsoluteVelocity()***** getWorldAcceleration() getConstructWorldOrientationForward() getConstructWorldOrientationRight() getConstructWorldOrientationUp() getConstructOrientationForward() getConstructOrientationRight() getConstructOrientationUp() getPvPTimer() getPlayersOnBoard()****** getDockedConstructs()******* isPlayerBoarded(pid) isConstructDocked(pid) forceDeboard(pid) forceUndock(cid) getBoardedPlayerMass(pid) getDockedConstructMass(cid) getParent() getCloseParents() getClosestParents()  ? getParentPosition()  ? getParentWorldPosition()  ? getParentForward()  ? getParentUp()  ? getParentRight()  ? getParentWorldForward()  ? getParentWorldUp()  ? getParentWorldRight() dock(pid) undock() setDockingMode(mode) getDockingMode() getCoreStress() getMaxCoreStress() getCoreStressRatio() All Events *getElementIndustryStatus() -> getElementIndustryStatusById()
    **g() -> getLocalConstructGravityIntensity()
    ***getWorldGravity() -> getConstructWorldGravity()
    ****getWorldVertical() -> getWorldGravity()
    *****getWorldAbsoluteVelocity() -> getAbsoluteWorldVelocity()  (Swapping the Absolute Prefix with the World prefix sounds better and is probably more consistent)
    ******getBoardedPlayerIds()
    *******getDockedConstructIds()
     
    System
    getActionKeyName(actionName) showScreen(bool) setScreen(content) createWidgetPanel(label) destroyWidgetPanel(panelId) createWidget(panelId, type) destroyWidget(widgetId) createData(dataJson) destroyData(dataId) updateData(dataId, dataJson) addDataToWidget(dataId, widgetId) removeDataFromWidget(dataId, widgetId) getMouseWheel() getMouseDeltaX() getMouseDeltaY() getMousePosX() getMousePosY() getThrottleInputFromMouseWheel() getControlDeviceForwardInput()* getControlDeviceYawInput() getControlDeviceRightLeftInput()** lockView(state) isViewLocked() freeze(bool) isFrozen() getTime() getActionUpdateDeltaTime() getPlayerName(pid) getPlayerWorldPos(pid)   ? getOrganizationName(oid)   ? getOrganizationTag(oid) getWaypointFromPlayerPos() setWaypoint(waypointStr) getScreenHeight() getScreenWidth() getFov() print(msg) logInfo(msg) logWarning(msg) logError(msg) All Events *getControlDeviceForwardInput ->getControlDevicePitchInput
    **getControlDeviceRightLeftInput ->getControlDeviceRollInput
     
    ControlUnit
    exit() setTimer(timerTagId, period) stopTimer(timerTagId) getAtmosphereDensity() getClosestPlanetInfluence() ? getMasterPlayerPosition() ? getMasterPlayerWorldPosition() ? getMasterPlayerWorldForward() ? getMasterPlayerWorldUp() ? getMasterPlayerWorldRight() ? getMasterPlayerForward() ? getMasterPlayerUp() ? getMasterPlayerRight() getMasterPlayerId() getMasterPlayerMass() getMasterPlayerParent() ? getMasterPlayerOrgIds() setEngineCommand(...) setEngineThrust(taglist, thrust) setAxisCommandValue(axis, commandValue) getAxisCommandValue(axis) setupAxisCommandProperties(axis, commandType, targetSpeedRanges) setupControlMasterModeProperties(controlMasterModeId, displayName) getControlMasterModeId() cancelCurrentControlMasterMode() isAnyLandingGearExtended() extendLandingGears() retractLandingGears() isMouseControlActivated() isMouseDirectControlActivated() isMouseVirtualJoystickActivated() isAnyHeadlightSwitchedOn() switchOnHeadlights() switchOffHeadlights() isRemoteControlled() activateGroundEngineAltitudeStabilization(targetAltitude)* getSurfaceEngineAltitudeStabilization()* deactivateGroundEngineAltitudeStabilization()* computeGroundEngineAltitudeStabilizationCapabilities()* getThrottle() setSignalIn(plug, state) getSignalIn(plug) All Events *I got no idea what to replace those with, but the names are just weird, what's a surface engine, ground engine? Function name is super long.
     
    Construct
    getWorldOrientationForward() getWorldOrientationRight() getWorldOrientationUp() getOrientationForward() getOrientationRight() getOrientationUp()  getWorldPos() getId() ? getName() ? getOrientationUnitId() getMass() getIMass() getCrossSection() getLocalGravityIntensity()  
    Elements
     getIdList() getNameById(uid) getTypeById(uid) getHitPointsById(uid) getMaxHitPointsById(uid) getMassById(uid) getPositionById(uid) ? getForwardById(uid) ? getUpById(uid) ? getRightById(uid) getIndustryStatusById(uid) getTagsById(uid) getElementById(uid)  
    Player
    getId() getMass() getParent() ? getOrgIds() lockView(state) isViewLocked() freeze(bool) isFrozen() getFov() getHorizontalFov(bool) getVerticalFov(bool) getHeadlampState() setHeadlampState(bool) isSeated() getSeatId() getCameraView() getCameraWorldForward() getCameraWorldUp() getCameraWorldRight() getCameraWorldPos() getCameraLocalForward() getCameraLocalUp() getCameraLocalRight() getCameraLocalPos() ? getBodyPosition() ? getBodyWorldPosition() ? getBodyWorldForward() ? getBodyWorldUp() ? getBodyWorldRight() ? getBodyForward() ? getBodyUp() ? getBodyRight()  
    Database
     getPlayerName(pid) getPlayerWorldPos(pid) ? getOrganizationName(oid) ? getOrganizationTag(oid) getSchematicInfo(schematicId) getPlayerById(pid) getMasterPlayer() getOrganization(oid) getConstruct(cid)  
     
     
    Camera Data Explanation
    The camera data is pretty straight forward. I made an code example and explanation before this mess, I'll just paste that here lol.
     
    local player = player --> A tab which virtually represents the "player", it holds player related events and functions. local isSeated = player.isSeated() --> Returns true or false if the player is seated or not. local seatId = player.getSeatId() --> Returns the player seat ID if seated, otherwise nil. local headlampState = player.getHeadlampState() --> Returns the boolean of the avatar headlamp, on or off. player.setHeadlampState(not headlampState) --> Inverts the headlamp state. local camView = player.getCameraView() --> Returns 0 for first-person, 1 for third-person and 2 for fixed third-person. -- Consideration to have is that you can get into third person while using the normal avatar using an emoji. -- Why it is useful is so you can change the HUD you intend on using depending on if you're in those seperate views and if you should listen to mouse input for UI, etc. local camWorldUp = player.getCameraWorldUp() --> Returns the camera up vector in world coodinates. local camWorldForward = player.getCameraWorldForward() --> Returns the camera forward vector in world coodinates. local camWorldRight = player.getCameraWorldRight() --> Returns the camera right vector in world coodinates. local camLocalUp = player.getCameraLocalUp() --> Returns the camera up vector in local coodinates, relative to the build grid. local camLocalForward = player.getCameraLocalForward() --> Returns the camera forward vector in local coodinates, relative to the build grid. local camLocalRight = player.getCameraLocalRight() --> Returns the camera right vector in local coodinates, relative to the build grid. local camLocalPos = player.getCameraLocalPos() --> Returns the camera position in local coordinates relative to the build-grid (construct) center. local camWorldPos = player.getCameraWorldPos() --> Returns the camera position in world coordiantes. --<! Optionally, you could add a relative world position function which is relative to the construct center, but in world coordinates. Though, I feel it would be very niche !>-- --- Lastly, local camHFov = player.getCameraHorizontalFov(true/false) --> Returns the horizontal fov with a boolean parameter to determine if it is returned as a radian or degree format. local camVFov = player.getCameraVerticalFov(true/false) --> Returns the vertical fov with a boolean parameter to determine if it is returned as a radian or degree format.  
     
    Final Structure (No Formatting, mainly for glancing to see roughly the impact)
     
    Core
    getData() getMaxKinematicsParametersAlongAxis(taglist,crefaxis) getWorldAirFrictionAngularAcceleration() getWorldAirFrictionAcceleration() spawnNumberSticker(nb, x, y, z, orientation) spawnArrowSticker(x, y, z, orientation) deleteSticker(index) moveSticker(index, x, y, z) rotateSticker(index, angle_x, angle_y, angle_z) getAltitude()  getCurrentPlanetId() getConstructWorldGravity() getWorldGravity() getAngularVelocity() getWorldAngularVelocity() getAngularAcceleration() getWorldAngularAcceleraton() getVelocity() getWorldVelocity()  getAbsoluteVelocity() getAbsoluteWorldVelocity() getWorldAcceleration() getPvPTimer() getBoardedPlayerIds() getDockedConstructIds() isPlayerBoarded(pid) isConstructDocked(pid) forceDeboard(pid) forceUndock(cid) getBoardedPlayerMass(pid) getDockedConstructMass(cid) getParent() getCloseParents() getClosestParents() getParentPosition() getParentWorldPosition() getParentForward() getParentUp() getParentRight() getParentWorldForward() getParentWorldUp() getParentWorldRight() dock(pid) undock() setDockingMode(mode) getDockingMode() getCoreStress() getMaxCoreStress() getCoreStressRatio() All Events  
    System
    getActionKeyName(actionName) showScreen(bool) setScreen(content) createWidgetPanel(label) destroyWidgetPanel(panelId) createWidget(panelId, type) destroyWidget(widgetId) createData(dataJson) destroyData(dataId) updateData(dataId, dataJson) addDataToWidget(dataId, widgetId) removeDataFromWidget(dataId, widgetId) getMouseWheel() getMouseDeltaX() getMouseDeltaY() getMousePosX() getMousePosY() getThrottleInputFromMouseWheel() getControlDevicePitchInput() getControlDeviceYawInput() getControlDeviceRollInput() getTime() getActionUpdateDeltaTime() getWaypointFromPlayerPos() setWaypoint(waypointStr) getScreenHeight() getScreenWidth() print(msg) logInfo(msg) logWarning(msg) logError(msg) All Events  
    ControlUnit
    exit() setTimer(timerTagId, period) stopTimer(timerTagId) getAtmosphereDensity() getClosestPlanetInfluence() setEngineCommand(...) setEngineThrust(taglist, thrust) setAxisCommandValue(axis, commandValue) getAxisCommandValue(axis) setupAxisCommandProperties(axis, commandType, targetSpeedRanges) setupControlMasterModeProperties(controlMasterModeId, displayName) getControlMasterModeId() cancelCurrentControlMasterMode() isAnyLandingGearExtended() extendLandingGears() retractLandingGears() isMouseControlActivated() isMouseDirectControlActivated() isMouseVirtualJoystickActivated() isAnyHeadlightSwitchedOn() switchOnHeadlights() switchOffHeadlights() isRemoteControlled() activateGroundEngineAltitudeStabilization(targetAltitude) getSurfaceEngineAltitudeStabilization() deactivateGroundEngineAltitudeStabilization() computeGroundEngineAltitudeStabilizationCapabilities() getThrottle() setSignalIn(plug, state) getSignalIn(plug) All Events  
    Construct
    getWorldOrientationForward() getWorldOrientationRight() getWorldOrientationUp() getOrientationForward() getOrientationRight() getOrientationUp() getWorldPos() getId() getName() getOrientationUnitId() getMass() getIMass() getCrossSection() getLocalGravityIntensity()  
    Elements
     getIdList() getNameById(uid) getTypeById(uid) getHitPointsById(uid) getMaxHitPointsById(uid) getMassById(uid) getPositionById(uid) getForwardById(uid) getUpById(uid) getRightById(uid) getIndustryStatusById(uid) getTagsById(uid) getElementById(uid)  
    Player
    getId() getMass() getParent() getOrgIds() lockView(state) isViewLocked() freeze(bool) isFrozen() getHorizontalFov(bool) getVerticalFov(bool) getHeadlampState() setHeadlampState(bool) isSeated() getSeatId() getCameraView() getCameraWorldForward() getCameraWorldUp() getCameraWorldRight() getCameraWorldPos() getCameraLocalForward() getCameraLocalUp() getCameraLocalRight() getCameraLocalPos() getBodyPosition() getBodyWorldPosition() getBodyWorldForward() getBodyWorldUp() getBodyWorldRight() getBodyForward() getBodyUp() getBodyRight()  
    Database
    getPlayerName(pid) getPlayerWorldPos(pid) getOrganizationName(oid) getOrganizationTag(oid) getSchematicInfo(schematicId) getPlayerById(pid) getMasterPlayer() getOrganization(oid) getConstruct(cid)  
     
     
    Ending Notes
    It has taken me literally the entire day doing this, and even then I feel like I've missed a lot because I was literally looking at the entirety of Lua.
    I was planning on explaining all the changes and stuff, but my head is about to explode from doing this the entire day so not gonna. Lol.

    Tbh, if they implemented even a single one of these slots, I would be happy. I don't expect most of it to change.
    I would also, personally, like if these changes came out gradually, if any. I think if camera angles are added though, we must at least get the player slot, or similar global variable because of how long the variable names will end up getting.
     
    Obligatory @NQ-Ligo and @NQ-Deckard, I wish you find this helpful, even if you don't add even 1% of it xD

    Oh, and oops. Kinda broke the "one idea" rule... it's kinda a super idea though. Hope whoever od
  16. Like
    Davian_Thadd reacted to NQ-Wanderer in ADDED ACCOUNT SECURITY: ENABLE TWO-FACTOR AUTHENTICATION   
    Hello Noveans, let us know your thoughts on 2FA implementation right below!
  17. Like
    Davian_Thadd reacted to NQ-Wanderer in ADDED ACCOUNT SECURITY: ENABLE TWO-FACTOR AUTHENTICATION   
    Novaquark is releasing Two-Factor Authentication (2FA) for added account security for our Dual Universe players. 2FA is simple yet effective: it adds an extra layer of protection to your account. As Dual Universe moves forward, we want to reward those players who choose to opt in. On top of the benefits of added account security, players will also receive the following rewards in-game:


     
    Talents: One million free skill points* added to your available pool. Money: Five hundred thousands quanta* of it, to be exact. Fashion: An exclusive skin for your programming boards to show off your commitment to security:
     
    *These figures may be revised in the future
     
    HOW IT WORKS

    You can enable or disable 2FA in the ‘security,’ section of your account at www.dualuniverse.game/account/security at any time. Once you have enabled 2FA, your in-game rewards will be delivered to your account the next time you login.  
    When 2FA is enabled, in addition to your password, you will be required to enter a one-time code that is generated by an authenticator app on your phone when attempting to log in.
    We hope you’ll enjoy flying through Helios with added peace of mind. Share your thoughts on the implementation of 2FA here!
     
  18. Like
    Davian_Thadd reacted to NQ-Ligo in The forgotten LUA API for dispensers   
    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.
  19. Like
    Davian_Thadd reacted to NQ-Ligo in DEVBLOG: ATHENA LUA IMPROVEMENTS & ADDITIONS - discussion thread   
    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. 🙂
  20. Like
    Davian_Thadd reacted to NQ-Wanderer in DEVBLOG: VFX UPGRADES IN ATHENA   
    Hello, Noveans! We’ve teased graphical upgrades coming to Dual Universe in Athena across our social media over the past couple of weeks, but we also want to present them to you now together to give a clear picture of what’s changing ahead:
     
     
    NEW SKYBOX
    A stunning skybox is essential for enjoyable space flight in games, and Dual Universe is no exception. Whether you’re hauling outside the pipes, hunting within them, or trying to claim an Alien Space Core Unit, you’ll fly in the new skybox coming with Athena.
     
     
    BLUEPRINT PRE-VISUALISATION
     
    The ability to see your blueprints visualized in the game before placing them, and to finely control their placement using keyboard keys will improve our player’s quality of life when deploying constructs.
     
    IMPROVED WATER VISUALS
    Living under water in Dual Universe can be more meaningful with the upgrade to our water VFX. Whether you want a sub-aquatic factory, to loop your racetrack below the water line, or simply have an internal pool, we hope you’ll like the way water looks now in Dual Universe.
     
    NEW WARP VFX
    White streaks are part and parcel of space games, they mean we’re moving fast! But, with the graphical overhaul to our warp travel, we hope you’ll enjoy the feel of spending a warp-cell or two roaming Helios.
     
    -----------------------------------------
     
    We’re always carefully reading your feedback. Do you like the new warp vfx, or the new skybox? Please share your thoughts in this forum thread.
  21. Like
    Davian_Thadd reacted to Megabosslord in DEVBLOG: ATHENA LUA IMPROVEMENTS & ADDITIONS - discussion thread   
    And LUA control of rights (check player id) w/ reverse dispenser! (receive item, pay money!)
  22. Like
    Davian_Thadd reacted to WarrenOne in DEVBLOG: ATHENA LUA IMPROVEMENTS & ADDITIONS - discussion thread   
    Honestly I'm still waiting for the relevant Lua for my field in this game: Industry. We've been having issues since the very beginning of Beta with figuring out the amount of product certain batches create. An example is basic pipes. With no talents, 10 pipes are created per batch. Not counting the productivity talent, the efficiency talent actually changes it at a certain point so that instead of making 10 pipes quicker, it actually jumps up to just making 20 pipes in the same amount of time to account for efficiency. Smaller elements like buttons also see this effect with efficiency talents where it will go from making say 2 buttons per batch to 4 which screws up the required input material.
     
    TLDR: We need a Lua function that queries what the machine is making and how much is needed/outputting in a single batch.
  23. Like
  24. Like
    Davian_Thadd reacted to Endstar in DEVBLOG: ATHENA LUA IMPROVEMENTS & ADDITIONS - discussion thread   
    Hopefully we see more core-to-core data exchange abilities or an increase in emitter receiver ranges. 

    The mining unit LUA would benefit from this so we can see MU status from adjacent hexes from the center base you VR to in order to check MU status. 
  25. Like
    Davian_Thadd reacted to NQ-Wanderer in DEVBLOG: ATHENA LUA IMPROVEMENTS & ADDITIONS - discussion thread   
    Hello, Noveans.

    What do you think about the upcoming Athena Lua additions? Let us know right here!
×
×
  • Create New...