openkore.pl
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:5k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #!/usr/bin/env perl
  2. #########################################################################
  3. #  This software is open source, licensed under the GNU General Public
  4. #  License, version 2.
  5. #  Basically, this means that you're allowed to modify and distribute
  6. #  this software. However, if you distribute modified versions, you MUST
  7. #  also distribute the source code.
  8. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  9. #
  10. #########################################################################
  11. package main;
  12. use strict;
  13. use FindBin qw($RealBin);
  14. use lib "$RealBin";
  15. use lib "$RealBin/src";
  16. use lib "$RealBin/src/deps";
  17. use Time::HiRes qw(time usleep);
  18. use Carp::Assert;
  19. sub __start {
  20. use ErrorHandler;
  21. use XSTools;
  22. srand();
  23. ##### BASIC INITIALIZATION #####
  24. use Translation;
  25. use Settings qw(%sys);
  26. use Utils::Exceptions;
  27. eval "use OpenKoreMod;";
  28. undef $@;
  29. parseArguments();
  30. Settings::loadSysConfig();
  31. Translation::initDefault(undef, $sys{locale});
  32. use Globals;
  33. use Interface;
  34. $interface = Interface->loadInterface($Settings::interface);
  35. selfCheck();
  36. ##### LOAD OPENKORE MODULES #####
  37. use Utils::PathFinding;
  38. require Utils::Win32 if ($^O eq 'MSWin32');
  39. require 'functions.pl';
  40. use Modules;
  41. use Log;
  42. use Utils;
  43. use Plugins;
  44. use FileParsers;
  45. use Network::Receive;
  46. use Network::Send ();
  47. use Commands;
  48. use Misc;
  49. use AI;
  50. use AI::CoreLogic;
  51. use AI::Attack;
  52. use Actor;
  53. use Actor::Player;
  54. use Actor::Monster;
  55. use Actor::You;
  56. use Actor::Party;
  57. use Actor::Portal;
  58. use Actor::NPC;
  59. use Actor::Pet;
  60. use Actor::Unknown;
  61. use ActorList;
  62. use Interface;
  63. use ChatQueue;
  64. use TaskManager;
  65. use Task;
  66. use Task::WithSubtask;
  67. use Task::TalkNPC;
  68. use Utils::Benchmark;
  69. use Utils::HttpReader;
  70. use Utils::Whirlpool;
  71. use Poseidon::Client;
  72. Modules::register(qw/Utils FileParsers
  73. Network::Receive Network::Send Misc AI AI::CoreLogic
  74. AI::Attack AI::Homunculus
  75. ChatQueue Actor Actor::Player Actor::Monster Actor::You
  76. Actor::Party Actor::Unknown Actor::Item Match Utils::Benchmark/);
  77. ##### MAIN LOOP #####
  78. # Note: Further initialization is done in the mainLoop() function in functions.pl.
  79. Benchmark::begin("Real time") if DEBUG;
  80. $interface->mainLoop();
  81. Benchmark::end("Real time") if DEBUG;
  82. main::shutdown();
  83. }
  84. # Parse command-line arguments.
  85. sub parseArguments {
  86. eval {
  87. if (!Settings::parseArguments()) {
  88. print Settings::getUsageText();
  89. exit 1;
  90. }
  91. };
  92. if (my $e = caught('IOException', 'ArgumentException')) {
  93. print "Error: $en";
  94. if ($e->isa('ArgumentException')) {
  95. print Settings::getUsageText();
  96. }
  97. exit 1;
  98. } elsif ($@) {
  99. die $@;
  100. }
  101. }
  102. # Perform some self-checks to ensure everything is OK.
  103. # Precondition: $interface is initialized.
  104. sub selfCheck {
  105. use Globals qw($interface);
  106. if ($^O eq 'MSWin32' && !defined(getprotobyname("tcp"))) {
  107. $interface->errorDialog(TF(
  108. "Your Windows TCP/IP stack is broken. Please readn" .
  109. "  %sn" .
  110. "to learn how to solve this.",
  111. "http://www.visualkore-bot.com/faq.php#tcp"));
  112. exit 1;
  113. }
  114. # If Misc.pm is in the same folder as openkore.pl, then the
  115. # user is still using the old (pre-CVS cleanup) source tree.
  116. # So bail out to prevent weird errors.
  117. if (-f "$RealBin/Misc.pm") {
  118. $interface->errorDialog(T("You have old files in the OpenKore folder, which may cause conflicts.n" .
  119. "Please delete your entire OpenKore source folder, and redownload everything."));
  120. exit 1;
  121. }
  122. if (!defined &XSTools::majorVersion) {
  123. $interface->errorDialog(TF("Your version of the XSTools library is too old.n" .
  124. "Please read %s", "http://www.openkore.com/aliases/xstools.php"));
  125. exit 1;
  126. } elsif (XSTools::majorVersion() != 4) {
  127. my $error;
  128. if (defined $ENV{INTERPRETER}) {
  129. $error = TF("Your version of (wx)start.exe is incompatible.n" .
  130. "Please upgrade it by reading %s", "http://www.openkore.com/aliases/xstools.php");
  131. } else {
  132. $error = TF("Your version of XSTools library is incompatible.n" .
  133. "Please upgrade it by reading %s", "http://www.openkore.com/aliases/xstools.php");
  134. }
  135. $interface->errorDialog($error);
  136. exit 1;
  137. } elsif (XSTools::minorVersion() < 8) {
  138. my $error;
  139. if (defined $ENV{INTERPRETER}) {
  140. $error = TF("Your version of (wx)start.exe is too old.n" .
  141. "Please upgrade it by reading %s", "http://www.openkore.com/aliases/xstools.php")
  142. } else {
  143. $error = TF("Your version of the XSTools library is too old.n" .
  144. "Please upgrade it by reading %s", "http://www.openkore.com/aliases/xstools.php")
  145. }
  146. $interface->errorDialog($error);
  147. exit 1;
  148. }
  149. }
  150. sub shutdown {
  151. Plugins::unloadAll();
  152. # Translation Comment: Kore's exit message
  153. Log::message(T("Bye!n"));
  154. Log::message($Settings::versionText);
  155. if (DEBUG && open(F, ">:utf8", "benchmark-results.txt")) {
  156. print F Benchmark::results("mainLoop");
  157. close F;
  158. print "Benchmark results saved to benchmark-results.txtn";
  159. }
  160. }
  161. if (!defined($ENV{INTERPRETER}) && !$ENV{NO_AUTOSTART}) {
  162. __start();
  163. }
  164. 1;