מבוא FarmVille הוא המשחק הפופולרי ביותר באתר פייסבוק (Facebook) אשר נכתב ע"י מתכנתי פלאש מחברת Zynga ומטרת המשחק היא להקים חווה משגשת. במהלך המשחק, השחקן רוכש שתילים, שותל אותם וקוצר לאחר פרק זמן מסויים. במידה והשחקן לא יבצע את הקצירה בזמן, השתילים יתרקבו והשחקן לא ירוויח מטבעות עבורם. פעולות אלו (רכישת שתיל, שתילתו וקצירתו) חוזרות על עצמן במהלך המשחק ומזכות את השחקן במטבעות. בחלק הבא אסביר איך להכין רובוט שיבצע את הפעולות האלו באופן אוטומטי. כדי להכין רובוט צריך להבין מה קורה מאחורי הקלעים כאשר פעולות במשחק מתרחשות. למשחק יש שני חלקים: צד הלקוח (נכתב בשפת אקשן-סקריפט 3) וצד השרת (נכתב בשפת php), הנתונים נשלחים ומתקבלים בפורמט amf. ארכיטקטורה זו מאפשרת לשלוח אובייקטים מורכבים ולקבל אובייקטים מורכבים בחזרה.
הסבר הקוד של הרובוט ניתן להוריד את קוד המקור של הרובוט מהקישור הבא: http://www.gamedevstudio.co.il/FarmVilleBot/FarmVille.rar
הרובוט הוא אפליקציית פלאש שכתובה בשפת אקשן-סקריפט 3. ממשק המשתמש מורכב מכפתור אחד ומשורת מצב. בלחיצה על הכפתור, הרובוט מתחיל לפעול ומתחבר לעמוד המשחק בפייסבוק (שם המשתמש והסיסמא לאתר פייסבוק נלקחים מתוך קובץ Cookie שנשמר במחשב, לכן בעת כניסה לפייסבוק חשוב לבחור באפשרות 'ביצוע כניסה אוטומטית בפעם הבאה' כדי שקובץ Cookie יישמר במחשב). ההודעות שנשלחות מהמשחק אל השרת מכילות נתונים שנמצאים במשתני ה-Flash Vars (משתנים שמוגדרים בקוד טעינת קובץ SWF וקובץ ה-SWF יכול להשתמש בהם). אפשר להגיע לכל משתני ה-Flash Vars ע"י טעינת מספר עמודי HTML בסדר מסויים, אותם העמודים שהיו נטענים לשחקן במידה והיה נכנס למשחק באמצעות הדפדפן.
פירוט משתני ה-Flash Vars: flashRevision – גירסת המשחק token – מזהה ה-Session הנוכחי של השחקן במשחק fb_sig_time – אחד המשתנים שאתר פייסבוק מעביר לכל אפליקציה שנטענת בתוכו master_id – המספר המזהה של המשתמש בפייסבוק app_url – כתובת צד-השרת של המשחק, אליה נשלחות כל ההודעות במהלך המשחק
מלבד משתנים אלו, יש משתנה נוסף בשם g_world, משתנה זה מוגדר בקוד ג'אווה-סקריפט בעמוד ה-HTML שבו נמצאים ה-Flash Vars ומכיל מידע על כל האובייקטים שנמצאים בחווה (כגון שתילים, עצים וחיות). ערך המשתנה g_world מקודד בקידוד Base64 ולכן צריך להפוך את המחרוזת המקודדת למערך של אובייקטים.
לאחר הפיכת המחרוזת למערך של אובייקטים, אפשר לעבור על פני כל אחד מהאובייקטים, לבדוק את מצבו ולבצע פעולה אוטומטית בהתאם. לדוגמא: אם האובייקט הוא ערוגה ריקה, אפשר לשתול בה שתיל מסויים ואם האובייקט הוא שתיל, אפשר לבדוק האם ניתן לקצור אותו ואם כן אז לשלוח לשרת הודעה על קצירת השתיל.
כל הודעה שנשלחת לשרת מכילה אובייקט חתימה, אובייקט זה מאפשר לשרת לזהות מי ביצע את הבקשה. אובייקט החתימה מכיל את משתני ה-Flash Vars.
המאמר פורסם באנגלית במגזין ffdmag בחודש יולי, 2010
המאמר נכתב ע"י אלעד כהן - מתכנת פלאש בחברת GAME DEV LTD.