Code: Select all
package alertSound;
use strict;
use Plugins;
use Globals qw(%cities_lut %config $field);
use Utils qw(existsInList);
use Log qw(message);
use Utils::Win32;
Plugins::register('alertSound', 'Plays sounds on certain events.', \&Unload);
my $hooks = Plugins::addHooks(
['packet_pubMsg', \&onPubChat, undef],
['packet_privMsg', \&onPrivMsg, undef],
['self_died', \&onDeath, undef],
['avoidGM_near', \&onGM, undef],
['avoidGM_talk', \&onGM, undef],
['Network::Receive::map_changed', \&onMapChange, undef]
);
my $dead;
sub Unload {
Plugins::delHooks($hooks);
};
sub onPubChat {
my ($packet, $args) = @_;
if ($args->{MsgUser} =~ /^([a-z]?ro)?-?(Sub)?-?\[?GM\]?/i) {
alertSound("Public GM Chat")
} else {
alertSound("Public Chat");
}
}
sub onPrivMsg {
my ($packet, $args) = @_;
if ($args->{MsgUser} =~ /^([a-z]?ro)?-?(Sub)?-?\[?GM\]?/i) {
alertSound("Private GM Chat")
} else {
alertSound("Private Chat");
}
}
sub onDeath {
alertSound("Death");
$dead = 1;
}
sub onMapChange {
$dead = 0;
}
sub onGM {
alertSound("GM Near");
}
sub alertSound {
my ($event) = @_;
for (my $i = 0; (exists $config{'alertSound_'.$i.'_eventList'}); $i++) {
next if (!existsInList($config{'alertSound_'.$i.'_eventList'}, $event) || $config{'alertSound_'.$i.'_disabled'} || ($config{'alertSound_'.$i.'_notInTown'} && $cities_lut{$field->name().'.rsw'}) || ($config{"alertSound_".$i."_inLockOnly"} && $field->name() eq $config{'lockMap'}));
message "Sound alert: $event.\n", "alertSound";
Utils::Win32::playSound($config{"alertSound_".$i."_play"});
return;
}
}
1;
Config example:
Code: Select all
alertSound {
eventList Public Chat, Private Chat
notInTown 0
inLocOnly 0
disabled 0
play C:\Documents and Settings\Camila\My Documents\Etc\openkoreSVN\Test.wav
}