comparison skillbot.pl @ 59:74213ea642da

Countdown text is now dynamic using the finish timestamp
author Dominic Cleal <dominic@computerkb.co.uk>
date Sun, 28 Dec 2008 18:57:40 +0000
parents 7d43407a9214
children 69d7a89d3adc
comparison
equal deleted inserted replaced
58:7d43407a9214 59:74213ea642da
248 epoch => $f->{skill_finish}, 248 epoch => $f->{skill_finish},
249 time_zone => $f->{tz}); 249 time_zone => $f->{tz});
250 250
251 $text = sprintf("Currently training %s ". 251 $text = sprintf("Currently training %s ".
252 "(finish in %s, %s %s%s)", 252 "(finish in %s, %s %s%s)",
253 $f->{skill_name}, $f->{skill_countdown}, 253 $f->{skill_name},
254 countdown($f->{skill_finish}),
254 $finish->strftime("%A %R"), 255 $finish->strftime("%A %R"),
255 $finish->time_zone_short_name(), 256 $finish->time_zone_short_name(),
256 $downtime); 257 $downtime);
257 } else { 258 } else {
258 $text = "No skill currently training"; 259 $text = "No skill currently training";
278 $a->{skill_finish} <=> $b->{skill_finish} 279 $a->{skill_finish} <=> $b->{skill_finish}
279 } grep { defined $_->{skill} } @friends; 280 } grep { defined $_->{skill} } @friends;
280 281
281 for my $f (@training) { 282 for my $f (@training) {
282 $nreply .= sprintf("\002%s\002 (%s) | ", 283 $nreply .= sprintf("\002%s\002 (%s) | ",
283 $f->{char}, $f->{skill_countdown}); 284 $f->{char}, countdown($f->{skill_finish}));
284 } 285 }
285 286
286 $self->privmsg('#' . $config{channel}, substr($nreply, 0, -3)); 287 $self->privmsg('#' . $config{channel}, substr($nreply, 0, -3));
287 } 288 }
288 } 289 }
502 if (defined $f->{skill}) { 503 if (defined $f->{skill}) {
503 # If the skill's the same, update the times 504 # If the skill's the same, update the times
504 if ($skill->id eq $f->{skill}) 505 if ($skill->id eq $f->{skill})
505 { 506 {
506 $f->{skill_finish} = $skill->finish_time; 507 $f->{skill_finish} = $skill->finish_time;
507 $f->{skill_countdown} = $skill->time_remaining;
508 return; 508 return;
509 } 509 }
510 510
511 # Skill has changed, delet previous announcement 511 # Skill has changed, delet previous announcement
512 del_one_shot_timer($f->{timer}); 512 del_one_shot_timer($f->{timer});
528 return; 528 return;
529 } 529 }
530 530
531 $f->{skill} = $skill->id; 531 $f->{skill} = $skill->id;
532 $f->{skill_finish} = $skill->finish_time; 532 $f->{skill_finish} = $skill->finish_time;
533 $f->{skill_countdown} = $skill->time_remaining;
534 $f->{skill_name} = sprintf("%s %d", $skill->name, $skill->level); 533 $f->{skill_name} = sprintf("%s %d", $skill->name, $skill->level);
535 534
536 # Check if the finish time is within scheduled EVE downtime 535 # Check if the finish time is within scheduled EVE downtime
537 if (timestamp_in_downtime($f->{skill_finish})) 536 if (timestamp_in_downtime($f->{skill_finish}))
538 { 537 {
562 $self->privmsg('#' . $config{channel}, sprintf( 561 $self->privmsg('#' . $config{channel}, sprintf(
563 "\002%s:\002 %s", $f->{nick}, 562 "\002%s:\002 %s", $f->{nick},
564 encode("utf8", $text))); 563 encode("utf8", $text)));
565 delete $f->{skill}; 564 delete $f->{skill};
566 delete $f->{skill_finish}; 565 delete $f->{skill_finish};
567 delete $f->{skill_countdown};
568 delete $f->{skill_name}; 566 delete $f->{skill_name};
569 }); 567 });
570 } 568 }
571 569
572 =pod 570 =pod
581 579
582 # Check if the finish time is within 11:00-11:59 (EVE downtime) 580 # Check if the finish time is within 11:00-11:59 (EVE downtime)
583 return ([gmtime($ts)]->[2] == 11); 581 return ([gmtime($ts)]->[2] == 11);
584 } 582 }
585 583
584 =pod
585
586 Translate a timestamp to a countdown in terms of days, hours, minutes and
587 seconds, EVE style.
588
589 =cut
590 sub countdown
591 {
592 my $ts = shift;
593
594 my $tshift = sub {
595 my ($a, $b, $max) = @_;
596 if ($$a >= $max) {
597 $$b = floor($$a / $max);
598 $$a = $$a % $max;
599 }
600 };
601
602 my ($s, $m, $h, $d) = ($ts - time, 0, 0, 0);
603 &$tshift(\$s, \$m, 60);
604 &$tshift(\$m, \$h, 60);
605 &$tshift(\$h, \$d, 24);
606
607 return sprintf("%dd %02dh %02dm %02ds", $d, $h, $m, $s);
608 }
609
610
586 END { 611 END {
587 cleanup_and_die(); 612 cleanup_and_die();
588 } 613 }