--- deliantra/server/ext/jeweler.ext 2006/12/21 22:41:34 1.2 +++ deliantra/server/ext/jeweler.ext 2007/01/31 15:53:17 1.4 @@ -40,7 +40,15 @@ sub merge { my ($chdl, $sk, $pl, $do_analyze) = @_; - my $ingred = $chdl->extract_jeweler_ingredients; + my $ingred = eval { $chdl->extract_jeweler_ingredients }; + if ($@ =~ /cursed/) { + $pl->reply ("There are cursed items in the workbench, take them out before you do anything."). + return + } elsif ($@) { + warn "error in jeweler ingredient extraction: $@"; + return; + } + my @ring = $ingred->get_ring; my @rings = map { Jeweler::Object->new (object => $_) } @ring; @@ -113,7 +121,14 @@ $pl->message ("You can make: " . (join ', ', keys %{Jeweler::getcfg ('conversions') || {}})); } elsif ($msg =~ m/^\s*make\s+(\S+)\s*$/i) { - my $ingred = $chdl->extract_jeweler_ingredients; + my $ingred = eval { $chdl->extract_jeweler_ingredients }; + if ($@ =~ /cursed/) { + $pl->message ("There are cursed items in the workbench, take them out before you do anything."). + return + } elsif ($@) { + warn "error in jeweler ingredient extraction: $@"; + return; + } unless ($Jeweler::CFG->{conversions}->{lc $1}) { $pl->message ("You don't know how to make '$1', is does such a thing even exist?"); @@ -129,7 +144,15 @@ merge ($chdl, $sk, $pl, 0); } else { - my $ingred = $chdl->extract_jeweler_ingredients; + my $ingred = eval { $chdl->extract_jeweler_ingredients }; + if ($@ =~ /cursed/) { + $pl->message ("There are cursed items in the workbench, take them out before you do anything."). + return + } elsif ($@) { + warn "error in jeweler ingredient extraction: $@"; + return; + } + my $plan = $ingred->get_plan; if ($plan) { @@ -154,9 +177,9 @@ my %keys; my %cdiff; for (keys %$c1, keys %$c2) { $keys{$_} = 1 } - for (keys %keys) { $cdiff{$_} = $c2->{$_} - $c1->{$_} } + for (keys %keys) { $cdiff{$_} = $c2->{$_} - $c1->{$_}; warn "$_: $c2->{$_} | $c1->{$_}\n"; } - unless (grep { $_ > 0 } values %cdiff) { + unless ($iring->is_better_than ($ringo)) { $pl->message ("This plan doesn't improve anything, you find yourself puzzled about what you missed..."); return; }