ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/friend.C
Revision: 1.31
Committed: Sun Jan 29 02:47:04 2017 UTC (7 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.30: +1 -1 lines
Log Message:
remove eol whitespace

File Contents

# User Rev Content
1 elmex 1.1 /*
2 root 1.17 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 root 1.29 *
4 root 1.30 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 root 1.24 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
6     * Copyright (©) 1992 Frank Tore Johansen
7 root 1.29 *
8 root 1.20 * Deliantra is free software: you can redistribute it and/or modify it under
9     * the terms of the Affero GNU General Public License as published by the
10     * Free Software Foundation, either version 3 of the License, or (at your
11     * option) any later version.
12 root 1.29 *
13 root 1.16 * 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 root 1.29 *
18 root 1.20 * You should have received a copy of the Affero GNU General Public License
19     * and the GNU General Public License along with this program. If not, see
20     * <http://www.gnu.org/licenses/>.
21 root 1.29 *
22 root 1.17 * The authors can be reached via e-mail to <support@deliantra.net>
23 pippijn 1.10 */
24 elmex 1.1
25     #include <global.h>
26    
27     /*
28     * Add a new friendly object to the linked list of friendly objects.
29     * No checking to see if the object is already in the linked list is done.
30     */
31 root 1.5 void
32     add_friendly_object (object *op)
33     {
34 root 1.9 op->flag [FLAG_FRIENDLY] = 1;
35    
36 root 1.5 objectlink *ol;
37 elmex 1.1
38 root 1.5 /* Add some error checking. This shouldn't happen, but the friendly
39     * object list usually isn't very long, and remove_friendly_object
40     * won't remove it either. Plus, it is easier to put a breakpoint in
41 root 1.31 * the debugger here and see where the problem is happening.
42 root 1.5 */
43 root 1.9 for (ol = first_friendly_object; ol; ol = ol->next)
44 root 1.5 {
45     if (ol->ob == op)
46     {
47 root 1.15 LOG (llevError | logBacktrace, "add_friendly_object: Trying to add object already on list (%s)\n", &op->name);
48 root 1.5 return;
49 root 1.2 }
50 elmex 1.1 }
51    
52 root 1.5 ol = first_friendly_object;
53     first_friendly_object = get_objectlink ();
54     first_friendly_object->ob = op;
55     first_friendly_object->next = ol;
56 elmex 1.1 }
57    
58     /*
59     * Removes the specified object from the linked list of friendly objects.
60     */
61 root 1.5 void
62     remove_friendly_object (object *op)
63     {
64     objectlink *obj;
65 elmex 1.1
66 root 1.26 op->clr_flag (FLAG_FRIENDLY);
67 elmex 1.1
68 root 1.11 if (op->type == GOLEM
69     && op->owner
70     && op->owner->contr
71 root 1.12 && op->owner->contr->golem == op)
72     op->owner->contr->golem = 0;
73 root 1.11
74 root 1.5 if (!first_friendly_object)
75     {
76     LOG (llevError, "remove_friendly_object called with empty friendly list, remove ob=%s\n", &op->name);
77     return;
78     }
79 root 1.9
80 root 1.5 /* if the first object happens to be the one, processing is pretty
81     * easy.
82     */
83     if (first_friendly_object->ob == op)
84     {
85     obj = first_friendly_object;
86     first_friendly_object = obj->next;
87 root 1.7 delete obj;
88 elmex 1.1 }
89 root 1.5 else
90     {
91     objectlink *prev = first_friendly_object;
92    
93 root 1.9 for (obj = first_friendly_object->next; obj; obj = obj->next)
94 root 1.5 {
95     if (obj->ob == op)
96     break;
97 root 1.11
98 root 1.5 prev = obj;
99 root 1.2 }
100 root 1.7
101 root 1.5 if (obj)
102     {
103     prev->next = obj->next;
104 root 1.7 delete obj;
105 root 1.2 }
106 elmex 1.1 }
107     }
108    
109     /* New function, MSW 2000-1-14
110     * It traverses the friendly list removing objects that should not be here
111     * (ie, do not have friendly flag set, freed, etc)
112     */
113 root 1.5 void
114 root 1.23 clean_friendly_list ()
115 root 1.5 {
116     objectlink *obj, *prev = NULL, *next;
117     int count = 0;
118    
119 root 1.7 for (obj = first_friendly_object; obj; obj = next)
120 root 1.5 {
121     next = obj->next;
122 root 1.26 if (obj->ob->flag [FLAG_FREED] || !obj->ob->flag [FLAG_FRIENDLY])
123 root 1.5 {
124     if (prev)
125 root 1.7 prev->next = obj->next;
126 root 1.5 else
127 root 1.7 first_friendly_object = obj->next;
128    
129 root 1.5 count++;
130 root 1.7 delete obj;
131 root 1.2 }
132 root 1.5 else
133 root 1.7 /* If we removed the object, then prev is still valid. */
134 root 1.5 prev = obj;
135 elmex 1.1 }
136 root 1.7
137 root 1.5 if (count)
138     LOG (llevDebug, "clean_friendly_list: Removed %d bogus links\n", count);
139 elmex 1.1 }
140