ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/map_lib.ext
(Generate patch)

Comparing deliantra/server/ext/map_lib.ext (file contents):
Revision 1.1 by elmex, Sun Dec 17 22:02:55 2006 UTC vs.
Revision 1.7 by elmex, Sat Mar 20 14:57:58 2010 UTC

9 9
10sub rec_inv_by_slaying { 10sub rec_inv_by_slaying {
11 my ($ob, $slaying, $cb) = @_; 11 my ($ob, $slaying, $cb) = @_;
12 $cb->($ob) if $ob->slaying eq $slaying; 12 $cb->($ob) if $ob->slaying eq $slaying;
13 for my $iob ($ob->inv) { rec_inv_by_slaying ($iob, $slaying, $cb) } 13 for my $iob ($ob->inv) { rec_inv_by_slaying ($iob, $slaying, $cb) }
14}
15
16=item count_linked ($map, $connected)
17
18Counts the number of objects with the connected value C<$connected> on
19the map C<$map>.
20
21=cut
22
23sub count_linked {
24 my ($map, $connected) = @_;
25 my (@a) = $map->find_link ($connected);
26 scalar @a
14} 27}
15 28
16=item object attachment: 'check_inventory_on_apply' 29=item object attachment: 'check_inventory_on_apply'
17 30
18This attachment checks on apply whether the applyer 31This attachment checks on apply whether the applyer
49 62
50=back 63=back
51 64
52=cut 65=cut
53 66
54cf::register_attachment check_inventory_on_apply => 67cf::object::attachment check_inventory_on_apply =>
55 on_apply => sub { 68 on_apply => sub {
56 my ($self, $pl) = @_; 69 my ($self, $pl) = @_;
57 my $cfg = $self->{check_inventory_on_apply}; 70 my $cfg = $self->{check_inventory_on_apply};
58 my $match; 71 my $match;
59 rec_inv_by_slaying ($pl, $cfg->{key_string}, sub { 72 rec_inv_by_slaying ($pl, $cfg->{key_string}, sub {
60 my ($ob) = @_; 73 my ($ob) = @_;
61 $match = $ob; 74 $match = $ob;
62 }); 75 });
63 if ($match) { 76 if ($match) {
64 $match->decrease_ob_nr ($cfg->{decrease_by_cnt}) if $cfg->{decrease_by_cnt}; 77 $match->decrease ($cfg->{decrease_by_cnt}) if $cfg->{decrease_by_cnt};
65 $pl->message ($cfg->{message_on_match}) if defined $cfg->{message_on_match}; 78 $pl->message ($cfg->{message_on_match}, cf::NDI_UNIQUE) if defined $cfg->{message_on_match};
66 } else { 79 } else {
67 $pl->message ($cfg->{message_on_nomatch}) if defined $cfg->{message_on_nomatch}; 80 $pl->message ($cfg->{message_on_nomatch}, cf::NDI_RED | cf::NDI_UNIQUE) if defined $cfg->{message_on_nomatch};
68 cf::override; 81 cf::override;
69 } 82 }
83 };
84
85
86=item object attachment: 'trigger_on_dialog_flag'
87
88This attachment checks whether the player has a specific
89dialog flag set (the ones you can set with @setflag, see also
90L<NPC_Dialogue>, and triggers a connection depending on that.
91
92The attachment has following configuration:
93
94=over 4
95
96=item flag
97
98This field should contain the name of the flag that you want to check
99for.
100
101=item connection
102
103The connection ID of the connection you want to trigger.
104
105=item state
106
107The state of the connection: 0 for release, 1 for push.
108
109=back
110
111=cut
112
113cf::object::attachment trigger_on_dialog_flag =>
114 on_move_trigger => sub {
115 my ($self, $who, $orig) = @_;
116 my $cfg = $self->{trigger_on_dialog_flag};
117 if (exists $who->{ob}{dialog_flag}{$cfg->{flag}}) {
118 if ($who->{ob}{dialog_flag}{$cfg->{flag}}) {
119 $self->map->trigger ($cfg->{connection}, $cfg->{state});
120 }
121 cf::override;
122 }
123 };
124
125=item object attachment: 'display_info_window'
126
127If you attach this attachment to a sign a window containing the
128message will open in the client when the player applies it.
129
130Use this feature with care, as popups usually are very noisy.
131This is mostly thought for tutorial or other instructions.
132
133=cut
134
135cf::object::attachment display_info_window =>
136 on_apply => sub {
137 my ($self, $pl) = @_;
138
139 return unless $pl->contr->ns->{can_widget};
140
141 my $cfg = $self->{display_info_window};
142
143 if ($pl->contr->ns->{info_wins}->{$self->uuid}) {
144 $pl->contr->ns->{info_wins}->{$self->uuid}->destroy;
145 }
146
147 my $ws = $pl->contr->ns->new_widgetset;
148
149 my $w = $ws->{my_main} = $ws->new (Toplevel =>
150 force_w => 600,
151 force_h => 400,
152 x => 'center',
153 y => 'center',
154 title => 'Information Sign',
155 has_close_button => 1,
156 on_delete => sub { $ws->destroy },
157 );
158 $w->add ($ws->{txt_area} = $ws->new ('TextScroller'));
159 $ws->{txt_area}->add_paragraph ($self->msg);
160 $w->show;
161 $pl->contr->ns->{info_wins}->{$self->uuid} = $ws;
162
163 cf::override 1;
70 }; 164 };
71 165
72=back 166=back
73 167
74=cut 168=cut

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines