[Résolu] Problème createDialog (Framework Fait-Maison)


#1

Bonsoir à tous,

J’ai un petit soucis de script et je tourne malheureusement en rond depuis 4 heures … :rage: Peut-être que l’un d’entre-vous a déjà eu ce type de problèmes !

Bien, je m’explique !
Lors de la connection d’un utilisateur sur serveur, je fais appel à ma fonction d’initialision joueur de cette façon là :

[player] remoteExecCall ['Client_fnc_initPlayer', 2];

Evidemment, la fonction s’exécute, et après un petit check des familles accompagné d’une belle forêt de “if” and “else” afin de changer des “switch do” (c’est sympa de rajouter des lignes de temps en temps), je demande à mon script serveur d’exécuter ceci :

[] remoteExecCall ["Client_fnc_firstLogin", _player];

Il va de soit que la fonction marche si les conditions sont respectées, jusque là rien d’inhabituel. CEPENDANT, lorsque je lui demande dans cette fameuse fonction de faire un :

createDialog “firstLogin_Dialog”;

Eh bien, ça ne marche pas !! Pourtant quand j’utilise la console de debug, ça marche super bien, le remoteExecCall marche aussi très bien en console mais aussi sans la console (je pose un hint, il apparait pour le client conserné.), mais rien n’y fait, cela ne marche pas.

Avez-vous quelques petites suggestions, ou peut-être aurais-je omis une règle importante sur les calls de Dialogs (qu’est ce que je les hais !!!)

Pour information, je n’utilise pas de framework comme AltisRP ou autre, je développe depuis quelques temps mon propre framework et quand je tombe sur les problèmes aussi BIDONS, eh bien ça ne passe pas :joy:

Merci d’avance
de votre aide mes collègues developpeurs. :slight_smile:


#2

tu includes ton dialog dans ton master ou ton fichier qui gère tout tes dialog ?


#3

Alors dans mon description.ext, j’include un fichier où sont répertoriés tous les dialogs. Dans le fameux script qui ne marche pas en revanche, je n’ai pas include le dialog. Le problème pourrait venir de là ? Je pensais que c’était global moi dès qu’on les définissais une première fois


#4

As tu testes avec un remoteexec … peut etre le scheduler qui coince !


#5

J’y ai pensé, mais si c’étiat le cas, je ne receverais normalement pas le “hint” présent dans le script … :confused:


#6
disableSerialization;
if !(createDialog "tonnom") exitWith {};
private _display = findDisplay tonDisplay;

Tu a pas oublié ça par hasard ^^

disableSerialization;

#7

Hélas j’aurais bien aimé l’avoir oublié … :joy:
LE PIRE c’est que quand j’éxecute la fonction

[] remoteExecCall [“Client_fnc_firstLogin”, _player];

sur la console de debuggage, le dialog s’affiche, c’est encore plus frustrant !!


#8

Envoie ton code parce que comme sa, l’espece humaine n’est pas doter encore de lire dans les pensées…


#9

Côté serveur :

params["_player"];

_steamid = getPlayerUID _player;
_query = 'SELECT * FROM players WHERE steamid="'+ _steamid +'"';
_var = [2, _query, _steamid] call RP_fnc_dbBoolQuery;

if(_var) then {
diag_log "Il faut charger son stuff";
} else {
    [] remoteExecCall ["Client_fnc_firstLogin", _player]; // MON CALL SERVEUR VERS CLIENT FONCTIONNEL 
};

Puis mon fameux “Client_fnc_firstLogin” aussi simple soit-il pour les tests :
Côté client :

disableSerialization;
hint "Coucou, firstLogin !"; // Ce hint s'affiche
createDialog "firstLogin_Dialog";

#10

ET ton description ou tu as definie le dialog ?
Parfois c est juste le cache qui fait chier … essaie de le supprimer


#11

Essaie de déclarer ta variable _player en en une variable global du style life_firstlogin_unit.

life_firstlogin_unit = _player;

et tu envoies life_firstlogin_unit au lieu de _player à ton remoteExec


#12
disableSerialization;

[] spawn 
{ 
	createDialog "firstLogin";
	waitUntil { !isNull findDisplay 33994 };
	_display = findDisplay 33994;
	hint format ["%1", _display];
};

Le hint m’affiche bien : “Display #33994”, si ça ce n’est pas le comble !
Arma quelques fois nous réserve des surprises géniales :joy:

En revanche j’ai remarqué quelque chose d’assez interessant … Qu’importe le dialog que je lui demande d’appeler dans ce script, il ne veut pas s’éxécuter. En revanche, lorsque je place le dialog dans un addAction par exemple, là tout fonctionne comme par magie. C’est étonnant. C’est comme si le createDialog ne s’exécutait pas en local/client, très improbable tout de même


#13

Dans ce cas regarde les positions de ton dialog … elles sont peut etre hors champs !


#14

tu as essayer variable global au lieu du _player ?


#15

Ca y’est, problème réglé ! En fait, il suffisait tout simplement de mettre un sleep 1. Peut-être que tout simplement mon call était un peu trop rapide, je ne sais pas vraiment, il va falloir que je creuse un peu tout cela histoire de bien comprendre exactement le pourquoi du comment. Merci à tous pour le temps que vous m’avez accordé afin de m’aider à trouver la solution. :smiley:

Je place donc la résolution de mon problème :

disableSerialization;

[] spawn 
{ 
    sleep 1;
    createDialog "firstLogin"; 
    waitUntil { !isNull findDisplay 33994 };
   _display = findDisplay 33994;
    hint format ["%1", _display];
};

#16

J’ai déplace le sujet très bien


#17

J y aurais pas pense ! :smiley: