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

Comparing deliantra/server/ext/chat.ext (file contents):
Revision 1.46 by root, Thu Dec 18 02:49:22 2008 UTC vs.
Revision 1.52 by root, Wed Apr 21 03:34:26 2010 UTC

218 }, 218 },
219 }, 219 },
220 kiss => { 220 kiss => {
221 noparams => { 221 noparams => {
222 other => "<self> makes a weird facial contortion", 222 other => "<self> makes a weird facial contortion",
223 self => "All the lonely people..", 223 self => "All the lonely people...",
224 }, 224 },
225 params => { 225 params => {
226 target => "<self> kisses you.", 226 target => "<self> kisses you.",
227 other => "<self> kisses <other>.", 227 other => "<self> kisses <other>.",
228 self => "You kiss <other>.", 228 self => "You kiss <other>.",
229 }, 229 },
230 self => { 230 self => {
231 }, 231 },
232 }, 232 },
233 hug => {
234 noparams => {
235 other => "<self> makes weird body movements.",
236 self => "All the lonely people...",
237 },
238 params => {
239 target => "<self> suddenly grabs you and gives you a bear hug.",
240 other => "<self> hugs <other>.",
241 self => "You hug <other>.",
242 },
243 self => {
244 other => "<self> tries to hug G<himself|herself>, but stumbles and now feels stupid.",
245 self => "You try and fail to hug yourself.",
246 },
247 },
233 smother => { 248 smother => {
234 noparams => { 249 noparams => {
235 other => "<self> makes weird facial contortions", 250 other => "<self> makes weird facial contortions",
236 self => "All the lonely people..", 251 self => "All the lonely people...",
237 }, 252 },
238 params => { 253 params => {
239 target => "<self> smothers you with kisses.", 254 target => "<self> smothers you with kisses.",
240 other => "<self> smothers <other> with kisses.", 255 other => "<self> smothers <other> with kisses.",
241 self => "You smother <other> with kisses.", 256 self => "You smother <other> with kisses.",
760 } 775 }
761 }; 776 };
762 }; 777 };
763} 778}
764 779
765cf::register_command me => sub {
766 my ($pl, $msg) = @_;
767
768 my $name = $pl->name;
769
770 send_msg $_, $cf::SAY_CHANNEL => "* $name $msg", cf::NDI_GREY | cf::NDI_DEF | ($_ == $pl ? cf::NDI_REPLY : 0), "msg_say"
771 for grep $pl->on_same_map_as ($_->ob), cf::player::list;
772};
773
774cf::register_command say => sub { 780cf::register_command say => sub {
775 my ($ob, $msg) = @_; 781 my ($ob, $msg) = @_;
776 782
777 utf8::decode $msg; 783 utf8::decode $msg;
778 784
783 my @plonmap = grep $ob->on_same_map_as ($_->ob), cf::player::list; 789 my @plonmap = grep $ob->on_same_map_as ($_->ob), cf::player::list;
784 790
785 send_msg $_, $cf::SAY_CHANNEL => "$name says: $msg", cf::NDI_GREY, "msg_say" 791 send_msg $_, $cf::SAY_CHANNEL => "$name says: $msg", cf::NDI_GREY, "msg_say"
786 for grep $_ != $ob->contr, @plonmap; 792 for grep $_ != $ob->contr, @plonmap;
787 $ob->contr->send_msg ($cf::SAY_CHANNEL => "$name says: $msg", cf::NDI_GREY | cf::NDI_REPLY); 793 $ob->contr->send_msg ($cf::SAY_CHANNEL => "$name says: $msg", cf::NDI_GREY | cf::NDI_REPLY);
794
795 my @npc;
788 796
789 # npcs, magic_ears etc. 797 # npcs, magic_ears etc.
790 # first find all objects and their first-level inventories 798 # first find all objects and their first-level inventories
791 # within a 5x5 square that have something resembling 799 # within a 5x5 square that have something resembling
792 # dialogue or support on_say. 800 # dialogue or support on_say.
801 # we prefer the nearest items NOT in the player, otherwise in player.
793 my ($map, $x, $y) = ($ob->map, $ob->x - 2, $ob->y - 2); 802 my ($map, $x, $y) = ($ob->map, $ob->x, $ob->y);
794 803
795 for my $npc ( 804 for my $dir (0 .. cf::SIZEOFFREE2) {
796 grep +($_->invoke (cf::EVENT_OBJECT_SAY, $ob->contr, $msg) && return) || $_->has_dialogue, 805 @npc = grep $_->should_invoke (cf::EVENT_OBJECT_SAY) || $_->has_dialogue,
797 map +($_, $_->inv), 806 map +($_, $_->inv),
798 grep $_, 807 grep $_ != $ob,
799 map $map->at ($x + $_ % 5, $y + (int $_ / 5)), 808 $map->at ($x, $y, $dir)
800 0..24 809 and last;
801 ) { 810 }
811
812 unless (@npc) {
813 # nothing found, try the player inventory
814 @npc = grep $_->should_invoke (cf::EVENT_OBJECT_SAY) || $_->has_dialogue,
815 $ob->inv;
816 }
817
818 for my $npc (@npc) {
819 return if $npc->invoke (cf::EVENT_OBJECT_SAY);
820
802 # if some listener teleported us somewhere else, stop right here 821 # if some listener teleported us somewhere else, stop right here
803 last unless $map->path == $ob->map->path; 822 last unless $map->path == $ob->map->path;
804 823
824 if ($npc->has_dialogue) {
805 my $dialog = new NPC_Dialogue pl => $ob->contr, npc => $npc; 825 my $dialog = new NPC_Dialogue pl => $ob->contr, npc => $npc;
806 my ($reply, @kw) = $dialog->tell ($msg); 826 my ($reply, @kw) = $dialog->tell ($msg);
807 827
808 if (defined $reply) { 828 if (defined $reply) {
809 if ($npc->type == cf::MAGIC_EAR) { 829 if ($npc->type == cf::MAGIC_EAR) {
810 send_msg $_, $cf::SAY_CHANNEL => $reply, cf::NDI_BROWN, "msg_say" 830 send_msg $_, $cf::SAY_CHANNEL => $reply, cf::NDI_BROWN, "msg_say"
811 for @plonmap; 831 for @plonmap;
812 } else { 832 } else {
813 send_msg $_, $cf::SAY_CHANNEL => $npc->name . " says: $reply", cf::NDI_BROWN, "msg_say" 833 send_msg $_, $cf::SAY_CHANNEL => $npc->name . " says: $reply", cf::NDI_BROWN, "msg_say"
834 for @plonmap;
835 }
836 }
837
838 if (@kw) {
839 $_->send_msg ($cf::SAY_CHANNEL => "[further topics: " . (join ", ", @kw) . "]", cf::NDI_BROWN)
814 for @plonmap; 840 for @plonmap;
815 } 841 }
816 }
817
818 if (@kw) {
819 $_->send_msg ($cf::SAY_CHANNEL => "[further topics: " . (join ", ", @kw) . "]", cf::NDI_BROWN)
820 for @plonmap;
821 } 842 }
822 } 843 }
823 844
824 } else { 845 } else {
825 $ob->send_msg ($cf::SAY_CHANNEL => "What do you want to say?", cf::NDI_GREY | cf::NDI_REPLY); 846 $ob->send_msg ($cf::SAY_CHANNEL => "What do you want to say?", cf::NDI_GREY | cf::NDI_REPLY);
826 } 847 }
827}; 848};
828 849
829cf::register_command chat => sub { 850
851sub _chat {
830 my ($ob, $msg) = @_; 852 my ($ob, $msg) = @_;
831
832 utf8::decode $msg;
833 853
834 my $pl = $ob->contr; 854 my $pl = $ob->contr;
835 855
836 return if $pl->invoke (cf::EVENT_PLAYER_CHAT, $msg); 856 return if $pl->invoke (cf::EVENT_PLAYER_CHAT, $msg);
837 857
838 if ($msg) { 858 if ($msg) {
839 my $name = $ob->name; 859 my $name = $ob->name;
840 my $NOW = time; 860 my $NOW = time;
841 861
842 cf::LOG cf::llevDebug, sprintf "QBERT [%s] %s\n", $name, $msg; 862 cf::LOG cf::llevDebug, sprintf "QBERT %s\n", $msg;
843 send_irc ("[%s] %s", $name, $msg); 863 send_irc ("%s", $msg);
844 864
845 send_msg $_, $cf::CHAT_CHANNEL => "$name chats: $msg", cf::NDI_BLUE | cf::NDI_DEF | ($_ == $pl ? cf::NDI_REPLY : 0), "msg_chat" 865 send_msg $_, $cf::CHAT_CHANNEL => $msg, cf::NDI_BLUE | cf::NDI_DEF | ($_ == $pl ? cf::NDI_REPLY : 0), "msg_chat"
846 for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW } cf::player::list; 866 for grep { $_->ob->{ext_ignore_shout}{$name} < $NOW } cf::player::list;
847 867
848 } else { 868 } else {
849 $pl->send_msg ($cf::CHAT_CHANNEL => "Chat what?", cf::NDI_BLUE | cf::NDI_DEF | cf::NDI_REPLY); 869 $pl->send_msg ($cf::CHAT_CHANNEL => "Chat what?", cf::NDI_BLUE | cf::NDI_DEF | cf::NDI_REPLY);
850 } 870 }
871}
872
873cf::register_command chat => sub {
874 my ($ob, $msg) = @_;
875
876 utf8::decode $msg;
877 _chat $ob, $ob->name . " chats: $msg";
878};
879
880cf::register_command me => sub {
881 my ($ob, $msg) = @_;
882
883 utf8::decode $msg;
884 _chat $ob, "* " . $ob->name . " $msg";
851}; 885};
852 886
853cf::register_command shout => sub { 887cf::register_command shout => sub {
854 my ($ob, $msg) = @_; 888 my ($ob, $msg) = @_;
855 889

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines