--- deliantra/server/lib/cf.pm 2006/02/07 01:03:44 1.4 +++ deliantra/server/lib/cf.pm 2006/02/08 03:46:15 1.5 @@ -60,6 +60,7 @@ @cf::object::player::ISA = 'cf::object'; @cf::object::map::ISA = 'cf::object'; +my %ext_pkg; my @exts; my @hook; my %command; @@ -67,6 +68,15 @@ sub inject_event { my ($data) = @_; + my $cb = $hook[$data->{event_code}]{$data->{extension}} + or return; + + $cb->($data) +} + +sub inject_global_event { + my ($data) = @_; + my $cb = $hook[$data->{event_code}] or return; @@ -100,6 +110,7 @@ my ($path) = @_; $path =~ /([^\/\\]+)\.ext$/ or die "$path"; + my $base = $1; my $pkg = $1; $pkg =~ s/[^[:word:]]/_/g; $pkg = "cf::ext::$pkg"; @@ -119,6 +130,7 @@ or die "$path: $@"; push @exts, $pkg; + $ext_pkg{$base} = $pkg; no strict 'refs'; @@ -127,7 +139,7 @@ for my $idx (0 .. $#EVENT) { if (my $ref = $pkg->can ("on_$EVENT[$idx]")) { warn "registering $EVENT[$idx] hook\n"; - $hook[$idx]{$pkg} = $ref; + $hook[$idx]{$base} = $ref; } } }