Jump to content

Citizen

Moderators
  • Posts

    1,803
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Citizen

  1. C'est quoi un Bandler ? De plus je ferrai les modifications/améliorations suivantes: function replaceskin () local txd = engineLoadTXD( "hunk.txd" ) engineImportTXD( txd, 285 ) local dff = engineLoadDFF( "hunk.dff", 285 ) engineReplaceModel( dff, 285 ) end addEventHandler( "onClientResourceStart", resourceRoot, replaceskin) Tu noteras l'utilisation du mot clé local qui précise en gros que cette variable là sera détruite à la sortie du scope. Pour ici les 2 variables seront libérées de la mémoire à la fin de la fonction. Tu noteras également que j'ai utilisé la variable resourceRoot sans même la définir. En fait, c'est une variable prédéfinie de façon caché si je puis dire. Pour voir d'autres variables prédéfinies comme celle-ci, je te renvois à ce topic: List of predefined variables De plus tu n'es pas obligé de compresser ta ressource, tu peux la laisser sous forme de dossier sans aucun problème. En général on ne compresse pas une ressource sur laquelle on travail. On l'a compressera si on pense qu'elle est terminée et ne subira plus ou presque plus de modifications. Note sur le debugging: Si ton script avait été un script server, tu aurais pu voir une erreur dans ta console au moment de (re)démarrer ta ressource. Mais là comme c'est un script clients, les erreurs sont écrite dans un fichier log dans le dossier MTA du joueur: C:\Program Files (x86)\MTA San Andreas 1.4\MTA\clientscript.log Si tu l'ouvres maintenant et que tu vas vers la fin, tu devrai voir une erreur concernant ton addEventBandler Tu peux également afficher les erreurs/warnings serveur ET client in-game en tapant la commande /debugscript 3 (Il faut être connecté en tant qu'admin pour l'utiliser) (Tu remarqueras aussi que ta fonction addEventBandler n'a pas été coloré en bleu par le tag [ lua], ça m'a immédiatement interpellé)
  2. Bah c'est à lui de faire ça, là pour l'instant ça sera toujours le skin du SWAT parce que tu donnes 285 directement à la fonction setElementModel. Il faut donc modifier tout ça et passer par une variable. Code en français à traduire en LUA: Je set ma variable de skin à 285 je get son account Si son account n'est pas un guest account, alors ++++Je récupère son account data pour le skin dans une autre variable ++++Si la valeur de cette autre variable n'est pas égale à false alors ++++++++Je set ma variable de skin à la valeur de cette autre variable (en la faisant d'abord passer par la fonction tonumber) ++++fin du si fin du si Je peux maintenant lui changer le skin en donnant ma variable de skin Voilà y a rien de compliqué surtout maintenant que je vous ai donné le code en français
  3. Bah si, c'est à ça que sert la fonction math.random et j'avais bien dit de remplacer math.random(312) et donc pas juste le nombre 312. Tu peux utiliser le login panel évidemment mais faut vérifier s'il utilise une base de données MySQL ou les account datas. S'il utilse le système de compte intégré, alors il doit surement faire appelle aux fonctions addAccount et logIn. Il te faut donc modifier broph.lua afin "d'écouter" l'event onPlayerLogin, récupérer le numéro du skin enregistré sur le compte (qui est passé en paramètre avec onPlayerLogin), et assigner le skin enregistré à l'utilisateur. Bah ... Je t'ai cité le wiki qui explique justement ce que c'est ... Je pense que je dois traduire ? Je peux pas donner plus d'indice, sinon je te donnerai carrément le code
  4. Je pense qu'il suffit de modifier la ligne 19 de broph.lua: repeat until setElementModel(player,math.random(312)) En remplaçant le math.random(312) par l'id du SWAT directement, ça devrait le faire (sauf si une autre ressource vient s'en mêler). Le moyen le plus simple sera d'utiliser les account datas, c'est comme les elements datas mais qui s'enregistre dans une base de données locale et donc sont récupérable après un reboot ou la reconnexion du joueur. Cela t'obliges néanmoins à faire un système de register et de login pour les utiliser: Il te faura donc utiliser ces fonctions (server-side only): addAccount -- Pour le register logIn -- Pour le login getPlayerAccount -- Pour récupérer le compte du joueur (vérifier que ce n'est pas un "guest account") getAccountData -- Pour récupérer son skin setAccountData -- Pour sauvegarder son skin Si on a réussi à récupérer un skin depuis son account, alors on utilisera cette valeur à la ligne 19, sinon, le skin du swat.
  5. Bonsoir LawrenceKnight, Il aurait été judicieux (pour ne pas dire nécessaire) de nous dire quel gamemode tu utilises. Je pense que c'est freeroam (lancé via play).
  6. Bonsoir maserieusevierp, basicrp (community page) n'utilise en aucun cas une base de données MySQL mais les account datas. Il est donc nécessaire de mettre toutes les ressources qui ont besoin d'utiliser ce type de fonction dans le groupe Admin de l'acl.xml de ton serveur. Voilà un exemple pour rajouter brpMain en admin (il contient le système de register et de login) <acl> ... <group name="Admin"> ... <object name="resource.brpMain"></object> </group> ... </acl Je te laisse rajouter les autres ressources. (Attention: Vérifier à bien éteindre le serveur avant de modifier l'acl.xml car sinon les modifications seront écrasées même après sauvegarde) Par contre si tu parlais de mta-fairplay (qui est la refonte par le même auteur de ce gamemode), il utilise une base de données MySQL et le readme est suffisamment clair quant à son installation.
  7. En pensant que Nico062 avait tort en parlant de modifier les droits de l'exécutable (car je pensais que ce dossier n'était pas accessible) j'ai réouvert le 1er screenshot. Ce dossier est donc bien le dossier server. Et maserieusevierolplay_blabla serait donc l'éxécutable. Vu que c'est sûrement GameHost qui à fait l'installation initiale de ce MTA, tout laisse à penser que l'éxécutable à déjà les droits et propriétés nécessaires à son exécution. Le dossier server est donc le home de ton compte avec lequel tu te connectes sur le FTP. Donc enfait y a juste à créer le dossier ressources dans deathmatch et mettre tes ressources dedans.
  8. Je ne sais pas ce qu'est ce dossier Home Oo, mais je créerai un dossier resources dans le dossier deathmatch et je mettrai mes ressources dedans. Mais sinon il n'ont pas une FAQ ou une documentation ? En plus si tu as installer MTA sur ton ordi, tu devrais regarder comment c'est rangé. Chez moi acl.xml, mtaserver.conf et vehiclecolors.conf doit être dans le dossier deathmatch. C'est quoi comme fichier maserieusevieroleplay_ ? Comme y a pas le nom entier, je me demande. Il faut se dire que c'est pareil que dans ton MTA sauf que les .dll sont des .so (linux) et que les dlls qui sont normalement dans le dossier server sont dans ton dossier mods. J'espère que ça t'aide et j'attends tes réponses / trouvailles.
  9. Pour faire un RP dans des délai raisonnable, il faudrait être au moins 3 et tout le monde voudra être un peu le mec qui gère le projet. Ça va naturellement devenir un projet RP comme les autres qu'auront fait 3 codeurs qui se seront rencontrés. Ce topic fait genre penser à un gars qui veut faire un RP, qui a commencé de son côté mais qui cherche d'autres codeur pour l'épauler. Là ou ça peut devenir intéressant c'est si le RP supporte les languages, que le code source soit publique et qu'il y ait un serveur officiel. Mais les copies se multiplieront donc il faudra avoir les ressources nécessaires pour garder les joueurs. Il faut qu'ils se disent que le serveur officiel est meilleur et que les copies sont moins bonnes que l'officiel vu qu'elles auront/devront avoir un train de retard. Et j'ai pas le temps pour coder un nouveau RP.
  10. Heuu c'est pas de base donc t'as qu'a modifier le GM qui fait ça ? Sinon pour avoir cet event, modifie la ressource admin en rajoutant: Ligne 447: addEventHandler("onPlayerRegister", true) Et ligne 461: triggerEvent("onPlayerRegister", player) Ensuite dans ta ressource tu peux l'utiliser comme ceci: -- Comme cet event va être trigger d'une autre ressource, -- il faut la rajouter ici aussi addEvent("onPlayerRegister", true) function myFunction () outputChatBox(getPlayerName(source).." just registered !") end addEventHandler("onPlayerRegister", root, myFunction) Et ça devrai fonctionner.
  11. C'est un forum d'entraide ici donc ça serait cool d'expliquer quel était le problème et ce que tu as fais pour y remédier. Ça aidera sûrement une autre personne qui tomberai sur ce topic en cherchant une solution.
  12. Coupe ton serveur ouvre le acl.xml (vérifie que c'est pas l'acl du dossier d'un MTA précédent genre 1.3) et colle ici le contenu dans cette balise: --colle ton acl ici Et c'est sûr qu'il n'y a pas de dans le groupe Admin.
  13. On peut clairement lire que la ressource login_panel n'a pas les droits d'utiliser la fonction addAccount. Il faut que tu mettes cette ressource dans le groupe admin de l'acl.xml (regarde comment sont mis les autres ressources dedans)
  14. addEventHandler("onVehicleExplode", root, function () setTimer( function ( theCar ) respawnVehicle( theCar ) end, 10000, 1, source) end) ?
  15. Ouai je me suis un peu emporté aussi, c'est juste que ça m'énerve de voir des personnes donner de mauvaises pratiques à ceux qui apprennent et qu'on va se retrouver avec soit de nouveau topic sur le forum qu'on aurait pu éviter ou d'avoir des serveurs français qui laguent parce que le serveur se prends trop de trigger dans la figure.
  16. Tu aurais pu nous donner un screenshot pour voir le problème mais je pense qu'il suffit de mettre img blabla en premier à la ligne 1515 au lieu de 1524 Ou alors préciser explicitement la position de l'image en faisant comme ceci: {'img', src='fnf.jpg', x=0, y=0, width=280, height=300},
  17. Quand tu rajoutes une ligne dans un tableau, il faut mettre la virgule à la fin si ce n'est pas la dernière ligne. Bon sinon, je viens de lire le code qui gère les fenêtres dans freeroam et perso je trouve ça énorme ! En gros il conçoit sa fenêtre dans un tableau en respectant des conventions et une fois fait, y a plus qu'à envoyer le petit tableau à la fonction createWindow qui suit les même conventions afin de créer la fenêtre avec ses boutons etc en appelant les bonnes fonctions (guiCreateWindow, guiCreateCheckBox, guiCreateStaticImage etc). Bref c'est du bon code et c'est puissant ! En gros tu n'as pas indiqué la taille que l'image devait faire: {'img', src='fnf.jpg', width=280, height=300}, Modifie les valeurs comme bon te semblera. Vérifie aussi que t'as placé fnf.jpg dans le dossier freeroam au même endroit que map.png etc. Normalement ça devrait marcher. Si c'est pas le cas, soit bien sûr que tu modifies le bon fichier et que t'as bien pensé à restart freeroam
  18. Qu'entends tu par "se retourner" ? Je pense à un saut et une fois en l'air il faut tourner la voiture dans un certains sens pour atterrir comme il faut et continuer le circuit mais je ne suis pas sûr. Ou alors tu veux dire si la voiture tombe sur le toit et qu'il faut remettre la voiture sur ses roues avant qu'elle ne prenne feu ? De toute façon dans les 2 cas, je suis d'accord pour l'hypothèse des fps mais j'aimerais que tu fasses une petite vidéo vite fait ou que tu expliques un peu mieux ce que toi et ton ami n'arrive pas à faire.
  19. Dit moi Rémi, les conseils que je te donnes, tu t'en fou ? (ton "anticheat" sur github) Les triggers ne sont pas fait pour ça ! Les triggers sont les fonctions les plus gourmandes en ressources cpu et réseaux. Nouvelle version (côté serveur): function checkSkin(thePlayer) if isObjectInACLGroup("user." getAccountName(getPlayerAccount(thePlayer)), aclGetGroup("Everyone")) then -- Si il n'est pas admin alors local id = getElementModel(thePlayer) -- Permet de regarder l'ID du skin du joueur if id == 217 then -- Si l'ID du vêtement est 217 alors setElementModel(thePlayer, 0) -- Met le skin de CJ end end end setTimer( function () for k, player in ipairs(getElementsByType("player")) do checkSkin( player ) end end, 5000, 0) Je suis pas méchant mais voir quelqu'un continuer a faire ce genre de code crade et en plus de le partager à d'autres comme étant une bonne solution de le faire alors qu'on lui explique le contraire.
  20. Il y a toujours cette notion de client-serveur que tu ne maîtrises/comprends toujours pas. Les scripts clients sont envoyés par le serveur à chaque joueur qui se connecte. Chaque pc/joueur qui se connecte au serveur reçoivent donc ces scripts, et les exécutent. Lorsqu'un joueur (joueur 1) se prend des dégâts, tous les joueurs qui sont proche de cette victime (joueur 2 et joueur 3) (il y a une notion d'éléments "streamed in" et "streamed out" pour cet event à prendre en compte) vont aussi remarquer que joueur 1 s'est prit des dégâts. En conséquence tous les 3 vont déclencher l’événement "onClientPlayerDamage" avec en source : joueur 1 Ta fonction va donc s’exécuter chez les 3 joueurs donc il ne faut surtout pas retirer du "blood" à getLocalPlayer() mais au joueur qui est la source de cet event: function onPlayerAttackedByVehicle(attacker, weapon, bodypart, loss) if getElementType(attacker) == "vehicle" then local aBlood = getElementData(source, "blood") setElementData(source, "blood", aBlood - math.random(3000,4000)) end end addEventHandler("onClientPlayerDamage", root, onPlayerAttackedByVehicle) Mais attention, là encore il y a un problème: comme ce script est exécuté sur les 3 pc, le pc de joueur 1 va enlever du blood à joueur 1 mais joueur 2 va aussi lui en enlever et joueur 3 aussi. Donc les dégâts sont infligé 3 fois au même joueur. Pour régler ça, il suffit tout simplement de laisser le pc de joueur 1 lui infliger lui-même les dégâts en vérifiant que le joueur source correspond au joueur local (donc le joueur qui exécute le script): function onPlayerAttackedByVehicle(attacker, weapon, bodypart, loss) if getElementType(attacker) == "vehicle" and source == localPlayer then local aBlood = getElementData(source, "blood") setElementData(source, "blood", aBlood - math.random(3000,4000)) end end addEventHandler("onClientPlayerDamage", root, onPlayerAttackedByVehicle) Et ça devrait très bien fonctionner. Par contre tu devrai utiliser loss pour savoir combien lui retirer de blood. Ça sera plus pro et plus logique surtout. (Faudra surement le multiplier par 10 ou 100, je ne sais pas combien de blood un joueur a de base).
  21. Tu te fais kicker même si cheat engine n'est pas lancé. Donc ça scan apparemment ton disque dur ou cherche des clés (que cheat engine crée à son installation) dans le registre.
  22. Pas de soucis, on est là pour ça
  23. Si c'est toujours une erreur qui empeche un script de se charger, oui. Si c'est une erreur qui survient au moment du login, non car c'est un autre problème donc il te faut créer un autre topic sur ce forum. Bah met les deux et précise lequel est un script server et lequel est un script client (regarde dans le meta.xml pour savoir). J'attends donc ta réponse et ton nouveau topic.
  24. Enlève la virgule ligne 29 et c'est reglé. Fait un autre topic pour ton problème de spawn en nous donnant la fonction spawnDayZPlayer et la fonction qui utilise ce spawnDayZPlayer. Et bien sûr les éventuelles erreurs serveurs (dans la console du serveur) mais aussi celles côté serveur (/debugscript 3 ingame si t'es admin dans l'acl ou dans le fichier: C:\Program Files (x86)\MTA San Andreas 1.3\MTA\clientscript.log)
  25. Merci pour ton intervention xPiwel mais c'est totalement faux et en plus ça rajoute un bug qui va ecore plus empêcher ce fichier .lua de se charger. Il me faudrai les lignes qui sont au-dessus de la ligne 611 (une dizaine pour être sûr qu'elle y soit). Erreur suspectée: un tableau/une fonction mal fermé. Même chose (au-dessus de la ligne 477) Ici il me faut de la ligne 780 à 825 inclus. Erreur ce tableau est mal fermé (manque un } avant le nouveau tableau de la ligne 825) Là c'est pareil, il doit manquer un } ou une parenthèse fermante plus haut. Il me faut donc les lignes au-dessus. ____________________________________ 1 - Pourquoi retirer le { qui permet de définir le 1er niveau du tableau ? -> On est d'accord, réponse fausse. 2 - Et comment tu crées une liste vide dans ce cas ? Skins = {} -- Crée une variable globale qui est une liste vide (pour l'instant) -> Réponse fausse 2bis - Heuuu et tu fais comment après ? Message() -- comme ça ? Non clairement non ! Si tu fais: Message = outputChatBox("Hey I am here") Le message va s'afficher dans la chatbox au chargement de la ressource concernée et Message va valoir true. Va essayer de faire quelque chose avec true lol. Par contre ça oui: Message = function () outputChatBox("Hey I am here") end Message est donc maintenant une fonction qui fait un outputChatBox("Hey I am here") à chaque fois que tu l'appelleras comme ceci: Message() -- affiche "Hey I am here" Message() -- réaffiche "Hey I am here" 3 - Ok bien vu la virgule manquante ligne 45. Mais il faut enlever celle ligne 94 et y a une erreur avant (donc t'as corrigé une erreur que MTA ne voyait pas encore à cause d'une autre erreur plus haut (il s'arrête de chercher les erreurs). Donc c'est bien). 4 - Heuuu t'as rien fait là a part enlever le "etc etc" de JiD ...
×
×
  • Create New...