Mirage Source
Not good with Math - Printable Version

+- Mirage Source (https://mirage-engine.uk/forums)
+-- Forum: Mirage Source (Nostalgia) (https://mirage-engine.uk/forums/forumdisplay.php?fid=61)
+--- Forum: Archive (2006-2011) (https://mirage-engine.uk/forums/forumdisplay.php?fid=18)
+---- Forum: General (https://mirage-engine.uk/forums/forumdisplay.php?fid=17)
+---- Thread: Not good with Math (/showthread.php?tid=2684)



Not good with Math - jsventor - 04-04-2009

I want it so that the players speed gives them a bonus to the exp they gain, heres what I have..

Code:
Call SetPlayerExp(Attacker, (GetPlayerExp(Attacker) + EXP) + ((GetPlayerSPEED(Attacker)) * EXP) / 2)



Re: Not good with Math - Matt - 04-04-2009

That's basically giving the player a LOT of extra xp.

If you have 10 spd, and you get 100 xp, that's 1000 exp, for a bonus of 500 xp, since you divide it by 2. Lol.


Re: Not good with Math - jsventor - 04-04-2009

yea I fixed it lmao, I relaized that after I killed omehitng giving 5 exp :/

i got another question, See, I made it so that depending on the NPC's Speed and Your speed, the NPC can miss its attack on you, but 9/10 NPC attacks are missssed even if their Speed is higher then mine.. Heres the check code

[code]
Function CanNpcMiss(ByVal index As Long, NpcNum As Long) As Boolean
Dim i As Long, n As Long

CanNpcMiss = False
If Npc(NpcNum).SPEED >= GetPlayerSPEED(index) Then
CanNpcMiss = False
Else
n = Int(Rnd * 2)
If n = 1 Then
i = Int(GetPlayerSPEED(index))

n = Int(Rnd * Npc(NpcNum).SPEED) + 1
If n


Re: Not good with Math - Matt - 04-04-2009

Try changing:

n = Int(Rnd * 2)

To:

n = Int(Rnd * 2) + 1

See if that works.


Re: Not good with Math - Egon - 04-04-2009

Matt Wrote:Try changing:

n = Int(Rnd * 2)

To:

n = Int(Rnd * 2) + 1

See if that works.

Int(Rnd*2) will generate 0 and 1
Int(Rnd*2)+1 will generate 1 and 2


Re: Not good with Math - Matt - 05-04-2009

Egon Wrote:
Matt Wrote:Try changing:

n = Int(Rnd * 2)

To:

n = Int(Rnd * 2) + 1

See if that works.

Int(Rnd*2) will generate 0 and 1
Int(Rnd*2)+1 will generate 1 and 2

Mhm, I know. See, when I was messin' with this stuff, I had a hard time of ever getting a 0. When I changed it to get from 1 or 2, it worked a lot better.


Re: Not good with Math - Egon - 05-04-2009

Is Randomize Timer called anywhere in the source? Hopefully just once on form load.


Re: Not good with Math - Matt - 05-04-2009

Egon Wrote:Is Randomize Timer called anywhere in the source? Hopefully just once on form load.

I don't think it's "Randomize Timer", just "Randomize".

It is needed for the rnd function to properly work though..


Re: Not good with Math - Egon - 05-04-2009

Randomize Timer is more random then just Randomize.


Re: Not good with Math - Matt - 05-04-2009

Egon Wrote:Randomize Timer is more random then just Randomize.

Ah. Okay.


Re: Not good with Math - GIAKEN - 05-04-2009

I read this somewhere:

Quote:By the way, as of VB6 anyway, 'Randomize Timer' is redundant, as that is the default behavior of 'Randomize'.

And this is a good random function:

Code:
Function Random(Lowerbound As Integer, Upperbound As Integer) As Integer
    Random = Int((Upperbound - Lowerbound + 1) * Rnd) + Lowerbound
End Function

For example Random(0, 10) will produce numbers from 0-10.


Re: Not good with Math - Egon - 05-04-2009

[quote]Basically...
Randomize reseeds the pseudo random sequence generated by Rnd. Unfortunately (because it uses a two byte hash) it only has access to a small portion of the full sequence (1/256th of 2^24 possible entry points). Calling it more than once does not make the sequence more Random it increases the chances of a repeat sequences coming up.

As a side note, rather than calling Randomize at all you can use Rnd -number to reseed Rnd. This provides full access to the sequence and so gets more out of Rnd than reseeding with Randomize.
[code]Private Sub Form_Load()
Rnd -Now - Timer '