Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # mmc4_cooldownds
- # include in config "do mmc4_cooldowns" or right in the client "/perl { do mmc4_cooldowns; }"
- ## Module config
- # Wrap icon by [SKILL]
- my $wrap_by_brackets = 1;
- # add 1 to width to add space between variables, set to 0 to disable
- my $wrap_by_space = 1;
- # Colors for icons
- # C,B - dark, K,J - light colors
- my %colors = ( 'enabled' => 'C', 'disabled' => 'B' );
- # Status line row number
- my $status_row = 1;
- # Actual variables storage
- my %cd_vars = ();
- my $skill_available = '^Вы вновь можете использовать умение \"%%skill%%\"';
- my $spell_cast = '^Вы (посмотрели на (.*) и )?произнесли магические слова: \'%%spell%%\'';
- my $spell_available = '^Вы вновь можете использовать заклинание \"%%spell%%\"';
- ###############################################################################
- ## Cooldowns description
- ##
- ## Could be moved anywhere. JSON/YAML file, ftp, web, etc.
- ##
- ## Default order is by alphabet
- my %Cooldowns = ();
- sub reset_cooldowns
- {
- %cd_vars = ();
- %Cooldowns = (
- 'quaff' => {
- 'icon' => 'ОСУШ',
- 'kind' => '',
- 'name' => '',
- 'trig_disable' => '^Вы залпом осушили ', # trig to become disabled
- 'trig_enable' => '^Вы вновь можете осушить напиток'
- }
- );
- }
- my %DK = (
- 'hypno' => {
- 'icon' => 'ГИПНОЗ',
- 'kind' => 'skill',
- 'name' => 'гипноз',
- 'order' => 1,
- 'trig_disable' => '^Вы пристально посмотрели на ', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- },
- 'drain' => {
- 'icon' => 'ДРЫН',
- 'kind' => 'skill',
- 'name' => 'смертельное прикосновение',
- 'order' => 2,
- 'trig_disable' => '^Выкрикнув древние слова тьмы, вы прикоснулись к', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- },
- 'morbus' => {
- 'icon' => 'БОЛЕЗНЬ',
- 'kind' => 'spell',
- 'name' => 'болезнь',
- 'order' => 3,
- 'trig_disable' => '', # could be ommited
- 'trig_enable' => ''
- },
- 'sanc' => {
- 'icon' => 'САНК',
- 'kind' => 'spell',
- 'name' => 'освящение',
- 'order' => 4,
- 'trig_disable' => '', # could be ommited
- 'trig_enable' => ''
- },
- 'spiritual' => {
- 'icon' => 'ДУШКА',
- 'kind' => 'spell',
- 'name' => 'духовная аура',
- 'order' => 5,
- 'trig_disable' => '', # could be ommited
- 'trig_enable' => ''
- },
- 'darkshield' => {
- 'icon' => 'ТЬМА',
- 'kind' => 'skill',
- 'name' => 'щит тьмы',
- 'order' => 6,
- 'trig_disable' => '^Тьма внутри вас стала сильнее', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- },
- 'bandage' => {
- 'icon' => 'ПЕРЕВЯЗЬ',
- 'kind' => 'skill',
- 'name' => 'перевязка',
- 'order' => 7,
- 'trig_disable' => '^(Вы аккуратно перевязали себя)|(Вы аккуратно наложили повязки)', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- },
- 'tease' => {
- 'icon' => 'ДРАЗНИТЬ',
- 'kind' => 'skill',
- 'name' => 'дразнить',
- 'order' => 8,
- 'trig_disable' => '^Вы оскорбили .*? на всех языках Средиземья', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- }
- );
- my %Paladin = ();
- my %Mage = ();
- my %Druid = (
- 'bandage' => {
- 'icon' => 'ПЕРЕВЯЗЬ',
- 'kind' => 'skill',
- 'name' => 'перевязка',
- 'order' => 1,
- 'trig_disable' => '^(Вы аккуратно перевязали себя)|(Вы аккуратно наложили повязки)', # trig to become disabled
- 'trig_enable' => '' # could be ommited
- }
- );
- my %Warrior = ();
- # Call it when Cooldowns
- reset_cooldowns();
- init_cooldowns(\%Cooldowns);
- ###############################################################################
- alias {
- init_cooldowns(\%DK);
- } "кд_дк";
- alias {
- init_cooldowns(\%Druid);
- } "кд_друид";
- alias {
- reset_cooldowns();
- init_cooldowns(\%Cooldowns);
- } "кд_сброс";
- ## Functions
- sub init_cooldowns
- {
- my $h = shift;
- prepare_cds($h);
- # Add according to {order}
- foreach my $key (sort { $h->{$a}->{order} <=> $h->{$b}->{order} } keys %$h)
- {
- $Cooldowns{$key} = $h->{$key}
- unless defined $Cooldowns{$key};
- del_variable($key); # in case you load it more than ones
- add_variable($key);
- }
- }
- sub prepare_cds
- {
- my $h = shift;
- my $o = 1;
- # Sort keys by ABC and add {order} if missed
- foreach my $k (sort keys %$h)
- {
- $h->{$k}->{order} = $o++ unless defined $h->{$k}->{order};
- }
- }
- sub get_enabled_value
- {
- return _get_value(shift, $colors{enabled});
- }
- sub get_disabled_value
- {
- return _get_value(shift, $colors{disabled});
- }
- sub _get_value
- {
- my ($key, $color) = @_;
- my $value = $Cooldowns{$key}->{icon};
- $value = '[' . $value . ']'
- if $wrap_by_brackets;
- $value = chr(03) . $color . $value;
- return $value;
- }
- sub add_variable
- {
- my $key = shift;
- # initially all are ready
- my $value = get_enabled_value($key);
- # Added to one-line-height status line
- my $width = length($Cooldowns{$key}->{icon}) + $wrap_by_space;
- $width += 2 if $wrap_by_brackets;
- set_value($key, $value);
- set_triggers($key);
- Status::new_svy($cd_vars{$key}, $status_row, $width);
- }
- sub set_value
- {
- my ($key, $value) = @_;
- $cd_vars{$key} = $value;
- }
- sub disable_variable
- {
- my $key = shift;
- set_value($key, get_disabled_value($key));
- }
- sub enable_variable
- {
- my $key = shift;
- set_value($key, get_enabled_value($key));
- }
- sub del_variable
- {
- my $key = shift;
- my ($enable_name, $disable_name) = _trig_names($key);
- CMD::cmd_unaction($enable_name);
- CMD::cmd_unaction($disable_name);
- undef $cd_vars{$key};
- delete $cd_vars{$key};
- }
- my $current_key = undef;
- sub set_triggers
- {
- my $key = shift;
- my ($enable_name, $disable_name) = _trig_names($key);
- my $e_trig = get_enable_trig($key);
- my $d_trig = get_disable_trig($key);
- CMD::cmd_action($d_trig, sub {
- $current_key = $key;
- enable('spell_not_affected');
- disable_variable($key);
- }, "nf1500:$disable_name");
- CMD::cmd_action($e_trig, sub { enable_variable($key); }, "nf1500:$enable_name");
- }
- trig {
- enable_variable($current_key) if defined($current_key);
- } '^Ничего, похоже, не произошло\.', '-nf1500:spell_not_affected';
- trig {
- $current_key = undef;
- disable('spell_not_affected');
- } '^$', '-nf1500:spell_not_affected';
- sub _trig_names
- {
- my $key = shift;
- my @names = ( "cooldown_enable_$key", "cooldown_disable_$key" );
- return wantarray ? @names : \@names;
- }
- sub get_enable_trig
- {
- my $key = shift;
- my $trig = '';
- if ($Cooldowns{$key}->{kind} eq 'skill')
- {
- $trig = $skill_available;
- $trig =~ s/%%skill%%/$Cooldowns{$key}->{name}/;
- }
- elsif ($Cooldowns{$key}->{kind} eq 'spell')
- {
- $trig = $spell_available;
- $trig =~ s/%%spell%%/$Cooldowns{$key}->{name}/;
- }
- else
- {
- $trig = $Cooldowns{$key}->{trig_enable};
- }
- return $trig;
- }
- sub get_disable_trig
- {
- my $key = shift;
- my $trig = '';
- if ($Cooldowns{$key}->{kind} eq 'spell')
- {
- $trig = $spell_cast;
- $trig =~ s/%%spell%%/$Cooldowns{$key}->{name}/;
- }
- else
- {
- $trig = $Cooldowns{$key}->{trig_disable};
- }
- return $trig;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement