GTAOnline.net
IV : Multiplayer (iv:mp) => Scripting IV:MP [Squirrel center] => Discussion démarrée par: Gilux le 19 Juillet 2011, 18:24:57
-
Salut,
J'ai testé la GUI aujourd'hui, avec ce code dans le clientscript :
local GUItest = {};
GUItest.window <- GUIWindow();
GUItest.window.setText("Enregistrement");
GUItest.window.setSize(460.0, 170.0, false);
local screen = guiGetScreenSize();
GUItest.window.setPosition(screen[0]/2 - 460/2, screen[1]/2 - 170/2, false);
function onPlayerCommand(command)
{
local cmd = split(command, " ");
cmd[0] = cmd[0].tolower();
if(cmd[0] == "/gui")
{
GUItest.window.setVisible(!GUItest.windowshown);
GUItest.windowshown = !GUItest.windowshown;
guiToggleCursor(true);
}
}
addEvent("playerCommand", onPlayerCommand);
Voilà, et bien évidemment, lorsque je teste le code, rien ne s'affiche, ni sur l'écran ni dans la console. (J'ai bien ajouté le script au fichier xml de configuration.)
Je pensais à un confilt entre évènements serveur/client, mais je ne comprend pas comment régler ça si c'est le cas.
Merci de votre aide !
-
Salut,
Ton problème n'est pas un conflit d'évènement, car les scripts clients et serveurs ne sont pas du tout reliés entre eux. (Comme l'indique son nom, les scripts client sont éxécutés sur le PC du joueur, et pas appelés sur le serveur)
Cependant, la commande onPlayerCommand n'est pas appelée sur le client, mais seulement sur le serveur.
Je te conseil donc de faire ceci dans ton script serveur :
function onPlayerCommand(playerid,command)
{
if(cmd[0].tolower() == "/gui")
triggerClientEvent(playerid, "showGUI");
}
et dans le script client :
local GUItest = {};
local screen = guiGetScreenSize();
GUItest.window <- GUIWindow();
GUItest.window.setText("Enregistrement");
GUItest.window.setSize(460.0, 170.0, false);
GUItest.window.setPosition(screen[0]/2 - 460/2, screen[1]/2 - 170/2, false); // je te conseil de faire directement tes calculs, remplacer 170/2 par 85 pour limiter les calculs à faire par le PC du client, qui n'est peut être pas très puissant.
GUItest.window.setVisible(false); // on la rend invisible au chargement du script
GUItest.windowshown <- false; // on oubli pas de définir cette variable
function showGUI() // Fonction appellée par addEvent
{
GUItest.window.setVisible(!GUItest.windowshown);
GUItest.windowshown = !GUItest.windowshown;
guiToggleCursor(true);
}
addEvent("showGUI", showGUI); // Event appellé par le serveur quand le joueur tape /gui.
-
Merci à toi, je testerai ça cet après midi ;)
Par contre, le wiki indique bien que l'event est "partagé" en une partie serveur (playerCommand(playerid,command)) et une partie client (playerCommand(command)).
(http://wiki.iv-multiplayer.com/wiki/index.php?title=PlayerCommand (http://wiki.iv-multiplayer.com/wiki/index.php?title=PlayerCommand))
Ce n'est plus à jour ? :happy
++
EDIT : C'est bon, j'ai réussi et ça m'a permis de comprendre en même temps le fonctionnement des clientscripts, j'ai réussi à faire un petit script avec getCurrentStreetName. :)
J'ai encore du mal à comprendre getLocalPlayer mais ça va venir :P
-
getLocalPlayer te retourne tout simplement l'ID du joueur (playerid).
-
Merci de tes précisions. Je commence à doucement y arriver, que ce soit coté serveur (Sauvegarde de compte) ou client (GUI), mais je préfère faire un script 100% coté serveur pour le moment :D
++
-
Je sais pas pourquoi je comprend mieux le Squirrel que le pawn la sais tout simple mais dernière question ou je mais les dossier du serveur?Car clien sais simple sais clienscripte (fallais pas cherche loin) mais les dossier du serveur? et aussi dans setting?
-
M'enfin c'est mon topic là ::)
Sinon, c'est l'avantage de IV:MP, les "scriptfiles" peuvent être placés n'importe où dans le dossier du serveur, il y a un dossier "files" mais rien ne t'empêche de les mettre autre part ;)
++
-
settings, c'est pas un dossier, settings.xml est un fichier, comme server.cfg sur SA:MP.
Et en quelque sorte le Squirrel est plus simple, c'est juste que le Pawn est vraiment un langage mal foutu, mais va faire un tour sur le forum de IV:MP, tout le monde va te répondre "pawn sucks", et c'est bien vrai, et je trouve que GUnitSoldier explique bien pourquoi ici : http://forum.iv-multiplayer.com/index.php/topic,3752.msg37604.html#msg37604 (http://forum.iv-multiplayer.com/index.php/topic,3752.msg37604.html#msg37604)
-
Oui, il explique bien, mais sa signature le décrédibilise...
You're strange. You think your server is best?
You're idiot.
All servers the BEST, just because it's IVMP!!!
Not stupid SA-MP with fcking cartoon graphics and idiot physics.
Please, all SA-MP scripters fck off (i absolutely don't respect you) and stay down.
here is new age of new gaming in IVMP, SA-MP always was a kind of noob shit.
-
Il dit juste qu'il déteste SA:MP, mais ses arguments sont vrai concernant le Pawn
-
Pas nécessairement, quand certains comprennent le script pawn, ils savent ce qu'ils doivent toucher et ne pas toucher. Comme par exemple les ";" il éxiste plusieurs méthodes afin de savoir si tu en as oublié ou pas ou même encore, parfois quand tu ajoutes un script, il se peut que certaines variables soient déjà définies, il suffit de les retiré et d'en garder qu'une seule. Afin, c'est le script qui doit nous comprendre, mais c'est nous qui doit le comprendre et quand on le comprend aucun problème surgit.
-
C'est pas au niveau des problèmes rencontrées ou les erreurs à la compilation, c'est au niveau des capacités, des fonctionnalités et des performances du langage.
-
Mais comme la si bien dit Shawny
quand certains comprennent le script pawn, ils savent ce qu'ils doivent toucher et ne pas toucher.La performance vien quand ta compris se qui faut faire ou logique mais sais vrais que j'ai plus de plaisir a coder en Squirrel que en PAWNO.
-
Il ne faut pas chercher Samir le Squirrel s’exécute plus rapidement que le pawn sans parler du fait que ce langage est un langage orienté objet donc bon que tu sache ce que tu touche ou pas le squirrel sera toujours (?) rapide que le pawn
-
Je sais mais je suis plus alaise dans le Squirrel que dans PAWN ^^
-
Salut,
J'ai encore quelques questions :
• J'ai commencé à créer des commandes admin de base, comme /kick ou /announce.
Mais quand il faut indiquer une raison, le script n'indique que le premier mot de la phrase (Logique, sachant que les paramètres sont séparés (split) à chaque espace).
Comment remédier à ça ?
• J'ai continué à faire quelques trucs avec la GUI (Affichage de fenêtre, texte, etc). Cependant le fait de cliquer sur la croix de fermeture ne fait rien. J'imagine qu'il y a une méthode à ajouter pour la rendre active ?
EDIT : J'ai trouvé CloseButtonEnabled, je sais pas si c'est ça...
• Sur N++, les commentaires multilignes ne sont pas colorés. J'ai essayé de modifier userdefinelang.xml mais ça ne fonctionne toujours pas... (Pourtant ça fonctionne bien en PHP, etc)
Merci d'avance.
++
-
• Pour remédier à ça, utilise string.slice(start,end);
Ca permet de couper un chaîne d'un point à un autre.
Exemple :
local str = "Salut à tous !";
print(str.slice(1,5));
print(str.slice(5));
print(str.slice(0,2));
// Affiche :
alut
à tous !
Sa
(Voir + sur le wiki Squirrel ici (http://www.squirrel-lang.org/doc/squirrel2.html#d0e2706))
Sinon, tu utilises un gros foreach et tu colles tes morceaux de tableau en une chaîne. Mais c'est biensûr moins optimisé.
• Il y a un event qui gère ça, windowClose. http://wiki.iv-multiplayer.com/wiki/index.php?title=WindowClose (http://wiki.iv-multiplayer.com/wiki/index.php?title=WindowClose)
Tu as juste à supprimer la fenêtre quand l'event est appelé.
• Faut essayer de trouver un fichier bien configuré. Si tu cherches un peu sur forum.iv-m.com, tu vas en trouver deux ou trois. (Si tu les trouve pas, je pourrais t'upload le mien)
-
Merci, j'essaierai tout ça :)
++