… | |
… | |
18 | my ($tr, $ob) = @_; |
18 | my ($tr, $ob) = @_; |
19 | |
19 | |
20 | return unless $ob->type == cf::PLAYER; |
20 | return unless $ob->type == cf::PLAYER; |
21 | |
21 | |
22 | if ($ob->contr->attached ("transport_player_steer")) { |
22 | if ($ob->contr->attached ("transport_player_steer")) { |
23 | $ob->message ("You stop steering the " . $tr->name . "."); |
23 | $ob->message ("You stop steering the " . $tr->name . ".", cf::NDI_ORANGE | cf::NDI_REPLY); |
24 | $ob->contr->detach ("transport_player_steer"); |
24 | $ob->contr->detach ("transport_player_steer"); |
25 | } else { |
25 | } else { |
26 | $ob->message ("You now steer the " . $tr->name . "."); |
26 | $ob->message ("You now steer the " . $tr->name . ".", cf::NDI_ORANGE | cf::NDI_REPLY); |
27 | $ob->contr->attach ("transport_player_steer"); |
27 | $ob->contr->attach ("transport_player_steer"); |
28 | } |
28 | } |
29 | |
29 | |
30 | cf::override; |
30 | cf::override; |
31 | }, |
31 | }, |
… | |
… | |
36 | my ($pl, $dir) = @_; |
36 | my ($pl, $dir) = @_; |
37 | |
37 | |
38 | my $ob = $pl->ob; |
38 | my $ob = $pl->ob; |
39 | |
39 | |
40 | if (my $tr = find_transport $pl) { |
40 | if (my $tr = find_transport $pl) { |
|
|
41 | return cf::override 0 unless $ob->speed_left >= 0; |
|
|
42 | $ob->speed_left ($ob->speed_left - 1); |
|
|
43 | |
41 | my @ontop; |
44 | my @ontop; |
42 | |
45 | |
43 | for (my $tr = $tr; $tr; $tr = $tr->more) { |
46 | for (my $tr = $tr; $tr; $tr = $tr->more) { |
44 | for (my $ob = $tr->above; $ob; $ob = $ob->above) { |
47 | for (my $ob = $tr->above; $ob; $ob = $ob->above) { |
45 | push @ontop, $ob; |
48 | push @ontop, $ob; |
… | |
… | |
47 | } |
50 | } |
48 | |
51 | |
49 | if ($tr->move ($dir, $ob)) { |
52 | if ($tr->move ($dir, $ob)) { |
50 | # do multiple loops in case some player/item blocks another |
53 | # do multiple loops in case some player/item blocks another |
51 | # do not endlessly loop as the server is far too broken, e.g. |
54 | # do not endlessly loop as the server is far too broken, e.g. |
52 | # you can drop floor son top of non-floors etc. |
55 | # you can drop floors on top of non-floors etc. |
53 | for (1..50) { |
56 | for (1..50) { |
54 | @ontop or last; |
57 | @ontop or last; |
55 | @ontop = map $_->move ($dir, $_) ? () : $_, @ontop; |
58 | @ontop = map $_->move ($dir, $_) ? () : $_, @ontop; |
56 | } |
59 | } |
57 | } |
60 | } |
58 | |
61 | |
59 | cf::override; |
62 | cf::override 1; |
60 | } |
63 | } |
61 | }, |
64 | }, |
62 | ; |
65 | ; |
63 | |
66 | |