[Help] Fiesta Bot Resolution

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
Goldensage1
Posts: 4
Joined: Mon Feb 25, 2008 12:29 am

[Help] Fiesta Bot Resolution

#1 Post by Goldensage1 » Mon Feb 25, 2008 12:32 am

Whenever i run, i get the error: must be run in 1024*768!!! I have vista premium and has turned on compatibility mode and admin priv.

I've already disabled X-trap.
My code:

Code: Select all

-- Credits:
--   A. M.  "MystikFox"
--          "Mangler"


version = getVersion();
if( version < 96 ) then
  printf("ERROR! You are using an old version of MicroMacro that is not compatable with this script.\n");
  printf("Please download a newer version from http://solarimpact.servegame.com\n");
  return;
end;

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


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


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

key_scroll1 	= key.VK_9; 	-- offensive and defensive spells...
key_scroll2 	= key.VK_0; 	-- 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_3;     -- CLERICS: map this to your heal spell
key_hpstone 	= key.VK_Q;
key_sppotion 	= key.VK_4;
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		= 1;
scroll2_duration 	= 3500000;
scroll_2         	= 1;
scroll3_duration 	= 3500000;
scroll_3	       	= 0;
scroll4_duration 	= 3500000;
scroll_4	       	= 0;
-------------------------


-- Buff settings (only for clerics)
-------------------------
buff1_duration 		= 3500000;
buff_1			= 1;
buff2_duration 		= 3500000;
buff_2         		= 1;
buff3_duration 		= 3500000;
buff_3	       		= 0;
buff4_duration 		= 3500000;
buff_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 	  = "00758FE7";
HPmax_addr        = "007590B8";
SP_addr 	  = "00758FEB";
SPmax_addr        = "007590BC";
restcheck_addr    = "01F66B04";
HP 		  = 10000; 	-- default, this corrects itself (don't change it!)
HPmax             = HP; 	-- default, this corrects itself (don't change it!)
SP 		  = 10000;	-- default, this corrects itself (don't change it!)
SPmax             = SP;         -- default, this corrects itself (don't change it!)
buff1_needed 	  = true;
buff2_needed 	  = true;
buff3_needed 	  = true;
buff4_needed 	  = true;
scroll1_needed 	  = true;
scroll2_needed 	  = true;
scroll3_needed 	  = true;
scroll4_needed 	  = true;
need_heal 	  = false;
can_rest 	  = true;
-------------------------


function fight_timer()
  keyboardHold(key_attack);
  yrest(50);
  keyboardRelease(key_attack);
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_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 hp_stone(); end

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

    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

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

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

  can_rest = false;
  registerTimer("can_rest_timer", 3000, can_rest_timer);

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);

  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,8 do
    pickup();
    yrest(50);
  end

  can_rest = false;
  registerTimer("can_rest_timer", 3000, can_rest_timer);
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 hp_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

  can_rest = false;
  registerTimer("can_rest_timer", 3000, can_rest_timer);
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 hp_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

  can_rest = false;
  registerTimer("can_rest_timer", 3000, can_rest_timer);
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_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


-- 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);
  yrest(50);
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()
  local r,g,b = getPixel(hdc, 540, 1);

  -- 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);
  HPmax = memoryReadInt(proc, HPmax_addr);
  SP = memoryReadInt(proc, SP_addr);
  SPmax = memoryReadInt(proc, SPmax_addr);
end


-- toggle can_heal to true, disable timer
function can_rest_timer()
  unregisterTimer("can_rest_timer");
  can_rest = true;
end

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

  printf("Entering rest state\t%s\n", os.date("%X"));

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

  need_heal = true;
  last_hp = HP;
  while( need_heal ) do
    yrest(100);

    if( HP == HPmax and SP == SPmax ) then
      need_heal = false;
    end;

    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

  -- BROKEN!! IGNORE THIS!
  --while( 1 ) do
  --  keyboardHold(key.VK_HOME);
  --  yrest(500);
  --  keyboardRelease(key.VK_HOME);
  --
  --  yrest(500);
  --  local val = memoryReadByte(proc, restcheck_addr);
  --  printf("Rest check val: %d\n", val);
  --
  --  if( val ~= 1 ) then -- 1 = resting, 2 = standing
  --    break; end;       -- so if not resting, exit
  --end

  printf("Exiting rest state\t%s\n", os.date("%X"));
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");
  local wx,wy,ww,wh = windowRect(win);

  if( ww ~= 1024 or wh ~= 768 ) then
    printf("Error! You must run Fiesta in 1024*768 resolution.\n");
    return;
  end;

  if( win == 0 ) then printf("Error! Could not locate Fiesta window!\n"); return; end;
  hdc = openDC(win);
  proc = openProcess( findProcess("FiestaOnline") );
  attach(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);

User avatar
Administrator
Site Admin
Posts: 5307
Joined: Sat Jan 05, 2008 4:21 pm

Re: [Help] Fiesta Bot Resolution

#2 Post by Administrator » Mon Feb 25, 2008 1:46 am

Is the game running in 1024*768 resolution? Fullscreen or windowed?

Goldensage1
Posts: 4
Joined: Mon Feb 25, 2008 12:29 am

Re: [Help] Fiesta Bot Resolution

#3 Post by Goldensage1 » Mon Feb 25, 2008 6:16 pm

Yes, I've tried both in windowed and fullscreen mode. The game is running in 1024 by 768

User avatar
Administrator
Site Admin
Posts: 5307
Joined: Sat Jan 05, 2008 4:21 pm

Re: [Help] Fiesta Bot Resolution

#4 Post by Administrator » Tue Feb 26, 2008 7:09 am

Must be because of Vista being goofy and useless again.
You can disable the check by removing this code:

Code: Select all

  if( ww ~= 1024 or wh ~= 768 ) then
    printf("Error! You must run Fiesta in 1024*768 resolution.\n");
    return;
  end;
Lets just hope that's the only error.

Goldensage1
Posts: 4
Joined: Mon Feb 25, 2008 12:29 am

Re: [Help] Fiesta Bot Resolution

#5 Post by Goldensage1 » Tue Feb 26, 2008 6:49 pm

Oh! now its working...But can u make it so u'll log out when u die, and then log back in to respawn with 1 hp? I'm a a cleric

User avatar
Administrator
Site Admin
Posts: 5307
Joined: Sat Jan 05, 2008 4:21 pm

Re: [Help] Fiesta Bot Resolution

#6 Post by Administrator » Tue Feb 26, 2008 7:14 pm

That would be pretty difficult to do. At least, to do it right. You can have the bot press ALT+F4 to close the game, position the mouse on the login button and click it, then wait till it fully loads, select the server, select the character, wait again... I think you see where this is going.

Goldensage1
Posts: 4
Joined: Mon Feb 25, 2008 12:29 am

Re: [Help] Fiesta Bot Resolution

#7 Post by Goldensage1 » Tue Feb 26, 2008 10:14 pm

Can u make a script where u use different heals at different healths, like heal(1) at 300, heal (2) at 250...so on? Cause when i do boss battles i dont have time to calculate my heals. I want to fight myself, so it must only heal.

User avatar
Administrator
Site Admin
Posts: 5307
Joined: Sat Jan 05, 2008 4:21 pm

Re: [Help] Fiesta Bot Resolution

#8 Post by Administrator » Tue Feb 26, 2008 10:27 pm

It should switch between heal and stone. I'm not sure if this glitch still exists in Fiesta, but you heals, potions, and stones used to interfere with each others' cooldown, so you could just alternate between potion and stone, and heal as fast as you want without having to worry about cooldowns.

charms
Posts: 7
Joined: Wed Mar 12, 2008 1:05 pm

Re: [Help] Fiesta Bot Resolution

#9 Post by charms » Wed Mar 12, 2008 1:20 pm

Goldensage1 wrote:Can u make a script where u use different heals at different healths, like heal(1) at 300, heal (2) at 250...so on? Cause when i do boss battles i dont have time to calculate my heals. I want to fight myself, so it must only heal.
Well u can try to make another heal but you need to create anothe VK and all that I created another buff with a duration of 14 seconds and a ramdom times after HP is lower than some point. Also you can actiivate the HP stone button to convinate with the heal and there you have it 3 heals almost a immortal Cleric!!!

Post Reply

Who is online

Users browsing this forum: No registered users and 30 guests