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.2 by elmex, Sun Dec 17 22:16:52 2006 UTC vs.
Revision 1.6 by root, Mon Apr 21 06:35:26 2008 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines