05.12.2010, 15:03
| Poll: Welcher Bot kämpft besser/schneller? You do not have permission to vote in this poll. |
|||
| Valhalla v1.21 | 57 | 23.46% | |
| Nemesis v2.15 | 186 | 76.54% | |
| Total | 243 vote(s) | 100% | |
| * You voted for this item. | [Show Results] |
|
DSLan 'iNk' Bot - OpenSource
|
|
05.12.2010, 15:09
08.12.2010, 16:57
08.12.2010, 17:57
Ne, die Windows-Shell macht so Probleme... wird noch ne Weile dauern denk ich...
![]() LG Molt
08.12.2010, 21:23
Schade, habe jeden Tag ,mehrmals reingeguckt
![]() viel glück
18.02.2011, 19:03
und wie siehts mit der Version für 1.4 aus?
18.02.2011, 19:36
Schau mal aufs Datum -.-
Da kommt nichts mehr. MfG Manuel
18.02.2011, 20:11
schade -.-
24.02.2011, 15:40
Habe den Quellcode vom Bot sowieso nicht mehr, daher wird der Bot wohl nie weiterentwickelt werden.
Kein Support per PM!
24.02.2011, 16:34
*grins*
Code: # Nemesis iNk Bot by iNk ( http://unix.secure.la/adb/forums )
# Source File v2.1.0
use threads;
use threads::shared;
use Thread::Semaphore;
use strict;
use IO::Socket::INET;
use Time::HiRes qw(sleep);
use DBI;
use Tk;
our $version = '2.1.0';
our @C;
our $cfile = 'iNk-Bot.ini';
our $ifile = 'iNk-Bot.lnk';
if (@ARGV > 1) {
$cfile = $ARGV[0];
$ifile = $ARGV[1];
}
our $dbh;
our $host;
our $user;
our %ibot;
our @bots;
our $prevread;
our $read : shared;
our %avillages : shared;
our $inviteall : shared = 0;
our $allyfounded : shared = 0;
our $aggressive : shared = 0;
our $enemytarget : shared = 0;
our $ntarget;
my $mw = MainWindow->new;
my $box = $mw->Listbox(
-relief => 'raised',
-height => 20,
-width => 80,
-setgrid => 1,
-takefocus => '1'
);
$mw->title( 'DSLan \'iNk\' Bot v' . $version );
$mw->Label(-text => 'Copyright (c) iNk, www.thethirdway.tk')->pack;
my $scroll = $mw->Scrollbar(-command => ['yview', $box]);
$box->configure(-yscrollcommand => ['set', $scroll]);
$scroll->pack(-side => 'right', -fill => 'y');
$box->pack(-side => 'left', -fill => 'both', -expand => 1);
$mw->repeat(10, sub {
if (length($read) > 0 && $prevread ne $read) {
$box->insert('end', $read);
$prevread = $read;
}
});
&startup($box);
MainLoop;
sub start {
our $box = $_[2];
&sqlconnect() if &c($cfile, 'use-sql') eq 'true';
my $login;
@bots = split(/ /, &c($cfile, 'bot-names'));
$user = $bots[$_[1]-1];
$host = &c($cfile, 'dslan-host');
if (!( $login = &login($_[0]) )) {
if (!®ister($_[0])) {
&thar(" Registrierung von $user fehlgeschlagen.\n");
return;
} else {
&thar(" Account $user erstellt.\n");
&login($_[0]);
}
}
&thar(" $user eingeloggt.\n");
my $onetime = 0;
while (1) {
&update($login =~ /village=([0-9]+)/m, $_[1]);
for (my $i = 0; $i < @{$ibot{ 'vilnum' }}; $i++) {
my $vilnum = ${$ibot{ 'vilnum' }}[$i];
$vilnum =~ s/.*village=([0-9]+).*/$1/g;
if (!$onetime) {
if (&get( $host . "/game.php?village=$vilnum&screen=settings&mode=settings" )
=~ /([^"]+action=change_settings[^"]*)/m) {
my $settings = $1;
$settings =~ s/&/\&/g;
&get( $host . "/$settings", "map_size=15" );
}
my $hasally = &firstally($vilnum);
if ($hasally == 1) {
$inviteall = 1; sleep(3);
} elsif ($hasally == 2) {
if ($allyfounded) {
$onetime = 0;
last;
} else {
$allyfounded = 1;
}
&thar(" Stamm ".&c($cfile, 'ally-name')." wurde gegruendet.\n");
} elsif ($hasally == 3) {
&thar(" $user tritt Stamm bei.\n");
$onetime = 1
} else {
&invite($vilnum);
$onetime = 1
}
} else {
&update($vilnum, $_[1]);
&build($vilnum);
if ($ibot{'aktfarmlevel'} > 23900 && $ibot{'snobs'} < 1 && @{$ibot{'vilnum'}} < 3) {
my @enemyvils = @{&getenemyvils($vilnum)};
&singleattack($vilnum, $enemyvils[ int( rand(@enemyvils) ) ]);
}
&snobing($vilnum) if ($ibot{ 'aktsnob' } > 0);
if ($enemytarget) {
if (&checkavillages($enemytarget)) {
&singleattack($vilnum, $enemytarget );
} else {
$enemytarget = 0;
}
}
&recruit($vilnum);
&look($vilnum);
invite($vilnum) if ($inviteall);
&thar(" $user -> ${vilnum}\n") if (&c($cfile, 'verbose') eq 'true');
#&thar(" $user: spear:".$ibot{ 'aktspear' }.", axe:".$ibot{ 'aktaxe' }.".\n");
}
}
}
}
sub look {
my $look = &get( $host . "/game.php?village=$_[0]&screen=report" );
my $enemy;
if ( $look =~ /f="([^"]+)"[^"]+"[^"]+red\.png[^a-zA-Z_0-9]+([a-zA-Z_0-9]+).*neu/m ) {
my ($var1, $var2) = ($2, $1); $var2 =~ s/&/\&/g;
if ($var1 eq $user) {
&thar(" $user lernt Angriffstechniken.\n");
my $naxe = &c($ifile, 'axe-attack') * 1.5; $naxe = 9900 if ($naxe > 10000);
&c($ifile, 'axe-attack', $naxe);
my $nlight = &c($ifile, 'light-attack') * 1.5; $nlight = 2100 if ($nlight > 2500);
&c($ifile, 'light-attack', $nlight);
my $nheavy = &c($ifile, 'heavy-attack') * 1.5; $nheavy = 500 if ($nheavy > 750);
&c($ifile, 'heavy-attack', $nlight);
} else {
&thar(" $user lernt Verteidigungstechniken.");
my $naxe = &c($ifile, 'spear-attack') * 1.5; $naxe = 9000 if ($naxe > 10000);
&c($ifile, 'spear-attack', $naxe);
my $nlight = &c($ifile, 'sword-attack') * 1.5; $nlight = 9000 if ($nlight > 10000);
&c($ifile, 'sword-attack', $nlight);
my $nheavy = &c($ifile, 'heavy-attack') * 1.5; $nheavy = 500 if ($nheavy > 750);
&c($ifile, 'heavy-attack', $nlight);
$naxe = &c($ifile, 'axe-attack') * 1.5; $naxe = 9900 if ($naxe > 10000);
&c($ifile, 'axe-attack', $naxe);
$nlight = &c($ifile, 'light-attack') * 1.5; $nlight = 2100 if ($nlight > 2500);
&c($ifile, 'light-attack', $nlight);
}
$look = &get( $host . "/$var2" );
if ($look =~ /Angreifer:[^\n]+\n[^"]+"([^"]+)/m && $var1 ne $user) {
$look = $1;
$look =~ s/.*id=([0-9]+).*/$1/g;
$enemytarget = $look; &thar(" -> Globales Feindziel: \[$ntarget\], Initiator: $user.");
}
}
}
sub checkavillages {
while ( my($k,$v) = each %avillages) {
if (&checkarray($_[0], \@{$v}) == 0) {
return 0;
}
}
return 1;
}
sub snobing {
if ($ntarget > 0 && &checkavillages($ntarget))
{
&singleattack($_[0], $ntarget);# &thar(" $user attackiert $ntarget.\n");
} else {
my @farmvils;
if ($aggressive) {
@farmvils = @{&getenemyvils($_[0])};
} else {
@farmvils = @{&getfarmvils($_[0])};
}
if (@farmvils > 0) {
$ntarget = $farmvils[ int( rand(@farmvils) ) ];
&singleattack($_[0], $ntarget);
}
}
}
sub sqlconnect {
my $database = 'lan';
my $hostname = &c($cfile,'dslan-host');
my $dsn = "DBI:mysql:database=$database;host=$hostname";
my $user = "root"; my $pass = &c($cfile,'root-password');
$dbh = DBI::->connect( $dsn, $user, $pass,
{ 'RaiseError' => 1, 'AutoCommit' => 1 } );
}
sub sql {
my @resarray;
my $response;
my $sql = $_[0];
my $sth = $dbh->prepare($sql);
$sth->execute;
while ( my $row = $sth->fetchrow_arrayref ) {
$response = $response . " @{ $row }"; }
@resarray = split( / /, $response );
return \@resarray;
}
sub sqldisconnect {
$dbh->disconnect;
}
sub getfarmvils {
my @vils;
my $farm;
if (&c($cfile, 'use-sql') eq 'true') {
$farm = &sql('SELECT `id` FROM `villages` WHERE `userid` = -1 LIMIT 0, 30');
@vils = @{$farm};
} else {
$farm = &get( $host . "/game.php?village=$_[0]&screen=map" );
foreach( split( /\n/, $farm ) ) {
if (/background-color:rgb\(180,0,0\)(.+)/) { #null, null, false
$farm = $1;
$farm =~ s/.*id=([0-9]+).*/$1/g;
push @vils, $farm;
}
}
}
return \@vils;
}
sub recruit {
my @barrunits = ('axe', 'spear', 'sword');
&shuffle(\@barrunits);
my @units = (@barrunits, 'light', 'heavy');
&snob($_[0]) if ($ibot{ 'hassnobb' });
for (my $i = 0; $i < 3; $i++) {
my $sunits = &c($ifile, $units[$i].'-attack') - $ibot{ 'akt'.$units[$i] };
#&thar(" muss $sunits $units[$i] rekrutieren\n");
next if ($sunits < 1);
my $barracks = &get( $host . "/game.php?village=$_[0]&screen=barracks" );
if ($barracks =~ /\.unit_$units[$i], ([0-9]+)/m) {
$sunits = $1 if ($sunits > $1);
}
next if ($barracks =~ /action=cancel/m);
if ($barracks =~ /([^"]+action=train[^"]*)/m) {
my $train = $1;
$train =~ s/&/\&/g;
if ($barracks !~ /input name="unit_$units[$i]/m) {
if(&smith ($_[0], $units[$i])) {
$barracks = &get( $host . "/$train", "submit=Rekrutieren&unit_".$units[$i]."=$sunits" );
#&thar(" $user forscht und rekrutiert Infanterie.\n");
}
} else {
$barracks = &get( $host . "/$train", "submit=Rekrutieren&unit_".$units[$i]."=$sunits" );
#&thar(" $user rekrutiert Infanterie.\n");
}
}
}
for (my $i = 2; $i < 5; $i++) {
my $sunits = &c($ifile, $units[$i].'-attack') - $ibot{ 'akt'.$units[$i] };
next if ($sunits < 1);
my $barracks = &get( $host . "/game.php?village=$_[0]&screen=stable" );
if ($barracks =~ /\.unit_$units[$i], ([0-9]+)/m) {
$sunits = $1 if ($sunits > $1);
}
next if ($barracks =~ /action=cancel/m);
if ($barracks =~ /([^"]+action=train[^"]*)/m) {
my $train = $1;
$train =~ s/&/\&/g;
if ($barracks !~ /input name="unit_$units[$i]/m) {
if(&smith ($_[0], $units[$i])) {
$barracks = &get( $host . "/$train", "submit=Rekrutieren&unit_".$units[$i]."=$sunits" );
#&thar(" $user forscht und rekrutiert Kavallerie.\n");
}
} else {
$barracks = &get( $host . "/$train", "submit=Rekrutieren&unit_".$units[$i]."=$sunits" );
#&thar(" $user rekrutiert Kavallerie.\n");
}
}
}
}
sub snob {
my $snob = &get( $host . "/game.php?village=$_[0]&screen=snob" );
if ($snob =~ /([^"]+action=train_snob[^"]*)/m) {
$snob = $1;
$snob =~ s/&/\&/g;
$snob = &get( $host . "/$snob" );
&thar(" $user rekrutiert ein Adelsgeschlecht.\n");
}
return $snob;
}
sub smith {
my $smith =
&get( $host . "/game.php?village=$_[0]&screen=smith" );
my $regvar = $_[1];
if ($smith =~ /([^"\n]+action=research&id=${regvar}[^"\n]*)/m) {
my $research = $1;
$research =~ s/&/\&/g;
for (my $i = 0; $i < 3; $i++) {
$research = &get( $host . "/$research" );
}
return 1;
}
return 0;
}
sub build {
my $build =
&get( $host . "/game.php?village=$_[0]&screen=main" );
if ($build =~ /screen=snob/m) {
$ibot{ 'hassnobb' } = 1; }
else { $ibot{ 'hassnobb' } = 0; }
while ( $build =~ /action=build/m ) {
if ($build !~ /\n([^\n]*iNk::$user[^\n]*)/) {
if ($build =~ /([^"]+action=change_name[^"]*)/m) {
my $rename = $1;
$rename =~ s/&/&/g;
&get( $host . "/$rename", "name=iNk::$user" );
}
}
if ($build =~ /([^"]+action=build[^"]*)/m) {
my $url = $1;
$url =~ s/&/\&/g;
$build = &get( $host . "/$url" );
}
}
}
sub debug {
open (TMP, ">debug.txt");
&thar(TMP $_[0]);
close(TMP);
system("notepad debug.txt");
}
sub singleattack {
return if ($_[1] < 1);
my $stattack = &get( $host . "/game.php?village=$_[0]&screen=place&mode=command&target=$_[1]" );
my( $x, $y );
if ($stattack =~ /x: <input[^\n]+value="([0-9]+)[^\n]+\n[^\n]+value="([0-9]+)/m)
{
$x = $1;
$y = $2;
}
my $spear = $1 if ($stattack =~ /\.unit_spear, ([0-9]+)/m);
my $sword = $1 if ($stattack =~ /\.unit_sword, ([0-9]+)/m);
my $axe = $1 if ($stattack =~ /\.unit_axe, ([0-9]+)/m);
my $spy = $1 if ($stattack =~ /\.unit_spy, ([0-9]+)/m);
my $light = $1 if ($stattack =~ /\.unit_light, ([0-9]+)/m);
my $heavy = $1 if ($stattack =~ /\.unit_heavy, ([0-9]+)/m);
my $snob = $1 if ($stattack =~ /\.unit_snob, ([0-9]+)/m);
my $ram = $1 if ($stattack =~ /\.unit_ram, ([0-9]+)/m);
$snob = 1 if ($snob > 1);
return if ($light < &c ($ifile, 'light-attack') ||
$heavy < &c ($ifile, 'heavy-attack') ||
$axe < &c ($ifile, 'axe-attack'));
if ($stattack =~ /([^"]+try=confirm[^"]*)/m)
{
$stattack = $1;
$stattack =~ s/&/\&/g;
$stattack = &get( $host . "/$stattack", "unit_axe=$axe&"
. "unit_heavy=$heavy&"
. "unit_light=$light&"
. "unit_snob=$snob&"
. "unit_ram=$ram&"
. "x=$x&y=$y&attack=Angreifen" );
&thar(" $user schickt ein Adelsgeschlecht los. (".$x."|".$y.") \[$_[1]\] \n") if ($snob);
my (@aparas, @apara);
foreach ( split( /\n/, $stattack ) ) { push @apara, $_ }
@apara = grep( /type="hidden"/, @apara );
foreach my $spara (@apara) {
$spara =~ s/.*name="([a-z_]+)".*value="([0-9a-z]+)".*/$1=$2/g;
$spara =~ s/[\n\r\t ]//g;
push @aparas, $spara;
}
if ($stattack =~ /([^"]+action=command[^"]+)/m) {
$stattack = $1;
$stattack =~ s/&/\&/g;
}
$stattack = &get( $host . "/$stattack", join( "&", @aparas)."&submit=OK" );
}
}
sub shuffle {
my $array = shift;
my $i = @$array;
while ( --$i )
{
my $j = int rand( $i+1 );
@$array[$i,$j] = @$array[$j,$i];
}
}
sub getenemyvils {
my @vils;
my $rang = &get( $host . "/game.php?village=$_[0]&screen=ranking" );
my @tmp = split( /\n/, $rang ); &shuffle( \@tmp );
foreach( @tmp )
{
if (/screen=info_player/) {
if (&checkarray($_, \@bots)) {
my $enemy = $_;
$enemy =~ s/.*f="([^"]+)".*/$1/g; $enemy =~ s/&/\&/g;
$enemy = &get( $host . "/$enemy" );
foreach( split( /\n/, $enemy ) ) {
if (/screen=info_village/) {
$enemy = $_;
$enemy =~ s/.*id=([0-9]+).*/$1/g;
push @vils, $enemy;
}
}
return \@vils;
}
}
}
return 0;
}
sub checkarray {
my @array = @{$_[1]};
my $skalar = $_[0];
foreach (split( /\n/, $skalar)) {
my $checkvar = $_;
foreach (@array) {
if ($checkvar =~ /$_/ || $checkvar == $_) {
return 0;
}
}
}
return 1;
}
sub invite {
if ($inviteall == 1 && $_[1] != 1) {
my $ally = &get( $host . "/game.php?village=$_[0]&screen=ally&mode=invite" );
if ($ally =~ /([^\n]+action=invite[^\n]+)/m) {
my $tribe = $1;
$tribe =~ s/.*action="([^"]+)".*/$1/g; $tribe =~ s/&/\&/g;
foreach (@bots) {
&get( $host . "/$tribe", "name=$_&submit= OK " );
}
$ibot{ 'allyfounder' } = 1;
$inviteall = 0;
} else {
$ibot{ 'allyfounder' } = 0;
}
}
}
sub firstally {
my $allyname = &c($cfile, 'ally-name');
my $ally_ = &get( $host . "/game.php?village=$_[0]&screen=ranking&mode=ally" );
my $ally = &get( $host . "/game.php?village=$_[0]&screen=ally" );
if ($ally_ =~ /">$allyname<\/a>/m) {
if ($ally =~ /([^\n]+action=accept[^\n]+)/m) {
my $tribe = $1;
$tribe =~ s/.*href="([^"]+)".*/$1/g; $tribe =~ s/&/\&/g;
$ally = &get( $host . "/$tribe" );
return 3;
}
if ($ally !~ /action=create/m) {
return 0;
}
return 1;
} else {
if ($ally =~ /([^\n]+action=create[^\n]+)/m) {
my $tribe = $1;
$tribe =~ s/.*action="([^"]+)".*/$1/g; $tribe =~ s/&/\&/g;
$ally = &get( $host . "/$tribe", "name=iNk::$allyname&tag=$allyname&submit=Gründen" );
$ally = &get( $host . "/game.php?village=$_[0]&screen=ally&mode=invite" );
if ($ally =~ /action=invite/m) {
$tribe = $1;
$tribe =~ s/.*action="([^"]+)".*/$1/g; $tribe =~ s/&/\&/g;
foreach (@bots) {
&get( $host . "/$tribe", "name=$_&submit= OK " );
}
}
}
return 2;
}
}
sub update {
my $overview = &get( $host . "/game.php?village=$_[0]&screen=overview_villages");
my %backup = %ibot;
my @vtmp : shared;
my @villages;
&ibot( 'points', $overview =~ /Rangliste[^|]+[0-9]+[^0-9]+([0-9]+[^0-9]+[0-9]+)/m );
my $points = &ibot( 'points' ); $points =~ s/[^0-9]+//g; &ibot( 'points', $points );
&ibot( 'rang', $overview =~ /Rangliste<\/a> \(([0-9]+)\./m );
undef @vtmp;
foreach ( split( /\n/, $overview ) )
{
if (/&screen=overview">/) {
my $urlv = $_;
$urlv =~ s/.*href="([^"]+)"/$1/g;
push @villages, $urlv;
$urlv =~ s/.*village=([0-9]+).*/$1/g;
push @vtmp, $urlv;
}
}
&ibot( 'vilnum', \@villages );
$avillages{ $user } = \@vtmp;
&ibot( 'aktfarmlevel', $overview =~ /<td align="center">([0-9]+)\/[0-9]+/m =~ /([0-9]+)/ );
&ibot( 'aktvilname', $overview =~ /screen=overview">([^<]+)<\/a>/m );
if (keys( %backup ) > 2) {
&thar(" $user ist nun ".$ibot{'rang'}.".\n") if $ibot{'rang'} != $backup{'rang'}
&& $ibot{'points'} > 12300;
if (@{$ibot{'vilnum'}} > @{$backup{'vilnum'}} && @{$backup{'vilnum'}}) {
&thar(" $user erobert ein Dorf. (".@{$backup{'vilnum'}}."->".@{$ibot{'vilnum'}}.")\n");
$aggressive = 0;
} elsif (@{$ibot{'vilnum'}} < @{$backup{'vilnum'}}) {
&thar(" $user verlor ein Dorf. (".@{$backup{'vilnum'}}."->".@{$ibot{'vilnum'}}.")\n");
$aggressive = 1;
};
}
my $place = &get( $host . "/game.php?village=$_[0]&screen=place&mode=units" );
my $getunits = $place;
$getunits = $1 if ($getunits =~ /Insgesamt[^\n]*\n([^\n]+)/m);
$getunits =~ s/[^0-9\/]//g; #&thar($getunits."\n");
my @akts = split( /\//, $getunits );
$ibot{ 'aktspear' } = $akts[0];
$ibot{ 'aktsword' } = $akts[1];
$ibot{ 'aktaxe' } = $akts[2];
$ibot{ 'aktspy' } = $akts[3];
$ibot{ 'aktlight' } = $akts[4];
$ibot{ 'aktheavy' } = $akts[5];
$ibot{ 'aktsnob' } = $akts[8];
$ibot{ 'aktram' } = $akts[6];
my @tmp;
foreach ( split( /\n/, $place ) ) { push @tmp, $_ if /action=all_back/ }
for ( my $i = 0 ; $i < @tmp ; $i++ ) {
$place = $tmp[$i];
$place =~ s/.*href="([^"]+)">.*/$1/g;
$place =~ s/&/\&/g;
&get( $host . "/$place" );
}
#if ($points > 30000) {
# &c($ifile, 'axt-attack', '10000');
# &c($ifile, 'light-attack', '2000');
# &c($ifile, 'heavy-attack', '0');
# &c($ifile, 'spear-attack', '3000');
# &c($ifile, 'sword-attack', '3000');
#}
}
sub ibot {
$ibot{ $_[0] } = $_[1] if @_ > 1;
return $ibot{ $_[0] } if @_ < 2;
}
sub register {
my $register = &get( $host . "/register.php?action=validate",
"name=$user&password=boootj&password_confirm=boootj&agb=on&submit=Registrieren"
);
if ($register =~ /erfolgreich/m)
{
return 1;
} else {
return 0;
}
}
sub login {
my $login = &get(
$host . "/index.php?action=login",
"user=$user&clear=true&password=boootj"
);
if ($login =~ /action=logout/m)
{
return $login;
} elsif ($login =~ /action=create/m)
{
return &get( $host . "/create_village.php?action=create", "direction=nw" );
} else {
return 0;
}
}
sub startup {
my $config = "iNk Bot - Konfigurationsdatei Version $version
\n\tdslan-host=localhost;;
\tbot-names=Nemesis;;
\tsleep-delay=0.0;;
\tdef-units=spear sword;;
\trecruit-all=0;;
\tally-name=iNkas;;
\tverbose=false;;
\tuse-sql=false;;
\troot-password=;;
";
my $internalconfig = "\taxe-attack=250;;\n\tlight-attack=100;;\n\theavy-attack=100;;\n\tangry-level=1;;
\tspear-attack=100;;\n\tsword-attack=50;;\n";
my $renew = 0;
#&thar("iNk Bot v$version\n\n");
&thar('');
open( TARGET, "<".$ifile );
if ( !<TARGET> ) {
open( TARGET, ">".$ifile );
print TARGET $internalconfig;
close(TARGET);
}
open( TARGET, "<".$cfile );
if ( !<TARGET> ) {
open( TARGET, ">".$cfile );
print TARGET $config;
close(TARGET);
}
else {
open( TARGET, "<".$cfile );
while (<TARGET>) {
if ( $_ =~ /.*$version.*/ ) { $renew = 1; }
}
}
if ( $renew == 0 ) {
close(TARGET);
open( TARGET, ">".$cfile );
print TARGET $config;
close(TARGET);
}
my $i = 1;
foreach ( split (/ /, &c($cfile, 'bot-names')) )
{
threads->new( \&start, $_, $i++, $_[0] );
}
}
sub thar {
#my $s = Thread::Semaphore->new();
#$s->down();
$read = $_[0];
#$box->insert('end', $_[0]);
#$s->up();
}
sub c {
my ( @tmp, $v );
if ( !defined( $_[2] ) && $_[3] != 1 ) {
open( TARGET, '<', $_[0] );
while (<TARGET>) {
foreach ( split( /\n/, $_ ) ) {
$v = ${_} if /$_[1]=/i;
}
$v =~ s/.*$_[1]=(.*);;/\1/gi;
}
close(TARGET);
return $v;
}
else {
open( TARGET, '>', $_[0] . ".ZOR" );
open( SOURCE, '<', $_[0] );
my $done = 0;
my ($be) = ( $_[2] );
while (<SOURCE>) {
my ($ln, $nl) = ($_, $_[1]);
if (/$nl=/) {
$ln =~ s/=.*;;/=$be;;/g;
$done = 1;
}
print TARGET $ln;
}
if ( !$done ) {
print TARGET "$_[1]=$be;;\n";
}
close(TARGET);
close(SOURCE);
unlink( $_[0] );
rename( $_[0] . ".ZOR", $_[0] );
return $_[2];
}
}
sub ddble { my (%dd) = (); @dd{@_} = 1; return ( keys %dd ); }Besser? ![]() LG Molt
24.02.2011, 19:17
Wär echt cool wenn der Bot auch für 1.4 funkt. würde.
Ich bewerte euch dann auch alle ;-) ^^
Press any key!
"Wo ist denn der verdammte 'any key' auf der Tastatur?!?" Mfg Nauschi
24.02.2011, 19:37
Da hat ihn wohl noch jemand abgegriffen, bevor der Webspace offline ging.
Trotzdem. Das ist Perl. Und ich bin jetzt eingefleischter C++ Programmierer.
Kein Support per PM!
24.02.2011, 19:39
@nauschi
somit hat sich die frage geklärt^^ du musst dich mit den derzeitigen bots zufrieden geben, und auf die nächste dslan version warten
Ein missglückter Versuch eines Saltos von einem Pferd
![]() -Ausgezeichnet, jetzt können wir in jeder Richtung angreifen.
@iNk:
BöÖö! Immer Ausreden finden, kannst das ja in C++ übersetzen. ![]() Den Inhalt hast du ja mehr oder weniger, die Syntax musst du einfach überarbeiten, so viel wärs jetzt nicht im Vergleich zu dem, was du schon in den Bot investiert hast. Aber du musst es wissen ![]() Du könntest dir auch ein bisschen Hilfe holen: Klick (schau unter B::CC) LG Molt
25.02.2011, 02:29
Okay, dann eben direkter: Kein Bock
![]() Ich programmiere grad nen geilen DS-Bot. Und das auch nur, weils mir Spaß macht. Du kannst dich doch in Perl einarbeiten und den Bot selbst weiterentwickeln
Kein Support per PM!
25.02.2011, 09:31
Ich hab genug mit der DSLan selbst zu tun
![]() Wir werden uns übrigens bemühen, die URL's an die von DS anzupassen, meinst du, dein Bot läuft dann auch auf DSLan? ![]() Und wenn ich irgendwann mal zu viel Zeit hab, kann ich mir Perl ja mal anschauen... ![]() LG Molt
25.02.2011, 15:42
Prinzipiell wäre es möglich, da er auch für SDS konzipiert ist.
Allerdings müsste DS dann auf Json umsteigen, was die Kartenansicht betrifft (Karte ziehen). Siehe de70.die-staemme.de/map/tiles/500_500.json Und das ist bestimmt ziemlich aufwendig.
Kein Support per PM!
26.02.2011, 14:11
ein umstieg auf json selbst wäre nicht das problem... wenn wir die kartenfunktionalität übernehmen sollten, wäre dies eh am sinnvollsten...
(This post was last modified: 27.04.2011, 16:26 by Hilfetrupp.)
27.04.2011, 16:23
hallo, hätte mal paar fragen an euch
![]() 1) wie kann ich mehrere bots erstellen 2) mein bot hat mich nur attakiert nachdem ich ihn angegriffen habe (und mich dann auch geadelt ), vorher aber nicht..., kann ich das ändern?3)habe ich gehört man kann agressivitätsstufen einstellen, stimmt das? und wenn ja wie gehts? 4)kann ich bestimmen wer off, deff baut (denn der eine hat misch gebaut^^)? und wenn ja ob sich die gegenseitig unterstützen? 5)wenn alle bots in einen stamm kommen greifen sie sich dann eh nicht an? ![]() hab hier halt ne 1.3 mit der gehts ja ![]() meine config: Quote:dslan-host=localhost;; LG
(This post was last modified: 27.04.2011, 16:45 by Bettdecke1.)
27.04.2011, 16:43
1. Musst beim Start vom Bot ne zahl zwischen 1 und 13 eingeben, das ist die AnzahL!
2. Kann ich nichts zu sagen 3. Das sleep-delay, umso höher die Zahl, umso langsamerer ist der Bot, genaueres ka 4. Nein weil du kannst ja bei stämme auch nicht bestimmen, wer deff oder off bauen soll ![]() 5. Glaube nicht edit; zum 1. musst du in der Config bei bot-names=Nemensis so z.B. schreiben: Code: bot-names=Nemensis Thor Ink Bettdecke1 DSLAN TWLAN;;Das sind die Namen der Bots Wenn ich dir helfen konnte, bewerte mich doch bitte! Manche Leute sagen, 20 Stunden am Tag Tetris zu summen wäre verrückt, ich frage mich nur wieso... |
|
« Next Oldest | Next Newest »
|
Users browsing this thread: 4 Guest(s)





![[Image: saltoeinespferdes.png]](http://img844.imageshack.us/img844/2498/saltoeinespferdes.png)

