ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.28 by root, Sun Jul 30 17:42:14 2006 UTC vs.
Revision 1.31 by elmex, Mon Aug 14 04:22:04 2006 UTC

70@ext::cf::object::player::ISA = @cf::object::player::ISA = 'cf::object'; 70@ext::cf::object::player::ISA = @cf::object::player::ISA = 'cf::object';
71@ext::cf::object::map::ISA = @cf::object::map::ISA = 'cf::object'; 71@ext::cf::object::map::ISA = @cf::object::map::ISA = 'cf::object';
72 72
73# we bless all objects into derived classes to force a method lookup 73# we bless all objects into derived classes to force a method lookup
74# within the Safe compartment. 74# within the Safe compartment.
75for my $pkg (qw(cf::object cf::object::map cf::object::player cf::player cf::map cf::party cf::region)) { 75for my $pkg (qw(cf::object cf::object::map cf::object::player cf::player cf::map cf::party cf::region cf::arch)) {
76 no strict 'refs'; 76 no strict 'refs';
77 @{"ext::$pkg\::wrap::ISA"} = @{"$pkg\::wrap::ISA"} = $pkg; 77 @{"ext::$pkg\::wrap::ISA"} = @{"$pkg\::wrap::ISA"} = $pkg;
78} 78}
79 79
80$Event::DIED = sub { 80$Event::DIED = sub {
180 180
181sub unload_extension { 181sub unload_extension {
182 my ($pkg) = @_; 182 my ($pkg) = @_;
183 183
184 warn "removing extension $pkg\n"; 184 warn "removing extension $pkg\n";
185
186 if (my $cb = $pkg->can ("on_unload")) {
187 $cb->($pkg);
188 }
189 185
190 # remove hooks 186 # remove hooks
191 for my $idx (0 .. $#EVENT) { 187 for my $idx (0 .. $#EVENT) {
192 delete $hook[$idx]{$pkg}; 188 delete $hook[$idx]{$pkg};
193 } 189 }
208 # remove extcmds 204 # remove extcmds
209 for my $name (grep $extcmd{$_}[1] eq $pkg, keys %extcmd) { 205 for my $name (grep $extcmd{$_}[1] eq $pkg, keys %extcmd) {
210 delete $extcmd{$name}; 206 delete $extcmd{$name};
211 } 207 }
212 208
209 if (my $cb = $pkg->can ("on_unload")) {
210 eval {
211 $cb->($pkg);
212 1
213 } or warn "$pkg unloaded, but with errors: $@";
214 }
215
213 Symbol::delete_package $pkg; 216 Symbol::delete_package $pkg;
214} 217}
215 218
216sub load_extensions { 219sub load_extensions {
217 my $LIBDIR = maps_directory "perl"; 220 my $LIBDIR = maps_directory "perl";
289############################################################################# 292#############################################################################
290# utility functions 293# utility functions
291 294
292use JSON::Syck (); # TODO# replace by JSON::PC once working 295use JSON::Syck (); # TODO# replace by JSON::PC once working
293 296
294$JSON::Syck::ImplicitUnicode = 1;
295
296sub from_json($) { 297sub from_json($) {
298 $JSON::Syck::ImplicitUnicode = 1; # work around JSON::Syck bugs
297 JSON::Syck::Load $_[0] 299 JSON::Syck::Load $_[0]
298} 300}
299 301
300sub to_json($) { 302sub to_json($) {
303 $JSON::Syck::ImplicitUnicode = 0; # work around JSON::Syck bugs
301 JSON::Syck::Dump $_[0] 304 JSON::Syck::Dump $_[0]
302} 305}
303 306
304############################################################################# 307#############################################################################
305# extcmd framework, basically convert ext <msg> 308# extcmd framework, basically convert ext <msg>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines