use warnings;
use feature ':5.10';
+use CGI;
+
use Moose;
use MooseX::MethodAttributes;
.$c->nick." TO RESPOND");
}
+sub settype
+ : Help(Usage: .settype incId type | or: .settyp callId X:Y:Z type | or: .settypeall callId type)
+ : Type(def)
+ : ACL(irc_settype)
+ : Alias(settypeall)
+{
+ my ($self,$c,$msg) = @_;
+ my $dbh = $c->model;
+
+ my $query = q{
+SELECT i.id,call,shiptype, coords(x,y,z),c.landing_tick - tick() AS eta
+FROM incomings i
+ JOIN current_planet_stats p ON i.sender = p.id
+ JOIN calls c ON i.call = c.id
+ };
+ my $fleets;
+ my $type;
+ my $call;
+
+ if ($self->name eq 'settypeall'){
+ ($call,$type) = $msg =~ /^(\d+) (.*)$/ or die 'ARGS';
+
+ $fleets = $dbh->prepare($query . q{
+WHERE i.call = ?
+ });
+ $fleets->execute($call);
+ }else{
+ my ($id,$x,$y,$z,$t) = $msg =~ /^(\d+) (\d+):(\d+):(\d+) (.*)$/;
+ if (defined $id){
+ $fleets = $dbh->prepare($query . q{
+WHERE i.call = ? AND p.id = planetid(?,?,?,tick())
+ });
+ $fleets->execute($id,$x,$y,$z);
+ }else{
+ ($id,$t) = $msg =~ /^(\d+) (.*)$/ or die 'ARGS';
+ $fleets = $dbh->prepare($query . q{
+WHERE i.id = ?
+ });
+ $fleets->execute($id);
+ }
+ $type = $t;
+ }
+
+ $type = CGI::escapeHTML($type);
+ $dbh->begin_work;
+ my $deflog = '';
+ my $settype = $dbh->prepare(q{UPDATE incomings SET shiptype = ? WHERE id = ?});
+ while (my $inc = $fleets->fetchrow_hashref){
+ $call //= $inc->{call};
+ if ($inc->{eta} < 0){
+ $c->reply("This call is old. Did you use the call id instead of inc id by"
+ ." accident? You can use .settypeall callid to set the type on all incs"
+ ." in a call. Or use webbie if you really want to update this old call.");
+ $dbh->rollback;
+ return;
+ }
+ $settype->execute($type,$inc->{id});
+ $deflog .= "Set fleet: [B]$inc->{id} [/B] to: [B]$type [/B]\n";
+ $c->reply("Set fleet $inc->{id} from $inc->{coords} on call $call to $type (previously $inc->{shiptype})");
+ }
+ if ($fleets->rows == 0){
+ $c->reply("No matching fleets");
+ $dbh->rollback;
+ }else{
+ $c->def_log($call,$deflog);
+ $dbh->commit;
+ }
+}
+
1;