Jump to content

IIYAMA

Moderators
  • Posts

    6,058
  • Joined

  • Last visited

  • Days Won

    208

Everything posted by IIYAMA

  1. I have added the missing file/directory path functions. For the rest of the missing functions events please check: issue
  2. This topic is not relevant any more. LOCKED
  3. There have been some updates for the new 1.6 functions, but it is still an ongoing process. Feel free to pull for newest version if you want to try out some of the new stuff with it's up to date syntax. Of course for the patches as well. Special thanks to: @srslyyyy @FernandoMTA Known syntax to-do's in the near future: fxCreateParticle (wiki link) Done! by FileEX EngineSet/GetPoolCapacity by TheNormalnij
  4. You can bind keys with the following command. You can also use the bind key tab interface for that (main menu). https://wiki.multitheftauto.com/wiki/Client_Commands#bind /bind m down <command> But I have no idea to which command your m key was bound to. Some more context is required.
  5. Just some context why your code is not working as intended. You are currently closing the file after running the first command. Do this on onClientResourceStop + resourceRoot. Don't forget to add newlines with \n. After every command run fileFlush, so that the file writes are actually written to the file.
  6. No, this will do the opposite. disableac = disable specific detections
  7. This is the function: https://wiki.multitheftauto.com/wiki/GetElementBoundingBox (box size only) The function was missing on the Clientside element section, but now it is added.
  8. For multiplayer you have to store data for each player. And one of the ways to do that is using tables. Here some basic functions you could use. Init the storage first: initPlayerData (onPlayerJoin) And after that you can set and get data from the table, for each player: getPlayerData, setPlayerData When a player disconnects: deletePlayerData (onPlayerQuit) ---@type {[userdata]: {[string]: unknown}|nil} local playerDataCollection = {} ---@param player userdata ---@param key string ---@return unknown|nil function getPlayerData(player, key) local playerData = playerDataCollection[player] if not playerData then return end return playerData[key] end ---@param player userdata ---@param key string ---@param value any function setPlayerData(player, key, value) local playerData = playerDataCollection[player] if not playerData then return end playerData[key] = value end --- Create a storage table for data of a specific player ---@param player userdata function initPlayerData(player) if playerDataCollection[player] then return end playerDataCollection[player] = {} end --- Remove all player data and remove it's storage table ---@param player userdata function deletePlayerData(player) if not playerDataCollection[player] then return end playerDataCollection[player] = nil end
  9. Your initial code looked fine except for a duplicated message when you are in the marker: Stage time: Stage finished! Time: Here you have an alternative version + debug lines so that you can validate what is wrong. View in debug console: /debugscript 3 Also keep in mind that this code will not work very good in multiplayer, as startTime, startMarker and finishMarker are shared between all players. You can ignore the ---@ annotations, those are helping me to automatic validate your code. (and perhaps help you to improve readability) ---------- -- Add to top of script (local's making sure other scripts can't modify these values by accident) ---@type integer local startTime = 0 ---@type userdata|nil local startMarker ---@type userdata|nil local finishMarker --------- -- ... -- --------- ---@param player userdata function checkStageProgress(player) iprint("Validate player", player, isElement(player) and getElementType(player)) if not isElement(startMarker) or not isElement(finishMarker) then iprint("Not startMarker:", isElement(startMarker) and "It exist" or "does not exist", "or not finishMarker:", isElement(finishMarker) and "It exist" or "does not exist") return end if not raceInProgress then iprint("Race is not in progress") local startX, startY, startZ = getElementPosition(startMarker) local playerX, playerY, playerZ = getElementPosition(player) local distanceToStart = getDistanceBetweenPoints2D(startX, startY, playerX, playerY) if distanceToStart <= 3 then raceInProgress = true startTime = getTickCount() -- Start counting time outputChatBox("Stage started!", player) end return end ------------------------- -- Race is in progress -- local elapsedTime = math.floor((getTickCount() - startTime) / 1000) if isElementWithinMarker(player, finishMarker) then outputChatBox("Stage finished! Time: " .. elapsedTime .. " seconds.", player) raceInProgress = false return end ----------------------------- -- Player is not in marker -- outputChatBox("Stage time: " .. elapsedTime .. " seconds.", player) end
  10. Visual Studio Code (for everything). While I must say that I definitely love Sublime it's responsiveness, but it was (for me) not enough to change editors.
  11. IIYAMA

    Help

    Double check if the serverside file is running and init as serverside. Do not enable remote for native events. This is a security risk. Use the predefined client variable for remote triggers, else cheaters can kill a whole server instantly. iprint(triggerClientEvent and "serverside" or "clientside") -- inspect if the file is running serverside addEvent("onPlayerDamage", false) -- disable remote function handlePlayerDamage(attacker, weapon, bodypart, loss) if client ~= source then return end local victim = client triggerEvent("onPlayerDamage", victim, attacker, weapon, bodypart, loss) -- emulate the (client) cancelled onPlayerDamage event if getElementHealth(victim) > 0 then setElementHealth(victim, getElementHealth(victim) - loss) if getElementHealth(victim) <= 0 then setElementData(victim, "isDead", true) killPed(victim) end end end addEvent("onCustomPlayerDamage", true) addEventHandler("onCustomPlayerDamage", root, handlePlayerDamage) function isPlayerDead(player) return getElementData(player, "isDead") or false end function onClientPlayerDamage(attacker, weapon, bodypart, loss) if attacker and getElementType(attacker) == "player" then triggerServerEvent("onCustomPlayerDamage", localPlayer, attacker, weapon, bodypart, loss) cancelEvent() end end addEventHandler("onClientPlayerDamage", root, onClientPlayerDamage)
  12. IIYAMA

    Help

    Technically it is possible, but it will only work as intended when the latency is very low (< 60 ping) and stable internet (no packet loss). How it technically works is that the server is used as mediator for all the damage. When a player it's health is 0, all future damage done by this player is ignored. But keep in mind that this will look very weird when the latency is too high. (unplayable) Some basics: Clientside onClientPlayerDamage cancelEvent triggerServerEvent Serverside addEvent addEventHandler getElementHealth setElementHealth killPed
  13. If the parameter matchingDimension contains the value true, the marker is hit in the same dimension. Instead of setting a timer. Which currently is being created infinity > crashing the server at a given point. Do the following: When giving a jetpack, check if the player is inside of the marker. Based on that, give the Jetpack yes / no. -- Making the marker find able inside of another resource local antiJetpack = createElement ( "antiJetpackType", "antiJetpackID" ) local marker = createMarker ( 0, 0, 0, "cylinder", 1.5, 255, 255, 0, 170 ) setElementParent(marker, antiJetpack) (Other resource) local parent = getElementByID ("antiJetpackID") if not parent then return end local marker = getElementChildren ( parent )[1] local status = isElementWithinMarker ( thePlayer, marker ) https://wiki.multitheftauto.com/wiki/IsElementWithinMarker
  14. Can't you just copy your Program Files (x86)\MTA San Andreas 1.6\server to the server? (maybe I am missing something, but a windows server should be able to start up windows stuff)
  15. Then the code looks fine. Unless the numbers are a mixture of numbers and strings. 123 vs "123" In theory it shouldn't be possible because this function is ran single threaded. There will always be one that is first. The whole function chain-call should have been ended before a new call can be made. The following should be finished before the root function can be called again.
  16. What is inside of data[1] and data[2]? (to be more specific, what type is inside: table, string, number etc.) And what are you clicking on?
  17. For those that have already downloaded the definition files. In the last week, there have been some missing/incorrect types being discovered and fixed. See here the list of changes. Thanks to @srslyyyy for helping me with that!
  18. It can be an issue if you used the config of an older build. You checked the logs as well? (sometimes not all errors are visible in the console) And what kind of server are you running? Windows or linux? If it is Windows, you should be able to copy over your local server and try that one. If Linux, you might consider starting it up with sudo, so that it does not run in to any permission issues while creating/moving the initial files.
  19. Is this server installed with MTA or did you download the stable version separately? Things to check/do: Check your virus scan, maybe some server files have been quarantined. Reset the config, maybe it is missing something: https://github.com/multitheftauto/mtasa-blue/blob/master/Server/mods/deathmatch/mtaserver.conf.template You might consider, just reinstall MTA competently.
  20. A hard function skip maybe, just to figure out if it is actually the models. addDebugHook( "preFunction", function ( ) return "skip" end, {"engineLoadCOL", "engineReplaceCOL", "engineLoadTXD", "engineImportTXD", "engineLoadDFF", "engineReplaceModel"}) (if possible run the hook on a resource with higher download priority) If that is the issue, then rewrite the resources so that the models are loaded slower. For example load a model every X frame(s).
  21. You could start with disabling all models, number 1 in causing cashes.
  22. Is the web panel accessible? (and other resources)
  23. Not sure but, would the > operator not make more sense? if health > loss then --- ... else setElementExtraHealth(source, 0) -- clean dead status (not sure if this is a good idea) end
×
×
  • Create New...