• 05 Juin 2026, 15:53:01


Auteur Sujet: [FS] SuperStream v1.1  (Lu 12095 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
[FS] SuperStream v1.1
« le: 29 Octobre 2009, 23:51:37 »
[FS] SuperStream

Presentation
Salut à 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

Cible
Il 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.

Fonctionnement
En 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 stream
Vous 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ètres
Les 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:
Citer
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.inc

Remerciements:
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++
« Modifié: 25 Février 2010, 03:59:55 par Sim »





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #1 le: 29 Octobre 2009, 23:54:52 »
GG sim je regarderais ce code demain car la le 00h00 approche lol



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : [FS] SuperStream v1.0
« Réponse #2 le: 30 Octobre 2009, 00:01:34 »
GG sim je l'attendais avec impassiance vue les teste que tu as fait dessus
ıllıllı вυвυησ ıllıllı


Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : [FS] SuperStream v1.0
« Réponse #3 le: 30 Octobre 2009, 00:16:12 »
Salut,

GG sim je regarderais ce code demain car la le 00h00 approche lol
GG sim je l'attendais avec impassiance vue les teste que tu as fait dessus

merci à vous  deux,
si tu veut de meilleurs performances/résultats, je te conseille de bien lire ce que j'ai écrit,
je me suis forcé à donner beaucoup d'information pour que les gens s'en servent de façon efficace
Si vous avez besoin de clarification ou autres informations (j'ai peut-être oublié une section), n'hésitez pas à demander plus d'information

++Sim++





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #4 le: 30 Octobre 2009, 11:45:48 »
Béh je trouve que c 'est assez precis =)

Merci a toi ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #5 le: 30 Octobre 2009, 17:16:13 »
tres sympas GG
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #6 le: 30 Octobre 2009, 18:45:42 »
J' ai vu le code et c 'est tres bien fait =)

Encore gg



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : [FS] SuperStream v1.0
« Réponse #7 le: 31 Octobre 2009, 03:27:54 »
Heu sim je voudrais le mettre sur mon serveur masi le probleme c'est quel fonction que je doit utiliser createobjet ???
ıllıllı вυвυησ ıllıllı


Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #8 le: 31 Octobre 2009, 11:01:05 »
core_CreateObject(model, Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ)



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xoss

  • Xoss | Alexandre Bocquet
  • *
  • Grand Banditisme
  • Xoss | Alexandre Bocquet
  • Messages: 847
    • Voir le profil
    • UnderWeb
Re : [FS] SuperStream v1.0
« Réponse #9 le: 31 Octobre 2009, 12:21:37 »
Super
(Mais pour le nom tu aurait plus choisir autre chose SS ça le fait pas  ;) )
Sinon encore une bonne invention de ta part :p
Alexandre Bocquet Xoss

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #10 le: 31 Octobre 2009, 14:13:24 »
Salut,

pour utiliser, il fonctionne un peu comme SimStream, les objets sont dans un autre script, bref regarde les fonctions de l'include, elles devraient être claires

ps.
Citation de: SuperStream - Include
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)

EDIT: juste pour être sûr, normalement,!!rien ne devrait être modifié dans le fs sauf les #define cité dans le premier post!! vous utilisez un autre fs ou votre gm pour ajoutez les objets etc....
EDIT2: ajout d'une petite section concernant l'installation

++Sim++
« Modifié: 31 Octobre 2009, 14:36:11 par Sim »





Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : [FS] SuperStream v1.0
« Réponse #11 le: 03 Novembre 2009, 21:28:11 »
Bon voila j'ai mis le FS et j'ai remarquer un truc assez etrange :

Avant :
CreateStreamObject(1634, -2246.421631, -1616.940918, 490.416199, 18.0482, 0.0000, 45.8594, 500);
Apres :
CreateStreamObject(1634, -2246.421631, -1616.940918, 490.416199, 18.0482, 0.0000, 45.8594);
Donc comme vous l'avez remaquer avant il y a a la fin  ",500" chose que apres non !
Donc quel compilateur devons nous utiliser pour que sa soit parfait car avant j'utilisait MidoStream ?

Merci d'avance
ıllıllı вυвυησ ıllıllı


Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #12 le: 04 Novembre 2009, 00:30:05 »
Salut,

tu dois enlever la distance (le 500)
avec SimStream tu n'étais pas obligé de mettre la distance, elle était prise en compte seulement dans un mode du streamer (qui pouvait calculer de différentes façon les objets à montrer)
puisque la méthode utilisée ici ne comporte pas le moindre intérêt à demander une distance de vue des objets, je n'en ai pas mis...

ps. il y aura bientôt une petite mise à jour, j'ai remarqué que je n'avais pas tout à fait complété la partie de déplacement d'objets (MoveStreamObject)

++Sim++





Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : [FS] SuperStream v1.0
« Réponse #13 le: 02 Décembre 2009, 21:35:37 »
Bon apres l'avoir tester asser lomptemp j'ai pu remarquer un bug :P

Enfaite je croit que il ne cree pas tout les objets car sur mon serveur j'ai environ 3000 objets et puis il n'aparaisse pas tous!

ıllıllı вυвυησ ıllıllı


Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [FS] SuperStream v1.0
« Réponse #14 le: 03 Décembre 2009, 15:47:39 »
Salut,

as-tu ajuster la limite d'objets à tes besoins?

si oui, j'aimerais bien savoir ce que tu veut dire par "ils n'apparaissent pas tous", par vague on ne les voient plus ou simplement certains objets sont toujours absents....

++Sim++