1 | #! perl |
1 | #! perl # depends=irc |
2 | |
2 | |
3 | # archetype nekosan |
3 | # archetype nekosan |
4 | |
|
|
5 | sub teleport { |
|
|
6 | my ($pl, $map, $x, $y) = @_; |
|
|
7 | |
|
|
8 | my $portal = cf::object::new "exit"; |
|
|
9 | |
|
|
10 | $portal->slaying ($map); |
|
|
11 | $portal->stats->hp ($x); |
|
|
12 | $portal->stats->sp ($y); |
|
|
13 | |
|
|
14 | $portal->apply ($pl); |
|
|
15 | |
|
|
16 | $portal->destroy; |
|
|
17 | } |
|
|
18 | |
4 | |
19 | sub find_target_player { |
5 | sub find_target_player { |
20 | my ($obj) = @_; |
6 | my ($obj) = @_; |
21 | |
7 | |
22 | my ($time, $pl) = (time + 120, undef); |
8 | my ($time, $pl) = (time + 120, undef); |
… | |
… | |
62 | $spell->last_sp (100); # fill sp |
48 | $spell->last_sp (100); # fill sp |
63 | $spell->last_grace (100); # fill gr |
49 | $spell->last_grace (100); # fill gr |
64 | $spell->attacktype (cf::AT_CONFUSION | cf::AT_POISON | cf::AT_BLIND | cf::AT_DISEASE); |
50 | $spell->attacktype (cf::AT_CONFUSION | cf::AT_POISON | cf::AT_BLIND | cf::AT_DISEASE); |
65 | |
51 | |
66 | $pl->message ("(Neko-san makes strange noises)"); |
52 | $pl->message ("(Neko-san makes strange noises)"); |
67 | $pl->cast_spell ($self, $dir, $spell); |
53 | $pl->cast_heal ($self, $spell, 0); |
68 | |
54 | |
69 | $spell->destroy; |
55 | $spell->destroy; |
70 | } |
56 | } |
71 | |
57 | |
72 | } else { |
58 | } else { |
73 | # check for fish in his inv and steal it |
59 | # check for fish in his inv and steal it |
74 | if (my $fish = (grep $_->arch->name eq "fishfood", $pl->inv)[0]) { |
60 | if (my $fish = (grep $_->arch->archname eq "fishfood", $pl->inv)[0]) { |
75 | # add force |
61 | # add force |
76 | my $gave_fish = cf::object::new "force"; |
62 | my $gave_fish = cf::object::new "force"; |
77 | $gave_fish->slaying ("schmorp-neko-gave-fish"); |
63 | $gave_fish->slaying ("schmorp-neko-gave-fish"); |
78 | $gave_fish->speed (0); |
64 | $gave_fish->speed (0); |
79 | $gave_fish->insert_ob_in_ob ($pl); |
65 | $pl->insert ($gave_fish); |
80 | |
66 | |
81 | # remove fish |
67 | # remove fish |
82 | $fish->destroy; |
68 | $fish->destroy; |
83 | |
69 | |
84 | # be nice |
70 | # be nice |
… | |
… | |
111 | $hitter->{neko_attack} = 0; |
97 | $hitter->{neko_attack} = 0; |
112 | } |
98 | } |
113 | |
99 | |
114 | $hitter->{neko_last_attack} = time; |
100 | $hitter->{neko_last_attack} = time; |
115 | $hitter->{neko_attack}++ |
101 | $hitter->{neko_attack}++ |
116 | or ext::schmorp_irc::do_notice "Neko-san was attacked by ". $hitter->name . "!\n"; |
102 | or ext::irc::do_notice "Neko-san was attacked by ". $hitter->name . "!\n"; |
117 | |
103 | |
118 | $hitter->message ("Meoow! (Please do not hurt me)") |
104 | $hitter->message ("Meoow! (Please do not hurt me)") |
119 | if !($hitter->{neko_attack} & 15); |
105 | if !($hitter->{neko_attack} & 15); |
120 | |
106 | |
121 | if ($hitter->{neko_attack} > 512) { |
107 | if ($hitter->{neko_attack} > 512) { |
122 | $hitter->{neko_attack} -= 128; |
108 | $hitter->{neko_attack} -= 128; |
123 | $hitter->message ("Neko-san is suddenly gone!"); |
109 | $hitter->message ("Neko-san is suddenly gone!"); |
124 | teleport $hitter, "/scorn/misc/scorn_illusions", 15, 7; |
110 | $hitter->goto ("/scorn/misc/scorn_illusions", 15, 7); |
125 | $hitter->message ("You hear strange noises all around you..."); |
111 | $hitter->message ("You hear strange noises all around you..."); |
126 | $hitter->message ("You feel dumb."); |
112 | $hitter->message ("You feel dumb."); |
127 | } |
113 | } |
128 | } else { |
114 | } else { |
129 | # $hitter->stats->hp (-1); |
115 | # $hitter->stats->hp (-1); |
… | |
… | |
134 | } |
120 | } |
135 | |
121 | |
136 | sub on_say { |
122 | sub on_say { |
137 | my ($self, $pl, $msg) = @_; |
123 | my ($self, $pl, $msg) = @_; |
138 | |
124 | |
139 | ext::schmorp_irc::do_notice (sprintf "[Neko-fon] %s: %s\n", $pl->ob->name, $msg); |
125 | ext::irc::do_notice (sprintf "[Neko-fon] %s: %s\n", $pl->ob->name, $msg); |
140 | } |
126 | } |
141 | |
127 | |
142 | cf::object::attachment "Nekosan", package => __PACKAGE__; |
128 | cf::object::attachment "Nekosan", package => __PACKAGE__; |
143 | |
129 | |