Author |
Message |
4zK
Joined: Mon Oct 11, 2010 1:15 pm Posts: 594 Location: Finlandia
|
New topic: LifeVariation through lua
How do I check for up to (x) emitters that have have the same parent?
I'll just ask a new question on the same topic to save space.
Is there a way to define - or at least simulate random lifetime variation through lua?
Last edited by 4zK on Sun Oct 14, 2012 12:29 am, edited 1 time in total.
|
Fri Oct 12, 2012 3:41 pm |
|
|
CaveCricket48
Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
|
Re: Checking for AEmitters
You can't really do this since wounds are GestHitByMOs = 0, so no ID checking can be done.
|
Sat Oct 13, 2012 2:06 pm |
|
|
4zK
Joined: Mon Oct 11, 2010 1:15 pm Posts: 594 Location: Finlandia
|
Re: Checking for AEmitters
Oh, darn. Thanks anyway.
|
Sat Oct 13, 2012 2:14 pm |
|
|
Shook
Joined: Fri Feb 16, 2007 8:43 pm Posts: 1695 Location: AH SHIT FUCK AUGH
|
Re: New topic: LifeVariation through lua
To answer the new question, i typically do that by dividing self.Lifetime with a random number between 1 and X, though multiplication can obviously be used as well. Do note, however, that math.random only does integers (whole numbers), so you'll probably want to go like math.random(1000,2000)/1000 in order to get more than two distinct lifetimes.
|
Sun Oct 14, 2012 2:23 pm |
|
|
Bad Boy
Joined: Fri Sep 10, 2010 1:48 am Posts: 666 Location: Halifax, Canada
|
Re: New topic: LifeVariation through lua
Yeah, math.random() is by default between 0 and 1. I.e. 0.1, 0.00043234, etc. By that evidence, it wouldn't change to integers if you use a larger scale. Also I don't think there's anything in lua (or at least CC lua) that's just an integer, all the numbers seem to be doubles and when a function calls for an integer it's just converted. Though I may be wrong here.
|
Sun Oct 14, 2012 3:17 pm |
|
|
p3lb0x
Forum Moderator
Joined: Fri Feb 02, 2007 3:53 pm Posts: 1896 Location: in my little gay bunker
|
Re: New topic: LifeVariation through lua
From what I gather reading the lua documentation math.random() gives you a number between 0 and 1. BUT if you give it upper and lower limits it will only do integers. The easiest way to get a number from 0 to 40 for example would be to just multiply math.random() with well, 40. Where as something like a number between 20 and 40 would be 20 + math.random()*20. I am not sure if this is the best way to do it, but it works wonders for me.
|
Sun Oct 14, 2012 3:20 pm |
|
|
Bad Boy
Joined: Fri Sep 10, 2010 1:48 am Posts: 666 Location: Halifax, Canada
|
Re: New topic: LifeVariation through lua
Hmm, maybe it does only give integers, wouldn't be hard to test. I haven't looked into it since I just do the same thing you do, which seems like the best method to me too.
|
Sun Oct 14, 2012 3:25 pm |
|
|
Shook
Joined: Fri Feb 16, 2007 8:43 pm Posts: 1695 Location: AH SHIT FUCK AUGH
|
Re: New topic: LifeVariation through lua
Well, it's been my experience that defining lower and upper limits does make it only do integers, for reasons unknown. This is also backed up by the wiki, as p3lb0x said. It might be a better idea to do what he does, since it has more possible outcomes. However, while applying arguments to math.random() makes it return integers, the number itself doesn't seem limited to integer properties, since you can divide it by whatever and still have everything work. Probably just a quirk in the system.
|
Sun Oct 14, 2012 4:46 pm |
|
|
p3lb0x
Forum Moderator
Joined: Fri Feb 02, 2007 3:53 pm Posts: 1896 Location: in my little gay bunker
|
Re: New topic: LifeVariation through lua
From what I gather, Lua just converts values around as it suits it when you try to do something a datatype shouldn't be able to.
|
Sun Oct 14, 2012 4:53 pm |
|
|
TheLastBanana
DRL Developer
Joined: Wed Dec 13, 2006 5:27 am Posts: 3138 Location: A little south and a lot west of Moscow
|
Re: New topic: LifeVariation through lua
It's probably not on the CC wiki, because it isn't so much a property of CC as it is of Lua itself. If you're curious about how Lua works, this is a far better resource than the wiki is (or should) be.
|
Mon Oct 15, 2012 5:22 pm |
|
|
Bad Boy
Joined: Fri Sep 10, 2010 1:48 am Posts: 666 Location: Halifax, Canada
|
Re: New topic: LifeVariation through lua
Thanks for that, not sure why I didn't just check some lua reference for this. Just to be sure, every number is a double and if a C function requires an int it gets converted automatically (i.e. combination of what p3lbox and I said)?
Also, to get back to the original topic, it seems that giving any arguments to math.random() makes it only return ints. e.g. math.random(0.0005,0.5) will just print 0 and math.random(0.5,1) will print 0 or 1. However, RangeRand() seems to do this properly, though I'm not really sure what other differences (if any) there are between this and math.random().
|
Mon Oct 15, 2012 8:15 pm |
|
|
Arcalane
Joined: Sun Jan 28, 2007 10:32 pm Posts: 1609 Location: UK
|
Re: New topic: LifeVariation through lua
Back to the original message... set a nice high Lifetime on the actual object, then... in Create(self), set up a randomized timer, monitor it during Update(self)... then when it's reached, do self:GibThis() or ToDelete as the 'then' action. If that didn't make much sense - 'cause I know I'm bad at explaining things - then this should clear things up; Code: function Create(self) self.lifeTimer = Timer(); self.lifeTime = 400+math.random(-200,200) end
function Update(self) if self.lifeTimer:IsPastSimMS(self.lifeTime) then self:GibThis(); end end I used this to add a random lifetime and auto-detonation to explosive submunitions on a certain weapon. If you only want it in steps of 50/100/200 ms or whatever, then just set up some appropriate math and lower the random range. Easy.
|
Tue Oct 16, 2012 2:35 am |
|
|
Bad Boy
Joined: Fri Sep 10, 2010 1:48 am Posts: 666 Location: Halifax, Canada
|
Re: New topic: LifeVariation through lua
Alternate and easier: Code: function Create(self) self.Lifetime = RangeRand(small#, big#); end function Update(self) end function Destroy(self) end
|
Tue Oct 16, 2012 2:56 am |
|
|
Arcalane
Joined: Sun Jan 28, 2007 10:32 pm Posts: 1609 Location: UK
|
Re: New topic: LifeVariation through lua
Probably more efficient, yes. Only reason I used a timer and GibThis in that instance is because it was for an explosive submunition, and AEmitters/etc. only gib if you tell them to; they just disappear into thin air if their lifetime runs out before they hit something hard enough to gib.
|
Tue Oct 16, 2012 5:12 am |
|
|
Bad Boy
Joined: Fri Sep 10, 2010 1:48 am Posts: 666 Location: Halifax, Canada
|
Re: New topic: LifeVariation through lua
Well in that case, chuck this in the update function (self.Lifetime is of course the lifetime which can be defined in the ini rather than the lua): Code: if self.Age > self.Lifetime - 100 then self:GibThis(); end It'll detonate a bit before what you actually set Lifetime to to make sure it doesn't just delete. I'm not sure what the safe margin there is but you may be able to cut it down to something like 20 MS instead.
|
Tue Oct 16, 2012 5:33 am |
|
|
|