ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/c_range.C
(Generate patch)

Comparing deliantra/server/server/c_range.C (file contents):
Revision 1.14 by pippijn, Sat Jan 6 14:42:30 2007 UTC vs.
Revision 1.18 by root, Tue Apr 24 12:32:16 2007 UTC

1/* 1/*
2 CrossFire, A Multiplayer game for X-windows 2 * CrossFire, A Multiplayer game
3 3 *
4 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team 4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (C) 2002 Mark Wedel & Crossfire Development Team
6 Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (C) 1992 Frank Tore Johansen
7 7 *
8 This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. 11 * (at your option) any later version.
12 12 *
13 This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 * GNU General Public License for more details.
17 17 *
18 You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 21 *
22 The authors can be reached via e-mail at <crossfire@schmorp.de> 22 * The authors can be reached via e-mail at <crossfire@schmorp.de>
23*/ 23 */
24 24
25/* This file deals with range related commands (casting, shooting, 25/* This file deals with range related commands (casting, shooting,
26 * throwing, etc. 26 * throwing, etc.
27 */ 27 */
28 28
102 /* Note in the code below that we make some 102 /* Note in the code below that we make some
103 * presumptions that there will be a colon in the 103 * presumptions that there will be a colon in the
104 * string. given the code above, this is always 104 * string. given the code above, this is always
105 * the case. 105 * the case.
106 */ 106 */
107 qsort (spell_sort, num_found, MAX_BUF, (int (*)(const void *, const void *)) strcmp); 107 qsort (spell_sort, num_found, MAX_BUF, (int (*)(const void *, const void *)) std::strcmp);
108 strcpy (tmp, "asdfg"); /* Dummy string so initial compare fails */ 108 strcpy (tmp, "asdfg"); /* Dummy string so initial compare fails */
109 for (i = 0; i < num_found; i++) 109 for (i = 0; i < num_found; i++)
110 { 110 {
111 /* Different skill name, so print banner */ 111 /* Different skill name, so print banner */
112 if (strncmp (tmp, spell_sort[i], strlen (tmp))) 112 if (strncmp (tmp, spell_sort[i], strlen (tmp)))
136 136
137 if (command == 'i') 137 if (command == 'i')
138 castnow = 1; 138 castnow = 1;
139 139
140 /* Remove control of the golem */ 140 /* Remove control of the golem */
141 if (op->contr->ranges[range_golem]) 141 if (object *golem = op->contr->ranges[range_golem])
142 { 142 golem->destroy ();
143 op->contr->ranges[range_golem]->destroy ();
144 op->contr->ranges[range_golem] = 0;
145 }
146 143
147 if (params != NULL) 144 if (params)
148 { 145 {
149 int spellnumber = 0; 146 int spellnumber = 0;
150 147
151 if ((spellnumber = atoi (params))) 148 if ((spellnumber = atoi (params)))
152 for (spob = op->inv; spob && spob->count != spellnumber; spob = spob->below) 149 for (spob = op->inv; spob && spob->count != spellnumber; spob = spob->below)
219 */ 216 */
220 217
221int 218int
222legal_range (object *op, int r) 219legal_range (object *op, int r)
223{ 220{
224
225 switch (r) 221 switch (r)
226 { 222 {
227 case range_none: /* "Nothing" is always legal */ 223 case range_none: /* "Nothing" is always legal */
228 return 1; 224 return 1;
229 225
244} 240}
245 241
246void 242void
247change_spell (object *op, char k) 243change_spell (object *op, char k)
248{ 244{
249
250 do 245 do
251 { 246 {
252 op->contr->shoottype = (rangetype) (op->contr->shoottype + ((k == '+') ? 1 : -1)); 247 op->contr->shoottype = (rangetype) (op->contr->shoottype + ((k == '+') ? 1 : -1));
253 if (op->contr->shoottype >= range_size) 248 if (op->contr->shoottype >= range_size)
254 op->contr->shoottype = range_none; 249 op->contr->shoottype = range_none;
255 else if (op->contr->shoottype <= range_bottom) 250 else if (op->contr->shoottype <= range_bottom)
256 op->contr->shoottype = (rangetype) (range_size - 1); 251 op->contr->shoottype = (rangetype) (range_size - 1);
257 } 252 }
258 while (!legal_range (op, op->contr->shoottype)); 253 while (!legal_range (op, op->contr->shoottype));
259 254
260 /* Legal range has already checked that we have an appropriate item 255 /* Legal range has already checked that we have an appropriate item
261 * that uses the slot, so we don't need to be too careful about 256 * that uses the slot, so we don't need to be too careful about
262 * checking the status of the object. 257 * checking the status of the object.
263 */ 258 */
264 switch (op->contr->shoottype) 259 switch (op->contr->shoottype)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines