ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/player.C
Revision: 1.11
Committed: Thu Dec 21 23:37:05 2006 UTC (17 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.10: +5 -4 lines
Log Message:
- made state a per-client variable
  (that does not magically make state a per-client thing!)
- rename player->socket to player->ns. its not a good name for "client",
  but it is an historical artifact, and better than "socket".

File Contents

# User Rev Content
1 elmex 1.1 /*
2     CrossFire, A Multiplayer game for X-windows
3    
4     Copyright (C) 2002 Mark Wedel & Crossfire Development Team
5     Copyright (C) 1992 Frank Tore Johansen
6    
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20    
21 root 1.5 The authors can be reached via e-mail at <crossfire@schmorp.de>
22 elmex 1.1 */
23    
24     #include <global.h>
25     #include <funcpoint.h>
26    
27 root 1.4 void
28     free_player (player *pl)
29     {
30     if (first_player != pl)
31     {
32     player *prev = first_player;
33    
34     while (prev != NULL && prev->next != NULL && prev->next != pl)
35     prev = prev->next;
36 root 1.6
37 root 1.4 if (prev->next != pl)
38     {
39     LOG (llevError, "Free_player: Can't find previous player.\n");
40     exit (1);
41 root 1.2 }
42 root 1.6
43 root 1.4 prev->next = pl->next;
44     }
45     else
46     first_player = pl->next;
47 elmex 1.1
48 root 1.6 if (pl->ob)
49 root 1.4 {
50 root 1.6 pl->ob->contr = 0;
51     pl->ob->destroy ();
52 elmex 1.1 }
53 root 1.6
54 root 1.11 if (pl->ns)
55 root 1.10 {
56 root 1.11 pl->ns->send_packet ("goodbye");
57     pl->ns->flush ();
58     pl->ns->pl = 0;
59     pl->ns->destroy ();
60 root 1.10 }
61    
62 root 1.4 /* Clear item stack */
63     if (pl->stack_items)
64     free (pl->stack_items);
65 elmex 1.1
66 root 1.4 delete pl;
67 elmex 1.1 }
68    
69    
70     /* Determine if the attacktype represented by the
71     * specified attack-number is enabled for dragon players.
72     * A dragon player (quetzal) can gain resistances for
73     * all enabled attacktypes.
74     */
75 root 1.4 int
76     atnr_is_dragon_enabled (int attacknr)
77     {
78 elmex 1.1 if (attacknr == ATNR_MAGIC || attacknr == ATNR_FIRE ||
79 root 1.4 attacknr == ATNR_ELECTRICITY || attacknr == ATNR_COLD || attacknr == ATNR_ACID || attacknr == ATNR_POISON)
80 elmex 1.1 return 1;
81 root 1.10
82 elmex 1.1 return 0;
83     }
84    
85     /*
86     * returns true if the adressed object 'ob' is a player
87     * of the dragon race.
88     */
89 root 1.4 int
90     is_dragon_pl (const object *op)
91     {
92     if (op != NULL && op->type == PLAYER && op->arch != NULL && op->arch->clone.race != NULL && strcmp (op->arch->clone.race, "dragon") == 0)
93 elmex 1.1 return 1;
94     return 0;
95     }