Jump to content

Citizen

Moderators
  • Posts

    1,771
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Citizen

  1. Hello and welcome, Don't ask your scripting questions in Tutorials please. I have moved it to the portuguese scripting section.
  2. Hello and welcome. This is not a tutorial and you are writing in portuguese so I have moved your post to https://forum.mtasa.com/forum/127-programação-em-lua/ Please keep the tutorial section for tutorials only. Thank you for your understanding.
  3. Hello @Duff1995, I moved your post in https://forum.mtasa.com/forum/127-programação-em-lua/. Please post in this section for your next scripting questions. Best regards, Citizen
  4. Citizen

    mta server list bug

    I don't know how still valid this list is but that's what I've found: Untill someone who knows the list replies. But I would first use our server port checker: https://nightly.mtasa.com/ports/ And if everything is fine, maybe your new node IP is banned by MTA (either an exact IP ban or an unfortunate IP range ban that include yours).
  5. Yes we did miss you ! Welcome back aboard ! You probably left but your were kinda still there with us as we grew with your popular resources. I think all servers have the bone_attach resource (or had at some point). At least I did grow with your bone_attach with me. When your website went down, it was a big hit for me, trying to find mirrors of it somewhere. But the community is always there to back it up and keep moving forward.
  6. [Moved from Scripting >Tutorials] Hello, Your post doesn't match the requirements to be considered a tutorial and is too short. You do not explain in details how to use it, the code shows bad practices, is not indented and actually has an error because Pdx is not defined. Also you must write the description in english in this category. Thanks for understanding.
  7. @Zango Nope, it will just stop working now (will never open) because the source of onClientMarkerHit is the marker which got hit, not the element hitting the marker. @Patlik You have to check if the hitPlayer (provided as 1st parameter of the handler function) is equal to the localPlayer element (and checking matchingDimenssion is a best practice too): function MKH_OPEN (element, matchingDimension) if element ~= localPlayer or not matchingDimension then return end if not atm[source] then return end if guiGetVisible(GUIEditor.window[1]) then -- I've also removed `== true` there as it is redundant guiSetVisible(GUIEditor.window[1], false) showCursor(false) else guiSetVisible(GUIEditor.window[1], true) showCursor(true) end end addEventHandler("onClientMarkerHit", root, MKH_OPEN)
  8. You have the most optimized way of creating the teams. But this code teams = createTeam is wrong, as you are overriding the teams variable as you are iterating over that list. The 1st one gets created, the second should fail because that teams variable just changed for the team entity you created in the 1st iteration of the loop. You can also write it like this (by using unpack): for k, v in ipairs( teams ) do createTeam( unpack(v) ) -- unpack can be used here because it is in the same order end but it's less optimized (if this is not a time critical code, then it will just save you time writing the code, but not by much either :p)
  9. Use the ipb and/or performancebrowser resource to check the perfs and get insights of what function calls makes your server to lag. Most of the time it is because you have too much calls to setElementData A little page about performancebrowser: https://wiki.multitheftauto.com/wiki/Resource:Performancebrowser
  10. Moved to Scripting section.
  11. Okay alors maintenant, si je te dis de modifier ton code pour essayer ça: else outputChatBox( row["x"] ) -- même résultat avec outputChatBox( row.x ) -- local x, y, z = getElementPosition(source) -- setElementPosition(source, x, y, z) end qu'est-ce qui s'affiche dans la chatbox ?
  12. Mes commentaires/explications dans le code: local qh = dbQuery(db, "SELECT * FROM users WHERE username=?", username) local result = dbPoll (qh, -1) local row = result[1] -- ici tu récupères la row de ta DB if not row then spawnPlayer(source, 1743.63281, -1861.50757, 13.57743) local x, y, z = getElementPosition(source) dbExec(db, 'INSERT INTO users (username, posX, posY, posZ) VALUES (?,?,?,?)', username, x, y, z) else -- ici t'as confirmation que "row" existe mais tu ne fais rien avec, il faut récupérer les valeurs x, y, z depuis la row ! local x, y, z = getElementPosition(source) -- et non pas getElementPosition qui va récupérer la position actuelle du joueur, cad 0, 0, 0 par défaut quand on se connecte setElementPosition(source, x, y, z) -- et il faut utiliser spawnPlayer plutôt que setElementPosition si t'as pas déjà spawn end
  13. C'est pourtant ce que tu as laissé sous-entendre en le présentant comme ton nouveau système d'inventaire ? J'ai déjà croisé pas mal de personnes de mauvaise fois mais là c'est quand même pas mal. Surtout que tu as report mon 1er message et une partie des admins/modo l'ont vu et envers lesquels j'ai dû me justifier. Pas longtemps cela dit car il était évident que j'avais vu juste. Ne vient pas te plaindre maintenant que tout le monde semble être contre toi. Tu as essayé de nous la mettre à l'envers et peut être tenté de gagner de la reconnaissance en tant que scripter. Tu ne sembles même pas être désolé et tu restes sur la défensive en essayant de nous faire croire que c'est nous qui avons mal interprété tes dires. Donc tu peux t'estimer heureux de t'en tirer sans même un warning (jusqu'à maintenant du moins ?)
  14. Idem je n'ai même pas été notifié ? (je supprime le 1er post)
  15. Screenshot illisible, impossible de se faire une bonne idée du système. De plus je doute fortement que t'ai pu faire ce système. Modifier un qui existe ne permet pas de se l'approprier. Je ne dis pas que c'est ce que tu as fait mais j'ai des gros doutes. En tout cas il faut plus de détails. Le mieux serait une vidéo qui montre les features.
  16. Disregard what I have said then. You didn't follow the setup instructions correctly: https://github.com/mabako/mta-paradise/blob/master/INSTALL.md
  17. Please follow the rules of this section:
  18. First you could say hi or something, we are not robots so we do have feelings and that would be greatly apreciated. Second, you didn't follow the Formatting guidelines: Your code has to be in a code block with Lua language. Third, you can't request people to make the script for you, try to do it first and if you can't make it work, please show the code you tried.
  19. EDIT: nvm, I've mixed my open tabs
  20. 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 ^^
  21. 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
  22. Ok mais il faut bien se dire que tu vas simplement masquer le problème au lieu de le corriger.
  23. 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
  24. 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.
×
×
  • Create New...