Sign in to follow this  
Followers 0
marian001

Facebook Farmville automation

502 posts in this topic

Farmville is a nice Facebook game (made in Flash) were you take care of your farm. It requires a lot of "work".. so I decided to automate it. That allows me to e.g. brush me teeth while watching how my farm is taken care of instead of never-ending clicking...

Before you run this:

- since I don't know how to control Flash app from autoit, this is just about knowing where to click, so your screen resolution, flash app position etc. must match mine (or you can make adjustments yourself)

- optimalized for 1280x800 screens and IE7 (without additional toolbars) running on Vista

- unexpected popup windows within flash are not handled, so you might need to stop script execution manually

- to stop script execution at any time, press ESC; otherwise don't move your mouse until script finishes

- you have to setup your field corner coordinates (when the application is in full-screen mode and twice zoomed out); I suggest you use ScriptWriter for this; to find a coordinates of a field tile, use its middle point

- you may enter you login (email) and password to enable automatic login

- this script assumes you have one plant planted on whole field

- ...more info in script

Features

- following actions are available: _Harvest, _Plow, _Plant, _Restore

- _Harvest - harvests whole field

- _Plow - plows whole field

- _Plant(screen, item) - buys item number 'item' (1-6) from screen number 'screen' within plants offered in market

- _Restore - for cases when you have to stop script (e.g. because of popup window) restore feature is available; every from above action writes its state into ini file after each click - this file is used to provide information for restore function; if you choose to run restore function, it will only finish unfinished job (e.g. buys last bought item and finishes planting) - no further tasks will be executed

Bonus

- I am including excel with comparison of items (incomplete...)

Version 1.0

facebook_farmville.zip

enjoy your farm... any improvements are welcome..

Marian

Share this post


Link to post
Share on other sites



It looks really good, trying to mod it for my computer but i hoep to get it working!

maybe there is a way to make it also just loop and have a wait time that you enter in when configuring, like starberries wait 4.05 hrs to start picking again.

Share this post


Link to post
Share on other sites

I found out that you can perform jobs at your friends farms with this:

$oIE = _IECreate ("http://apps.facebook.com/onthefarm/index.php?mission=weeds&friendId=" & $FriendID,1)
_IELoadWait ($oIE)

you can get friend IDs by hovering over their names in the "My Neighbors" tab. I tried multiple windows but game goes out of sync.

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

FYI: If you want to know all the games settings you can download the xml loaded by the flash game at:

http://facebook2.farmville.static.zynga.com/current/v4415/gameSettings.xml

I've found that you can edit the moveSpeed setting using a _MemoryWrite but I haven't figured out how to reliably locate the offset.

edit: Updated link to reflect version change.

Edited by Zinthose

--- TTFN

Share this post


Link to post
Share on other sites

FYI: If you want to know all the games settings you can download the xml loaded by the flash game at:

http://facebook2.farmville.static.zynga.com/current/v4299/gameSettings.xml

I've found that you can edit the moveSpeed setting using a _MemoryWrite but I haven't figured out how to reliably locate the offset.

awesome info, looking through the plants and levels, cant wait for more stuff comes out for automating >_<

Share this post


Link to post
Share on other sites

FYI: If you want to know all the games settings you can download the xml loaded by the flash game at:

http://facebook2.farmville.static.zynga.com/current/v4299/gameSettings.xml

I've found that you can edit the moveSpeed setting using a _MemoryWrite but I haven't figured out how to reliably locate the offset.

I haven't played the game yet. But is it possible to edit where the game thinks the config file is? Possibly using the page source? (Not sure, haven't played it yet)


[left][sub]We're trapped in the belly of this horrible machine.[/sub][sup]And the machine is bleeding to death...[/sup][sup][/sup][/left]

Share this post


Link to post
Share on other sites

I haven't played the game yet. But is it possible to edit where the game thinks the config file is? Possibly using the page source? (Not sure, haven't played it yet)

I've intercepted the header call using the firefox plugin Tamper, but I haven't figured out how to redirect the contents on the xml without a network sniffer or proxy hack.

I have a script running now that repeativly plows a plot of land plants strawberries then repeats.. this allows me to get 2xp per 25 coins but I've noticed that I'm finding the 100+ coin bonus being found after almost every plow. gone from level 17 to lvl 27 in just 4 days with the script running intermittently. I'll post the script here after I get some of the bugs worked out..


--- TTFN

Share this post


Link to post
Share on other sites

I've intercepted the header call using the firefox plugin Tamper, but I haven't figured out how to redirect the contents on the xml without a network sniffer or proxy hack.

I have a script running now that repeativly plows a plot of land plants strawberries then repeats.. this allows me to get 2xp per 25 coins but I've noticed that I'm finding the 100+ coin bonus being found after almost every plow. gone from level 17 to lvl 27 in just 4 days with the script running intermittently. I'll post the script here after I get some of the bugs worked out..

awesome dude that would be amazing :]

i have been trying to WPE pro and CE 5.5 farmville for acouple days, unlike the other zynga games, this one is tough..

Share this post


Link to post
Share on other sites

anyone know how to extract the game music haha that would be epic besides the fact of autoit the whole field :D

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

I've intercepted the header call using the firefox plugin Tamper, but I haven't figured out how to redirect the contents on the xml without a network sniffer or proxy hack.

I have a script running now that repeativly plows a plot of land plants strawberries then repeats.. this allows me to get 2xp per 25 coins but I've noticed that I'm finding the 100+ coin bonus being found after almost every plow. gone from level 17 to lvl 27 in just 4 days with the script running intermittently. I'll post the script here after I get some of the bugs worked out..

Okay. Tamper is epic. I'm gonna try and hack farmville with it, and will post back with the results and the process.

EDIT: What the hell? You can't 'Tamper' where it's getting the resource from? I thought that was like the whole purpose of the 'Tamper' ability....Anybody know any other extensions that can edit where the resource is?

Posted Image

Edited by Firestorm

[left][sub]We're trapped in the belly of this horrible machine.[/sub][sup]And the machine is bleeding to death...[/sup][sup][/sup][/left]

Share this post


Link to post
Share on other sites

i got an idea, can someone think up an autoit to just refresh My Neighbors, and click it when it says Go To ___'s Farm, then accept the weeding,scaring crows and click back to my neighbors until it finds go to again?

Share this post


Link to post
Share on other sites

#14 ·  Posted (edited)

i did automate Farmville using controlclick. but it didnt work out as they keep updating it all!

I might re-do it.

Maybe we should packet edit?

Edited by Rorka

Share this post


Link to post
Share on other sites

I didn't want to create a new thread for the same kind of program, so I figured that I would post my alternative take on a Facebook Farmville click script here.

All this program does is automate the clicking process, with variable speeds, columns, and rows, and has hotkeys to make it quicker. This script was really great before they nerfed the instant farm technique, but it's still a time saver for me to this day.

I guess I should also note that this is made to work with Farmville when it's fully zoomed out. Take it or leave it, I just felt like sharing.

;*** Farmville Bot
; v2009-07-30 - Now has a GUI, a target button, and optional avoidance of spawning square.
; v2009-07-31 - Added a Mouse Speed variable, made the GUI look better
; v2009-08-23 - Reworked the entire script to use hotkeys and a variable harvest area
; v2009-08-24 - Finished the rewrite, cleaned and compacted the code, added Help button

; Just some things to remember...
; When zoomed all the way out, the below are true...
; Moving across columns, x+25, y-12
; Moving down rows, x+25, y+12

;*** Design Goals
; 1. Create a better looking interface



; Includes
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

; Define a few (global) variables
$script_x = 0
$script_y = 0
$script_speed = 25
$script_size_columns = 4
$script_size_rows = 4
$script_running = 0

; Hotkeys
HotKeySet("{HOME}", "set_position")
HotKeySet("{INSERT}", "start_script")
HotKeySet("{DELETE}", "stop_script")

; Hotkey Functions
Func set_position()
    $script_x = MouseGetPos(0)
    $script_y = MouseGetPos(1)
    
    GUICtrlSetData($label_coordinate_x, $script_x)
    GUICtrlSetData($label_coordinate_y, $script_y)
EndFunc

Func start_script()
    GUICtrlSetColor($graphic_background, "0x33FF33")
;~  GUICtrlSetBkColor($button_help, "0x33FF33")
    $script_running = 1
EndFunc

Func stop_script()
    GUICtrlSetColor($graphic_background, "0xF0F0F0")
;~  GUICtrlSetBkColor($button_help, "0xF0F0F0")
    $script_running = 0
EndFunc



$window_main = GUICreate("Farmville Bot", 200, 165)
$graphic_background = GUICtrlCreateGraphic(0, 0, 200, 165)
GUICtrlSetState($graphic_background, $GUI_DISABLE)

GUICtrlCreateGroup("Coordinates", 5, 5, 75, 60)
GUICtrlCreateLabel("X:", 20, 25, 50)
GUICtrlCreateLabel("Y:", 20, 40, 50)
$label_coordinate_x = GUICtrlCreateLabel($script_x, 40, 25, 30)
$label_coordinate_y = GUICtrlCreateLabel($script_y, 40, 40, 30)

$button_help = GUICtrlCreateButton("Help", 15, 95, 75, 45)

GUICtrlCreateGroup("Size", 90, 5, 105, 61)
GUICtrlCreateLabel("Columns:", 98, 20)
$input_size_columns = GUICtrlCreateInput($script_size_columns, 145, 18, 40, 20)
$updown_size_columns = GUICtrlCreateUpdown($input_size_columns)
GUICtrlSetLimit($updown_size_columns, 20, 1)
GUICtrlCreateLabel("Rows:", 98, 42)
$input_size_rows = GUICtrlCreateInput($script_size_rows, 145, 40, 40, 20)
$updown_size_rows = GUICtrlCreateUpdown($input_size_rows)
GUICtrlSetLimit($updown_size_rows, 20, 1)

GUICtrlCreateGroup("Mouse Speed", 110, 75, 85, 85)
$input_speed = GUICtrlCreateInput($script_speed, 125, 95, 50, 20, $ES_CENTER)
$updown_speed = GUICtrlCreateUpdown($input_speed)
GUICtrlSetLimit($updown_speed, 50, 1)
$button_speed_1 = GUICtrlCreateButton("1", 115, 120, 25, 15)
$button_speed_5 = GUICtrlCreateButton("5", 140, 120, 25, 15)
$button_speed_10 = GUICtrlCreateButton("10", 165, 120, 25, 15)
$button_speed_15 = GUICtrlCreateButton("15", 115, 140, 25, 15)
$button_speed_25 = GUICtrlCreateButton("25", 140, 140, 25, 15)
$button_speed_50 = GUICtrlCreateButton("50", 165, 140, 25, 15)


$window_help = GUICreate("Help", 170, 65, -1, -1, -1, 0, $window_main)
GUICtrlCreateLabel("Home = Set starting coordinates", 10, 5)
GUICtrlCreateLabel("Insert = Start the script", 10, 25)
GUICtrlCreateLabel("Delete = Stop the script", 10, 45)


GUISetState(@SW_SHOW, $window_main)


While 1
    If $script_running Then
        ; Seriously, why is this even necessary...?
        $script_size_columns = GUICtrlRead($input_size_columns)
        $script_size_rows = GUICtrlRead($input_size_rows)
        
        farm()
    EndIf
        
    $script_speed = GUICtrlRead($input_speed)
    $gui_msg = GUIGetMsg(1)
    
    Select
        Case $gui_msg[0] = $GUI_EVENT_CLOSE
            If $gui_msg[1] = $window_main Then
                ExitLoop
            ElseIf $gui_msg[1] = $window_help Then
                GUISetState(@SW_HIDE, $window_help)
            EndIf
        Case $gui_msg[0] = $button_help
            GUISetState(@SW_SHOW, $window_help)
        Case $gui_msg[0] = $button_speed_1
            GUICtrlSetData($input_speed, "1")
        Case $gui_msg[0] = $button_speed_5
            GUICtrlSetData($input_speed, "5")
        Case $gui_msg[0] = $button_speed_10
            GUICtrlSetData($input_speed, "10")
        Case $gui_msg[0] = $button_speed_15
            GUICtrlSetData($input_speed, "15")
        Case $gui_msg[0] = $button_speed_25
            GUICtrlSetData($input_speed, "25")
        Case $gui_msg[0] = $button_speed_50
            GUICtrlSetData($input_speed, "50")
    EndSelect

    Sleep(25)
WEnd

Func farm()
    ; Some (local) variables
    $current_x = $script_x
    $current_y = $script_y
    
    For $current_row = 1 To $script_size_rows Step 1
        For $current_column = 1 To $script_size_columns Step 1
            MouseClick("primary", $current_x, $current_y, 1, $script_speed)
            
            $current_x = $current_x + 25
            $current_y = $current_y - 12
            
            If Not $script_running Then ExitLoop
        Next
        
        ; Reset to beginning of row
        $current_x = $current_x - (25 * $script_size_columns)
        $current_y = $current_y - (-12 * $script_size_columns)
        
        ; Advance to the next row
        $current_x = $current_x + 25
        $current_y = $current_y + 12
        
        If Not $script_running Then ExitLoop
    Next
    
    ; Stop running now
    stop_script()
EndFunc

Share this post


Link to post
Share on other sites

I didn't want to create a new thread for the same kind of program, so I figured that I would post my alternative take on a Facebook Farmville click script here.

All this program does is automate the clicking process, with variable speeds, columns, and rows, and has hotkeys to make it quicker. This script was really great before they nerfed the instant farm technique, but it's still a time saver for me to this day.

I guess I should also note that this is made to work with Farmville when it's fully zoomed out. Take it or leave it, I just felt like sharing.

nerfed instant farm? you can still stick your character between haybales to farm unless u mean something different

Share this post


Link to post
Share on other sites

nerfed instant farm? you can still stick your character between haybales to farm unless u mean something different

Your character doesn't move around the screen when doing that, but the instant farming (no Harvesting progress bar above your character's head) is gone.

Share this post


Link to post
Share on other sites

Your character doesn't move around the screen when doing that, but the instant farming (no Harvesting progress bar above your character's head) is gone.

oh i c i c, well awesome script dude !

Share this post


Link to post
Share on other sites

#19 ·  Posted (edited)

OPS Double Please Delite this one

Edited by Eliran

Share this post


Link to post
Share on other sites

I didn't want to create a new thread for the same kind of program, so I figured that I would post my alternative take on a Facebook Farmville click script here.

All this program does is automate the clicking process, with variable speeds, columns, and rows, and has hotkeys to make it quicker. This script was really great before they nerfed the instant farm technique, but it's still a time saver for me to this day.

I guess I should also note that this is made to work with Farmville when it's fully zoomed out. Take it or leave it, I just felt like sharing.

;*** Farmville Bot
; v2009-07-30 - Now has a GUI, a target button, and optional avoidance of spawning square.
; v2009-07-31 - Added a Mouse Speed variable, made the GUI look better
; v2009-08-23 - Reworked the entire script to use hotkeys and a variable harvest area
; v2009-08-24 - Finished the rewrite, cleaned and compacted the code, added Help button

; Just some things to remember...
; When zoomed all the way out, the below are true...
; Moving across columns, x+25, y-12
; Moving down rows, x+25, y+12

;*** Design Goals
; 1. Create a better looking interface



; Includes
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

; Define a few (global) variables
$script_x = 0
$script_y = 0
$script_speed = 25
$script_size_columns = 4
$script_size_rows = 4
$script_running = 0

; Hotkeys
HotKeySet("{HOME}", "set_position")
HotKeySet("{INSERT}", "start_script")
HotKeySet("{DELETE}", "stop_script")

; Hotkey Functions
Func set_position()
    $script_x = MouseGetPos(0)
    $script_y = MouseGetPos(1)
    
    GUICtrlSetData($label_coordinate_x, $script_x)
    GUICtrlSetData($label_coordinate_y, $script_y)
EndFunc

Func start_script()
    GUICtrlSetColor($graphic_background, "0x33FF33")
;~  GUICtrlSetBkColor($button_help, "0x33FF33")
    $script_running = 1
EndFunc

Func stop_script()
    GUICtrlSetColor($graphic_background, "0xF0F0F0")
;~  GUICtrlSetBkColor($button_help, "0xF0F0F0")
    $script_running = 0
EndFunc



$window_main = GUICreate("Farmville Bot", 200, 165)
$graphic_background = GUICtrlCreateGraphic(0, 0, 200, 165)
GUICtrlSetState($graphic_background, $GUI_DISABLE)

GUICtrlCreateGroup("Coordinates", 5, 5, 75, 60)
GUICtrlCreateLabel("X:", 20, 25, 50)
GUICtrlCreateLabel("Y:", 20, 40, 50)
$label_coordinate_x = GUICtrlCreateLabel($script_x, 40, 25, 30)
$label_coordinate_y = GUICtrlCreateLabel($script_y, 40, 40, 30)

$button_help = GUICtrlCreateButton("Help", 15, 95, 75, 45)

GUICtrlCreateGroup("Size", 90, 5, 105, 61)
GUICtrlCreateLabel("Columns:", 98, 20)
$input_size_columns = GUICtrlCreateInput($script_size_columns, 145, 18, 40, 20)
$updown_size_columns = GUICtrlCreateUpdown($input_size_columns)
GUICtrlSetLimit($updown_size_columns, 20, 1)
GUICtrlCreateLabel("Rows:", 98, 42)
$input_size_rows = GUICtrlCreateInput($script_size_rows, 145, 40, 40, 20)
$updown_size_rows = GUICtrlCreateUpdown($input_size_rows)
GUICtrlSetLimit($updown_size_rows, 20, 1)

GUICtrlCreateGroup("Mouse Speed", 110, 75, 85, 85)
$input_speed = GUICtrlCreateInput($script_speed, 125, 95, 50, 20, $ES_CENTER)
$updown_speed = GUICtrlCreateUpdown($input_speed)
GUICtrlSetLimit($updown_speed, 50, 1)
$button_speed_1 = GUICtrlCreateButton("1", 115, 120, 25, 15)
$button_speed_5 = GUICtrlCreateButton("5", 140, 120, 25, 15)
$button_speed_10 = GUICtrlCreateButton("10", 165, 120, 25, 15)
$button_speed_15 = GUICtrlCreateButton("15", 115, 140, 25, 15)
$button_speed_25 = GUICtrlCreateButton("25", 140, 140, 25, 15)
$button_speed_50 = GUICtrlCreateButton("50", 165, 140, 25, 15)


$window_help = GUICreate("Help", 170, 65, -1, -1, -1, 0, $window_main)
GUICtrlCreateLabel("Home = Set starting coordinates", 10, 5)
GUICtrlCreateLabel("Insert = Start the script", 10, 25)
GUICtrlCreateLabel("Delete = Stop the script", 10, 45)


GUISetState(@SW_SHOW, $window_main)


While 1
    If $script_running Then
        ; Seriously, why is this even necessary...?
        $script_size_columns = GUICtrlRead($input_size_columns)
        $script_size_rows = GUICtrlRead($input_size_rows)
        
        farm()
    EndIf
        
    $script_speed = GUICtrlRead($input_speed)
    $gui_msg = GUIGetMsg(1)
    
    Select
        Case $gui_msg[0] = $GUI_EVENT_CLOSE
            If $gui_msg[1] = $window_main Then
                ExitLoop
            ElseIf $gui_msg[1] = $window_help Then
                GUISetState(@SW_HIDE, $window_help)
            EndIf
        Case $gui_msg[0] = $button_help
            GUISetState(@SW_SHOW, $window_help)
        Case $gui_msg[0] = $button_speed_1
            GUICtrlSetData($input_speed, "1")
        Case $gui_msg[0] = $button_speed_5
            GUICtrlSetData($input_speed, "5")
        Case $gui_msg[0] = $button_speed_10
            GUICtrlSetData($input_speed, "10")
        Case $gui_msg[0] = $button_speed_15
            GUICtrlSetData($input_speed, "15")
        Case $gui_msg[0] = $button_speed_25
            GUICtrlSetData($input_speed, "25")
        Case $gui_msg[0] = $button_speed_50
            GUICtrlSetData($input_speed, "50")
    EndSelect

    Sleep(25)
WEnd

Func farm()
    ; Some (local) variables
    $current_x = $script_x
    $current_y = $script_y
    
    For $current_row = 1 To $script_size_rows Step 1
        For $current_column = 1 To $script_size_columns Step 1
            MouseClick("primary", $current_x, $current_y, 1, $script_speed)
            
            $current_x = $current_x + 25
            $current_y = $current_y - 12
            
            If Not $script_running Then ExitLoop
        Next
        
        ; Reset to beginning of row
        $current_x = $current_x - (25 * $script_size_columns)
        $current_y = $current_y - (-12 * $script_size_columns)
        
        ; Advance to the next row
        $current_x = $current_x + 25
        $current_y = $current_y + 12
        
        If Not $script_running Then ExitLoop
    Next
    
    ; Stop running now
    stop_script()
EndFunc

how can i instal this script? on firefox? thank you so much guys

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0