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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Bus system
  3. #
  4. #  This software is open source, licensed under the GNU General Public
  5. #  License, version 2.
  6. #  Basically, this means that you're allowed to modify and distribute
  7. #  this software. However, if you distribute modified versions, you MUST
  8. #  also distribute the source code.
  9. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  10. #
  11. #  $Revision: 3328 $
  12. #  $Id: Processors.pm 3328 2005-09-28 16:50:58Z hongli $
  13. #
  14. #########################################################################
  15. ##
  16. # MODULE DESCRIPTION: Default OpenKore bus message handlers.
  17. package Bus::Handlers;
  18. use strict;
  19. use Modules 'register';
  20. use Globals qw(%maps_lut $net);
  21. use Network;
  22. use Log qw(message debug);
  23. sub new {
  24. my ($class, $bus) = @_;
  25. my $self = bless {}, $class;
  26. $self->{bus} = $bus;
  27. $self->{receivedEvent} = $bus->onMessageReceived->add($self, &process);
  28. return $self;
  29. }
  30. sub DESTROY {
  31. my ($self) = @_;
  32. $self->{bus}->onMessageReceived->remove($self->{receivedEvent});
  33. }
  34. sub process {
  35. my ($self, undef, $args) = @_;
  36. my $MID = $args->{messageID};
  37. $args = $args->{args};
  38. if (my $handler = $self->can("handle$MID")) {
  39. debug "Bus - handling message '$MID'.n", "busHandlers";
  40. $self->{currentFrom} = $args->{FROM};
  41. $self->{currentSeq}  = $args->{SEQ};
  42. $handler->($self, $args);
  43. delete $self->{currentFrom};
  44. delete $self->{currentSeq};
  45. } else {
  46. debug "Bus - unhandled message '$MID' received.n", "busHandlers";
  47. }
  48. }
  49. # Send a reply for the current query.
  50. sub sendReply {
  51. my ($self, $MID, $args) = @_;
  52. if (exists $self->{currentSeq}) {
  53. my %args2;
  54. %args2 = %{$args} if ($args);
  55. $args2{TO}  = $self->{currentFrom};
  56. $args2{SEQ} = $self->{currentSeq};
  57. $args2{IRY} = 1;
  58. $self->{bus}->send($MID, %args2);
  59. }
  60. }
  61. ########### Command and query handlers ###########
  62. sub handleMoveTo {
  63. my ($self, $args) = @_;
  64. if ($net->getState() == Network::IN_GAME) {
  65. my $map = $args->{field};
  66. my $mapDesc = $maps_lut{"${map}.rsw"};
  67. message "On route to: $mapDesc ($map): $args->{x}, $args->{y}n";
  68. main::ai_route($args->{field}, $args->{x}, $args->{y},
  69. attackOnRoute => 1);
  70. }
  71. }
  72. sub handleDialog {
  73. my ($self, $args) = @_;
  74. if ($net->getState() == Network::IN_GAME && $args->{type}) {
  75. if (my $handler = $self->can("dialog$args->{type}")) {
  76. $handler->call($self, $args);
  77. }
  78. }
  79. }
  80. sub handleJobRequest {
  81. my ($self, $args) = @_;
  82. if ($net->getState() == Network::IN_GAME && $args->{type}) {
  83. if (my $handler = $self->can("job$args->{type}")) {
  84. $handler->call($self, $args);
  85. }
  86. }
  87. }
  88. ########### Job handlers ###########
  89. sub jobTransferItems {
  90. my ($self) = @_;
  91. $self->sendReply("JobRequest", { quality => 1 });
  92. message "Replied to TransferItems job request.n";
  93. }
  94. ########### Dialog handlers ###########
  95. sub dialogSecretMeeting {
  96. }
  97. 1;