Introducing Holic Online

You may request or share scripts for MicroMacro in this forum.
Message
Author
Impala
Posts: 14
Joined: Mon Aug 18, 2008 6:58 pm

Re: Introducing Holic Online

#21 Post by Impala » Thu Sep 18, 2008 6:47 pm

For the time being you can use the one that doesn't heal...I will find some different pointers

tgbhgf
Posts: 19
Joined: Wed Sep 10, 2008 3:10 am

Re: Introducing Holic Online

#22 Post by tgbhgf » Thu Sep 18, 2008 7:25 pm

no no the whole thing stops before i even hit a monster. I'm not dead my hp's still full but it said "You have die......etc etc"

=( please help

Impala
Posts: 14
Joined: Mon Aug 18, 2008 6:58 pm

Re: Introducing Holic Online

#23 Post by Impala » Thu Sep 18, 2008 9:24 pm

there's 2 different scripts and I know the first one works but it doesn't heal

tgbhgf
Posts: 19
Joined: Wed Sep 10, 2008 3:10 am

Re: Introducing Holic Online

#24 Post by tgbhgf » Thu Sep 18, 2008 10:22 pm

i tried all the scripts in this tread but no use T_T

Impala
Posts: 14
Joined: Mon Aug 18, 2008 6:58 pm

Re: Introducing Holic Online

#25 Post by Impala » Fri Sep 19, 2008 3:43 pm

You are doing something wrong because I know the one without the health refill works. 100% sure

tgbhgf
Posts: 19
Joined: Wed Sep 10, 2008 3:10 am

Re: Introducing Holic Online

#26 Post by tgbhgf » Fri Sep 19, 2008 4:23 pm

i have no idea but this is the process:

Run Holic
Open Script
Log Into Game
Press F5 (to activate)
and then it like buff and refil my hp/mp and then targeted a monsters and then stopped

Here's my script.

Code: Select all

-------------------------------------------------
--Holic Online Bot
--Mystikfox
--Hackbar
--Mangler
-------------------------------------------------
-- Variable declaration -- do not edit
-------------------------------------------------
CLASS_WARRIOR   = 0;
CLASS_MAGE      = 1;
HP              = 10000;
MP              = 10000;
SP              = 10000;


HP_ptr         = "00943ACC";
HP_offset      = 260;


MP_ptr         = "00932C0C";
MP_offset      = 268;

   
-------------------------------------------------


-------------------------------------------------
-- character configuration YOU HAVE TO CHANGE THIS STUFF FOR THE BOT TO WORK RIGHT
-------------------------------------------------
class           = CLASS_WARRIOR;
key_attack      = key.VK_1;
key_pickup      = key.VK_TILDE;
key_sit         = key.VK_F2;

key_skill1      = key.VK_2;
key_skill2      = key.VK_3;
key_skill3      = key.VK_4;

key_hppotion    = key.VK_7;
key_mppotion    = key.VK_6;
key_sppotion    = key.VK_F3;

-- rest or use potions when low on HP/MP/SP
HP_potion    = 6000;
MP_potion    = 400;
SP_potion    = 0;

HP_sit          = 40;
MP_sit          = 0;
SP_sit          = 0;

-- chance to cast
skill1_chance   = 80;
skill2_chance   = 80;
skill3_chance   = 0;

-- MP cost
skill1_cost     = 30;
skill2_cost     = 61;
skill3_cost     = 91;


have_pig        = 0;            -- set to 1 if you have a fortune pig and want to
            -- skip the manual pickup function   

-- buff stuff
-- NOTE:  set on 10 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
-------------------------

buff1_duration       = 1800000;
buff_1         	     = 1;
buff_key1               = key.VK_8;

buff2_duration       = 1800000;
buff_2               = 1;
buff_key2               = key.VK_9;

buff3_duration       = 1800000;
buff_3               = 1;
buff_key3               = key.VK_0;

--dont change these
buff1_needed    = true;
buff2_needed    = true;
buff3_needed    = true;




-- cast times in milliseconds
skill1_casttime        = 2000;
skill2_casttime        = 1000;
skill3_casttime        = 3000;

-- skill cool downs in milliseconds (not working)
skill1_cooldown        = 3000;
skill2_cooldown        = 8000;
skill3_cooldown        = 9000;
-------------------------------------------------

function hp_potion()
  keyboardPress(key_hppotion);
end

function mp_potion()
  keyboardPress(key_mppotion);
end

function sp_potion()
  keyboardPress(key_sppotion);
end

-- so we aren't spamming the attack key...
-- we will use a timer to press it once
-- every 3 seconds.
function attack_timer()
  keyboardPress(key_attack);
end

function fight_warrior()
  registerTimer("attack_timer", 3000, attack_timer);

  while( have_target() ) do
    if( HP < HP_potion ) then
      hp_potion(); end
    if( MP < MP_potion ) then
      mp_potion(); end
    if( SP < SP_potion ) then
      sp_potion(); end
     
      local roll = math.random(100);
 
      if( roll <= skill1_chance and SP >= skill1_cost ) then
        keyboardPress(key_skill1);
        yrest(120);
      elseif( roll <= skill2_chance and SP >= skill2_cost ) then
        keyboardPress(key_skill2);
        yrest(120);
      elseif( roll <= skill3_chance  and SP >= skill3_cost ) then
        keyboardPress(key_skill3);
        yrest(120);
      else
        keyboardPress(key_attack);
        yrest(500);
      end
      yrest(250);
      coroutine.yield();
   end
  unregisterTimer("attack_timer");

  yrest(1000);
end

function fight_mage()
  while( have_target() ) do
    if( HP < HP_potion ) then
      hp_potion(); end
    if( MP < MP_potion ) then
      mp_potion(); end
   
    local roll = math.random(100);
    if( roll <= skill1_chance and MP >= skill1_cost ) then
      -- cast skill 1
      keyboardPress(key_skill1);
      yrest(skill1_casttime);
    else
      keyboardPress(key_attack);
    end
   
    if( roll <= skill2_chance and MP >= skill2_cost ) then
    -- cast skill 1
    keyboardPress(key_skill2);
    yrest(skill2_casttime);
    else
    keyboardPress(key_attack);
    end

    yrest(100);
    coroutine.yield();
  end

  yrest(1000);
end

-- heal until full HP & MP
function rest_heal()
  if( can_rest == false ) then return; end
 
    keyboardHold(key_sit);
    yrest(50);
    keyboardRelease(key_sit);
 
    -- 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_sit);
    yrest(50);
    keyboardRelease(key_sit);
 
  yrest(200);
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

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

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

-- pickup nearby items
function pickup()
  keyboardHold(key_pickup);
  yrest(50);
  keyboardRelease(key_pickup);
  yrest(775)
  keyboardHold(key_pickup);
  yrest(50);
  keyboardRelease(key_pickup);
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


function move_forward()
  keyboardHold(key.VK_W);
  if( math.random(100) >= 80 )
    then keyboardHold(key.VK_A);
  else if( math.random(100) >= 80 )
    then keyboardHold(key.VK_D); end
  end

  yrest( math.random(200) );

  keyboardRelease(key.VK_W);
  keyboardRelease(key.VK_A);
  keyboardRelease(key.VK_D);
end









-- update client variables by reading from it's memory
function update_vars()
    HP = memoryReadIntPtr(proc, HP_ptr, HP_offset);

    MP = memoryReadIntPtr(proc, MP_ptr, MP_offset);
 
-- SP = memoryReadIntPtr(proc, SP_ptr, SP_offset);
 
-- X_coord = memoryReadIntPtr(proc, X_ptr, X_offset);
-- Y_coord = memoryReadIntPtr(proc, Y_ptr, Y_offset);
 
end



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

  mouseSet(wx+512, wy+412);
  yrest(100);
  mouseRHold();
  yrest(200);
  mouseSet(wx+526, wy+412);
  yrest(100);
  mouseRRelease();
  yrest(100);
end



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




-- checks if you have a target
function have_target()
  r,g,b = getPixel(hdc, 579, 79);
  print(r,g,b);
  -- check for the blueish color in the monster's HP window
  if( r >= 18 and r <= 36 and g >= 34 and g <= 49 and b >= 93 and b<= 109 ) then
    return true;
  else
    return false;
  end
end

--function used to test the position and colour of the current pixel under the mouse
function pixeltest()
  x,y = mouseGetPos();
  print("mouse_x: ", x, "; mouse_y: ", y); -- display the coordinates of the mouse
  r,g,b = getPixel(hdc, x, y);
  print("R : ", r, "; G : ", g, "; B : ", b);
end



-------------------------------------------------
-- FUNCTION MAIN
-------------------------------------------------
function main()
  win = findWindow("HoLic Online");
  hdc = openDC(win);
  proc = openProcess( findProcessByExe("HolicUSA.exe") );
  attach(win);

  registerTimer("update_vars", 100, update_vars);
  registerTimer("buff1_timer", buff1_duration, buff1_timer);
  registerTimer("buff2_timer", buff2_duration, buff2_timer);

 
  --pixeltest();
  while( 1 ) do
    --pixeltest();
    if( HP == 0 ) then death_return(); end
    if( HP < HP_potion ) then hp_potion(); end
    if( MP < MP_potion ) then mp_potion(); end
    if( SP < SP_potion ) then sp_potion(); end
    if( HP < HP_sit and can_rest == true ) then rest_heal(); end
    if( MP < MP_sit and can_rest == true ) then rest_heal(); end
    print(X_coord, Y_coord);
    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_WARRIOR) then fight_warrior(); end
      if( class == CLASS_MAGE) then fight_mage(); end
      can_rest = true;
    else
   
      rotate_cam();
      if( math.random(100) > 90 ) then
        move_forward(); end
    end
   
   
   
   
    if(have_pig == 0) then
    pickup();
    end
   
    -------- if you want more than 2 buffs you gotta duplicate and change one of these if statements
   
    if( buff_1 == 1 ) then
   if( buff1_needed ) then
          keyboardPress(buff_key1);
          print(os.date("buff 1 casted   %X"))
     buff1_needed = false;
     yrest(1000);
   end
    end
    if( buff_2 == 1 ) then
      if( buff2_needed ) then
        keyboardPress(buff_key2);
        print(os.date("buff 2 casted   %X"))
       buff2_needed = false;
       yrest(1000);
      end
    end
        if( buff_3 == 1 ) then
          if( buff3_needed ) then
            keyboardPress(buff_key3);
            print(os.date("buff 3 casted   %X"))
           buff3_needed = false;
           yrest(1000);
          end
    end
  end

  detach();
  closeProcess(proc);
end

startMacro(main);
-------------------------------------------------

Impala
Posts: 14
Joined: Mon Aug 18, 2008 6:58 pm

Re: Introducing Holic Online

#27 Post by Impala » Fri Sep 19, 2008 7:43 pm

This doesn't heal though

Code: Select all

-------------------------------------------------
--Holic Online Bot
--Mystikfox
--Hackbar
--Mangler
-------------------------------------------------
-- Variable declaration -- do not edit
-------------------------------------------------
CLASS_WARRIOR   = 0;
CLASS_MAGE      = 1;
HP              = 10000;
MP              = 10000;
SP              = 10000;


   
-------------------------------------------------


-------------------------------------------------
-- character configuration YOU HAVE TO CHANGE THIS STUFF FOR THE BOT TO WORK RIGHT
-------------------------------------------------
class           = CLASS_WARRIOR;
key_attack      = key.VK_1;
key_pickup      = key.VK_TILDE;
key_sit         = key.VK_F2;

key_skill1      = key.VK_2;
key_skill2      = key.VK_3;
key_skill3      = key.VK_4;

key_hppotion    = key.VK_7;
key_mppotion    = key.VK_F4;
key_sppotion    = key.VK_F3;

-- rest or use potions when low on HP/MP/SP
HP_potion    = 600;
MP_potion    = 40;
SP_potion    = 0;

HP_sit          = 40;
MP_sit          = 0;
SP_sit          = 0;

-- chance to cast
skill1_chance   = 80;
skill2_chance   = 80;
skill3_chance   = 0;

-- MP cost
skill1_cost     = 15;
skill2_cost     = 20;
skill3_cost     = 25;


have_pig        = 0;            -- set to 1 if you have a fortune pig and want to
            -- skip the manual pickup function   

-- buff stuff
-- NOTE:  set on 10 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
-------------------------

buff1_duration       = 1800000;
buff_1         = 1;
buff_key1               = key.VK_8;

buff2_duration       = 1800000;
buff_2               = 1;
buff_key2               = key.VK_9;

buff3_duration       = 1800000;
buff_3               = 1;
buff_key3               = key.VK_0;

--dont change these
buff1_needed    = true;
buff2_needed    = true;
buff3_needed    = true;




-- cast times in milliseconds
skill1_casttime        = 2000;
skill2_casttime        = 1000;
skill3_casttime        = 3000;

-- skill cool downs in milliseconds (not working)
skill1_cooldown        = 3000;
skill2_cooldown        = 8000;
skill3_cooldown        = 9000;
-------------------------------------------------

function hp_potion()
  keyboardPress(key_hppotion);
end

function mp_potion()
  keyboardPress(key_mppotion);
end

function sp_potion()
  keyboardPress(key_sppotion);
end

-- so we aren't spamming the attack key...
-- we will use a timer to press it once
-- every 3 seconds.
function attack_timer()
  keyboardPress(key_attack);
end

function fight_warrior()
  registerTimer("attack_timer", 3000, attack_timer);

  while( have_target() ) do
     
      local roll = math.random(100);

      if( roll <= skill1_chance and SP >= skill1_cost ) then
        keyboardPress(key_skill1);
        yrest(120);
      elseif( roll <= skill2_chance and SP >= skill2_cost ) then
        keyboardPress(key_skill2);
        yrest(120);
      elseif( roll <= skill3_chance  and SP >= skill3_cost ) then
        keyboardPress(key_skill3);
        yrest(120);
      else
        keyboardPress(key_attack);
        yrest(500);
      end
      yrest(250);
      coroutine.yield();
   end
  unregisterTimer("attack_timer");

  yrest(1000);
end

function fight_mage()
  while( have_target() ) do
   
    local roll = math.random(100);
    if( roll <= skill1_chance and MP >= skill1_cost ) then
      -- cast skill 1
      keyboardPress(key_skill1);
      yrest(skill1_casttime);
    else
      keyboardPress(key_attack);
    end
   
    if( roll <= skill2_chance and MP >= skill2_cost ) then
    -- cast skill 1
    keyboardPress(key_skill2);
    yrest(skill2_casttime);
    else
    keyboardPress(key_attack);
    end

    yrest(100);
    coroutine.yield();
  end

  yrest(1000);
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

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

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

-- pickup nearby items
function pickup()
  keyboardHold(key_pickup);
  yrest(50);
  keyboardRelease(key_pickup);
  yrest(775)
  keyboardHold(key_pickup);
  yrest(50);
  keyboardRelease(key_pickup);
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


function move_forward()
  keyboardHold(key.VK_W);
  if( math.random(100) >= 80 )
    then keyboardHold(key.VK_A);
  else if( math.random(100) >= 80 )
    then keyboardHold(key.VK_D); end
  end

  yrest( math.random(200) );

  keyboardRelease(key.VK_W);
  keyboardRelease(key.VK_A);
  keyboardRelease(key.VK_D);
end









-- update client variables by reading from it's memory
function update_vars()

-- SP = memoryReadIntPtr(proc, SP_ptr, SP_offset);

-- X_coord = memoryReadIntPtr(proc, X_ptr, X_offset);
-- Y_coord = memoryReadIntPtr(proc, Y_ptr, Y_offset);

end



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

  mouseSet(wx+512, wy+412);
  yrest(100);
  mouseRHold();
  yrest(200);
  mouseSet(wx+526, wy+412);
  yrest(100);
  mouseRRelease();
  yrest(100);
end



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




-- checks if you have a target
function have_target()
  r,g,b = getPixel(hdc, 579, 79);
  print(r,g,b);
  -- check for the blueish color in the monster's HP window
  if( r >= 18 and r <= 36 and g >= 34 and g <= 49 and b >= 93 and b<= 109 ) then
    return true;
  else
    return false;
  end
end

--function used to test the position and colour of the current pixel under the mouse
function pixeltest()
  x,y = mouseGetPos();
  print("mouse_x: ", x, "; mouse_y: ", y); -- display the coordinates of the mouse
  r,g,b = getPixel(hdc, x, y);
  print("R : ", r, "; G : ", g, "; B : ", b);
end



-------------------------------------------------
-- FUNCTION MAIN
-------------------------------------------------
function main()
  win = findWindow("HoLic Online");
  hdc = openDC(win);
  proc = openProcess( findProcessByExe("HolicUSA.exe") );
  attach(win);

  registerTimer("update_vars", 100, update_vars);
  registerTimer("buff1_timer", buff1_duration, buff1_timer);
  registerTimer("buff2_timer", buff2_duration, buff2_timer);


  --pixeltest();
  while( 1 ) do
    --pixeltest();
    print(X_coord, Y_coord);
    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_WARRIOR) then fight_warrior(); end
      if( class == CLASS_MAGE) then fight_mage(); end
      can_rest = true;
    else
   
      rotate_cam();
      if( math.random(100) > 90 ) then
        move_forward(); end
    end
   
   
   
   
    if(have_pig == 0) then
    pickup();
    end
   
    -------- if you want more than 2 buffs you gotta duplicate and change one of these if statements
   
    if( buff_1 == 1 ) then
   if( buff1_needed ) then
          keyboardPress(buff_key1);
          print(os.date("buff 1 casted   %X"))
     buff1_needed = false;
     yrest(1000);
   end
    end
    if( buff_2 == 1 ) then
      if( buff2_needed ) then
        keyboardPress(buff_key2);
        print(os.date("buff 2 casted   %X"))
       buff2_needed = false;
       yrest(1000);
      end
    end
        if( buff_3 == 1 ) then
          if( buff3_needed ) then
            keyboardPress(buff_key3);
            print(os.date("buff 3 casted   %X"))
           buff3_needed = false;
           yrest(1000);
          end
    end
  end

  detach();
  closeProcess(proc);
end

startMacro(main);
-------------------------------------------------

tgbhgf
Posts: 19
Joined: Wed Sep 10, 2008 3:10 am

Re: Introducing Holic Online

#28 Post by tgbhgf » Tue Sep 30, 2008 3:46 pm

xD any new scripts?

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests