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.12 by root, Tue Dec 12 21:39:57 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
28#include <global.h> 29#include <global.h>
29#ifndef __CEXTRACT__
30# include <sproto.h> 30#include <sproto.h>
31#endif
32#include <spells.h> 31#include <spells.h>
33#include <skills.h> 32#include <skills.h>
34#include <newclient.h>
35#include <commands.h> 33#include <commands.h>
36 34
37int 35int
38command_invoke (object *op, char *params) 36command_invoke (object *op, char *params)
39{ 37{
104 /* Note in the code below that we make some 102 /* Note in the code below that we make some
105 * presumptions that there will be a colon in the 103 * presumptions that there will be a colon in the
106 * string. given the code above, this is always 104 * string. given the code above, this is always
107 * the case. 105 * the case.
108 */ 106 */
109 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);
110 strcpy (tmp, "asdfg"); /* Dummy string so initial compare fails */ 108 strcpy (tmp, "asdfg"); /* Dummy string so initial compare fails */
111 for (i = 0; i < num_found; i++) 109 for (i = 0; i < num_found; i++)
112 { 110 {
113 /* Different skill name, so print banner */ 111 /* Different skill name, so print banner */
114 if (strncmp (tmp, spell_sort[i], strlen (tmp))) 112 if (strncmp (tmp, spell_sort[i], strlen (tmp)))
138 136
139 if (command == 'i') 137 if (command == 'i')
140 castnow = 1; 138 castnow = 1;
141 139
142 /* Remove control of the golem */ 140 /* Remove control of the golem */
143 if (op->contr->ranges[range_golem]) 141 if (object *golem = op->contr->ranges[range_golem])
144 { 142 golem->destroy ();
145 op->contr->ranges[range_golem]->destroy ();
146 op->contr->ranges[range_golem] = 0;
147 }
148 143
149 if (params != NULL) 144 if (params)
150 { 145 {
151 int spellnumber = 0; 146 int spellnumber = 0;
152 147
153 if ((spellnumber = atoi (params))) 148 if ((spellnumber = atoi (params)))
154 for (spob = op->inv; spob && spob->count != spellnumber; spob = spob->below) 149 for (spob = op->inv; spob && spob->count != spellnumber; spob = spob->below)
221 */ 216 */
222 217
223int 218int
224legal_range (object *op, int r) 219legal_range (object *op, int r)
225{ 220{
226
227 switch (r) 221 switch (r)
228 { 222 {
229 case range_none: /* "Nothing" is always legal */ 223 case range_none: /* "Nothing" is always legal */
230 return 1; 224 return 1;
231 225
246} 240}
247 241
248void 242void
249change_spell (object *op, char k) 243change_spell (object *op, char k)
250{ 244{
251
252 do 245 do
253 { 246 {
254 op->contr->shoottype = (rangetype) (op->contr->shoottype + ((k == '+') ? 1 : -1)); 247 op->contr->shoottype = (rangetype) (op->contr->shoottype + ((k == '+') ? 1 : -1));
255 if (op->contr->shoottype >= range_size) 248 if (op->contr->shoottype >= range_size)
256 op->contr->shoottype = range_none; 249 op->contr->shoottype = range_none;
257 else if (op->contr->shoottype <= range_bottom) 250 else if (op->contr->shoottype <= range_bottom)
258 op->contr->shoottype = (rangetype) (range_size - 1); 251 op->contr->shoottype = (rangetype) (range_size - 1);
259 } 252 }
260 while (!legal_range (op, op->contr->shoottype)); 253 while (!legal_range (op, op->contr->shoottype));
261 254
262 /* Legal range has already checked that we have an appropriate item 255 /* Legal range has already checked that we have an appropriate item
263 * 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
264 * checking the status of the object. 257 * checking the status of the object.
265 */ 258 */
266 switch (op->contr->shoottype) 259 switch (op->contr->shoottype)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines