--- deliantra/server/ext/reseller.ext 2006/12/15 19:29:18 1.1 +++ deliantra/server/ext/reseller.ext 2007/01/24 19:39:14 1.5 @@ -1,4 +1,4 @@ -#!perl +#!perl # MANDATORY my %unit = ( silver => 1, @@ -12,29 +12,43 @@ royalties => 'royalty', ); +sub ob2info { + my ($item, $rval) = @_; + sprintf "[%s from %s (%d:%d%s) nrof: %d uuid: %s]", + $item->name, $item->get_ob_key_value ('ext_reseller_seller'), + $item->get_ob_key_value ('ext_reseller_orig_value'), $item->value, + (defined $rval ? ":$rval" : ""), $item->nrof, $item->uuid; +} + +sub audit_log { + my ($who, $action, $info) = @_; + warn + sprintf "RESELLER_AUDIT(%s) %s %s: %s\n", + $who->map->path, $who->name, $action, $info; +} + +sub find_rec; + sub find_rec { my ($ob, $cb) = @_; - my @unpaid; + my @found; for my $i ($ob->inv) { - push @unpaid, $i if $cb->($i); - - push @unpaid, find_unpaid ($i, $cb) - if $i->inv; + push @found, $i if $cb->($i); + push @found, find_rec $i, $cb if $i->inv; } - return @unpaid; + + return @found; } sub find_unpaid { my ($ob) = @_; - my @r = find_rec ($ob, sub { $_[0]->flag (cf::FLAG_UNPAID) }); - return @r; + find_rec $ob, sub { $_[0]->flag (cf::FLAG_UNPAID) }; } sub find_traded { my ($ob) = @_; - my @r = find_rec ($ob, sub { $_[0]->get_ob_key_value ('ext_reseller_seller') ne '' }); - return @r; + find_rec $ob, sub { $_[0]->get_ob_key_value ('ext_reseller_seller') ne '' }; } cf::register_script_function "reseller::list_sells" => sub { @@ -73,6 +87,8 @@ $who->pay_player ($sum); $who->reply ($npc, "Here are the " . cf::cost_string_from_value ($sum) . " for your sales"); + audit_log ($who, 'collects', "$sum silver"); + $sells->{$who->name} = {}; $npc->set_ob_key_value (ext_reseller_sales => cf::to_json $sells); @@ -80,7 +96,7 @@ 0 }; -cf::register_attachment "reseller_shopmat", +cf::object::attachment "reseller_shopmat", on_move_trigger => sub { my ($self, $who_caused, $who) = @_; @@ -88,7 +104,7 @@ $who->map->at ($self->{reseller_shopmat}{npc_x}, $self->{reseller_shopmat}{npc_y}); unless (@obs) { - warn "Couldn't find shop keeper in " . $who->map . "\n"; + warn "Couldn't find shop keeper in " . $who->map->path . "\n"; return cf::override; } @@ -98,6 +114,7 @@ for my $item (find_unpaid ($who)) { if ($item->get_ob_key_value ('ext_reseller_seller') eq $who->name) { + audit_log ($who, 'removes', ob2info ($item)); $item->flag (cf::FLAG_UNPAID, 0); $item->remove; $item->insert_ob_in_ob ($who); @@ -113,25 +130,36 @@ $unpaid_items->{$item} = [$value, $item]; } + audit_log ($who, 'wants', (join ",", map { ob2info ($_->[1], $_->[0]) } values %$unpaid_items)) + if %$unpaid_items; + $self->apply_shop_mat ($who); + my @seller_noted; + for my $item (find_traded ($who)) { next if $item->flag (cf::FLAG_UNPAID); if (my $value = $unpaid_items->{$item}[0]) { + push @seller_noted, ob2info ($item, $value)."P"; $sells->{$item->get_ob_key_value ('ext_reseller_seller')}->{$item->name} += $value; + } else { + push @seller_noted, ob2info ($item)."T"; } $item->value ($item->get_ob_key_value ('ext_reseller_orig_value')); $item->set_ob_key_value (ext_reseller_seller => ''); } + audit_log ($who, 'removed', (join ",", @seller_noted)) + if @seller_noted; + $obs[0]->set_ob_key_value (ext_reseller_sales => cf::to_json $sells); cf::override; }, ; -cf::register_attachment "reseller_floor", +cf::object::attachment "reseller_floor", on_drop_on => sub { my ($on, $what, $who) = @_; my $name = $what->custom_name; @@ -223,6 +251,8 @@ $what->flag (cf::FLAG_UNPAID, 1); $what->insert_ob_in_map_at ($who->map, $who, cf::INS_BELOW_ORIGINATOR, $who->x, $who->y); + audit_log ($who, 'sells', ob2info ($what)); + cf::override; }, ;