RE: SuperBot v0.98 - Akzeptabel - 09.10.2011
super Bot!
Ich habe leider ein Problem !
Wenn ich den bot im htdcos Ordner habe in einem extra Ordner namens "bot" und den Bot dann über localhost aktiviere bzw installiere, die Namen der erstellten Spieler eingebe die der Bot steuern soll und dann "Bot starten" drücke gibts ein PROBLEM.
Anfangs lief es, doch innerhalb weniger Minuten hat der Bot aufgehört zu spielen.
Wenn ich den Bot jetzt starte, passiert nichts in den Dörfern !?
Warum :S
würde mich über eine antwort freuen .
lg
RE: SuperBot v0.98 - Dsaddicted - 09.10.2011
hast du nur einen Bot spieler erstellt oder mehrere?
und welche version nutzt du?
RE: SuperBot v0.98 - chiomi - 03.12.2011
bei der ersten Nachricht, das schlechte adeln ist lustig^^
RE: SuperBot v0.98 - Dsaddicted - 04.12.2011
welche meinst du?
RE: SuperBot v0.98 - Molt - 04.12.2011
Der oberste Post auf Seite 1 dieses Themas.
RE: SuperBot v0.98 - Dsaddicted - 04.12.2011
aso ok
RE: SuperBot v0.98 - Johari - 10.12.2011
bei mir kommt nur:
<br />
<b>Parse error</b>: parse error, unexpected '{' in <b>C:\DSLan\htdocs\bot\config\classes.php</b> on line <b>282</b><br />
-.-
früher(vorm reset)hats noch gefunzt!
RE: SuperBot v0.98 - Dsaddicted - 10.12.2011
was steht denn bei dir in der Datei "C:\DSLan\htdocs\bot\config\classes.php" in zeile 282?
RE: SuperBot v0.98 - Molt - 10.12.2011
@Johari:
Das ist nicht der Superbot, das ist der DSLan bot, der nicht funktioniert.
RE: SuperBot v0.98 - Dsaddicted - 08.01.2012
Was genau ist dein problem?
und welche version benutzt du?
RE: SuperBot v0.98 - madlord - 23.01.2012
Why does the bots build farms and warehouse over the maximum.
I took maximum level at 30 and looked in the storage settings and it do not work.
They build and build both farm and warehouse right now it is on 36 and max was on 30
RE: SuperBot v0.98 - WutziXoX - 27.01.2012
Hey habe gesucht und gesucht finde aber keine lösung...
Habe mir gestern den bot hier runter geladen und versucht ihn in gang zu bekommen aber irgendwie stell ich mich bissel ungeschickt an!
Habe Spieler erstellt und eingefügt aber es passiert nichts...
Der bot zeigt mir ständig diese meldung an>>
<br />
<b>Parse error</b>: parse error, unexpected '{' in <b>C:\Users\Marlies\Desktop\Gerdi\dslan_v1.4\htdocs\bot\config\classes.php</b> on line <b>282</b><br />
Bitte um hilfe! Was kann ich tun?
RE: SuperBot v0.98 - Molt - 27.01.2012
Den Inhalt der Datei C:\Users\Marlies\Desktop\Gerdi\dslan_v1.4\htdocs\bot\config\classes.php posten (in [code]-Tags).
RE: SuperBot v0.98 - WutziXoX - 27.01.2012
Code: <?php
function msec(){}
class botvillagedata
{
var $villagedata;
var $villagedata_recruit;
var $villagedata_bot;
var $villagedata_builds;
//Achtung Reihenfolge: $vid,$bh(!!),$wood,$stone,$iron
function add_ressource_or_bh($vid,$bh=0,$wood=0,$stone=0,$iron=0){
$this->villagedata[$vid]['r_bh'] += $bh;
$this->villagedata[$vid]['r_stone'] += $stone;
$this->villagedata[$vid]['r_iron'] += $iron;
$this->villagedata[$vid]['r_wood'] += $wood;
}
function get_array($name,$detail=''){
$var = $this->{$name};
if(!empty($detail))
{
$var = $this->{$name}[$detail];
}
return $var;
}
function select_village_as_from_bot($vid){
$this->villages[] = $vid;
$this->allvillages++;
}
function set_type($vid,$type){
$this->type[$vid] = $type;
switch($type){
case 'def':
$this->type_def[] = $vid;
break;
case 'off':
$this->type_off[] = $vid;
break;
case 'spy':
$this->type_spy[] = $vid;
break;
}
}
function reload_villagedata(){
global $db,
$botconfig,
$cl_botvillages,
$cl_action;
$this->villagedata = array();
$sql = "SELECT * FROM `villages` WHERE `userid` ='".$botconfig['id']."'";
$res = $db->query($sql);
$count_villages = $db->numRows($res);
if($count_villages == 0){
$x = 0;
if (empty($botconfig['minvillages'])){
while($x < $config['minvillages'])
{
create_village($botconfig['id'],$botconfig['villagenames'],'random');
$x++;
}
} else {
while($x < $botconfig['minvillages'])
{
create_village($botconfig['id'],$botconfig['villagenames'],'random');
$x++;
}
}
die('Bitte neuladen...');
}
while ($row = $db->fetch($res))
{
$ress = ressis($row);
$wood = $ress['r_wood'] - $row['r_wood'];
$iron = $ress['r_stone']- $row['r_stone'];
$wood = $ress['r_iron'] - $row['r_iron'];
$this->select_village_as_from_bot($row['id']);
//$villagedata anlegen (tabelle: `villages`)
$this->villagedata[$row['id']] = $row;
//$villagedata_bot anlegen (tabelle: `bot`)
$this->read_from_db($row);
//$villagedata_builds anlegen (tabelle: `builds`)
$this->villagedata_builds($row['id']);
//$villagedata_recruit anlegen (tabelle: `recruit`)
$this->villagedata_recruit($row['id']);
//Rohstoffe aktualisieren
$this->add_ressource_or_bh($vid=$botconfig['id'],$bh=0,$wood=$wood,$stone=$stone,$iron=$iron);
//Nächstes zu bauende Gebäude auswählen
$cl_action->nextbuild_math($row);
}
}
function read_from_db($villagedata){
global $botconfig,
$db;
$this->villagedata_bot = array();
$sql = 'SELECT * FROM `bot`';
$res = $db->query($sql);
while($row = $db->fetch($res)){
$this->villagedata_bot[ $row['villageid'] ] = $row;
switch($row['type']){
case 'def':
$this->set_type($row['villageid'],'def');
break;
case 'off':
$this->set_type($row['villageid'],'off');
break;
case 'spy':
$this->set_type($row['villageid'],'spy');
break;
}
}
$arr = $this->villagedata_bot;
for($x=0; $x < $this->allvillages; $x++){
if(!array_key_exists($this->villages[$x],$arr)){
if($x == 0){
$this->new_village('def',$villagedata);
}
elseif (($x % $botconfig['spy_villages']) == 0){
$this->new_village('spy',$villagedata);
}
elseif ($x % $botconfig['deffoff'] == 0){
$this->new_village('off',$villagedata);
}
else {
$this->new_village('def',$villagedata);
}
}
}
}
/* villagedata_builds($vid) Zählt alle Gebäude die gerade in der Bauschleife sind zu den normalen Gebäuden
Eingabe: $vid : Village-id
Ausgabe: -Keine-
*/
function villagedata_builds($vid){
global $cl_builds,
$db;
$builds = $cl_builds->get_array("dbname");
foreach ($builds as $key=>$value){
$this->villagedata_builds[$vid][$value] = $this->villagedata[$vid][$value];
}
$result = $db->query("SELECT id,building,end_time,build_time from build where villageid='".$vid."' order by id");
$quantity = $db->numRows($result);
$this->villagedata_builds[$vid]['quantity'] = $quantity;
while($row=$db->Fetch($result)){
$this->villagedata_builds[$vid][$row['building']]++;
$this->villagedata_builds[$vid]['end_time'] = $row['end_time'];
}
}
/* villagedata_recruit($vid) Erfasst alle rekrutierungen
Eingabe: $vid : Village-id
Ausgabe: -Keine-
*/
function villagedata_recruit($vid){
global $db;
$sql = "SELECT unit,num_unit FROM recruit WHERE villageid=".$vid;
$res = $db->query($sql);
while($row =$db->fetch($res)){
$this->villagedata_recruit[ $vid ][ $row['unit'] ] += $row['num_unit'];
}
}
function select_villages_as_finish($vid){
$db->query("UPDATE bot SET finish='y' WHERE id=$vid");
}
/* new_village($type,$villagedata) Legt einen neuen Eintrag der DB an und schreibt neue Dörfer in $villagedata_bot
Eingabe: $type: Typ des Dorfes ('def','off','spy')
$villagedata: Alle Einträge von Tabelle 'villages'
Ausgabe: -Keine-
*/
function new_village($type,$villagedata){
global $botconfig,
$db,
$cl_builds,
$cl_botvillagedata;
$arr_builds = $cl_builds->get_array('dbname');
$botval = $botconfig['buildings']['values'];
$sql = 'insert into `bot`
(villageid,type,finish_build,finish_tec,next_build';
//) values (';
foreach($arr_builds AS $dbname){
$sql .= ", $dbname";
$value[] = $botval[$dbname] - $villagedata[$dbname];
}
$sql .= ") values ('".$villagedata['id']."','".$type."','n','n','','";
$count = count($value) -1;
$y = 0;
for($x=0;$x<$count;$x++)
{
$sql .= $value[$x]."','";
$y++;
}
$sql .= $value[$y]."')";
$db->query($sql);
unset($sql);
$villagedata_bot_ = array('villageid'=>$villagedata['id']);
foreach($cl_builds->get_array('dbname') AS $key=>$val){
$villagedata_bot_[$val] = ($botval[$val]-$villagedata[$val]);
}
$villagedata_bot_['type'] = $type;
$villagedata_bot_['finish_build'] = 'n';
$villagedata_bot_['finish_tec'] = 'n';
$this->type[$villagedata['id']] = $type;
$this->villagedata_bot[ $villagedata_bot_['villageid'] ] = $villagedata_bot_;
}
}
/*
Klasse zum Bauen, Forschen und allem anderen.
Statt den 3 einzelnen Klassen gibt es nun nur noch diese!
*/
class Botvillages extends botvillagedata
{
//Allgemeiner Dörfercounter, Array mit allen Dörfern, Array mit allen Dörfern nach den Type(off,def,spy)
function recruit_build_research()
{
global $cl_botvillagedata, //Eigene Klassen
$cl_action,
$botconfig, //Eigene Konfig
$cl_builds,//Lan-klassen
$cl_units,
$cl_techs,
$db,
$arr_farm;
//Off,Def,Spy dörfer durchgehen.
foreach($cl_botvillagedata->type AS $vid=>$type){
//Angriffe auf ein Botdorf ? Wenn ja def oder spy schicken!
$villagedata = $cl_botvillagedata->get_array('villagedata',$vid);
$villagedata_bot = $cl_botvillagedata->get_array('villagedata_bot',$vid);
//TECHS ERFORSCHEN
//Ist das erforschen auf null gesetzt?
$fast_sql = NULL;
if($villagedata_bot['finish_tec'] == 'n'){
//Alle Typentechs auslesen
$techs = $cl_techs->get_attType($type);
foreach($techs as $value){
//$value = was soll erforscht werden
if($villagedata_bot["tec_".$value] == 'y'){
if($villagedata["unit_".$value."_tec_level"] != $botconfig[$type]['tec'][$value]){
//Es wurde eingestellt das noch mehr erforscht werden muss...
$research = $cl_action->research($value,$vid);
if(!$research){
if($cl_techs->error =="max_stage"){
$fast_sql['tec_'.$value] = 'n';
}
}
} else {
$fast_sql['tec_'.$value] = 'n';
}
}
}
if(is_array($fast_sql))
{
$sql = "UPDATE `bot` SET ";
foreach($fast_sql AS $building=>$val){
$sql .= "$building='$val' ";
}
$sql .= "WHERE villageid='".$vid."'";
$db->query($sql);
$fast_sql = NULL;
}
usleep(100);
}
$cl_action->build_building($cl_action->next_build[$vid]["building"]);
usleep(100);
//Wie viele Einheiten stehen bereits im Dorf?
$querys = array();
foreach($cl_units->get_array('dbname') AS $dbname) {
$querys[] = "all_".$dbname;
}
$result = $db->query("SELECT ".implode(",",$querys)." from villages where id=".$vid."");
$village_all = $db->fetch($result);
$farm_datas['own_units'] = 0;
//Alle eigenen Truppen auslesen
foreach($cl_units->get_array('dbname') AS $dbname) {
$farm_datas['own_units'] += $village_all['all_'.$dbname];
}
if($botconfig['max_units'] <= $farm_datas['own_units']) return false;
//KI-Überprüfung Wenn die Punkte des Dorfes größer sind als der noch freie Bauernhof
if($villagedata['points'] > $arr_farm[$villagedata['farm']] - $villagedata['r_bh']){
if((random_generator($botconfig['ki']['create_units_villagepoints'] + 1)){
$units = $cl_units->get_attType($type);
foreach($units as $value){
$cl_action->recruit($value,$villagedata,$cl_units->recruit_in[$value]);
}
}
} else {
$units = $cl_units->get_attType($type);
foreach($units as $value){
$cl_action->recruit($value,$villagedata,$cl_units->recruit_in[$value]);
}
}
usleep(100);
}
}
}
/* Diese Funktion erzeugt eine Zufallszahl (1-100) , die für einen Botlauf bleibt, danach wenn größer dann true wenn nicht dann false! */
function random_generator($number_value){
static $r_number;
if(empty($r_number)){
$r_number = rand(0,101);
}
if($r_number > $number_value){
return false;
}
return true;
}
/*
class away
{
var village;
function write_away($vid,$units)
}
*/
class action
{
var $last_village;
var $last_recruit;
var $last_error;
var $sql_bot = NULL;
var $error;
var $next_build;
var $builds;
var $buildings_by_vid;
var $attack;
/*
Überprüft ob jemand ein Dorf angreift.
Gibt bei Angriff TRUE zurück, ansonsten FALSE
*/
function check_attack($vid)
{
global $db;
$sql = "SELECT * FROM `movements` WHERE `type` ='attack' AND `send_to_village`='".$vid."'";
$res = $db->query($sql);
while($row = $db->Fetch($res))
{
$this->attack[$vid][] = $row;
}
if($db->numRows($res) > 0)
return true;
return false;
}
function research($unit,$vid) //Bei Unit wird nur der Unitname erwartet! Kein "unit_" vornedran!
{
global $cl_techs,
$cl_botvillages,
$cl_botvillagedata;
$this->last_village = $cl_botvillagedata->get_array('villagedata',$vid);
// Schauen, ob noch nicht geforscht wird:
if(!empty($this->last_village['smith_tec'])){
$error = "Es wird bereits geforscht.";
return false;
}
// Allgemeiner Einheitencheck:
$cl_techs->check_tech($unit,$villagedata);
switch($cl_techs->get_last_error()){
case "tech_not_found":
$error = "t";
return false;
break;
case "max_stage":
$error = "m";
return false;
break;
case "not_fulfilled":
$error = "G";
return false;
break;
case "not_enough_storage":
$error = "S";
return false;
break;
case "not_enough_ress":
$error = "R";
return false;
break;
}
// Wenn kein Fehler da ist, dann forschen:
$cl_techs->research($unit,$villagedata);
$wood = round($cl_techs->get_wood($unit,$villagedata['unit_'.$unit.'_tec_level']+1));
$stone = round($cl_techs->get_stone($unit,$villagedata['unit_'.$unit.'_tec_level']+1));
$iron = round($cl_techs->get_iron($unit,$villagedata['unit_'.$unit.'_tec_level']+1));
$this->last_village['r_wood'] -= $wood;
$this->last_village['r_stone'] -= $stone;
$this->last_village['r_iron'] -= $iron;
return true;
}
function recruit($unit,$buildname)
{
global $cl_units,
$cl_botvillages,
$botconfig,
$arr_farm,
$db;
$villagedata = $last_village;
# Einheiten rekrutieren:
#Rohstoffe überprüfen
$cl_units->check_needed($unit,$villagedata);
if (is_numeric($cl_units->last_error)){
$quantity = $cl_units->last_error >> 1;
}
$input = (int) $quantity;
// Weitere Überprüfungen
$wood = $cl_units->get_woodprice($unit) *$input;
$stone = $cl_units->get_stoneprice($unit)*$input;
$iron = $cl_units->get_ironprice($unit) *$input;
$bh = $cl_units->get_bhprice($unit) *$input;
//Existiert überhaupt das Gebäude zum Bauen in dem Dorf?
if($villagedata[$buildname] == 0){
$check = "building does not exits";
return false;
}
//Rohstoffe vorhanden?
elseif ($wood>$villagedata['r_wood'] OR $stone>$villagedata['r_stone'] OR $iron>$villagedata['r_iron']){
$check = "to_many_units";
return false;
}
//Bauernhof?
elseif(($arr_farm[$village['farm']]-$villagedata['r_bh']-$bh) >0){
$check = "to_many_bh";
return false;
}
//Alles möglich also rekrutieren
if ($input>$botconfig['min_units_for_recruit']){
// Ress abziehen:
$db->query("UPDATE villages SET r_wood=r_wood-'$wood',r_stone=r_stone-'$stone',r_iron=r_iron-'$iron',r_bh=r_bh+'$bh' where id='".$villagedata['id']."'");
// Nun kann die Einheit rekrutiert werden:
$cl_units->recruit_units($unit,$input,$buildname,$villagedata[$buildname],$villagedata['id']);
$this->last_village['r_bh'] += $bh;
$this->last_village['r_wood'] -= $wood;
$this->last_village['r_stone'] -= $stone;
$this->last_village['r_iron'] -= $iron;
return true;
}
}
function nextbuild_math($villagedata){
global $botconfig,
$db,
$cl_botvillagedata,
$db,
$cl_builds;
//Bot Tabelle
$villagedata_bot = $cl_botvillagedata->get_array('villagedata_bot',$villagedata['id']);
if(!empty($villagedata_bot['next_build'])){
$this->next_build[$villagedata['id']]['building'] = $villagedata_bot['next_build'];
$this->sql_bot['check_needed']['next_build'] ="''";
$db->query($sql);
} else {
foreach($cl_builds->get_array('dbname') AS $dbname){
srand ( (double)microtime () * 1000000 );
$this->check_needed($dbname,$villagedata);
$villagedata_bot[ $dbname ] += rand(0,5);
if ($villagedata_bot[ $dbname ] > $this->next_build[$villagedata['id']]['value']){
$this->next_build[ $villagedata['id'] ]["building"] = $dbname;
$this->next_build[ $villagedata['id'] ]["value"] = $villagedata_bot[ $dbname ];
}
}
$this->sql('check_needed',$villagedata['id']);
}
}
function sql($name_function,$vid){
global $db;
//SQL zusammenstellen
$sql = "UPDATE bot SET ";
$x = 0;
if(is_array($this->sql_bot)){
foreach($this->sql_bot[$name_function] AS $building=>$val){
if($x == 0) $sql .= "$building=$val";
else $sql .= ", $building=$val";
$x++;
}
$sql .= " WHERE villageid=".$vid;
$db->query($sql);
}
$this->sql_bot[$name_function] = array();
}
function check_needed($building,$villagedata){
global $db,
$cl_builds,
$botconfig,
$arr_maxstorage,
$arr_farm;
$this->sql_bot['check_needed'] = false;
//Preise auslesen...
$no_needed = false;
$stage = $villagedata[$building] + 1; //Stufe auslesen
$wood = $cl_builds->get_wood($building,$stage); //Holzpreis
$stone = $cl_builds->get_stone($building,$stage); //Lehmpreis
$iron = $cl_builds->get_iron($building,$stage); //Eisenpreis
$maxstorage = $arr_maxstorage[$villagedata["storage"]]; //Fassungsvermögen des Speichers...
$maxstage = $cl_builds->get_maxstage($building); //Maximale Stufe...
$needed = $cl_builds->get_needed_by_dbname($building); //Einzelne Gebäudestufen
//Alle Gebäude durchgehen...
foreach($cl_builds->get_array('dbname') AS $dbname){
if($needed[ $dbname ] > $villagedata[ $dbname ]){
//Das Dorf entspricht nicht den Anforderungen zum Baudes Gebäudes...
$this->sql_bot['check_needed'][$building] = -50;
return true;
}
}
//Was wird am meisten gebraucht?
$need_iron = $iron - $villagedata['r_iron'];
$need_stone = $stone - $villagedata['r_stone'];
$need_wood = $wood - $villagedata['r_wood'];
if($need_iron > $need_stone && $need_iron > $need_wood){
if(random_generator($botconfig['ki']['not_enough_ress'])){
$this->sql_bot['check_needed']['next_build'] = "'iron'";
return true;
}
}
//Die nächsten zwei überprüfen das gleiche, nur für andere Rohstoffe deshalb eingeklappt:
if($need_stone > $need_iron && $need_stone > $need_wood){ if(random_generator($botconfig['ki']['not_enough_ress'])){ $this->sql_bot['check_needed']['next_build'] = "'stone'"; return true; } }
if($need_wood > $need_iron && $need_wood > $need_stone){ if(random_generator$botconfig['ki']['not_enough_ress'])){ $this->sql_bot['check_needed']['next_build'] = "'wood'"; return true; } }
//Der Preis für eine Ressource ist höher als das Fassungsvermögen...
if($iron > $maxstorage || $stone > $maxstorage || $wood >$maxstorage){
$this->sql_bot['check_needed'][$building] = -50;
$this->sql_bot['check_needed']['next_build'] = "'storage'";
return true;
}
//Nur wenn $botconfig['manual_maxstage'] auf true gesetzt ist!
if($botconfig['manual_maxstage']){
if($villagedata[$building] == $botconfig['maxstage'][$building]){
//Maximale Stufe wurde heruntergesetzt
$this->sql_bot['check_needed'][$building] = -50;
return true;
}
}
if($maxstage == $villagedata[$building]){
//Falls das Gebäude voll ausgebaut ist..
$this->sql_bot['check_needed'][$building] = -50;
return true;
}
if(($arr_farm[$villagedata['farm']] - $villagedata['r_bh']) < 5)
{
//Weniger als 5 freie Bauernplätze / Bauernhof als nächstes Bauen...
$this->sql_bot['check_needed']['next_build'] = "'farm'";
return true;
}
//Da diese Funktion bei allen Gebäuden ausgefhrt wird..
$minus = $botconfig['buildings']['values'][$building] - $villagedata[$building];
$this->sql_bot['check_needed'][$building] = $minus;
}
function build_building($building){
global $botconfig,
$db,
$cl_builds,
$cl_botvillages,
$cl_botvillagedata;
// Rohstoff preise & BH ermitteln:
if(empty($building)){
die('FEHLER - Kein Gebaeude');
}
$build_village = $cl_botvillagedata->get_array('villagedata_builds',$villagedata['id']);
$auftrage = $build_village['quantity'];
$villagedata = $this->last_village;
$plus_costs = ($cl_builds->get_buildsharpens_costs($auftrage)/100)+1;
$id_array = array_flip($cl_builds->get_array('dbname'));
if ($plus_costs < $botconfig['max_order']){
// Diese Methode überprüft nur, der Methodenname verwirrt etwas.
$cl_builds->build($villagedata,$id_array[$building],$build_village,$plus_costs);
$error = '';
switch($cl_builds->get_build_error2()){
case 'not_enough_ress':
$error = 'Rohstoffe';
break;
case 'not_enough_ress_plus':
$error = 'Rohstoffe Bauschleife';
break;
case 'max_stage':
$error = 'hoechste stufe';
break;
case 'not_enough_bh':
$error = 'Bauernhof';
break;
case 'not_enough_storage':
$error = 'Speicher';
break;
case 'not_fulfilled':
$error = 'Gebaeude.';
break;
}
if(!empty($error))
return false;
// Wenn kein Fehler ausgetreten ist, so kann das Gebäude gebaut werden:
// Rohstoff preise & BH ermitteln:
$wood = $cl_builds->get_wood($building,$build_village[$building]+1);
$stone = $cl_builds->get_stone($building,$build_village[$building]+1);
$iron = $cl_builds->get_iron($building,$build_village[$building]+1);
$bh = $cl_builds->get_bh($building,$build_village[$building]+1);
$time = $cl_builds->get_time($villagedata['main'],$building,$build_village[$building]+1);
$onlytime = $cl_builds->get_time($villagedata['main'],$building,$build_village[$building]+1);
// Wenn die letzte Abfrage keinen Datensatz gefunden hat, dann ist noch kein Auftrag vorhandne.
if ($db->affectedRows()==0){
// Kein Auftrag vorhanden:
$time += time();
// In Villages den ersten Auftrag speichern:
$add_village_sql = ",main_build='".$building.",$time' ";
} else {
// Bereits ein Auftrag vorhanden, in die Schleife:
$time += $build_village['end_time'];
}
// Nun mal die Rohstoffkosten abziehen bzw, BH dazuzählen UND Gebäude bauen aktiv aktivieren:
$db->query("UPDATE villages SET r_wood=r_wood-'".round($wood*$plus_costs)."',
r_stone=r_stone-'".round($stone*$plus_costs)."',
r_iron=r_iron-'".round($iron*$plus_costs)."',
r_bh=r_bh+'$bh' $add_village_sql where id='".$villagedata['id']."'");
// Nun den Auftrag noch in die Tabelle "build" rein:
$db->query("INSERT into build (building,villageid,end_time,build_time)
VALUES ('".$building."','".$villagedata['id']."','$time','$onlytime')");
$buildid = $db->getLastID();
// In Events den Bauauftrag speichern
$db->query("INSERT into events (event_time,event_type,event_id,user_id,villageid) VALUES ('$time','build','$buildid','".$botconfig['id']."','".$villagedata['id']."')");
//VILLAGEDATA AKTUALISIEREN
$new_data=array (
'r_bh'=>$bh,
'r_wood'=>$villagedata['r_wood'] - round($wood*$plus_costs),
'r_stone'=>$villagedata['r_stone'] - round($stone*$plus_costs),
'r_iron'=>$villagedata['r_iron'] - round($iron*$plus_costs)
);
$this->last_village = $new_data;
}
}
}
?>
RE: SuperBot v0.98 - WutziXoX - 27.01.2012
Könnte mir jemand weiter helfen etwas genauer bitte?
RE: SuperBot v0.98 - Molt - 28.01.2012
Gefixt:
PHP Code: <?php function msec(){}
class botvillagedata { var $villagedata; var $villagedata_recruit; var $villagedata_bot; var $villagedata_builds;
//Achtung Reihenfolge: $vid,$bh(!!),$wood,$stone,$iron function add_ressource_or_bh($vid,$bh=0,$wood=0,$stone=0,$iron=0){ $this->villagedata[$vid]['r_bh'] += $bh; $this->villagedata[$vid]['r_stone'] += $stone; $this->villagedata[$vid]['r_iron'] += $iron; $this->villagedata[$vid]['r_wood'] += $wood; } function get_array($name,$detail=''){ $var = $this->{$name}; if(!empty($detail)) { $var = $this->{$name}[$detail]; } return $var; } function select_village_as_from_bot($vid){ $this->villages[] = $vid; $this->allvillages++; } function set_type($vid,$type){ $this->type[$vid] = $type; switch($type){ case 'def': $this->type_def[] = $vid; break; case 'off': $this->type_off[] = $vid; break; case 'spy': $this->type_spy[] = $vid; break; } } function reload_villagedata(){ global $db, $botconfig, $cl_botvillages, $cl_action; $this->villagedata = array(); $sql = "SELECT * FROM `villages` WHERE `userid` ='".$botconfig['id']."'"; $res = $db->query($sql); $count_villages = $db->numRows($res); if($count_villages == 0){ $x = 0; if (empty($botconfig['minvillages'])){ while($x < $config['minvillages']) { create_village($botconfig['id'],$botconfig['villagenames'],'random'); $x++; } } else { while($x < $botconfig['minvillages']) { create_village($botconfig['id'],$botconfig['villagenames'],'random'); $x++; } } die('Bitte neuladen...'); } while ($row = $db->fetch($res)) { $ress = ressis($row); $wood = $ress['r_wood'] - $row['r_wood']; $iron = $ress['r_stone']- $row['r_stone']; $wood = $ress['r_iron'] - $row['r_iron']; $this->select_village_as_from_bot($row['id']); //$villagedata anlegen (tabelle: `villages`) $this->villagedata[$row['id']] = $row; //$villagedata_bot anlegen (tabelle: `bot`) $this->read_from_db($row); //$villagedata_builds anlegen (tabelle: `builds`) $this->villagedata_builds($row['id']); //$villagedata_recruit anlegen (tabelle: `recruit`) $this->villagedata_recruit($row['id']); //Rohstoffe aktualisieren $this->add_ressource_or_bh($vid=$botconfig['id'],$bh=0,$wood=$wood,$stone=$stone,$iron=$iron); //Nächstes zu bauende Gebäude auswählen $cl_action->nextbuild_math($row); } }
function read_from_db($villagedata){ global $botconfig, $db; $this->villagedata_bot = array(); $sql = 'SELECT * FROM `bot`'; $res = $db->query($sql); while($row = $db->fetch($res)){ $this->villagedata_bot[ $row['villageid'] ] = $row; switch($row['type']){ case 'def': $this->set_type($row['villageid'],'def'); break; case 'off': $this->set_type($row['villageid'],'off'); break; case 'spy': $this->set_type($row['villageid'],'spy'); break; } } $arr = $this->villagedata_bot; for($x=0; $x < $this->allvillages; $x++){ if(!array_key_exists($this->villages[$x],$arr)){ if($x == 0){ $this->new_village('def',$villagedata); } elseif (($x % $botconfig['spy_villages']) == 0){ $this->new_village('spy',$villagedata); } elseif ($x % $botconfig['deffoff'] == 0){ $this->new_village('off',$villagedata); } else { $this->new_village('def',$villagedata); } } } } /* villagedata_builds($vid) Zählt alle Gebäude die gerade in der Bauschleife sind zu den normalen Gebäuden Eingabe: $vid : Village-id Ausgabe: -Keine- */ function villagedata_builds($vid){ global $cl_builds, $db; $builds = $cl_builds->get_array("dbname"); foreach ($builds as $key=>$value){ $this->villagedata_builds[$vid][$value] = $this->villagedata[$vid][$value]; } $result = $db->query("SELECT id,building,end_time,build_time from build where villageid='".$vid."' order by id"); $quantity = $db->numRows($result); $this->villagedata_builds[$vid]['quantity'] = $quantity; while($row=$db->Fetch($result)){ $this->villagedata_builds[$vid][$row['building']]++; $this->villagedata_builds[$vid]['end_time'] = $row['end_time']; } } /* villagedata_recruit($vid) Erfasst alle rekrutierungen Eingabe: $vid : Village-id Ausgabe: -Keine- */ function villagedata_recruit($vid){ global $db; $sql = "SELECT unit,num_unit FROM recruit WHERE villageid=".$vid; $res = $db->query($sql); while($row =$db->fetch($res)){ $this->villagedata_recruit[ $vid ][ $row['unit'] ] += $row['num_unit']; } } function select_villages_as_finish($vid){ $db->query("UPDATE bot SET finish='y' WHERE id=$vid"); } /* new_village($type,$villagedata) Legt einen neuen Eintrag der DB an und schreibt neue Dörfer in $villagedata_bot Eingabe: $type: Typ des Dorfes ('def','off','spy') $villagedata: Alle Einträge von Tabelle 'villages' Ausgabe: -Keine- */ function new_village($type,$villagedata){ global $botconfig, $db, $cl_builds, $cl_botvillagedata; $arr_builds = $cl_builds->get_array('dbname'); $botval = $botconfig['buildings']['values']; $sql = 'insert into `bot` (villageid,type,finish_build,finish_tec,next_build'; //) values ('; foreach($arr_builds AS $dbname){ $sql .= ", $dbname"; $value[] = $botval[$dbname] - $villagedata[$dbname]; } $sql .= ") values ('".$villagedata['id']."','".$type."','n','n','','"; $count = count($value) -1; $y = 0; for($x=0;$x<$count;$x++) { $sql .= $value[$x]."','"; $y++; } $sql .= $value[$y]."')"; $db->query($sql); unset($sql); $villagedata_bot_ = array('villageid'=>$villagedata['id']); foreach($cl_builds->get_array('dbname') AS $key=>$val){ $villagedata_bot_[$val] = ($botval[$val]-$villagedata[$val]); } $villagedata_bot_['type'] = $type; $villagedata_bot_['finish_build'] = 'n'; $villagedata_bot_['finish_tec'] = 'n'; $this->type[$villagedata['id']] = $type; $this->villagedata_bot[ $villagedata_bot_['villageid'] ] = $villagedata_bot_; }
} /* Klasse zum Bauen, Forschen und allem anderen. Statt den 3 einzelnen Klassen gibt es nun nur noch diese! */ class Botvillages extends botvillagedata { //Allgemeiner Dörfercounter, Array mit allen Dörfern, Array mit allen Dörfern nach den Type(off,def,spy) function recruit_build_research() { global $cl_botvillagedata, //Eigene Klassen $cl_action, $botconfig, //Eigene Konfig $cl_builds,//Lan-klassen $cl_units, $cl_techs, $db, $arr_farm; //Off,Def,Spy dörfer durchgehen. foreach($cl_botvillagedata->type AS $vid=>$type){ //Angriffe auf ein Botdorf ? Wenn ja def oder spy schicken! $villagedata = $cl_botvillagedata->get_array('villagedata',$vid); $villagedata_bot = $cl_botvillagedata->get_array('villagedata_bot',$vid); //TECHS ERFORSCHEN //Ist das erforschen auf null gesetzt? $fast_sql = NULL; if($villagedata_bot['finish_tec'] == 'n'){ //Alle Typentechs auslesen $techs = $cl_techs->get_attType($type); foreach($techs as $value){ //$value = was soll erforscht werden if($villagedata_bot["tec_".$value] == 'y'){ if($villagedata["unit_".$value."_tec_level"] != $botconfig[$type]['tec'][$value]){ //Es wurde eingestellt das noch mehr erforscht werden muss... $research = $cl_action->research($value,$vid); if(!$research){ if($cl_techs->error =="max_stage"){ $fast_sql['tec_'.$value] = 'n'; } } } else { $fast_sql['tec_'.$value] = 'n'; } } } if(is_array($fast_sql)) { $sql = "UPDATE `bot` SET "; foreach($fast_sql AS $building=>$val){ $sql .= "$building='$val' "; } $sql .= "WHERE villageid='".$vid."'"; $db->query($sql); $fast_sql = NULL; } usleep(100); } $cl_action->build_building($cl_action->next_build[$vid]["building"]); usleep(100); //Wie viele Einheiten stehen bereits im Dorf? $querys = array(); foreach($cl_units->get_array('dbname') AS $dbname) { $querys[] = "all_".$dbname; } $result = $db->query("SELECT ".implode(",",$querys)." from villages where id=".$vid.""); $village_all = $db->fetch($result); $farm_datas['own_units'] = 0; //Alle eigenen Truppen auslesen foreach($cl_units->get_array('dbname') AS $dbname) { $farm_datas['own_units'] += $village_all['all_'.$dbname]; } if($botconfig['max_units'] <= $farm_datas['own_units']) return false; //KI-Überprüfung Wenn die Punkte des Dorfes größer sind als der noch freie Bauernhof if($villagedata['points'] > $arr_farm[$villagedata['farm']] - $villagedata['r_bh']){ if((random_generator($botconfig['ki']['create_units_villagepoints'] + 1))){ $units = $cl_units->get_attType($type); foreach($units as $value){ $cl_action->recruit($value,$villagedata,$cl_units->recruit_in[$value]); } } } else { $units = $cl_units->get_attType($type); foreach($units as $value){ $cl_action->recruit($value,$villagedata,$cl_units->recruit_in[$value]); } } usleep(100); } } } /* Diese Funktion erzeugt eine Zufallszahl (1-100) , die für einen Botlauf bleibt, danach wenn größer dann true wenn nicht dann false! */ function random_generator($number_value){ static $r_number; if(empty($r_number)){ $r_number = rand(0,101); } if($r_number > $number_value){ return false; } return true; } /* class away { var village;
function write_away($vid,$units) } */ class action { var $last_village; var $last_recruit; var $last_error; var $sql_bot = NULL; var $error; var $next_build; var $builds; var $buildings_by_vid; var $attack; /* Überprüft ob jemand ein Dorf angreift. Gibt bei Angriff TRUE zurück, ansonsten FALSE */ function check_attack($vid) { global $db; $sql = "SELECT * FROM `movements` WHERE `type` ='attack' AND `send_to_village`='".$vid."'"; $res = $db->query($sql); while($row = $db->Fetch($res)) { $this->attack[$vid][] = $row; } if($db->numRows($res) > 0) return true; return false; } function research($unit,$vid) //Bei Unit wird nur der Unitname erwartet! Kein "unit_" vornedran! { global $cl_techs, $cl_botvillages, $cl_botvillagedata; $this->last_village = $cl_botvillagedata->get_array('villagedata',$vid); // Schauen, ob noch nicht geforscht wird: if(!empty($this->last_village['smith_tec'])){ $error = "Es wird bereits geforscht."; return false; } // Allgemeiner Einheitencheck: $cl_techs->check_tech($unit,$villagedata); switch($cl_techs->get_last_error()){ case "tech_not_found": $error = "t"; return false; break; case "max_stage": $error = "m"; return false; break; case "not_fulfilled": $error = "G"; return false; break; case "not_enough_storage": $error = "S"; return false; break; case "not_enough_ress": $error = "R"; return false; break; } // Wenn kein Fehler da ist, dann forschen: $cl_techs->research($unit,$villagedata); $wood = round($cl_techs->get_wood($unit,$villagedata['unit_'.$unit.'_tec_level']+1)); $stone = round($cl_techs->get_stone($unit,$villagedata['unit_'.$unit.'_tec_level']+1)); $iron = round($cl_techs->get_iron($unit,$villagedata['unit_'.$unit.'_tec_level']+1)); $this->last_village['r_wood'] -= $wood; $this->last_village['r_stone'] -= $stone; $this->last_village['r_iron'] -= $iron; return true; } function recruit($unit,$buildname) { global $cl_units, $cl_botvillages, $botconfig, $arr_farm, $db; $villagedata = $last_village; # Einheiten rekrutieren: #Rohstoffe überprüfen $cl_units->check_needed($unit,$villagedata); if (is_numeric($cl_units->last_error)){ $quantity = $cl_units->last_error >> 1; } $input = (int) $quantity; // Weitere Überprüfungen $wood = $cl_units->get_woodprice($unit) *$input; $stone = $cl_units->get_stoneprice($unit)*$input; $iron = $cl_units->get_ironprice($unit) *$input; $bh = $cl_units->get_bhprice($unit) *$input;
//Existiert überhaupt das Gebäude zum Bauen in dem Dorf? if($villagedata[$buildname] == 0){ $check = "building does not exits"; return false; } //Rohstoffe vorhanden? elseif ($wood>$villagedata['r_wood'] OR $stone>$villagedata['r_stone'] OR $iron>$villagedata['r_iron']){ $check = "to_many_units"; return false; } //Bauernhof? elseif(($arr_farm[$village['farm']]-$villagedata['r_bh']-$bh) >0){ $check = "to_many_bh"; return false; } //Alles möglich also rekrutieren if ($input>$botconfig['min_units_for_recruit']){ // Ress abziehen: $db->query("UPDATE villages SET r_wood=r_wood-'$wood',r_stone=r_stone-'$stone',r_iron=r_iron-'$iron',r_bh=r_bh+'$bh' where id='".$villagedata['id']."'"); // Nun kann die Einheit rekrutiert werden: $cl_units->recruit_units($unit,$input,$buildname,$villagedata[$buildname],$villagedata['id']); $this->last_village['r_bh'] += $bh; $this->last_village['r_wood'] -= $wood; $this->last_village['r_stone'] -= $stone; $this->last_village['r_iron'] -= $iron; return true; } } function nextbuild_math($villagedata){ global $botconfig, $db, $cl_botvillagedata, $db, $cl_builds;
//Bot Tabelle $villagedata_bot = $cl_botvillagedata->get_array('villagedata_bot',$villagedata['id']); if(!empty($villagedata_bot['next_build'])){ $this->next_build[$villagedata['id']]['building'] = $villagedata_bot['next_build']; $this->sql_bot['check_needed']['next_build'] ="''"; $db->query($sql); } else { foreach($cl_builds->get_array('dbname') AS $dbname){ srand ( (double)microtime () * 1000000 ); $this->check_needed($dbname,$villagedata); $villagedata_bot[ $dbname ] += rand(0,5); if ($villagedata_bot[ $dbname ] > $this->next_build[$villagedata['id']]['value']){ $this->next_build[ $villagedata['id'] ]["building"] = $dbname; $this->next_build[ $villagedata['id'] ]["value"] = $villagedata_bot[ $dbname ]; } } $this->sql('check_needed',$villagedata['id']); } } function sql($name_function,$vid){ global $db; //SQL zusammenstellen $sql = "UPDATE bot SET "; $x = 0; if(is_array($this->sql_bot)){ foreach($this->sql_bot[$name_function] AS $building=>$val){ if($x == 0) $sql .= "$building=$val"; else $sql .= ", $building=$val"; $x++; } $sql .= " WHERE villageid=".$vid; $db->query($sql); } $this->sql_bot[$name_function] = array(); } function check_needed($building,$villagedata){ global $db, $cl_builds, $botconfig, $arr_maxstorage, $arr_farm;
$this->sql_bot['check_needed'] = false; //Preise auslesen... $no_needed = false; $stage = $villagedata[$building] + 1; //Stufe auslesen $wood = $cl_builds->get_wood($building,$stage); //Holzpreis $stone = $cl_builds->get_stone($building,$stage); //Lehmpreis $iron = $cl_builds->get_iron($building,$stage); //Eisenpreis $maxstorage = $arr_maxstorage[$villagedata["storage"]]; //Fassungsvermögen des Speichers... $maxstage = $cl_builds->get_maxstage($building); //Maximale Stufe... $needed = $cl_builds->get_needed_by_dbname($building); //Einzelne Gebäudestufen //Alle Gebäude durchgehen... foreach($cl_builds->get_array('dbname') AS $dbname){ if($needed[ $dbname ] > $villagedata[ $dbname ]){ //Das Dorf entspricht nicht den Anforderungen zum Baudes Gebäudes... $this->sql_bot['check_needed'][$building] = -50; return true; } } //Was wird am meisten gebraucht? $need_iron = $iron - $villagedata['r_iron']; $need_stone = $stone - $villagedata['r_stone']; $need_wood = $wood - $villagedata['r_wood']; if($need_iron > $need_stone && $need_iron > $need_wood){ if(random_generator($botconfig['ki']['not_enough_ress'])){ $this->sql_bot['check_needed']['next_build'] = "'iron'"; return true; } } //Die nächsten zwei überprüfen das gleiche, nur für andere Rohstoffe deshalb eingeklappt: if($need_stone > $need_iron && $need_stone > $need_wood){ if(random_generator($botconfig['ki']['not_enough_ress'])){ $this->sql_bot['check_needed']['next_build'] = "'stone'"; return true; } } if($need_wood > $need_iron && $need_wood > $need_stone){ if(random_generator($botconfig['ki']['not_enough_ress'])){ $this->sql_bot['check_needed']['next_build'] = "'wood'"; return true; } } //Der Preis für eine Ressource ist höher als das Fassungsvermögen... if($iron > $maxstorage || $stone > $maxstorage || $wood >$maxstorage){ $this->sql_bot['check_needed'][$building] = -50; $this->sql_bot['check_needed']['next_build'] = "'storage'"; return true; } //Nur wenn $botconfig['manual_maxstage'] auf true gesetzt ist! if($botconfig['manual_maxstage']){ if($villagedata[$building] == $botconfig['maxstage'][$building]){ //Maximale Stufe wurde heruntergesetzt $this->sql_bot['check_needed'][$building] = -50; return true; } } if($maxstage == $villagedata[$building]){ //Falls das Gebäude voll ausgebaut ist.. $this->sql_bot['check_needed'][$building] = -50; return true; } if(($arr_farm[$villagedata['farm']] - $villagedata['r_bh']) < 5) { //Weniger als 5 freie Bauernplätze / Bauernhof als nächstes Bauen... $this->sql_bot['check_needed']['next_build'] = "'farm'"; return true; } //Da diese Funktion bei allen Gebäuden ausgefhrt wird.. $minus = $botconfig['buildings']['values'][$building] - $villagedata[$building]; $this->sql_bot['check_needed'][$building] = $minus; }
function build_building($building){ global $botconfig, $db, $cl_builds, $cl_botvillages, $cl_botvillagedata; // Rohstoff preise & BH ermitteln: if(empty($building)){ die('FEHLER - Kein Gebaeude'); } $build_village = $cl_botvillagedata->get_array('villagedata_builds',$villagedata['id']); $auftrage = $build_village['quantity']; $villagedata = $this->last_village; $plus_costs = ($cl_builds->get_buildsharpens_costs($auftrage)/100)+1; $id_array = array_flip($cl_builds->get_array('dbname')); if ($plus_costs < $botconfig['max_order']){ // Diese Methode überprüft nur, der Methodenname verwirrt etwas. $cl_builds->build($villagedata,$id_array[$building],$build_village,$plus_costs); $error = ''; switch($cl_builds->get_build_error2()){ case 'not_enough_ress': $error = 'Rohstoffe'; break; case 'not_enough_ress_plus': $error = 'Rohstoffe Bauschleife'; break; case 'max_stage': $error = 'hoechste stufe'; break; case 'not_enough_bh': $error = 'Bauernhof'; break; case 'not_enough_storage': $error = 'Speicher'; break; case 'not_fulfilled': $error = 'Gebaeude.'; break; } if(!empty($error)) return false; // Wenn kein Fehler ausgetreten ist, so kann das Gebäude gebaut werden: // Rohstoff preise & BH ermitteln: $wood = $cl_builds->get_wood($building,$build_village[$building]+1); $stone = $cl_builds->get_stone($building,$build_village[$building]+1); $iron = $cl_builds->get_iron($building,$build_village[$building]+1); $bh = $cl_builds->get_bh($building,$build_village[$building]+1); $time = $cl_builds->get_time($villagedata['main'],$building,$build_village[$building]+1); $onlytime = $cl_builds->get_time($villagedata['main'],$building,$build_village[$building]+1); // Wenn die letzte Abfrage keinen Datensatz gefunden hat, dann ist noch kein Auftrag vorhandne. if ($db->affectedRows()==0){ // Kein Auftrag vorhanden: $time += time(); // In Villages den ersten Auftrag speichern: $add_village_sql = ",main_build='".$building.",$time' "; } else { // Bereits ein Auftrag vorhanden, in die Schleife: $time += $build_village['end_time']; } // Nun mal die Rohstoffkosten abziehen bzw, BH dazuzählen UND Gebäude bauen aktiv aktivieren: $db->query("UPDATE villages SET r_wood=r_wood-'".round($wood*$plus_costs)."', r_stone=r_stone-'".round($stone*$plus_costs)."', r_iron=r_iron-'".round($iron*$plus_costs)."', r_bh=r_bh+'$bh' $add_village_sql where id='".$villagedata['id']."'"); // Nun den Auftrag noch in die Tabelle "build" rein: $db->query("INSERT into build (building,villageid,end_time,build_time) VALUES ('".$building."','".$villagedata['id']."','$time','$onlytime')"); $buildid = $db->getLastID(); // In Events den Bauauftrag speichern $db->query("INSERT into events (event_time,event_type,event_id,user_id,villageid) VALUES ('$time','build','$buildid','".$botconfig['id']."','".$villagedata['id']."')"); //VILLAGEDATA AKTUALISIEREN $new_data=array ( 'r_bh'=>$bh, 'r_wood'=>$villagedata['r_wood'] - round($wood*$plus_costs), 'r_stone'=>$villagedata['r_stone'] - round($stone*$plus_costs), 'r_iron'=>$villagedata['r_iron'] - round($iron*$plus_costs) ); $this->last_village = $new_data; } } } ?>
RE: SuperBot v0.98 - WutziXoX - 28.01.2012
Ich danke dir!
Aber jetzt sagt er mir hab die falsche version... Und das ich v1.12 brauche....-.-
Gibt es die möglichkeit den bot einfach zu updaten?
Finde auch das sogenante "Archiv" nicht wo es das update geben soll! Und im dslan ordner oder bot ordner finde ich auch nichts!
Und bei dslan direckt wenn ich mich einlogge und starte steht auch nichts mit update!
RE: SuperBot v0.98 - SlimShady95 - 28.01.2012
Adde mich in Skype, dann mach ich dir das. Btw der Bot ist scheiße
MfG Manuel
RE: SuperBot v0.98 - WutziXoX - 28.01.2012
Name ist der selbe wie hier ja? Mach ich! danke!
RE: SuperBot v0.98 - ShadowMonkey - 30.03.2012
(28.01.2012, 18:28)SlimShady95 Wrote: Adde mich in Skype, dann mach ich dir das. Btw der Bot ist scheiße
MfG Manuel
Naja besser als deiner ^^ Weil der wenigstens adelt . Ich weiß du hast angeblich den perfekten bot ,den aber niemand haben darf außer dir
BUG: Bei mir baut der teilweise seine dörfer höher aus und baut den Bauernhof bis 32 aus ?
|