rendered paste body<?php
$this->AddHook('produce_coins', 'Produce');
function Produce($bot)
{
// scripted original by GML fix by high comunity
if ($bot->firstrun)
return;
$bot->ReloadConfig();
$data = $bot->ld->GetPlSettings("Coins");
if ((int)$data->Produce != 1)
return;
$bot->SendMsg('Produce Coins initializing...');
$bot->SendMsg('');
$bot->SendMsg('Collecting Coins And Xp');
$bot->SendMsg('');
$bodycheck= false;
$objcounts = 1;
$count = 0;
$buildings = 0;
$freebuildings = 0;
$notready = 0;
$sleeptimer = 0;
$milB = array("Drydocks", "Barracks", "Hangar");
foreach ($bot->fobjects as $obj)
{
if (in_array(strtok($obj['itemName'], ' '), $milB))
{
$buildings ++;
if ($obj["state"] != 9)
$freebuildings ++;
}
}
$bot->SendMsg('You have '.$buildings.' army buildings. Only '.$freebuildings.' are free.');
$taskslimit = round($freebuildings/7);
if ($taskslimit < 2)
$taskslimit = 2;
$bot->SendMsg('Task limit set to '.$taskslimit);
$bot->SendMsg('');
unset($amf);
while ($objcounts < 9999999) {
set_time_limit(0);
if ($bot->gold > 2000000000) return;
$currentIndex = 0;
foreach ($bot->fobjects as $obj) {
set_time_limit(300);
if (in_array(strtok($obj['itemName'], ' '), $milB))
{
$currentIndex++;
if (isset($bot->error_msg)) {
$bot->ReloadConfig();
break;
}
if ($count == 0){ // add header
$amf = new AMFObject("");
$amf->_bodys[0] = new MessageBody();
$amf->_bodys[0]->_value[0] = $bot->GetAmfHeader();
$amf->_bodys[0]->targetURI = 'BaseService.dispatchBatch';
$amf->_bodys[0]->responseURI = '';
$amf->_bodys[0]->_value[2] = 0;
}
if ($obj["state"] == 10)
{
if ($obj["referenceItem"] == "") {
$bodycheck = add_to_amf ($bot,&$amf,$obj,&$count,1,0); // with streak
$bodycheck = add_to_amf ($bot,&$amf,$obj,&$count,0,1);
$objcounts++;
}else{
$bodycheck = add_to_amf ($bot,&$amf,$obj,&$count,0,1); // no streak
}
}
if ($obj["state"] == 8)
{
$bodycheck = add_to_amf ($bot,&$amf,$obj,&$count,0,1); // no streak
}
if (($count > $taskslimit) || ($currentIndex >= $buildings)){ // send # amf per send <-----
if ($bodycheck){ // only send out request if there's a body.
$bot->SendMsg('> Starting '.$count.' tasks.');
$serializer = new AMFSerializer();
$result = $serializer->serialize($amf);
$bot->SendRequest($result);
$bot->SendMsg(' <<< Done '.$count.' tasks. Total '.$objcounts.' streaks.');
$bodycheck = false;
}else{ // otherwise don't send it out.
$bot->SendMsg('+++ Buildings not ready.');
$notready++;
if ($notready > 7) // decrease the task if too many building not ready encounter
{
$notready = 0;
$sleeptimer++;
sleep($sleeptimer);
$bot->SendMsg('-> Sleeping for '.$sleeptimer.' seconds for building to be ready.');
//$bot->SendMsg('-> Tasks limit decreased to '.$taskslimit.' <-');
}
}
unset($amf);
$count = 0;
}
}
}
refresh ($bot);
}
}
function add_to_amf ($bot,&$amf,$obj,&$count,$streak,$itemcode) // produce locked units
{
$bodycheck = true;
// setState body
$amf->_bodys[0]->_value[1][$count]['sequence'] = $bot->GetSequense();
$amf->_bodys[0]->_value[1][$count]['functionName'] = "WorldService.performAction";
$amf->_bodys[0]->_value[1][$count]['params'][0] = "setState";
$amf->_bodys[0]->_value[1][$count]['params'][1]['id'] = $obj['id'];
$amf->_bodys[0]->_value[1][$count]['params'][1]['itemName'] = $obj['itemName'];
$amf->_bodys[0]->_value[1][$count]['params'][1]['position'] = $obj['position'];
if ($itemcode)
$amf->_bodys[0]->_value[1][$count]['params'][2][0]['referenceItem'] = Null;
$amf->_bodys[0]->_value[1][$count]['params'][1]['ch'] = $bot->ch($amf->_bodys[0]->_value[1][$count]['params'][1]);
$amf->_bodys[0]->_value[1][$count]['params'][2][0]['ch'] = $bot->ch($amf->_bodys[0]->_value[1][$count]['params'][2][0]);
$count++;
if ($streak)
{
// streak bonus
$streakbonus = round((($bot->level + 1) * 1.5 * 55)-1);
$amf->_bodys[0]->_value[1][$count]['sequence'] = $bot->GetSequense();;
$amf->_bodys[0]->_value[1][$count]['functionName'] = "UserService.streakBonus";
$amf->_bodys[0]->_value[1][$count]['params'][0]['amount'] = $streakbonus;
$amf->_bodys[0]->_value[1][$count]['params'][0]['maxesReached'] = 10;
$count++;
}
return $bodycheck;
}
function refresh ($bot) // initUser, slim down
{
$bot->SendMsg('Reloading objects...');
$amf = new AMFObject("");
$amf->_bodys[0] = new MessageBody();
$amf->_bodys[0]->_value[0] = $bot->GetAmfHeader();
$amf->_bodys[0]->targetURI = 'BaseService.dispatchBatch';
$amf->_bodys[0]->responseURI = '';
$amf->_bodys[0]->_value[2] = 0;
$amf->_bodys[0]->_value[1][0]['sequence'] = 1;
$amf->_bodys[0]->_value[1][0]['functionName'] = "UserService.initUser";
$amf->_bodys[0]->_value[1][0]['params'][0] = $bot->usern;
$ret = $bot->SendRequestAMF($amf);
$bod = $bot->DeserializeRetAMF($ret);
$bot->cfg = $bod;
$bot->sequense = 1;
$bot->fobjects = $bod->_value['data'][0]['data']['userInfo']['world']['objects'];
$bot->gold = $bod->_value['data'][0]['data']['userInfo']['world']['resources']['coins'];
}
?>