Advertisement
knell

MMC Skill icons

Jan 17th, 2013
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.69 KB | None | 0 0
  1. # mmc4_cooldownds
  2. # include in config "do mmc4_cooldowns" or right in the client "/perl { do mmc4_cooldowns; }"
  3.  
  4. ## Module config
  5. # Wrap icon by [SKILL]
  6. my $wrap_by_brackets = 1;
  7. # add 1 to width to add space between variables, set to 0 to disable
  8. my $wrap_by_space    = 1;
  9. # Colors for icons
  10. # C,B - dark, K,J - light colors
  11. my %colors = ( 'enabled' => 'C', 'disabled' => 'B' );
  12. # Status line row number
  13. my $status_row = 1;
  14. # Actual variables storage
  15. my %cd_vars = ();
  16.  
  17. my $skill_available = '^Вы вновь можете использовать умение \"%%skill%%\"';
  18. my $spell_cast      = '^Вы (посмотрели на (.*) и )?произнесли магические слова: \'%%spell%%\'';
  19. my $spell_available = '^Вы вновь можете использовать заклинание \"%%spell%%\"';
  20.  
  21. ###############################################################################
  22. ## Cooldowns description
  23. ##
  24. ## Could be moved anywhere. JSON/YAML file, ftp, web, etc.
  25. ##
  26. ## Default order is by alphabet
  27. my %Cooldowns = ();
  28. sub reset_cooldowns
  29. {
  30.     %cd_vars = ();
  31.     %Cooldowns = (
  32.         'quaff' => {
  33.             'icon'         => 'ОСУШ',
  34.             'kind'         => '',
  35.             'name'         => '',
  36.             'trig_disable' => '^Вы залпом осушили ', # trig to become disabled
  37.             'trig_enable'  => '^Вы вновь можете осушить напиток'
  38.         }
  39.     );
  40. }
  41.  
  42. my %DK = (
  43.     'hypno' => {
  44.         'icon'         => 'ГИПНОЗ',
  45.         'kind'         => 'skill',
  46.         'name'         => 'гипноз',
  47.         'order'        => 1,
  48.         'trig_disable' => '^Вы пристально посмотрели на ', # trig to become disabled
  49.         'trig_enable'  => '' # could be ommited
  50.     },
  51.     'drain' => {
  52.         'icon'         => 'ДРЫН',
  53.         'kind'         => 'skill',
  54.         'name'         => 'смертельное прикосновение',
  55.         'order'        => 2,
  56.         'trig_disable' => '^Выкрикнув древние слова тьмы, вы прикоснулись к', # trig to become disabled
  57.         'trig_enable'  => '' # could be ommited
  58.     },
  59.     'morbus' => {
  60.         'icon'         => 'БОЛЕЗНЬ',
  61.         'kind'         => 'spell',
  62.         'name'         => 'болезнь',
  63.         'order'        => 3,
  64.         'trig_disable' => '', # could be ommited
  65.         'trig_enable'  => ''
  66.     },
  67.     'sanc' => {
  68.         'icon'         => 'САНК',
  69.         'kind'         => 'spell',
  70.         'name'         => 'освящение',
  71.         'order'        => 4,
  72.         'trig_disable' => '', # could be ommited
  73.         'trig_enable'  => ''
  74.     },
  75.     'spiritual' => {
  76.         'icon'         => 'ДУШКА',
  77.         'kind'         => 'spell',
  78.         'name'         => 'духовная аура',
  79.         'order'        => 5,
  80.         'trig_disable' => '', # could be ommited
  81.         'trig_enable'  => ''
  82.     },
  83.     'darkshield' => {
  84.         'icon'         => 'ТЬМА',
  85.         'kind'         => 'skill',
  86.         'name'         => 'щит тьмы',
  87.         'order'        => 6,
  88.         'trig_disable' => '^Тьма внутри вас стала сильнее', # trig to become disabled
  89.         'trig_enable'  => '' # could be ommited
  90.     },
  91.     'bandage' => {
  92.         'icon'         => 'ПЕРЕВЯЗЬ',
  93.         'kind'         => 'skill',
  94.         'name'         => 'перевязка',
  95.         'order'        => 7,
  96.         'trig_disable' => '^(Вы аккуратно перевязали себя)|(Вы аккуратно наложили повязки)', # trig to become disabled
  97.         'trig_enable'  => '' # could be ommited
  98.     },
  99.     'tease' => {
  100.         'icon'         => 'ДРАЗНИТЬ',
  101.         'kind'         => 'skill',
  102.         'name'         => 'дразнить',
  103.         'order'        => 8,
  104.         'trig_disable' => '^Вы оскорбили .*? на всех языках Средиземья', # trig to become disabled
  105.         'trig_enable'  => '' # could be ommited
  106.     }
  107. );
  108.  
  109. my %Paladin = ();
  110. my %Mage    = ();
  111.  
  112. my %Druid   = (
  113.     'bandage' => {
  114.         'icon'         => 'ПЕРЕВЯЗЬ',
  115.         'kind'         => 'skill',
  116.         'name'         => 'перевязка',
  117.         'order'        => 1,
  118.         'trig_disable' => '^(Вы аккуратно перевязали себя)|(Вы аккуратно наложили повязки)', # trig to become disabled
  119.         'trig_enable'  => '' # could be ommited
  120.     }
  121. );
  122.  
  123. my %Warrior = ();
  124.  
  125. # Call it when Cooldowns
  126. reset_cooldowns();
  127. init_cooldowns(\%Cooldowns);
  128. ###############################################################################
  129.  
  130. alias {
  131.     init_cooldowns(\%DK);
  132. } "кд_дк";
  133.  
  134. alias {
  135.     init_cooldowns(\%Druid);
  136. } "кд_друид";
  137.  
  138. alias {
  139.     reset_cooldowns();
  140.     init_cooldowns(\%Cooldowns);
  141. } "кд_сброс";
  142.  
  143. ## Functions
  144. sub init_cooldowns
  145. {
  146.     my $h = shift;
  147.  
  148.     prepare_cds($h);
  149.     # Add according to {order}
  150.     foreach my $key (sort { $h->{$a}->{order} <=> $h->{$b}->{order} } keys %$h)
  151.     {
  152.         $Cooldowns{$key} = $h->{$key}
  153.             unless defined $Cooldowns{$key};
  154.  
  155.         del_variable($key); # in case you load it more than ones
  156.         add_variable($key);
  157.     }
  158. }
  159.  
  160. sub prepare_cds
  161. {
  162.     my $h = shift;
  163.     my $o = 1;
  164.     # Sort keys by ABC and add {order} if missed
  165.     foreach my $k (sort keys %$h)
  166.     {
  167.         $h->{$k}->{order} = $o++ unless defined $h->{$k}->{order};
  168.     }
  169. }
  170.  
  171. sub get_enabled_value
  172. {
  173.     return _get_value(shift, $colors{enabled});
  174. }
  175.  
  176. sub get_disabled_value
  177. {
  178.     return _get_value(shift, $colors{disabled});
  179. }
  180.  
  181. sub _get_value
  182. {
  183.     my ($key, $color) = @_;
  184.  
  185.     my $value = $Cooldowns{$key}->{icon};
  186.     $value = '[' . $value . ']'
  187.         if $wrap_by_brackets;
  188.     $value = chr(03) . $color . $value;
  189.  
  190.     return $value;
  191. }
  192.  
  193. sub add_variable
  194. {
  195.     my $key = shift;
  196.  
  197.     # initially all are ready
  198.     my $value = get_enabled_value($key);
  199.     # Added to one-line-height status line
  200.     my $width = length($Cooldowns{$key}->{icon}) + $wrap_by_space;
  201.     $width += 2 if $wrap_by_brackets;
  202.  
  203.    
  204.     set_value($key, $value);
  205.     set_triggers($key);
  206.     Status::new_svy($cd_vars{$key}, $status_row, $width);
  207. }
  208.  
  209. sub set_value
  210. {
  211.     my ($key, $value) = @_;
  212.     $cd_vars{$key} = $value;
  213. }
  214.  
  215. sub disable_variable
  216. {
  217.     my $key = shift;
  218.     set_value($key, get_disabled_value($key));
  219. }
  220.  
  221. sub enable_variable
  222. {
  223.     my $key = shift;
  224.     set_value($key, get_enabled_value($key));
  225. }
  226.  
  227. sub del_variable
  228. {
  229.     my $key = shift;
  230.     my ($enable_name, $disable_name) = _trig_names($key);
  231.  
  232.     CMD::cmd_unaction($enable_name);
  233.     CMD::cmd_unaction($disable_name);
  234.  
  235.     undef $cd_vars{$key};
  236.     delete $cd_vars{$key};
  237. }
  238.  
  239. my $current_key = undef;
  240. sub set_triggers
  241. {
  242.     my $key = shift;
  243.     my ($enable_name, $disable_name) = _trig_names($key);
  244.  
  245.     my $e_trig = get_enable_trig($key);
  246.     my $d_trig = get_disable_trig($key);
  247.  
  248.     CMD::cmd_action($d_trig, sub {
  249.         $current_key = $key;
  250.         enable('spell_not_affected');
  251.         disable_variable($key);
  252.     }, "nf1500:$disable_name");
  253.     CMD::cmd_action($e_trig, sub { enable_variable($key); },  "nf1500:$enable_name");
  254. }
  255.  
  256. trig {
  257.     enable_variable($current_key) if defined($current_key);
  258. } '^Ничего, похоже, не произошло\.', '-nf1500:spell_not_affected';
  259.  
  260. trig {
  261.     $current_key = undef;
  262.     disable('spell_not_affected');
  263. } '^$', '-nf1500:spell_not_affected';
  264.  
  265. sub _trig_names
  266. {
  267.     my $key = shift;
  268.     my @names = ( "cooldown_enable_$key", "cooldown_disable_$key" );
  269.     return wantarray ? @names : \@names;
  270. }
  271.  
  272. sub get_enable_trig
  273. {
  274.     my $key  = shift;
  275.     my $trig = '';
  276.  
  277.     if ($Cooldowns{$key}->{kind} eq 'skill')
  278.     {
  279.         $trig = $skill_available;
  280.         $trig =~ s/%%skill%%/$Cooldowns{$key}->{name}/;
  281.     }
  282.     elsif ($Cooldowns{$key}->{kind} eq 'spell')
  283.     {
  284.         $trig = $spell_available;
  285.         $trig =~ s/%%spell%%/$Cooldowns{$key}->{name}/;
  286.     }
  287.     else
  288.     {
  289.         $trig = $Cooldowns{$key}->{trig_enable};
  290.     }
  291.  
  292.     return $trig;
  293. }
  294.  
  295. sub get_disable_trig
  296. {
  297.     my $key  = shift;
  298.     my $trig = '';
  299.  
  300.     if ($Cooldowns{$key}->{kind} eq 'spell')
  301.     {
  302.         $trig = $spell_cast;
  303.         $trig =~ s/%%spell%%/$Cooldowns{$key}->{name}/;
  304.     }
  305.     else
  306.     {
  307.         $trig = $Cooldowns{$key}->{trig_disable};
  308.     }
  309.  
  310.     return $trig;
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement