roaddog Posted March 4, 2015 Share Posted March 4, 2015 So guys, Im stuck at this. I want to divide a random number by 5. value = math.random(100, 500) how to do so? each divider also has random number, and when we sum them up result is the value. for example value is 500, we divide it by 5 get random number 100, 210, 140, 50. I want to operate this but I dont know how to do to get these 5 random values. Thanks. Link to comment
Moderators IIYAMA Posted March 4, 2015 Moderators Share Posted March 4, 2015 good question. But try something like this: -- setup -- local value = 500 local splitUpInParts = 5 ----------- local valuePeaks = (100/splitUpInParts)/100 local results = {} local valueInParts = math.floor((value/splitUpInParts)+0.5) local valueTotal = 0 for i=1,splitUpInParts-1 do local peak if math.random(2) == 1 then peak = math.random(math.floor((valueInParts*valuePeaks)+0.5)) else peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5)) end local result = valueInParts+ peak results[#results+1] = result valueTotal = valueTotal+result end results[#results+1] = value - valueTotal -- rest value for i=1,5 do outputChatBox(results[i]) end This are the results from the demo 9284 96 116 112 The results do not have extreme ups and downs, but at least they will not be lower then zero. Link to comment
roaddog Posted March 5, 2015 Author Share Posted March 5, 2015 results = {} function divideThisValue(value) local value = value local splitUpInParts = 5 ------ local valuePeaks = (100/splitUpInParts)/100 local results = {} local valueInParts = math.floor((value/splitUpInParts)+0.5) local valueTotal = 0 for i=1,splitUpInParts-1 do local peak if math.random(2) == 1 then peak = math.random(math.floor((valueInParts*valuePeaks)+0.5)) else peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5)) end local result = valueInParts+ peak results[#results+1] = result valueTotal = valueTotal+result end results[#results+1] = value - valueTotal end addEvent("onEstimatingOver", true) addEventHandler("onEstimatingOver", root, function() onFactoryWindowClose() if estimating then estimating = false end valueof = getElementData(getLocalPlayer(), "Rocks:iron") or 0 if guiGetVisible(GUIEditors.window[1]) then divideThisValue(valueof) copper = results[1] bronze = results[2] silver = results[3] iron = results[4] gold = results[5] guiSetText(GUIEditors.copper, tostring(copper).." grams\n"..tonumber(copper*25).."$") guiSetText(GUIEditors.bronze, tostring(broze).." grams\n"..tonumber(bronze*35).." $") guiSetText(GUIEditors.silver, tostring(silver).." grams\n"..tonumber(silver*45).." $") guiSetText(GUIEditors.iron, tostring(iron).." grams\n"..tonumber(iron*46).." $") guiSetText(GUIEditors.gold, tostring(gold).." grams\n"..tonumber(gold*60).." $") end end) I failed, what's wrong? these vars get nil value. Link to comment
Moderators IIYAMA Posted March 5, 2015 Moderators Share Posted March 5, 2015 Because results is defined 2 times and the one inside the function is a local. function divideThisValue(value) local value = value local splitUpInParts = 5 ------ local valuePeaks = (100/splitUpInParts)/100 local results = {} local valueInParts = math.floor((value/splitUpInParts)+0.5) local valueTotal = 0 for i=1,splitUpInParts-1 do local peak if math.random(2) == 1 then peak = math.random(math.floor((valueInParts*valuePeaks)+0.5)) else peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5)) end local result = valueInParts+ peak results[#results+1] = result valueTotal = valueTotal+result end results[#results+1] = value - valueTotal return results end addEvent("onEstimatingOver", true) addEventHandler("onEstimatingOver", root, function() onFactoryWindowClose() if estimating then estimating = false end local valueof = tonumber(getElementData(getLocalPlayer(), "Rocks:iron")) or 0 if guiGetVisible(GUIEditors.window[1]) then local results = divideThisValue(valueof) if results then local copper = results[1] or 0 -- if it fails some how, which probably will not happen. local bronze = results[2] or 0 local silver = results[3] or 0 local iron = results[4] or 0 local gold = results[5] or 0 guiSetText(GUIEditors.copper, tostring(copper).." grams\n"..tonumber(copper*25).."$") guiSetText(GUIEditors.bronze, tostring(broze).." grams\n"..tonumber(bronze*35).." $") guiSetText(GUIEditors.silver, tostring(silver).." grams\n"..tonumber(silver*45).." $") guiSetText(GUIEditors.iron, tostring(iron).." grams\n"..tonumber(iron*46).." $") guiSetText(GUIEditors.gold, tostring(gold).." grams\n"..tonumber(gold*60).." $") end end end) Link to comment
roaddog Posted March 5, 2015 Author Share Posted March 5, 2015 It worked, Thanks IYAMA! 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