World of Kung Fu Script help

You may request or share scripts for MicroMacro in this forum.
Post Reply
Message
Author
Blackmusky
Posts: 5
Joined: Sat Dec 13, 2008 6:57 pm

World of Kung Fu Script help

#1 Post by Blackmusky » Thu Dec 18, 2008 9:54 pm

I am trying to get this damn script to work. Can anyone help me out?

Log.txt
----------TRACEBACK END----------

Thu Dec 18 20:43:44 2008 : ...tor\Desktop\micromacro\micromacro\scripts\kungfu.lua:307: bad argument #2 to 'memoryReadIntPtr' ((null))
Thu Dec 18 20:43:44 2008 : Execution of kungfu.lua complete.
Thu Dec 18 20:43:44 2008 : Execution error: Runtime error
Thu Dec 18 20:43:44 2008 : Collecting garbage...
Thu Dec 18 20:43:44 2008 : GC closed process handle 0xB0.
Thu Dec 18 20:43:44 2008 : GC closed device context handle 0x1FDE9F8.
Thu Dec 18 20:43:44 2008 : 37KB freed.

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 = "005F3608";
HP_offset = 122;


MP_ptr = "005EE608";
MP_offset = 24;


SP_ptr = "005EE608";
SP_offset = 100;



--new map functions
-----------------------------

X_coord = 10000;
Y_coord = 10000;


X_ptr = "005EE6B0";
X_offset = 100;

Y_ptr = "005EE6B0";
Y_offset = 104;



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


-------------------------------------------------
-- 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_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 = 500;
MP_potion = 40;
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 = 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 = 600000;
buff_1 = 1;
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

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+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( 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 1 casted %X"))
buff1_needed = false;
yrest(1000);
end
end
end

detach();
closeProcess(proc);
end

startMacro(main);

vvayinsane
Posts: 148
Joined: Fri Mar 21, 2008 9:10 pm

Re: World of Kung Fu Script help

#2 Post by vvayinsane » Thu Dec 18, 2008 10:42 pm

Hey dude i dont play the game but it looks like some of the points and offset have changed.

Blackmusky
Posts: 5
Joined: Sat Dec 13, 2008 6:57 pm

Re: World of Kung Fu Script help

#3 Post by Blackmusky » Fri Dec 19, 2008 7:30 pm

Was hoping someone had the new offset for this version :)

Blackmusky
Posts: 5
Joined: Sat Dec 13, 2008 6:57 pm

Re: World of Kung Fu Script help

#4 Post by Blackmusky » Tue Dec 23, 2008 12:28 am

Anyone??? Can anyone help me??? :shock: :shock: :shock: :o :o :o

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests