Jump to content

Citizen

Moderators
  • Posts

    1,803
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Citizen

  1. Citizen

    [HELP] Spawn

    What do you mean ?
  2. You are totally wrong guys ... Built-in events can not be triggered at all from scripts. Only the "system" is allowed to trigger built-in events. But there is a workaround. Basically, you can create your own event (which can be triggered) with a different but similar name. Then listen for the built-in event to trigger your new event with the same datas. Then you can use your event everywhere (in the resource) and it will be triggered when the built-in one is triggered by the system and also if you trigger it yourself: addEventHandler("onCPlayerChat", true) addEventHandler("onPlayerChat", root, function (message, messageType) cancelEvent() triggerEvent("onCPlayerChat", source, message, messageType) end) function myOnPlayerChatHandler(message, messageType) if messageType == 0 then -- global chat -- do something elseif messageType == 1 then -- /me actions -- do something elseif messageType == 2 then -- team chat -- do something end end addEventHandler("onCPlayerChat", root, myOnPlayerChatHandler) You have to code the chat again to make it work again like the original one (using outputChatBox, outputServerLog etc). Once done, you can trigger onCPlayerChat instead of onPlayerChat.
  3. - You didn't specified your level.lua in your meta (don't forget important things when you paste here) - You probably has a syntax error in your level.lua so the whole file isn't loaded/executed. - The txd and/or the dff files contains errors (do they work in single player ?) And check out the client side errors by hitting /debugscript 3 (you have to be logged in as admin). Client side errors won't be shown on the server console.
  4. J'ai corrigé "ton" code et je t'ai avancé en récupérant le nom des éléments qu'il a choisit. Il était évident que c'était à toi de terminer ton script.
  5. Oups, m'as faute en effet. Ligne 60: guiGridListSetItemText(gui["listWidget"], row, 1, weaponName, false, false ) Ligne 70: guiGridListSetItemText(gui["listWidget_2"], row, 1, gadgetName, false, false )
  6. Il y a aussi Rouche et Nic062 mais ont déjà leurs projets respectifs. Bah tu es actuellement dans la section française de ce forum. Il n'y a pas d'anglais ici. Sans vouloir te décourager, tu n'auras pas de bon scripteur en cherchant ici. (Attention, je ne dis pas que la majorité des personnes ici sont mauvaises, seulement que dès qu'un scripteur commence à devenir bon, il crée son propre projet) Bonne chance pour ton projet mais je te conseil en tant que project leader de développer les concepts que tu/vous voulez mettre en place. Récolteur de cannabis, c'est bien parce que tu peux ensuite vendre le cannabis, qui peut ensuite être consommer etc. Mais le sel ... C'est un peu un job parce qu'il faut des jobs sur ton serveur. Le sel ne pourra pas se vendre à des joueurs (seulement au serveur et faire style qu'on le vends à des usines) ou alors faudrait scripter un système de nourriture complexe pour se préparer des plats. Mais là ça deviens trop lourd pour un seul scripteur (car il y a tout le reste). Voilà mon opinion, c'est votre serveur après tout
  7. Si tu ne l'as pas trouvé, comment ce fait il qu'il soit dans ton script ??? (onClientGUIClick) Voilà ton code revu et corrigé. Reste à savoir s'il fonctionne, je n'ai pas testé: local gui = {} local screenWidth, screenHeight = guiGetScreenSize() -- a completer pour rajouter des armes dans le tableau local weapons = { "ak-47", "deagle", "chainsaw" } -- a completer pour rajouter des gadgets dans le tableau local gadgets = { "armor" } local function onOkClicked(button, state, absoluteX, absoluteY) if button ~= "left" and state ~= "up" then return end local rowWeaponSelected = guiGridListGetSelectedItem(gui["listWidget"]) local rowGadgetSelected = guiGridListGetSelectedItem(gui["listWidget_2"]) if rowWeaponSelected and rowGadgetSelected then local weaponSelected = guiGridListGetItemText(gui["listWidget"], rowWeaponSelected, 1) local gadgetSelected = guiGridListGetItemText(gui["listWidget_2"], rowGadgetSelected, 1) --debug: outputChatBox("You selected "..weaponSelected.." and "..gadgetSelected) else -- Il n'a pas choisit dans les deux tableaux end toggleWeaponWindow() end local function onCancelClicked(button, state, absoluteX, absoluteY) if button ~= "left" and state ~= "up" then return end toggleWeaponWindow() end function createShopWindow() local windowWidth, windowHeight = 400, 315 local left = screenWidth/2 - windowWidth/2 local top = screenHeight/2 - windowHeight/2 gui["window"] = guiCreateWindow(left, top, windowWidth, windowHeight, "CHOOSE", false) guiWindowSetSizable(gui["window"], false) gui["btn_ok"] = guiCreateButton(111, 257, 77, 28, "OK", false, gui["window"]) addEventHandler("onClientGUIClick", gui["btn_ok"], onOkClicked, false) gui["btn_cancel"] = guiCreateButton(194, 257, 77, 28, "Cancel", false, gui["window"]) addEventHandler("onClientGUIClick", gui["btn_cancel"], onCancelClicked, false) gui["listWidget"] = guiCreateGridList(0, 45, 161, 191, false, gui["window"]) guiGridListSetSortingEnabled(gui["listWidget"], false) guiGridListAddColumn(gui["listWidget"], "WEAPONS", 0.85) for k, weaponName in ipairs(weapons) do local row = guiGridListAddRow(gui["listWidget"]) guiGridListSetItemText(gui["listWidget"], row, gui["listWidget_col"], weaponName, false, false ) end gui["listWidget_2"] = guiCreateGridList(230, 45, 161, 191, false, gui["window"]) guiGridListSetSortingEnabled(gui["listWidget_2"], false) guiGridListAddColumn(gui["listWidget_2"], "GADGETS", 0.85) for k, gadgetName in ipairs (gadgets) do local row = guiGridListAddRow(gui["listWidget_2"]) guiGridListSetItemText(gui["listWidget_2"], row, gui["listWidget_2_col"], gadgetName, false, false ) end guiSetVisible(gui["window"], false) end addEventHandler("onClientResourceStart", resourceRoot, createShopWindow) function toggleShopWindow() local visibility = guiGetVisible(gui["window"]) guiSetVisible(gui["window"], not visibility) showCursor(not visibility) end addCommandHandler("gui", toggleShopWindow) A noter que la fenêtre est crée au moment ou le joueur à rejoins le serveur et qu'on le cache directement. Un /gui permet de le rendre visible s'il ne l'ai pas et inversement. On ne s'amuse donc pas à recréer l'intégralité du GUI à chaque fois. Je t'ai aussi "prémaché" la fonction qui est exécuté pour le OK. Pour rajouter des armes et gadgets, il te faut remplir les deux listes en haut du script. Si ça ne fonctionne pas, merci de me donner l(es) erreur(s) côté client (donc visibles via /debugscript 3 et non pas dans la console du serveur)
  8. On trouve tout sur le wiki, c'est un peu dur au départ pour apprendre à s'y repérer et trouver ce que l'ont cherche. Je te file le script (non testé) mais je t'invite à comprendre le script en t'aidant des commentaires mais surtout lit les pages wiki des fonctions: Seule une fonction indiqué par TheCapn pouvait t'aider. getPedWeapon getPedTotalAmmo setWeaponAmmo function ammoCmd( thePlayer, cmd ) giveAmmoInAllSlots( thePlayer, 50 ) end addCommandHandler( "ammo", ammoCmd ) function giveAmmoInAllSlots( player, ammo ) --seul les slots 2 à 9 ont des munitions ([url=https://wiki.multitheftauto.com/wiki/Weapon]https://wiki.multitheftauto.com/wiki/Weapon[/url]) for k=2, 9 do local weapon = getPedWeapon( player, k ) --ça retourne 0 s'il ny a pas d'arme sur le slot if weapon ~= 0 then -- S'il possède une arme sur le slot local ammoInSlot = getPedTotalAmmo( player, k ) -- on ajoute munitions en plus de ceux déjà présents: setWeaponAmmo( player, weapon, ammoInSlot + ammo ) end end end En général je ne donne pas le code directement car ça n'aide pas la personne à progresser dans la majorité des cas car elle se contente de copier coller bêtement sans chercher à comprendre. Note: la fonction giveAmmoInAllSlots d'au-dessus peut donc être réutilisé.
  9. ah cool on a enfin trouvé Donc juste pour bien retenir, pour les véhicules et les objets, c'est bien la 3ème rotation alors que pour les joueurs/bot c'est l'inverse de la 3ème rotation ^^ Bon codage !
  10. Ok donc c'est bien rz, essaye de donner l'inverse du rz: x, y = getPointFromDistanceRotation(x, y, 5, -rz) Si ça ne marche pas, je testerai chez moi en rentrant (ce soir).
  11. Ouai je m'emmêle les pinceaux depuis que getPedRotation est passé en deprecated. Modifie la ligne 13 et 14 pour avoir ça: local rx, ry, rz = getElementRotation( player ) --On doit donner la rotation du joueur outputChatBox("rx: "..rx..", ry: "..ry..", rz: "..rz) Et donne moi ce que ça affiche dans la chatbox. En fait les axes X, Y, Z ne sont pas les même entre les objets/vehicules que les joueurs/bots et donc je pense que ce n'était pas rz qu'il fallait donner à getPointFromDistanceRotation. Au pire test les 2 autres (rx et ry) et voit si l'un d'eux marche. Il se peux aussi que la rotation soit inversé d'après ce que je lis sur le wiki donc essaye aussi avec -rz, -ry et -rz. En tout cas y en a forcément une des 6 possibilités qui marche correctement (et une autre qui fonctionnera à l'envers).
  12. Ok tu peux l'enlever, et t'es sûr que le barril ne suit pas ta rotation (même s'il est pas en face de toi comme tu le souhaites) ? Car s'il apparaît toujours derrière toi, il suffit d'ajouter 180 degrés à rz en le passant à la fonction. Là concrètement il apparaît où par rapport à ton joueur ?
  13. Heuuu rajoute ça à la ligne 17 : outputChatBox("It works") et dit moi si "It works" s'affiche dans ta console lorsque tu tapes la commande.
  14. Ah ouai excuse moi, j'ai confondu avec ma fonction perso pour laquelle je n'ai pas besoin de donner la rotation (mais l'élément). Enfin peu importe, revoilà le code: --lien de la fonction [url=https://wiki.multitheftauto.com/wiki/Get]https://wiki.multitheftauto.com/wiki/Get[/url] ... ceRotation function getPointFromDistanceRotation(x, y, dist, angle) local a = math.rad(90 - angle); local dx = math.cos(a) * dist; local dy = math.sin(a) * dist; return x+dx, y+dy; end function spawnBarrel( player ) local x, y, z = getElementPosition( player ) -- On recupère la position du joueur local _, _, rz = getElementRotation( player ) --On doit donner la rotation du joueur -- On modifie la position pour que notre barril soit en face du joueur donc on l'a récupère x, y = getPointFromDistanceRotation(x, y, 5, rz) local barrel = createObject( 1225, x, y, z ) if barrel then -- Si le barril a correctement été créé, alors ... outputChatBox( "Vous avez créé un objet en face de vous !", player ) else -- Sinon ... outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) end end addCommandHandler( "barril", spawnBarrel )
  15. Add this: function updateNameNoHex( _, newName ) namenohex = string.gsub ( newName, '#%x%x%x%x%x%x', '' ) end addEventHandler("onClientPlayerChangeNick", localPlayer, updateNameNoHex) Your whole server is made by the community and it's a shame for a "coder". You are wasting more time on the forum/community asking for help/scripts and copying and pasting codes you don't even understand than learning and fixing/making your server by yourself. (For me, you are also wasting our time because we are here to help others with their scripts, reply to scripting questions etc and not to help someone to make his gamemode from A to Z or to teach that guy how to script).
  16. Il faut faire un calcul de trigonométrie en utilisant la position actuelle, la rotation pour donner la direction vers laquelle on va éloigné l'objet, ainsi que la distance qui doit séparer les 2 positions. Merci à la communauté qui fournit cette fonction: https://wiki.multitheftauto.com/wiki/Get ... ceRotation --lien de la fonction [url=https://wiki.multitheftauto.com/wiki/GetPointFromDistanceRotation]https://wiki.multitheftauto.com/wiki/Get ... ceRotation[/url] function getPointFromDistanceRotation(x, y, dist, angle) local a = math.rad(90 - angle); local dx = math.cos(a) * dist; local dy = math.sin(a) * dist; return x+dx, y+dy; end function spawnBarrel( player ) local x, y, z = getElementPosition( player ) -- On recupère la position du joueur -- On modifie la position pour que notre barril soit en face du joueur: x, y = getPointFromDistanceRotation(x, y, 5, 0) local barrel = createObject( 1225, x, y, z ) if barrel then -- Si le barril a correctement été créé, alors ... outputChatBox( "Vous avez créé un objet en face de vous !", player ) else -- Sinon ... outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) end end addCommandHandler( "barril", spawnBarrel ) Tape /barril et admire Pour bien comprendre son fonctionnement (en gros quoi), je te conseil de jouer un peu avec les valeurs en modifiant le 5 (=5m dans le jeu) et 0 (=droit devant).
  17. Is it a joke ?? Just replace line 492 with this: (the "quoteception" isn't a fail)
  18. I first fixed the line 85: Then you posted again with the exact same error but on line 492 ... You could fixed that line 492 if you understood what you copied on line 85. That's why I asked: So for the exact same problem appears the exact same fix:
  19. Yeah, just add your server script into the meta of your map and it will work when your map will be started on your race server or loaded into your map editor.
  20. guiSetText(statsLabel["name"],"Name: "..string.gsub(namenohex)), "#%x%x%x%x%x%x", "" ) You don't understand what you are copying, do you ? guiSetText(statsLabel["name"],"Name: "..namenohex ) namenohex is the name of the localPlayer without the hexa colors, so there is no need to use that string.gsub again.
  21. Can you show me this line 492 please ?
  22. Thanks, always good to know that even if I'll probably never use it
  23. Line 85: guiSetText(statsLabel["name"],"Meno: "..namenohex) Is it what you wanted ? EDIT: And please learn how to see errors on the client side: https://wiki.multitheftauto.com/wiki/Deb ... ug_console (/debugscript 3)
  24. Citizen

    Picker

    It's okay, happy coding
  25. It is, as you can see with this function... What's the stat name then ?
×
×
  • Create New...