Lone Wolf Development Forums

Lone Wolf Development Forums (http://forums.wolflair.com/index.php)
-   Army Builder (http://forums.wolflair.com/forumdisplay.php?f=16)
-   -   Using Random Effectively (http://forums.wolflair.com/showthread.php?t=8448)

Jamz May 5th, 2009 08:39 PM

Using Random Effectively
 
OK, I'm completely stumped. I'm trying to create a unit that has random stats. The problem I ran into is, the "eval" script for options run everytime ANY option change is made. So if a user changes an option on this unit, all his stats are re-randomized.

I tried to add another option and auto toggle it's selection to track the state, so randomize stat on first eval, set counter to true. And checking if counter = true at the top and skipping the rest of the script. Therefore it should only set the random stat once.

Except it just doesn't work. The option is set, but the stat doesn't change (if I remove the first if/then check, the stats randomize fine so that works, just not the boolean check).

HELP! Is there an easier/better way to run a script just once for a unit (EVER!)?? I also tried setting tags, but the tagis/tagcount always returned 0 even though I saw the tags for the unit under debug.

The unit is a child under a single parent if that makes a difference.



[EVAL SCRIPT]

var x as number
var y as number


if ( this.unit.option[neCounter].selection = 1 ) then
done
endif


x = random(10) + 1

if (x = 1) then
y = 8
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 2) then
y = 9
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 3) then
y = 9
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 4) then
y = 10
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 5) then
y = 10
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 6) then
y = 10
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 7) then
y = 10
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 8) then
y = 11
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 9) then
y = 11
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

if (x = 10) then
y = 12
this.unit.basestat[mp] = y
this.unit.option[neCounter].selection = 1
done
endif

Jamz May 5th, 2009 08:55 PM

Given some further testing...

I had a similiar option that DOES work, sort of...The difference was that this one just selected a random option, and that option may have set some stat changes.

So, as a test, i added this.unit.basestat[mp] = x to the first test condition, and sure enough, it doesn't set the stat. It sets the option selection to 1 sure enough but that's it.

Is setting an option selection (or checking it) throwing my context out or something?



[EVAL Script]

if ( this.unit.option[BlankLine].selection = 1 ) then
done
endif


var x as number

x = random(5)

this.unit.name = this.unit.name & x

if (x = 0) then
x = 22
this.unit.basestat[mp] = x
this.unit.option[neFrenzy].selection = 1
this.unit.option[BlankLine].selection = 1
done
endif

if (x = 1) then
this.unit.option[neCarapace].selection = 1
this.unit.option[BlankLine].selection = 1
done
endif

if (x = 2) then
this.unit.option[neDurable].selection = 1
this.unit.option[BlankLine].selection = 1
done
endif

if (x = 3) then
this.unit.option[neQuicken].selection = 1
this.unit.option[BlankLine].selection = 1
done
endif

if (x = 4) then
this.unit.option[neIrradiat].selection = 1
this.unit.option[BlankLine].selection = 1
done
endif

Mathias May 6th, 2009 07:16 AM

Look in the authoring kit manual, in the Tips & Tricks section, for the "Supporting Random Values" topic. Summary: generating random values within HL is not supported, but they give you tips on how to record the results of the random rolls you've made (which you're already close to, just reference a range-based link instead of your random roll).

Jamz May 7th, 2009 01:29 PM

Reference the range-based link where?

The random statements work (ie I can randomly set the selection status of options) but in the same if/then block, I can NOT set a unit.basestat.

Well, I CAn set the basestat if I remove the:
if ( this.unit.option[neCounter].selection = 1 ) then
But then it continually randomizes. I've tried to set neCounter to a range-based option as well but that seems to change nothing.


All times are GMT -8. The time now is 07:29 PM.

Powered by vBulletin® - Copyright ©2000 - 2024, vBulletin Solutions, Inc.
wolflair.com copyright ©1998-2016 Lone Wolf Development, Inc. View our Privacy Policy here.