#!/usr/pkg/bin/perl use URI; use LWP; use HTTP::Cookies; use HTML::Form; $startDate = `date`;chomp($startDate); $timestamp = time(); $soulid = 811; $maxflipped = 0; my @messages = ( q{Here they come to save the day, Medlir Maxflips on the way!}, q{Medlir Maxflips are a healthy part of a good breakfast!}, q{Nothing is trivial.}, q{It can't rain all the time.}, q{w00t! Maxflips from Medlir!} ); @fliplist = (108,208,423,523,581,1129,1265,1292,1397,1501,1808,1864,2174,3874,3939,3951,5086,5479,6260,6802,7088,8564,9294, 9430,9582,9724,10273,11576,11958,13095,13990,14441,15015,15575,16218,16553,17283,19003,19678,20567,20688,22205, 22441,23190,23321,24315,25064,25083,25832,26572,27386,27525,27642,28032,29472,29568,29591,29651,30385,30519, 31032,31251,31506,32506,32750,33616,33826,35863); @deleted = (); $numFlips = @fliplist; @fliplist_s = sort {$a <=> $b} @fliplist; $prev = "not equal to $fliplist_s[0]"; @fliplist_sd = grep($_ ne $prev && ($prev = $_, 1), @fliplist_s); $numFlips2 = @fliplist_sd; print "\nStart: $startDate\n\n"; print "Souls in fliplist before: $numFlips\n"; print "Souls in fliplist after: $numFlips2\n\n"; SOUL: foreach $soul (@fliplist_sd) { &login; chomp($soul); $soul_url = 'http://www.soulxchange.com/soulStats.asp?id=' . $soul; $soul_res = $ua->request(HTTP::Request->new (GET => $soul_url)); $soul_html = $soul_res->content; if ($soul_html =~ />SOUL NOT FOUNDparse($soul_html,$soul_url); $sell_form = HTML::Form->parse($soul_html,$soul_url); $sell_form->value('type','2'); if ($soul_html =~ /\;(\d+) Pts EarnedSoul Stats -- (.+?)//g; $soulName =~ s/^\s+//;$soulName =~ s/\s+$//; if ($soul == $soulid) { print "Starting flip on $soul - $soulName\n"; print "\tError 1: Your Own Soul, skipping...\n\n"; next SOUL; } } } else { print "\tError 9: Getting Soul HTML Before Flip, dumping...\n\n"; open(ERRDUMP,">/home/medlir/bin/sxc/$soul.9"); print ERRDUMP "$soul_html"; close(ERRDUMP); sleep 30; next SOUL; } print "Starting flip on $soul - $soulName\n"; ######## Maxflip It ######## FLIP: for ($i=0; $i<4; $i++) { $buy_res = $ua->request($buy_form->click); $buy_html = $buy_res->content; if ($buy_html =~ /Blue>You already own this soul/) { print "\tError 2: Already Owned, skipping...\n\n"; next SOUL; } elsif ($buy_html =~ /Blue>You cannot afford this soul/) { print "\tError 3: Not Enough Cash, skipping...\n\n"; next SOUL; } elsif ($buy_html =~ /Blue>You have reached your limit for purchases of this soul for today/) { print "\tError 4: Buy Limit, skipping...\n"; last FLIP; } elsif ($buy_html =~ /h3>Trading Outside of League 3 is forbidden/) { print "\tError 5: Out Of League, skipping...\n\n"; next SOUL; } elsif ($buy_html =~ /h1>Object Moved<\/h1>This object may be found hereYou have purchased .*? for \d+ points/) { ######## Sell Here ######## $sell_res = $ua->request($sell_form->click); $sell_html = $sell_res->content; if ($sell_html =~ /Blue>You have sold .*? for \d+ points/) { next FLIP; } else { print "\tError 7: Unable to Sell, dumping...\n\n"; open(ERRDUMP,">/home/medlir/bin/sxc/$soul.7"); print ERRDUMP "$sell_html"; close(ERRDUMP); sleep 30; next SOUL; } } else { print "\tError 8: Unhandled Error, dumping...\n\n"; open(ERRDUMP,">/home/medlir/bin/sxc/$soul.8"); print ERRDUMP "$buy_html"; close(ERRDUMP); sleep 30; next SOUL; } } ######## Calculate finish price ######## $soul_res = $ua->request(HTTP::Request->new (GET => $soul_url)); $soul_html = $soul_res->content; if ($soul_html =~ /form action=\"\/transaction\.asp/) { if ($soul_html =~ /\;(\d+) Pts Earned 0) { $message = $messages[int(rand(@messages))]; $ptsmess = ' From '.$soulBefore.' to '.$soulAfter.', whee!'; if (($soulGain > 50) && ($soulGain < 101)) { $extmess = " Looks like someone else was flipping you at the same time."; } elsif ($soulGain > 100) { $extmess = " er... looks like something funky happened..."; } else { $extmess = ''; } $message .= $ptsmess.' (4 flips actually) '.$extmess; &soulnote; $maxflipped++; print "Finished flip on $soul - Before: $soulBefore After: $soulAfter Gain: $soulGain\n\n"; } else { print "\n"; } } } else { print "\tError 10: Getting Soul HTML After Flip, dumping...\n\n"; open(ERRDUMP,">/home/medlir/bin/sxc/$soul.10"); print ERRDUMP "$soul_html"; close(ERRDUMP); sleep 30; next SOUL; } } $stopDate = `date`; chomp($stopDate); $timestamp = time() - $timestamp; if ($deleted[0] ne "" ) { @deleted_s = sort {$a <=> $b} @deleted; print "Deleted souls: "; for (@deleted_s) { print "$_ " } print "\n\n"; } print "Maxflipped $maxflipped of $numFlips souls.\n\nStart: $startDate\n Stop: $stopDate\n\n$timestamp seconds elapsed.\n\n"; 1; ################################ ######## Login to sXc ########## ################################ sub login { $ua = LWP::UserAgent->new(); $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705)'); $ua->cookie_jar(HTTP::Cookies->new(file => "/home/medlir/bin/sxc/sxc_cookies.txt", autosave => 1)); my $base_uri = 'http://www.soulxchange.com'; my $login_res = $ua->request(HTTP::Request->new(GET => $base_uri)); my $login_form = HTML::Form->parse($login_res->content,$base_uri); $login_form->value('email','medlir@livejournal.com'); $login_form->value('password','BLANK'); my $submit_res = $ua->request($login_form->click('Submit')); my $newloc = $submit_res->header('location'); my $new_res = $ua->request(HTTP::Request->new(GET => $base_uri . $newloc)); } ################################################ ######## Soulnote the lucky owner ############## ################################################ sub soulnote { %who = ("name","soul_id","value","$soul"); %message = ("name","message","value",$message); my $sn_form = HTML::Form->new(POST,'http://www.soulxchange.com/soul_notes/sendNote.asp'); $sn_form->push_input('hidden',\%who); $sn_form->push_input('textarea',\%message); my $sn_res = $ua->request($sn_form->click); my $sn_goto = $sn_res->header('location'); $sn_res = $ua->request(HTTP::Request->new(GET => 'http://www.soulxchange.com' . $sn_goto)); my $sn_html = $sn_res->content; if ($sn_html =~ /Your note was sent successfully./) { } else { print "\tError 6: Soulnote Not Sent\n"; open(ERRDUMP,">/home/medlir/bin/sxc/$soul.6"); print ERRDUMP "$sn_html"; close(ERRDUMP); sleep 30; } }