SEV3NS Posted December 8, 2014 Share Posted December 8, 2014 im trying to make a simple script to make a gate drop down then me or players in my group want to enter but i cant figure it out. can someone help? Link to comment
myonlake Posted December 8, 2014 Share Posted December 8, 2014 Hey, Welcome to Multi Theft Auto, I hope you enjoy your stay here. In order to learn to script in Lua scripting language, I suggest you take some time to find the following topic useful for yourself. It contains links to tutorials and information regarding the use of the language in practice. This is essential in order to learn the basics of Lua and then work on your Multi Theft Auto related scripts. » Lua tutorials, manuals After you have familiarized yourself with Lua and know how to deploy basic code with it, you may move on to Multi Theft Auto specific scripting. Up-to-date Multi Theft Auto scripting information, details and help can be found on the Multi Theft Auto Wiki site. Get yourself familiarized with the scripting features Multi Theft Auto offers you by reading articles of which links you can find on the right side of the Wiki front page under the Scripting heading: » Server Manual » Introduction to scripting » Introduction to scripting the GUI » Debugging Tutorial » Introduction to resources» meta.xml » ACL You might also find the Tutorials board useful. These are tutorials, manuals and help topics written by community members. If Wiki seems a little bit too hardcore for you at the moment, checking this board should get you started easily. Feel free to also use our available chatting channels to ask questions and get help in general. These can be found at the IRC Channel Wiki article. Make sure to search for an answer on your preferred search engine first, and through the forum search feature. This way you can find solutions faster and will keep our channels clean of already answered questions! If you have code which you can post on your topic, that would make it easier for helpers to get a solution for you faster. Keep in mind that we are a public forum and we can only fix your code if you are willing to post it on your topic. This way we give you help and eventually a solution, and if someone else is facing the same issue later they can find a solution to the problem from your topic. I hope this got you started up! Link to comment
SEV3NS Posted December 8, 2014 Author Share Posted December 8, 2014 post your code heres the code i got so far. it doesnt seem to work though. i just want the door to simply drop down then rise back up. if(strcmp(cmdtext,"/opengate", true) == 0) { if (gTeam[sEV3NRS] == player) { if(PlayerToPoint(15.0, SEV3NRS, 2361, -1272, 24.60000038147)) { MoveObject(object gate1, 2361, -1272, 21, 1.500000); return 1; } } } if(strcmp(cmdtext,"/closegate", true) == 0) { if (gTeam[sEV3NRS] == player) { if(PlayerToPoint(15.0, SEV3NRS,2361, -1272, 24.60000038147)) { MoveObject(object gate1, 2361, -1272, 21, 1.500000); return 1; } } } gate1 = CreateObject(3084, 2361, -1272, 24.60000038147, 0.0000, 0.0000, 0.0000);//closed Link to comment
ViRuZGamiing Posted December 8, 2014 Share Posted December 8, 2014 You're using stuff from other languages here such as "//" that's "--" in LUA, There's no need for Semi-colomns ";" and is this your full code? because you're missing the function start and end's also the curly brackets aren't in LUA "{" "}", Example of a code C# compaired with LUA. // C# Example public class Hello1 { public static void Main() { System.Console.WriteLine("Hello, World!"); } } -- LUA Example function Hello1 () outputChatBox("Hello, World!") end addEventHandler("onPlayerLogin", getRootElement(), Hello1) + ALSO NOTE: MoveObject PlayerToPoint Stuff like this always start with a lowercase. moveObject, etc. Take a look on the wiki for all the functions and events. Server Functions: https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions Server Events: https://wiki.multitheftauto.com/wiki/Server_Scripting_Events Client Functions: https://wiki.multitheftauto.com/wiki/Client_Scripting_Functions Client Events: https://wiki.multitheftauto.com/wiki/Client_Scripting_Events BTW learn yourself don't use codes you don't understand and look if it's the right game, SAMP and MTA are different. http://forum.sa-mp.com/showthread.php?t=43930 I hope this helped, Regards Viruz Link to comment
Dealman Posted December 8, 2014 Share Posted December 8, 2014 That's MTA's API, not really Lua per se. So, really, Hello World would simply look like this; function helloWorld() print("Hello World"); end The semi-colon aren't necessarily needed, no. But it's still good practice to use it since they indicate the end of a statement. They're still very useful should you need to execute several statements on a single line, or simply for more effiecent code(though, probably won't have a noticeable impact). It's especially good if you plan to code in more than one language @SEV3NS: If you search you should find a lot of threads about how to make a script for moving gates. I'm pretty sure there's quite a few resources up on the community as well. Link to comment
myonlake Posted December 8, 2014 Share Posted December 8, 2014 Semi-colon does not mark the end of anything actually. It is there for people who like it because of personal preference. A line ends when it ends. Link to comment
SEV3NS Posted December 9, 2014 Author Share Posted December 9, 2014 thanks for the help guys. so far im still working on the script. but i also have another question. is there a particular file location i should be placing these files at? i just have it in the same file folder as the map right now. and added the meta for it in the maps meta. also that is the full code. how would i go about typing in the function? function open gate( ) print (sript?) end? Link to comment
SEV3NS Posted December 9, 2014 Author Share Posted December 9, 2014 function opengate() if(strcmp(cmdtext,"/opengate", true) == 0) { if (gTeam[sEV3NRS] == player) { if(playerToPoint(15.0, SEV3NRS, 2361, -1272, 24.60000038147)) { moveObject(object gate1, 2361, -1272, 21, 1.500000); return 1; } } } if(strcmp(cmdtext,"/closegate", true) == 0) { if (gTeam[sEV3NRS] == player) { if(playerToPoint(15.0, SEV3NRS,2361, -1272, 24.60000038147)) { moveObject(object gate1, 2361, -1272, 21, 1.500000); return 1; } } } gate1 = createObject(3084, 2361, -1272, 24.60000038147, 0.0000, 0.0000, 0.0000); end Link to comment
ChaosMTA Posted December 9, 2014 Share Posted December 9, 2014 I made this awhile ago just as a template for people to learn and play around with; local objectID = 980 --Place the object ID here local originalX,originalY,originalZ = 282.39999389648,-1319.9000244141,55.639999389648 --Place the coords of the gate here local rotationX,rotationY,rotationZ = 0,358.70007324219,34.5 --Place the rotations of the gate here local moveX,moveY,moveZ = 282.39999389648,-1319.9000244141,50 --Place the coords to move the gate to here local moveRotX,moveRotY,moveRotZ = 0,0,0 --Place the rotations for the gate here (if you do not want it to rotate, put: 0,0,0) local timeToMoveGate = 2000 --Put the time it takes to open/close the gate here (in milliseconds) local timeToStayOpen = 4000 --Put the time that the gate stays open until it closes (in milliseconds) local command = "gate" --Put the command name you want to use here local distanceFromGate = 25 --Put the minimal distance from the gate to open it here --####################################################### --#### DO NOT EDIT ANYTHING BELOW HERE #### --####################################################### local gateState = false --Leave this at false, you don't need to edit this thisGate = createObject(objectID,originalX,originalY,originalZ,rotationX,rotationY,rotationZ) --Creates the object and names it 'thisGate' exports.pool:allocateElement(thisGate) --Let's just leave this here, okay? local function resetGateState() --Function to reset the state of the gate gateState = false --Sets the gate state to closed end local function closeThisGate() --Function to close the gate moveObject(thisGate,timeToMoveGate,originalX,originalY,originalZ,0 - moveRotX,0 - moveRotY,0 - moveRotZ) --Moves the gate back to the original position setTimer(resetGateState,timeToStayOpen,timeToMoveGate) --Resets the state of the gate after the gate has moved back to it's original position end local function useGate(thePlayer, commandName) --Function that triggers the gate local posX,posY,posZ = getElementPosition(thePlayer) --Gets the position of the gate local distance = getDistanceBetweenPoints3D(originalX,originalY,originalZ,posX,posY,posZ) --Gets the distance between the player and the original position of the gate if(distance <= distanceFromGate and gateState == false then --Checks if the player is near enough and if the gate is not open/opening/closing gateState = false --Sets the gate to open/opening/closing moveObject(thisGate,timeToMoveGate,moveX,moveY,moveZ,moveRotX,moveRotY,moveRotZ) --Moves the object to the location that is wanted setTimer(closeThisGate,timeToMoveGate + timeToStayOpen,1) --Sets the times to close the gate again end end addCommandHandler(command, useGate) Hope it helps you learn a bit. Link to comment
myonlake Posted December 9, 2014 Share Posted December 9, 2014 thanks for the help guys. so far im still working on the script. but i also have another question. is there a particular file location i should be placing these files at? i just have it in the same file folder as the map right now. and added the meta for it in the maps meta. also that is the full code. how would i go about typing in the function? function open gate( ) print (sript?) end? Please read my first reply to this topic. That will get you started. Link to comment
SEV3NS Posted December 11, 2014 Author Share Posted December 11, 2014 ok, so i did some digging and i managed to come up with this script. i tried the scripts above and the didnt seem to work. only one problem with this scrip, the gate doesnt want to go back up. function createTheGate () myGate1 = createObject ( 3084,2361,-1272,24.60000038147, 0, 0, 90 ) end addEventHandler ( "onResourceStart", getResourceRootElement ( getThisResource () ), createTheGate ) function openMyGate ( ) moveObject ( myGate1, 2361, -1272, 21,6.0999999046326) end addCommandHandler("gd1",openMyGate) function movingMyGateBack () moveObject ( myGate1, 2361,-1272,24.60000038147,12.60000038147) end addCommandHandler("gu1",movingMyGateBack) Link to comment
Dealman Posted December 11, 2014 Share Posted December 11, 2014 I believe you misunderstood the arguments of moveObject, as where you should have entered the time it would take the object to move from Point A to Point B - you had entered your X co-ordinate instead. Do you need something like this? local isGate1Opened = false function createGates_Handler() myGate1 = createObject(3084, 2361, -1272, 24.60000038147, 0, 0, 90) end addEventHandler("onResourceStart", resourceRoot, createGates_Handler) function openGates_Handler() if(isGate1Opened == false) then moveObject(myGate1, 3000, 2361, -1272, 21) isGate1Opened = true else moveObject(myGate1, 3000, 2361, -1272, 24.60000038147) isGate1Opened = false end end addCommandHandler("gate1", openGates_Handler) If you're going to add a lot of gates, you'll want to use tables. Link to comment
SEV3NS Posted December 11, 2014 Author Share Posted December 11, 2014 So "gate1" is the command right? Link to comment
Anubhav Posted December 11, 2014 Share Posted December 11, 2014 So "gate1" is the command right? yes Link to comment
SEV3NS Posted December 11, 2014 Author Share Posted December 11, 2014 thank you soo much man i just tested it and it works perfectly! also i noticed that the script has handler() if i put a number in the parentheses will i be able to add more gates to this script that way? Link to comment
Dealman Posted December 11, 2014 Share Posted December 11, 2014 You could do something like this with tables, I just wrote this a bit fast so you'll probably have to adjust it a bit to fit your needs. Of course it would be easier to create a new function and command for every gate, and allow for more precise control of each gate. This is but an example of how you could do it using tables. --{"Command", ModelID, Closed PosX, Closed PosY, Closed PosZ, Closed RotX, Closed RotY, Closed RotZ, Open PosX, Open PosY, Open PosZ, Open RotX, Open RotY, Open RotZ, MoveTime, theState} local gateTable = { -- Just add your gates here using the syntax above. Put a , after each array except for the last one. {"Gate1", 3084, 2361, -1272, 24.6, 0, 0, 90, 2361, -1272, 21, 0, 0, 90, 3000, false} }; function createGates_Handler() for k, v in ipairs(gateTable) do local a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 = unpack(v); local theGate = createObject(a2, a3, a4, a5, a6, a7, a8); addCommandHandler(a1, function() local a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 = unpack(v); if(a16 == false) then moveObject(theGate, a15, a9, a10, a11, a12, a13, 0) table.remove(v, 16) table.insert(v, 16, true) outputChatBox("Opened Gate!") else moveObject(theGate, a15, a3, a4, a5, a6, a7, 0) table.remove(v, 16) table.insert(v, 16, false) outputChatBox("Closed Gate!") end end); end end addEventHandler("onClientResourceStart", resourceRoot, createGates_Handler) Link to comment
SEV3NS Posted December 12, 2014 Author Share Posted December 12, 2014 so if i wanted to add a second gate to this table i would need to put "gate2" on the table? would i need to put b1 b2 etc? or a17 a18 for the function to control the second gate? Link to comment
Dealman Posted December 12, 2014 Share Posted December 12, 2014 You only need to insert a new table, the rest should be automatic. The command can be whatever you'd like. For example; local gateTable = { {"Gate1", 3084, 2361, -1272, 24.6, 0, 0, 90, 2361, -1272, 21, 0, 0, 90, 3000, false}, {"Gate2" ...}, ["Gatorade", ...} }; Link to comment
SEV3NS Posted December 12, 2014 Author Share Posted December 12, 2014 ok so i tested it and it turns out the gates never spawned so i just reverted back to the script you gave me earlier. it works grate! i just have to have the scripts seperate thats all. thank you soo much for the help none the less! Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now