The following warnings occurred:
Warning [2] Use of undefined constant SAPI_NAME - assumed 'SAPI_NAME' (this will throw an Error in a future version of PHP) - Line: 3388 - File: inc/functions.php PHP 7.4.33-nmm6 (Linux)
File Line Function
/inc/functions.php 3388 errorHandler->error
/showthread.php 116 build_archive_link
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm6 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/inc/functions.php 3324 build_forum_breadcrumb
/showthread.php 195 build_forum_breadcrumb
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm6 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/showthread.php 195 build_forum_breadcrumb






Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RAND and Functions
Author Message
pinku
Journeyman
*

Posts: 118
Likes Given: 4
Likes Received: 2 in 2 posts
Joined: Apr 2013
Reputation: 4



Post: #1
RAND and Functions
Hey!

I have been messing with RAND, skills and such stuff, and I'm kinda stuck to understand something.. I'm sorry if this is dumb.

I want the first function1 to be harder to happen than the others. Function1 the hardest, function6 the easiest.

So I thought, I would start from the hardest, if it doesn't happen, we move to next one.

Code:
ON=@DClick

IF (<EVAL RAND(500)>) <= (100 + <SRC.SKILL>))
function1_happens
RETURN 1

ELSEIF (<EVAL RAND(400)>) <= (100 + <SRC.SKILL>))
function2_happens
RETURN 1

ELSEIF (<EVAL RAND(300)>) <= (100 + <SRC.SKILL>))
function3_happens
RETURN 1

ELSEIF (<EVAL RAND(250)>) <= (100 + <SRC.SKILL>))
function4_happens
RETURN 1

ELSEIF (<EVAL RAND(220)>) <= (100 + <SRC.SKILL>))
function5_happens
RETURN 1

ELSE
function6_happens
ENDIF
RETURN 1

Now, what really happens is: Always function1 or function2 runs, always! I don't know where I'm going wrong.

If I try on first function, using 50 skill, for example:

Code:
IF (<EVAL RAND(1000)>) <= (100 + <SRC.SKILL>)

So, 150 can't be higher than RAND(1000) all the single time, but it still happens non stop when I double click.

Any tips for me? Am I plain stupid?
Others and better ways to do it are welcome too!

Thanks a lot!
(This post was last modified: 02-03-2014 06:08 PM by pinku.)
02-03-2014 06:06 PM
Find all posts by this user Like Post Quote this message in a reply
Mazer
Apprentice
*

Posts: 2
Likes Given: 0
Likes Received: 0 in 0 posts
Joined: Jan 2014
Reputation: 1



Post: #2
RE: RAND and Functions
Im sorry im not best scripter in UO, but as i understand EVAL RAND(500) is random number between 0 and 500 second i dont really know how SRC.SKILL return value 50.5% skill its 505 or 50.5.
And you should start from easiest function. With 50% of skill if its 50.0. The chance to get last ELSEIF is about 1:30000. You really want this ?
If you could declare random value in the beginning of the script. etc
x = EVAL RAND(500) + SKILL if player have 50% skill and he rolls 100, x would be 150 then declaring chances

if X >= 550 then
function1 (rarest)
elseif x >= 400 then
function2
elseif x >= 300 then
function3
elseif x < 300 then
function4

function1 gona happen 1:500 times with 50% skill and 50:500 with 100% skill
function 2 gona happen 150:500 times with 50% skill and 200:500 with 100% skill
function 3 gona happen 250:500 times with 50% skill and 300:500 with 100% skill
and function4 gona happen 350:500 times with 50% skill and 400:500 with 100% skill
(This post was last modified: 02-03-2014 09:54 PM by Mazer.)
02-03-2014 09:49 PM
Find all posts by this user Like Post Quote this message in a reply
Alaric
Journeyman
*

Posts: 227
Likes Given: 7
Likes Received: 9 in 4 posts
Joined: Oct 2012
Reputation: 7



Post: #3
RE: RAND and Functions
I wrote almost the same but removed that because i found out, that with this system you will have with 0%skill 0%chance to do the best thing. I was quite confused how he wants it to work and how to do it. I would have to sit back and look at it closely.

After evaluation skill value should be 10times higher than real value. 100%=1000.
(This post was last modified: 02-04-2014 12:15 AM by Alaric.)
02-03-2014 10:15 PM
Find all posts by this user Like Post Quote this message in a reply
Coruja
Sphere Developer
*****

Posts: 987
Likes Given: 5
Likes Received: 226 in 187 posts
Joined: Jul 2012
Reputation: 7

Dimension Shard

Post: #4
RE: RAND and Functions
probably the math fails because 100.0 skill = 1000 value, not 100

also, just replace the formula with real numbers and you will see the mistake
Code:
(<EVAL RAND(500)> <= 100+<SRC.SKILL>)
=
(0~499 <= 100+1000)
=
(0~499 <= 1100)
this will always return true because any number between 0~499 is <= 1100, thats why you always got 'function1_happens' as result
(This post was last modified: 02-04-2014 12:49 PM by Coruja.)
02-04-2014 12:46 PM
Find all posts by this user Like Post Quote this message in a reply
pinku
Journeyman
*

Posts: 118
Likes Given: 4
Likes Received: 2 in 2 posts
Joined: Apr 2013
Reputation: 4



Post: #5
RE: RAND and Functions
(02-03-2014 09:49 PM)Mazer Wrote:  Im sorry im not best scripter in UO, but as i understand EVAL RAND(500) is random number between 0 and 500 second i dont really know how SRC.SKILL return value 50.5% skill its 505 or 50.5.
And you should start from easiest function. With 50% of skill if its 50.0. The chance to get last ELSEIF is about 1:30000. You really want this ?
If you could declare random value in the beginning of the script. etc
x = EVAL RAND(500) + SKILL if player have 50% skill and he rolls 100, x would be 150 then declaring chances

if X >= 550 then
function1 (rarest)
elseif x >= 400 then
function2
elseif x >= 300 then
function3
elseif x < 300 then
function4

function1 gona happen 1:500 times with 50% skill and 50:500 with 100% skill
function 2 gona happen 150:500 times with 50% skill and 200:500 with 100% skill
function 3 gona happen 250:500 times with 50% skill and 300:500 with 100% skill
and function4 gona happen 350:500 times with 50% skill and 400:500 with 100% skill

Thank you, a lot!
I did what you said with a simple LOCAL and I could make the things happen, plus, making my char say the numbers rolled. Smile

(02-03-2014 10:15 PM)Alaric Wrote:  I wrote almost the same but removed that because i found out, that with this system you will have with 0%skill 0%chance to do the best thing. I was quite confused how he wants it to work and how to do it. I would have to sit back and look at it closely.

After evaluation skill value should be 10times higher than real value. 100%=1000.

Thanks, I could swear I was using the RAND wrong, in the end, it was the skill 10 times higher, just like you said.
Thank you!

(02-04-2014 12:46 PM)Coruja Wrote:  probably the math fails because 100.0 skill = 1000 value, not 100

also, just replace the formula with real numbers and you will see the mistake
Code:
(<EVAL RAND(500)> <= 100+<SRC.SKILL>)
=
(0~499 <= 100+1000)
=
(0~499 <= 1100)
this will always return true because any number between 0~499 is <= 1100, thats why you always got 'function1_happens' as result

Thank you, Coruja!
Your help was much appreciated! Smile
02-04-2014 04:58 PM
Find all posts by this user Like Post Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)