-
Posts
174 -
Joined
-
Last visited
-
Days Won
4
Everything posted by Hale
-
Both onPlayerLogin and onResourceStart return different parameters, not the player. Use 'source' instead of 'thePlayer', and be sure to check if source is a player element (getElementType). function chat( ) if getElementType(source) ~= "player" then return end accountname = getAccountName(getPlayerAccount(source)) if isObjectInACLGroup("user." .. accountname, aclGetGroup("Moderator")) then outputChatBox("Press 'm' To Open Your Moderator Panel", source, 0, 255, 0, false) else end end addEventHandler("onPlayerLogin",getRootElement(),chat) addEventHandler("onResourceStart",resourceRoot,chat)
-
Try declaring the variables (in which timers will be stored) outside the functions first, like this: local beltAlarm, seatBeltOn, seatBeltOff function beltWarning() stopSound (beltAlarm) beltAlarm = playSound ("alarm.mp3", false) end addEvent ("beltWarning", true) addEventHandler ("beltWarning", getRootElement(), beltWarning) function belt() seatBeltOn = playSound ("belt.wav", false) end addEvent ("belt", true) addEventHandler ("belt", getRootElement(), belt) function unbelt() seatBeltOff = playSound ("unbelt.wav", false) end addEvent ("unbelt", true) addEventHandler ("unbelt", getRootElement(), unbelt)
-
I suggest you first read the online Lua book, which will make you understand some basics and the main logic of programming in Lua. Afterward, move on to MTA wiki and read the tutorials that are listed on the main page.
-
Initialize a connection inside "MySQL" resource, and then make exported functions that once called upon, will use the initialized connection. For example: mySQL = dbConnect( "mysql", "dbname=mta;host=localhost", "myserver", "12345") function query(str) if mySQL then local query = dbQuery(mySQL, str) if not ( query ) then return false end local result, num_rows, id = dbPoll(query, -1) return result or false, num_rows or false, id or false end return false end And then in meta.xml simply include: <export function="query" type="server"/>
-
That... sucks. I suppose I should start using element data?
-
Here's a good example of how to check vehicle's speed, which is useful unless you want players to die from a vehicle hitting them at 1 km/h. addEventHandler( "onPlayerDamage", root, function (attacker, weapon, bodypart, loss) if isElement(attacker) and getElementType(attacker) == "vehicle" then local speedx, speedy, speedz = getElementVelocity (attacker) local actualspeed = (speedx^2 + speedy^2 + speedz^2)^(0.5) local kmh = actualspeed * 180 if kmh > 50 then setElementHealth(source, 0) end end end )
-
Hello, I've been working on a bigger project for a while, and up until now, I haven't realized I have a major issue regarding my data tables (Lua yes, as I'm trying to achieve best overall performance for the server). To briefly explain, instead of having dozen SQL queries for every data change a player makes, I simply store the data into a table and save it periodically or on resource stop. This was all server side, the main tables and exported functions (updateAccountData, getAccountData, pretty much the same as elementData but better for performance). As I was scripting I came to a realization that all that data in the table was reachable in server side, not client side, which is big of a problem, however, I thought if I move the table and exported functions to a shared .lua (declared in meta.xml as "shared" instead of "server" or "client") it would work just fine, but turns out the table is filled server side if the exported function is called from a server side .lua, and same for client, meaning they don't mix but rather have their own sides. My question is, is there a way to get data from a server side table to client side script/variable? What can or should I do if not, considering I have hundreds of calls to those exported functions from many different files. If you haven't understood what I did regarding the table and exported functions, here are some explanations: accounts = {} -- table containing player data function insertAccountData(element, data) accounts[element] = data end function getAccountData(element, dataName) if dataName then return accounts[element][dataName] or false end return accounts[element] end function updateAccountData(element, dataName, newData) if type(dataName) == "table" then for k,v in ipairs(dataName) do accounts[element][v] = newData[k] or false end else accounts[element][dataName] = newData or false end end function removeAccountData(element) accounts[element] = nil end In expectations of any possible help, thank you!
-
There are examples in the links provided. Maybe isCursorOnElement can be of help as well.
-
Can you tell us what are you trying to do?
-
Happens sometimes, try restarting your browser or wait a couple of minutes. EDIT: Just noticed the date of his post...
-
Use getCursorPosition and processLineOfSight
-
dxDrawRectangle(screenW * 0.7549, screenH * 0.6933 - 1 - (33*k), 1440 * 0.2347, 990 * 0.0211, tocolor(0, 0, 0, 145), false) dxDrawText(v.text, screenW * 0.7535, screenH * 0.6933 - 1 - (66*k), 1440 * 0.9896, 990 * 0.7144, tocolor(255, 255, 255, 255), 1.00, "default", "center", "center", false, false, false, true, false) Try this.
-
I had the same problem, tried to find a way but there is none I discovered, it just counts it as one argument.
-
This guy has the right idea, best way for good performance.
-
You sure? Can you show us how did you put it server side in XML?
-
How is that possible nowadays, didn't MTA create its own anti cheat/trainer system?
-
The reason givePlayerMoney isn't working client side is because you're passing it an extra argument, which is thePlayer. givePlayerMoney in client side has only one argument, which is the amount of money to give. Also, I believe there is no way for an element that is showing to everyone to be destroyed for one player only, hence you should use setElementVisibleTo and a table with stored players that already entered the marker so they don't get the money again.
-
That means you cannot use those exports (if I'm not wrong), so you should replace this: exports.dpAssets:createFont with dxCreateFont.
-
Is that exact font existing, and is it declared in meta.xml? EDIT: I'm not sure if you can export fonts like the way you did. Is this working in other scripts?
-
Try debugging your function by adding: outputDebugString(priceText) after this: if Carshop.currentVehicleInfo.price > 0 then priceText = "$" .. tostring(Carshop.currentVehicleInfo.price) else priceText = exports.dpLang:getString("price_free") end One of those two declarements isn't working properly.