Leaderboard
Popular Content
Showing content with the highest reputation on 11/11/17 in all areas
-
Hey @Tails, thanks for using bakaGaijin! I'm glad you're using it. It gives me a very nice feeling knowing that someone is using something I made. As for the first feature request, I'll make it so you can add destroy callbacks for when the host resource of an element stops. Expect it soon. As for the bug report, I'll have to run it myself to check what's wrong exactly. If you have a github account, please consider opening both of these are issues there, as I am not very active on these forums. https://github.com/luca-spopo/bakagaijin/issues It would also be great if you can send the example scripts where the bug occurs (remove the parts that are not relevant to the bug) in case I am not able to reproduce it.2 points
-
السلام عليكم اليوم جبتلكم سكربت بسيط و اتوقع ماله فايدة الكم بس حبيت اسويه وانشره هيك طبعا السكربت هو سكربت شخصية ترافلجار لاو من أنمي ون بيس + سيفه وسويته مع قدراته الي هي يقدر يسوي غرفة وهيك إلخ.. الي طبعا ما يعرف ون بيس مارح يعرف وش اقصد انا ض1 كيف تسوي حركاته ( طبعا اهم شي لازم يكون معك الشخصية والي هي 217 مشان تقدر تسوي قدراته ) رقم الشخصية : 217 سلاحه : السيف زر 1 = يصنعلك روم زر 2 = يحذف الروم زر 3 = يسوي انفجار بداخل الروم زر 4 = يسوي نار بداخل الروم زر 5 = يعطي كل الي جوا الروم دم زر 6 = يزيل رأوس كل من في الروم ويقتلهم زر 7 = ينقل كل من في الروم لمكان بعيد زر i = يجبلك كل المعلومات حول الازرار طبعا لما تيجي تستخدمهم لازم يكون معك السكن علشان يجوك صورة : :الاهدائات @#_'Lu[F]Fy @MR.StoRm @iMr.WiFi..! @#BrosS @#Soking @!#NssoR_) @iPrestege @Abu-Solo @MR.S3D @MR.GRAND @Source|> @Abdul KariM @#RoLde @*Sailor @Ahmed Ly @Rakan# @xX_Ma[D]arA_xX @#,+( _xiRoc[K]; > @Sha67 @DABL @Jupiter @Tete omar @3NAD -- واسف اذا نسيت احد -- الباقي في القلب __________________________ الان نيجي للتحميل لتحميل السكربت : اضغط هنا ______________________________________________ وقريبا ان شاء الله شخصية زورو ض1 ويلا مع السلامة .1 point
-
1 point
-
1 point
-
1 point
-
السلام عليكم ورحمة الله كيف الحال يا شباب ؟ ان شاء الله كلكم بخير كيف اللعبة هالايام ؟ فيها سيرفرات عربية مثل أول ولا صارت ضعيفة ؟ وهل تستاهل الواحد يرجع لها ولا لا ؟ صراحة بعد ما تقفل سيرفر محترفين جراند ما صار للعبة طعم بالمرة1 point
-
1 point
-
1 point
-
يعطيك العافية , نقدر وجهية نظرك , لكن احنا الى نصنع المستقبل , امزح مسوي حكيم الزبده بنحاول نسوي الى نقدر علية و متفاءل مع التحديث الجديد ان شاء الله بيانات التجديث في الموضوع الجاي , شأكرين لك #1 point
-
Nice but keep in mind that inspect is actually for debugging. I recommend you to use tostring to convert numbers to strings. Because inspect does a lot more in the background than tostring does. Which is probably using a lot more cpu then needed. local numberToString = tostring(123) -- "123" local x = tostring(closestPoint[1]) local y = tostring(closestPoint[2]) local z = tostring(closestPoint[3]) local r = tostring(closestPoint[4]) local spawn = x..", "..y..", "..z..", "..r Also it is very important to use locals, to improve atleast the hierarchy of the code. In my opinion the most important thing about using locals, is that you as code writer know when data shouldn't be saved for a longer period. It must be GONE, because you don't need it any more. https://wiki.multitheftauto.com/wiki/Local https://www.lua.org/pil/4.2.html Whaaahaha brings back memories, when I started with lua.1 point
-
Thanks came up with the code below and works great! function getDistance(thePlayer) -- get the player position local px,py,pz = getElementPosition( thePlayer ) --Player location -- prepare 2 variables, but do not give them a value yet. local closestDistance local closestPoint -- loop through the tables for i=1,#hosp_loc do local hx, hy, hz = hosp_loc[i][1], hosp_loc[i][2], hosp_loc[i][3] --Hospital locations --if site:sub(0, 7) ~= "http://" then local distance = getDistanceBetweenPoints3D (hx, hy, hz, px, py, pz) --Get the distance between player and hospitals if not closestDistance or distance < closestDistance then -- If the closestDistance is nil/(false) OR the distance is smaller than the closestDistance. closestDistance = distance -- save the distance in closestDistance, which is located outside of the loop. closestPoint = hosp_loc[i] -- save the point in closestPoint, which is located outside of the loop. end end x = (inspect(closestPoint[1])) -- debug the closestPoint variable, should be a table! y = (inspect(closestPoint[2])) z = (inspect(closestPoint[3])) r = (inspect(closestPoint[4])) spawn = x..", "..y..", "..z..", "..r outputChatBox(spawn, thePlayer, 255, 170, 85) end addCommandHandler( "loc", getDistance, false )1 point
-
1 point
-
closestPoint[4] This is what closestPoint is now: { 1173, -1323, 15, 270} {[1] = 1173, [2] = -1323, [3] = 15, [4] = 270} This is how the table index works, when the keys are not defined. The inspect function will convert all data types to a string, please study: https://wiki.multitheftauto.com/wiki/Inspect So a boolean will look like something like this: "true" / "false" A number will look like something like this: "1323435" A table will look like something like this: "{123, 5656}" ETC.1 point
-
@IIYAMA Thanks, but um, final question on this... How can I get it to show only the numbers? Sorry... never used inspect before, and I can't think of a way to get length or use sub/gsub1 point
-
GTA 4? You've got to be joking. Why the hell would anyone waste their time making something for crappy GTA 4 that nobody plays any more when GTA 5 has been out for years... There already is a multiplayer mod for GTA 4 and I just checked how many people are playing it right now... 5 people.1 point
-
1 point
-
1 point
-
????????? تقدر تسويها سهلة شوف هذا الموضوع بالتعلقيات شرحت كيف تسوي animation 3D وتزبطها على الماوس مع الـ rotation1 point
-
I found out why your code went wrong. The table "cars" is not split into BMW and VAZ while the grid list is. Here is the correct code: DGS = exports.dgs addEventHandler("onClientResourceStart", resourceRoot, function() createBlip(2827.34, 1290.94, 10.76, 55, 2, 255, 0, 0, 255, 0, 250) carMarker = createMarker(2827.34, 1290.94, 9.6, "cylinder", 2.0, 0, 0, 255, 155) end ) carGUI = {} function markerTrigger(hitPlayer) if source == carMarker then showCursor(true) carGUI.win = DGS:dgsDxCreateWindow(0.75, 0.35, 0.25, 0.5, "Автомагазин", true) carGUI.window = DGS:dgsDxCreateTabPanel(0, 0, 1, 1, true, carGUI.win) carGUI.tab1 = DGS:dgsDxCreateTab("BMW", carGUI.window) carGUI.grid1 = DGS:dgsDxCreateGridList(0, 0, 1, 1, true, carGUI.tab1) carGUI.grid1Name = DGS:dgsDxGridListAddColumn(carGUI.grid1, "Название", 0.3) carGUI.grid1Price = DGS:dgsDxGridListAddColumn(carGUI.grid1, "Цена", 0.1) DGS:dgsDxGUISetProperty(carGUI.grid1,"Mark","BMW") carGUI.tab2 = DGS:dgsDxCreateTab("VAZ", carGUI.window) carGUI.grid2 = DGS:dgsDxCreateGridList(0, 0, 1, 1, true, carGUI.tab2) carGUI.grid2Name = DGS:dgsDxGridListAddColumn(carGUI.grid2, "Название", 0.3) carGUI.grid2Price = DGS:dgsDxGridListAddColumn(carGUI.grid2, "Цена", 0.1) DGS:dgsDxGUISetProperty(carGUI.grid2,"Mark","VAZ") setCameraMatrix(2814.61, 1316.01, 10.75) --setElementDimension(localPlayer, 100) for i=1,1 do addCarsToGrids("a",100,"BMW",411) end for i=1,2 do addCarsToGrids("a",100,"VAZ",422) end end end addEventHandler("onClientMarkerHit", getRootElement(), markerTrigger) cars = {} function addCarsToGrids(name, price, mark, model) cars[mark] = cars[mark] or {} cars[mark].name = { price = tonumber(price), model = tonumber(model), name = name } if mark == "BMW" then local row = DGS:dgsDxGridListAddRow(carGUI.grid1) DGS:dgsDxGridListSetItemText(carGUI.grid1, row, carGUI.grid1Name, name) DGS:dgsDxGridListSetItemText(carGUI.grid1, row, carGUI.grid1Price, price) elseif mark == "VAZ" then local row = DGS:dgsDxGridListAddRow(carGUI.grid2) DGS:dgsDxGridListSetItemText(carGUI.grid2, row, carGUI.grid2Name, name) DGS:dgsDxGridListSetItemText(carGUI.grid2, row, carGUI.grid2Price, price) end end addEvent("getCar", true) addEventHandler("getCar", getRootElement(), addCarsToGrids) function clickTrigger(button, state) if button == "left" and state == "up" then local mark = DGS:dgsDxGUIGetProperty(source,"Mark") if mark then iprint(source) print(mark) if source == carGUI.grid1 then local selected = DGS:dgsDxGridListGetSelectedItem(carGUI.grid1) if selected ~= -1 then if carGUI.buyButton == nil then carGUI.buyButton = DGS:dgsDxCreateButton(0.3, 0.7, 0.3, 0.15, "Купить", true) end local name = DGS:dgsDxGridListGetItemText(carGUI.grid1, selected, carGUI.grid1Name) if isElement(car) and getElementType(car) == "vehicle" then destroyElement(car, false) end car = createVehicle(cars[mark].name.model, 2802.79, 1309.43, 10.89) --setElementDimension(car, 100) outputChatBox(cars[mark].name.name) outputChatBox(cars[mark].name.model) end elseif source == carGUI.grid2 then local selected = DGS:dgsDxGridListGetSelectedItem(carGUI.grid2) if selected ~= -1 then if carGUI.buyButton == nil then carGUI.buyButton = DGS:dgsDxCreateButton(0.3, 0.7, 0.3, 0.15, "Купить", true) end local name = DGS:dgsDxGridListGetItemText(carGUI.grid2, selected, carGUI.grid2Name) if isElement(car) and getElementType(car) == "vehicle" then destroyElement(car, false) end car = createVehicle(cars[mark].name.model, 2802.79, 1309.43, 10.89) outputChatBox(cars[mark].name.name) outputChatBox(cars[mark].name.model) end end end end end addEventHandler("onClientDgsDxMouseClick", getRootElement(), clickTrigger) function windowClosed() if source == carGUI.win then showCursor(false) setCameraTarget(localPlayer, localPlayer) setElementDimension(localPlayer, 0) destroyElement(carGUI.buyButton) end end addEventHandler("onClientDgsDxWindowClose", getRootElement(), windowClosed)1 point
-
[Update] User Interface: The User Interface design has been altered and updated. A new top bar has been added for the login too, the top bar of the login is animated, increases on size depending on the one which is active and clicked. Also tweaked the Login Panel itself, design has been updated and simplicity has increased. Added more things into the navigation section, - Login, Log, Team, Forgot. Log: Any new in-game logs that have been published a brief preview, such as script changes, forum updates, in-game changes etc, that could possibly affect you, your player or account. Team: All the team that is currently online in-game, either Idle or Active, this changes depending on if the character is moving or not. Forgot: A website pops up, takes you directly to our site onto the `Forgot your password` page, and allows you to reset your password by following the form.1 point
-
1 point
-
1 point
-
هكذِا هم البشر! آن كنت آفضل منهم حسدوك وآن كنت آقل منهم تكبروآ ..? ﺑعضَ آلبشرَ حگايہَ جميلهہَ لنَ يعيَدهاا الزمَان ﻣرتينَ ..?1 point
-
1 point
-
Aujourd'hui on va voir comment réaliser une interface via la méthode GUI et DX, si vous voulez que j'vous apprenne à faire la même chose en CEF dites-le, pour ceux qui ne savent pas, CEF c'est l'abréviation de Chromium Embedded Framework, en gros, c'est l'intégration d'un navigateur WEB en jeu, sur MTA, on utilise Chromium qui nous est développé par Google. Bien, on va partir du fait que vous savez au moins créer un dossier pour ajouter une nouvelle ressource, donc créer un meta.xml et au moins un fichier client, ce qui nous donnerait une arborescence avec notre ressource "tutorial" comme suit: I) Mise en place de l'idée Pour faire simple et utile à tout le monde, dans ce tutoriel on va voir comment créer un panel de connexion de ce style (bien sûr, adapté en fonction des méthodes GUI, DX ou CEF), je l'avais développé pour un serveur qui n'a malheureusement pas eu le temps de voir le jour, bref. Si vous n'avez pas d'idée et vous ne savez pas à quoi ressemblera votre panel de connexion, je vous invite à vous rendre sur Google Image et tapez "Login Panel" ou encore "GTA SA Login Panel" dans la barre de recherche, vous tomberez sur un bon nombre de panels qui vous permettront d'imaginer le vôtre, ne copiez pas bêtement les panels, c'est sans intérêt. Dans mon cas, j'ai une petite idée de ce que je vais réaliser, lorsque vous travaillez sur une interface, veillez à toujours faire un plan sur un logiciel de dessin pour éviter de vous perdre et pour ne pas avoir à recommencer tout le temps, voici mon plan réalisé sur Paint.NET à partir d'une simple capture d'écran du jeu : J'ai utilisé Icons8 pour les icônes (le nom d'utilisateur, le mot de passe et le W en bas à gauche) Après avoir mis sur papier notre idée, le prochain objectif est clair : le produire en jeu le plus fidèlement possible. Pensez à extraire tout les éléments séparés, dans mon cas, je dois extraire la petite icône pour le nom d'utilisateur, l'icône pour le mot de passe, celui en bas à droite (le W entouré) puis le fond du bouton "Connexion" Néanmoins, si vous utilisez comme moi une même forme pour deux éléments, n'extrayez pas les deux éléments, extrayez-en un seul puis modifiez-le en jeu directement. II) Méthode N° 1: GUI Il s'agit de la méthode la plus simple pour commencer, elle est, à mon sens, limitée mais elle est optimisée pour l'utilisateur (moins de ralentissements) Au niveau de l'extraction, je n'extrais qu'un rectangle noir opaque et l'autre un peu transparent de 1x1 pixel puisque nous pouvons par la suite redimensionner l'image comme bon nous semble sans affecter la qualité de celle-ci (c'est qu'un rectangle noir après tout) Voici donc la liste de mes images extraites : Nous sommes prêt à passer sur notre éditeur de texte ! Rendons-nous dans le fichier client de notre panel (ici : c _gui.lua) puis ajoutons un événement qui se déclenchera seulement lorsque la ressource se démarre pour l'utilisateur, après une petite recherche sur le Wiki, nous pouvons trouver l’événement qui va nous aider: onClientResourceStart https://wiki.multitheftauto.com/wiki/OnClientResourceStart Pour vérifier qu'il est compatible avec notre fichier, en haut à droite nous pouvons voir "Clientside event" qui nous rappelle qu'on peut utiliser cet événement seulement côté Client. Intégrons-le dans notre fichier, il exécutera la fonction "resourceStart" pour qu'on ne soit pas perdu, ce qui donne : J'ai mis "getResourceRootElement(getThisResource())" en deuxième argument parce que ça évite qu'à chaque redémarrage de ressource, celle-ci se redémarre, a contrario "getRootElement()" permettra de lancer notre ressource "tutorial" à chaque fois qu'une autre ressource est démarrée. Ensuite, importons nos images précédemment extraites dans notre ressource sans oublier de compléter le "meta.xml", ce qui nous donne : Revenons à notre fichier "c_gui.lua" et créons enfin cette fonction pour afficher le panel ! Nous l'appellerons "panelConnexion". Affichons le fond du panel en utilisant "rectangle_noir_transparent.png" à la dimension de notre plan soit 520x415 via la fonction suivante : element guiCreateStaticImage ( float x, float y, float width, float height, string path, bool relative, [element parent = nil] ) Nous pouvons voir que cette fonction parle de "relative" en guise d'argument N° 6, mais qu'est-ce que c'est ? En fait, il nous faut utiliser le système de positionnement relatif au maximum, parce que si vous travaillez en absolue et que vous développez un panel qui mesure 1920x1080 et que vous dites à votre pote "Regarde j'ai fais un magnifique panel !" et que lui possède un écran 800x600, il ne va rien voir puisque c'est trop grand pour son écran. C'est pour ça qu'on a inventé le relatif, parce que si vous développez un panel en entrant en dimension 1 en X et 1 en Y, ça prendra tout votre écran peu importe si vous avez l'écran de votre pote (800x600) ou un écran 4K UHD (3840x2160), vous verrez le panel en plein écran. Enfin bref, travaillons en relatif, pour adapter nos mesures, il suffit de prendre la dimension de l'élément du panel et de le diviser par la dimension sur lequel le plan a été désigné (je suis en 1920x1080 en l’occurrence). Dans notre cas, le fond du panel mesure 520x415 ce qui donne en X: 520/1920 = 0.271 et en Y = 415/1080 = 0.384. Le centre d'un élément est définie par la largeur de la zone divisée par 2 moins la taille de l'élément divisé par 2. Dans notre cas, si on veut centrer notre panel horizontalement il faut faire (1920/2-520/2) ce qui nous donnerait 700 pixels pour l'axe X. Pour simplifier tout ça, faisons une fonction indépendante de notre code pour centrer un élément sur notre écran, voici comment je l'ai rédigé: function centrerElement(element) local ecranL, ecranH = guiGetScreenSize() local largeur, hauteur = guiGetSize(element, false) guiSetPosition(element, ecranL/2-largeur/2, ecranH/2-hauteur/2, false) end Nous pourrons maintenant centrer n'importe quel élément en faisans "centrerElement(element)" et ainsi ne plus se soucier de la position. Revenons au fichier client, et écrivons cette fonction une bonne fois pour toutes. Voici ce que ma fonction panelConnexion donne: function panelConnexion() local panel = guiCreateStaticImage(0, 0, 0.271, 0.384, "images/rectangle_noir_transparent.png", true) centrerElement(panel) -- Centrer le panel de connexion end Mon fichier client ressemble à ça : Lançons tout ça en jeu! Munissez-vous d'un compte ACL, connectez-vous, affichez le debugscript au niveau 3 (/debugscript 3) au cas où il y aurait une erreur, faites un '/refresh' de votre serveur, démarrez la ressource puis appréciez! Un magnifique rectangle transparent au centre de l'écran! C'est le début de votre panel. Maintenant que tout ça est expliqué, avançons plus rapidement, je vous propose d'ajouter la barre qui nous servira de titre pour notre panel. Le plus dur a été fait, il faut désormais disposer les éléments dans le panel, je vous ai expliqué le relatif au début de ce chapitre, mais figurez-vous qu'on peut aussi utiliser le relatif par rapport à un élément et pas seulement par rapport à l'écran! Ce qui veut dire que si on veut placer un élément tout à gauche de notre panel à sa bordure, on écrira en position "0" en abscisse (axe X), allons-y, prenons la fonction guiCreateStaticImage est remplissons la pour faire en sorte de respecter le plan, ça nous donne: local barre_titre_fond = guiCreateStaticImage(0, 0, 1, 0.145, "images/rectangle_noir.png", true, panel) J'ai mis 0 car je veux que l'image s'affiche en haut à gauche de l'écran, la taille en largeur est de 1 parce qu'il faut que la barre de titre fasse tout le panel en largeur et 0.145 car sur mon plan ma barre de titre fait 60 pixels, et mon panel 415 pixels, donc il faut faire 60/415 pour avoir la taille relative. Notez le dernier argument qui est "panel" ce qui signifie que cette barre de titre est attachée à l'élément panel, les positions sont donc relative à celui-ci. Attaquons le texte! "Label" est aussi le nom pour designer une zone de texte, nous allons utiliser "guiCreateLabel" element guiCreateLabel ( float x, float y, float width, float height, string text, bool relative, [element parent = nil] ) Pour centrer le texte, nous allons simplement commencer par afficher le texte en haut à gauche du panel, a la taille de la barre de titre, faisons donc: local barre_titre_texte = guiCreateLabel(0, 0, 1, 1, "Panel de connexion", true, barre_titre_fond) Rien de compliqué, puis mettons-le en forme via les fonctions "guiLabelSetHorizontalAlign" et "guiLabelSetVerticalAlign" ce qui donne: local barre_titre_texte = guiCreateLabel(0, 0, 1, 1, "Panel de connexion", true, barre_titre_fond) guiLabelSetHorizontalAlign(barre_titre_texte, "center") guiLabelSetVerticalAlign(barre_titre_texte, "center") Pour changer la police, il y a la fonction "guiSetFont", MTA possède des polices de base qui sont disponible ici: Standard GUI Font Names Dans notre cas, nous utilisons une police personnalisée qui est "Pricedown", nous devons donc la créer, procurez vous la police sur internet ou extrayez la de votre ordinateur si vous l'avez puis placez la dans votre ressource. Ajoutez ensuite la police dans le meta.xml, j'en ai profité pour l'organisé comme suit: <meta> <info author="Wumbaloo Willy" type="script" description="Tutorial."/> <script src="c_gui.lua" type="client" /> <!-- Images --> <file src="images/connexion_fond.png" /> <file src="images/icon_bas_gauche.png" /> <file src="images/mot_de_passe.png" /> <file src="images/nom_utilisateur.png" /> <file src="images/rectangle_noir.png" /> <file src="images/rectangle_noir_transparent.png" /> <!-- Polices --> <file src="polices/pricedown.ttf" /> </meta> Revenons côté client et importons la police personnalisée. Pour ça, on utilise la fonction "guiCreateFont" qui prend deux arguments: le chemin d'accès vers la police et la taille de la police. On créé donc la police avec "guiCreateFont" puis on l'utilise avec "guiSetFont", rien de compliqué. Tout ça nous donne notre fonction panelConnexion qui ressemble à ça: function panelConnexion() local panel = guiCreateStaticImage(0, 0, 0.271, 0.384, "images/rectangle_noir_transparent.png", true) centrerElement(panel) -- Centrer le panel de connexion -- Barre de titre (fond) local barre_titre_fond = guiCreateStaticImage(0, 0, 1, 0.145, "images/rectangle_noir.png", true, panel) -- Barre de titre (texte) local barre_titre_texte = guiCreateLabel(0, 0, 1, 1, "Panel de connexion", true, barre_titre_fond) guiLabelSetHorizontalAlign(barre_titre_texte, "center") guiLabelSetVerticalAlign(barre_titre_texte, "center") local pricedown_32px = guiCreateFont("polices/pricedown.ttf", 32) -- Création de la police personnalisée guiSetFont(barre_titre_texte, pricedown_32px) end En jeu voici à quoi notre panel ressemble: C'est exactement ce qu'on voulait! Ensuite, mettons en forme notre panel à l'aide des fonctions "guiCreateLabel", "guiCreateStaticImage" et aussi "guiCreateEdit" et voici ce que ça nous donne ! Je compte sur vous, on a vu tout ce qu'il fallait voir pour continuer ! Voici ma fonction panelConnexion : function panelConnexion() local panel = guiCreateStaticImage(0, 0, 0.271, 0.384, "images/rectangle_noir_transparent.png", true) -- 520x415 centrerElement(panel) -- Centrer le panel de connexion -- Barre de titre (fond) local barre_titre_fond = guiCreateStaticImage(0, 0, 1, 0.145, "images/rectangle_noir.png", true, panel) -- Barre de titre (texte) local barre_titre_texte = guiCreateLabel(0, 0, 1, 1, "Panel de connexion", true, barre_titre_fond) guiLabelSetHorizontalAlign(barre_titre_texte, "center") guiLabelSetVerticalAlign(barre_titre_texte, "center") local pricedown_32px = guiCreateFont("polices/pricedown.ttf", 32) -- Création de la police personnalisée guiSetFont(barre_titre_texte, pricedown_32px) -- Texte d'information local information_texte = guiCreateLabel(0.0385, 0.2, 1-0.385, 0.0482, "Entrez vos identifiants :", true, panel) guiLabelSetHorizontalAlign(information_texte, "left") guiLabelSetVerticalAlign(information_texte, "center") local verdana_16px = guiCreateFont("polices/verdana.ttf", 16) -- Création de la police personnalisée guiSetFont(information_texte, verdana_16px) -- Nom d'utilisateur local icon_utilisateur = guiCreateStaticImage(0.077, 0.313, 0.088, 0.111, "images/nom_utilisateur.png", true, panel) utilisateur_texte = guiCreateEdit(0.231, 0.325, 0.64, 0.1012, "Nom d'utilisateur", true, panel) -- Mot de passe local icon_mot_de_passe = guiCreateStaticImage(0.077, 0.525, 0.088, 0.111, "images/mot_de_passe.png", true, panel) mot_de_passe_texte = guiCreateEdit(0.231, 0.5301, 0.64, 0.1012, "1234", true, panel) -- Connexion bouton_connexion = guiCreateStaticImage(0.477, 0.783, 0.3846, 0.12, "images/connexion_fond.png", true, panel) bouton_texte = guiCreateLabel(0, 0, 1, 1, "Connexion", true, bouton_connexion) guiLabelSetHorizontalAlign(bouton_texte, "center") guiLabelSetVerticalAlign(bouton_texte, "center") local verdana_14px = guiCreateFont("polices/verdana.ttf", 14) -- Création de la police personnalisée guiSetFont(bouton_texte, verdana_14px) -- Icône en bas à gauche local icon_bas_gauche = guiCreateStaticImage(0.029, 0.723, 0.1731, 0.217, "images/icon_bas_gauche.png", true, panel) end J'ai volontairement utilisé plusieurs tailles de polices mais vous pouvez très bien utiliser celles de MTA de base, de même, j'ai mis quelques variables en global et d'autres en local parce que je pense les utiliser dans d'autres fonctions par la suite. Oh, aussi, n'oubliez pas d'utiliser guiEditSetMasked pour rendre les champs de mot de passe masqué, avec de petites étoiles. Pour finir proprement, ajoutons un événement lorsque nous cliquons sur le bouton "Connexion" ! Il nous suffit d'utiliser l'événement "onClientGUIClick" qui sera relié à une nouvelle fonction qu'on va appeler "seConnecter", du coup, on ajoute l'événement après avoir créé notre bouton de connexion comme ça: addEventHandler("onClientGUIClick", bouton_connexion, seConnecter) Puis on fait une petite fonction "seConnecter" qui affiche un message dans le chat. function seConnecter() outputChatBox("Connexion en cours...") end Vous pouvez essayer en jeu. Voila nous avons notre panel entièrement en GUI ! Nous avons réalisé une interface de A à Z et avons même débordé un peu en proposant d'interagir avec notre magnifique bouton de connexion ! En bref, si avoir le panel peut vous aider (ou si vous avez simplement la flemme de le refaire) je vous le met à disposition ici: Télécharger via Mega.NZ Si ça vous plaît, faites-le moi savoir et je continuerai sur le chapitre avec les DX et pour finir en CEF, on verra même quelques fonctions bonus pour changer la couleur d'un élément quand on passe dessus ou encore la transparence de celui-ci. C'est mon premier tutoriel, dites-moi ce que je dois changer! J'espère que je me suis fais comprendre et je reste à votre disposition en dessous! Merci d'avoir lu! Wumbaloo.1 point
-
Hello @specahawk, we've been trying to use this to handle all of our gui on our server, with some success however, I have some issues with it. When I use baka to create new gui elements in another resource there's no way for it to know when the other resource has stopped. Of course I could just pass the resource name as an argument and use onClientResourceStop, but it would be nice if it was passed as a hidden argument or something or maybe there's already something there that would help deal with this issue? The comments in your code on GitHub didn't make a lot of sense to me. Also, something else I've noticed, not sure if it's a bug or a missing feature but it seems that you can't pass tables like below. You'll get a tail call warning/error. local dx = bakaGaijin("dxx").dx local win = dx.window("my window", 0, 0, 600, 225) win.setStyle({ color = tocolor(255, 0, 0, 255), bgColor = tocolor(0, 0, 0, 175) }) I had to add an alternative syntax, win.setStyle("bgColor", tocolor(0, 0, 0, 175)) which of course works fine. Thanks for writing this wonderful thing I'll still be using it but it would be nice to see these issues resolved.1 point
-
طرحت لهم الاكواد ونسيت اهم شيء الي هو ملف الشادر ض2 + dxProgress مانك حاطة1 point
-
add option to make text like Bold Italic Underline Strikethrough and combo like something something2 something3 in gui text,gridlist, dxdraw, chatbox etc example outputChatBox("[b]bold[/b][i]italic[/i]")1 point
-
0 points
-
السلام عليكم ورحمة الله وبركاتة اليوم إنتهيت من المود شبيه بوزارة الهجولة والتدشير : مود معرض السيارات بعض الصور : اللوحة الرئيسية ولوحة شراء السيارات لشراء الاصدار والمود تواصل علي الايميل التالي قم بمراسلة المبرمج[انا] على الإيميل : [email protected] او تواصل معي علي الفيس بوك . Facebook Skype:omar.ben200 Note : اذا كان لديك أية مشاكل, قم بكتابة تعليق. اذا كان لديك أي إقتراحات لتطوير المود, قم بكتابة تعليق لا تنسى تقييم المود بنسبة مئوية% في تعليق شكرا.0 points