Citizen

Other Languages Moderators
  • Content Count

    1,752
  • Joined

  • Last visited

  • Days Won

    1

Citizen last won the day on December 11 2019

Citizen had the most liked content!

Community Reputation

29 Good

4 Followers

About Citizen

  • Rank
    French Section Moderator
  • Birthday 12/07/1993

Details

  • Gang
    Byston Evolution
  • Location
    Lyon ( France )
  • Interests
    Lua,C/C++,HTML,PHP, mySQL,Basic,C#,JAVA,js and MTA of Course ^^

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. C'est pas moi qui recherche hein, c'est Frize. Il va être content de voir qu'il y a enfin un dev de dispo ^^
  2. Pareil, il faut blinder le code pour ne pas l'exécuter si ce qu'on veut destroy n'est pas une valeur valide: elseif currentWeaponID == weapID2 and elementWeaponBack2[source] then Blood et Blood2 sont censés être 2 markers de santé sur la map. Je peux rien faire à ta place ici. supprime le code ou crée les 2 markers. Là le code est clairement prévu pour que les zombies puissent être créé par des joueurs et lorsque le zombie est créé par un joueur, on retient quel joueur l'a créé en le mettant dans l'element data "owner" du zombie. Lorsqu'un zombie meurt, il passe dans ce code et la source de cet event est le zombie en question. Si c'est un zombie classique, il n'aura pas de valeur dans l'element data "owner" donc on va récupérer false dans zombieCreator donc appeler getElementData sur false ça va planter d'où l'erreur "Bad argument @ 'getElementData' [Expected element at argument 1, got boolean]" et retourner false aussi et ensuite on y soustrait 1 pour réduire son compteur "spawnedzombies" de 1 mais false - 1 ça fait planter aussi et provoque l'erreur "attempt to perform arithmetic on a boolean value". Donc la pareil, faut blinder pour ne pas le faire s'il n'y pas de zombieCreator (et aussi au niveau de la récup du compteur de zombie créé): local zombieCreator = getElementData(source, "owner") if zombieCreator then -- on blinde ici local currentSpawnedZombies = getElementData(zombieCreator, "spawnedzombies") or 1 -- et ici aussi au cas où avec une valeur par défaut à 1 si non trouvée setElementData(zombieCreator, "spawnedzombies", currentSpawnedZombies - 1) end
  3. Ok mais il faut bien se dire que tu vas simplement masquer le problème au lieu de le corriger.
  4. Bonsoir Dewen, Alors de ce que j'en comprends, il est possible d'avoir un bot qui garde une position donnée. Normalement le système est censé lui créer un colshape qui représente le point à garder et stock cette instance de colshape dans un element data du bot ("guardcol"). Hors si tu as ces erreurs qui là, ça signifie qu'on a bien un bot jouant le rôle de gardien (puisque son "status" est "guarding") mais qu'on ne lui a pas affecté de colshape puisque "guardcol" vaut très certainement false lors de sa récupération ligne 874. Et on se doute que ce n'est pas censé arriver puisqu'on ne vient pas vérifier si "guardcol" est une valeur valide et on l'utilise directement ligne 877 pour récupérer sa position (= la position à garder). Donc il y a 2 choses à faire: comprendre pourquoi on se retrouve avec un bot qui doit monter la garde sur un colshape qui n'existe pas (ou qui existe mais qui ne lui a pas été affecté correctement) et corriger le problème à la source donc. blinder le code de guard_move pour éviter de continuer l'exécution du code si on a un gardien sans colshape. Pour le 1er il faut regarder dans le reste du gamemode. Pour le 2ème on peut rajouter une condition dans le "if" ligne 876: function guard_move (ped, oldpx, oldpy, oldpz) if (isElement(ped)) then if (getElementData ( ped, "status" ) == "guarding" ) and (getElementData (ped, "slothbot") == true) then local guardcol = getElementData ( ped, "guardcol" ) local pedhp = getElementHealth ( ped ) if guardcol and pedhp > 0 then -- L.876 la condition vérifie maintenant que guardcol ne soit pas égale à false local tx,ty,tz = getElementPosition( guardcol ) local px,py,pz = getElementPosition( ped ) local fdist = (getDistanceBetweenPoints3D (px, py, pz, tx, ty, tz)) if fdist > 4 then triggerClientEvent ( "bot_Forwards", ped ) local pdistance = (getDistanceBetweenPoints3D (oldpx, oldpy, oldpz, px, py, pz)) if (pdistance < 1 ) then local decide = math.random( 1, 7 ) -- randomly decide to if decide == 1 then -- do nothing setTimer ( guard_move, 600, 1, ped, px, py, pz) elseif decide <4 then -- jump local weap = getPedWeaponSlot(ped) if (weap == 1) or (weap == 7) then setPedWeaponSlot(ped, 0 ) triggerClientEvent ( "bot_Jump", ped ) setTimer ( setPedWeaponSlot, 850, 1, ped, weap) else triggerClientEvent ( "bot_Jump", ped ) end setTimer ( guard_move, 600, 1, ped, px, py, pz) else -- randomly turn a new direction, walk a bit, then resume local randomangle = math.random( 1, 360 ) setPedRotation( ped, randomangle ) setTimer ( guard_move, 1200, 1, ped, px, py, pz) end else -- if the ped isnt stuck setTimer ( guard_move, 700, 1, ped, px, py, pz) end else triggerClientEvent ( "bot_Stop", ped ) --already arrived at place to guard if (getElementData ( ped, "forcedmoving" ) == true ) then setElementData ( ped, "forcedmoving", false ) end setTimer ( guard_move, 1500, 1, ped, px, py, pz) -- keep looping in case ped gets moved some other way end end end end end
  5. Ouai là, c'est juste pas présenté pareil: https://wiki.multitheftauto.com/wiki/Weapon_Flags Mais c'est pas un flag c'est une propriété. T'avais pas lu là ? Bon après je ne sais pas trop comment ça doit se modifier et à quoi chacun correspond vraiment. A ta place je ferai d'abord un getWeaponProperty avec ton arme pour voir déjà quelles sont les valeurs actuelles. Puis je me créerai une commande pour modifier ces valeurs comme je veux pendant les tests en jouant avec les valeurs. Et quand t'es content du résultat, note les valeurs et utilise les dans ton script.
  6. Oui t'as raison, je vérifierai mais je pense qu'on peut.
  7. J'avais pas répondu tout de suite car comme Wumbaloo je ne l'avais jamais utilisé et du coup je n'ai jamais cherché à comprendre son fonctionnement. Mais grâce au post de 50p proposé par Wumbaloo (omg 2014 !), j'ai enfin capté. Et c'est pour ça que je viens juste corriger la manière de traduire "0x1001800": Il faut plutôt dire (sachant que ça se lit de droite à gauche): il y a la valeur 8 pour le 3ème byte donc WHEEL_F_WIDE2 est activé la valeur 1 pour le 4ème byte donc WHEEL_R_NARROW2 est activé la valeur 1 pour le 7ème byte donc USE_MAXSP_LIMIT est activé Précision aussi, on peut remarquer que dans notre exemple de 0x1001800, on n'a que 7 bytes de renseignés alors que le handlingFlags est sur 8 bytes. C'est parce que 0x1001800 c'est pareil que 0x01001800 (qui est bien sur 8 bytes) ou même pareil que 0x000000001001800. En gros tant que t'as des 0 sur la gauche du dernier "vrai chiffre" (je rappelle, ça se lit de droite à gauche) tu peux les supprimer sans problème. C'est comme si je disais 0050 pommes == 50 pommes. En vrai si ça peut aider je me suis dit que je pourrais faire un excel sur google drive où on viendrait cocher les flags souhaités et ça te sortirai le flag final en hexa (0xBidule) dans une case de résultat. Si j'ai au minimum 1 seule personne intéressée, je le fais volontiers ^^
  8. Juste pour info évite de coller des milliers de lignes de codes ici. Perso chez moi ça me fait crasher Chrome sur mon téléphone et ça l'a bien fait freeze avant de me redonner la main sur mon pc. Pour ton problème je suis d'accord avec Wumbaloo, il faut ajouter une condition avant d'exécuter le trigger de l'event onPlayerUseMedicObject et qui doit certainement être dans le code client de l'inventaire. Un petit boolean isHealing ou isUsingMedic que tu initialises à false au démarrage du script. Puis lorsque que le joueur a fait l'action en choisissant son heal, tu vérifies si le boolean est toujours à false, si c'est le cas tu fais le trigger de onPlayerUseMedicObject, tu passes le boolean à true et également un setTimer de 1500 ms pour le remettre à false. Et si ce n'est pas le cas (le boolean est à true) c'est qu'il y a déjà une action de heal en cours donc tu ne fais rien (tu ne fais pas -1 sur son item utilisé et tu ne fais pas le trigger de onPlayerUseMedicObject).
  9. Salut RoRo76, Effectivement tes renseignements sont corrects, il ne reste plus qu'a les assembler, t'as tenter de faire un essai de code avec cet event et cette fonction ? Regarde les exemples du wiki pour ces 2 choses et essaye de nous coder ce petit truc. On est là pour t'aider mais j'aimerai bien que tu sois capable de le faire. Les autres si vous me lisez essayons plutôt de l'accompagner que de lui sortir le code cash. En tout cas à la fin c'est sûr que tu auras le script fonctionnel qu'il te faut.
  10. Citizen

    DB Problem

    Did you buy the vps with MTA and database preinstalled ? If so, just ask the host support the details for the database connection. Maybe the server is listening for localhost or 127.0.0.1 connections which is the default configuration so try to use that instead of the server's IP. Otherwise, if you bought an empty VPS, then you have to setup a MySQL Server yourself.
  11. Please see this post for the solution:
  12. Citizen

    VF #4 E8Q9

    Please see this post for the solution:
  13. Citizen

    Error VF #EC95

    Please see this for the solution:
  14. Please see this for the solution:
  15. Citizen

    ERROR VF #4 JR9Z

    After investigations we have found and fixed the problem. Please restart your MTA and try again (you might need to restart it twice). We apologize for the inconvenience.