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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines