Jump to content

Citizen

Moderators
  • Posts

    1,803
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Citizen

  1. Why did you revert the code we fixed for you ??? local monitorSize = {guiGetScreenSize()} local panelSize = {300, 350} local panelPos = {monitorSize[1]/2-panelSize[1]/2, monitorSize[2]/2-panelSize[2]/2} local pedPos = {} -- it was ped here not pedPos local pedPos = { {1539.3648681641, -1354.3519287109, 329.46493530273, 0, 0, 180, "Jacky", 10}, } local weapons= {{"M4"}, {"AK-47"}, {"MP5"}, {"UZI/Tec-9"}, {"Colt-45"}, {"Desert Eagle"}, {"Silenced Colt"}, {"Sörétes"}} local Font1 = dxCreateFont("files/Roboto.ttf", 11) show = false addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), function () for index, value in ipairs (pedPos) do if isElement(pedPos[index]) then -- it was ped here not pedPos destroyElement(pedPos[index]) -- it was ped here not pedPos else pedPos[index] = createPed(value[8], value[1], value[2], value[3]) -- it was ped here not pedPos setElementRotation(pedPos[index], 0, 0, 90) -- it was ped here not pedPos pedPos[index]:setData("ped:shooting", true) -- it was ped here not pedPos pedPos[index]:setData("ped:shooting", true) -- it was ped here not pedPos setElementFrozen(pedPos[index], true) -- it was ped here not pedPos pedPos[index]:setData("ped:name", value[7]) -- it was ped here not pedPos pedPos[index]:setData("name:tags", "Shooting Range") -- it was ped here not pedPos end end end) Also use the <> button to add code.
  2. Try this (check the comments): local ped = {} -- created the empty list to store peds local pedPos = { {1539.3648681641, -1354.3519287109, 329.46493530273, 0, 0, 180, "Jacky", 10}, } addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), function () for index, value in ipairs (pedPos) do if isElement(ped[index]) then -- we want to get a possible ped from ped table not pedPos destroyElement(ped[index]) -- same here else ped[index] = createPed(value[8], value[1], value[2], value[3]) setElementRotation(ped[index], 0, 0, 90) ped[index]:setData("ped:shooting", true) ped[index]:setData("ped:shooting", true) setElementFrozen(ped[index], true) ped[index]:setData("ped:name", value[7]) ped[index]:setData("name:tags", "Shooting Range") end end end)
  3. J'ai réinstallé mon ordi, j'ai rien de prêt pour tester. Faire comme dans cette vidéo à partir de 1:50: https://youtu.be/VtYC9GESRNk?t=1m50s Lance le Map Editor (ça va te créer un serveur en local et te connecter automatiquement) Appuie ensuite sur F5 pour spawn F1 pour faire apparaître le menu Freeroam puis clique sur Weapon pour te donner une arme qui doit avoir ton viseur Si ça marche c'est ton serveur qui n'autorise pas Aussi par rapport à ta phrase: Changer le curseur ne va rien régler par rapport a tes "bugs". Je viens de googler l'ip de ton serveur. C'est un serveur PUBG, il ne faut pas s'étonner s'ils te remplacent ton crosshair ...
  4. Est-ce qu'il fonctionne dans le map editor ? Peux-tu m'envoyer ton hud.txd une fois que tu y as ajouté le nouveau crosshair ? Si ton fichier est bon et que le crosshair fonctionne dans le map editor, c'est certainement le serveur qui interdit les modifications de ce genre.
  5. Tu peux suivre ce tuto en français: https://www.youtube.com/watch?v=ZVmaOOG3BYg Le soucis c'est qu'en faisant ça, tu modifies un fichier du jeu et que chaque serveur est en mesure de remettre l'original ou de le remplacer s'il ne tolère pas la modifications des fichiers du jeu (ce qui est souvent le cas avec les serveurs DM car ça peut donner un avantage). Faut que je me renseigne sur le fonctionnement exact de la réinitialisation ou du remplacement de crosshair. En attendant pour éviter de devoir refaire la manipulation à chaque fois, tu peux copier le fichier (hut.txd) une fois modifié quelque part que tu colleras/remplaceras dans le dossier models (jeu éteint) à chaque fois que tu perds le crosshair.
  6. J'ai pas bien compris comment tu t'y es pris, peux-tu détailler ce que tu as fait exactement ? Aussi, c'est pour le mettre par défaut sur ton serveur ou juste toi en tant que joueur en allant sur des serveurs ?
  7. Le tableau BANK_ACCOUNTS n'existe pas à l'endroit où tu y accèdes
  8. C'est bizarre que ça sorte 3 lignes dans la chatbox o_O Hmmm là je veux pas être méchant mais soit plus attentif, on ne va pas y arriver si à chaque fois tu ne fais que la moitié des instructions. J'ai des contraintes IRL qui, en ce moment, ne me permettent pas de te répondre rapidement, donc si en plus je dois répéter, on va pas aller très vite Je dis ça pour toi, j'imagine que tu veux régler ce problème au plus vite. Je cite ce que j'avais marqué concernant la fonction var_dump: Donc ce que j'attendais de toi c'est que tu cliques sur var_dump qui est un lien vers la page wiki de cette fonction: https://wiki.multitheftauto.com/wiki/Var_dump Sur la page, ils te fournissent le code de cette fonction: Tu copies tout le code et tu le colles dans le même fichier où tu veux l'utiliser. Nous on l'utilise juste après le outputChatBox et faut le laisser le temps de nos tests. On s'en sert pour débuguer ton script, et une fois terminé tu pourras supprimer ce code. J'espère que c'est plus clair maintenant. Du coup j'attend le résultat de la chatbox et du var_dump (pour lui ça s'écrira dans la console F8 ingame) et également la commande complète que tu tapes.
  9. parce que tu as fait 3 fois la commande ? (enfin je sais pas si c'est une commande ou un GUI mais si t'as 3 lignes c'est que t'as fait 3 fois un transfert nan ?) et pour le BANK_ACCOUNTS ?? (j'ai demandé 2 choses, le var_dump met le juste après l'outputChatBox )
  10. Bah un simple outputChatBox en début de fonction par exemple ? addEvent("bank:transfer", true) addEventHandler("bank:transfer", root, function(id, amount, to, reason) outputChatBox(id) -- et la valeur d'id s'affichera dans la chatbox if(transferBank(id, amount, to, reason)) then triggerClientEvent(client, "bank:transferRecieve", client, true) else triggerClientEvent(client, "bank:transferRecieve", client, false) end end) function transferBank(id, amount, to, reason) if(id and amount and to and reason) then if(BANK_ACCOUNTS[to]) then if(BANK_ACCOUNTS[id].balance >= amount) then dbExec(connection, "INSERT INTO bank_records (bank_id, record_type, record_from, reason, amount, date) VALUES(?, ?, ?, ?, ?, NOW())", to, 3, id, reason, amount) dbExec(connection, "UPDATE bank_accounts SET balance = balance - ? WHERE id=?", amount, id) dbExec(connection, "UPDATE bank_accounts SET balance = balance + ? WHERE id=?", amount, to) BANK_ACCOUNTS[to].balance = BANK_ACCOUNTS[to].balance + amount BANK_ACCOUNTS[id].balance = BANK_ACCOUNTS[id].balance - amount return true else return false, "Le compte bancaire spécifié n'a pas assez d'argent." end else return false, "Le compte bancaire spécifié n'existe pas." end else return false, "Argument Invalide." end end Et pour la table tu peux utiliser var_dump qui est une fonction à copier dans ton code (car ce n'est pas une fonction de base de MTA) var_dump("-v", BANK_ACCOUNTS) -- affiche le contenu de BANK_ACCOUNTS dans la console
  11. Je me répète mais tant que ce n'est pas fait je ne peux pas t'indiquer d'où vient le problème. Egalement, tu nous as montré la structure du tableau (c'est une bonne chose): a quelle moment est-il créé ? au démarrage du script et en parcourant tous les comptes enregistrés ? ou seulement joueur par joueur au fur et à mesure qu'il se connecte ?
  12. Cette erreur signifie que l'index auquel tu essayes d'accéder n'existe pas dans le tableau BANK_ACCOUNTS. Essaye de vérifier la valeur id ainsi que le contenu de BANK_ACCOUNTS au moment de l'appel.
  13. Tant mieux. J'étais sur le tel et j'ai pas pris le temps de détailler pourquoi je n'aurais pas fait ça. C'est même un problème niveau sécurité car en forçant les mots de passe à être en majuscules avant d'en générer le hash le système de login devient insensible à la casse sur le mdp. Si un utilisateur s'enregistre avec le mdp "SeCuRe" le hash enregistré sera: ab968dba0c8f21c3d3c8ffe44b4a4576119edc7fd98d84aaf0f520c326bba394 (au lieu de b3583948940a2542db33217f789f2ed8dc2a5292d7cc5508d19873ad6dae5c30 car forcé en majuscule avant le hash) Et au moment du login s'il tape "secure" dans le champ du mot de passe le script va vérifier la correspondance avec: ab968dba0c8f21c3d3c8ffe44b4a4576119edc7fd98d84aaf0f520c326bba394 (au lieu de 6a934b45144e3758911efa29ed68fb2d420fa7bd568739cdcda9251fa9609b1e car forcé en majuscule) A la limite il aurait fallu inverser et mettre en majuscule le résultat du hash: https://github.com/Citizen01/lua-mta-fairplay/blob/master/resources/roleplay-accounts/s_accounts.lua#L278 string.upper(sha256(password)) et dans ton ucp: $password = strtoupper(hash('sha256', $_POST['password'])); Avec ça si le mot de passe est "SeCuRe" et que l'on met "secure" le login ne passera pas car pas le même hash. En espérant avoir été compréhensif. Cordialement, Citizen
  14. Le login du gm fait un hash en sha256 (et non un md5) du mdp qui est d'abord mit tout en majuscule (d'ailleurs j'aurais pas fait ça à la place de l'auteur) Donc ton ucp doit plutôt faire: $password = hash('sha256', strtoupper($_POST['password'])); Et je pense que ça devrait fonctionner. @John MTASA Je ne vois pas pourquoi ce n'est pas adapter au bon gm ??
  15. Quelle version du gm utilises-tu (si t'as un lien on sera sûr d'être en phase) ? et comment enregistres-tu le mot de passe via ton ucp ?
  16. Concept intéressant en effet, hâte de voir ta version MTA du jeu
  17. Impossible, le code n'a aucun sens et même avec un addCommandHandler ça ne passera pas. function repair() outputChatBox("Bouton réparer cliqué !") end addEventHandler("onClientGUIClick", GUIEditor_Button[8], repair, false) Ce code affichera "Bouton réparer cliqué !" dans le chat si on fait un clic gauche, droit ou clic molette. Ok donc on va maintenant restreindre notre code pour n'autoriser que le clic gauche, et pour ça il faut vérifier la valeur du paramètre button que l'event envoit en 1er paramètre si on ajoute une variable pour la réceptionner: function repair( button ) if button == "left" then outputChatBox("Bouton réparer cliqué !") end end addEventHandler("onClientGUIClick", GUIEditor_Button[8], repair, false) Voilà le code du dessus affichera "Bouton réparer cliqué !" mais que si on a fait un clic gauche. Maintenant on veut réparer le véhicule dans lequel le joueur est assis. En regardant le wiki, je trouve cette fonction: fixVehicle Mais d'après la syntaxe et comme on pouvait s'y attendre, il faut lui donner en paramètre le véhicule à réparer donc il faut d'abord récupérer le véhicule dans lequel le joueur local (on est en script client donc getLocalPlayer() pour ça) est assis et toujours via le wiki (plus difficile à trouver je te l'accorde) je vois cette fonction: getPedOccupiedVehicle Elle retournera false s'il n'est pas actuellement dans un véhicule, auquel cas on peut afficher un message d'erreur: function repair( button ) if button == "left" then local vehicle = getPedOccupiedVehicle( getLocalPlayer() ) -- on récupère le véhicule occupé par le joueur local if vehicle then -- si on a bien une valeur (autre que false ici) ... fixVehicle( vehicle ) -- on répare ce véhicule else -- sinon ... outputChatBox( "You have to be in a vehicle to fix it !", getLocalPlayer(), 200, 0, 0) -- on affiche ce message au joueur local et en rouge. end end end addEventHandler("onClientGUIClick", GUIEditor_Button[8], repair, false) On va également lui retirer 50$ et afficher ton message: function repair( button ) if button == "left" then local vehicle = getPedOccupiedVehicle( getLocalPlayer() ) if vehicle then fixVehicle( vehicle ) takePlayerMoney ( getLocalPlayer(), 50 ) -- il n'y a que 2 arguments, pas de true à la fin outputChatBox( "You have payed 50$ for your repair.", getLocalPlayer(), 125, 125, 0 ) else outputChatBox( "You have to be in a vehicle to fix it !", getLocalPlayer(), 200, 0, 0) end end end addEventHandler("onClientGUIClick", GUIEditor_Button[8], repair, false) Et là tu as quelque chose de de fonctionnel et qui correspond à ce que tu veux. C'est en essayant et en apprenant de ces erreurs qu'on devient meilleur. Continue ton apprentissage et n'hésite pas si tu as d'autres questions. Cordialement, Citizen
  18. @Wumbaloo Franchement ça m'étonnerait que ça soit ça (même si tu as raison de le souligner) parce que je suis persuadé que si c'était ça on aurait plutôt ce message d'erreur: J'ai trouvé la ressource (page du wiki) et je suis maintenant quasi sûr qu'il essaye de l'appeler depuis un script serveur. @Ea7gign Peux tu ajouter ce code juste en-dessous de ton addCommandHandler et me dire ce que ça affiche dans la chatbox au démarrage de ta ressource ? outputChatBox("Script type: "..(localPlayer and "client" or "server")) Je pense que ça va afficher Script type: server alors qu'il faudrait Script type: client
  19. - Vérifie bien le nom de la ressource au cas où il y aurait une faute de frappe. - Vérifie le type de l'export pour cette fonction (server, client ou shared) et vérifier si tu l'appelles depuis un script du même type (si c'est en shared, ça marchera pour tout). - Vérifie que les paramètres soient bons.
  20. Pour connaître la liste des raccourcis mis à disposition:
  21. function show_dx() if(isPedInVehicle(thePlayer)) then local theVehicle = getPedOccupiedVehicle(thePlayer) if(handlerExist) then removeEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = false else addEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = true end else outputChatBox("Tu doit être dans un véhicule !", thePlayer) end end bindKey("m", "down", show_dx) Ici la variable thePlayer n'est pas définie ! Donc tu iras toujours dans le else car isPedInVehicle(nil) retournera toujours false. Comme c'est un script client, et qu'un script client s'exécute pour un joueur à la fois (chaque joueur en récupère une copie à la connexion et l'exécutent pour eux-même) il est possible de récupérer directement le joueur actuel via getLocalPlayer() ou le raccourci très pratique: localPlayer. -- Version 1: via getLocalPlayer() function show_dx() local thePlayer = getLocalPlayer() -- on défini thePlayer if(isPedInVehicle(thePlayer)) then local theVehicle = getPedOccupiedVehicle(thePlayer) if(handlerExist) then removeEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = false else addEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = true end else outputChatBox("Tu doit être dans un véhicule !", thePlayer) end end bindKey("m", "down", show_dx) -- Version2: directement via localPlayer function show_dx() if(isPedInVehicle(localPlayer)) then local theVehicle = getPedOccupiedVehicle(thePlayer) if(handlerExist) then removeEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = false else addEventHandler("onClientRender", getRootElement(), dxDraw) handlerExist = true end else outputChatBox("Tu doit être dans un véhicule !", localPlayer) end end bindKey("m", "down", show_dx)
  22. Tu pouvais le faire toi-même, la fonction setWeaponProperty permet justement de faire ça: Server: -- Armes à modifier (tu peux en ajouter en séparant bien avec des virgules) -- Liste des armes https://wiki.multitheftauto.com/wiki/Weapons local weaponsId = { 30, -- AK47 31, -- M4 } addEventHandler("onResourceStart", resourceRoot, function () for _, weapId in ipairs(weaponsId) do for _, skill in ipairs( { "poor", "std", "pro" } ) do -- liste des flags et leurs effets: https://wiki.multitheftauto.com/wiki/Weapon_Flags setWeaponPropertyFlag(weapId, skill, 0x000010, true) -- peut viser et bouger en même temps setWeaponPropertyFlag(weapId, skill, 0x000020, true) -- peut tirer et bouger en même temps end end end) -- Set or clear an individual weapon flag bit function setWeaponPropertyFlag( weapon, skill, flagBit, bSet ) local bIsSet = bitAnd( getWeaponProperty(weapon, skill, "flags"), flagBit ) ~= 0 if bIsSet ~= bSet then setWeaponProperty(weapon, skill, "flags", flagBit) end end Testé et ça fonctionne (je ne sais pas quel gamemode tu as mais moi je pouvais déjà viser, tirer et bouger en même temps (sauf en étant accroupi).
  23. Ça ne m'aide pas, je ne sais toujours pas ce qui se passe quand tu te connectes sur le serveur: est-ce que tu spawns tout de suite ou il y a t'il une voir plusieurs étapes ? Utilise ce code pour débuguer le timing (server-side): function round(num, precision) return math.floor(num*math.pow(10,precision)+0.5) / math.pow(10,precision) end addEventHandler("onPlayerSpawn", root, function () local x, y, z = getElementPosition(source) outputChatBox("J'ai spawn à x:"..round(x, 3)..", y:"..round(y, 3)..", z:"..round(z, 3)) end) addEvent( "onZombieSpawn", true ) addEventHandler("onPlayerSpawn", root, function (x, y, z) outputChatBox("Zombie spawned pour "..getPlayerName(source).." à x:"..round(x, 3)..", y:"..round(y, 3)..", z:"..round(z, 3)) x, y, z = getElementPosition(source) outputChatBox(" alors qu'il est à x:"..round(x, 3)..", y:"..round(y, 3)..", z:"..round(z, 3)) end) Je n'ai pas testé le code, remonte moi les erreurs si tu en as. Le test à faire: Redémarrer le serveur complètement et avec mon code Se connecter au serveur Spawn quelque part sur ta map (il y aura un message lorsque tu spawn) Attends un peu que d'autres zombies spawn (il y aura un message lorsqu'un zombie spawn) Me copier la chatbox (ou me mettre un screenshot) en réponse.
×
×
  • Create New...