Wait.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Waiting task
  3. #  Copyright (c) 2006 OpenKore Developers
  4. #
  5. #  This software is open source, licensed under the GNU General Public
  6. #  License, version 2.
  7. #  Basically, this means that you're allowed to modify and distribute
  8. #  this software. However, if you distribute modified versions, you MUST
  9. #  also distribute the source code.
  10. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  11. #########################################################################
  12. # This tasks does nothing but waiting a specified number of seconds.
  13. # It can be used in combination with @MODULE(Task::Chained).
  14. #
  15. # If this task is interrupted, then the time spent on interruption will not be counted.
  16. # The time this task spent while not being logged in the game, may or may not be counted,
  17. # depending on a configuration option.
  18. #
  19. # Example usage:
  20. # <pre class="example">
  21. # my $waitTask = new Task::Wait(
  22. #         seconds => 3,
  23. #         inGame => 1);
  24. # </pre>
  25. package Task::Wait;
  26. use strict;
  27. use Time::HiRes qw(time);
  28. use Modules 'register';
  29. use Task;
  30. use base qw(Task);
  31. use Globals qw($net);
  32. use Utils qw(timeOut);
  33. use Network;
  34. ##
  35. # Task::Wait->new(options...)
  36. #
  37. # Create a new Task::Wait object. The following options are allowed:
  38. # `l`
  39. # - All options allowed for Task->new(), except 'mutexes'.
  40. # - seconds - The number of seconds to wait before marking this task as done or running a subtask.
  41. # - inGame - Whether this task should only do things when we're logged into the game.
  42. #            If not specified, 0 is assumed.
  43. #            If inGame is set to 1 and we're not logged in, then the time we spent while not
  44. #            being logged in does not count as waiting time.
  45. # `l`
  46. sub new {
  47. my $class = shift;
  48. my %args = @_;
  49. my $self = $class->SUPER::new(@_);
  50. $self->{wait}{timeout} = $args{seconds};
  51. $self->{inGame} = defined($args{inGame}) ? $args{inGame} : 1;
  52. return $self;
  53. }
  54. sub interrupt {
  55. my ($self) = @_;
  56. $self->SUPER::interrupt();
  57. $self->{interruptionTime} = time;
  58. }
  59. sub resume {
  60. my ($self) = @_;
  61. $self->SUPER::resume();
  62. $self->{wait}{time} += time - $self->{interruptionTime};
  63. }
  64. sub iterate {
  65. my ($self) = @_;
  66. return unless ($self->SUPER::iterate() && ( !$self->{inGame} || $net->getState() == Network::IN_GAME ));
  67. $self->{wait}{time} = time if (!defined $self->{wait}{time});
  68. $self->setDone() if (timeOut($self->{wait}));
  69. }
  70. 1;