Code: Select all
HP_ptr = "005FE608";
HP_offset = 192;
MP_ptr = "005FE608";
MP_offset = 200;
victor_leong
gr8_viruz
Someone please verify
Code: Select all
HP_ptr = "005FE608";
HP_offset = 192;
MP_ptr = "005FE608";
MP_offset = 200;
Code: Select all
-------------------------------------------------
--World of Kung Fu Bot
--Mystikfox
--Hackbar
--Mangler
-------------------------------------------------
-- Variable declaration -- do not edit
-------------------------------------------------
CLASS_WARRIOR = 0;
CLASS_MAGE = 1;
CLASS_BOW = 3;
HP = 10000;
MP = 10000;
SP = 10000;
HP_ptr = "005EE608";
HP_offset = 192;
MP_ptr = "005EE608";
MP_offset = 200;
SP_ptr = "020F2910";
SP_offset = 312;
-------------------------------------------------
-------------------------------------------------
-- character configuration YOU HAVE TO CHANGE THIS STUFF FOR THE BOT TO WORK RIGHT
-------------------------------------------------
class = CLASS_BOW;
key_attack = key.VK_1;
key_pickup = key.VK_TILDE;
key_sit = key.VK_Z;
key_skill1 = key.VK_2;
key_skill2 = key.VK_3;
key_skill3 = key.VK_4;
key_hppotion = key.VK_F1;
key_mppotion = key.VK_F2;
key_sppotion = key.VK_F3;
-- rest or use potions when low on HP/MP/SP
HP_potion = 250;
MP_potion = 80;
SP_potion = 0;
HP_sit = 300;
MP_sit = 100;
SP_sit = 0;
-- chance to cast
skill1_chance = 100;
skill2_chance = 80;
skill3_chance = 50;
-- MP cost
skill1_cost = 10;
skill2_cost = 5;
skill3_cost = 6;
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 = 300000;
buff_1 = 0;
buff_key1 = key.VK_6;
buff2_duration = 600000;
buff_2 = 0;
buff_key2 = key.VK_7;
--dont change these
buff1_needed = true;
buff2_needed = true;
-- cast times in milliseconds
skill1_casttime = 2000;
skill2_casttime = 2000;
skill3_casttime = 3000;
-- skill cool downs in milliseconds (not working)
skill1_cooldown = 3000;
skill2_cooldown = 1000;
skill3_cooldown = 5000;
-------------------------------------------------
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
keyboardPress(key_skill1);
yrest(120);
keyboardPress(key_skill2);
yrest(120);
keyboardPress(key_skill3);
yrest(120);
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
function fight_bow()
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
keyboardPress(key_skill1);
yrest(120);
keyboardPress(key_skill2);
yrest(120);
keyboardPress(key_skill3);
yrest(120);
coroutine.yield();
end
unregisterTimer("attack_timer");
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 enhanced
function pickup()
keyboardHold(key_pickup);
yrest(50);
keyboardRelease(key_pickup);
yrest(775)
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(2000) );
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);
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
-- 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, 506, 31);
--print(r,g,b); unneeded testcode
-- check for the goldish color in the monster's HP window
if( r >= 205 and r <= 225 and g >= 205 and g <= 230 and b >= 185 and b<= 200 ) then
return true;
else
return false;
end
end
-------------------------------------------------
-- FUNCTION MAIN
-------------------------------------------------
function main()
win = findWindow("Kungfu Client");
hdc = openDC(win);
proc = openProcess( findProcessByExe("GongfuClient.exe") );
attach(win);
registerTimer("update_vars", 100, update_vars);
registerTimer("buff1_timer", buff1_duration, buff1_timer);
registerTimer("buff2_timer", buff2_duration, buff2_timer);
--pixeltest(); commented test code
while( 1 ) do
if( HP == 0 ) then death_return(); end
if( HP < HP_potion ) then hp_potion(); end
if( MP < MP_potion ) then mp_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
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
if( class == CLASS_BOW) then fight_bow(); 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( 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 1 casted %X"))
buff1_needed = false;
yrest(1000);
end
end
end
detach();
closeProcess(proc);
end
startMacro(main);
-------------------------------------------------
Addresses as a string have been deprecated for a long time. They would need to follow the form 0x005EE608, however, that won't work either as the address has still changed.HP_ptr = "005EE608";
HP_offset = 192;
Code: Select all
Tue Nov 25 16:23:46 2008 : MicroMacro v0.99
Tue Nov 25 16:23:46 2008 : Processor Type: 586, OS: Windows XP Service Pack 3
Tue Nov 25 16:23:46 2008 : Lua initialized successfully.
Tue Nov 25 16:23:46 2008 : Lua libs opened successfully.
Tue Nov 25 16:23:46 2008 : LuaCoco is available.
Tue Nov 25 16:23:46 2008 : Lua glues exported.
Tue Nov 25 16:23:46 2008 : Keyboard layout: US English
Tue Nov 25 16:23:46 2008 : Configurations run.
Tue Nov 25 16:23:55 2008 : Executing script "kungfubow1.lua".
==================================================
stack traceback:
.\Bureaublad\wokf\micromacro\lib\lib.lua:476: in function 'startMacro'
..\Bureaublad\wokf\micromacro\scripts\kungfubow1.lua:427: in main chunk
----------TRACEBACK END----------
Tue Nov 25 16:24:09 2008 ...\Bureaublad\wokf\micromacro\scripts\kungfubow1.lua:310: bad argument #2 to 'memoryReadIntPtr' ((null))
Tue Nov 25 16:24:09 2008 : Execution of kungfubow1.lua complete.
Tue Nov 25 16:24:09 2008 : Execution error: Runtime error
Tue Nov 25 16:24:09 2008 : Collecting garbage...
Tue Nov 25 16:24:09 2008 : 54KB freed.
Code: Select all
HP_ptr = "005EE608";
Code: Select all
-------------------------------------------------
--World of Kung Fu Bot
--Mystikfox
--Hackbar
--Mangler
-------------------------------------------------
-- Variable declaration -- do not edit
-------------------------------------------------
CLASS_WARRIOR = 0;
CLASS_MAGE = 1;
HP = 10000;
MP = 10000;
SP = 10000;
HP_ptr = 0x005EE608;
HP_offset = 192;
MP_ptr = 0x005EE608;
MP_offset = 200;
SP_ptr = 0x020F2910;
SP_offset = 312;
-------------------------------------------------
-------------------------------------------------
-- character configuration YOU HAVE TO CHANGE THIS STUFF FOR THE
BOT TO WORK RIGHT
-------------------------------------------------
class = CLASS_Spear;
key_attack = key.VK_1;
key_pickup = key.VK_TILDE;
key_sit = key.VK_Z;
key_skill1 = key.VK_2;
key_skill2 = key.VK_3;
key_skill3 = key.VK_4;
key_hppotion = key.VK_F1;
key_mppotion = key.VK_F2;
key_sppotion = key.VK_F3;
-- rest or use potions when low on HP/MP/SP
HP_potion = 40;
MP_potion = 0;
SP_potion = 0;
HP_sit = 40;
MP_sit = 0;
SP_sit = 0;
-- chance to cast
skill1_chance = 100;
skill2_chance = 80;
skill3_chance = 0;
-- MP cost
skill1_cost = 38;
skill2_cost = 20;
skill3_cost = 80;
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 "1" with "1"
-- scrolls can be used too as buff
-------------------------
buff1_duration = 600000;
buff_1 = 0;
buff_key1 = key.VK_8;
buff2_duration = 600000;
buff_2 = 0;
buff_key2 = key.VK_9;
--dont change these
buff1_needed = true;
buff2_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
keyboardPress(key_skill1);
yrest(120);
keyboardPress(key_skill2);
yrest(120);
keyboardPress(key_skill3);
yrest(120);
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(2000) );
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);
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
-- 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, 506, 31);
--print(r,g,b); unneeded testcode
-- check for the goldish color in the monster's HP window
if( r >= 205 and r <= 225 and g >= 205 and g <= 230 and b >= 185
and b<= 200 ) then
return true;
else
return false;
end
end
-------------------------------------------------
-- FUNCTION MAIN
-------------------------------------------------
function main()
win = findWindow("Kungfu Client");
hdc = openDC(win);
proc = openProcess( findProcessByExe("GongfuClient.exe") );
attach(win);
registerTimer("update_vars", 100, update_vars);
registerTimer("buff1_timer", buff1_duration, buff1_timer);
registerTimer("buff2_timer", buff2_duration, buff2_timer);
--pixeltest(); commented test code
while( 1 ) do
if( HP == 0 ) then death_return(); end
if( HP < HP_potion ) then hp_potion(); end
if( MP < MP_potion ) then mp_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
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( 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 1 casted %X"))
buff1_needed = false;
yrest(1000);
end
end
end
detach();
closeProcess(proc);
end
startMacro(main);
-------------------------------------------------
Users browsing this forum: No registered users and 5 guests