--- deliantra/server/plugins/cfperl/cfperl.xs 2006/02/08 06:15:13 1.18 +++ deliantra/server/plugins/cfperl/cfperl.xs 2006/02/10 04:35:33 1.21 @@ -114,12 +114,14 @@ static SV * newSVptr (void *ptr, const char *klass) { + SV *sv; + if (!ptr) return &PL_sv_undef; - HV *hv = newHV (); - sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0); - return sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); + sv = newSV (0); + sv_magic (sv, 0, PERL_MAGIC_ext, (char *)ptr, 0); + return sv_bless (newRV_noinc (sv), gv_stashpv (klass, 1)); } static SV * @@ -136,7 +138,9 @@ sv = *he; else { - sv = newSVptr (ptr, klass); + HV *hv = newHV (); + sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0); + sv = sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0); } @@ -524,10 +528,10 @@ if (context.event_code == EVENT_FREE_OB) { - SV **svp = hv_fetch (obj_cache, (char *)&context.activator, sizeof (void *), 0); + SV *sv = hv_delete (obj_cache, (char *)&context.activator, sizeof (void *), 0); - if (svp) - clearSVptr (*svp); + if (sv) + clearSVptr (sv); } else inject_event ("cf::inject_global_event", &context); @@ -1178,7 +1182,7 @@ void cf_object_set_flag (object *op, int flag, int value) -void cf_object_move (object *op, int dir, object *originator) +void cf_object_move (object *op, int dir, object *originator = op) void cf_object_apply (object *op, object *author, int flags = 0) @@ -1194,7 +1198,7 @@ int cf_object_change_map (object *op, int x, int y, mapstruct *map) -object *cf_object_clone (object *op, int clonetype) +object *cf_object_clone (object *op, int clonetype = 0) int cf_object_pay_item (object *op, object *buyer)