Protagonist95 Posted December 10, 2016 Share Posted December 10, 2016 Heres code to spawn objects and add indidivual ElementData by theyr model Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } function spawnLoot() for i,k in ipairs(objects) do obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) function setObjectParameters() local objects = getElementsByType ( "object" ) for i,loot in ipairs(objects) do if getElementData(loot,"loot") == true then for index,key in ipairs(Parameters) do if getElementModel(loot) == key[1] then setElementData(loot,key[2],key[3]) outputChatBox("ID added") end end end end end addEventHandler ( "onResourceStart", getRootElement(), setObjectParameters) The problem is that it sets data only if second and third parameters are equil in Parameters table.I can't figure out why... Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 function spawnLoot() for i,k in ipairs(objects) do objects -- where is variable? Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 58 minutes ago, MR.S3D said: function spawnLoot() for i,k in ipairs(objects) do objects -- where is variable? objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 (edited) 14 minutes ago, Protagonist95 said: objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3}} try with this Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } function spawnLoot() for i,k in ipairs(objects) do local obj local col obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end end local objects = getElementsByType ( "object",resourceRoot ) for i,loot in ipairs(objects) do if getElementData(loot,"loot") == true then for index,key in ipairs(Parameters) do if getElementModel(loot) == key[1] then setElementData(loot,key[2],key[3]) outputChatBox("ID added") break end end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) Edited December 10, 2016 by MR.S3D Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 (edited) 4 minutes ago, MR.S3D said: try with this Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } function spawnLoot() for i,k in ipairs(objects) do obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end end local objects = getElementsByType ( "object",resourceRoot ) for i,loot in ipairs(objects) do if getElementData(loot,"loot") == true then for index,key in ipairs(Parameters) do if getElementModel(loot) == key[1] then setElementData(loot,key[2],key[3]) outputChatBox("ID added") break end end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) No working,btw I tried to inset the "setObjectParameters" into "spawnloot" Edited December 10, 2016 by Protagonist95 Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 6 minutes ago, MR.S3D said: Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) Not working.Heres whole script if it somehow helps you objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } Parameters = { {1337,"data","data"}, {1338,"data1","data1"}, {1339,"data2",100} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) function onColEnter ( thePlayer ) local item = getElementsWithinColShape (source, "object") if isElementWithinColShape (thePlayer,source) and getElementData(source,"col") ~= false then setElementData(thePlayer,"inLoot",true) for i,k in ipairs(item) do for index,key in ipairs(Parameters) do if getElementData(k,key[3]) ~= false then outputChatBox(tostring(getElementData(k,key[3]))) end end end end end addEventHandler ("onColShapeHit",getResourceRootElement(), onColEnter) function onColLeave ( thePlayer ) if getElementsWithinColShape ( source, "player" ) then setElementData(thePlayer,"inLoot",false) end end addEventHandler ("onColShapeLeave", getRootElement(), onColLeave) Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) function onColEnter ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then local item = getElementsWithinColShape (source, "object") if isElementWithinColShape (thePlayer,source) and getElementData(source,"col") == true then setElementData(thePlayer,"inLoot",true) outputChatBox('Enter ColShape') for i,k in ipairs(item) do local data for index,key in ipairs(Parameters) do data = getElementData(k,tostring(key[3])) if data ~= false then outputChatBox(tostring( data )) end end end end end end addEventHandler ("onColShapeHit",resourceRoot, onColEnter) function onColLeave ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then if getElementsWithinColShape ( source, "player" ) then setElementData(thePlayer,"inLoot",false) outputChatBox('Leave ColShape') end end end addEventHandler ("onColShapeLeave", resourceRoot, onColLeave) Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 2 minutes ago, MR.S3D said: Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",100} -- doesn't work,duno why } objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) function onColEnter ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then local item = getElementsWithinColShape (source, "object") if isElementWithinColShape (thePlayer,source) and getElementData(source,"col") == true then setElementData(thePlayer,"inLoot",true) outputChatBox('Enter ColShape') for i,k in ipairs(item) do local data for index,key in ipairs(Parameters) do data = getElementData(k,tostring(key[3])) if data ~= false then outputChatBox(tostring( data )) end end end end end end addEventHandler ("onColShapeHit",resourceRoot, onColEnter) function onColLeave ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then if getElementsWithinColShape ( source, "player" ) then setElementData(thePlayer,"inLoot",false) outputChatBox('Leave ColShape') end end end addEventHandler ("onColShapeLeave", resourceRoot, onColLeave) Not working Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 Just now, Protagonist95 said: Not working its work with me. whats the problem? Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 1 minute ago, MR.S3D said: its work with me. whats the problem? wtf?Debugscript is silent,idk what may cause the problem. Link to comment
iPrestege Posted December 10, 2016 Share Posted December 10, 2016 Try to put a string in the 100 part so it should looks like '100' . Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 2 minutes ago, iPrestege said: Try to put a string in the 100 part so it should looks like '100' . I see your point,but thing is not in the numbers or strings.Lets assume that i would deal with large table which includes {1337,"something",true} or something like that.That wont solve the problem. Link to comment
MR.S3D Posted December 10, 2016 Share Posted December 10, 2016 Parameters = { {1337,"data","data"}, -- works {1338,"data1","data1"}, -- works {1339,"data2",'100'} -- doesn't work,duno why } objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } function spawnLoot() for i,k in ipairs(objects) do local obj local col local id = k[1] obj = createObject(k[1],k[2],k[3],k[4]) col = createColCuboid(k[2],k[3],k[4],1.6,1.6,1.6) if(obj) then -- if it exists then setElementData(col,"col",true) setElementData(obj,"loot",true) attachElements(col,obj,-0.7,-0.7,-0.5) setElementCollisionsEnabled(obj,false) end for index,key in ipairs(Parameters) do if id == key[1] then setElementData(obj,key[2],key[3]) outputChatBox("ID added") break end end end end addEventHandler ( "onResourceStart", getResourceRootElement(), spawnLoot) function onColEnter ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then local item = getElementsWithinColShape (source, "object") if isElementWithinColShape (thePlayer,source) and getElementData(source,"col") == true then setElementData(thePlayer,"inLoot",true) outputChatBox('Enter ColShape') for i,k in ipairs(item) do local data for index,key in ipairs(Parameters) do data = getElementData(k,tostring(key[3])) if data then outputChatBox(tostring( data )) break end end end end end end addEventHandler ("onColShapeHit",resourceRoot, onColEnter) function onColLeave ( thePlayer ) if (isElement(thePlayer) and getElementType(thePlayer) == "player") then if getElementsWithinColShape ( source, "player" ) then setElementData(thePlayer,"inLoot",false) outputChatBox('Leave ColShape') end end end addEventHandler ("onColShapeLeave", resourceRoot, onColLeave) Link to comment
iPrestege Posted December 10, 2016 Share Posted December 10, 2016 I think you are saying that the both of two tables value is working fine and others aren't so would you mind explain more? what is the problem? Link to comment
LoPollo Posted December 10, 2016 Share Posted December 10, 2016 (edited) local objects = { {1337,23.15625,-5.677734375,3}, {1338,19.15625,-5.677734375,3}, {1339,15.15625,-5.677734375,3} } local parameters = { [1337] = {"data","data"}, [1338] = {"data1","data1"}, [1339] = {"data2",100} } function spawnLoot() for k,v in pairs(objects) do --this can also be reworked local id = v[1] v.obj = createObject(v[1],v[2],v[3],v[4]) v.col = createColCuboid(v[2],v[3],v[4],1.6,1.6,1.6) if v.obj then attachElements( v.col, v.obj, -0.7, -0.7, -0.5 ) setElementCollisionsEnabled( v.obj,false ) end setElementData( v.obj, tostring(parameters[id][1]), parameters[id][2] ) addEventHandler( "onColShapeHit", v.col, onColEnter ) addEventHandler( "onColShapeLeave", v.col, onColEnter ) end end addEventHandler ( "onResourceStart", resourceRoot, spawnLoot) function onColEnter( thePlayer, matchingDimension ) if matchingDimension then setElementData( thePlayer, "inLoot", true ) -- i don't get why not a single key outputChatBox("Data["..parameters[getElementModel( getElementAttachedTo( source ) )][1].."]: "..tostring(getElementData(getElementAttachedTo( source ), parameters[getElementModel( getElementAttachedTo( source ) )][1] ))) end end function onColLeave( thePlayer, matchingDimension ) if matchingDimension then setElementData( thePlayer, "inLoot", false ) end end I rewrote the whole parameter part, using tables. Knowing the index, also the object table and logic can be improved. I would like to know if one key wouldn't be easier... I also suggest to read the wiki about events bound to objects, since you are binding ALL to root. This is untested but it should work. NOTE: DO NOT SIMPLY COPY PASTE AND SAY BYE BYE: LEARN FROM EACH SCRIPT!!! have fun scripting Edited December 10, 2016 by LoPollo Link to comment
Protagonist95 Posted December 10, 2016 Author Share Posted December 10, 2016 Thank you for the love of god!!! I'm gona figure out how it works and what was the problem after I get some sleep And yes,I was planning to read about Event system,because I'm new in LUA scripting 1 Link to comment
LoPollo Posted December 10, 2016 Share Posted December 10, 2016 Events are really nice: they are so much helpful in most situation. Better performance, easier to script and understand. Also tables are a powerful tool. Also remember that using local with a variable gives a performance boost in lua. Try to use it every time it is possible. Also functions can be local... but i'm not used to write it in the scripts so i omit this, damn. Nobody is perfect Still have fun with scripting, good luck and if you have any doubt the wiki and internet are your best friend, followed by us that will help you at any specific question or problem PS: Reading too much is annoying (at least for me). It is much funnier trying already done script, and reading their codes trying to figure out how they work 1 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