[Résolu] Detection connexion / déconnexion


#1

Bonjour,

Ce que je fais

Je souhaiterais savoir si il est possible de détecter quand un joueur est connecté ou déconnecté .

Décrivez ici ce que vous cherchez à obtenir

J’aimerais si possible, créer un champ de ma DB (online), quand le joueurs se connecte ca modifie “online = 1” et lorsqu’il se déconnecte “online = 0”.

Version du serveur :v5
Système d’exploitation : Linux

Cordialement,
Ryan Theap.


#2

sa depend de comment tu veux faire sa, soit tu creer carrement un fichier a part pour le faire, ou alors tu utilises ceux deja present

ou alors tu utilises php ^^


#3

Salut aecy et merci de ta réponse.
Utilisez PHP serais le top mais est-ce possible ? Et comment ?


#4

c est possible avec ceci : https://github.com/xPaw/PHP-Source-Query


#6

Ca à l’air complexe :smiley: et par les fichiers existant c’est aussi complexe ?


#7

regarde les exemples tu verras c est pas si dur


#8

Oui je viens de voir ça par contre après avoir mis l’ip du serveur et le port (+1) ca me met

Failed to read any data from socket


#9

avec simplement sa je peux pas t aider ^^ (il faut configurer RCON sur ton serveur si jamais)


#10

D’après ce que je vois, je RCON ne fonctionne pas sur ARMA. En revanche le QUERY fonctionne, ça se connecte bien mais aucune information du serveur ne s’affiche.

http://elie-parthenay.com/arma3/2/Examples/View.php


#11

c est le port 2303 hein pas 2301


#12

J’ai essayé les deux qui me sont indiqué sur mon panel Nitrado:
Port QUERY: 21301
Port RCON: 21303

Ca ne fonctionne pas
J’ai essayé avec les port de base (2301 et 2303) fonctionne pas non plus


#13

ah oui mais nitrado ^^

100% le soucis vient d’eux


#14

Je m’en doutais un peu ^^
Bon et du coup avec les fichier de base ça serai pas plus simple ?
Il me faudrait juste savoir ou je peut trouver l’information (connexion / deconnexion des joueurs)


#15

@RyanTheap

Voila donc un petit tuto l’ami, je suis de bonne humeur (je tiens à dire que ce n’est pas testé)

Dans ta table players tu ajoutes une colonne après last_seen nommée online
Elle doit être un tinyint d’une longueur de 1 et doit être par défaut = à 1, comme ça le première fois qu’un joueur se connecten il aura la valeur définie à 1 et tu n’auras pas besoin de renseigner au life que tu as une nouvelle colonne nommée online car elle sera automatiquement remplie par SQL avec la valeur 1.

life_server

Ouvre le fichier fn_queryRequest.sqf

Cherche après cela :

if (count _queryResult isEqualTo 0) exitWith {
    [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
};

Et ajoute après :

[ _uid, "online" ] remoteExecCall [ "DB_fnc_onlineCheck" ];

Ensuite, rends toi dans le fichier config.cpp et cherche le tab = "DB"; pour ajouter dans la class MySQL cela :

class onlineCheck {};

Ensuite créer le fichier fn_onlineCheck.sqf et ajoutes-y ça :

params [
	["_uid","",[""]],
	["_mode","",[""]]
];

if (_uid isEqualTo "" || _mode isEqualTo "") exitWith { };

private _query = format [ "SELECT online FROM players WHERE pid = '%1'", _uid ];
private _queryResult = [ _query, 2 ] call DB_fnc_asyncCall;

if (count _queryResult > 0) then {
	switch _mode do {
		case "online": {
			_query = format [ "UPDATE players SET online = '1' WHERE pid = '%1'", _uid ];
    		_queryResult = [ _query, 1 ] call DB_fnc_asyncCall;
		};
		case "disconnect": {
			_query = format [ "UPDATE players SET online = '0' WHERE pid = '%1'", _uid ];
    		_queryResult = [ _query, 1 ] call DB_fnc_asyncCall;
		};
	};
};

Mission.Altis

Cherche le fichier fn_clientDisconnect.sqf et ajoutes-y à la fin :

[_uid, "disconnect"] call DB_fnc_onlineCheck;

Enfin dans le CfgRemoteExec.hpp tu cherches :

F(DB_fnc_updateRequest,SERVER)

Et tu ajoutes après :

F(DB_fnc_onlineCheck,SERVER)

Et voilà, ce n’était pas compliqué :+1:

Si tu souhaites des explications sur comment j’ai réfléchi pour faire ce script (y a des façons de l’optimiser mais c’est la plus facile à mettre en place) je t’invite à m’ajouter sur discord aecy 神#1353


#16

Ouha!!! Super !!!
Merci beaucoup ça fonctionne!
Je t’ai ajouter sur discord, j’ai compris 90% du script mais quelques doutes se poses quand à quelques lignes.

Encore merci et bien joué !


#17

Sinon l initplayer joue sur la connection du joueur et dans le life_server tu as le fichier pour la deco :
functions\systems\fn_clientDisconnect.sqf

Et hop … une fonction de moins a faire tourner !!