Introducing Holic Online
Re: Introducing Holic Online
For the time being you can use the one that doesn't heal...I will find some different pointers
Re: Introducing Holic Online
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
=( please help
Re: Introducing Holic Online
there's 2 different scripts and I know the first one works but it doesn't heal
Re: Introducing Holic Online
i tried all the scripts in this tread but no use T_T
Re: Introducing Holic Online
You are doing something wrong because I know the one without the health refill works. 100% sure
Re: Introducing Holic Online
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.
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);
-------------------------------------------------
Re: Introducing Holic Online
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);
-------------------------------------------------
Re: Introducing Holic Online
xD any new scripts?
Who is online
Users browsing this forum: No registered users and 5 guests