[FS] SuperStream
PresentationSalut à tous, je vous présente mon nouveau streamer, le
SuperStream (que l'on peut surnommer SS).
Donc voila, le SS est une version
faite par moi de A à Z, j'ai demander conseil à quelques personnes de mon entourage concernant l'optimisation et ai décidé de ne pas faire de système complexe, rendant le système plus simple à comprendre et donc modifier
CibleIl a été testé avec 4 joueurs,
ce streamer s'adresse aux serveurs moyen qui on un nombre de joueur moyen et une quantité d'objet normale, bref on oublie déjà les serveurs de 120 joueurs et 20 000 objets.
FonctionnementEn gros, ce streamer vérifie si les objets sont à une distance maximale du joueur (afin d'ajuster cette distance, voir les
#define en haut du script) puis choisi un nombre constant d'objets au joueurs, les plus près. Il permet ainsi d'être utilisé pour des maps comprenant une densité d'objets importante (tout comme SimStream). La différence principale réside dans la réduction du nombre d'options et la modification de la logique de certaines parties.
Ce script est conçu pour sa-mp 0.3. Puisque certaines fonctionnalités ont été éliminées lors du passage 0.2X -> 0.3, j'ai pu simplifier grandement le streamer, par exemple les
AttachPlayerObjectToPlayer n'existe plus, rayant ainsi cette fonctionnalité du streamer. L'algorithme du déplacement d'objet a été revu (simplifier).
Le streamer s'assure en tout temps de ne pas faire de calculs inutiles. Il comporte un test afin de réduire les calculs inutiles, il vérifie qu'un certains laps de temps c'est écoulé depuis le dernier calcul de position avant de le forcer via le timer. J'ai contourné le bug de
GetTickCount sous linux en utilisant un timer afin de connaitre le temps écoulé depuis le lancement du serveur (de base, j'ai mis une précision de 25 millisecondes, mais vous pouvez changer cette valeur grâce aux
#define en haut).
Méthodes d'appel au streamVous pouvez améliorer le rendu sur votre serveur en forcant le streamer à recalculer les positions. Vous n'avez qu'à include SuperStream.inc dans le script pour pouvoir appelée la fonction
StreamPlayer qui recalcule le tout.
Il est recommandé d'utiliser cette fonction (StreamPlayer) lors des téléports afin d'accélérer le chargement des objets.Le streamer comprend également une fonction qui permet d'augmenter le délai du timer, il vérifie en tout temps (via la callback
OnPlayerUpdate) que les joueurs ne s'approchent pas trop des extrémités de la zone comprenant des objets. Si jamais le joueur s'approche trop de la limite de cette zone, il force le calcul des objets.
Pourquoi toutes ces méthodes d'appel au stream?Tout simplement pour permettre un meilleur rendu avec un nombre de calcul minimal. En appelant le streaming au moment nécessaires, on évite des calculs inutiles. Je trouve néanmoins que l'utilisation d'un timer permet un minimum de sécurité de chargement.
Quand devrait-on utiliser StreamPlayer?Les utilisations pratique de cette fonction sont simple, n'importe quand où il y a un changement important concernant la position où les objets. Par exemple, si vous utilisez un système de rampes, il pourrait être interressant d'utiliser la fonction suite à la création de la rampe afin d'accélérer l'apparition de la rampe pour le joueur. Un autre usage, tel que mentionné ci-dessus, serait lors des téléportations. Je n'ai pas expérimenté de problème de chute lors du chargement de routes suite à un téléport sur mon propre serveur en utilisant correctement cette fonction.
ParamètresLes paramètres sont tous situés entre la ligne 15 et la ligne 27 du script. Ils consistent en:
- MAX_PLAYERS : Nombre maximum de joueur pouvant être accueillis sur votre serveur
- TIME_GRANULITY : Incertitude sur le temps précis en millisecondes (je recommande de laissé ainsi)
- MOVEMENT_UPDATE: temps (en ms) entre deux mises à jours de la position des objets qui se déplacent (ne change par la fluidité du mouvement vu par les joueurs)
- STREAMING_DELAY : temps minimal depuis le dernier calcul des objets pour un joueur afin de faire le calcul à nouveau (lorsqu'appelé par le timer seulement)
- VIEWED_OBJECTS: nombre maximal d'objets pouvant être vus par un seul joueur
- MAX_STREAM_OBJECTS : nombre maximal d'objets gérés par le streamer (vous devriez mettre la valeur exacte d'objet de votre serveur, afin de réduire les calculs/mémoire utilisée)
- MAX_STREAM_DISTANCE : distance maximale entre un objet et un joueur pour qu'il puisse être visible (si la densité des objets le permet)
.Installation:Ce script doit normalement être placé tel quel dans votre dossier filterscript (ne pas oublier d'ajouter
SuperStream dans votre
server.cfg), vous pouvez changer les defines cités ci-dessus, mais si vous ne savez pas ce que vous faites, vous êtes mieux de ne pas aller plus loin.
Par la suite, pour ajouter de nouveaux objets vous utilisez un autre script (un fs quelconque ou votre gm) dans lequel vous ajouterez la ligne
#include <SuperStream.inc>. Vous pourrez désormais utiliser les fonctions suivantes:
native CreateStreamObject(modelid,Float:X,Float:Y,Float:Z,Float:RX,Float:RY,Float:RZ) - Ajoute un nouvel objet
native DestroyStreamObject(objectid) - Enlève un objet complètement
native StreamPlayer(playerid, Float:X, Float:Y, Float:Z) - Force le streaming pour un joueur afin d'accélérer l'apparition des objets
native MoveStreamObject(objectid, Float:TargetX, Float:TargetY, Float:TargetZ, Float:Speed) - Déplace un objets vers les coordonnées TargetX, TargetY, TargetZ
native StopStreamObject(objectid) - Arrête le déplacement d'un objet
native ClearPlayerObjects(playerid) - enlève les objets pour un seul joueurs (peut permettre le respawn forcé de certains objets (pratique pour les barrils explosifs et autres))
native ClearAllObjects() - enlève tous les objets pour tous les joueurs (nettoie tout quoi)
Téléchargement:Nouvelle version:Solidfiles - v1.1.4 :

Pastebin GtaOnline - v1.1.0
[FS] SuperStream.pwn[INC] SuperStream.incRemerciements:Tous à qui j'ai demandé des petits conseils.
Master-bru et xTig3rZx pour leur aide afin de tester.
Tout ceux que j'ai oublié.
Surtout tous les gens qui font de sa-mp et les communautés qui orbitent autour ce qu'elles sont.
Modifications:V1.0 : sortie officiel du script
V1.1 : Correction d'un bug avec les
MoveStreamObject et ajout de la callback
OnStreamObjectMoved, légers ajustement du streaming, bug d'arrêt du fs sans raison apparente semble corrigé..
V1.1.1 : réglage d'un petit bug avec la distance de test pour OnPlayerUpdate
V1.1.2 : correction d'une constante (NO_TICK_COUNT)
V1.1.3 : correction d'un petit problème causé par délai d'update des position dans les données du serveur.
V1.1.4 : tentative de correction d'un bug avec les Interieur
Bugs/Oublis/Commentaires:Aucun bug/oubli n'a été identifié pour le moment.
Merci de le signaler sur ce fil de discussion si vous en trouvez. Les commentaires sont toujours les bienvenus.
ps. Pour ceux qui se demandent pourquoi ne pas avoir posté sur le fil de discussion de SimStream, ma réponse est simple: ce sont deux streamer, oui, mais les différences sont trop importantes pour être considérés comme un même script, ils ne s'adressent pas au même genre de clientèle.
++Sim++