Math.random(100) question

Discuss, ask for help, share ideas, give suggestions, read tutorials, and tell us about bugs you have found with MicroMacro in here.

Do not post RoM-Bot stuff here. There is a subforum for that.
Forum rules
This is a sub-forum for things specific to MicroMacro.

This is not the place to ask questions about the RoM bot, which uses MicroMacro. There is a difference.
Post Reply
Message
Author
Louro
Posts: 10
Joined: Fri May 18, 2012 11:55 am

Math.random(100) question

#1 Post by Louro » Sat May 19, 2012 4:19 am

I assume "match.random(100) creates a random number between 1 and 100.

So, this code says "if random number above 92 then if that number above 50 do skill1, else skill2"
But, if the number is above 92 is obvios that it will be allways above 50, so it will output skill 1 allways and never skill2...
Or maybe they are diferent random numbers each time?

Code: Select all

 if( math.random(100) > 92 ) then
      if( math.random(100) >= 50 ) then
        keyboardHold(key_skill1);
        yrest(50);
        keyboardRelease(key_skill1);
      else
        keyboardHold(key_skill2);
        yrest(50);
        keyboardRelease(key_skill2);
      end
    end
I did 1 code like that to output 2 skills with low cooldown and another code with diferent numbers to other 2 skills with high cooldown but I get lots of outputs before the cooldowns.
The objective is to output those skills randomly.

User avatar
lisa
Posts: 8332
Joined: Tue Nov 09, 2010 11:46 pm
Location: Australia

Re: Math.random(100) question

#2 Post by lisa » Sun May 20, 2012 2:54 am

without knowing about random numbers I would say what is the rest of the code?

If it is in a loop with no wait time then you will be doing 1000's of calculations every second, so yes it would be more then 92 regularly.
Remember no matter you do in life to always have a little fun while you are at it ;)

wiki here http://www.solarstrike.net/wiki/index.php?title=Manual

Louro
Posts: 10
Joined: Fri May 18, 2012 11:55 am

Re: Math.random(100) question

#3 Post by Louro » Sun May 20, 2012 1:09 pm

Well, the code is not mine.
This is on the fiesta bot code by mysticfox.

I don't like too much this part.
With a 5 secs cooldown skill, would be posible to:

"cast skill every (5000+(math.random(100)*100)"
This would output that skill every 5-15 seconds, and that's what I'm looking for.

Louro
Posts: 10
Joined: Fri May 18, 2012 11:55 am

Re: Math.random(100) question

#4 Post by Louro » Sun May 20, 2012 1:40 pm

I tried to work it other way, but don't work.
In red my changes.


EDIT: Stupid code deleted

Louro
Posts: 10
Joined: Fri May 18, 2012 11:55 am

Re: Math.random(100) question

#5 Post by Louro » Mon May 21, 2012 5:22 am

Well, yesterday was sunday, definitively not the best day for coding.

Today worked a bit and get it work :)
IT WORKS!!!

Here the complete code, in green my changes.
-- Credits:
-- A. M. "MystikFox"
-- "Mangler"

-------------------------
-- do NOT edit these!!
CLASS_KNIGHT = 0;
CLASS_CLERIC = 1;
CLASS_MAGE = 2;
CLASS_ARCHER = 3;


-- EDIT THESE!
-------------------------
class = CLASS_KNIGHT; -- class determins the logic to take
HP_restamt = 750; -- HP to rest at (not used for cleric's)
HP_potion = 750; -- Use a HP potion (or heal skill for cleric)
HP_stone = 1750; -- Use a HP stone
SP_restamt = 100; -- SP to rest at
SP_potion = 150; -- Use a SP potion
SP_stone = 750; -- Usa a SP stone


key_attack = key.VK_1; -- normal melee attack
key_pickup = key.VK_R; -- pickup items
key_skill1 = key.VK_2; -- offensive and defensive spells...
key_skill2 = key.VK_3; -- check your class's fight function
key_skill3 = key.VK_4; -- for documentation on what each skill
key_skill4 = key.VK_5; -- will be used for

key_scroll1 = key.VK_0; -- offensive and defensive spells...
key_scroll2 = key.VK_6; -- check your class's fight function
key_scroll3 = key.VK_DASH; -- for documentation on what each skill
key_scroll4 = key.VK_EQUAL; -- will be used for

key_hppotion = key.VK_W; -- CLERICS: map this to your heal spell
key_hpstone = key.VK_Q;
key_sppotion = key.VK_D;
key_spstone = key.VK_E;

-- NOTE: if SP_potion is higher than SP_restatm, you will use SP potions
-- instead of resting, unless you do not have any left. same goes for HP potions.
-- you will always use potions while fighting if the values fall below
-- the emergency amount.
-------------------------




-- Scroll settings (read instructions below Buff settings first)
-------------------------
scroll1_duration = 3500000;
scroll_1 = 0;
scroll2_duration = 3500000;
scroll_2 = 0;
scroll3_duration = 3500000;
scroll_3 = 0;
scroll4_duration = 3500000;
scroll_4 = 0;
-------------------------


-- NOTE: set on 59 minutes
-- buff / scroll durations in msec time = minutes x 60000
-- to de- activate non used buffs / scrolls replace "1" with "0"
-- to activate buff / scroll replace "0" with "1"
-- scrolls can be used too as buff
-------------------------






-- should not need to be changed, except for HP_addr/SP_addr when
-- a patch makes them no longer work
proc = 0;
win = 0;
HP_addr = "0x0089D224";
SP_addr = "0x0089d228";
HP = 10000; -- default, this corrects itself (don't change it!)
SP = 10000; -- default, this corrects itself (don't change it!)
buff1_needed = true;
buff2_needed = true;
buff3_needed = true;
buff4_needed = true;
scroll1_needed = false;
scroll2_needed = false;
scroll3_needed = false;
scroll4_needed = false;
need_heal = false;
can_rest = true;
-------------------------


function fight_skill1()
keyboardHold(key_skill1);
yrest(50);
keyboardRelease(key_skill1);
yrest(100);
end

function fight_skill2()
keyboardHold(key_skill2);
yrest(50);
keyboardRelease(key_skill2);
yrest(100);
end

function fight_skill3()
keyboardHold(key_skill3);
yrest(50);
keyboardRelease(key_skill3);
yrest(100);
end

function fight_skill4()
keyboardHold(key_skill4);
yrest(50);
keyboardRelease(key_skill4);
yrest(100);
end



-- fighting functions
-----------------------------------------------------
-- fight as a knight
function knight_fight()
-- skill1 : offensive skill
-- skill2 : offensive skill
-- skill3 : offensive skill
-- skill4 : offensive skill

keyboardHold(key_attack);
yrest(50);
keyboardRelease(key_attack);


registerTimer("fight_skill1", 7000, fight_skill1);
registerTimer("fight_skill2", 9000, fight_skill2);
registerTimer("fight_skill3", 16000, fight_skill3);
registerTimer("fight_skill4", 16000, fight_skill4);

while(have_target()) do
if( HP < HP_potion) then hp_potion(); end
if( HP < HP_stone) then hp_stone(); end
if( SP < SP_potion) then sp_potion(); end
if( SP < SP_stone) then sp_stone(); end

keyboardHold(key_attack);
yrest(50);
keyboardRelease(key_attack);

yrest(200);
end
unregisterTimer("fight_skill1");
unregisterTimer("fight_skill2");
unregisterTimer("fight_skill3");
unregisterTimer("fight_skill4");


for i = 0,10 do
pickup();
yrest(50);
end
end

-- fight function for cleric
function cleric_fight()
-- skill1 : buff 1
-- skill2 : buff 2
-- skill3 : buff 3
-- skill4 : buff 4

keyboardHold(key_attack);
yrest(50);
keyboardRelease(key_attack);

if( math.random(100) > 50 ) then
keyboardHold(key_skill1);
yrest(50);
keyboardRelease(key_skill1);
end

registerTimer("fight_timer", 3000, fight_timer);
while(have_target()) do
if( HP < HP_potion) then hp_potion(); end
if( HP < HP_stone) then hp_stone(); end
if( SP < SP_potion) then sp_potion(); end
if( SP < SP_stone) then sp_stone(); end

yrest(100);
end
unregisterTimer("fight_timer");

for i = 0,15 do -- too many items drop at abyss ;)
pickup();
yrest(50);
end
end

-- fight as a mage
function mage_fight()
-- skill1 : offensive spell
-- skill2 : offensive spell
-- skill3 : offensive spell
-- skill4 : offensive spell

while(have_target()) do
if( HP < HP_potion) then hp_potion(); end
if( HP < HP_stone) then hp_stone(); end
if( SP <SP_potion) then sp_potion(); end
if( SP < SP_stone) then sp_stone(); end

keyboardHold(key_skill1);
yrest(200);
keyboardRelease(key_skill1);

yrest(100);

keyboardHold(key_skill2);
yrest(200);
keyboardRelease(key_skill2);

yrest(100);

keyboardHold(key_skill3);
yrest(200);
keyboardRelease(key_skill3);

yrest(100);
end

for i = 0,8 do
pickup();
yrest(50);
end
end


-- fight as an archer
function archer_fight()
-- skill1 : DOT / offensive skill (entry attack)
-- skill2 : DOT / offensive skill (entry attack)
-- skill3 : offensive skill
-- skill4 : offensive skill

-- entry skill
if( math.random(100) >= 50 ) then
keyboardHold(key_skill1);
yrest(50);
keyboardRelease(key_skill1);
else
keyboardHold(key_skill2);
yrest(50);
keyboardRelease(key_skill2);
end
yrest(500);

keyboardHold(key_attack);
yrest(50);
keyboardRelease(key_attack);

registerTimer("fight_timer", 3000, fight_timer);
while(have_target()) do
if( HP < HP_potion) then hp_potion(); end
if( HP < HP_stone) then hp_stone(); end
if( SP < SP_potion) then sp_potion(); end
if( SP < SP_stone) then sp_stone(); end

--keyboardHold(key_attack);
--yrest(50);
--keyboardRelease(key_attack);

if( math.random(100) > 80 ) then
if( math.random(100) >= 50 ) then
keyboardHold(key_skill2);
yrest(50);
keyboardRelease(key_skill2);
else
keyboardHold(key_skill3);
yrest(50);
keyboardRelease(key_skill3);
end
yrest(200);
end

yrest(200);
end
unregisterTimer("fight_timer");

for i = 0,8 do
pickup();
yrest(100);
end
end
-----------------------------------------------------





-- toggle cast needed for buff1
function buff1_timer()
buff1_needed = true;
end

-- toggle cast needed for buff2
function buff2_timer()
buff2_needed = true;
end

-- toggle cast needed for buff3
function buff3_timer()
buff3_needed = true;
end

-- toggle cast needed for buff4
function buff4_timer()
buff4_needed = true;
end

-- toggle cast needed for scroll1
function scroll1_timer()
scroll1_needed = true;
end

-- toggle cast needed for scroll2
function scroll2_timer()
scroll2_needed = true;
end

-- toggle cast needed for scroll3
function scroll3_timer()
scroll3_needed = true;
end

-- toggle cast needed for scroll4
function scroll4_timer()
scroll4_needed = true;
end


-- you have died! oh noes!
function death_return()
keyboardPress(key.VK_SNAPSHOT);
print(os.date("Looks like somebody got you killed. %X"))
print("A screen capture has been taken. Open MS Paint and paste it.");
stopPE(); -- this turns the macro off!
coroutine.yield(); -- yield to make sure the protected environment stops
end

-- moves forward a bit...makes you seem less bot-like.
-- allows you to cover more ground
function move_forward()
keyboardHold(key.VK_S);
if( math.random(100) >= 80 )
then keyboardHold(key.VK_Z);
else if( math.random(100) >= 80 )
then keyboardHold(key.VK_X); end
end

yrest( math.random(2000) );

keyboardRelease(key.VK_S);
keyboardRelease(key.VK_Z);
keyboardRelease(key.VK_X);
end


-- rotate camera
function rotate_cam()
wx,wy = windowRect(win);

mouseSet(wx+512, wy+384);
yrest(100);
mouseRHold();
yrest(100);
mouseSet(wx+514, wy+384);
yrest(100);
mouseRRelease();
yrest(100);
end

-- pickup nearby items
function pickup()
keyboardHold(key_pickup);
yrest(50);
keyboardRelease(key_pickup);
end

-- selects a nearby monster
function target_monster()
--keyboardHold(key.VK_TAB);
--yrest(50);
--keyboardRelease(key.VK_TAB);
keyboardPress( key.VK_TAB );
end

-- checks if you have a target
function have_target()
r,g,b = getPixel(hdc, 540, 1);

-- io.write("R: ", r, ", G: ", g, ", B: ", b, "\n");

-- check for the gray in the monster's HP window
if( r >= 229 and r <= 240 and g >= 245 and g <= 255 and b >= 250 ) then
return true;
else
return false;
end
end

-- updates variables from client
function update_vars()
HP = memoryReadInt(proc, HP_addr);
SP = memoryReadInt(proc, SP_addr);
end


-- toggle can_heal to true, disable timer
function can_rest_timer()
unregisterTimer("can_rest_timer");
can_rest = true;
print("Can rest again.");
end

-- tell heal_rest we no longer need rest
function heal_rest_timer()
need_heal = false;
end

-- rest untill healed
function rest_heal()
if( can_rest == false ) then return; end

keyboardHold(key.VK_HOME);
yrest(500);
keyboardRelease(key.VK_HOME);

-- set a timer to toggle healing in 30 seconds
registerTimer("heal_rest_timer", 30000, heal_rest_timer);

need_heal = true;
last_hp = HP;
while( need_heal ) do
yrest(100);
if (HP < last_hp) then
print("Under attack! Exiting rest.");
can_rest = false;
registerTimer("can_rest_timer", 3000, can_rest_timer);
break;
else
last_hp = HP;
end
end

keyboardHold(key.VK_HOME);
yrest(500);
keyboardRelease(key.VK_HOME);

yrest(200);
end

-- use a hp potion!
function hp_potion()
keyboardHold(key_hppotion);
yrest(100);
keyboardRelease(key_hppotion);

yrest(500);
end

-- use a hp stone!
function hp_stone()
keyboardHold(key_hpstone);
yrest(100);
keyboardRelease(key_hpstone);
print("HP stone used.")

yrest(500);
end

-- use a sp potion!
function sp_potion()
keyboardHold(key_sppotion);
yrest(100);
keyboardRelease(key_sppotion);

yrest(500);
end

-- use a sp stone!
function sp_stone()
keyboardHold(key_spstone);
yrest(100);
keyboardRelease(key_spstone);
print("SP stone used.")

yrest(500);
end








function main()
win = findWindow("FiestaOnline");
proc = openProcess( findProcess("FiestaOnline") );
-- attach(win);
hdc = openDC( win );


registerTimer("update_vars", 100, update_vars);

if( class == CLASS_CLERIC ) then
registerTimer("buff1_timer", buff1_duration, buff1_timer);
registerTimer("buff2_timer", buff2_duration, buff2_timer);
registerTimer("buff3_timer", buff3_duration, buff3_timer);
registerTimer("buff4_timer", buff4_duration, buff4_timer);
end

registerTimer("scroll1_timer", scroll1_duration, scroll1_timer);
registerTimer("scroll2_timer", scroll2_duration, scroll2_timer);
registerTimer("scroll3_timer", scroll3_duration, scroll3_timer);
registerTimer("scroll4_timer", scroll4_duration, scroll4_timer);

while( 1 ) do
if( HP == 0 ) then death_return(); end
if( HP < HP_potion ) then hp_potion(); end
if( HP < HP_stone ) then hp_stone(); end
if( SP < SP_potion ) then sp_potion(); end
if( SP < SP_stone ) then sp_stone(); end
if( HP < HP_restamt and can_rest == true ) then rest_heal(); end
if( SP < SP_restamt and can_rest == true ) then rest_heal(); end

yrest(100);

target_monster();
yrest(200);
if( have_target() ) then
can_rest = false; -- prevent resting during battle
-- for the few that have this bug
if( class == CLASS_KNIGHT ) then knight_fight(); end
if( class == CLASS_CLERIC ) then cleric_fight(); end
if( class == CLASS_MAGE ) then mage_fight(); end
if( class == CLASS_ARCHER ) then archer_fight(); end
can_rest = true;
else


-- cleric only logic
if( class == CLASS_CLERIC ) then
if( buff_1 == 1 ) then
if( buff1_needed ) then
keyboardHold(key_skill1);
yrest(100);
keyboardRelease(key_skill1);
print(os.date("buff 1 casted %X"))
buff1_needed = false;
yrest(2000);
end
end

if( buff_2 == 1 ) then
if( buff2_needed ) then
keyboardHold(key_skill2);
yrest(100);
keyboardRelease(key_skill2);
print(os.date("buff 2 casted %X"))
buff2_needed = false;
yrest(2000);
end
end

if( buff_3 == 1 ) then
if( buff3_needed ) then
keyboardHold(key_skill3);
yrest(100);
keyboardRelease(key_skill3);
print(os.date("buff 3 casted %X"))
buff3_needed = false;
yrest(2000);
end
end

if( buff_4 == 1 ) then
if( buff4_needed ) then
keyboardHold(key_skill4);
yrest(100);
keyboardRelease(key_skill4);
print(os.date("buff 4 casted %X"))
buff4_needed = false;
yrest(2000);
end
end
end

if( scroll_1 == 1 ) then
if( scroll1_needed ) then
keyboardHold(key_scroll1);
yrest(100);
keyboardRelease(key_scroll1);
print(os.date("scroll 1 used %X"))
scroll1_needed = false;
yrest(3200);
end
end

if( scroll_2 == 1 ) then
if( scroll2_needed ) then
keyboardHold(key_scroll2);
yrest(100);
keyboardRelease(key_scroll2);
print(os.date("scroll 2 used %X"))
scroll2_needed = false;
yrest(3200);
end
end

if( scroll_3 == 1 ) then
if( scroll3_needed ) then
keyboardHold(key_scroll3);
yrest(100);
keyboardRelease(key_scroll3);
print(os.date("scroll 3 used %X"))
scroll3_needed = false;
yrest(3200);
end
end

if( scroll_4 == 1 ) then
if( scroll4_needed ) then
keyboardHold(key_scroll4);
yrest(100);
keyboardRelease(key_scroll4);
print(os.date("scroll 4 used %X"))
scroll4_needed = false;
yrest(3200);
end
end


rotate_cam();
if( math.random(100) > 90 ) then
move_forward(); end
end

pickup();
end

-- detach();
closeProcess(proc);
end

startMacro(main);

Post Reply

Who is online

Users browsing this forum: No registered users and 19 guests