--- deliantra/server/ext/transports.ext 2006/12/15 19:29:18 1.1 +++ deliantra/server/ext/transports.ext 2007/05/18 19:46:22 1.4 @@ -12,7 +12,8 @@ } } -cf::attach_to_type cf::TRANSPORT, 0, +cf::object->attach ( + type => cf::TRANSPORT, on_apply => sub { my ($tr, $ob) = @_; @@ -28,15 +29,18 @@ cf::override; }, -; +); -cf::register_player_attachment transport_player_steer => +cf::player::attachment transport_player_steer => on_move => sub { my ($pl, $dir) = @_; my $ob = $pl->ob; if (my $tr = find_transport $pl) { + return cf::override 0 unless $ob->speed_left >= 0; + $ob->speed_left ($ob->speed_left - 1); + my @ontop; for (my $tr = $tr; $tr; $tr = $tr->more) { @@ -48,14 +52,14 @@ if ($tr->move ($dir, $ob)) { # do multiple loops in case some player/item blocks another # do not endlessly loop as the server is far too broken, e.g. - # you can drop floor son top of non-floors etc. + # you can drop floors on top of non-floors etc. for (1..50) { @ontop or last; @ontop = map $_->move ($dir, $_) ? () : $_, @ontop; } } - cf::override; + cf::override 1; } }, ;