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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  Win32::GUI Interface for OpenKore
  3. #  by: amacc_boy (koreadvance@yahoo.com)
  4. #
  5. #########################################################################
  6. package Interface::Win32;
  7. use strict;
  8. use warnings;
  9. use Interface;
  10. use base qw/Interface/;
  11. use Time::HiRes qw/time usleep/;
  12. use Settings qw(%sys);
  13. use Plugins;
  14. use Globals;
  15. use Settings;
  16. use Misc;
  17. use Win32::GUI();
  18. use Interface::Win32::Map; #Map Viewer
  19. our ($currentHP, $currentSP, $currentLvl, $currentJob, $currentStatus);
  20. our $map;
  21. our @input_que;
  22. our @input_list;
  23. our %fgcolors;
  24. our %bgcolors;
  25. our $line_limit_chat = 500; #chat window line limit
  26. our $line_limit_console = 500; #console window line limit
  27. sub new {
  28. my $class = shift;
  29. my $self = {
  30. mw => undef,
  31. default_font=>"MS Sans Serif",
  32. r_field => undef,
  33. };
  34. $map = new Interface::Win32::Map();
  35. bless $self, $class;
  36. $self->initGUI;
  37. $self->{hooks} = Plugins::addHooks(
  38. ['mainLoop_pre', &updateHook, $self],
  39. ['parseMsg/addPrivMsgUser', sub { $self->addPM(@_); }],
  40. );
  41. return $self;
  42. }
  43. sub DESTROY {
  44. my $self = shift;
  45. Plugins::delHooks($self->{hooks});
  46. }
  47. ######################
  48. ## METHODS
  49. ######################
  50. sub getInput {
  51. my $self = shift;
  52. my $timeout = shift;
  53. my $msg;
  54. if ($timeout < 0) {
  55. until (defined $msg) {
  56. $self->update();
  57. if (@input_que) {
  58. $msg = shift @input_que; 
  59. }
  60. }
  61. } elsif ($timeout > 0) {
  62. my $end = time + $timeout;
  63. until ($end < time || defined $msg) {
  64. $self->update();
  65. if (@input_que) { 
  66. $msg = shift @input_que; 
  67. }
  68. } else {
  69. if (@input_que) {
  70. $msg = shift @input_que;
  71. }
  72. }
  73. $self->update();
  74. $msg =~ s/n// if defined $msg;
  75. return $msg;
  76. }
  77. sub writeOutput {
  78. my $self = shift;
  79. my $type = shift || '';
  80. my $message = shift || '';
  81. my $domain = shift || '';
  82. my ($color,$fgcode);
  83. $color = $consoleColors{$type}{$domain} if (defined $type && defined $domain && defined $consoleColors{$type});
  84. $color = $consoleColors{$type}{'default'} if (!defined $color && defined $type);
  85. $fgcode = $fgcolors{$color} || $fgcolors{'default'};
  86. #Chat Window
  87. if ($domain eq "pm" || $domain eq "pm/sent" || $domain eq "publicchat" || $domain eq "guildchat" || $domain eq "selfchat" || $domain eq "schat") {
  88. $self->{chat}->Select(999999,999999);
  89. $self->{chat}->SetCharFormat (-color => $fgcode); #no backcolor =(
  90.      $self->{chat}->ReplaceSel("$message", 1);
  91.     select(undef, undef, undef, 0);
  92. #remove extra lines
  93. while ($self->{chat}->GetLineCount() > $line_limit_chat + 1) {
  94.     $self->{chat}->Select(0, $self->{chat}->LineLength(0) + 1);
  95.     $self->{chat}->ReplaceSel("", 1);
  96.     select(undef, undef, undef, 0);
  97. }
  98.     
  99.    $self->{chat}->SendMessage (0x115, 7, 0);   # scroll to bottom
  100.    $self->{chat}->SendMessage (0x115, 1, 0);   # scroll one line down
  101.   
  102. #Console Window
  103. } else {
  104. $self->{console}->Select(999999,999999);
  105. $self->{console}->SetCharFormat (-color => $fgcode);
  106.      $self->{console}->ReplaceSel("$message", 1);
  107.     select(undef, undef, undef, 0);
  108. #remove extra lines
  109. while ($self->{console}->GetLineCount() >= $line_limit_console) {
  110.     $self->{console}->Select(0, $self->{console}->LineLength(0) + 1);
  111.     $self->{console}->ReplaceSel("", 1);
  112.     select(undef, undef, undef, 0);
  113. }
  114.    
  115.    $self->{console}->SendMessage (0x115, 7, 0);   # scroll to bottom
  116.    $self->{console}->SendMessage (0x115, 1, 0);   # scroll one line down
  117.   
  118. }
  119.   
  120.     Win32::GUI::PeekMessage(0,0,0);
  121.     $self->update();
  122. }
  123. sub updateHook {
  124. my $hookname = shift;
  125. my $r_args = shift;
  126. my $self = shift;
  127. return unless defined $self->{mw};
  128. $self->update();
  129. }
  130. sub update {
  131. my $self = shift;
  132.     $self->UpdateCharacter();
  133. if ($map->mapIsShown()) {
  134. $map->Repaint();
  135. $map->paintMiscPos();
  136. $map->paintPos();
  137. }
  138.     Win32::GUI::DoEvents();
  139. }
  140. sub title {
  141. my $self = shift;
  142. my $title = shift;
  143. if (defined $title) {
  144. if (!defined $self->{currentTitle} || $self->{currentTitle} ne $title) {
  145. $self->{mw}->Caption($title);
  146. $self->{currentTitle} = $title;
  147. }
  148. } else {
  149. return $self->{title};
  150. }
  151. }
  152. sub updateStatus {
  153. my $self = shift;
  154. my $text = shift;
  155. $self->{status_gen}->Text($text);
  156. }
  157. sub setAiText {
  158. my $self = shift;
  159. my ($text) = shift;
  160. $self->{status_ai}->configure(-text => $text);
  161. }
  162. ################################################################
  163. # init
  164. ################################################################
  165. sub initGUI {
  166. my $self = shift;
  167. my $nameFont = Win32::GUI::Font->new( -name => "Verdana",-size => 10, -bold =>1);
  168. my $consoleFont = Win32::GUI::Font->new( -name => "Verdana",-size => 7,);
  169. $self->{AccTable} = new Win32::GUI::AcceleratorTable (
  170.     "Return"  => &inputEnter,
  171.     "Up"  => &inputUp,
  172.     "Down"  => &inputDown,
  173.         "Ctrl-X"  => &onExit,
  174.         "Tab"  => sub { $self->{input}->SetFocus(); },
  175. "Alt+V" => &comstatus,
  176. "Alt+A" => &comstat,
  177. "Alt+I" => &comitems,
  178. "Alt+S" => &comskills,
  179. "Alt+E" => &comstatus,
  180.         );
  181. $self->{Menu} = Win32::GUI::MakeMenu (
  182.     "Open&Kore" => "Kore",
  183.     "   > &Pause" => { -name => "pause", -onClick => &compause },
  184.     "   > &Manual" => { -name => "manual", -onClick => &commanual },
  185.     "   > &Resume" => { -name => "resume", -onClick => &comresume },
  186.     "   > E&xit"  => { -name => "Kore_Exit", -onClick => &onExit },
  187.     "&View" => "View",
  188.     "   > View &Map"  => { -name => "View_Map", -onClick => &openMap },
  189.     "&Info" => "Info",
  190.     "   > &Status Alt+V" => { -name => "Status", -onClick => &comstatus },
  191.     "   > S&tatistics Alt+A" => { -name => "Statistics", -onClick => &comstat },
  192.     "   > &Inventory Alt+I" => { -name => "Inventory", -onClick => &comitems },
  193.     "   > S&kills Alt+S" => { -name => "Skills", -onClick => &comskills },
  194.     "   > &Experience Alt+E" => { -name => "Experience", -onClick => &comerooo },
  195.     
  196. );
  197. $self->{icon} = new Win32::GUI::Icon('SRC/BUILD/openkore.ICO');
  198. $self->{mw} = new Win32::GUI::Window(
  199.     -name     => "mw",
  200.     -title    => "Ragnarok Online Bot Client",
  201.     -pos      => [308, 220],
  202.     -size     => [950, 690],
  203.     -icon => $self->{icon},
  204.     -menu     => $self->{Menu},
  205.     -accel  => $self->{AccTable},
  206.     -maximizebox => 1,
  207.     -resizable => 0,
  208. -onMinimize => &OnMinimize,
  209.     -onTerminate => &onExit, 
  210. );
  211. $self->{mw}->ChangeIcon($self->{icon});
  212. # create the systray icon.
  213. $self->{systray_icon} = $self->{mw}->AddNotifyIcon( -name => "Systray",
  214. -id   => 1,
  215. -icon => $self->{icon},
  216. -tip  => 'OpenKore',
  217. -onClick => &tray_Click,
  218. );
  219. $self->{name} = $self->{mw}->AddLabel(
  220.        -text    => "name",
  221.        -name    => "name",
  222.        -font => $nameFont,
  223.        -left    => 4,
  224.        -top     => 102, #2,
  225.        -width   => 100,
  226.        -height  => 13,
  227.        -foreground    => 0,
  228.     );
  229. $self->{class} = $self->{mw}->AddLabel(
  230.        -text    => "job",
  231.        -name    => "class",
  232.        -left    => 4,
  233.        -top     => 116, #16,
  234.        -width   => 100,
  235.        -height  => 13,
  236.        -foreground    => 0,
  237.       );
  238. $self->{gender} = $self->{mw}->AddLabel(
  239.        -text    => "gender",
  240.        -name    => "gender",
  241.        -left    => 4,
  242.        -top     => 130, #30,
  243.        -width   => 40,
  244.        -height  => 13,
  245.        -foreground    => 0,
  246.       );
  247. $self->{hp_bar} = $self->{mw}->AddProgressBar(
  248.        -text    => "",
  249.        -name    => "hp_bar",
  250.        -left    => 140,
  251.        -top     => 104, #4,
  252.        -width   => 185,
  253.        -height  => 10,
  254.        -smooth   => 1,
  255.       );
  256. $self->{mw}->AddLabel(
  257.        -text    => "HP",
  258.        -name    => "hp_label",
  259.        -left    => 120,
  260.        -top     => 117, #17,
  261.        -width   => 15,
  262.        -height  => 13,
  263.        -foreground    => 0,
  264.       );
  265. $self->{sp_bar} = $self->{mw}->AddProgressBar(
  266.        -text    => "",
  267.        -name    => "sp_bar",
  268.        -left    => 140,
  269.        -top     => 132, #32,
  270.        -width   => 185,
  271.        -height  => 10,
  272.        -smooth   => 1,
  273.       );
  274. $self->{mw}->AddLabel(
  275.        -text    => "SP",
  276.        -name    => "sp_label",
  277.        -left    => 120,
  278.        -top     => 145, #45,
  279.        -width   => 14,
  280.        -height  => 13,
  281.        -foreground    => 0,
  282.       );
  283. $self->{hp_val} = $self->{mw}->AddLabel(
  284.        -text    => "0 / 0",
  285.        -name    => "hp_val",
  286.        -left    => 140,
  287.        -top     => 117, #17,
  288.        -width   => 185,
  289.        -height  => 13,
  290.        -align    => "center",
  291.        -foreground    => 0,
  292.       );
  293. $self->{sp_val} = $self->{mw}->AddLabel(
  294.        -text    => "0 / 0",
  295.        -name    => "sp_val",
  296.        -left    => 140,
  297.        -top     => 145, #45,
  298.        -width   => 185,
  299.        -height  => 13,
  300.        -align    => "center",
  301.        -foreground    => 0,
  302.       );
  303. $self->{mw}->AddLabel(
  304.        -text    => "Base Lv.",
  305.        -name    => "b_label",
  306.        -left    => 7,
  307.        -top     => 170, #70,
  308.        -width   => 45,
  309.        -height  => 13,
  310.        -foreground    => 0,
  311.       );
  312. $self->{base} = $self->{mw}->AddLabel(
  313.        -text    => "1",
  314.        -name    => "base",
  315.        -left    => 50,
  316.        -top     => 170, #70,
  317.        -width   => 20,
  318.        -height  => 20,
  319.        -foreground    => 0,
  320.       );
  321. $self->{b_bar} = $self->{mw}->AddProgressBar(
  322.        -text    => "",
  323.        -name    => "b_bar",
  324.        -left    => 70,
  325.        -top     => 173, #73,
  326.        -width   => 235,
  327.        -height  => 10,
  328.        -smooth   => 1,
  329.       );
  330. $self->{b_percent} = $self->{mw}->AddLabel(
  331.        -text    => "0%",
  332.        -name    => "b_percent",
  333.        -left    => 307,
  334.        -top     => 170, #70,
  335.        -width   => 28,
  336.        -height  => 13,
  337.        -foreground    => 0,
  338.       );
  339. $self->{mw}->AddLabel(
  340.        -text    => "  Job Lv.",
  341.        -name    => "j_label",
  342.        -left    => 7,
  343.        -top     => 185, #85,
  344.        -width   => 45,
  345.        -height  => 13,
  346.        -foreground    => 0,
  347.       );
  348. $self->{job} = $self->{mw}->AddLabel(
  349.        -text    => "1",
  350.        -name    => "job",
  351.        -left    => 50,
  352.        -top     => 185, #85,
  353.        -width   => 20,
  354.        -height  => 13,
  355.        -foreground    => 0,
  356.       );
  357. $self->{j_bar} = $self->{mw}->AddProgressBar(
  358.        -text    => "",
  359.        -name    => "j_bar",
  360.        -left    => 70,
  361.        -top     => 188, #88,
  362.        -width   => 235,
  363.        -height  => 10,
  364.        -smooth   => 1,
  365.       );
  366. $self->{j_percent} = $self->{mw}->AddLabel(
  367.        -text    => "0%",
  368.        -name    => "j_percent",
  369.        -left    => 307,
  370.        -top     => 185, #85,
  371.        -width   => 28,
  372.        -height  => 13,
  373.        -foreground    => 0,
  374.       );
  375. $self->{mw}->AddButton(
  376.        -text    => "Exp",
  377.        -name    => "exp_group",
  378.        -left    => 4,
  379.        -top     => 158, #58,
  380.        -width   => 335,
  381.        -height  => 48,
  382.        -style   => WS_CHILD | WS_VISIBLE | 7,  # GroupBox
  383.        -align    => "center",
  384.       );
  385. $self->{mw}->AddLabel(
  386.        -text    => "Status:",
  387.        -name    => "status_label",
  388.        -left    => 4,
  389.        -top     => 208, #108,
  390.        -width   => 32,
  391.        -height  => 13,
  392.        -foreground    => 0,
  393.       );
  394. $self->{status} = $self->{mw}->AddLabel(
  395.        -text    => "None",
  396.        -name    => "status",
  397.        -left    => 40,
  398.        -top     => 208, #108,
  399.        -width   => 300,
  400.        -height  => 13,
  401.        -foreground    => 0,
  402.       );
  403. $self->{console} = $self->{mw}->AddRichEdit(
  404.        -text    => "",
  405.        -name    => "console",
  406.        -font => $consoleFont,
  407.        -left    => 4,
  408.        -top     => 225, #125,
  409.        -width   => 419,
  410.        -height  => 361,
  411.            -style   => WS_CHILD | WS_VISIBLE | ES_LEFT
  412.                        | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_READONLY,
  413.       );
  414. $self->{chat} = $self->{mw}->AddRichEdit(
  415.        -text    => "",
  416.        -name    => "chat",
  417.        -left    => 428,
  418.        -top     => 5, #250,
  419.        -width   => 419,
  420.        -height  => 591,
  421.            -style   => WS_CHILD | WS_VISIBLE | ES_LEFT
  422.                        | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_READONLY,
  423.       );
  424. $self->{pm_list} = $self->{mw}->AddCombobox(
  425.        -text    => "",
  426.        -name    => "pm_list",
  427.        -left    => 417,
  428.        -top     => 596, #325,
  429.        -width   => 95,
  430.        -height  => 80,
  431.        -dropdown => 1,
  432. #        -style   => WS_VISIBLE | 2,  # Dropdown Style
  433.       );
  434. $self->{input} = $self->{mw}->AddTextfield(
  435.        -text    => "",
  436.        -name    => "input",
  437.        -left    => 512,
  438.        -top     => 596, #324,
  439.        -width   => 245,
  440.        -height  => 23,
  441.       );
  442. $self->{say_type} = $self->{mw}->AddCombobox(
  443.        -text    => "",
  444.        -name    => "say_type",
  445.        -left    => 758,
  446.        -top     => 596, #325,
  447.        -width   => 80,
  448.        -height  => 80,
  449.        -dropdownlist => 1,
  450. #        -style   => WS_VISIBLE | 2,  # Dropdown Style
  451.       );
  452. $self->{mw}->AddButton(
  453.        -text    => "View Map",
  454.        -name    => "btn_map",
  455.        -left    => 353,
  456.        -top     => 5,
  457.        -width   => 63,
  458.        -height  => 50,
  459.        -foreground => 0,
  460.        -onClick => &openMap,
  461.       );
  462. $self->{mw}->AddButton(
  463.        -text    => "Sit",
  464.        -name    => "sit command",
  465.        -left    => 4,
  466.        -top     => 5,
  467.        -width   => 50,
  468.        -height  => 20,
  469.        -foreground => 0,
  470.        -onClick => sub { Commands::run("sit"); },
  471.       );
  472. $self->{mw}->AddButton(
  473.        -text    => "complete report",
  474.        -name    => "Report",
  475.        -left    => 60,
  476.        -top     => 5,
  477.        -width   => 100,
  478.        -height  => 20,
  479.        -foreground => 0,
  480.        -onClick => sub { Commands::run("exp report"); },
  481.       );
  482. #
  483. $self->{say_type}->Add("Command","Public","Party","Guild");
  484. $self->{say_type}->Select(0);
  485. $self->{console}->BackColor([0,0,0]);
  486. $self->{chat}->BackColor([0,0,0]);
  487. $self->{console}->AutoURLDetect(1);
  488. $self->{chat}->AutoURLDetect(1);
  489. $self->{hp_bar}->SetRange(0,100);
  490. $self->{sp_bar}->SetRange(0,100);
  491. $self->{b_bar}->SetRange(0,100);
  492. $self->{j_bar}->SetRange(0,100);
  493. $self->{hp_bar}->SetBarColor([30,100,190]);
  494. $self->{sp_bar}->SetBarColor([30,100,190]);
  495. $self->{b_bar}->SetBarColor([30,100,190]);
  496. $self->{j_bar}->SetBarColor([30,100,190]);
  497. $self->{input}->SetFocus();
  498. $self->{mw}->Show();
  499. $self->{mw}->Center;
  500. # Hide console #
  501. my ($DOS) = Win32::GUI::GetPerlWindow(); 
  502.     Win32::GUI::Hide($DOS);
  503. ################
  504.     
  505. # Win32::GUI::Dialog();
  506. }
  507. sub inputEnter {
  508. my $self = shift;
  509. my ($line,$type);
  510. $line = $self->{input}->Text;
  511. $self->{input}->Text("");
  512. $type = $self->{say_type}->Text;
  513. if ($self->{pm_list}->Text eq "") {
  514. if ($type eq 'Public') {
  515. $line = 'c '.$line;
  516. } elsif ($type eq 'Party') {
  517. $line = 'p '.$line;
  518. } elsif ($type eq 'Guild') {
  519. $line = 'g '.$line;
  520. }
  521. } else {
  522. $self->{pm_list}->AddString($self->{pm_list}->Text);
  523. $line = "pm ".$self->{pm_list}->Text." $line";
  524. }
  525. return unless defined $line;
  526. push @input_que, $line;
  527. push @input_list, $line;
  528. }
  529. sub addPM {
  530. my $self = shift;
  531. my $param = $_[1];
  532. $self->{pm_list}->AddString($param->{user});
  533. }
  534. sub inputUp {
  535. my $self = shift;
  536. my $line;
  537. }
  538. sub inputDown {
  539. my $self = shift;
  540. }
  541. sub OnMinimize {
  542. my $self = shift;
  543. $self->Disable();
  544. $self->Hide();
  545. }
  546. sub tray_Click {
  547. my $self = shift;
  548. $self->Enable();
  549.     $self->Show();
  550. }
  551. sub errorDialog {
  552. my $self = shift;
  553. my $msg = shift;
  554. Win32::GUI::MessageBox($msg,"Error",MB_ICONERROR | MB_OK,);
  555. }
  556. sub onExit {
  557. my $self = shift;
  558. if ($conState) {
  559. push @input_que, "n";
  560. $quit = 1;
  561. }
  562. }
  563. sub openMap {
  564. $map->initMapGUI();
  565. $map->paintMap();
  566. $map->paintMiscPos();
  567. $map->paintPos();
  568. }
  569. sub compause {
  570. $AI = 0;
  571. }
  572. sub commanual {
  573. $AI = 1;
  574. }
  575. sub comresume {
  576. $AI = 2;
  577. }
  578. sub comstatus {
  579. Commands::run("s"); 
  580. }
  581. sub comstat {
  582. Commands::run("st"); 
  583. }
  584. sub comitems {
  585. Commands::run("i");
  586. }
  587. sub comskills {
  588. Commands::run("skills");
  589. }
  590. sub comerooo {
  591. Commands::run("exp");
  592. }
  593. sub UpdateCharacter {
  594. my $self = shift;
  595. return if (!$char || !$char->{'hp_max'} || !$char->{'sp_max'} || !$char->{'weight_max'});
  596. return if ($currentStatus eq join(", ", keys %{$chars[$config{char}]{statuses}}) && $char->{'hp'} == $currentHP && $char->{'sp'} == $currentSP && $char->{'exp'} == $currentLvl && $char->{'exp_job'} == $currentJob);
  597. $self->{name}->Text($char->{'name'});
  598. $self->{gender}->Text($sex_lut{$char->{'sex'}});
  599. $self->{class}->Text($jobs_lut{$char->{'jobID'}});
  600. $self->{status}->Text(join(", ", keys %{$chars[$config{char}]{statuses}}));
  601. $self->{base}->Text($char->{'lv'});
  602. $self->{job}->Text($char->{'lv_job'});
  603. my $percent_hp = sprintf("%i", $char->{'hp'} * 100 / $char->{'hp_max'});
  604. my $percent_sp = sprintf("%i", $char->{'sp'} * 100 / $char->{'sp_max'});
  605. $self->{hp_bar}->SetPos($percent_hp);
  606. $self->{sp_bar}->SetPos($percent_sp);
  607. $self->{hp_val}->Text("$char->{'hp'} / $char->{'hp_max'} ($percent_hp %)");
  608. $self->{sp_val}->Text("$char->{'sp'} / $char->{'sp_max'} ($percent_sp %)");
  609. if ($percent_hp < 20) {
  610. $self->{hp_bar}->SetBarColor([255,89,89]);
  611. } elsif ($percent_hp < 50) {
  612. $self->{hp_bar}->SetBarColor([223,223,0]);
  613. } else {
  614. $self->{hp_bar}->SetBarColor([30,100,190]);
  615. }
  616. if ($percent_sp < 20) {
  617. $self->{sp_bar}->SetBarColor([255,89,89]);
  618. } elsif ($percent_sp < 50) {
  619. $self->{sp_bar}->SetBarColor([223,223,0]);
  620. } else {
  621. $self->{sp_bar}->SetBarColor([30,100,190]);
  622. }
  623. my $percent_base_lv;
  624. if (!$char->{'exp_max'}) {
  625. $percent_base_lv = 0;
  626. } else {
  627. $percent_base_lv = sprintf("%i", $char->{'exp'} * 100 / $char->{'exp_max'});
  628. }
  629. $self->{b_bar}->SetPos($percent_base_lv);
  630. $self->{b_percent}->Text($percent_base_lv."%");
  631. my $percent_job_lv;
  632. if (!$char->{'exp_job_max'}) {
  633. $percent_job_lv = 0;
  634. } else {
  635. $percent_job_lv = sprintf("%i", $char->{'exp_job'} * 100 / $char->{'exp_job_max'});
  636. }
  637. $self->{j_bar}->SetPos($percent_job_lv);
  638. $self->{j_percent}->Text($percent_job_lv."%");
  639. $currentHP = $char->{'hp'};
  640. $currentSP = $char->{'sp'};
  641. $currentLvl = $char->{'exp'};
  642. $currentJob = $char->{'exp_job'};
  643. $currentStatus = join(", ", keys %{$chars[$config{char}]{statuses}});
  644. }
  645. %fgcolors = (
  646. 'reset' => [192,192,192],
  647. 'default' => [192,192,192],
  648. 'black' => [0,0,0],
  649. 'darkgray' => [175,175,175],
  650. 'darkgrey' => [175,175,175],
  651. 'darkred' => [180,0,0],
  652. 'red' => [255,0,0],
  653. 'darkgreen' => [0,180,0],
  654. 'green' => [0,255,0],
  655. 'brown' => [128,0,0],
  656. 'yellow' => [255,255,0],
  657. 'darkblue' => [0,0,180],
  658. 'blue' => [0,0,255],
  659. 'darkmagenta' => [180,0,180],
  660. 'magenta' => [255,0,255],
  661. 'darkcyan' => [0,180,180],
  662. 'cyan' => [0,255,255],
  663. 'gray' => [192,192,192],
  664. 'grey' => [192,192,192],
  665. 'white' => [192,192,192],
  666. );
  667. 1;