From ea2bc26be5766e39c4f0883791bda552da6fb63b Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sun, 5 May 2013 13:56:57 -0600 Subject: [PATCH] More fissure fun. --- bin/tick_fissures.pl | 22 ++++++++++--------- lib/Lacuna.pm | 2 +- lib/Lacuna/RPC/Building/BlackHoleGenerator.pm | 15 +++++++++++-- var/www/public/changes.txt | 3 +++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/bin/tick_fissures.pl b/bin/tick_fissures.pl index 827d003c..f21b1e6d 100644 --- a/bin/tick_fissures.pl +++ b/bin/tick_fissures.pl @@ -32,7 +32,6 @@ my %body_alert; for my $body_id (sort keys %has_fissures) { my $body = $db->resultset('Map::Body')->find($body_id); - out('Ticking Fissures on '.$body->name); my @fissures = $body->get_buildings_of_class('Lacuna::DB::Result::Building::Permanent::Fissure'); # First check to see how many fissures we have active. @@ -48,20 +47,22 @@ for my $body_id (sort keys %has_fissures) { # and finally a spare space or a building at random (excluding the PCC). # The level of the second Fissure is the same level as the BHG (if there is one) otherwise it is level 1 my $fissure_cnt = scalar @fissures; + out(sprintf("Ticking %d Fissures on %s",$fissure_cnt,$body->name)); if ($fissure_cnt >= 3) { my $f_at_0; for my $fissure (@fissures) { - out(sprintf("Level %02d:%03d fissures at %2d/%2d coordinates.", + out(sprintf("Level %02d:%03d fissure at %2d/%2d coordinates.", $fissure->level, $fissure->efficiency, $fissure->x, $fissure->y)); if ($fissure->efficiency > 0) { - if ($fissure->efficiency > 50) { - $fissure->efficiency($fissure->efficiency - 50); + if ($fissure->efficiency > 40) { + $fissure->efficiency($fissure->efficiency - 40); } else { $fissure->efficiency(0); + $f_at_0++; } $body_alert{$body_id} = { - range => 100, + range => 120, type => "critical", }; } @@ -89,13 +90,14 @@ for my $body_id (sort keys %has_fissures) { $fissure->level, $fissure->efficiency, $fissure->x, $fissure->y)); fissure_level($body, $fissure); #Level fissure, Send minor alert $body_alert = level achieved. + my $range = ($fissure->level * 5) * $fissure_cnt; if ($body_alert{$body_id}) { - $body_alert{$body_id}->{range} = $fissure->level - if ($body_alert{$body_id}->{range} < $fissure->level); + $body_alert{$body_id}->{range} = $range + if ($body_alert{$body_id}->{range} < $range); } else { $body_alert{$body_id} = { - range => $fissure->level, + range => $range, type => "level", }; } @@ -123,14 +125,14 @@ for my $body_id (sort keys %has_fissures) { } } } -out("We have explosive"); +out(sprintf("We have explosive on %2d bodies", scalar keys %body_boom)); for my $body_id (sort keys %body_boom) { my $body = $db->resultset('Map::Body')->find($body_id); out('Exploding '.$body->name); delete $body_alert{$body_id} if ($body_alert{$body_id}); fissure_explode($body); } -out("Warn people"); +out(sprintf("Warn people from %2d bodies", scalar keys %body_alert)); for my $body_id (sort keys %body_alert) { my $body = $db->resultset('Map::Body')->find($body_id); #Alert empires once for each body within the alert range that had an event. diff --git a/lib/Lacuna.pm b/lib/Lacuna.pm index 88668fa9..cd1151ab 100644 --- a/lib/Lacuna.pm +++ b/lib/Lacuna.pm @@ -7,7 +7,7 @@ use Config::JSON; useall __PACKAGE__; -our $VERSION = 3.0888; +our $VERSION = 3.0889; my $config = Config::JSON->new('/data/Lacuna-Server/etc/lacuna.conf'); my $db = Lacuna::DB->connect($config->get('db/dsn'),$config->get('db/username'),$config->get('db/password'), { mysql_enable_utf8 => 1}); diff --git a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm index c3b9fc27..9128a7cf 100644 --- a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm +++ b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm @@ -799,7 +799,13 @@ sub generate_singularity { $effect->{target} = $return_stats; #And now side effect time my $side = randint(0,99); - if ($task->{side_chance} > $side) { + if ($return_stats->{fissures}) { + for my $count (1 .. $return_stats->{fissures}) { + $return_stats = bhg_random_fissure($building); + $effect->{side} = $return_stats; + } + } + elsif ($task->{side_chance} > $side) { my $side_type = randint(0,99); if ($side_type < 5) { $return_stats = bhg_random_fissure($building); @@ -1195,6 +1201,7 @@ sub bhg_make_asteroid { my ($building, $body) = @_; my $old_class = $body->class; my $old_size = $body->size; + my @fissures = $body->get_buildings_of_class('Lacuna::DB::Result::Building::Permanent::Fissure'); my @to_demolish = @{$body->building_cache}; $body->delete_buildings(\@to_demolish); my $new_size = int($building->level/5); @@ -1206,7 +1213,7 @@ sub bhg_make_asteroid { usable_as_starter_enabled => 0, alliance_id => undef, }); - return { + my $rstat = { message => "Made Asteroid", old_class => $old_class, class => $body->class, @@ -1215,6 +1222,10 @@ sub bhg_make_asteroid { id => $body->id, name => $body->name, }; + if (scalar @fissures) { + $rstat->{fissures} = scalar @fissures; + } + return $rstat; } sub bhg_random_make { diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 687df83b..6d5b8fc9 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,3 +1,6 @@ +3.0889: + - Mod: More Fissure Fun. + 3.0888: - Mod: Oracle now shows planets in star map if in range. - Mod: Fissures alert via email to nearby empires. -- 2.51.2