ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/player.h
Revision: 1.64
Committed: Sun Jul 1 05:00:18 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.63: +11 -12 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

# Content
1 /*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 *
8 * Crossfire TRT is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 */
23
24 enum bowtype_t
25 {
26 bow_normal = 0,
27 bow_threewide = 1,
28 bow_spreadshot = 2,
29 bow_n = 3, /* must stay at 3 */
30 bow_ne = 4,
31 bow_e = 5,
32 bow_se = 6,
33 bow_s = 7,
34 bow_sw = 8,
35 bow_w = 9,
36 bow_nw = 10, /* must stay at 10 */
37 bow_bestarrow = 11
38 };
39
40 enum petmode_t
41 {
42 pet_normal = 0,
43 pet_sad = 1,
44 pet_defend = 2,
45 pet_arena = 3,
46 };
47
48 enum usekeytype
49 {
50 key_inventory = 0,
51 keyrings = 1,
52 containers = 2,
53 };
54
55 /* This is used to control what to do when we need to unapply
56 * an object before we can apply another one.
57 */
58 enum unapplymode
59 {
60 unapply_nochoice = 0, /* Will unapply objects when there no choice to unapply */
61 unapply_never = 1, /* will not unapply objects automatically */
62 unapply_always = 2 /* Will unapply whatever is necessary - this goes beyond */
63 /* no choice - if there are multiple ojbect of the same type */
64 /* that need to be unapplied, there is no way for the player */
65 /* to control which of these will be unapplied. */
66 };
67
68 /* not really the player, but tied pretty closely */
69 INTERFACE_CLASS (partylist)
70 struct partylist
71 {
72 char *ACC (RW, partyleader);
73 char ACC (RW, passwd)[9];
74 partylist *ACC (RW, next);
75 char *ACC (RW, partyname);
76
77 struct party_kill
78 {
79 char killer[MAX_NAME + 1], dead[MAX_NAME + 1];
80 sint64 exp;
81 } party_kills[PARTY_KILL_LOG];
82
83 sint64 ACC (RW, total_exp);
84 uint32 ACC (RW, kills);
85 };
86
87 // used for pet monster logic etc.
88 static bool
89 same_party (partylist *a, partylist *b)
90 {
91 return a == b && a;
92 }
93
94 INTERFACE_CLASS (player)
95 struct player : zero_initialised, attachable
96 {
97 client *ACC (RO, ns); /* Socket information for this player */
98 object *ACC (RW, ob); /* The object representing the player */
99 object_vector_index ACC (RO, active);
100
101 bowtype_t ACC (RW, bowtype); /* which firemode? */
102 petmode_t ACC (RW, petmode); /* which petmode? */
103 usekeytype ACC (RW, usekeys); /* Method for finding keys for doors */
104 unapplymode ACC (RW, unapply); /* Method for auto unapply */
105 uint32 ACC (RW, count); /* Any numbers typed before a command */
106 uint32 ACC (RW, mode); /* Mode of player for pickup. */
107
108 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */
109 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */
110 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */
111 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */
112 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */
113 sint16 ACC (RW, item_power); /* Total item power of objects equipped */
114 uint8 ACC (RW, listening); /* Which priority will be used in info_all */
115 uint8 ACC (RW, gender); /* 0 male, 1 female, others not yte defined */
116
117 /* Try to put all the bitfields together - saves some small amount of memory */
118 bool ACC (RW, braced); /* Will not move if braced, only attack */
119 bool ACC (RW, tmp_invis); /* Will invis go away when we attack ? */
120 bool ACC (RW, do_los); /* If true, need to call update_los() in draw(), and clear */
121 bool ACC (RW, fire_on); /* Player should fire object, not move */
122 bool ACC (RW, run_on); /* Player should keep moving in dir until run is off */
123 bool ACC (RW, peaceful); /* If set, won't attack friendly creatures */
124 bool ACC (RW, hidden); /* If True, player (DM) is hidden from view */
125
126 float ACC (RW, weapon_sp); /* Penalties to speed when fighting w speed >ws/10 */
127 float ACC (RW, weapon_sp_left); // same as speed_left, but for attacks
128 living ACC (RO, orig_stats); /* Permanent real stats of player */
129 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
130 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */
131
132 object_ptr ACC (RW, combat_ob); // which weapon/bow/skill to use for direct attacks
133 object_ptr ACC (RW, ranged_ob); // which skill/item/spell to use for ranged attacks
134 object_ptr ACC (RW, golem); // the currently controlled golem
135 object_ptr ACC (RW, observe); // the object that is being observed (or 0)
136
137 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */
138 shstr ACC (RW, savebed_map); /* map where player will respawn after death */
139 shstr ACC (RW, maplevel); /* On which level is the player? */
140 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */
141
142 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */
143 /* Note that for dragon players, this is filled in for them */
144 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */
145
146 sint8 ACC (RW, levhp[11]); /* What the player gained on that level */
147 sint8 ACC (RW, levsp[11]); /* Same for sp */
148 sint8 ACC (RW, levgrace[11]); /* And same for grace */
149
150 char ACC (RW, killer)[64]; /* Who killed this player. */
151
152 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ /* should go */
153 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */
154
155 partylist *ACC (RW, party); /* Party this player is part of */
156 partylist *ACC (RW, party_to_join); /* used when player wants to join a party */
157 /* but we will have to get password first */
158 /* so we have to remember which party to */
159 /* join */
160 char ACC (RW, search_str)[MAX_BUF]; /* Item we are looking for */
161 sint16 ACC (RW, encumbrance); /* How much our player is encumbered */
162 uint16 ACC (RW, outputs_sync); /* How often to print, no matter what */
163 uint16 ACC (RW, outputs_count); /* Print if this count is exceeded */
164 object_ptr ACC (RW, mark); /* marked object */
165 /* Special DM fields */
166 tag_t *stack_items; /* Item stack for patch/dump/... commands */
167 int ACC (RW, stack_position); /* Current stack position, 0 for no item */
168 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */
169 /* the player can see. For maps smaller than */
170 /* MAP_CLIENT_.., the upper left is used */
171
172 shstr ACC (RW, invis_race); /* What race invisible to? */
173
174 MTH static player *create ();
175
176 static player *load_pl (object_thawer &thawer);
177 MTH static player *load_pl (const char *path);
178
179 bool save_pl (object_freezer &freezer);
180 MTH bool save_pl (const char *path);
181
182 void do_destroy ();
183 void gather_callbacks (AV *&callbacks, event_type event) const;
184
185 // wether the player can "see" this mapspace or not, decided by los
186 // 0 - nothing see, 100 - fully visible
187 MTH sint8 visibility_at (maptile *map, int x, int y) const;
188
189 MTH void connect (client *ns);
190 MTH void disconnect ();
191
192 MTH void activate ();
193 MTH void deactivate ();
194
195 MTH void chargen_race_done ();
196 MTH void chargen_race_next ();
197
198 MTH void set_observe (object *ob);
199
200 ~player ();
201
202 private:
203 void set_object (object *op);
204 player ();
205 };
206
207 typedef object_vector<player, &player::active> playervec;
208
209 extern playervec players;
210
211 #define for_all_players(var) \
212 for (unsigned _i = 0; _i < players.size (); ++_i) \
213 statementvar (player *, var, players [_i])
214