About This File
Looking to push your players' social experience one step forward?
Give them the opportunity to express themselves via time-limited video sharing!
You can check out a promotional video here.
The resource is using Asset Escrow system.
Your server needs to be in an artifacts version that supports it.
The resource comes with an extensive configuration, events, exports and some client / server source files to allow you to customize it to your liking.
It is a standalone resource and works with any framework and can be hooked to any Lua NUI-based phone given you can develop the hook for it.
Out of the box we provide you hooks for gcphone, qb-phone, high-phone and qs-smartphone which cover those phones and also mainstream versions that are based on them like gksphone and xenknight. The hooks can be adjusted to your liking for element or style changes. There may be more available hooks shared in our Discord by our community. You may also find some more public hooks here.
If you are a phone developer and a hook covers your phone but you don't want it to, or if you want us to make a hook that does cover your phone, please contact us.
The stories are shown temporarily (default 24 hours) in the stories feed. This value can be changed in the configuration alongside with how long to keep the stories in storage (default 24 hours). The default maximum length of a story is 30 seconds (which results in ~5MB per maximum-length story video excluding the thumbnail). This value can be changed in the configuration and there is also a configurable rate limit in place to ensure your server does not run out of storage.
If you want to post the stories from the game to your Discord server for moderation and or logging purposes, you can download here the companion resource cs-stories-dw to do so. Check its config.js for more information and make sure to use it in accordance with Discord's webhook policies.
A hosting server is included that is mandatory, with yarn resource required as a dependency. The hosting server stores the stories' videos, thumbnails and some metadata, therefore it imposes network, bandwidth and storage requirements as well as requiring an extra TCP port to be open. Besides the integrated solution, the hosting server is also offered as an external node.js application to be hosted in the same or in a different machine allowing you to offset the network, bandwidth or and storage requirements.
If your phone is of fx_version "cerulean", then you will have to route the stories' hosting server via HTTPS. You can do this by using a domain and Cloudflare. Alternatively, you can change the fx_version of your phone to "bodacious".
- Short and temporary video stories featuring uploader in-game location and uploader in-game name.
- Ability to self-delete uploaded stories and integration for authorized players to delete anyone's stories.
- Simplistic stories feed with full mouse and keyboard navigation support.
- Ability to switch between the back and the front camera.
- Dynamic adjustment to center properly in various resolutions.
- Plug-and-play integration with phones that we offer out-of-the-box hooks for.
- Color filters (grayscale, sepia, invert, saturate, etc.).
- Image filters with real-time player ped face-tracking (dog, cat, etc.).
- Optimized for a balance between quality and performance.
- An experimental camera mode that allows the player to move while recording a story.
- A wide array of events and exports to check and control the resource.
- Make sure you have yarn in your resources folder.
- Download cs-stories and place it in your resources folder.
- Add ensure cs-stories to your server's configuration file before ensuring your phone.
- Edit your phone's __resource.lua or fxmanifest.lua file and add '@cs-stories/client/hooks/core.lua' as the last client script and '@cs-stories/server/hooks/core.lua' as the last server script.
- Check the config.lua file inside cs-stories for further configuration and read through all options and their comments and adjust them to your setup and preferences.
- Given you're using the internal solution, open the required port (by default 35540; incoming - inbound) in your firewall on TCP protocol.
- Run the command refresh and the command ensure cs-stories.
- If your phone uses an animation loop you may need to edit it (usually found in an animation.lua file) and add a not CS_STORIES.ACTIVE check before playing an animation to ensure an animation glitch does not occur when the video call camera is opened.
- Ensure your phone.
External Hosting Server
If you choose not to use the integrated proxy server then download the external node.js application and install it with npm install, read through all options and their comments inside its config.js file as they are very important for the setup process, adjust them to your setup and preferences and then run it with node, then make sure to add the external server's IP address in the sv_proxyIPRanges property in your server's configuration file. You can use pm2 to make sure it runs all the time.
- The player will be asked for microphone approval, if they deny, their voice will not be recorded in stories. If they mistakenly deny, they will need to reset it (for now this is done by deleting the file "%AppData%\CitizenFX\media_access.json").
- When recording a story, the voice is recorded by the player's system default microphone. This cannot be changed.
- Only the voice of the player recording is recorded. This cannot be changed.
- The recording determinates whether the player is talking using the built-in native. If you are using an external VoIP such as TokoVoip or similar you will need to edit the hook to correctly determine when the player is talking.
- A player recording a story cannot move. This is default GTA:V camera behavior. You can try using experimental camera mode which allows the player to move, however it might not be as smooth as the native one.
- Video render lag / freezes may be caused in very high resolutions or in very low-spec systems.
- The story recording works using game capture (similar to screenshot-basic), whatever it's on the game is recorded. That includes visual settings / mods, game drawings / UIs but not NUIs.
- If your server is running behind a reverse proxy that you have no control over and cannot handle an extra TCP port as required by the resource, your only option may be to externally host the stories' hosting server in a different machine (for example a cheap VPS with enough bandwidth / network / storage to work within your own limits) that can handle the requirements.
- When a story is being uploaded or viewed by a player, like any other video-upload service, the player's upload / download speed is being used and network / bandwidth is consumed on the hosting server as well.
- If your hosting server host does not offer unlimited bandwidth or has a low network limit you are advised to periodically check your usage statistics if you have a lot of players uploading and viewing stories. Also make sure to check your storage if you have a ton of stories being uploaded and are not being cleaned up.
- The resource is using FiveM's KV storage to store the metadata of the saved stories, if you are using a shared multi-server setup this may cause an issue and you may want to set sv_kvsName console variable to something unique for your server.
- There are checks in place to ensure that the recorded video and the in-game location are legitimate and are coming from the game itself, however since the client sends them, they cannot be fully trusted.
- The stories are deleted (as per configuration) when the resource starts, so stories storage cleanup depends on how often you restart your server or the resource.
Frequent Issues & Questions
Q: I can use the stories app but when I try to view or upload a story, an error happens, why?
A: If your phone is of fx_version "cerulean", then you will have to route the stories' hosting server via HTTPS. You can do this by using a domain and Cloudflare. Alternatively, you can change the fx_version of your phone to "bodacious". If this was not your issue then the problem usually lies in TCP blocking, complex network setup or anti-DDoS protection. Try a different port, preferably in a high range to see if that will resolve your issue and make sure that port is open for TCP protocol. If that doesn't work then your best solution here may be to externally host the stories' hosting server in a different machine (for example a cheap VPS with enough bandwidth / network / storage to work within your own limits) that can handle the requirements.
Q: I've done everything but I cannot see a stories app button, what's wrong?
A: Not seeing a stories app button is possibly related to the hook you are using. First make sure you are using the correct hook for the phone you have. Then make sure your phone events and DOM elements are properly reflected in the hook and that the hook is configured properly. Also note that some hooks add the stories app in the phone's app store rather than immediately adding it as an app.
Q: My yarn is repeatedly trying to install the resource, what do I do?
A: This seems to be a current bug in the yarn resource related to package.json and the server's time zone related to the time zone of the system you copied the resource from. Edit package.json and just add or remove a space character, save it and the issue will go away.