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

# User Rev Content
1 root 1.1 /*
2 root 1.64 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 pippijn 1.45 *
4 root 1.59 * 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 pippijn 1.45 *
8 root 1.64 * 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 pippijn 1.45 *
13 root 1.64 * 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 pippijn 1.45 *
18 root 1.64 * 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 root 1.59 *
21     * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 pippijn 1.45 */
23 root 1.1
24 root 1.16 enum bowtype_t
25     {
26 root 1.50 bow_normal = 0,
27     bow_threewide = 1,
28 root 1.16 bow_spreadshot = 2,
29 root 1.50 bow_n = 3, /* must stay at 3 */
30 root 1.16 bow_ne = 4,
31 root 1.50 bow_e = 5,
32 root 1.16 bow_se = 6,
33 root 1.50 bow_s = 7,
34 root 1.16 bow_sw = 8,
35 root 1.50 bow_w = 9,
36 root 1.16 bow_nw = 10, /* must stay at 10 */
37     bow_bestarrow = 11
38     };
39    
40     enum petmode_t
41     {
42     pet_normal = 0,
43 root 1.50 pet_sad = 1,
44 root 1.16 pet_defend = 2,
45 root 1.50 pet_arena = 3,
46 root 1.16 };
47    
48     enum usekeytype
49     {
50     key_inventory = 0,
51 root 1.50 keyrings = 1,
52     containers = 2,
53 root 1.16 };
54 root 1.1
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 root 1.16 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 root 1.38 INTERFACE_CLASS (partylist)
70 root 1.16 struct partylist
71     {
72 root 1.38 char *ACC (RW, partyleader);
73     char ACC (RW, passwd)[9];
74     partylist *ACC (RW, next);
75     char *ACC (RW, partyname);
76 root 1.1
77 root 1.16 struct party_kill
78     {
79     char killer[MAX_NAME + 1], dead[MAX_NAME + 1];
80     sint64 exp;
81     } party_kills[PARTY_KILL_LOG];
82 root 1.38
83     sint64 ACC (RW, total_exp);
84     uint32 ACC (RW, kills);
85 root 1.16 };
86 root 1.1
87 root 1.55 // 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 root 1.35 INTERFACE_CLASS (player)
95     struct player : zero_initialised, attachable
96 root 1.6 {
97 root 1.51 client *ACC (RO, ns); /* Socket information for this player */
98     object *ACC (RW, ob); /* The object representing the player */
99 root 1.62 object_vector_index ACC (RO, active);
100 root 1.43
101 root 1.51 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 root 1.63 uint8 ACC (RW, gender); /* 0 male, 1 female, others not yte defined */
116 root 1.16
117     /* Try to put all the bitfields together - saves some small amount of memory */
118 root 1.43 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 root 1.16
126 root 1.18 float ACC (RW, weapon_sp); /* Penalties to speed when fighting w speed >ws/10 */
127 root 1.57 float ACC (RW, weapon_sp_left); // same as speed_left, but for attacks
128 root 1.18 living ACC (RO, orig_stats); /* Permanent real stats of player */
129 root 1.44 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
130 root 1.18 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */
131 root 1.16
132 root 1.53 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 root 1.51 object_ptr ACC (RW, golem); // the currently controlled golem
135 root 1.60 object_ptr ACC (RW, observe); // the object that is being observed (or 0)
136 root 1.51
137 root 1.18 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */
138 root 1.39 shstr ACC (RW, savebed_map); /* map where player will respawn after death */
139     shstr ACC (RW, maplevel); /* On which level is the player? */
140 root 1.18 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */
141 root 1.16
142 root 1.18 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */
143 root 1.16 /* Note that for dragon players, this is filled in for them */
144 root 1.19 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */
145 root 1.16
146 root 1.34 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 root 1.16
150 root 1.19 char ACC (RW, killer)[64]; /* Who killed this player. */
151 root 1.16
152 root 1.31 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ /* should go */
153 root 1.18 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */
154 root 1.1
155 root 1.18 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 root 1.16 /* but we will have to get password first */
158     /* so we have to remember which party to */
159     /* join */
160 root 1.18 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 root 1.16 /* Special DM fields */
166     tag_t *stack_items; /* Item stack for patch/dump/... commands */
167 root 1.18 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 root 1.32 /* the player can see. For maps smaller than */
170     /* MAP_CLIENT_.., the upper left is used */
171 root 1.16
172 root 1.31 shstr ACC (RW, invis_race); /* What race invisible to? */
173 root 1.13
174 root 1.36 MTH static player *create ();
175 root 1.43
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 root 1.35 void do_destroy ();
183     void gather_callbacks (AV *&callbacks, event_type event) const;
184 root 1.31
185 root 1.46 // 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 root 1.36 MTH void connect (client *ns);
190     MTH void disconnect ();
191 root 1.31
192 root 1.43 MTH void activate ();
193     MTH void deactivate ();
194    
195 root 1.48 MTH void chargen_race_done ();
196     MTH void chargen_race_next ();
197    
198 root 1.60 MTH void set_observe (object *ob);
199    
200 root 1.31 ~player ();
201    
202     private:
203     void set_object (object *op);
204     player ();
205 root 1.16 };
206 root 1.13
207 root 1.43 typedef object_vector<player, &player::active> playervec;
208    
209     extern playervec players;
210    
211     #define for_all_players(var) \
212 pippijn 1.47 for (unsigned _i = 0; _i < players.size (); ++_i) \
213 root 1.61 statementvar (player *, var, players [_i])
214 root 1.43