… | |
… | |
62 | my %res; |
62 | my %res; |
63 | |
63 | |
64 | if ($pl->cell_visible ($dx, $dy)) { |
64 | if ($pl->cell_visible ($dx, $dy)) { |
65 | for my $ob ($pl->ob->map->at ($pl->ob->x + $dx, $pl->ob->y + $dy)) { |
65 | for my $ob ($pl->ob->map->at ($pl->ob->x + $dx, $pl->ob->y + $dy)) { |
66 | $res{npc_dialog} = [$ob->name, $dx, $dy] |
66 | $res{npc_dialog} = [$ob->name, $dx, $dy] |
67 | if $near && NPC_Dialogue::has_dialogue $ob && !$pl->{npc_dialog}; |
67 | if $near && $ob->has_dialogue && !$pl->{npc_dialog}; |
68 | } |
68 | } |
69 | } |
69 | } |
70 | |
70 | |
71 | %res |
71 | %res |
72 | }; |
72 | }; |
… | |
… | |
96 | return (error => "too far away") unless (abs $dx) <= 2 && (abs $dy) <= 2; |
96 | return (error => "too far away") unless (abs $dx) <= 2 && (abs $dy) <= 2; |
97 | return (error => "nothing to talk there") unless $pl->cell_visible ($dx, $dy); |
97 | return (error => "nothing to talk there") unless $pl->cell_visible ($dx, $dy); |
98 | return (error => "only one dialog can be open at a time") if $pl->{npc_dialog}; # only one dialog at a time |
98 | return (error => "only one dialog can be open at a time") if $pl->{npc_dialog}; # only one dialog at a time |
99 | |
99 | |
100 | for my $npc ($pl->ob->map->at ($pl->ob->x + $dx, $pl->ob->y + $dy)) { |
100 | for my $npc ($pl->ob->map->at ($pl->ob->x + $dx, $pl->ob->y + $dy)) { |
101 | if (NPC_Dialogue::has_dialogue $npc) { |
101 | if ($npc->has_dialogue) { |
102 | $pl->attach ("npc_dialog_active"); |
102 | $pl->attach ("npc_dialog_active"); |
103 | $pl->{npc_dialog} = new NPC_Dialogue pl => $pl, npc => $npc, id => $id; |
103 | $pl->{npc_dialog} = new NPC_Dialogue pl => $pl, npc => $npc, id => $id; |
104 | dialog_tell $id, $pl->{npc_dialog}, "hi"; |
104 | dialog_tell $id, $pl->{npc_dialog}, "hi"; |
105 | return; |
105 | return; |
106 | } |
106 | } |