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.51 by root, Sun Jul 19 18:15:07 2009 UTC vs.
Revision 1.52 by root, Wed Apr 21 03:34:26 2010 UTC

790 790
791 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"
792 for grep $_ != $ob->contr, @plonmap; 792 for grep $_ != $ob->contr, @plonmap;
793 $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 794
795 my @npc;
796
795 # npcs, magic_ears etc. 797 # npcs, magic_ears etc.
796 # first find all objects and their first-level inventories 798 # first find all objects and their first-level inventories
797 # within a 5x5 square that have something resembling 799 # within a 5x5 square that have something resembling
798 # dialogue or support on_say. 800 # dialogue or support on_say.
801 # we prefer the nearest items NOT in the player, otherwise in player.
799 my ($map, $x, $y) = ($ob->map, $ob->x - 2, $ob->y - 2); 802 my ($map, $x, $y) = ($ob->map, $ob->x, $ob->y);
800 803
801 for my $npc ( 804 for my $dir (0 .. cf::SIZEOFFREE2) {
802 grep +($_->invoke (cf::EVENT_OBJECT_SAY, $ob->contr, $msg) && return) || $_->has_dialogue, 805 @npc = grep $_->should_invoke (cf::EVENT_OBJECT_SAY) || $_->has_dialogue,
803 map +($_, $_->inv), 806 map +($_, $_->inv),
804 grep $_, 807 grep $_ != $ob,
805 map $map->at ($x + $_ % 5, $y + (int $_ / 5)), 808 $map->at ($x, $y, $dir)
806 0..24 809 and last;
807 ) { 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
808 # if some listener teleported us somewhere else, stop right here 821 # if some listener teleported us somewhere else, stop right here
809 last unless $map->path == $ob->map->path; 822 last unless $map->path == $ob->map->path;
810 823
824 if ($npc->has_dialogue) {
811 my $dialog = new NPC_Dialogue pl => $ob->contr, npc => $npc; 825 my $dialog = new NPC_Dialogue pl => $ob->contr, npc => $npc;
812 my ($reply, @kw) = $dialog->tell ($msg); 826 my ($reply, @kw) = $dialog->tell ($msg);
813 827
814 if (defined $reply) { 828 if (defined $reply) {
815 if ($npc->type == cf::MAGIC_EAR) { 829 if ($npc->type == cf::MAGIC_EAR) {
816 send_msg $_, $cf::SAY_CHANNEL => $reply, cf::NDI_BROWN, "msg_say" 830 send_msg $_, $cf::SAY_CHANNEL => $reply, cf::NDI_BROWN, "msg_say"
817 for @plonmap; 831 for @plonmap;
818 } else { 832 } else {
819 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)
820 for @plonmap; 840 for @plonmap;
821 } 841 }
822 }
823
824 if (@kw) {
825 $_->send_msg ($cf::SAY_CHANNEL => "[further topics: " . (join ", ", @kw) . "]", cf::NDI_BROWN)
826 for @plonmap;
827 } 842 }
828 } 843 }
829 844
830 } else { 845 } else {
831 $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);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines